From b7db768a46429625edd6dacb45add4f817e4b925 Mon Sep 17 00:00:00 2001 From: xy <748613696@qq.com> Date: Tue, 21 Jul 2026 15:00:54 +0800 Subject: [PATCH] =?UTF-8?q?feat(data):=20=E6=96=B0=E5=A2=9E=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E8=B7=AF=E5=BE=84=E6=9F=A5=E8=AF=A2=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E4=BF=A1=E6=81=AF=E5=8A=9F=E8=83=BD=E5=B9=B6=E5=AE=8C=E5=96=84?= =?UTF-8?q?=E8=AE=BE=E5=A4=87=E5=8D=87=E7=BA=A7=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在CsEdDataController中新增findByPath接口用于根据文件路径获取版本信息 - 在CsEdDataFeignClient中添加findByPath远程调用方法 - 为CsEdDataFeignClientFallbackFactory增加降级处理逻辑 - 扩展CsEdDataService接口和服务实现类,添加findByPath业务方法 - 在addEdData和auditEdData方法中增加版本冲突检查机制 - 实现uploadUpgradeFile功能支持设备升级文件上传 - 完善CsEquipmentDeliveryServiceImpl中的文件分片传输逻辑 - 修复CsEventUserPOServiceImpl中的空指针安全检查 - 优化CsLinePOServiceImpl中PT类型处理的空值判断 - 改进CsUpgradeLogsController中按设备ID查询的排序功能 - 补充CustomReportServiceImpl中接线方式的空值验证 - 在EquipmentDeliveryController中暴露uploadUpgradeFile控制器接口 - 增强WordExportModelController中电压等级数据的完整性校验 --- .../csdevice/api/CsEdDataFeignClient.java | 9 +- .../CsEdDataFeignClientFallbackFactory.java | 6 + .../equipment/CsUpgradeLogsController.java | 5 +- .../EquipmentDeliveryController.java | 17 +- .../project/CsEdDataController.java | 10 + .../csdevice/service/CsEdDataService.java | 2 + .../service/CsEquipmentDeliveryService.java | 7 + .../service/impl/CsEdDataServiceImpl.java | 35 +++- .../impl/CsEquipmentDeliveryServiceImpl.java | 189 +++++++++++++++++- .../service/impl/CsLinePOServiceImpl.java | 6 +- .../controller/WordExportModelController.java | 8 +- .../impl/CsEventUserPOServiceImpl.java | 2 +- .../service/impl/CustomReportServiceImpl.java | 28 +-- 13 files changed, 295 insertions(+), 29 deletions(-) diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/CsEdDataFeignClient.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/CsEdDataFeignClient.java index 319c3a2..20f2f00 100644 --- a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/CsEdDataFeignClient.java +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/CsEdDataFeignClient.java @@ -1,20 +1,14 @@ package com.njcn.csdevice.api; -import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.constant.ServerInfo; -import com.njcn.common.pojo.enums.common.LogEnum; -import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.response.HttpResult; -import com.njcn.common.utils.HttpResultUtil; import com.njcn.csdevice.api.fallback.CsEdDataFeignClientFallbackFactory; import com.njcn.csdevice.pojo.param.CsEdDataAddParm; import com.njcn.csdevice.pojo.param.CsEdDataQueryParm; import com.njcn.csdevice.pojo.po.CsEdDataPO; import com.njcn.csdevice.pojo.vo.CsEdDataVO; -import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; import org.springframework.cloud.openfeign.FeignClient; -import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -44,4 +38,7 @@ public interface CsEdDataFeignClient { @GetMapping("/findByCondition") @ApiOperation("根据条件查询是否存在数据") HttpResult findByCondition(@RequestBody CsEdDataQueryParm param); + + @GetMapping("/findByPath") + HttpResult findByPath(@RequestParam("filePath") String filePath); } diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/fallback/CsEdDataFeignClientFallbackFactory.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/fallback/CsEdDataFeignClientFallbackFactory.java index b74b74b..e25fe26 100644 --- a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/fallback/CsEdDataFeignClientFallbackFactory.java +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/fallback/CsEdDataFeignClientFallbackFactory.java @@ -59,6 +59,12 @@ public class CsEdDataFeignClientFallbackFactory implements FallbackFactory findByPath(String filePath) { + log.error("{}异常,降级处理,异常为:{}","根据文件路径获取版本信息",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } }; } } diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/equipment/CsUpgradeLogsController.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/equipment/CsUpgradeLogsController.java index a983732..472a4c7 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/equipment/CsUpgradeLogsController.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/equipment/CsUpgradeLogsController.java @@ -65,7 +65,10 @@ public class CsUpgradeLogsController extends BaseController { @ApiImplicitParam(name = "devId", value = "装置Id", required = true) public HttpResult> getByDevId(@RequestParam("devId") String devId) { String methodDescribe = getMethodDescribe("getByDevId"); - List result = csUpgradeLogsService.lambdaQuery().eq(CsUpgradeLogs::getDevId, devId).list(); + List result = csUpgradeLogsService.lambdaQuery() + .eq(CsUpgradeLogs::getDevId, devId) + .orderByDesc(CsUpgradeLogs::getCreateTime) + .list(); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); } } diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/equipment/EquipmentDeliveryController.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/equipment/EquipmentDeliveryController.java index 8d8894b..ec5c736 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/equipment/EquipmentDeliveryController.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/equipment/EquipmentDeliveryController.java @@ -418,7 +418,6 @@ public class EquipmentDeliveryController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); } - @OperateInfo(info = LogEnum.BUSINESS_COMMON) @PostMapping("/version/page") @ApiOperation("查询设备版本信息") @@ -430,4 +429,20 @@ public class EquipmentDeliveryController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/uploadUpgradeFile") + @ApiOperation("上传升级文件至装置") + @ApiImplicitParams({ + @ApiImplicitParam(name = "id", value = "版本id", required = true), + @ApiImplicitParam(name = "nDid", value = "网络设备id", required = true) + }) + @ApiImplicitParam(name = "id", value = "版本id", required = true) + public HttpResult uploadUpgradeFile(@RequestParam("id") String id, @RequestParam("nDid") String nDid) { + String methodDescribe = getMethodDescribe("uploadUpgradeFile"); + csEquipmentDeliveryService.uploadUpgradeFile(id,nDid); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } + + } \ No newline at end of file diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/project/CsEdDataController.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/project/CsEdDataController.java index 0b1f3df..c541d2b 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/project/CsEdDataController.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/project/CsEdDataController.java @@ -110,4 +110,14 @@ public class CsEdDataController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @GetMapping("/findByPath") + @ApiOperation("根据文件路径获取版本信息") + @ApiImplicitParam(name = "filePath", value = "filePath", required = true) + public HttpResult findByPath(@RequestParam("filePath") String filePath){ + String methodDescribe = getMethodDescribe("findByPath"); + CsEdDataPO po = csEdDataService.findByPath(filePath); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, po, methodDescribe); + } + } diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsEdDataService.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsEdDataService.java index ea65816..5d74fac 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsEdDataService.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsEdDataService.java @@ -65,5 +65,7 @@ public interface CsEdDataService extends IService { CsEdDataPO findByCondition(CsEdDataQueryParm param); void addEdDataFirst(CsEdDataAddParm param); + + CsEdDataPO findByPath(String filePath); } diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsEquipmentDeliveryService.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsEquipmentDeliveryService.java index 78b4076..bb712f6 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsEquipmentDeliveryService.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsEquipmentDeliveryService.java @@ -194,4 +194,11 @@ public interface CsEquipmentDeliveryService extends IService getRunPortableDev(String userId); IPage versionPage(CsEquipmentDeliveryQueryParm baseParam); + + /** + * 1.根据id获取系统中当前的版本信息 + * 2.根据版本信息获取文件,上传给设备 + * @param id + */ + void uploadUpgradeFile(String id, String nDid); } diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsEdDataServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsEdDataServiceImpl.java index 6fe14b4..a5bca96 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsEdDataServiceImpl.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsEdDataServiceImpl.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.common.pojo.exception.BusinessException; import com.njcn.csdevice.mapper.CsEdDataMapper; import com.njcn.csdevice.pojo.param.CsEdDataAddParm; import com.njcn.csdevice.pojo.param.CsEdDataAuditParm; @@ -42,6 +43,17 @@ public class CsEdDataServiceImpl extends ServiceImpl @Override @Transactional(rollbackFor = {Exception.class}) public boolean addEdData(CsEdDataAddParm csEdDataAddParm) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(CsEdDataPO::getDevType, csEdDataAddParm.getDevType()) + .eq(CsEdDataPO::getVersionNo, csEdDataAddParm.getVersionNo()) + .eq(CsEdDataPO::getVersionAgreement, csEdDataAddParm.getVersionAgreement()) + .eq(CsEdDataPO::getVersionDate, csEdDataAddParm.getVersionDate()) + .eq(CsEdDataPO::getCrc, csEdDataAddParm.getCrc()) + .eq(CsEdDataPO::getStatus, 1); + CsEdDataPO po = this.baseMapper.selectOne(lambdaQueryWrapper); + if (!Objects.isNull(po)) { + throw new BusinessException("该版本已存在!"); + } CsEdDataPO csEdDataPO = new CsEdDataPO(); BeanUtils.copyProperties(csEdDataAddParm, csEdDataPO); String remoteDir = StrUtil.SLASH + OssPath.EDDATA + csEdDataAddParm.getDevTypeName() + StrUtil.SLASH + csEdDataAddParm.getVersionNo() + StrUtil.SLASH; @@ -58,14 +70,25 @@ public class CsEdDataServiceImpl extends ServiceImpl @Override @Transactional(rollbackFor = {Exception.class}) public Boolean auditEdData(CsEdDataAuditParm csEdDataAuditParm) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(CsEdDataPO::getDevType, csEdDataAuditParm.getDevType()) + .eq(CsEdDataPO::getVersionNo, csEdDataAuditParm.getVersionNo()) + .eq(CsEdDataPO::getVersionAgreement, csEdDataAuditParm.getVersionAgreement()) + .eq(CsEdDataPO::getVersionDate, csEdDataAuditParm.getVersionDate()) + .eq(CsEdDataPO::getCrc, csEdDataAuditParm.getCrc()) + .ne(CsEdDataPO::getId, csEdDataAuditParm.getId()) + .eq(CsEdDataPO::getStatus, 1); + CsEdDataPO po = this.baseMapper.selectOne(lambdaQueryWrapper); + if (!Objects.isNull(po)) { + throw new BusinessException("修改后的数据与现有版本冲突,修改失败!"); + } CsEdDataPO csEdDataPO = new CsEdDataPO(); BeanUtils.copyProperties(csEdDataAuditParm, csEdDataPO); if (!Objects.isNull(csEdDataAuditParm.getFile())) { String filePath = fileStorageUtil.uploadMultipart(csEdDataAuditParm.getFile(), StrUtil.SLASH + OssPath.EDDATA + csEdDataAuditParm.getDevTypeName() + StrUtil.SLASH + csEdDataAuditParm.getVersionNo() + StrUtil.SLASH, true); csEdDataPO.setFilePath(filePath); } - boolean b = this.updateById(csEdDataPO); - return b; + return this.updateById(csEdDataPO); } @Override @@ -119,5 +142,13 @@ public class CsEdDataServiceImpl extends ServiceImpl .toLocalDateTime()); this.save(csEdDataPO); } + + @Override + public CsEdDataPO findByPath(String filePath) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(CsEdDataPO::getFilePath, filePath) + .eq(CsEdDataPO::getStatus, 1); + return this.getOne(lambdaQueryWrapper); + } } diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsEquipmentDeliveryServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsEquipmentDeliveryServiceImpl.java index 0a6e63f..d4e5a9d 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsEquipmentDeliveryServiceImpl.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsEquipmentDeliveryServiceImpl.java @@ -16,6 +16,7 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.alibaba.nacos.client.naming.utils.CollectionUtils; +import com.alibaba.nacos.shaded.com.google.gson.Gson; import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -23,7 +24,15 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.tocrhz.mqtt.publisher.MqttPublisher; import com.njcn.access.api.AskDeviceDataFeignClient; +import com.njcn.access.api.CsTopicFeignClient; +import com.njcn.access.enums.AccessEnum; +import com.njcn.access.enums.AccessResponseEnum; +import com.njcn.access.enums.TypeEnum; +import com.njcn.access.pojo.dto.ReqAndResDto; +import com.njcn.access.pojo.dto.UpgradeDevDto; +import com.njcn.access.pojo.dto.file.FileRedisDto; import com.njcn.access.utils.MqttUtil; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.csdevice.api.CsLedgerFeignClient; @@ -48,7 +57,9 @@ import com.njcn.csharmonic.param.CsEventUserQueryParam; import com.njcn.csharmonic.pojo.po.CsEventPO; import com.njcn.device.biz.mapper.OverLimitWlMapper; import com.njcn.mq.message.CloudTopicMessage; +import com.njcn.mq.message.LogMessage; import com.njcn.mq.template.CloudTopicMessageTemplate; +import com.njcn.mq.template.LogMessageTemplate; import com.njcn.oss.constant.OssPath; import com.njcn.oss.utils.FileStorageUtil; import com.njcn.redis.pojo.enums.AppRedisKey; @@ -73,6 +84,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.StreamUtils; import org.springframework.web.multipart.MultipartFile; import javax.imageio.ImageIO; @@ -122,8 +134,6 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl cap){ + //需要循环的次数 + int times = bytes.length / cap + 1; + for (int i = 1; i <= times; i++) { + //发送数据给前端 + String json = "{fileName:"+po.getFilePath()+",allStep:"+times+",nowStep:"+i+"}"; + publisher.send("/Web/Progress/" + id, new Gson().toJson(json), 1, false); + LogMessage logDto = new LogMessage(); + byte[] lsBytes; + if (length > 50*1024) { + lsBytes = Arrays.copyOfRange(bytes, (i - 1) * cap, i * cap); + ReqAndResDto.Req req = getPojo(i,path,bytes.length,lsBytes,(i-1)*cap); + publisher.send("/Pfm/DevFileCmd/" + version + "/" + id, new Gson().toJson(req), 1, false); + logDto.setOperate(id + "设备上送文件,这是第" + i + "帧"); + logDto.setResult(1); + length = length - cap; + //判断是否重发 + sendNextStep(logDto,path,bytes.length,lsBytes,(i-1)*cap,version,id,i,false); + FileRedisDto fileRedisDto = (FileRedisDto) redisUtil.getObjectByKey(AppRedisKey.UPLOAD.concat(id).concat(String.valueOf(i))); + //重发之后判断继续循环还是跳出循环 + if (!Objects.isNull(fileRedisDto) && !Objects.equals(fileRedisDto.getCode(),200)) { + redisUtil.delete("uploading:" + nDid); + break; + } + } else { + lsBytes = Arrays.copyOfRange(bytes, (i - 1) * cap, bytes.length); + ReqAndResDto.Req req = getPojo(i,path,bytes.length,lsBytes,(i-1)*cap); + publisher.send("/Pfm/DevFileCmd/" + version + "/" + id, new Gson().toJson(req), 1, false); + logDto.setOperate(id + "设备上送文件,这是最后一帧,为第" + i + "帧"); + logDto.setResult(1); + //判断是否重发 + sendNextStep(logDto,path,bytes.length,lsBytes,(i-1)*cap,version,id,i,true); + } + logMessageTemplate.sendMember(logDto); + } + } else { + String json = "{fileName:"+path+",allStep:\""+1+"\",nowStep:"+1+"}"; + publisher.send("/Web/Progress", new Gson().toJson(json), 1, false); + ReqAndResDto.Req req = getPojo(1,path,length,bytes,0); + publisher.send("/Pfm/DevFileCmd/" + version + "/" + id, new Gson().toJson(req), 1, false); + LogMessage logDto = new LogMessage(); + logDto.setOperate(id + "系统上送文件,当前文件只有1帧"); + logDto.setResult(1); + logMessageTemplate.sendMember(logDto); + //判断是否重发 + sendNextStep(logDto,path,length,bytes,0,version,id,1,false); + } + } catch (IOException e) { + redisUtil.delete("uploading:" + id); + redisUtil.delete("fileDowning:" + id); + LogMessage logDto = new LogMessage(); + logDto.setResult(0); + logDto.setOperate("系统上传升级文件,获取文件流"); + logDto.setFailReason(e.getMessage()); + logMessageTemplate.sendMember(logDto); + throw new BusinessException("获取文件流失败"); + } catch (Exception e) { + redisUtil.delete("uploading:" + id); + redisUtil.delete("fileDowning:" + id); + LogMessage logDto = new LogMessage(); + logDto.setResult(0); + logDto.setOperate("系统上传升级文件"); + logDto.setFailReason(e.getMessage()); + logMessageTemplate.sendMember(logDto); + throw new BusinessException(AccessResponseEnum.UPLOAD_ERROR); + } + } + + /** + * 上送文件至装置 + */ + public ReqAndResDto.Req getPojo(Integer mid, String fileName, Integer allLength, byte[] bytes, Integer offset) { + //组装报文 + 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(); + int cmpAlg; + String ext = fileName.substring(fileName.lastIndexOf('.') + 1); + if (Objects.equals(ext.toLowerCase(), "zip")) { + cmpAlg = 1; + } else if (Objects.equals(ext.toLowerCase(), "tar")) { + cmpAlg = 2; + } else { + cmpAlg = 0; + } + upgradeDevDto.setCmpAlg(cmpAlg); + upgradeDevDto.setName(fileName); + upgradeDevDto.setFileSize(allLength); + upgradeDevDto.setOffset(offset); + upgradeDevDto.setLen(bytes.length); + upgradeDevDto.setData(Base64.getEncoder().encodeToString(bytes)); + reqAndResParam.setMsg(upgradeDevDto); + return reqAndResParam; + } + + /** + * 根据装置响应来判断发送的内容 + */ + public void sendNextStep(LogMessage logDto, String path, int length, byte[] bytes, Integer offset, String version, String id, int mid, boolean result) { + try { + for (int i = 0; i < 30; i++) { + if (result) { + Thread.sleep(10000); + } else { + Thread.sleep(1000); + } + FileRedisDto fileRedisDto = (FileRedisDto) redisUtil.getObjectByKey(AppRedisKey.UPLOAD.concat(id).concat(String.valueOf(mid))); + if (Objects.isNull(fileRedisDto)) { + FileRedisDto fileRedis = new FileRedisDto(); + fileRedis.setCode(400); + redisUtil.saveByKeyWithExpire(AppRedisKey.UPLOAD.concat(id).concat(String.valueOf(mid)),fileRedis,10L); + } else { + if (Objects.equals(fileRedisDto.getCode(),200)) { + break; + } else { + FileRedisDto fileRedis = new FileRedisDto(); + fileRedis.setCode(400); + redisUtil.saveByKeyWithExpire(AppRedisKey.UPLOAD.concat(id).concat(String.valueOf(mid)),fileRedis,10L); + ReqAndResDto.Req req = getPojo(mid,path,length,bytes,offset); + publisher.send("/Pfm/DevFileCmd/" + version + "/" + id, new Gson().toJson(req), 1, false); + logDto.setOperate(id + "系统上送文件,装置响应失败,重新发送,这是第" + (i+1) + "次"); + logDto.setResult(1); + logMessageTemplate.sendMember(logDto); + } + } + } + } catch (InterruptedException e) { + assert logDto != null; + logDto.setResult(0); + logDto.setOperate("平台重新上送文件"); + logDto.setFailReason(e.getMessage()); + logMessageTemplate.sendMember(logDto); + throw new BusinessException(AccessResponseEnum.RELOAD_UPLOAD_ERROR); + } + } + @Override public List getRunPortableDev(String userId) { List result = new ArrayList<>(); diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsLinePOServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsLinePOServiceImpl.java index cc256bc..8da2b34 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsLinePOServiceImpl.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsLinePOServiceImpl.java @@ -504,7 +504,11 @@ public class CsLinePOServiceImpl extends ServiceImpl i } lineDetailDataVO.setLineName(csLinePO.getName()); lineDetailDataVO.setLineId(csLinePO.getLineId()); - lineDetailDataVO.setPtType(PubUtils.ptType(csLinePO.getConType())); + if (Objects.isNull(csLinePO.getConType())) { + lineDetailDataVO.setPtType(null); + } else { + lineDetailDataVO.setPtType(PubUtils.ptType(csLinePO.getConType())); + } lineDetailDataVO.setPt(csLinePO.getPtRatio() + "/" + (Objects.isNull(csLinePO.getPt2Ratio())?1.0:csLinePO.getPt2Ratio())); lineDetailDataVO.setCt(csLinePO.getCtRatio() + "/" + (Objects.isNull(csLinePO.getCt2Ratio())?1.0:csLinePO.getCt2Ratio())); lineDetailDataVO.setDealCapacity(Objects.isNull(csLinePO.getProtocolCapacity())?0.0f:csLinePO.getProtocolCapacity().floatValue()); diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/WordExportModelController.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/WordExportModelController.java index b98a2ea..0ef0a41 100644 --- a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/WordExportModelController.java +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/controller/WordExportModelController.java @@ -2,6 +2,8 @@ package com.njcn.csharmonic.controller; import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.collection.CollUtil; +import com.njcn.common.pojo.exception.BusinessException; import com.njcn.csdevice.api.CsLineFeignClient; import com.njcn.csdevice.pojo.vo.LineDetailDataVO; import com.njcn.device.biz.pojo.po.Overlimit; @@ -10,7 +12,6 @@ import com.njcn.harmonic.common.pojo.dto.DeviceUnitCommDTO; import com.njcn.harmonic.common.pojo.dto.HarmLineDetailDataCommDTO; import com.njcn.harmonic.common.pojo.dto.OverLimitInfoCommDTO; import com.njcn.harmonic.common.service.MonitorHarmonicReportService; - import com.njcn.web.controller.BaseController; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -21,7 +22,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.*; +import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -79,6 +80,9 @@ public class WordExportModelController extends BaseController { harmLineDetailDataCommDTO = BeanUtil.copyProperties(lineDto, HarmLineDetailDataCommDTO.class); List overLimitList = csLineFeignClient.getOverLimitData(Stream.of(lineIndex).collect(Collectors.toList())).getData(); + if (CollUtil.isEmpty(overLimitList)) { + throw new BusinessException("监测点缺失电压等级数据,限值缺失,无法生成报告"); + } overLimit = overLimitList.get(0); overLimitInfoCommDTO = BeanUtil.copyProperties(overLimit, OverLimitInfoCommDTO.class); diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/CsEventUserPOServiceImpl.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/CsEventUserPOServiceImpl.java index f31f4de..e72a354 100644 --- a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/CsEventUserPOServiceImpl.java +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/CsEventUserPOServiceImpl.java @@ -500,7 +500,7 @@ public class CsEventUserPOServiceImpl extends ServiceImpl vo = result.stream().filter(item -> Objects.equals(dicData.getId(),item.getWiringMethod())).findFirst(); if (vo.isPresent()) {