feat(equipment): 添加设备固件升级确认功能

- 在CsEquipmentDeliveryService中新增commitUpgradeFile方法接口
- 实现CsEquipmentDeliveryServiceImpl中的升级日志记录功能
- 集成CsUpgradeLogsService用于升级状态跟踪
- 修改MQTT消息推送路径为/Web/Progress/UpgradeFile/{nDid}
- 添加设备确认升级的API端点/equipment/delivery/commitUpgradeFile
- 实现升级完成后的日志状态更新逻辑
This commit is contained in:
xy
2026-07-23 15:38:46 +08:00
parent 2ef044f41b
commit 4bf1406c8f
5 changed files with 49 additions and 6 deletions

View File

@@ -32,6 +32,7 @@ import java.util.List;
@AllArgsConstructor @AllArgsConstructor
@Validated @Validated
public class CsUpgradeLogsController extends BaseController { public class CsUpgradeLogsController extends BaseController {
private final CsUpgradeLogsService csUpgradeLogsService; private final CsUpgradeLogsService csUpgradeLogsService;
@OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.ADD) @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.ADD)

View File

@@ -437,10 +437,23 @@ public class EquipmentDeliveryController extends BaseController {
@ApiImplicitParam(name = "id", value = "版本id", required = true), @ApiImplicitParam(name = "id", value = "版本id", required = true),
@ApiImplicitParam(name = "nDid", value = "网络设备id", required = true) @ApiImplicitParam(name = "nDid", value = "网络设备id", required = true)
}) })
@ApiImplicitParam(name = "id", value = "版本id", required = true)
public HttpResult<String> uploadUpgradeFile(@RequestParam("id") String id, @RequestParam("nDid") String nDid) { public HttpResult<String> uploadUpgradeFile(@RequestParam("id") String id, @RequestParam("nDid") String nDid) {
String methodDescribe = getMethodDescribe("uploadUpgradeFile"); String methodDescribe = getMethodDescribe("uploadUpgradeFile");
csEquipmentDeliveryService.uploadUpgradeFile(id,nDid); csEquipmentDeliveryService.uploadUpgradeFile(id,nDid);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, "文件上传中", methodDescribe);
}
@OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/commitUpgradeFile")
@ApiOperation("设备确认升级")
@ApiImplicitParams({
@ApiImplicitParam(name = "mid", value = "mid", required = true),
@ApiImplicitParam(name = "nDid", value = "网络设备id", required = true),
@ApiImplicitParam(name = "version", value = "版本", required = true)
})
public HttpResult<String> commitUpgradeFile(@RequestParam("mid") Integer mid, @RequestParam("nDid") String nDid, @RequestParam("version") String version) {
String methodDescribe = getMethodDescribe("commitUpgradeFile");
csEquipmentDeliveryService.commitUpgradeFile(mid, nDid, version);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
} }

View File

@@ -9,6 +9,7 @@ import com.njcn.csdevice.pojo.vo.CsEquipmentDeliveryVO;
import com.njcn.csdevice.pojo.vo.DevVersionVO; import com.njcn.csdevice.pojo.vo.DevVersionVO;
import com.njcn.csdevice.pojo.vo.DeviceManagerVO; import com.njcn.csdevice.pojo.vo.DeviceManagerVO;
import com.njcn.csdevice.pojo.vo.ProjectEquipmentVO; import com.njcn.csdevice.pojo.vo.ProjectEquipmentVO;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@@ -201,4 +202,6 @@ public interface CsEquipmentDeliveryService extends IService<CsEquipmentDelivery
* @param id * @param id
*/ */
void uploadUpgradeFile(String id, String nDid); void uploadUpgradeFile(String id, String nDid);
void commitUpgradeFile(Integer mid, String nDid, String version);
} }

View File

