完善设备管理

This commit is contained in:
2024-08-28 09:49:19 +08:00
parent 18b0ff5016
commit cf58954f11
3 changed files with 83 additions and 3 deletions

View File

@@ -211,6 +211,51 @@ public class JpaUtils {
return (entityManager.createQuery(query));
}
public static boolean hasDuplicate(
EntityManager entityManager,
Class clazz,
String fieldName,
Object value) {
return hasDuplicate(entityManager, clazz, fieldName, value, null, null);
}
public static boolean hasDuplicate(
EntityManager entityManager,
Class clazz,
String fieldName,
Object value,
String selfId) {
return hasDuplicate(entityManager, clazz, fieldName, value, null, selfId);
}
public static boolean hasDuplicate(
EntityManager entityManager,
Class clazz,
String fieldName,
Object value,
String organizationId,
String selfId) {
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery<Long> query = builder.createQuery(Long.class);
Root root = query.from(clazz);
query.select(builder.count(root));
ArrayList<Predicate> wheres = new ArrayList<>();
wheres.add(builder.equal(root.get(fieldName), value));
if (StringUtils.isNotEmpty(organizationId)) {
wheres.add(builder.equal(root.get("organizationId"), organizationId));
}
if (StringUtils.isNotEmpty(selfId)) {
wheres.add(builder.notEqual(root.get("id"), selfId));
}
query.where(wheres.toArray(new Predicate[0]));
return entityManager.createQuery(query).getSingleResult() > 0;
}
public static <S extends T> Page<S> readPage(
EntityManager entityManager,
TypedQuery<S> query,

View File

@@ -33,6 +33,8 @@ import org.springframework.transaction.annotation.Transactional;
import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
/**
* {"code":200,"msg":"","data":{"list":[{"MeterID":"N\/A","MeterPureFlow":"N\/D","MeterPositiveFlow":"4990.1","MeterNegativeFlow":"0","MeterFlowRate":"0","MeterFlowSpeed":"N\/A","AINPressure":"N\/D","AINPressure2":"N\/D","IMEI":"868558065671560","ComType":"CAT1","CSQ":"16","BatteryVoltage":"3.66","DCVoltage":"0","Model":"NT800-BK","Remarks":"\u827a\u949f\u517b\u6b96\u573a","ProductID":"1119221642","LastOnlineDate":"2024-08-27
@@ -132,6 +134,17 @@ public class YbIotListener {
ArrayList<MeterLogEntity> entities = new ArrayList<>();
List<String> productIds =
StreamSupport.stream(list.spliterator(), false)
.map(x -> x.get("ProductId").asText())
.toList();
List<MeterEntity> meters = meterService.findByProductIDs(productIds);
Map<String, MeterEntity> meterMap =
meters.stream()
.collect(Collectors.toMap(e -> e.getYbiotDeviceId(), e -> e));
for (JsonNode node : list) {
MeterLogEntity entity = new MeterLogEntity();
@@ -169,7 +182,7 @@ public class YbIotListener {
entity.setValue(meterPositiveFlow);
MeterEntity meter = meterService.findByProductID(productID);
MeterEntity meter = meterMap.get(productID);
if (meter == null) {
log.error("meter not found: {}", productID);

View File

@@ -3,6 +3,7 @@ package cn.lihongjie.coal.meter.service;
import cn.lihongjie.coal.base.dto.CommonQuery;
import cn.lihongjie.coal.base.dto.IdRequest;
import cn.lihongjie.coal.base.service.BaseService;
import cn.lihongjie.coal.common.JpaUtils;
import cn.lihongjie.coal.exception.BizException;
import cn.lihongjie.coal.meter.dto.CreateMeterDto;
import cn.lihongjie.coal.meter.dto.MeterDto;
@@ -37,15 +38,32 @@ class MeterService extends BaseService<MeterEntity, MeterRepository> {
@Autowired private ConversionService conversionService;
@PersistenceContext EntityManager em;
public MeterDto create(CreateMeterDto request) {
MeterEntity entity = mapper.toEntity(request);
boolean duplicate = JpaUtils.hasDuplicate(em, MeterEntity.class, "ybiotDeviceId", entity.getYbiotDeviceId());
if (duplicate) {
throw new BizException("ybIot云平台设备ID已存在");
}
this.repository.save(entity);
return getById(entity.getId());
}
public MeterDto update(UpdateMeterDto request) {
MeterEntity entity = this.repository.get(request.getId());
boolean duplicate = JpaUtils.hasDuplicate(em, MeterEntity.class, "ybiotDeviceId", request.getYbiotDeviceId(), request.getId());
if (duplicate) {
throw new BizException("ybIot云平台设备ID已存在");
}
this.mapper.updateEntity(entity, request);
this.repository.save(entity);
@@ -80,8 +98,6 @@ class MeterService extends BaseService<MeterEntity, MeterRepository> {
return page.map(this.mapper::toDto);
}
@PersistenceContext
EntityManager em;
public MeterEntity findByProductID(String productID) {
@@ -91,4 +107,10 @@ class MeterService extends BaseService<MeterEntity, MeterRepository> {
return list.isEmpty() ? null : list.get(0);
}
public List<MeterEntity> findByProductIDs(List<String> productIds) {
return em.createQuery("select m from MeterEntity m where m.ybiotDeviceId in :productIds", MeterEntity.class)
.setParameter("productIds", productIds)
.getResultList();
}
}