From 857d6ca063f1a4dcd0946e1661df6664ce32f2b0 Mon Sep 17 00:00:00 2001 From: lihongjie0209 Date: Mon, 25 Mar 2024 17:06:48 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E8=AE=BE=E5=A4=87=E5=8E=82?= =?UTF-8?q?=E5=AE=B6=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/EmDeviceController.java | 7 ++ .../emDevice/dto/FetchHisDataRequest.java | 16 ++++ .../emDevice/service/EmDeviceService.java | 85 +++++++++++++++++++ .../dto/UpdateEmDeviceSupplierDto.java | 9 +- 4 files changed, 116 insertions(+), 1 deletion(-) create mode 100644 src/main/java/cn/lihongjie/coal/emDevice/dto/FetchHisDataRequest.java diff --git a/src/main/java/cn/lihongjie/coal/emDevice/controller/EmDeviceController.java b/src/main/java/cn/lihongjie/coal/emDevice/controller/EmDeviceController.java index 39782a1f..5d8fa12f 100644 --- a/src/main/java/cn/lihongjie/coal/emDevice/controller/EmDeviceController.java +++ b/src/main/java/cn/lihongjie/coal/emDevice/controller/EmDeviceController.java @@ -6,6 +6,7 @@ import cn.lihongjie.coal.base.dto.CommonQuery; import cn.lihongjie.coal.base.dto.IdRequest; import cn.lihongjie.coal.emDevice.dto.CreateEmDeviceDto; import cn.lihongjie.coal.emDevice.dto.EmDeviceDto; +import cn.lihongjie.coal.emDevice.dto.FetchHisDataRequest; import cn.lihongjie.coal.emDevice.dto.UpdateEmDeviceDto; import cn.lihongjie.coal.emDevice.service.EmDeviceService; @@ -52,6 +53,12 @@ public class EmDeviceController { return this.service.list(request); } + + @PostMapping("/fetchHisData") + public Object fetchHisData(@RequestBody FetchHisDataRequest request) { + this.service.fetchHisData(request); + return true; + } @PostMapping("/archive") public Object archive(@RequestBody IdRequest request) { this.service.archive(request); diff --git a/src/main/java/cn/lihongjie/coal/emDevice/dto/FetchHisDataRequest.java b/src/main/java/cn/lihongjie/coal/emDevice/dto/FetchHisDataRequest.java new file mode 100644 index 00000000..0f94445a --- /dev/null +++ b/src/main/java/cn/lihongjie/coal/emDevice/dto/FetchHisDataRequest.java @@ -0,0 +1,16 @@ +package cn.lihongjie.coal.emDevice.dto; + +import cn.lihongjie.coal.base.dto.OrgCommonDto; + +import lombok.Data; + +import java.time.LocalDateTime; +import java.util.*; + +@Data +public class FetchHisDataRequest extends OrgCommonDto { + + private List ids; + private LocalDateTime startTime; + private LocalDateTime endTime; +} 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 c35d19b1..fa94996e 100644 --- a/src/main/java/cn/lihongjie/coal/emDevice/service/EmDeviceService.java +++ b/src/main/java/cn/lihongjie/coal/emDevice/service/EmDeviceService.java @@ -9,6 +9,7 @@ import cn.lihongjie.coal.dbFunctions.DbFunctionService; import cn.lihongjie.coal.emDevice.client.DustApi; import cn.lihongjie.coal.emDevice.dto.CreateEmDeviceDto; import cn.lihongjie.coal.emDevice.dto.EmDeviceDto; +import cn.lihongjie.coal.emDevice.dto.FetchHisDataRequest; import cn.lihongjie.coal.emDevice.dto.UpdateEmDeviceDto; import cn.lihongjie.coal.emDevice.entity.EmDeviceEntity; import cn.lihongjie.coal.emDevice.mapper.EmDeviceMapper; @@ -32,6 +33,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -137,6 +139,89 @@ public class EmDeviceService extends BaseService all = this.repository.findAllById(request.getIds()); + + 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 hisData; + 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"))); + + } catch (Exception e) { + log.error("get his data error {} ", deviceIds, e); + continue; + } + + String code = hisData.code(); + if (ObjectUtils.notEqual(code, "1000")) { + log.error( + "get his data error {} {} {}", + hisData.code(), + hisData.message(), + hisData.data()); + continue; + } + + List data = hisData.data(); + + if (CollectionUtils.isEmpty(data)) { + log.error( + "get his data empty {} {} {}", + hisData.code(), + hisData.message(), + hisData.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 his data success {} ", deviceIds); + } + + } + public void queryRealtimeData() { List all = this.repository.findAll(); diff --git a/src/main/java/cn/lihongjie/coal/emDeviceSupplier/dto/UpdateEmDeviceSupplierDto.java b/src/main/java/cn/lihongjie/coal/emDeviceSupplier/dto/UpdateEmDeviceSupplierDto.java index 7f1ddc48..09569b09 100644 --- a/src/main/java/cn/lihongjie/coal/emDeviceSupplier/dto/UpdateEmDeviceSupplierDto.java +++ b/src/main/java/cn/lihongjie/coal/emDeviceSupplier/dto/UpdateEmDeviceSupplierDto.java @@ -5,4 +5,11 @@ import cn.lihongjie.coal.base.dto.OrgCommonDto; import lombok.Data; @Data -public class UpdateEmDeviceSupplierDto extends OrgCommonDto {} +public class UpdateEmDeviceSupplierDto extends OrgCommonDto { + + private String contact; + + private String contactPhone; + + private String address; +}