From 4d48b42c9860409b25f78fd32142d727eac81e93 Mon Sep 17 00:00:00 2001 From: wr <1754607820@qq.com> Date: Sun, 14 Dec 2025 16:43:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E5=85=A8=E6=99=AF=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E7=9B=91=E6=B5=8B=E7=82=B9=E8=B6=85=E6=A0=87=E4=BF=A1?= =?UTF-8?q?=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DataVerifyServiceImpl.java | 145 +++++++++++++----- 1 file changed, 106 insertions(+), 39 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 1f0edbd9f..2f0994ccf 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 @@ -4,6 +4,7 @@ package com.njcn.device.pq.service.impl; import cn.hutool.core.codec.Base64; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.*; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -34,6 +35,7 @@ import com.njcn.device.pq.pojo.vo.LineDetailDataVO; import com.njcn.device.pq.pojo.vo.dataClean.*; import com.njcn.device.pq.service.CommTerminalService; import com.njcn.device.pq.service.IDataVerifyService; +import com.njcn.harmonic.pojo.po.RStatDataVD; import com.njcn.supervision.api.UserLedgerFeignClient; import com.njcn.supervision.pojo.vo.user.NewUserReportVO; import com.njcn.system.api.DicDataFeignClient; @@ -48,6 +50,7 @@ import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import java.lang.reflect.Field; +import java.lang.reflect.Method; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; @@ -412,74 +415,131 @@ public class DataVerifyServiceImpl extends ServiceImpl uaberrance = new ArrayList<>(); List ubalance = new ArrayList<>(); List flicker = new ArrayList<>(); - for (DataLimitRateDetailDto dto : dtoList) { - dealJsonArr(new JSONArray(dto.getFreqDevOvertime()), freq, DicDataEnum.FREQUENCY_DEV.getCode(), null); - dealJsonArr(new JSONArray(dto.getVoltageDevOvertime()), voltage, DicDataEnum.VOLTAGE_DEV.getCode(), null); - dealJsonArr(new JSONArray(dto.getUaberranceOvertime()), uaberrance, DicDataEnum.THD_V.getCode(), null); - dealJsonArr(new JSONArray(dto.getUbalanceOvertime()), ubalance, DicDataEnum.phase_Voltage.getCode(), null); - dealJsonArr(new JSONArray(dto.getFlickerOvertime()), flicker, DicDataEnum.FLICKER.getCode(), null); - } + List iNeg = new ArrayList<>(); + + List uharm = new ArrayList<>(); + List iharm = new ArrayList<>(); + List inuharm = new ArrayList<>(); + + for (DataLimitRateDetailDto dto : dtoList) { + dealJsonArr(new JSONArray(dto.getFreqDevOvertime()), freq, DicDataEnum.FREQUENCY_DEV.getName(), null); + dealJsonArr(new JSONArray(dto.getVoltageDevOvertime()), voltage, DicDataEnum.VOLTAGE_DEV.getName(), null); + dealJsonArr(new JSONArray(dto.getUaberranceOvertime()), uaberrance, DicDataEnum.THD_V.getName(), null); + dealJsonArr(new JSONArray(dto.getUbalanceOvertime()), ubalance, DicDataEnum.phase_Voltage.getName(), null); + dealJsonArr(new JSONArray(dto.getFlickerOvertime()), flicker, DicDataEnum.FLICKER.getName(), null); + dealJsonArr(new JSONArray(dto.getINegOvertime()), iNeg, DicDataEnum.NEG_CURRENT.getName(), null); + // 处理谐波类指标 + processHarmonicTargetHarm(dto, DicDataEnum.HARMONIC_VOLTAGE.getName(), "uharm", 2, 25, uharm); + processHarmonicTargetHarm(dto, DicDataEnum.HARMONIC_CURRENT.getName(), "iharm", 2, 25, iharm); + processHarmonicTargetHarm(dto, DicDataEnum.INTERHARMONIC_VOLTAGE.getName(), "inuharm", 1, 16, inuharm); + } + assess.setFreqLimit(overLimitDataById.getFreqDev()); + assess.setVDevLimit(overLimitDataById.getVoltageDev()); + assess.setUDevLimit(overLimitDataById.getUvoltageDev()); + assess.setUaberranceLimit(overLimitDataById.getUaberrance()); + assess.setUnbalanceLimit(overLimitDataById.getUbalance()); + assess.setFlickerLimit(overLimitDataById.getFlicker()); + assess.setINegLimit(overLimitDataById.getINeg()); + - //电压偏差 - //负序电流 - //电压总谐波 //谐波电压 - //谐波电压 - //频率偏差 //谐波电流 //简谐波电压 - //闪变 - //三相不平衡度 + + + + //频率偏差 if (CollUtil.isNotEmpty(freq)) { List collect = freq.stream().sorted(Comparator.comparing(DetailAbnormalVO.DetailLimitInnerVO::getVal).reversed()).collect(Collectors.toList()); DetailAbnormalVO.DetailLimitInnerVO val = collect.get(0); - assess.setFreqData(Double.valueOf(val.getVal())); - assess.setFreqLimit(val.getOverLimitValue()); - } else { - assess.setFreqLimit(overLimitDataById.getFreqDev()); + assess.setFreqData(NumberUtil.round(val.getVal(),2).doubleValue()); } + //电压偏差 if (CollUtil.isNotEmpty(voltage)) { List collect = voltage.stream().filter(x->Double.valueOf(x.getVal()) > 0).sorted(Comparator.comparing(DetailAbnormalVO.DetailLimitInnerVO::getVal).reversed()).collect(Collectors.toList()); if(CollUtil.isNotEmpty(collect)){ DetailAbnormalVO.DetailLimitInnerVO val = collect.get(0); - assess.setVDevData(Double.valueOf(val.getVal())); - assess.setVDevLimit(val.getOverLimitValue()); + assess.setVDevData(NumberUtil.round(val.getVal(),2).doubleValue()); } List collect2 = voltage.stream().filter(x->Double.valueOf(x.getVal()) < 0).sorted(Comparator.comparing(DetailAbnormalVO.DetailLimitInnerVO::getVal)).collect(Collectors.toList()); if(CollUtil.isNotEmpty(collect2)){ DetailAbnormalVO.DetailLimitInnerVO val2 = collect2.get(0); - assess.setUDevData(Double.valueOf(val2.getVal())); - assess.setUDevLimit(val2.getOverLimitValue()); + assess.setUDevData(NumberUtil.round(val2.getVal(),2).doubleValue()); } - }else{ - assess.setVDevLimit(overLimitDataById.getVoltageDev()); - assess.setUDevLimit(overLimitDataById.getUvoltageDev()); } - + //负序电流 + if (CollUtil.isNotEmpty(iNeg)) { + List collect = iNeg.stream().sorted(Comparator.comparing(DetailAbnormalVO.DetailLimitInnerVO::getVal).reversed()).collect(Collectors.toList()); + DetailAbnormalVO.DetailLimitInnerVO val = collect.get(0); + assess.setINegData(NumberUtil.round(val.getVal(),2).doubleValue()); + } + //电压总谐波 if (CollUtil.isNotEmpty(uaberrance)) { List collect = uaberrance.stream().sorted(Comparator.comparing(DetailAbnormalVO.DetailLimitInnerVO::getVal).reversed()).collect(Collectors.toList()); DetailAbnormalVO.DetailLimitInnerVO val = collect.get(0); - assess.setUaberranceData(Double.valueOf(val.getVal())); - assess.setUaberranceLimit(val.getOverLimitValue()); - }else { - assess.setUaberranceLimit(overLimitDataById.getUaberrance()); + assess.setUaberranceData(NumberUtil.round(val.getVal(),2).doubleValue()); } - + //三相不平衡度 if (CollUtil.isNotEmpty(ubalance)) { List collect = ubalance.stream().sorted(Comparator.comparing(DetailAbnormalVO.DetailLimitInnerVO::getVal).reversed()).collect(Collectors.toList()); DetailAbnormalVO.DetailLimitInnerVO val = collect.get(0); - assess.setUnbalanceData(Double.valueOf(val.getVal())); - assess.setUnbalanceLimit(val.getOverLimitValue()); - }else{ - assess.setUnbalanceLimit(overLimitDataById.getUbalance()); + assess.setUnbalanceData(NumberUtil.round(val.getVal(),2).doubleValue()); } + //闪变 if (CollUtil.isNotEmpty(flicker)) { List collect = flicker.stream().sorted(Comparator.comparing(DetailAbnormalVO.DetailLimitInnerVO::getVal).reversed()).collect(Collectors.toList()); DetailAbnormalVO.DetailLimitInnerVO val = collect.get(0); - assess.setFlickerData(Double.valueOf(val.getVal())); - assess.setFlickerLimit(val.getOverLimitValue()); - }else { - assess.setFlickerLimit(overLimitDataById.getFlicker()); + assess.setFlickerData(NumberUtil.round(val.getVal(),2).doubleValue()); + } + //谐波电压 + if (CollUtil.isNotEmpty(uharm)) { + List collect = uharm.stream().sorted(Comparator.comparing(DetailAbnormalVO.DetailLimitInnerVO::getVal).reversed()).collect(Collectors.toList()); + DetailAbnormalVO.DetailLimitInnerVO val = collect.get(0); + assess.setUharmData(NumberUtil.round(val.getVal(),2).doubleValue()); + String[] split = val.getTargetName().split("次"); + try { + Class clazz = overLimitDataById.getClass(); + String methodName = "getUharm" + split[0]; + Method method = clazz.getMethod(methodName); + Float value = (Float) method.invoke(overLimitDataById); + assess.setUharmLimit(value); + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + //谐波电流 + if (CollUtil.isNotEmpty(iharm)) { + List collect = iharm.stream().sorted(Comparator.comparing(DetailAbnormalVO.DetailLimitInnerVO::getVal).reversed()).collect(Collectors.toList()); + DetailAbnormalVO.DetailLimitInnerVO val = collect.get(0); + assess.setIharmData(NumberUtil.round(val.getVal(),2).doubleValue()); + String[] split = val.getTargetName().split("次"); + try { + Class clazz = overLimitDataById.getClass(); + String methodName = "getIharm" + split[0]; + Method method = clazz.getMethod(methodName); + Float value = (Float) method.invoke(overLimitDataById); + assess.setIharmLimit(value); + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + //间谐波电压 + if (CollUtil.isNotEmpty(inuharm)) { + List collect = inuharm.stream().sorted(Comparator.comparing(DetailAbnormalVO.DetailLimitInnerVO::getVal).reversed()).collect(Collectors.toList()); + DetailAbnormalVO.DetailLimitInnerVO val = collect.get(0); + assess.setInuharmData(NumberUtil.round(val.getVal(),2).doubleValue()); + String[] split = val.getTargetName().split("次"); + try { + Class clazz = overLimitDataById.getClass(); + String methodName = "getInuharm" + split[0]; + Method method = clazz.getMethod(methodName); + Float value = (Float) method.invoke(overLimitDataById); + assess.setInuharmLimit(value); + } catch (Exception e) { + throw new RuntimeException(e); + } } return assess; } @@ -571,6 +631,13 @@ public class DataVerifyServiceImpl extends ServiceImpl result) { + List tempList = new ArrayList<>(); + collectHarmonicData(dto, prefix, start, end, tempList); + processSpecialTargets(tempList, result, targetCode); + } + private void processSpecialTargets(List specialTargetList, List result, String targetName) { for (String strJson : specialTargetList) { String[] temStr = strJson.split(SEPARATOR);