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;
+ }
+
/**
* 监测点事件波形下载