From 291a20649ec1d38d7bace055139f023482bdec69 Mon Sep 17 00:00:00 2001 From: hzj <826100833@qq.com> Date: Thu, 21 May 2026 11:11:38 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=8E=A7=E5=88=B6task?= =?UTF-8?q?=E6=98=AF=E5=90=A6=E6=89=A7=E8=A1=8C=E9=85=8D=E7=BD=AEbusiness:?= =?UTF-8?q?task-enabled:=20false=E4=B8=BAtrue=E6=98=AF=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=EF=BC=8Cfalse=E4=B8=8D=E6=89=A7=E8=A1=8C=EF=BC=8C=E7=BC=BA?= =?UTF-8?q?=E7=9C=81=E9=BB=98=E8=AE=A4=E4=B8=BAtrue=E5=8F=AA=E8=A1=8C?= =?UTF-8?q?=EF=BC=8C=E5=8F=AA=E6=9C=89=E6=B2=A1=E6=9C=89=E5=89=8D=E7=BD=AE?= =?UTF-8?q?=E5=BE=AE=E6=9C=8D=E5=8A=A1=E7=89=88=E6=9C=AC=E9=85=8D=E7=BD=AE?= =?UTF-8?q?false=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/njcn/device/pq/job/DeviceComflagTasks.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/job/DeviceComflagTasks.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/job/DeviceComflagTasks.java index de47b019e..86a93aa60 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/job/DeviceComflagTasks.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/job/DeviceComflagTasks.java @@ -14,6 +14,7 @@ import com.njcn.message.constant.RedisKeyPrefix; import com.njcn.redis.utils.RedisUtil; import lombok.RequiredArgsConstructor; import org.apache.commons.lang3.StringUtils; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @@ -35,6 +36,7 @@ import java.util.stream.Collectors; @Component @EnableScheduling @RequiredArgsConstructor +@ConditionalOnProperty(name = "business.task-enabled", havingValue = "true", matchIfMissing = true) public class DeviceComflagTasks { private final NodeMapper nodeMapper; private final IDeviceService iDeviceService; From f5e134b19435e3a0c5341348795649e260cc351e Mon Sep 17 00:00:00 2001 From: hzj <826100833@qq.com> Date: Thu, 21 May 2026 15:00:13 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=B8=85=E6=B4=97?= =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E5=8C=85=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device/pq/controller/ReasonableRangeController.java | 4 ++-- .../com/njcn/device/pq/mapper/ReasonableRangeMapper.java | 2 +- .../com/njcn/device/pq/service/ReasonableRangeService.java | 7 ++++--- .../device/pq/service/impl/ReasonableRangeServiceImpl.java | 7 ++++--- .../common/service/impl/TerminalBaseServiceImpl.java | 2 ++ 5 files changed, 13 insertions(+), 9 deletions(-) diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/ReasonableRangeController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/ReasonableRangeController.java index 4027f0d50..b7345e50d 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/ReasonableRangeController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/ReasonableRangeController.java @@ -6,14 +6,14 @@ package com.njcn.device.pq.controller; * @Description: 异常告警数据指标范围 */ +import com.njcn.algorithm.pojo.dto.PqReasonableRangeDto; +import com.njcn.algorithm.pojo.param.DataCleanParam; import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.constant.OperateType; 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.dataProcess.param.DataCleanParam; -import com.njcn.dataProcess.pojo.dto.PqReasonableRangeDto; import com.njcn.device.pq.service.ReasonableRangeService; import com.njcn.web.controller.BaseController; import io.swagger.annotations.Api; diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/ReasonableRangeMapper.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/ReasonableRangeMapper.java index 7017196cf..c8c886f89 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/ReasonableRangeMapper.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/ReasonableRangeMapper.java @@ -1,7 +1,7 @@ package com.njcn.device.pq.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.njcn.dataProcess.pojo.po.PqReasonableRange; +import com.njcn.algorithm.pojo.po.PqReasonableRange; /** *

diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/ReasonableRangeService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/ReasonableRangeService.java index 332229065..d25879676 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/ReasonableRangeService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/ReasonableRangeService.java @@ -1,9 +1,10 @@ package com.njcn.device.pq.service; import com.baomidou.mybatisplus.extension.service.IService; -import com.njcn.dataProcess.param.DataCleanParam; -import com.njcn.dataProcess.pojo.dto.PqReasonableRangeDto; -import com.njcn.dataProcess.pojo.po.PqReasonableRange; +import com.njcn.algorithm.pojo.dto.PqReasonableRangeDto; +import com.njcn.algorithm.pojo.param.DataCleanParam; +import com.njcn.algorithm.pojo.po.PqReasonableRange; + import java.util.List; diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/ReasonableRangeServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/ReasonableRangeServiceImpl.java index c70d0e44c..4427570a6 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/ReasonableRangeServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/ReasonableRangeServiceImpl.java @@ -3,10 +3,11 @@ package com.njcn.device.pq.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; + import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.njcn.dataProcess.param.DataCleanParam; -import com.njcn.dataProcess.pojo.dto.PqReasonableRangeDto; -import com.njcn.dataProcess.pojo.po.PqReasonableRange; +import com.njcn.algorithm.pojo.dto.PqReasonableRangeDto; +import com.njcn.algorithm.pojo.param.DataCleanParam; +import com.njcn.algorithm.pojo.po.PqReasonableRange; import com.njcn.device.pq.mapper.ReasonableRangeMapper; import com.njcn.device.pq.service.ReasonableRangeService; import org.springframework.beans.BeanUtils; diff --git a/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/common/service/impl/TerminalBaseServiceImpl.java b/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/common/service/impl/TerminalBaseServiceImpl.java index 9870dcfca..51ed88197 100644 --- a/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/common/service/impl/TerminalBaseServiceImpl.java +++ b/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/common/service/impl/TerminalBaseServiceImpl.java @@ -2884,6 +2884,8 @@ public class TerminalBaseServiceImpl extends ServiceImpl imple device.setUpdateTime(LocalDateTime.now()); device.setElectroplate(0); device.setOnTime(1); + //处理装置识别码秘钥 + coderM3d(device, false); deviceMapper.insert(device); //分配前置进程 nodeDeviceService.oneKeyDistribution(node.getId()); From 5fff0890e8183ade4009ffa3cf21f7632be1fa6d Mon Sep 17 00:00:00 2001 From: hzj <826100833@qq.com> Date: Thu, 21 May 2026 15:15:24 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=B8=85=E6=B4=97?= =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E5=8C=85=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device/pq/service/impl/DataVerifyServiceImpl.java | 9 +++------ .../pq/service/impl/PqDataVerifyBakServiceImpl.java | 6 +++--- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DataVerifyServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DataVerifyServiceImpl.java index 242c887b7..63ce6710a 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DataVerifyServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/DataVerifyServiceImpl.java @@ -9,20 +9,17 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.algorithm.pojo.api.PqReasonableRangeFeignClient; +import com.njcn.algorithm.pojo.dto.PqReasonableRangeDto; +import com.njcn.algorithm.pojo.param.DataCleanParam; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.dataProcess.api.DataLimitRateDetailFeignClient; import com.njcn.dataProcess.api.DataLimitRateFeignClient; import com.njcn.dataProcess.api.DataLimitTargetFeignClient; -import com.njcn.dataProcess.api.PqReasonableRangeFeignClient; import com.njcn.dataProcess.enums.DataCleanEnum; -import com.njcn.dataProcess.param.DataCleanParam; import com.njcn.dataProcess.param.LineCountEvaluateParam; import com.njcn.dataProcess.pojo.dto.DataLimitRateDetailDto; -import com.njcn.dataProcess.pojo.dto.DataLimitRateDto; import com.njcn.dataProcess.pojo.dto.DataLimitTargetDto; -import com.njcn.dataProcess.pojo.dto.PqReasonableRangeDto; -import com.njcn.device.biz.enums.DeviceResponseEnum; -import com.njcn.device.biz.pojo.dto.LineDevGetDTO; import com.njcn.device.biz.pojo.po.Overlimit; import com.njcn.device.line.mapper.LineMapper; import com.njcn.device.line.service.DeptLineService; diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqDataVerifyBakServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqDataVerifyBakServiceImpl.java index 2137abeac..6e0589e68 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqDataVerifyBakServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/PqDataVerifyBakServiceImpl.java @@ -19,12 +19,12 @@ import com.alibaba.excel.write.style.column.SimpleColumnWidthStyleStrategy; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.algorithm.pojo.api.PqReasonableRangeFeignClient; +import com.njcn.algorithm.pojo.dto.PqReasonableRangeDto; +import com.njcn.algorithm.pojo.param.DataCleanParam; import com.njcn.common.pojo.dto.SimpleDTO; import com.njcn.common.pojo.exception.BusinessException; -import com.njcn.dataProcess.api.PqReasonableRangeFeignClient; import com.njcn.dataProcess.enums.DataCleanEnum; -import com.njcn.dataProcess.param.DataCleanParam; -import com.njcn.dataProcess.pojo.dto.PqReasonableRangeDto; import com.njcn.device.common.mapper.onlinerate.OnLineRateMapper; import com.njcn.device.common.service.GeneralDeviceService; import com.njcn.device.line.mapper.LineMapper; From 615fe78d61d89bb758ceb911f435e523f2c84e07 Mon Sep 17 00:00:00 2001 From: hzj <826100833@qq.com> Date: Fri, 22 May 2026 14:05:53 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E8=BE=BD=E5=AE=81=E7=A8=B3=E6=80=81?= =?UTF-8?q?=E6=8C=87=E6=A0=87=E8=B6=85=E6=A0=87=E6=98=8E=E7=BB=86=E7=AD=89?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2=E4=B8=B0=E5=AF=8C=E6=9F=A5=E8=AF=A2=E6=9D=A1?= =?UTF-8?q?=E4=BB=B6=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device/biz/pojo/dto/LineALLInfoDTO.java | 5 ++ .../impl/RStatIntegrityDServiceImpl.java | 65 ++++++++++++++++--- .../line/service/impl/LineServiceImpl.java | 6 ++ .../service/impl/AnalyzeServiceImpl.java | 32 ++++++++- 4 files changed, 97 insertions(+), 11 deletions(-) diff --git a/pqs-device/common-device-biz/src/main/java/com/njcn/device/biz/pojo/dto/LineALLInfoDTO.java b/pqs-device/common-device-biz/src/main/java/com/njcn/device/biz/pojo/dto/LineALLInfoDTO.java index 03b0c64f5..f09e09c87 100644 --- a/pqs-device/common-device-biz/src/main/java/com/njcn/device/biz/pojo/dto/LineALLInfoDTO.java +++ b/pqs-device/common-device-biz/src/main/java/com/njcn/device/biz/pojo/dto/LineALLInfoDTO.java @@ -41,6 +41,11 @@ public class LineALLInfoDTO { private Integer num; @ApiModelProperty(name = "objName",value = "监测点对象名称") private String objName; + @ApiModelProperty(name = "objName",value = "电网侧监测点对象名称Id") + private String objId; + @ApiModelProperty(name = "objName",value = "电网侧监测点对象名称") + private String objName2; + @ApiModelProperty(name = "loadType",value = "监测对象类型") private String loadType; @ApiModelProperty(name = "voltageLevel",value = "电压等级") diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/RStatIntegrityDServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/RStatIntegrityDServiceImpl.java index 7eef6aff8..ef4231e0a 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/RStatIntegrityDServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/RStatIntegrityDServiceImpl.java @@ -2,12 +2,15 @@ package com.njcn.device.pq.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; +import com.njcn.device.biz.commApi.CommLineClient; +import com.njcn.device.biz.pojo.dto.LineALLInfoDTO; import com.njcn.device.common.service.GeneralDeviceService; import com.njcn.device.line.mapper.LineDetailMapper; import com.njcn.device.line.mapper.LineMapper; @@ -66,6 +69,7 @@ public class RStatIntegrityDServiceImpl extends MppServiceImpl deviceInfo = deviceService.getDeviceInfo(param, null, Collections.singletonList(1)); if (CollUtil.isNotEmpty(deviceInfo)) { @@ -154,14 +161,55 @@ public class RStatIntegrityDServiceImpl extends MppServiceImpl lineIntegrityRateInfo = rStatIntegrityDMapper.getLineIntegrityRateInfo(lineIds, param.getSearchBeginTime(), param.getSearchEndTime()); - //获取所有监测点信息信息 - List LineInfoByIds = lineService.getLineDetailByIds(lineIds); + List filterLineList = new ArrayList<>(); - rate.setBelowNum(CollUtil.isNotEmpty(lineIntegrityRateInfo) ? calculateIntegrityRate(lineIntegrityRateInfo, 90, lineIds.size()) : lineIds.size()); - rate.setTotalOnlineRate(calculateIntegrityRate(lineIntegrityRateInfo, lineIds).doubleValue()>100.0?BigDecimal.valueOf(100.0) : calculateIntegrityRate(lineIntegrityRateInfo, lineIds)); + if(CollectionUtil.isNotEmpty(lineIds)){ + //根据searchvalue过滤 + List data = commLineClient.getLineAllDetailList(lineIds).getData(); + filterLineList= data.stream() + .filter(dto -> { + LineALLInfoDTO.LineLineDTO lineDTO = dto.getLineLineDTO(); + String linename = lineDTO != null ? lineDTO.getLinename() : null; + String objName2 = lineDTO != null ? lineDTO.getObjName2() : null; + + LineALLInfoDTO.LineSubStationDTO subStationDTO = dto.getLineSubStationDTO(); + String subStationName = subStationDTO != null ? subStationDTO.getSubStationName() : null; + + // 大小写敏感的模糊匹配(相当于 MySQL 的 LIKE '%keyword%') + return (linename != null && linename.contains(tempSearchValue)) + || (objName2 != null && objName2.contains(tempSearchValue)) + || (subStationName != null && subStationName.contains(tempSearchValue)); + }).map(dto -> dto.getLineLineDTO() != null ? dto.getLineLineDTO().getLineId() : null) + + .collect(Collectors.toList()); + } + rate.setTotalNum(filterLineList.size()); + List finalFilterLineList = filterLineList; + //根据过滤后监测点过滤 + deviceInfo= deviceInfo.stream() + .filter(dto -> { + List original = dto.getLineIndexes(); + if (original == null || original.isEmpty()) { + return false; + } + // 计算交集 + List intersection = original.stream() + .filter(finalFilterLineList::contains) + .collect(Collectors.toList()); + if (intersection.isEmpty()) { + return false; + } + // 更新当前 DTO 的 lineIndexes 为交集 + dto.setLineIndexes(intersection); + return true; + }) + .collect(Collectors.toList()); //获取所有监测点的数据完整性 + List lineIntegrityRateInfo = rStatIntegrityDMapper.getLineIntegrityRateInfo(filterLineList, param.getSearchBeginTime(), param.getSearchEndTime()); + //获取所有监测点信息信息 + List LineInfoByIds = lineService.getLineDetailByIds(filterLineList); + + rate.setBelowNum(CollUtil.isNotEmpty(lineIntegrityRateInfo) ? calculateIntegrityRate(lineIntegrityRateInfo, 90, filterLineList.size()) : lineIds.size()); + rate.setTotalOnlineRate(calculateIntegrityRate(lineIntegrityRateInfo, filterLineList).doubleValue()>100.0?BigDecimal.valueOf(100.0) : calculateIntegrityRate(lineIntegrityRateInfo, lineIds)); List citDetailList = new ArrayList<>(); DeviceOnlineRate.CitDetail citDetail; DeviceOnlineRate.LineDetail detail; @@ -174,12 +222,13 @@ public class RStatIntegrityDServiceImpl extends MppServiceImpl onlineRateByDevMap = citDevOnRate.stream() .collect(Collectors.toMap(RStatIntegrityVO::getLineIndex, RStatIntegrityVO::getIntegrityRate)); citDetail = new DeviceOnlineRate.CitDetail(); + List lineDetail = LineInfoByIds.stream().filter(x -> dto.getLineIndexes().contains(x.getLineId())).collect(Collectors.toList()); + citDetail.setCitName(dto.getName()); citDetail.setCitTotalNum(dto.getLineIndexes().size()); citDetail.setCitBelowNum(CollUtil.isNotEmpty(citDevOnRate) ? calculateIntegrityRate(citDevOnRate, 90, dto.getLineIndexes().size()) : dto.getLineIndexes().size()); citDetail.setCitTotalOnlineRate(calculateIntegrityRate(lineIntegrityRateInfo, dto.getLineIndexes()).doubleValue()>100.0?BigDecimal.valueOf(100.0):calculateIntegrityRate(lineIntegrityRateInfo, dto.getLineIndexes())); List detailList = new ArrayList<>(); - List lineDetail = LineInfoByIds.stream().filter(x -> dto.getLineIndexes().contains(x.getLineId())).collect(Collectors.toList()); for (LineDetailVO.Detail line : lineDetail) { detail = new DeviceOnlineRate.LineDetail(); detail.setCit(line.getDeptName()); diff --git a/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/line/service/impl/LineServiceImpl.java b/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/line/service/impl/LineServiceImpl.java index d0bbd0084..707a700bb 100644 --- a/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/line/service/impl/LineServiceImpl.java +++ b/pqs-device/pq-device/pq-device-com/src/main/java/com/njcn/device/line/service/impl/LineServiceImpl.java @@ -45,6 +45,7 @@ import com.njcn.influx.imapper.PqsCommunicateMapper; import com.njcn.influx.pojo.po.PqsCommunicate; import com.njcn.influx.query.InfluxQueryWrapper; import com.njcn.supervision.pojo.vo.user.NewUserReportVO; +import com.njcn.supervision.pojo.vo.user.UserReportVO; import com.njcn.system.api.AreaFeignClient; import com.njcn.system.api.DicDataFeignClient; import com.njcn.system.enums.DicDataTypeEnum; @@ -616,6 +617,11 @@ public class LineServiceImpl extends ServiceImpl implements Li lineLineDTO.setLinename(lineName); lineLineDTO.setNum(lineDetail.getNum()); lineLineDTO.setObjName(lineDetail.getObjName()); + lineLineDTO.setObjId(lineDetail.getObjId()); + if(StringUtils.isNotEmpty(lineDetail.getObjId())){ + UserReportVO userReportVO = userLedgerService.getUserReportById(lineDetail.getObjId()); + lineLineDTO.setObjName2(userReportVO.getProjectName()); + } lineLineDTO.setLoadType(dicDataFeignClient.getDicDataById(lineDetail.getLoadType()).getData().getName()); //电压使用母线电压 lineLineDTO.setVoltageLevel(dicDataFeignClient.getDicDataById(voltage.getScale()).getData().getName()); diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/AnalyzeServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/AnalyzeServiceImpl.java index db90a344a..f03d0dcf2 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/AnalyzeServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/AnalyzeServiceImpl.java @@ -11,6 +11,8 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.google.common.collect.Lists; import com.njcn.common.config.GeneralInfo; +import com.njcn.device.biz.commApi.CommLineClient; +import com.njcn.device.biz.pojo.dto.LineALLInfoDTO; import com.njcn.device.pq.api.GeneralDeviceInfoClient; import com.njcn.device.pq.api.LineFeignClient; import com.njcn.device.pq.api.UserLedgerFeignClient; @@ -48,6 +50,7 @@ import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; import java.io.File; import java.math.BigDecimal; @@ -83,7 +86,7 @@ public class AnalyzeServiceImpl implements IAnalyzeService { private final EventDetailFeignClient eventDetailFeignClient; private final DicDataFeignClient dicDataFeignClient; private final UserLedgerFeignClient userLedgerFeignClient; - + private final CommLineClient commLineClient; @Override public Page getAreaData(OverAreaVO param) { Page page = new Page<>(); @@ -301,8 +304,31 @@ public class AnalyzeServiceImpl implements IAnalyzeService { lineList.addAll(item.getLineIndexes()); }); } - if (CollectionUtil.isNotEmpty(lineList)) { - page = targetMapper.getSumLimitTargetPage(page, lineList, DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime())), + List filterLineList = new ArrayList<>(); + + if(CollectionUtil.isNotEmpty(lineList)){ + //根据searchvalue过滤 + String searchvalue=param.getSearchValue(); + List data = commLineClient.getLineAllDetailList(lineList).getData(); + filterLineList= data.stream() + .filter(dto -> { + LineALLInfoDTO.LineLineDTO lineDTO = dto.getLineLineDTO(); + String linename = lineDTO != null ? lineDTO.getLinename() : null; + String objName2 = lineDTO != null ? lineDTO.getObjName2() : null; + + LineALLInfoDTO.LineSubStationDTO subStationDTO = dto.getLineSubStationDTO(); + String subStationName = subStationDTO != null ? subStationDTO.getSubStationName() : null; + + // 大小写敏感的模糊匹配(相当于 MySQL 的 LIKE '%keyword%') + return (linename != null && linename.contains(searchvalue)) + || (objName2 != null && objName2.contains(searchvalue)) + || (subStationName != null && subStationName.contains(searchvalue)); + }).map(dto -> dto.getLineLineDTO() != null ? dto.getLineLineDTO().getLineId() : null) + + .collect(Collectors.toList()); + } + if (CollectionUtil.isNotEmpty(filterLineList)) { + page = targetMapper.getSumLimitTargetPage(page, filterLineList, DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime())), DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime()))); List pageRecords = page.getRecords(); if (CollectionUtils.isEmpty(pageRecords)) { From 79cec4e21bc38250bbf9e28e4378b465f85e7279 Mon Sep 17 00:00:00 2001 From: xy <748613696@qq.com> Date: Wed, 27 May 2026 18:10:15 +0800 Subject: [PATCH 5/5] =?UTF-8?q?feat(event):=20=E6=96=B0=E5=A2=9E=E5=8E=8B?= =?UTF-8?q?=E9=99=8D=E8=90=BD=E7=82=B9=E5=8C=BA=E5=9F=9F=E5=88=A4=E5=AE=9A?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在EventAnalysisService中添加determineDropZone方法用于判定压降落点区域 - 实现压降落点区域判定逻辑,支持A/B/C/D四个区域的分类判断 - 添加精确的数值范围匹配算法,使用BigDecimal确保计算精度 - 集成日志记录功能,便于问题排查和监控 - 在RedisUtil中新增scanKeysByPattern方法支持模糊查询key功能 - 优化代码结构,移除冗余的导入包和空行 - 更新类级别的注解配置,添加@Slf4j注解支持日志功能 --- .../java/com/njcn/redis/utils/RedisUtil.java | 24 ++++++ .../common/service/EventAnalysisService.java | 22 ++++-- .../impl/EventAnalysisServiceImpl.java | 77 ++++++++++++++++++- 3 files changed, 115 insertions(+), 8 deletions(-) diff --git a/pqs-common/common-redis/src/main/java/com/njcn/redis/utils/RedisUtil.java b/pqs-common/common-redis/src/main/java/com/njcn/redis/utils/RedisUtil.java index 23ec16594..fe9867018 100644 --- a/pqs-common/common-redis/src/main/java/com/njcn/redis/utils/RedisUtil.java +++ b/pqs-common/common-redis/src/main/java/com/njcn/redis/utils/RedisUtil.java @@ -347,6 +347,30 @@ public class RedisUtil { return info; } + /** + * 根据key模糊查询,并取出所有符合条件的key集合 + * @return + */ + + public Set scanKeysByPattern(String pattern, int count) { + Set keys = new HashSet<>(); + ScanOptions options = ScanOptions.scanOptions() + .match(pattern) + .count(count) + .build(); + + try (Cursor cursor = redisTemplate.getConnectionFactory() + .getConnection() + .scan(options)) { + while (cursor.hasNext()) { + keys.add(new String(cursor.next())); + } + } catch (Exception e) { + throw new RuntimeException("扫描Redis keys失败", e); + } + return keys; + } + /** * 数据切库 * @param dbIndex diff --git a/pqs-event/event-common/src/main/java/com/njcn/event/common/service/EventAnalysisService.java b/pqs-event/event-common/src/main/java/com/njcn/event/common/service/EventAnalysisService.java index 0ff99c5cd..e0145a95c 100644 --- a/pqs-event/event-common/src/main/java/com/njcn/event/common/service/EventAnalysisService.java +++ b/pqs-event/event-common/src/main/java/com/njcn/event/common/service/EventAnalysisService.java @@ -1,10 +1,10 @@ package com.njcn.event.common.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; -import com.njcn.event.pojo.param.*; +import com.njcn.event.pojo.param.EventBaseParam; +import com.njcn.event.pojo.param.StatisticsParam; import com.njcn.event.pojo.vo.*; -import java.text.ParseException; import java.util.List; /** @@ -79,8 +79,6 @@ public interface EventAnalysisService { */ Page getMonitorEventAnalyseQuery(EventBaseParam eventBaseParam); - - /** *监测点事件波形下载 * @author zbj @@ -88,6 +86,20 @@ public interface EventAnalysisService { */ //HttpServletResponse downloadMonitorEventWaveFile(WaveFileParam waveFileParam, HttpServletResponse response) throws Exception; - + /** + * 判定压降落点区域 + *

+ * 入参: + * eventValue 特征幅值(百分比形式,如 "80.5" 表示 80.5%),内部 /100 得到 VVm(0~1) + * persistTime 持续时间(秒) + *

+ * 优先规则: + * 1) 持续时间 < 0.001 秒 或 VVm = 0 → A区 + * 2) 按区间表逐行匹配(左闭右开 [下限, 上限)) + * 3) 都不匹配返回 null,由调用方走兜底 + * + * @return 区域名(A区/B区/C区/D区);解析失败或未匹配返回 null + */ + String determineDropZone(String eventValue, String persistTime); } diff --git a/pqs-event/event-common/src/main/java/com/njcn/event/common/service/impl/EventAnalysisServiceImpl.java b/pqs-event/event-common/src/main/java/com/njcn/event/common/service/impl/EventAnalysisServiceImpl.java index 083200af6..6c332445f 100644 --- a/pqs-event/event-common/src/main/java/com/njcn/event/common/service/impl/EventAnalysisServiceImpl.java +++ b/pqs-event/event-common/src/main/java/com/njcn/event/common/service/impl/EventAnalysisServiceImpl.java @@ -4,7 +4,6 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.njcn.common.config.GeneralInfo; @@ -13,6 +12,7 @@ import com.njcn.common.pojo.response.HttpResult; import com.njcn.device.pq.api.LineFeignClient; import com.njcn.device.pq.pojo.vo.AreaLineInfoVO; import com.njcn.device.pq.pojo.vo.LineDetailDataVO; +import com.njcn.event.common.service.EventAnalysisService; import com.njcn.event.common.service.EventDetailService; import com.njcn.event.enums.EventResponseEnum; import com.njcn.event.file.pojo.enums.WaveFileResponseEnum; @@ -21,19 +21,20 @@ import com.njcn.event.pojo.param.StatisticsParam; import com.njcn.event.pojo.po.EventDetail; import com.njcn.event.pojo.po.RmpEventDetailPO; import com.njcn.event.pojo.vo.*; -import com.njcn.event.common.service.EventAnalysisService; import com.njcn.influx.utils.InfluxDbUtils; import com.njcn.system.api.DicDataFeignClient; import com.njcn.system.enums.DicDataEnum; import com.njcn.system.enums.DicDataTypeEnum; import com.njcn.system.pojo.po.DictData; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.influxdb.dto.QueryResult; import org.springframework.stereotype.Service; import java.io.*; -import java.text.ParseException; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; @@ -51,6 +52,7 @@ import java.util.zip.ZipOutputStream; */ @Service @RequiredArgsConstructor +@Slf4j public class EventAnalysisServiceImpl implements EventAnalysisService { // 定义阈值常量(单位:百分比) @@ -1727,6 +1729,75 @@ public class EventAnalysisServiceImpl implements EventAnalysisService { } + @Override + public String determineDropZone(String eventValue, String persistTime) { + if (eventValue == null || eventValue.trim().isEmpty() + || persistTime == null || persistTime.trim().isEmpty()) { + log.warn("判定压降落点区域入参为空,eventValue={}, persistTime={}", eventValue, persistTime); + return null; + } + BigDecimal vvm; + BigDecimal vvtm; + try { + // params[3] 是百分比(如 "80.5"),/100 得到 0~1 的 VVm + vvm = new BigDecimal(eventValue.trim()).divide(new BigDecimal("100"), 6, RoundingMode.HALF_UP); + vvtm = new BigDecimal(persistTime.trim()); + } catch (Exception e) { + log.error("判定压降落点区域入参解析失败,eventValue={}, persistTime={}", eventValue, persistTime, e); + return null; + } + + // 1) 超短脉冲 或 完全失压 默认 A 区 + if (vvtm.compareTo(new BigDecimal("0.001")) < 0 + || vvm.compareTo(BigDecimal.ZERO) == 0) { + return "A区"; + } + + // 2) 区间表(左闭右开) + // A区 + if (inRange(vvm, "0.9", "1") && inRange(vvtm, "0.001", "60")) { + return "A区"; + } + if (inRange(vvm, "0", "0.9") && inRange(vvtm, "0.001", "0.05")) { + return "A区"; + } + // B区 + if (inRange(vvm, "0.5", "0.7") && inRange(vvtm, "0.05", "0.2")) { + return "B区"; + } + if (inRange(vvm, "0.7", "0.8") && inRange(vvtm, "0.05", "0.5")) { + return "B区"; + } + if (inRange(vvm, "0.8", "0.9") && inRange(vvtm, "0.05", "60")) { + return "B区"; + } + // C区 + if (inRange(vvm, "0", "0.5") && inRange(vvtm, "0.05", "1")) { + return "C区"; + } + if (inRange(vvm, "0.5", "0.7") && inRange(vvtm, "0.2", "1")) { + return "C区"; + } + if (inRange(vvm, "0.7", "0.8") && inRange(vvtm, "0.5", "1")) { + return "C区"; + } + // D区 + if (inRange(vvm, "0", "0.8") && inRange(vvtm, "1", "60")) { + return "D区"; + } + + log.warn("压降落点区域未匹配任何规则,eventValue={}, persistTime={}", eventValue, persistTime); + return null; + } + + /** + * 左闭右开区间判断:lowerInclusive ≤ value < upperExclusive + */ + private boolean inRange(BigDecimal value, String lowerInclusive, String upperExclusive) { + return value.compareTo(new BigDecimal(lowerInclusive)) >= 0 + && value.compareTo(new BigDecimal(upperExclusive)) < 0; + } + /** * 监测点事件波形下载