From 43b847397682224ce2563747874ab46cd7aafa0c Mon Sep 17 00:00:00 2001 From: xy <748613696@qq.com> Date: Tue, 16 Sep 2025 18:30:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BA=91=E5=89=8D=E7=BD=AE?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../csdevice/api/EquipmentFeignClient.java | 9 ++++ .../EquipmentFeignClientFallbackFactory.java | 13 +++++ .../njcn/csdevice/pojo/param/CsLineParam.java | 7 ++- .../com/njcn/csdevice/pojo/po/CsLinePO.java | 9 ++-- .../pojo/vo/CsEquipmentDeliveryVO.java | 3 ++ .../EquipmentDeliveryController.java | 28 +++++++++++ .../project/EngineeringController.java | 16 +++++-- .../service/CsEngineeringService.java | 2 + .../service/CsEquipmentDeliveryService.java | 11 +++++ .../csdevice/service/CsLinePOService.java | 10 ++++ .../service/impl/CsDevModelServiceImpl.java | 4 +- .../impl/CsEngineeringServiceImpl.java | 5 ++ .../impl/CsEquipmentDeliveryServiceImpl.java | 41 +++++++++++++++- .../service/impl/CsLinePOServiceImpl.java | 47 +++++++++++++++++- .../csdevice/service/impl/IcdServiceImpl.java | 18 +++++-- .../src/test/java/com/njcn/AppTest.java | 48 ++++++++++++++++--- .../test/java/com/njcn/DownloadFileTest.java | 29 +++++++++++ .../service/impl/DataServiceImpl.java | 2 +- .../service/impl/RealDataServiceImpl.java | 2 +- .../csharmonic/util/InfluxDbParamUtil.java | 7 +++ .../src/test/java/com/njcn/InfluxDbTest.java | 1 + 21 files changed, 287 insertions(+), 25 deletions(-) diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/EquipmentFeignClient.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/EquipmentFeignClient.java index ec5171a..cc6121d 100644 --- a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/EquipmentFeignClient.java +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/EquipmentFeignClient.java @@ -10,10 +10,13 @@ import com.njcn.csdevice.api.fallback.EquipmentFeignClientFallbackFactory; import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO; import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO; import com.njcn.csdevice.pojo.vo.CsEquipmentDeliveryVO; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; +import springfox.documentation.annotations.ApiIgnore; import java.util.List; @@ -64,4 +67,10 @@ public interface EquipmentFeignClient { @PostMapping("/getDevByLineId") HttpResult getDevByLineId(@RequestParam("lineId") String lineId); + + @PostMapping("/updateCldDevStatus") + HttpResult updateCldDevStatus(@RequestParam("nodeId") String nodeId, @RequestParam("processNo") Integer processNo); + + @PostMapping("/flipCldDevStatus") + HttpResult flipCldDevStatus(@RequestParam("devId") String devId, @RequestParam("status") Integer status); } diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/fallback/EquipmentFeignClientFallbackFactory.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/fallback/EquipmentFeignClientFallbackFactory.java index f85a479..9f8485f 100644 --- a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/fallback/EquipmentFeignClientFallbackFactory.java +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/api/fallback/EquipmentFeignClientFallbackFactory.java @@ -89,6 +89,19 @@ public class EquipmentFeignClientFallbackFactory implements FallbackFactory updateCldDevStatus(String nodeId, Integer processNo) { + log.error("{}异常,降级处理,异常为:{}","云前置心跳丢失切换设备状态",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + + @Override + public HttpResult flipCldDevStatus(String devId, Integer status) { + log.error("{}异常,降级处理,异常为:{}","云前置设备状态翻转",cause.toString()); + throw new BusinessException(finalExceptionEnum); + } + }; } } diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/param/CsLineParam.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/param/CsLineParam.java index 60776e2..c7bf212 100644 --- a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/param/CsLineParam.java +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/param/CsLineParam.java @@ -71,10 +71,15 @@ public class CsLineParam extends BaseEntity { private Double ct2Ratio; /** - * 监测点线路号 + * 逻辑子设备id */ private Integer clDid; + /** + * 监测点线路号 + */ + private Integer lineNo; + /** * 统计间隔 */ diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/po/CsLinePO.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/po/CsLinePO.java index 3e18086..c54b44a 100644 --- a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/po/CsLinePO.java +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/po/CsLinePO.java @@ -98,9 +98,6 @@ public class CsLinePO extends BaseEntity { /** * 逻辑子设备id(与模板对应) - * 治理监测点 0 - * 负载监测点 1 - * 电网监测点 2 */ @TableField(value = "clDid") private Integer clDid; @@ -119,4 +116,10 @@ public class CsLinePO extends BaseEntity { */ @TableField(value = "run_status") private Integer runStatus; + + /** + * 监测点线路号 + */ + @TableField(value = "line_no") + private Integer lineNo; } \ No newline at end of file diff --git a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/vo/CsEquipmentDeliveryVO.java b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/vo/CsEquipmentDeliveryVO.java index 9cd6e1a..d18e344 100644 --- a/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/vo/CsEquipmentDeliveryVO.java +++ b/cs-device/cs-device-api/src/main/java/com/njcn/csdevice/pojo/vo/CsEquipmentDeliveryVO.java @@ -91,4 +91,7 @@ public class CsEquipmentDeliveryVO extends BaseEntity { private Integer sort; + @ApiModelProperty(value="前置服务器id") + private String nodeId ; + } \ No newline at end of file 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 d288514..fc893ea 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 @@ -373,4 +373,32 @@ public class EquipmentDeliveryController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/updateCldDevStatus") + @ApiOperation("云前置心跳丢失切换设备状态") + @ApiImplicitParams({ + @ApiImplicitParam(name = "nodeId", value = "前置服务器id", required = true), + @ApiImplicitParam(name = "processNo", value = "进程号", required = true) + }) + @ApiIgnore + public HttpResult updateCldDevStatus(@RequestParam("nodeId") String nodeId, @RequestParam("processNo") Integer processNo){ + String methodDescribe = getMethodDescribe("updateCldDevStatus"); + csEquipmentDeliveryService.updateCldDevStatus(nodeId,processNo); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/flipCldDevStatus") + @ApiOperation("云前置设备状态翻转") + @ApiImplicitParams({ + @ApiImplicitParam(name = "devId", value = "设备id", required = true), + @ApiImplicitParam(name = "status", value = "状态", required = true) + }) + @ApiIgnore + public HttpResult flipCldDevStatus(@RequestParam("devId") String devId, @RequestParam("status") Integer status){ + String methodDescribe = getMethodDescribe("flipCldDevStatus"); + csEquipmentDeliveryService.flipCldDevStatus(devId,status); + 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/EngineeringController.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/project/EngineeringController.java index 27e3de3..48e3976 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/project/EngineeringController.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/controller/project/EngineeringController.java @@ -11,6 +11,7 @@ import com.njcn.csdevice.pojo.param.CsEngineeringAuditParm; import com.njcn.csdevice.pojo.param.CsEngineeringQueryPageParm; import com.njcn.csdevice.pojo.param.CsEngineeringQueryParm; import com.njcn.csdevice.pojo.po.CsEngineeringPO; +import com.njcn.csdevice.pojo.po.CsLinePO; import com.njcn.csdevice.pojo.vo.CsEngineeringVO; import com.njcn.csdevice.service.CsEngineeringService; import com.njcn.web.controller.BaseController; @@ -20,10 +21,7 @@ import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -88,4 +86,14 @@ public class EngineeringController extends BaseController { IPage page = csEngineeringService.queryEngineeringPage(csEngineeringQueryPageParm); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, page, methodDescribe); } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/queryEngineeringById") + @ApiOperation("工程查询通过id获取") + @ApiImplicitParam(name = "id", value = "工程id", required = true) + public HttpResult queryEngineeringById(@RequestParam String id){ + String methodDescribe = getMethodDescribe("queryEngineeringById"); + CsEngineeringPO po = csEngineeringService.queryEngineeringById(id); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, po, methodDescribe); + } } diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsEngineeringService.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsEngineeringService.java index 3c45275..03f0b81 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsEngineeringService.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsEngineeringService.java @@ -55,4 +55,6 @@ public interface CsEngineeringService extends IService{ * @return */ List getEngineerings(List list); + + CsEngineeringPO queryEngineeringById(String id); } 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 8d663fc..d6a09f6 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 @@ -11,6 +11,7 @@ import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO; import com.njcn.csdevice.pojo.vo.CsEquipmentDeliveryVO; import com.njcn.csdevice.pojo.vo.DeviceManagerVO; import com.njcn.csdevice.pojo.vo.ProjectEquipmentVO; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; @@ -165,6 +166,16 @@ public interface CsEquipmentDeliveryService extends IService getCldDevByIp(String id, List runFlag); + /** + * 根据前置id和进程号修改设备状态;同时修改设备下的监测点的状态 + */ + void updateCldDevStatus(String nodeId, Integer processNo); + /** + * 根据设备id和状态来修改设备运行状态;同时修改设备下的监测点的状态 + * @param devId + * @param status + */ + void flipCldDevStatus(String devId, Integer status); } diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsLinePOService.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsLinePOService.java index 2aa3261..f0dfef9 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsLinePOService.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/CsLinePOService.java @@ -50,4 +50,14 @@ public interface CsLinePOService extends IService{ void addCldLine(CsLineParam param); + void updateCldLine(CsLineParam param); + + void deleteCldLine(String id); + + /** + * 修改监测点状态为停运 + * @param lineList 监测点集合 + * @param status 运行状态 + */ + void updateCldLineStatus(List lineList, Integer status); } diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsDevModelServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsDevModelServiceImpl.java index cb2590f..f75c36d 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsDevModelServiceImpl.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsDevModelServiceImpl.java @@ -19,6 +19,8 @@ import com.njcn.csdevice.service.ICsDataArrayService; import com.njcn.csdevice.service.ICsDataSetService; import com.njcn.redis.utils.RedisUtil; import com.njcn.system.api.DictTreeFeignClient; +import com.njcn.system.enums.DicDataEnum; +import com.njcn.system.enums.DicTreeEnum; import com.njcn.system.pojo.po.SysDicTreePO; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -163,7 +165,7 @@ public class CsDevModelServiceImpl extends ServiceImpl list = this.lambdaQuery() - .eq(CsDevModelPO::getDevTypeName,"CLD") + .eq(CsDevModelPO::getDevTypeName, DicDataEnum.DEV_CLD.getCode()) .eq(CsDevModelPO::getStatus,1) .list(); if (CollectionUtil.isEmpty(list)) { diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsEngineeringServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsEngineeringServiceImpl.java index 8b03324..1f2555f 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsEngineeringServiceImpl.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/CsEngineeringServiceImpl.java @@ -217,6 +217,11 @@ public class CsEngineeringServiceImpl extends ServiceImpl dataSetList = new ArrayList<>(); CsEquipmentDeliveryPO csEquipmentDeliveryPo = this.lambdaQuery().eq(CsEquipmentDeliveryPO::getId, deviceId).one(); @@ -737,7 +737,7 @@ public class CsEquipmentDeliveryServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(CsEquipmentDeliveryPO::getNodeId,nodeId) + .eq(CsEquipmentDeliveryPO::getNodeProcess,processNo) + .eq(CsEquipmentDeliveryPO::getUsageStatus,1) + .eq(CsEquipmentDeliveryPO::getRunStatus,2); + List devList = this.list(lambdaQueryWrapper); + if (CollectionUtil.isNotEmpty(devList)) { + //修改设备运行状态 + devList.forEach(item->{item.setRunStatus(1);}); + this.updateBatchById(devList); + //修改监测点运行状态 + List devIdList = devList.stream().map(CsEquipmentDeliveryPO::getId).collect(Collectors.toList()); + List lineList = csLinePOService.getLinesByDevList(devIdList); + csLinePOService.updateCldLineStatus(lineList,0); + } + } + + @Override + public void flipCldDevStatus(String devId, Integer status) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(CsEquipmentDeliveryPO::getId,devId) + .eq(CsEquipmentDeliveryPO::getUsageStatus,1) + .ne(CsEquipmentDeliveryPO::getUsageStatus,0); + CsEquipmentDeliveryPO po = this.getOne(lambdaQueryWrapper); + if (ObjectUtil.isNotNull(po)) { + po.setRunStatus(status); + this.updateById(po); + //修改监测点运行状态 + List lineList = csLinePOService.getLinesByDevList(Collections.singletonList(po.getId())); + csLinePOService.updateCldLineStatus(lineList,status==1?2:0); + } + } + //根据前置机id获取装置数量 public List getListByNodeId(String nodeId) { LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); 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 8c4c8ed..c0ba769 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 @@ -1,9 +1,11 @@ package com.njcn.csdevice.service.impl; import cn.hutool.core.collection.CollectionUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.common.pojo.exception.BusinessException; import com.njcn.csdevice.mapper.CsLedgerMapper; import com.njcn.csdevice.mapper.CsLinePOMapper; import com.njcn.csdevice.pojo.param.CsLineParam; @@ -17,12 +19,15 @@ import com.njcn.csdevice.service.ICsDataSetService; import com.njcn.system.api.DicDataFeignClient; import com.njcn.system.enums.DicDataEnum; import com.njcn.system.pojo.po.DictData; +import com.njcn.user.pojo.constant.FunctionState; +import com.njcn.user.pojo.po.Function; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; @@ -108,7 +113,7 @@ public class CsLinePOServiceImpl extends ServiceImpl i BeanUtils.copyProperties(param,po); po.setStatus(1); po.setRunStatus(2); - po.setLineId(param.getDevMac().replace(":","") + param.getClDid()); + po.setLineId(param.getDevMac().replace(":","") + param.getLineNo()); //模板id CsDevModelPO po1 = csDevModelService.getCldModel(); po.setDataModelId(po1.getId()); @@ -118,6 +123,7 @@ public class CsLinePOServiceImpl extends ServiceImpl i List list = csDataSetService.findDataSetByModelId(po1.getId()); if (CollectionUtil.isNotEmpty(list)) { po.setDataSetId(list.get(0).getId()); + po.setClDid(list.get(0).getClDev()); } //监测位置 DictData data = dicDataFeignClient.getDicDataByCode(DicDataEnum.GRID_SIDE.getCode()).getData(); @@ -126,7 +132,7 @@ public class CsLinePOServiceImpl extends ServiceImpl i //2.新增台账树信息 CsLedger csLedger = new CsLedger(); - csLedger.setId(param.getDevMac().replace(":","") + param.getClDid()); + csLedger.setId(param.getDevMac().replace(":","") + param.getLineNo()); csLedger.setPid(param.getDevId()); csLedger.setPids("0," + param.getEngineeringId() + "," + param.getProjectId() + "," + param.getDevId()); csLedger.setName(param.getName()); @@ -136,6 +142,43 @@ public class CsLinePOServiceImpl extends ServiceImpl i csLedgerMapper.insert(csLedger); } + @Override + public void updateCldLine(CsLineParam param) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(CsLinePO::getDeviceId,param.getDevId()) + .ne(CsLinePO::getLineId,param.getLineId()) + .eq(CsLinePO::getStatus,1) + .eq(CsLinePO::getClDid,param.getClDid()); + List lineList = this.list(wrapper); + if (CollectionUtil.isNotEmpty(lineList)) { + throw new BusinessException("监测点线路号重复,请调整!"); + } + LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); + lambdaUpdateWrapper.eq(CsLinePO::getLineId,param.getLineId()) + .eq(CsLinePO::getStatus,1) + .set(CsLinePO::getVolGrade,param.getVolGrade()) + .set(CsLinePO::getConType,param.getConType()) + .set(CsLinePO::getPtRatio,param.getPtRatio()) + .set(CsLinePO::getPt2Ratio,param.getPt2Ratio()) + .set(CsLinePO::getCtRatio,param.getCtRatio()) + .set(CsLinePO::getCt2Ratio,param.getCt2Ratio()) + .set(CsLinePO::getClDid,param.getClDid()) + .set(CsLinePO::getLineInterval,param.getLineInterval()) + .set(CsLinePO::getRunStatus,param.getRunStatus()); + this.update(lambdaUpdateWrapper); + } + + @Override + public void deleteCldLine(String id) { + + } + + @Override + public void updateCldLineStatus(List lineList, Integer status) { + lineList.forEach(item->{item.setRunStatus(status);}); + this.updateBatchById(lineList); + } + // /** // * 1.平台端默认配置拓扑图模板,包含拓扑图信息(cs_topology_diagram_template)和拓扑图上监测点的点位信息(cs_line_topology_template) // * diff --git a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/IcdServiceImpl.java b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/IcdServiceImpl.java index f754658..fd67659 100644 --- a/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/IcdServiceImpl.java +++ b/cs-device/cs-device-boot/src/main/java/com/njcn/csdevice/service/impl/IcdServiceImpl.java @@ -3,6 +3,7 @@ package com.njcn.csdevice.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.github.tocrhz.mqtt.publisher.MqttPublisher; import com.njcn.access.utils.ChannelObjectUtil; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.csdevice.param.IcdLedgerParam; @@ -36,8 +37,8 @@ class IcdServiceImpl implements IcdService { private final CsEngineeringService csEngineeringService; private final AppProjectService appProjectService; private final CsEquipmentDeliveryService csEquipmentDeliveryService; - private final CsDevModelRelationService csDevModelRelationService; private final CsLinePOService csLinePOService; + private final MqttPublisher publisher; @Override public List getLedgerInfo(IcdParam param) { @@ -81,7 +82,7 @@ class IcdServiceImpl implements IcdService { monitorInfo.setDeviceId(dev.getId()); monitorInfo.setId(line.getLineId()); monitorInfo.setName(line.getName()); - monitorInfo.setLineNo(String.valueOf(line.getClDid())); + monitorInfo.setLineNo(String.valueOf(line.getLineNo())); monitorInfo.setVoltageLevel(line.getVolGrade() + "kV"); monitorInfo.setStatus(line.getRunStatus()); monitorInfo.setPtType(String.valueOf(line.getConType())); @@ -118,7 +119,16 @@ class IcdServiceImpl implements IcdService { // 第四种:从设备创建 else if (CollectionUtil.isNotEmpty(param.getDevice())) { handleFromDeviceCreation(param); + //新增完监测点后,需要通知前置修改台账信息 + + } + } + + public void sendFrontLedger() { + + + } private boolean isAllIndicesNull(IcdLedgerParam param) { @@ -187,7 +197,7 @@ class IcdServiceImpl implements IcdService { line.setDevId(param.getDevMacMap().get(line.getDevMac())); } else { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(CsLinePO::getDeviceId,param.getDevIndex()).eq(CsLinePO::getClDid,line.getClDid()).eq(CsLinePO::getStatus,1); + wrapper.eq(CsLinePO::getDeviceId,param.getDevIndex()).eq(CsLinePO::getLineNo,line.getLineNo()).eq(CsLinePO::getStatus,1); CsLinePO po4 = csLinePOService.getOne(wrapper); if (ObjectUtil.isNotNull(po4)) { throw new BusinessException("监测点线路号重复,请调整!"); @@ -206,7 +216,7 @@ class IcdServiceImpl implements IcdService { List duplicates = new ArrayList<>(); for (CsLineParam device : devices) { - String combination = device.getDevMac() + "-" + device.getClDid(); + String combination = device.getDevMac() + "-" + device.getLineNo(); if (seenCombinations.contains(combination)) { // 发现重复,添加到重复列表 duplicates.add(device); diff --git a/cs-device/cs-device-boot/src/test/java/com/njcn/AppTest.java b/cs-device/cs-device-boot/src/test/java/com/njcn/AppTest.java index 532d91d..6b51b80 100644 --- a/cs-device/cs-device-boot/src/test/java/com/njcn/AppTest.java +++ b/cs-device/cs-device-boot/src/test/java/com/njcn/AppTest.java @@ -1,19 +1,32 @@ package com.njcn; +import cn.hutool.core.date.DatePattern; import com.njcn.csdevice.CsDeviceBootApplication; import com.njcn.csdevice.pojo.dto.PqsCommunicateDto; -import com.njcn.csdevice.service.DeviceFtpService; -import com.njcn.csdevice.service.ICsCommunicateService; +import com.njcn.csdevice.pojo.po.CsEquipmentDeliveryPO; +import com.njcn.csdevice.service.*; +import com.njcn.influx.pojo.po.PqsCommunicate; +import com.njcn.influx.query.InfluxQueryWrapper; +import com.njcn.influx.utils.InfluxDbUtils; import lombok.AllArgsConstructor; -import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import org.influxdb.InfluxDB; +import org.influxdb.dto.BatchPoints; +import org.influxdb.dto.Point; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.test.context.web.WebAppConfiguration; +import org.springframework.util.CollectionUtils; + +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; +import java.util.*; +import java.util.concurrent.TimeUnit; import static org.junit.Assert.assertTrue; @@ -33,6 +46,9 @@ public class AppTest{ @Autowired private ICsCommunicateService csCommunicateService; + private final IRStatIntegrityDService statIntegrityDService; + private final IRStatOnlineRateDService statOnlineRateDService; + /** * Rigorous Test :-) @@ -62,15 +78,35 @@ public class AppTest{ } } + @SneakyThrows + @Test + public void test1() { + } + @SneakyThrows @Test public void writeData() { PqsCommunicateDto pqsCommunicateDto = new PqsCommunicateDto(); - pqsCommunicateDto.setTime("2024-01-01 00:00:00"); + pqsCommunicateDto.setTime("2025-08-04 18:00:00"); pqsCommunicateDto.setDevId("da7aa071bf89864bedea8833133676b7"); - pqsCommunicateDto.setType(1); - pqsCommunicateDto.setDescription("通讯连接"); + pqsCommunicateDto.setType(0); + pqsCommunicateDto.setDescription("通讯中断"); csCommunicateService.insertion(pqsCommunicateDto); } + + public static void main(String[] args) { + InfluxDbUtils influxDbUtils = new InfluxDbUtils("admin", "123456", "http://192.168.1.24:8086", "pqsbase_zl", ""); + Map tags = new HashMap<>(); + tags.put("dev_id","da7aa071bf89864bedea8833133676b7"); + Map fields = new HashMap<>(); + fields.put("type",1); + fields.put("description","通讯正常"); + long time = LocalDateTime.parse("2025-08-02 18:00:00", DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)).atZone(ZoneId.systemDefault()).toInstant().toEpochMilli(); + Point point = influxDbUtils.pointBuilder("pqs_communicate", time, TimeUnit.MILLISECONDS, tags, fields); + BatchPoints batchPoints = BatchPoints.database(influxDbUtils.getDbName()).retentionPolicy("").consistency(InfluxDB.ConsistencyLevel.ALL).build(); + batchPoints.point(point); + influxDbUtils.batchInsert(influxDbUtils.getDbName(), "", InfluxDB.ConsistencyLevel.ALL, TimeUnit.MILLISECONDS, Collections.singletonList(batchPoints.lineProtocol())); + + } } diff --git a/cs-device/cs-device-boot/src/test/java/com/njcn/DownloadFileTest.java b/cs-device/cs-device-boot/src/test/java/com/njcn/DownloadFileTest.java index 66aca28..b53424b 100644 --- a/cs-device/cs-device-boot/src/test/java/com/njcn/DownloadFileTest.java +++ b/cs-device/cs-device-boot/src/test/java/com/njcn/DownloadFileTest.java @@ -1,8 +1,13 @@ package com.njcn; +import cn.hutool.core.date.DatePattern; import cn.hutool.core.util.IdUtil; +import com.njcn.access.utils.MqttUtil; import com.njcn.csdevice.pojo.dto.PqsCommunicateDto; import com.njcn.csdevice.service.DeviceFtpService; +import com.njcn.csdevice.service.IRStatIntegrityDService; +import com.njcn.csdevice.service.IRStatOnlineRateDService; +import com.njcn.csharmonic.pojo.param.StatisticsDataParam; import com.njcn.influx.imapper.EvtDataMapper; import com.njcn.influx.imapper.PqsCommunicateMapper; import com.njcn.influx.pojo.po.PqsCommunicate; @@ -12,9 +17,11 @@ import com.njcn.oss.utils.FileStorageUtil; import lombok.SneakyThrows; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.gson.GsonAutoConfiguration; import java.io.*; import java.nio.file.Files; +import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.format.DateTimeFormatter; @@ -33,6 +40,28 @@ public class DownloadFileTest extends BaseJunitTest{ private PqsCommunicateMapper pqsCommunicateMapper; private final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").withZone(ZoneId.systemDefault()); + @Autowired + private IRStatIntegrityDService statIntegrityDService; + @Autowired + private IRStatOnlineRateDService statOnlineRateDService; + @Autowired + private MqttUtil mqttUtil; + + @SneakyThrows + @Test + public void test() { + String nDId = "00B78D016AB5"; + String clientName = "NJCN-" + nDId.substring(nDId.length() - 6); + long startTime = System.currentTimeMillis(); + for (int i = 0; i < 200; i++) { + boolean mqttClient = mqttUtil.judgeClientOnline(clientName); + System.out.println("当前第"+i+"次,结果为:" + mqttClient); + } + long end = System.currentTimeMillis(); + System.out.println("时间差==:" + (end - startTime) + "ms"); + } + + /** * inflxudb写入 */ diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/DataServiceImpl.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/DataServiceImpl.java index 3d15df6..ba8e201 100644 --- a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/DataServiceImpl.java +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/DataServiceImpl.java @@ -94,7 +94,7 @@ public class DataServiceImpl implements IDataService { public List getRealTimeData(DataParam param) { List result = new ArrayList<>(); //获取监测点使用的数据集 - List finalCsLinePOList = csLineFeignClient.queryLineById(Arrays.asList(param.getLineId())).getData(); + List finalCsLinePOList = csLineFeignClient.queryLineById(Collections.singletonList(param.getLineId())).getData(); CsDataSet csDataSet = csDataSetMapper.selectOne(new LambdaQueryWrapper().eq(CsDataSet::getId,finalCsLinePOList.get(0).getDataSetId())); Double ct = finalCsLinePOList.get(0).getCtRatio(); Double pt = finalCsLinePOList.get(0).getPtRatio(); diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/RealDataServiceImpl.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/RealDataServiceImpl.java index 6137116..0e5c11b 100644 --- a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/RealDataServiceImpl.java +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/service/impl/RealDataServiceImpl.java @@ -121,7 +121,7 @@ public class RealDataServiceImpl implements RealDataService { throw new BusinessException("装置离线,无法获取实时数据"); } // 请求设备数据 - askDeviceDataFeignClient.askCldRealData(csEquipmentDeliveryVO.getId(), lineId); + askDeviceDataFeignClient.askCldRealData(csEquipmentDeliveryVO.getId(),lineId,csEquipmentDeliveryVO.getNodeId()); // 更新Redis中的用户集合 - 使用工具方法消除重复代码 updateRedisUserSet("rtDataUserId:" + lineId, RequestUtil.getUserIndex(), 600L); updateRedisUserSet("cldRtDataOverTime:" + lineId, RequestUtil.getUserIndex(), 5L); diff --git a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/util/InfluxDbParamUtil.java b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/util/InfluxDbParamUtil.java index 00ae82f..99cb3a4 100644 --- a/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/util/InfluxDbParamUtil.java +++ b/cs-harmonic/cs-harmonic-boot/src/main/java/com/njcn/csharmonic/util/InfluxDbParamUtil.java @@ -8,6 +8,7 @@ import com.njcn.csdevice.enums.AlgorithmResponseEnum; import com.njcn.csdevice.pojo.dto.CsEquipmentDeliveryDTO; import com.njcn.csdevice.pojo.po.CsLinePO; import com.njcn.system.api.DicDataFeignClient; +import com.njcn.system.api.DictTreeFeignClient; import com.njcn.system.enums.DicDataEnum; import com.njcn.system.pojo.po.DictData; import lombok.RequiredArgsConstructor; @@ -27,6 +28,7 @@ public class InfluxDbParamUtil { private final DicDataFeignClient dicDataFeignClient; private final EquipmentFeignClient equipmentFeignClient; + private final DictTreeFeignClient dictTreeFeignClient; /*表名换成了id本方法做转换*/ public String getTableNameByClassId(String classId){ @@ -50,6 +52,11 @@ public class InfluxDbParamUtil { if(DataParam.portableDevType.equals(csEquipmentDeliveryDTOList.get(0).getDevType())){ return finalCsLinePOList.get(0).getClDid()+""; } + //如果是云前置设备,直接返回clDid + boolean isCLdDevice = DicDataEnum.DEV_CLD.getCode().equals(dictTreeFeignClient.queryById(csEquipmentDeliveryDTOList.get(0).getDevType()).getData().getCode()); + if(isCLdDevice){ + return String.valueOf(finalCsLinePOList.get(0).getLineNo()); + } //之后的逻辑还是按照原来的不变 String position = csLineFeignClient.getPositionById(lineId).getData(); if (Objects.isNull(position)){ diff --git a/cs-harmonic/cs-harmonic-boot/src/test/java/com/njcn/InfluxDbTest.java b/cs-harmonic/cs-harmonic-boot/src/test/java/com/njcn/InfluxDbTest.java index 0726da4..78b747b 100644 --- a/cs-harmonic/cs-harmonic-boot/src/test/java/com/njcn/InfluxDbTest.java +++ b/cs-harmonic/cs-harmonic-boot/src/test/java/com/njcn/InfluxDbTest.java @@ -1,5 +1,6 @@ //package com.njcn; // +//import com.njcn.influx.utils.InfluxDbUtils; //import com.njcn.influxdb.param.InfluxDBPublicParam; //import com.njcn.influxdb.utils.InfluxDbUtils; //import lombok.AllArgsConstructor;