mirror of
https://codeup.aliyun.com/64f7d6b8ce01efaafef1e678/coal/coal.git
synced 2026-01-25 23:57:12 +08:00
完善设备管理
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user