升级调整

This commit is contained in:
caozehui
2026-04-29 08:52:39 +08:00
parent da75f74218
commit 9774172c0b
3 changed files with 141 additions and 80 deletions

View File

@@ -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<String, Object> msg;
}
}

View File

@@ -50,6 +50,12 @@ public class UpgradeRequestDTO {
* 详情
*/
@JSONField(name = "Msg")
private Map<String, Object> msg;
private UpgradeRequestDTO.Msg msg;
}
@Data
public static class Msg {
@JSONField(name = "Name")
private String name;
}
}

View File

@@ -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<CsEquipmentDeliveryDTO> listHttpResult = equipmentFeignClient.queryDeviceById(Collections.singletonList(devId)).getData();
//
// BaseMessage message = new BaseMessage();
List<CsEquipmentDeliveryDTO> 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<CsEquipmentDeliveryDTO> 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;
}
}