From 0d16349beb0ab8468345a7930293f93660f31c0e Mon Sep 17 00:00:00 2001 From: lihongjie0209 Date: Tue, 26 Mar 2024 23:08:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E7=8E=AF=E4=BF=9D=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E7=9B=91=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../coal/common/LocalDateTImeConverter.java | 5 + .../coal/emDevice/dto/CreateEmDeviceDto.java | 3 + .../coal/emDevice/dto/EmDeviceDto.java | 3 + .../coal/emDevice/dto/UpdateEmDeviceDto.java | 3 + .../coal/emDevice/entity/EmDeviceEntity.java | 4 + .../repository/EmDeviceRepository.java | 13 +- .../emDevice/service/EmDeviceService.java | 234 +++++++++++------- .../dto/CreateEmDeviceDataDto.java | 2 +- .../emDeviceData/dto/EmDeviceDataDto.java | 3 +- .../dto/UpdateEmDeviceDataDto.java | 2 +- .../entity/EmDeviceDataEntity.java | 9 +- .../mapper/EmDeviceDataMapper.java | 2 +- .../service/EmDeviceDataService.java | 4 +- .../service/ThirdAccountService.java | 3 + 14 files changed, 192 insertions(+), 98 deletions(-) diff --git a/src/main/java/cn/lihongjie/coal/common/LocalDateTImeConverter.java b/src/main/java/cn/lihongjie/coal/common/LocalDateTImeConverter.java index b38c1cec..1667b3fb 100644 --- a/src/main/java/cn/lihongjie/coal/common/LocalDateTImeConverter.java +++ b/src/main/java/cn/lihongjie/coal/common/LocalDateTImeConverter.java @@ -19,7 +19,12 @@ public class LocalDateTImeConverter implements Converter return LocalDateTime.parse(source); } catch (Exception e) { + try{ + return LocalDateTime.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + }catch (Exception exception){ + return LocalDateTime.parse(source, DateTimeFormatter.ofPattern("yyyy-MM-dd")); + } } } } diff --git a/src/main/java/cn/lihongjie/coal/emDevice/dto/CreateEmDeviceDto.java b/src/main/java/cn/lihongjie/coal/emDevice/dto/CreateEmDeviceDto.java index 66db35f3..f378aeab 100644 --- a/src/main/java/cn/lihongjie/coal/emDevice/dto/CreateEmDeviceDto.java +++ b/src/main/java/cn/lihongjie/coal/emDevice/dto/CreateEmDeviceDto.java @@ -35,5 +35,8 @@ public class CreateEmDeviceDto extends OrgCommonDto { private String location; private List itemConfig; + + @Comment("采集间隔(分钟)") + private Integer interval; } diff --git a/src/main/java/cn/lihongjie/coal/emDevice/dto/EmDeviceDto.java b/src/main/java/cn/lihongjie/coal/emDevice/dto/EmDeviceDto.java index c93f2aca..3e5ce23d 100644 --- a/src/main/java/cn/lihongjie/coal/emDevice/dto/EmDeviceDto.java +++ b/src/main/java/cn/lihongjie/coal/emDevice/dto/EmDeviceDto.java @@ -31,4 +31,7 @@ public class EmDeviceDto extends OrgCommonDto { private String archiveStatusName; private List itemConfig; + @Comment("采集间隔(分钟)") + private Integer interval; + } diff --git a/src/main/java/cn/lihongjie/coal/emDevice/dto/UpdateEmDeviceDto.java b/src/main/java/cn/lihongjie/coal/emDevice/dto/UpdateEmDeviceDto.java index 673722e4..f7c9e280 100644 --- a/src/main/java/cn/lihongjie/coal/emDevice/dto/UpdateEmDeviceDto.java +++ b/src/main/java/cn/lihongjie/coal/emDevice/dto/UpdateEmDeviceDto.java @@ -35,4 +35,7 @@ public class UpdateEmDeviceDto extends OrgCommonDto { private String location; private List itemConfig; + @Comment("采集间隔(分钟)") + private Integer interval; + } diff --git a/src/main/java/cn/lihongjie/coal/emDevice/entity/EmDeviceEntity.java b/src/main/java/cn/lihongjie/coal/emDevice/entity/EmDeviceEntity.java index f1ada3c5..34a0af3e 100644 --- a/src/main/java/cn/lihongjie/coal/emDevice/entity/EmDeviceEntity.java +++ b/src/main/java/cn/lihongjie/coal/emDevice/entity/EmDeviceEntity.java @@ -54,4 +54,8 @@ public class EmDeviceEntity extends OrgCommonEntity { @ElementCollection private List itemConfig; + + + @Comment("采集间隔(分钟)") + private Integer interval; } diff --git a/src/main/java/cn/lihongjie/coal/emDevice/repository/EmDeviceRepository.java b/src/main/java/cn/lihongjie/coal/emDevice/repository/EmDeviceRepository.java index fd097226..10df4026 100644 --- a/src/main/java/cn/lihongjie/coal/emDevice/repository/EmDeviceRepository.java +++ b/src/main/java/cn/lihongjie/coal/emDevice/repository/EmDeviceRepository.java @@ -3,7 +3,18 @@ package cn.lihongjie.coal.emDevice.repository; import cn.lihongjie.coal.base.dao.BaseRepository; import cn.lihongjie.coal.emDevice.entity.EmDeviceEntity; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository -public interface EmDeviceRepository extends BaseRepository {} +public interface EmDeviceRepository extends BaseRepository { + @Query( + value = + "select d.id\n" + + "from t_em_device d\n" + + "where (select max(time) from t_em_device_data data where data.device_id = d.id) + (d.\"interval\" * interval '1 minute') >= now()", + nativeQuery = true) + List findNeedToFetchDevice(); +} diff --git a/src/main/java/cn/lihongjie/coal/emDevice/service/EmDeviceService.java b/src/main/java/cn/lihongjie/coal/emDevice/service/EmDeviceService.java index fa94996e..5b141a9e 100644 --- a/src/main/java/cn/lihongjie/coal/emDevice/service/EmDeviceService.java +++ b/src/main/java/cn/lihongjie/coal/emDevice/service/EmDeviceService.java @@ -19,6 +19,9 @@ import cn.lihongjie.coal.emDeviceData.mapper.EmDeviceDataMapper; import cn.lihongjie.coal.emDeviceData.service.EmDeviceDataService; import cn.lihongjie.coal.exception.BizException; +import jakarta.persistence.EntityManager; +import jakarta.persistence.PersistenceContext; + import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; @@ -137,14 +140,13 @@ public class EmDeviceService extends BaseService StringUtils.isNotEmpty(x.getCode())) .collect(Collectors.groupingBy(d -> d.getThirdAccount().getId())); - Map codeMap = all.stream().collect(Collectors.toMap(e -> e.getCode(), e -> e)); + Map codeMap = + all.stream().collect(Collectors.toMap(e -> e.getCode(), e -> e)); for (List devices : groupByAccount.values()) { DustApi.GetRealtimeDataResponse hisData; - String deviceIds = devices.stream().map(CommonEntity::getCode).collect(Collectors.joining(",")); + String deviceIds = + devices.stream().map(CommonEntity::getCode).collect(Collectors.joining(",")); try { - hisData = dustApi.getHistoryData(devices.get(0).getThirdAccount().getToken(), deviceIds, request.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), request.getEndTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + hisData = + dustApi.getHistoryData( + devices.get(0).getThirdAccount().getToken(), + deviceIds, + request.getStartTime() + .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), + request.getEndTime() + .format( + DateTimeFormatter.ofPattern( + "yyyy-MM-dd HH:mm:ss"))); } catch (Exception e) { log.error("get his data error {} ", deviceIds, e); @@ -195,107 +208,148 @@ public class EmDeviceService extends BaseService realTimeCode = data.stream().map(DustApi.DeviceData::deviceId).collect(Collectors.toList()); - List deviceCode = devices.stream().map(CommonEntity::getCode).collect(Collectors.toList()); + List realTimeCode = + data.stream() + .map(DustApi.DeviceData::deviceId) + .collect(Collectors.toList()); + List deviceCode = + devices.stream().map(CommonEntity::getCode).collect(Collectors.toList()); - log.info("device code not match {} - {} = {}", deviceCode, realTimeCode, CollectionUtils.removeAll(deviceCode, realTimeCode)); + log.info( + "device code not match {} - {} = {}", + deviceCode, + realTimeCode, + CollectionUtils.removeAll(deviceCode, realTimeCode)); } - List collect = data.stream().map(x -> { + List collect = + data.stream() + .map( + x -> { + EmDeviceDataEntity emDeviceData = new EmDeviceDataEntity(); + emDeviceData.setDevice( + em.getReference( + EmDeviceEntity.class, + codeMap.get(x.deviceId()).getId())); + emDeviceData.setOrganizationId( + codeMap.get(x.deviceId()).getOrganizationId()); + emDeviceData.setTime(LocalDateTime.now()); + emDeviceDataMapper.updateEntity(emDeviceData, x); - - EmDeviceDataEntity emDeviceData = new EmDeviceDataEntity(); - emDeviceData.setDeviceId(codeMap.get(x.deviceId()).getId()); - emDeviceData.setOrganizationId(codeMap.get(x.deviceId()).getOrganizationId()); - emDeviceData.setTime(LocalDateTime.now()); - emDeviceDataMapper.updateEntity(emDeviceData, x); - - - return emDeviceData; - - }).collect(Collectors.toList()); + return emDeviceData; + }) + .collect(Collectors.toList()); emDeviceDataService.saveAll(collect); log.info("get his data success {} ", deviceIds); } - } public void queryRealtimeData() { - List all = this.repository.findAll(); + try { - Map> groupByAccount = - all.stream() - .filter(x -> x.getThirdAccount() != null) - .filter(x -> StringUtils.isNotEmpty(x.getCode())) - .collect(Collectors.groupingBy(d -> d.getThirdAccount().getId())); + List ids = this.repository.findNeedToFetchDevice(); - Map codeMap = all.stream().collect(Collectors.toMap(e -> e.getCode(), e -> e)); - - for (List devices : groupByAccount.values()) { - - DustApi.GetRealtimeDataResponse realtimeData; - String deviceIds = devices.stream().map(CommonEntity::getCode).collect(Collectors.joining(",")); - - try { - - realtimeData = dustApi.getRealtimeData(devices.get(0).getThirdAccount().getToken() ,deviceIds); - - } catch (Exception e) { - log.error("get realtime data error {} ", deviceIds, e); - continue; + if (CollectionUtils.isEmpty(ids)) { + log.info("no need to fetch data"); + return; } + var all = this.repository.findAllById(ids); - String code = realtimeData.code(); - if (ObjectUtils.notEqual(code, "1000")) { - log.error( - "get realtime data error {} {} {}", - realtimeData.code(), - realtimeData.message(), - realtimeData.data()); - continue; + Map> groupByAccount = + all.stream() + .filter(x -> x.getThirdAccount() != null) + .filter(x -> StringUtils.isNotEmpty(x.getCode())) + .collect(Collectors.groupingBy(d -> d.getThirdAccount().getId())); + + Map codeMap = + all.stream().collect(Collectors.toMap(e -> e.getCode(), e -> e)); + + for (List devices : groupByAccount.values()) { + + DustApi.GetRealtimeDataResponse realtimeData; + String deviceIds = + devices.stream() + .map(CommonEntity::getCode) + .collect(Collectors.joining(",")); + + try { + + realtimeData = + dustApi.getRealtimeData( + devices.get(0).getThirdAccount().getToken(), deviceIds); + + } catch (Exception e) { + log.error("get realtime data error {} ", deviceIds, e); + continue; + } + + String code = realtimeData.code(); + if (ObjectUtils.notEqual(code, "1000")) { + log.error( + "get realtime data error {} {} {}", + realtimeData.code(), + realtimeData.message(), + realtimeData.data()); + continue; + } + + List data = realtimeData.data(); + + if (CollectionUtils.isEmpty(data)) { + log.error( + "get realtime data empty {} {} {}", + realtimeData.code(), + realtimeData.message(), + realtimeData.data()); + continue; + } + + if (data.size() != devices.size()) { + + List realTimeCode = + data.stream() + .map(DustApi.DeviceData::deviceId) + .collect(Collectors.toList()); + List deviceCode = + devices.stream() + .map(CommonEntity::getCode) + .collect(Collectors.toList()); + + log.info( + "device code not match {} - {} = {}", + deviceCode, + realTimeCode, + CollectionUtils.removeAll(deviceCode, realTimeCode)); + } + + List collect = + data.stream() + .map( + x -> { + EmDeviceDataEntity emDeviceData = + new EmDeviceDataEntity(); + emDeviceData.setDevice( + em.getReference( + EmDeviceEntity.class, + codeMap.get(x.deviceId()).getId())); + emDeviceData.setOrganizationId( + codeMap.get(x.deviceId()).getOrganizationId()); + emDeviceData.setTime(LocalDateTime.now()); + emDeviceDataMapper.updateEntity(emDeviceData, x); + + return emDeviceData; + }) + .collect(Collectors.toList()); + + emDeviceDataService.saveAll(collect); + + log.info("get realtime data success {} ", deviceIds); } - - List data = realtimeData.data(); - - if (CollectionUtils.isEmpty(data)) { - log.error( - "get realtime data empty {} {} {}", - realtimeData.code(), - realtimeData.message(), - realtimeData.data()); - continue; - } - - if (data.size() != devices.size()){ - - List realTimeCode = data.stream().map(DustApi.DeviceData::deviceId).collect(Collectors.toList()); - List deviceCode = devices.stream().map(CommonEntity::getCode).collect(Collectors.toList()); - - log.info("device code not match {} - {} = {}",deviceCode, realTimeCode, CollectionUtils.removeAll(deviceCode, realTimeCode)); - } - - List collect = data.stream().map(x -> { - - - EmDeviceDataEntity emDeviceData = new EmDeviceDataEntity(); - emDeviceData.setDeviceId(codeMap.get(x.deviceId()).getId()); - emDeviceData.setOrganizationId(codeMap.get(x.deviceId()).getOrganizationId()); - emDeviceData.setTime(LocalDateTime.now()); - emDeviceDataMapper.updateEntity(emDeviceData, x); - - - return emDeviceData; - - }).collect(Collectors.toList()); - - emDeviceDataService.saveAll(collect); - - log.info("get realtime data success {} ", deviceIds); + } catch (Exception e) { + log.error("query realtime data error", e); } } - - } diff --git a/src/main/java/cn/lihongjie/coal/emDeviceData/dto/CreateEmDeviceDataDto.java b/src/main/java/cn/lihongjie/coal/emDeviceData/dto/CreateEmDeviceDataDto.java index 676c48d0..628e4a0b 100644 --- a/src/main/java/cn/lihongjie/coal/emDeviceData/dto/CreateEmDeviceDataDto.java +++ b/src/main/java/cn/lihongjie/coal/emDeviceData/dto/CreateEmDeviceDataDto.java @@ -11,7 +11,7 @@ import java.time.LocalDateTime; @Data public class CreateEmDeviceDataDto extends OrgCommonDto { - private String deviceId; + private String device; private LocalDateTime time; diff --git a/src/main/java/cn/lihongjie/coal/emDeviceData/dto/EmDeviceDataDto.java b/src/main/java/cn/lihongjie/coal/emDeviceData/dto/EmDeviceDataDto.java index 44e1371a..d4c11e7f 100644 --- a/src/main/java/cn/lihongjie/coal/emDeviceData/dto/EmDeviceDataDto.java +++ b/src/main/java/cn/lihongjie/coal/emDeviceData/dto/EmDeviceDataDto.java @@ -1,6 +1,7 @@ package cn.lihongjie.coal.emDeviceData.dto; import cn.lihongjie.coal.base.dto.OrgCommonDto; +import cn.lihongjie.coal.emDevice.dto.EmDeviceDto; import lombok.Data; @@ -11,7 +12,7 @@ import java.time.LocalDateTime; @Data public class EmDeviceDataDto extends OrgCommonDto { - private String deviceId; + private EmDeviceDto device; private LocalDateTime time; diff --git a/src/main/java/cn/lihongjie/coal/emDeviceData/dto/UpdateEmDeviceDataDto.java b/src/main/java/cn/lihongjie/coal/emDeviceData/dto/UpdateEmDeviceDataDto.java index 8450f0f0..9b35eb79 100644 --- a/src/main/java/cn/lihongjie/coal/emDeviceData/dto/UpdateEmDeviceDataDto.java +++ b/src/main/java/cn/lihongjie/coal/emDeviceData/dto/UpdateEmDeviceDataDto.java @@ -10,7 +10,7 @@ import java.time.LocalDateTime; @Data public class UpdateEmDeviceDataDto extends OrgCommonDto { - private String deviceId; + private String device; private LocalDateTime time; diff --git a/src/main/java/cn/lihongjie/coal/emDeviceData/entity/EmDeviceDataEntity.java b/src/main/java/cn/lihongjie/coal/emDeviceData/entity/EmDeviceDataEntity.java index cf2bc3b3..6b7d3003 100644 --- a/src/main/java/cn/lihongjie/coal/emDeviceData/entity/EmDeviceDataEntity.java +++ b/src/main/java/cn/lihongjie/coal/emDeviceData/entity/EmDeviceDataEntity.java @@ -1,8 +1,12 @@ package cn.lihongjie.coal.emDeviceData.entity; +import cn.lihongjie.coal.annotation.HyperTable; import cn.lihongjie.coal.base.entity.OrgCommonEntity; +import cn.lihongjie.coal.emDevice.entity.EmDeviceEntity; import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.ManyToOne; import lombok.Data; @@ -17,9 +21,12 @@ import java.time.LocalDateTime; */ @Data @Entity +@HyperTable public class EmDeviceDataEntity extends OrgCommonEntity { - private String deviceId; + + @ManyToOne(fetch = FetchType.LAZY) + private EmDeviceEntity device; private LocalDateTime time; diff --git a/src/main/java/cn/lihongjie/coal/emDeviceData/mapper/EmDeviceDataMapper.java b/src/main/java/cn/lihongjie/coal/emDeviceData/mapper/EmDeviceDataMapper.java index 7cee93f1..bda38ead 100644 --- a/src/main/java/cn/lihongjie/coal/emDeviceData/mapper/EmDeviceDataMapper.java +++ b/src/main/java/cn/lihongjie/coal/emDeviceData/mapper/EmDeviceDataMapper.java @@ -27,7 +27,7 @@ public interface EmDeviceDataMapper UpdateEmDeviceDataDto> { @Mappings( { @Mapping(target = "status", ignore = true), - @Mapping(target = "deviceId", ignore = true)} + @Mapping(target = "device", ignore = true)} ) void updateEntity(@MappingTarget EmDeviceDataEntity emDeviceData, DustApi.DeviceData x); } diff --git a/src/main/java/cn/lihongjie/coal/emDeviceData/service/EmDeviceDataService.java b/src/main/java/cn/lihongjie/coal/emDeviceData/service/EmDeviceDataService.java index 94e0b9ee..7aadcb2f 100644 --- a/src/main/java/cn/lihongjie/coal/emDeviceData/service/EmDeviceDataService.java +++ b/src/main/java/cn/lihongjie/coal/emDeviceData/service/EmDeviceDataService.java @@ -94,13 +94,13 @@ public class EmDeviceDataService extends BaseService itemConfig = device.getItemConfig(); for (EmDeviceItemConfig config : itemConfig) { - if (!config.getEnable() || !config.getEnableAlter()) { + if (config.getEnable()!=null && !config.getEnable() || !config.getEnableAlter()) { continue; } Object value = PropertyUtils.getProperty(data, config.getCode()); diff --git a/src/main/java/cn/lihongjie/coal/thirdAccount/service/ThirdAccountService.java b/src/main/java/cn/lihongjie/coal/thirdAccount/service/ThirdAccountService.java index ed5491b1..3bc5a6cb 100644 --- a/src/main/java/cn/lihongjie/coal/thirdAccount/service/ThirdAccountService.java +++ b/src/main/java/cn/lihongjie/coal/thirdAccount/service/ThirdAccountService.java @@ -43,6 +43,7 @@ public class ThirdAccountService extends BaseService