@@ -147,6 +147,7 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
private final CsTopicFeignClient csTopicFeignClient; private final CsTopicFeignClient csTopicFeignClient;
private final MqttPublisher publisher; private final MqttPublisher publisher;
private final LogMessageTemplate logMessageTemplate; private final LogMessageTemplate logMessageTemplate;
private final CsUpgradeLogsService csUpgradeLogsService;
@Override @Override
public void refreshDeviceDataCache() { public void refreshDeviceDataCache() {
@@ -1434,6 +1435,15 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
throw new BusinessException(AlgorithmResponseEnum.FILE_BUSY); throw new BusinessException(AlgorithmResponseEnum.FILE_BUSY);
} }
try { try {
//记录升级日志
CsEquipmentDeliveryVO vo = queryEquipmentByndid(nDid);
CsUpgradeLogs csUpgradeLogs = new CsUpgradeLogs();
csUpgradeLogs.setDevId(vo.getId());
csUpgradeLogs.setVersionNo(po.getVersionNo());
csUpgradeLogs.setResult(3);
csUpgradeLogs.setUserName(RequestUtil.getUsername());
csUpgradeLogs.setLoginName(RequestUtil.getLoginName());
csUpgradeLogsService.save(csUpgradeLogs);
//根据路径获取文件 //根据路径获取文件
String path = po.getFilePath(); String path = po.getFilePath();
InputStream inputStream = fileStorageUtil.getFileStream(path); InputStream inputStream = fileStorageUtil.getFileStream(path);
@@ -1455,7 +1465,7 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
for (int i = 1; i <= times; i++) { for (int i = 1; i <= times; i++) {
//发送数据给前端 //发送数据给前端
String json = "{fileName:"+po.getFilePath()+",allStep:"+times+",nowStep:"+i+"}"; String json = "{fileName:"+po.getFilePath()+",allStep:"+times+",nowStep:"+i+"}";
publisher.send("/Web/Progress/" + nDid, new Gson().toJson(json), 1, false); publisher.send("/Web/Progress/UpgradeFile/" + nDid, new Gson().toJson(json), 1, false);
LogMessage logDto = new LogMessage(); LogMessage logDto = new LogMessage();
byte[] lsBytes; byte[] lsBytes;
if (length > 50*1024) { if (length > 50*1024) {
@@ -1486,7 +1496,7 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
} }
} else { } else {
String json = "{fileName:"+path+",allStep:\""+1+"\",nowStep:"+1+"}"; String json = "{fileName:"+path+",allStep:\""+1+"\",nowStep:"+1+"}";
publisher.send("/Web/Progress", new Gson().toJson(json), 1, false); publisher.send("/Web/Progress/UpgradeFile/" + nDid, new Gson().toJson(json), 1, false);
ReqAndResDto.Req req = getPojo(1,path,length,bytes,0); ReqAndResDto.Req req = getPojo(1,path,length,bytes,0);
publisher.send("/Pfm/DevFileCmd/" + version + "/" + nDid, new Gson().toJson(req), 1, false); publisher.send("/Pfm/DevFileCmd/" + version + "/" + nDid, new Gson().toJson(req), 1, false);
LogMessage logDto = new LogMessage(); LogMessage logDto = new LogMessage();
@@ -1517,6 +1527,25 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl<CsEquipmentDeliv
} }
} }
@Override
public void commitUpgradeFile(Integer mid, String nDid, String version) {
//修改升级日志
CsEquipmentDeliveryVO vo = queryEquipmentByndid(nDid);
csUpgradeLogsService.updateLogs(vo.getId(), null, 2);
//组装报文
ReqAndResDto.Req reqAndResParam = new ReqAndResDto.Req();
reqAndResParam.setMid(mid);
reqAndResParam.setDid(0);
reqAndResParam.setPri(AccessEnum.FIRST_CHANNEL.getCode());
reqAndResParam.setType(Integer.parseInt(TypeEnum.TYPE_32.getCode()));
reqAndResParam.setExpire(-1);
UpgradeDevDto upgradeDevDto = new UpgradeDevDto();
upgradeDevDto.setChk(1);
reqAndResParam.setMsg(upgradeDevDto);
redisUtil.saveByKeyWithExpire("chk:" + nDid, 1, 10L);
publisher.send("/Pfm/DevFileCmd/" + version + "/" + nDid, new Gson().toJson(reqAndResParam), 1, false);
}
/** /**
* 上送文件至装置 * 上送文件至装置
*/ */

View File

@@ -5,7 +5,6 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.csdevice.mapper.CsUpgradeLogsMapper; import com.njcn.csdevice.mapper.CsUpgradeLogsMapper;
import com.njcn.csdevice.pojo.po.CsUpgradeLogs; import com.njcn.csdevice.pojo.po.CsUpgradeLogs;
import com.njcn.csdevice.service.CsEquipmentDeliveryService;
import com.njcn.csdevice.service.CsUpgradeLogsService; import com.njcn.csdevice.service.CsUpgradeLogsService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@@ -18,8 +17,6 @@ import org.springframework.stereotype.Service;
@RequiredArgsConstructor @RequiredArgsConstructor
public class CsUpgradeLogsServiceImpl extends ServiceImpl<CsUpgradeLogsMapper, CsUpgradeLogs> implements CsUpgradeLogsService { public class CsUpgradeLogsServiceImpl extends ServiceImpl<CsUpgradeLogsMapper, CsUpgradeLogs> implements CsUpgradeLogsService {
private final CsEquipmentDeliveryService csEquipmentDeliveryService;
@Override @Override
public boolean updateLogs(String devId, String code, Integer result) { public boolean updateLogs(String devId, String code, Integer result) {
CsUpgradeLogs latestLog = this.baseMapper.selectOne( CsUpgradeLogs latestLog = this.baseMapper.selectOne(