diff --git a/iot-analysis/analysis-zl-event/zl-event-api/src/main/java/com/njcn/zlevent/pojo/dto/TimeSyncRequestDTO.java b/iot-analysis/analysis-zl-event/zl-event-api/src/main/java/com/njcn/zlevent/pojo/dto/TimeSyncRequestDTO.java new file mode 100644 index 0000000..f48f3d4 --- /dev/null +++ b/iot-analysis/analysis-zl-event/zl-event-api/src/main/java/com/njcn/zlevent/pojo/dto/TimeSyncRequestDTO.java @@ -0,0 +1,56 @@ +package com.njcn.zlevent.pojo.dto; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +import java.util.Map; + +/** + * @author caozehui + * @data 2026-04-27 + */ +@Data +public class TimeSyncRequestDTO { + + /** + * 消息请求的唯一标识 + */ + @JSONField(name = "guid") + private String guid; + + /** + * 设备ID + */ + @JSONField(name = "Dev_id") + private String devId; + + /** + * 前置Id + */ + @JSONField(name = "FrontId") + private String frontId; + + /** + * 前置进程号 + */ + @JSONField(name = "Node") + private Integer node; + + @JSONField(name = "Detail") + private TimeSyncRequestDTO.Detail detail; + + @Data + public static class Detail { + /** + * 数据类型,代表特定功能 + */ + @JSONField(name = "Type") + private Integer type; + + /** + * 详情 + */ + @JSONField(name = "Msg") + private Map msg; + } +} diff --git a/iot-analysis/analysis-zl-event/zl-event-api/src/main/java/com/njcn/zlevent/pojo/dto/UpgradeRequestDTO.java b/iot-analysis/analysis-zl-event/zl-event-api/src/main/java/com/njcn/zlevent/pojo/dto/UpgradeRequestDTO.java index 8a7221e..05cf887 100644 --- a/iot-analysis/analysis-zl-event/zl-event-api/src/main/java/com/njcn/zlevent/pojo/dto/UpgradeRequestDTO.java +++ b/iot-analysis/analysis-zl-event/zl-event-api/src/main/java/com/njcn/zlevent/pojo/dto/UpgradeRequestDTO.java @@ -50,6 +50,12 @@ public class UpgradeRequestDTO { * 详情 */ @JSONField(name = "Msg") - private Map msg; + private UpgradeRequestDTO.Msg msg; + } + + @Data + public static class Msg { + @JSONField(name = "Name") + private String name; } } diff --git a/iot-analysis/analysis-zl-event/zl-event-boot/src/main/java/com/njcn/zlevent/service/impl/DeviceServiceImpl.java b/iot-analysis/analysis-zl-event/zl-event-boot/src/main/java/com/njcn/zlevent/service/impl/DeviceServiceImpl.java index de9ec3e..3677e53 100644 --- a/iot-analysis/analysis-zl-event/zl-event-boot/src/main/java/com/njcn/zlevent/service/impl/DeviceServiceImpl.java +++ b/iot-analysis/analysis-zl-event/zl-event-boot/src/main/java/com/njcn/zlevent/service/impl/DeviceServiceImpl.java @@ -8,10 +8,12 @@ import com.njcn.access.enums.TypeEnum; import com.njcn.access.utils.SendMessageUtil; import com.njcn.csdevice.api.CsEdDataFeignClient; import com.njcn.csdevice.api.CsSoftInfoFeignClient; +import com.njcn.csdevice.api.CsUpgradeLogsFeignClient; import com.njcn.csdevice.api.EquipmentFeignClient; import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO; +import com.njcn.csdevice.pojo.po.CsEdDataPO; import com.njcn.csdevice.pojo.po.CsSoftInfoPO; -import com.njcn.csdevice.pojo.vo.CsEdDataVO; +import com.njcn.csdevice.pojo.po.CsUpgradeLogs; import com.njcn.middle.rocket.domain.BaseMessage; import com.njcn.oss.utils.FileStorageUtil; import com.njcn.redis.pojo.enums.AppRedisKey; @@ -23,7 +25,6 @@ import com.njcn.zlevent.service.IDeviceService; import lombok.AllArgsConstructor; import org.springframework.stereotype.Service; -import java.time.ZoneId; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -46,6 +47,7 @@ public class DeviceServiceImpl implements IDeviceService { private final RedisUtil redisUtil; private final MqttPublisher publisher; private final FileStorageUtil fileStorageUtil; + private final CsUpgradeLogsFeignClient csUpgradeLogsFeignClient; @Override public void startWorkingLog(String devId) { @@ -98,9 +100,9 @@ public class DeviceServiceImpl implements IDeviceService { @Override public boolean timeSync(String devId) { -// List listHttpResult = equipmentFeignClient.queryDeviceById(Collections.singletonList(devId)).getData(); -// -// BaseMessage message = new BaseMessage(); + List listHttpResult = equipmentFeignClient.queryDeviceById(Collections.singletonList(devId)).getData(); + + BaseMessage message = new BaseMessage(); // FileDownloadRequestDTO requestDTO = new FileDownloadRequestDTO(); // requestDTO.setGuid(listHttpResult.get(0).getNodeId()); // requestDTO.setNode(listHttpResult.get(0).getNodeProcess()); @@ -181,97 +183,75 @@ public class DeviceServiceImpl implements IDeviceService { List listHttpResult = equipmentFeignClient.queryDeviceById(Collections.singletonList(devId)).getData(); CsEquipmentDeliveryDTO csEquipmentDeliveryDTO = listHttpResult.get(0); - CsEdDataVO csEdDataVO = csEdDataFeignClient.findByDevTypeId(edDataId).getData(); - String filePath = csEdDataVO.getFilePath(); + CsEdDataPO csEdDataPO = csEdDataFeignClient.getById(edDataId).getData(); + String filePath = csEdDataPO.getFilePath(); - FileUploadRequestDTO fileUploadRequestDTO = new FileUploadRequestDTO(); - fileUploadRequestDTO.setDevId(devId); - fileUploadRequestDTO.setGuid(IdUtil.simpleUUID()); - fileUploadRequestDTO.setNode(csEquipmentDeliveryDTO.getNodeProcess()); - fileUploadRequestDTO.setFrontId(csEquipmentDeliveryDTO.getNodeId()); + // 装置升级日志 + CsUpgradeLogs csUpgradeLogs = new CsUpgradeLogs(); + csUpgradeLogs.setDevId(devId); + csUpgradeLogs.setVersionNo(csEdDataPO.getVersionNo()); + csUpgradeLogs.setResult(0); - FileUploadRequestDTO.Detail detail1 = new FileUploadRequestDTO.Detail(); - detail1.setType(Integer.parseInt(TypeEnum.FILE_UPLOAD.getCode())); + UpgradeRequestDTO requestDTO = new UpgradeRequestDTO(); + requestDTO.setDevId(devId); + requestDTO.setGuid(IdUtil.simpleUUID()); + requestDTO.setNode(csEquipmentDeliveryDTO.getNodeProcess()); + requestDTO.setFrontId(csEquipmentDeliveryDTO.getNodeId()); - FileUploadRequestDTO.Msg msg = new FileUploadRequestDTO.Msg(); + UpgradeRequestDTO.Detail detail1 = new UpgradeRequestDTO.Detail(); + detail1.setType(Integer.valueOf(TypeEnum.DEVICE_UPGRADE.getCode())); + UpgradeRequestDTO.Msg msg = new UpgradeRequestDTO.Msg(); msg.setName(filePath); - msg.setRemoteName(""); detail1.setMsg(msg); + requestDTO.setDetail(detail1); - fileUploadRequestDTO.setDetail(detail1); - - BaseMessage message1 = new BaseMessage(); - message1.setMessageBody(JSON.toJSONString(fileUploadRequestDTO)); + BaseMessage message = new BaseMessage(); + message.setMessageBody(JSON.toJSONString(requestDTO)); // 使用 Redis 存储 guid 用于后续查询 - redisUtil.saveByKeyWithExpire(AppRedisKey.COMMON_REQUEST + fileUploadRequestDTO.getGuid(), "pending", 120L); + redisUtil.saveByKeyWithExpire(AppRedisKey.COMMON_REQUEST + requestDTO.getGuid(), "pending", 120L); // 发送 - commonProducer.send(message1, fileUploadRequestDTO.getFrontId()); + commonProducer.send(message, requestDTO.getFrontId()); // 轮询 Redis 等待响应 - FileUploadResponeDTO responseDTO = JSON.parseObject(sendMessageUtil.waitForResponse(fileUploadRequestDTO.getGuid(), 10), FileUploadResponeDTO.class); - FileUploadResponeDTO.Detail detail2 = responseDTO.getDetail(); + UpgradeResponeDTO responeDTO = JSON.parseObject(sendMessageUtil.waitForResponse(requestDTO.getGuid(), 10), UpgradeResponeDTO.class); + UpgradeResponeDTO.Detail detail2 = responeDTO.getDetail(); if (detail2.getCode() == 200) { - UpgradeRequestDTO requestDTO = new UpgradeRequestDTO(); - requestDTO.setDevId(devId); - requestDTO.setGuid(IdUtil.simpleUUID()); - requestDTO.setNode(csEquipmentDeliveryDTO.getNodeProcess()); - requestDTO.setFrontId(csEquipmentDeliveryDTO.getNodeId()); + // 修改数据库记录 + String softinfoId = csEquipmentDeliveryDTO.getSoftinfoId(); - UpgradeRequestDTO.Detail detail3 = new UpgradeRequestDTO.Detail(); - detail3.setType(Integer.valueOf(TypeEnum.DEVICE_UPGRADE.getCode())); - detail3.setMsg(new HashMap<>()); - - requestDTO.setDetail(detail3); - BaseMessage message2 = new BaseMessage(); - message2.setMessageBody(JSON.toJSONString(requestDTO)); - - // 使用 Redis 存储 guid 用于后续查询 - redisUtil.saveByKeyWithExpire(AppRedisKey.COMMON_REQUEST + requestDTO.getGuid(), "pending", 120L); - - // 发送 - commonProducer.send(message2, requestDTO.getFrontId()); - - // 轮询 Redis 等待响应 - UpgradeResponeDTO responeDTO = JSON.parseObject(sendMessageUtil.waitForResponse(requestDTO.getGuid(), 10), UpgradeResponeDTO.class); - UpgradeResponeDTO.Detail detail4 = responeDTO.getDetail(); - - if (detail4.getCode() == 200) { - // 修改数据库记录 - String softinfoId = csEquipmentDeliveryDTO.getSoftinfoId(); - - CsSoftInfoPO softInfoPO = null; - if (StrUtil.isNotBlank(softinfoId)) { - csSoftInfoFeignClient.removeSoftInfo(softinfoId); - } - softInfoPO = new CsSoftInfoPO(); - softInfoPO.setId(IdUtil.fastSimpleUUID()); - softInfoPO.setAppCheck(csEdDataVO.getCrc()); - softInfoPO.setAppDate(csEdDataVO.getVersionDate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()); - softInfoPO.setAppVersion(csEdDataVO.getVersionNo()); - softInfoPO.setOpAttr("r"); - softInfoPO.setOsName("VxWorks"); - softInfoPO.setOsVersion("VxWorks"); - softInfoPO.setSoftUpdate("yes"); - csSoftInfoFeignClient.saveSoftInfo(softInfoPO); - equipmentFeignClient.updateSoftInfo(csEquipmentDeliveryDTO.getNdid(), softInfoPO.getId()); - - // 重新获取升级后的版本信息 - DevVersionResponeDTO.VersionInfo newVersionInfo = this.getDeviceVersion(devId); - if (newVersionInfo.getAppVersion().equals(csEdDataVO.getVersionNo()) && newVersionInfo.getCloudProtocolVer().equals(csEdDataVO.getVersionAgreement())) { - // 修改数据库记录 - equipmentFeignClient.updateSoftInfo(csEquipmentDeliveryDTO.getNdid(), softInfoPO.getId()); - return true; - } - return false; - } else { - return false; + if (StrUtil.isNotBlank(softinfoId)) { + csSoftInfoFeignClient.removeSoftInfo(softinfoId); } - } else { + CsSoftInfoPO softInfoPO = new CsSoftInfoPO(); + softInfoPO.setId(IdUtil.fastSimpleUUID()); + softInfoPO.setAppCheck(csEdDataPO.getCrc()); + softInfoPO.setAppDate(csEdDataPO.getVersionDate()); + softInfoPO.setAppVersion(csEdDataPO.getVersionNo()); + softInfoPO.setOpAttr("r"); + softInfoPO.setOsName("VxWorks"); + softInfoPO.setOsVersion("VxWorks"); + softInfoPO.setSoftUpdate("yes"); + csSoftInfoFeignClient.saveSoftInfo(softInfoPO); + equipmentFeignClient.updateSoftInfo(csEquipmentDeliveryDTO.getNdid(), softInfoPO.getId()); + + // 重新获取升级后的版本信息 + DevVersionResponeDTO.VersionInfo newVersionInfo = this.getDeviceVersion(devId); + if (newVersionInfo.getAppVersion().equals(csEdDataPO.getVersionNo()) && newVersionInfo.getCloudProtocolVer().equals(csEdDataPO.getVersionAgreement())) { + // 修改数据库记录 + equipmentFeignClient.updateSoftInfo(csEquipmentDeliveryDTO.getNdid(), softInfoPO.getId()); + csUpgradeLogs.setResult(1); + + csUpgradeLogsFeignClient.add(csUpgradeLogs); + return true; + } + csUpgradeLogsFeignClient.add(csUpgradeLogs); return false; } + csUpgradeLogsFeignClient.add(csUpgradeLogs); + return false; } @Override @@ -284,6 +264,25 @@ public class DeviceServiceImpl implements IDeviceService { requestDTO.setNode(listHttpResult.get(0).getNodeProcess()); requestDTO.setFrontId(listHttpResult.get(0).getNodeId()); - return true; + RebootRequestDTO.Detail detail1 = new RebootRequestDTO.Detail(); + detail1.setType(Integer.parseInt(TypeEnum.DEVICE_REBOOT.getCode())); + detail1.setMsg(new HashMap<>()); + requestDTO.setDetail(detail1); + + BaseMessage message = new BaseMessage(); + message.setMessageBody(JSON.toJSONString(requestDTO)); + + // 使用 Redis 存储 guid 用于后续查询 + redisUtil.saveByKeyWithExpire(AppRedisKey.COMMON_REQUEST + requestDTO.getGuid(), "pending", 120L); + + // 发送 + commonProducer.send(message, requestDTO.getFrontId()); + + // 轮询 Redis 等待响应 + RebootResponeDTO responeDTO = JSON.parseObject(sendMessageUtil.waitForResponse(requestDTO.getGuid(), 10), RebootResponeDTO.class); + if (responeDTO.getDetail().getCode() == 200) { + return true; + } + return false; } }