From d02089063953f46ba6b1c91f7247214fbeef57e5 Mon Sep 17 00:00:00 2001 From: caozehui <2427765068@qq.com> Date: Fri, 22 Aug 2025 16:27:48 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E8=A1=A8=E7=BB=93=E6=9E=84?= =?UTF-8?q?=E3=80=81=E7=BC=96=E5=86=99=E6=9F=A5=E7=9C=8B=E6=A3=80=E6=B5=8B?= =?UTF-8?q?=E7=BB=93=E6=9E=9C=E6=8E=A5=E5=8F=A3=E3=80=81=E8=AF=AF=E5=B7=AE?= =?UTF-8?q?=E8=AE=A1=E7=AE=97=E9=80=BB=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SocketContrastResponseService.java | 33 +- .../gather/detection/pojo/vo/AlignDataVO.java | 4 + .../detection/service/IAdPariService.java | 8 + .../service/impl/AdPairServiceImpl.java | 15 + .../service/impl/DetectionServiceImpl.java | 25 +- .../result/controller/ResultController.java | 33 +- .../gather/result/pojo/param/ResultParam.java | 3 + .../result/pojo/vo/ContrastResultVO.java | 28 ++ .../gather/result/pojo/vo/FormContentVO.java | 10 + .../gather/result/service/IResultService.java | 18 + .../service/impl/ResultServiceImpl.java | 333 ++++++++++++++++-- .../storage/mapper/mapping/TableGenMapper.xml | 8 +- .../storage/pojo/po/ContrastBaseResult.java | 5 + .../service/ContrastHarmonicService.java | 24 ++ .../service/ContrastNonHarmonicService.java | 24 ++ .../service/SimAndDigHarmonicService.java | 1 + .../impl/ContrastHarmonicServiceImpl.java | 30 ++ .../impl/ContrastNonHarmonicServiceImpl.java | 30 ++ .../impl/SimAndDigHarmonicServiceImpl.java | 25 +- .../impl/SimAndDigNonHarmonicServiceImpl.java | 98 +----- .../service/impl/TableGenServiceImpl.java | 2 + .../com/njcn/gather/util/StorageUtil.java | 113 ++++++ 22 files changed, 712 insertions(+), 158 deletions(-) create mode 100644 detection/src/main/java/com/njcn/gather/result/pojo/vo/ContrastResultVO.java create mode 100644 storage/src/main/java/com/njcn/gather/util/StorageUtil.java diff --git a/detection/src/main/java/com/njcn/gather/detection/handler/SocketContrastResponseService.java b/detection/src/main/java/com/njcn/gather/detection/handler/SocketContrastResponseService.java index f3c690e9..79c66a82 100644 --- a/detection/src/main/java/com/njcn/gather/detection/handler/SocketContrastResponseService.java +++ b/detection/src/main/java/com/njcn/gather/detection/handler/SocketContrastResponseService.java @@ -581,11 +581,9 @@ public class SocketContrastResponseService { this.saveAlignData(); this.clearData(); - - return; + scheduler.shutdown(); + scheduler = null; } - scheduler.shutdown(); - scheduler = null; }, 1, TimeUnit.MINUTES); } @@ -593,13 +591,17 @@ public class SocketContrastResponseService { String standardDevMonitorId = monitorId1; if (FormalTestManager.devDataMap.containsKey(monitorId1)) { standardDevMonitorId = FormalTestManager.pairsIpMap.get(monitorId1); - FormalTestManager.devDataMap.get(monitorId1).add(devData); - Collections.sort(FormalTestManager.devDataMap.get(monitorId1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); + if (!successPair.containsKey(devMonitorId)) { + FormalTestManager.devDataMap.get(devMonitorId).add(devData); + Collections.sort(FormalTestManager.devDataMap.get(devMonitorId), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); + } } if (FormalTestManager.standardDevDataMap.containsKey(monitorId1)) { devMonitorId = FormalTestManager.pairsIpMap.inverse().get(monitorId1); - FormalTestManager.standardDevDataMap.get(monitorId1).add(devData); - Collections.sort(FormalTestManager.standardDevDataMap.get(monitorId1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); + if (!successPair.containsKey(devMonitorId)) { + FormalTestManager.standardDevDataMap.get(standardDevMonitorId).add(devData); + Collections.sort(FormalTestManager.standardDevDataMap.get(standardDevMonitorId), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); + } } // 进行单个监测点的对齐校验 @@ -882,6 +884,12 @@ public class SocketContrastResponseService { webSend.setData(MsgUtil.getPairStr(devMonitorId, standardDevMonitorId, FormalTestManager.devNameMapComm) + " 数据收集成功!"); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); + FormalTestManager.devDataMap.get(devMonitorId).clear(); + FormalTestManager.standardDevDataMap.get(standardDevMonitorId).clear(); + + FormalTestManager.devDataMap.get(devMonitorId).addAll(singleMonitorAlignData.get(0)); + FormalTestManager.standardDevDataMap.get(standardDevMonitorId).addAll(singleMonitorAlignData.get(1)); + if (successPair.keySet().containsAll(FormalTestManager.pairsIpMap.keySet())) { isReceiveData = false; // 断开与设备的连接,但是不要将Socket移除 @@ -890,6 +898,7 @@ public class SocketContrastResponseService { scheduledFuture.cancel(true); scheduler.shutdown(); + String errorSysId = FormalTestManager.currentTestPlan.getErrorSysId(); String code = String.valueOf(FormalTestManager.currentTestPlan.getCode()); @@ -911,8 +920,8 @@ public class SocketContrastResponseService { // 进行误差计算 List allResultList = detectionService.processing( - FormalTestManager.devDataMap.values().stream().flatMap(Collection::stream).collect(Collectors.toList()), - FormalTestManager.standardDevDataMap.values().stream().flatMap(Collection::stream).collect(Collectors.toList()), + FormalTestManager.devDataMap.values().stream().flatMap(List::stream).collect(Collectors.toList()), + FormalTestManager.standardDevDataMap.values().stream().flatMap(List::stream).collect(Collectors.toList()), FormalTestManager.pairsIpMap, FormalTestManager.devIdMapComm, FormalTestManager.testItemMap.keySet().stream().collect(Collectors.toList()), @@ -1685,9 +1694,11 @@ public class SocketContrastResponseService { if (isStdDev) { adNonHarmonicResult.setDevMonitorId(FormalTestManager.pairsIdMap.inverse().get(temId)); adNonHarmonicResult.setStdDevMonitorId(temId); + adNonHarmonicResult.setFlag(1); } else { adNonHarmonicResult.setDevMonitorId(temId); adNonHarmonicResult.setStdDevMonitorId(FormalTestManager.pairsIdMap.get(temId)); + adNonHarmonicResult.setFlag(0); } Double a = listDTO.getA(); @@ -1720,9 +1731,11 @@ public class SocketContrastResponseService { if (isStdDev) { adHarmonicResult.setDevMonitorId(FormalTestManager.pairsIdMap.inverse().get(temId)); adHarmonicResult.setStdDevMonitorId(temId); + adHarmonicResult.setFlag(1); } else { adHarmonicResult.setDevMonitorId(temId); adHarmonicResult.setStdDevMonitorId(FormalTestManager.pairsIdMap.get(temId)); + adHarmonicResult.setFlag(0); } if (ObjectUtil.isNotNull(dui)) { diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/vo/AlignDataVO.java b/detection/src/main/java/com/njcn/gather/detection/pojo/vo/AlignDataVO.java index 86e246d4..96e80d16 100644 --- a/detection/src/main/java/com/njcn/gather/detection/pojo/vo/AlignDataVO.java +++ b/detection/src/main/java/com/njcn/gather/detection/pojo/vo/AlignDataVO.java @@ -46,6 +46,8 @@ public class AlignDataVO { private Double ucDev; + private Double utDev; + private String timeStdDev; private Double uaStdDev; @@ -53,5 +55,7 @@ public class AlignDataVO { private Double ubStdDev; private Double ucStdDev; + + private Double utStdDev; } } diff --git a/detection/src/main/java/com/njcn/gather/detection/service/IAdPariService.java b/detection/src/main/java/com/njcn/gather/detection/service/IAdPariService.java index 5f42f6a8..430372c5 100644 --- a/detection/src/main/java/com/njcn/gather/detection/service/IAdPariService.java +++ b/detection/src/main/java/com/njcn/gather/detection/service/IAdPariService.java @@ -8,4 +8,12 @@ import com.njcn.gather.detection.pojo.po.AdPair; * @data 2025-08-18 */ public interface IAdPariService extends IService { + + /** + * 获取最大的检测次数 + * + * @param devMonitorId + * @return + */ + Integer getMaxNum(String devMonitorId); } diff --git a/detection/src/main/java/com/njcn/gather/detection/service/impl/AdPairServiceImpl.java b/detection/src/main/java/com/njcn/gather/detection/service/impl/AdPairServiceImpl.java index 2864fb43..b86f3da5 100644 --- a/detection/src/main/java/com/njcn/gather/detection/service/impl/AdPairServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/detection/service/impl/AdPairServiceImpl.java @@ -1,5 +1,6 @@ package com.njcn.gather.detection.service.impl; +import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.njcn.gather.detection.mapper.AdPairMapper; import com.njcn.gather.detection.pojo.po.AdPair; @@ -7,6 +8,8 @@ import com.njcn.gather.detection.service.IAdPariService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; + /** * @author caozehui * @data 2025-08-18 @@ -14,4 +17,16 @@ import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class AdPairServiceImpl extends ServiceImpl implements IAdPariService { + + @Override + public Integer getMaxNum(String devMonitorId) { + List adPairList = this.lambdaQuery().select(AdPair::getNum) + .eq(AdPair::getDevMonitorId, devMonitorId) + .orderByDesc(AdPair::getNum) + .last("LIMIT 1").list(); + if (CollUtil.isNotEmpty(adPairList)) { + return adPairList.get(0).getNum(); + } + return 1; + } } diff --git a/detection/src/main/java/com/njcn/gather/detection/service/impl/DetectionServiceImpl.java b/detection/src/main/java/com/njcn/gather/detection/service/impl/DetectionServiceImpl.java index b954676f..2af831ca 100644 --- a/detection/src/main/java/com/njcn/gather/detection/service/impl/DetectionServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/detection/service/impl/DetectionServiceImpl.java @@ -1581,6 +1581,9 @@ public class DetectionServiceImpl { } String scriptType = split[1]; if (isDelta) { + if (DetectionCodeEnum.PVRMS.getCode().equals(scriptType)) { + scriptType = DetectionCodeEnum.VRMS.getCode(); + } if (DetectionCodeEnum.PV2_50.getCode().equals(scriptType)) { scriptType = DetectionCodeEnum.V2_50.getCode(); } @@ -1605,10 +1608,10 @@ public class DetectionServiceImpl { resultMap.put(PowerIndexEnum.P.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fUn * fIn, DetectionCodeEnum.P_FUND.getCode(), dataRule, num, code, oneConfig.getScale())); break; case V_UNBAN: - resultMap.put(PowerIndexEnum.IMBV.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fUn, DetectionCodeEnum.V_UNBAN.getCode(), dataRule, num, code, oneConfig.getScale())); + resultMap.put(PowerIndexEnum.IMBV.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, false, fUn, DetectionCodeEnum.V_UNBAN.getCode(), dataRule, num, code, oneConfig.getScale())); break; case I_UNBAN: - resultMap.put(PowerIndexEnum.IMBA.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fIn, DetectionCodeEnum.I_UNBAN.getCode(), dataRule, num, code, oneConfig.getScale())); + resultMap.put(PowerIndexEnum.IMBA.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, false, fIn, DetectionCodeEnum.I_UNBAN.getCode(), dataRule, num, code, oneConfig.getScale())); break; case V2_50: case PV2_50: @@ -1999,11 +2002,21 @@ public class DetectionServiceImpl { if (DetectionCodeEnum.PU1.getCode().equals(fundCode)) { first1 = devSqlData.stream().filter(j -> DetectionCodeEnum.U1.getCode().equals(j.getDesc())).collect(Collectors.toList()).stream().findFirst(); } + } else { + // 防止出现有PU1而没有PV2_50、SV_1_49的情况 + if ((DetectionCodeEnum.PV2_50.getCode().equals(harmCode) || DetectionCodeEnum.PSV_1_49.getCode().equals(harmCode)) && DetectionCodeEnum.PU1.getCode().equals(fundCode)) { + first1 = devSqlData.stream().filter(j -> DetectionCodeEnum.U1.getCode().equals(j.getDesc())).collect(Collectors.toList()).stream().findFirst(); + } } if (!first2.isPresent()) { if (DetectionCodeEnum.PU1.getCode().equals(fundCode)) { first2 = devSqlData.stream().filter(j -> DetectionCodeEnum.U1.getCode().equals(j.getDesc())).collect(Collectors.toList()).stream().findFirst(); } + } else { + // 防止出现有PU1而没有PV2_50、SV_1_49的情况 + if ((DetectionCodeEnum.PV2_50.getCode().equals(harmCode) || DetectionCodeEnum.PSV_1_49.getCode().equals(harmCode)) && DetectionCodeEnum.PU1.getCode().equals(fundCode)) { + first2 = devSqlData.stream().filter(j -> DetectionCodeEnum.U1.getCode().equals(j.getDesc())).collect(Collectors.toList()).stream().findFirst(); + } } DevData.SqlDataDTO fund1 = null; @@ -2172,13 +2185,13 @@ public class DetectionServiceImpl { startRadiusEnd(x.getEndValue(), fData, stdDevData, x.getConditionType(), scale), x.getEndFlag(), ObjectUtil.isNotNull(U1) ? stdDevData * U1 * 0.01 : stdDevData)).collect(Collectors.toList()); + detectionData.setData(devData); + detectionData.setResultData(stdDevData); if (CollUtil.isNotEmpty(errSysDtls)) { detectionData.setNum(harmonicNum); - detectionData.setData(devData); - detectionData.setResultData(stdDevData); PqErrSysDtls errSysDtl = BeanUtil.copyProperties(errSysDtls.get(0), PqErrSysDtls.class); - detectionData.setErrorDtlId(errSysDtl.getId()); detectionData.setUnit(errSysDtl.getErrorUnit()); + detectionData.setErrorDtlId(errSysDtl.getId()); errSysDtl.setMaxErrorValue(maxErrorMultiply(errSysDtl, fData, ObjectUtil.isNotNull(U1) ? stdDevData * U1 * 0.01 : stdDevData, scale)); detectionData.setRadius(-errSysDtl.getMaxErrorValue() + "~" + errSysDtl.getMaxErrorValue()); @@ -2194,8 +2207,8 @@ public class DetectionServiceImpl { } else { detectionData.setIsData(ResultEnum.NOT_QUALIFIED.getValue()); } - detectionDataList.add(detectionData); } + detectionDataList.add(detectionData); } return detectionDataList; } diff --git a/detection/src/main/java/com/njcn/gather/result/controller/ResultController.java b/detection/src/main/java/com/njcn/gather/result/controller/ResultController.java index be4b6d47..e7e14714 100644 --- a/detection/src/main/java/com/njcn/gather/result/controller/ResultController.java +++ b/detection/src/main/java/com/njcn/gather/result/controller/ResultController.java @@ -1,17 +1,20 @@ package com.njcn.gather.result.controller; +import cn.hutool.core.util.ObjectUtil; 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.LogUtil; +import com.njcn.gather.result.pojo.vo.ContrastResultVO; +import com.njcn.gather.detection.service.IAdPariService; +import com.njcn.gather.detection.util.socket.CnSocketUtil; import com.njcn.gather.result.pojo.param.ResultParam; import com.njcn.gather.result.pojo.vo.FormContentVO; import com.njcn.gather.result.pojo.vo.ResultVO; import com.njcn.gather.result.pojo.vo.TreeDataVO; import com.njcn.gather.result.service.IResultService; -import com.njcn.gather.system.log.pojo.param.SysLogParam; import com.njcn.web.controller.BaseController; import com.njcn.web.utils.HttpResultUtil; import io.swagger.annotations.Api; @@ -35,6 +38,7 @@ import java.util.List; @RequiredArgsConstructor public class ResultController extends BaseController { private final IResultService resultService; + private final IAdPariService adPariService; @OperateInfo @PostMapping("/formContent") @@ -120,4 +124,31 @@ public class ResultController extends BaseController { resultService.deleteTempTable(code); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getContrastFormContent") + @ApiOperation("获取比对式检测结果-表单内容") + @ApiImplicitParam(name = "param", value = "查询参数", required = true) + public HttpResult getContrastFormContent(@RequestBody @Validated ResultParam.QueryParam queryParam) { + String methodDescribe = getMethodDescribe("getContrastFormContent"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, queryParam); + + FormContentVO result = resultService.getContrastFormContent(queryParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getContrastResult") + @ApiOperation("获取比对式检测结果") + @ApiImplicitParam(name = "param", value = "查询参数", required = true) + public HttpResult getContrastResult(@RequestBody @Validated ResultParam.QueryParam queryParam) { + String methodDescribe = getMethodDescribe("getContrastResult"); + LogUtil.njcnDebug(log, "{},查询数据为:{}", methodDescribe, queryParam); + + if (ObjectUtil.isEmpty(queryParam.getNum())) { + queryParam.setNum(adPariService.getMaxNum(queryParam.getDeviceId() + CnSocketUtil.SPLIT_TAG + queryParam.getNum())); + } + ContrastResultVO result = resultService.getContrastResult(queryParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } } diff --git a/detection/src/main/java/com/njcn/gather/result/pojo/param/ResultParam.java b/detection/src/main/java/com/njcn/gather/result/pojo/param/ResultParam.java index 8c934d58..0d8217ef 100644 --- a/detection/src/main/java/com/njcn/gather/result/pojo/param/ResultParam.java +++ b/detection/src/main/java/com/njcn/gather/result/pojo/param/ResultParam.java @@ -63,6 +63,9 @@ public class ResultParam { // 通道号,当为-1时,表示查询所有通道号,否则只查询指定通道号 private String chnNum; + + // 第几次检测 + private Integer num; } @Data diff --git a/detection/src/main/java/com/njcn/gather/result/pojo/vo/ContrastResultVO.java b/detection/src/main/java/com/njcn/gather/result/pojo/vo/ContrastResultVO.java new file mode 100644 index 00000000..3cf4d4d7 --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/result/pojo/vo/ContrastResultVO.java @@ -0,0 +1,28 @@ +package com.njcn.gather.result.pojo.vo; + +import com.njcn.gather.detection.pojo.vo.AlignDataVO; +import com.njcn.gather.detection.pojo.vo.DetectionData; +import com.njcn.gather.storage.pojo.po.ContrastBaseResult; +import com.njcn.gather.storage.pojo.vo.RawResultDataVO; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +/** + * @author caozehui + * @data 2025-08-21 + */ +@Data +public class ContrastResultVO { + + /** + * 检测结果。key为具体检测项名称,value为具体检测项的检测结果。 + */ + private Map> resultMap; + + /** + * 原始数据。key为具体检测项名称,value为具体检测项的原始数据。 + */ + private Map> rawDataMap; +} diff --git a/detection/src/main/java/com/njcn/gather/result/pojo/vo/FormContentVO.java b/detection/src/main/java/com/njcn/gather/result/pojo/vo/FormContentVO.java index 0222497a..9f7f0c0e 100644 --- a/detection/src/main/java/com/njcn/gather/result/pojo/vo/FormContentVO.java +++ b/detection/src/main/java/com/njcn/gather/result/pojo/vo/FormContentVO.java @@ -21,4 +21,14 @@ public class FormContentVO { private String deviceName; private List> chnList; + + /** + * key为通道号,value为该通道检测的次数 + */ + private Map> chnMap; + + /** + * 选中的第几次 + */ + private Integer checkNum; } diff --git a/detection/src/main/java/com/njcn/gather/result/service/IResultService.java b/detection/src/main/java/com/njcn/gather/result/service/IResultService.java index 212b07f6..1472607a 100644 --- a/detection/src/main/java/com/njcn/gather/result/service/IResultService.java +++ b/detection/src/main/java/com/njcn/gather/result/service/IResultService.java @@ -2,6 +2,7 @@ package com.njcn.gather.result.service; import com.njcn.gather.report.pojo.result.SingleTestResult; import com.njcn.gather.result.pojo.param.ResultParam; +import com.njcn.gather.result.pojo.vo.ContrastResultVO; import com.njcn.gather.result.pojo.vo.FormContentVO; import com.njcn.gather.result.pojo.vo.ResultVO; import com.njcn.gather.result.pojo.vo.TreeDataVO; @@ -97,4 +98,21 @@ public interface IResultService { * @param pKeys 待填充的值 */ Map getParagraphKeysValue(String itemCode, List pKeys); + + /** + * 获取比对式表单头 + * + * @param queryParam + * @return + */ + FormContentVO getContrastFormContent(ResultParam.QueryParam queryParam); + + /** + * 获取比对式检测结果 + * + * @param queryParam + * @return + */ + ContrastResultVO getContrastResult(ResultParam.QueryParam queryParam); + } diff --git a/detection/src/main/java/com/njcn/gather/result/service/impl/ResultServiceImpl.java b/detection/src/main/java/com/njcn/gather/result/service/impl/ResultServiceImpl.java index 35e858f0..d10943ce 100644 --- a/detection/src/main/java/com/njcn/gather/result/service/impl/ResultServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/result/service/impl/ResultServiceImpl.java @@ -9,6 +9,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; +import com.alibaba.fastjson.JSON; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.njcn.common.pojo.enums.common.DataStateEnum; import com.njcn.common.pojo.exception.BusinessException; @@ -16,9 +17,13 @@ import com.njcn.common.utils.PubUtils; import com.njcn.gather.detection.pojo.enums.DetectionCodeEnum; import com.njcn.gather.detection.pojo.param.PreDetectionParam; import com.njcn.gather.detection.pojo.po.DevData; +import com.njcn.gather.detection.pojo.vo.AlignDataVO; import com.njcn.gather.detection.pojo.vo.DetectionData; +import com.njcn.gather.detection.service.IAdPariService; import com.njcn.gather.detection.service.impl.DetectionServiceImpl; +import com.njcn.gather.detection.util.socket.CnSocketUtil; import com.njcn.gather.device.pojo.enums.CommonEnum; +import com.njcn.gather.device.pojo.po.PqDev; import com.njcn.gather.device.service.IPqDevService; import com.njcn.gather.plan.pojo.po.AdPlan; import com.njcn.gather.plan.service.IAdPlanService; @@ -30,10 +35,7 @@ import com.njcn.gather.report.pojo.enums.PowerIndexEnum; import com.njcn.gather.report.pojo.result.SingleTestResult; import com.njcn.gather.result.pojo.enums.ResultUnitEnum; import com.njcn.gather.result.pojo.param.ResultParam; -import com.njcn.gather.result.pojo.vo.FormContentVO; -import com.njcn.gather.result.pojo.vo.RawDataExcel; -import com.njcn.gather.result.pojo.vo.ResultVO; -import com.njcn.gather.result.pojo.vo.TreeDataVO; +import com.njcn.gather.result.pojo.vo.*; import com.njcn.gather.result.service.IResultService; import com.njcn.gather.script.mapper.PqScriptMapper; import com.njcn.gather.script.pojo.param.PqScriptCheckDataParam; @@ -48,17 +50,21 @@ import com.njcn.gather.script.util.ScriptDtlsDesc; import com.njcn.gather.storage.mapper.TableGenMapper; import com.njcn.gather.storage.pojo.param.SingleNonHarmParam; import com.njcn.gather.storage.pojo.param.StorageParam; -import com.njcn.gather.storage.pojo.po.SimAndDigBaseResult; -import com.njcn.gather.storage.pojo.po.SimAndDigHarmonicResult; -import com.njcn.gather.storage.pojo.po.SimAndDigNonHarmonicResult; +import com.njcn.gather.storage.pojo.po.*; import com.njcn.gather.storage.pojo.vo.RawDataVO; +import com.njcn.gather.storage.pojo.vo.RawResultDataVO; +import com.njcn.gather.storage.service.ContrastHarmonicService; +import com.njcn.gather.storage.service.ContrastNonHarmonicService; import com.njcn.gather.storage.service.SimAndDigHarmonicService; import com.njcn.gather.storage.service.SimAndDigNonHarmonicService; +import com.njcn.gather.storage.service.impl.SimAndDigHarmonicServiceImpl; import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum; import com.njcn.gather.system.dictionary.pojo.po.DictData; import com.njcn.gather.system.dictionary.pojo.po.DictTree; import com.njcn.gather.system.dictionary.service.IDictDataService; import com.njcn.gather.system.dictionary.service.IDictTreeService; +import com.njcn.gather.system.pojo.enums.DicDataEnum; +import com.njcn.gather.util.StorageUtil; import com.njcn.web.utils.ExcelUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -70,6 +76,7 @@ import java.time.format.DateTimeFormatter; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @author caozehui @@ -82,8 +89,10 @@ public class ResultServiceImpl implements IResultService { private final IAdPlanService adPlanService; private final IPqDevService pqDevService; - private final SimAndDigNonHarmonicService adNonHarmonicService; - private final SimAndDigHarmonicService adHarmonicService; + private final SimAndDigNonHarmonicService simAndDigNonHarmonicService; + private final SimAndDigHarmonicService simAndDigHarmonicService; + private final ContrastHarmonicService contrastHarmonicService; + private final ContrastNonHarmonicService contrastNonHarmonicService; private final IPqScriptDtlsService pqScriptDtlsService; private final PqScriptMapper scriptMapper; private final IDictTreeService dictTreeService; @@ -93,6 +102,7 @@ public class ResultServiceImpl implements IResultService { private final IDictDataService dictDataService; private final IPqScriptCheckDataService iPqScriptCheckDataService; private final IPqDevService iPqDevService; + private final IAdPariService adPairService; /** * 谐波类code,取树形字典表中的code @@ -123,13 +133,13 @@ public class ResultServiceImpl implements IResultService { DictTree dictTree = dictTreeService.getById(queryParam.getScriptType()); if (HARMONIC_TYPE_CODE.contains(dictTree.getCode())) { - allResultList.addAll(adHarmonicService.get(scriptId, indexList, queryParam.getDeviceId(), queryParam.getChnNum(), plan.getCode() + "")); + allResultList.addAll(simAndDigHarmonicService.get(scriptId, indexList, queryParam.getDeviceId(), queryParam.getChnNum(), plan.getCode() + "")); } else { - allResultList.addAll(adNonHarmonicService.listSimAndDigBaseResult(scriptId, indexList, queryParam.getDeviceId(), queryParam.getChnNum(), plan.getCode() + "")); + allResultList.addAll(simAndDigNonHarmonicService.listSimAndDigBaseResult(scriptId, indexList, queryParam.getDeviceId(), queryParam.getChnNum(), plan.getCode() + "")); } } else { //查询所有的脚本类型 - allResultList.addAll(adHarmonicService.get(scriptId, null, queryParam.getDeviceId(), queryParam.getChnNum(), plan.getCode() + "")); - allResultList.addAll(adNonHarmonicService.listSimAndDigBaseResult(scriptId, null, queryParam.getDeviceId(), queryParam.getChnNum(), plan.getCode() + "")); + allResultList.addAll(simAndDigHarmonicService.get(scriptId, null, queryParam.getDeviceId(), queryParam.getChnNum(), plan.getCode() + "")); + allResultList.addAll(simAndDigNonHarmonicService.listSimAndDigBaseResult(scriptId, null, queryParam.getDeviceId(), queryParam.getChnNum(), plan.getCode() + "")); } @@ -169,8 +179,8 @@ public class ResultServiceImpl implements IResultService { if (StrUtil.isNotBlank(param.getScriptType())) { indexList = pqScriptDtlsService.getIndexList(param.getScriptType(), param.getScriptId()); } - allResultList.addAll(adNonHarmonicService.listSimAndDigBaseResult(param.getScriptId(), indexList, param.getDevId(), param.getDevNum(), param.getCode())); - allResultList.addAll(adHarmonicService.get(param.getScriptId(), indexList, param.getDevId(), param.getDevNum(), param.getCode())); + allResultList.addAll(simAndDigNonHarmonicService.listSimAndDigBaseResult(param.getScriptId(), indexList, param.getDevId(), param.getDevNum(), param.getCode())); + allResultList.addAll(simAndDigHarmonicService.get(param.getScriptId(), indexList, param.getDevId(), param.getDevNum(), param.getCode())); if (CollUtil.isNotEmpty(allResultList)) { resultMap = allResultList.stream().collect(Collectors.groupingBy(SimAndDigBaseResult::getSort, Collectors.mapping(SimAndDigBaseResult::getResultFlag, Collectors.toSet()))); } @@ -820,12 +830,12 @@ public class ResultServiceImpl implements IResultService { } ResultVO resultVO = new ResultVO(); if (CollUtil.isEmpty(harmNum)) { - resultVO.setRawData(adNonHarmonicService.listNonHarmData(storage)); - resultVO.setResultData(adNonHarmonicService.listNonHarmResultData(storage)); + resultVO.setRawData(simAndDigNonHarmonicService.listNonHarmData(storage)); + resultVO.setResultData(simAndDigNonHarmonicService.listNonHarmResultData(storage)); } else { storage.setHarmNum(harmNum); - resultVO.setRawData(adHarmonicService.listHarmData(storage)); - resultVO.setResultData(adHarmonicService.listHarmResultData(storage)); + resultVO.setRawData(simAndDigHarmonicService.listHarmData(storage)); + resultVO.setResultData(simAndDigHarmonicService.listHarmResultData(storage)); } return resultVO; } @@ -853,10 +863,10 @@ public class ResultServiceImpl implements IResultService { } ResultVO resultVO = new ResultVO(); if (CollUtil.isEmpty(harmNum)) { - resultVO.setResultData(adNonHarmonicService.listNonHarmResultData(storage)); + resultVO.setResultData(simAndDigNonHarmonicService.listNonHarmResultData(storage)); } else { storage.setHarmNum(harmNum); - resultVO.setResultData(adHarmonicService.listHarmResultData(storage)); + resultVO.setResultData(simAndDigHarmonicService.listHarmResultData(storage)); } return resultVO; } @@ -885,10 +895,10 @@ public class ResultServiceImpl implements IResultService { Map> rawDataMap = null; if (CollUtil.isEmpty(harmNum)) { - rawDataMap = adNonHarmonicService.listNonHarmData(storage); + rawDataMap = simAndDigNonHarmonicService.listNonHarmData(storage); } else { storage.setHarmNum(harmNum); - rawDataMap = adHarmonicService.listHarmData(storage); + rawDataMap = simAndDigHarmonicService.listHarmData(storage); } if (ObjectUtil.isNotEmpty(rawDataMap)) { @@ -971,7 +981,7 @@ public class ResultServiceImpl implements IResultService { List> keyFillMapList = new ArrayList<>(); for (Integer sort : indexList) { SingleNonHarmParam param = new SingleNonHarmParam(planCode, devId, lineNo, valueTypeList, Collections.singletonList(sort)); - List nonHarmList = adNonHarmonicService.queryByCondition(param); + List nonHarmList = simAndDigNonHarmonicService.queryByCondition(param); if (CollUtil.isNotEmpty(nonHarmList)) { Map keyFillMap = new HashMap<>(16); fillVoltagePhaseData(nonHarmList, keyFillMap, tableKeys); @@ -996,7 +1006,7 @@ public class ResultServiceImpl implements IResultService { if (indexList.size() == 1) { // 获取谐波数据 SingleNonHarmParam param = new SingleNonHarmParam(planCode, devId, lineNo, valueType, indexList.get(0)); - SimAndDigHarmonicResult singleResult = adHarmonicService.getSingleResult(param); + SimAndDigHarmonicResult singleResult = simAndDigHarmonicService.getSingleResult(param); // 注:如果ABC的标准值一致,则同步到standard中 Map> checkDataHarmNumMap = scriptCheckDataList.stream().collect(Collectors.groupingBy(PqScriptCheckData::getHarmNum)); List> keyFillMapList = new ArrayList<>(); @@ -1039,7 +1049,7 @@ public class ResultServiceImpl implements IResultService { if (PowerConstant.THREE_PHASE.contains(scriptCode)) { // 获取该三相的数据 SingleNonHarmParam param = new SingleNonHarmParam(planCode, devId, lineNo, Collections.singletonList(valueType), indexList); - List nonHarmList = adNonHarmonicService.queryByCondition(param); + List nonHarmList = simAndDigNonHarmonicService.queryByCondition(param); if (CollUtil.isNotEmpty(nonHarmList)) { List> keyFillMapList = new ArrayList<>(); for (SimAndDigNonHarmonicResult SimAndDigNonHarmonicResult : nonHarmList) { @@ -1067,7 +1077,7 @@ public class ResultServiceImpl implements IResultService { // 非三相且非暂态,通常只有一个数据,所以直接赋值即可 List> keyFillMapList = new ArrayList<>(); SingleNonHarmParam param = new SingleNonHarmParam(planCode, devId, lineNo, Collections.singletonList(valueType), indexList); - List nonHarmList = adNonHarmonicService.queryByCondition(param); + List nonHarmList = simAndDigNonHarmonicService.queryByCondition(param); if (CollUtil.isNotEmpty(nonHarmList)) { for (SimAndDigNonHarmonicResult simAndDigNonHarmonicResult : nonHarmList) { Map keyFillMap = new HashMap<>(8); @@ -1491,6 +1501,271 @@ public class ResultServiceImpl implements IResultService { return map; } + @Override + public FormContentVO getContrastFormContent(ResultParam.QueryParam queryParam) { + FormContentVO formContentVO = new FormContentVO(); + + AdPlan plan = adPlanService.getById(queryParam.getPlanId()); + PqDev dev = pqDevService.getById(queryParam.getDeviceId()); + DictData dictData = dictDataService.getById(plan.getDataRule()); + formContentVO.setDataRule(dictData.getName()); + formContentVO.setDeviceName(dev.getName()); + formContentVO.setErrorSysId(plan.getErrorSysId()); + + List dictTreeList = dictTreeService.getDictTreeById(Collections.singletonList(queryParam.getScriptType())); + List fatherIdList = dictTreeList.stream().map(DictTree::getId).collect(Collectors.toList()); + List childDictTreeList = dictTreeService.listByFatherIds(fatherIdList); + List adTypeList = childDictTreeList.stream().map(DictTree::getId).collect(Collectors.toList()); + List allResultList = new ArrayList<>(); + + List contrastNonHarmonicResults = contrastNonHarmonicService.listAllResultData(String.valueOf(plan.getCode()), null, queryParam.getDeviceId(), adTypeList); + List contrastHarmonicResults = contrastHarmonicService.listAllResultData(String.valueOf(plan.getCode()), null, queryParam.getDeviceId(), adTypeList); + allResultList.addAll(contrastHarmonicResults); + allResultList.addAll(contrastNonHarmonicResults); + + Map> chnMap = new HashMap<>(); + Map> devMonitorIdMap = allResultList.stream().collect(Collectors.groupingBy(ContrastBaseResult::getDevMonitorId)); + devMonitorIdMap.forEach((devMonitorId, resultList) -> { + Integer maxNum = resultList.stream().map(ContrastBaseResult::getNum).max(Comparator.comparing(Integer::valueOf)).orElse(1); + List numList = Stream.iterate(1, n -> n + 1).limit(maxNum).collect(Collectors.toList()); + String[] split = devMonitorId.split(CnSocketUtil.SPLIT_TAG); + chnMap.put(split[1], numList); + + if (ObjectUtil.isNull(queryParam.getNum())) { + formContentVO.setCheckNum(maxNum); + } else { + formContentVO.setCheckNum(queryParam.getNum()); + } + }); + + formContentVO.setChnMap(chnMap); + return formContentVO; + } + + @Override + public ContrastResultVO getContrastResult(ResultParam.QueryParam queryParam) { + ContrastResultVO contrastResultVO = new ContrastResultVO(); + + AdPlan plan = adPlanService.getById(queryParam.getPlanId()); + List dictTreeList = dictTreeService.getDictTreeById(Collections.singletonList(queryParam.getScriptType())); + List fatherIdList = dictTreeList.stream().map(DictTree::getId).collect(Collectors.toList()); + List childDictTreeList = dictTreeService.listByFatherIds(fatherIdList); + List adTypeList = childDictTreeList.stream().map(DictTree::getId).collect(Collectors.toList()); + DictTree dictTree = dictTreeList.get(0); + + contrastResultVO.setResultMap(this.getResultMap(dictTree, adTypeList, queryParam.getDeviceId() + CnSocketUtil.SPLIT_TAG + queryParam.getChnNum(), queryParam.getNum(), String.valueOf(plan.getCode()))); + contrastResultVO.setRawDataMap(this.getRawDataMap(dictTree, adTypeList, queryParam.getDeviceId() + CnSocketUtil.SPLIT_TAG + queryParam.getChnNum(), queryParam.getNum(), String.valueOf(plan.getCode()))); + return contrastResultVO; + } + + private Map> getResultMap(DictTree dictTree, List adTypeList, String monitorId, Integer num, String code) { + Map> resultMap = new LinkedHashMap<>(); + + List contrastNonHarmonicResults = contrastNonHarmonicService.listAllResultData(code, num, monitorId, adTypeList); + List contrastHarmonicResults = contrastHarmonicService.listAllResultData(code, num, monitorId, adTypeList); + + String unit = StorageUtil.unit(dictTree.getCode()); + + if (CollUtil.isNotEmpty(contrastNonHarmonicResults)) { + ContrastNonHarmonicResult contrastNonHarmonicResult = contrastNonHarmonicResults.get(0); + List aList = JSON.parseArray(contrastNonHarmonicResult.getAValue() + "", RawResultDataVO.DetectionData.class); + List bList = JSON.parseArray(contrastNonHarmonicResult.getBValue() + "", RawResultDataVO.DetectionData.class); + List cList = JSON.parseArray(contrastNonHarmonicResult.getCValue() + "", RawResultDataVO.DetectionData.class); + List tList = JSON.parseArray(contrastNonHarmonicResult.getTValue() + "", RawResultDataVO.DetectionData.class); + + List rawResultDataVOList = new ArrayList<>(); + if (CollUtil.isNotEmpty(aList) && CollUtil.isNotEmpty(bList) && CollUtil.isNotEmpty(cList)) { + for (int i = 0; i < aList.size(); i++) { + RawResultDataVO dataVO = new RawResultDataVO(); + dataVO.setUnit(unit); + dataVO.setDataA(aList.get(i)); + dataVO.setDataB(bList.get(i)); + dataVO.setDataC(cList.get(i)); + dataVO.setRadius(aList.get(i).getRadius()); + dataVO.setIsData(SimAndDigHarmonicServiceImpl.setResultFlag(Arrays.asList(aList.get(i), bList.get(i), cList.get(i)))); + rawResultDataVOList.add(dataVO); + } + } else if (CollUtil.isNotEmpty(bList)) { + for (int i = 0; i < bList.size(); i++) { + RawResultDataVO dataVO = new RawResultDataVO(); + dataVO.setUnit(unit); + dataVO.setDataB(bList.get(i)); + dataVO.setRadius(bList.get(i).getRadius()); + dataVO.setIsData(SimAndDigHarmonicServiceImpl.setResultFlag(Arrays.asList(bList.get(i)))); + rawResultDataVOList.add(dataVO); + } + } else if (CollUtil.isNotEmpty(tList)) { + for (int i = 0; i < tList.size(); i++) { + RawResultDataVO dataVO = new RawResultDataVO(); + dataVO.setUnit(unit); + dataVO.setDataT(tList.get(i)); + dataVO.setRadius(tList.get(i).getRadius()); + dataVO.setIsData(SimAndDigHarmonicServiceImpl.setResultFlag(Arrays.asList(tList.get(i)))); + rawResultDataVOList.add(dataVO); + } + } + resultMap.put(dictTree.getName(), rawResultDataVOList); + } + + if (CollUtil.isNotEmpty(contrastHarmonicResults)) { + ContrastHarmonicResult contrastHarmonicResult = contrastHarmonicResults.get(0); + List harmonicNum = null; + if (DicDataEnum.HV.getCode().equals(dictTree.getCode()) || DicDataEnum.HI.getCode().equals(dictTree.getCode())) { + harmonicNum = Stream.iterate(2.0, n -> n + 1).limit(49).collect(Collectors.toList()); + unit = "%"; + if (DicDataEnum.HI.getCode().equals(dictTree.getCode())) { + unit = "A"; + } + } + if (DicDataEnum.HSV.getCode().equals(dictTree.getCode()) || DicDataEnum.HSI.getCode().equals(dictTree.getCode())) { + harmonicNum = Stream.iterate(0.5, n -> n + 1).limit(50).collect(Collectors.toList()); + unit = "%"; + if (DicDataEnum.HSI.getCode().equals(dictTree.getCode())) { + unit = "A"; + } + } + for (Double n : harmonicNum) { + try { + int i = StorageUtil.isHarmOrInHarm(n).intValue(); + String finalUnit = unit; + + Field fieldA = contrastHarmonicResult.getClass().getDeclaredField("aValue" + i); + fieldA.setAccessible(true); + List aList = JSON.parseArray(fieldA.get(contrastHarmonicResult) + "", RawResultDataVO.DetectionData.class); + + Field fieldB = contrastHarmonicResult.getClass().getDeclaredField("bValue" + i); + fieldB.setAccessible(true); + List bList = JSON.parseArray(fieldB.get(contrastHarmonicResult) + "", RawResultDataVO.DetectionData.class); + + Field fieldC = contrastHarmonicResult.getClass().getDeclaredField("cValue" + i); + fieldC.setAccessible(true); + List cList = JSON.parseArray(fieldC.get(contrastHarmonicResult) + "", RawResultDataVO.DetectionData.class); + + List rawResultDataVOList = new ArrayList<>(); + for (int j = 0; j < aList.size(); j++) { + RawResultDataVO dataVO = new RawResultDataVO(); + dataVO.setHarmNum(n); + dataVO.setUnit(finalUnit); + dataVO.setDataA(aList.get(j)); + dataVO.setDataB(bList.get(j)); + dataVO.setDataC(cList.get(j)); + dataVO.setRadius(aList.get(j).getRadius()); + dataVO.setIsData(SimAndDigHarmonicServiceImpl.setResultFlag(Arrays.asList(aList.get(j), bList.get(j), cList.get(j)))); + rawResultDataVOList.add(dataVO); + } + resultMap.put(String.valueOf(n), rawResultDataVOList); + } catch (NoSuchFieldException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } + } + return resultMap; + } + + private Map> getRawDataMap(DictTree dictTree, List adTypeList, String monitorId, Integer num, String code) { + Map> resultMap = new LinkedHashMap<>(); + + List devNonHarmonicRawDataList = contrastNonHarmonicService.listAllRawData(code, num, 0, monitorId, adTypeList); + List stdDevNonHarmonicRawDataList = contrastNonHarmonicService.listAllRawData(code, num, 1, monitorId, adTypeList); + List devHarmonicRawDataList = contrastHarmonicService.listAllRawData(code, num, 0, monitorId, adTypeList); + List stdDevHarmonicRawDataList = contrastHarmonicService.listAllRawData(code, num, 1, monitorId, adTypeList); + + List rawDataVOList = new ArrayList<>(); + for (int i = 0; i < devNonHarmonicRawDataList.size(); i++) { + AlignDataVO.RawData rawDataVO = new AlignDataVO.RawData(); + ContrastNonHarmonicResult contrastNonHarmonicResult = devNonHarmonicRawDataList.get(i); + rawDataVO.setTimeDev(String.valueOf(contrastNonHarmonicResult.getTimeId())); + rawDataVO.setUaDev(getValue(contrastNonHarmonicResult.getAValue())); + rawDataVO.setUbDev(getValue(contrastNonHarmonicResult.getBValue())); + rawDataVO.setUcDev(getValue(contrastNonHarmonicResult.getCValue())); + rawDataVO.setUtDev(getValue(contrastNonHarmonicResult.getTValue())); + + contrastNonHarmonicResult = stdDevNonHarmonicRawDataList.get(i); + rawDataVO.setTimeStdDev(String.valueOf(contrastNonHarmonicResult.getTimeId())); + rawDataVO.setUaStdDev(getValue(contrastNonHarmonicResult.getAValue())); + rawDataVO.setUbStdDev(getValue(contrastNonHarmonicResult.getBValue())); + rawDataVO.setUcStdDev(getValue(contrastNonHarmonicResult.getCValue())); + rawDataVO.setUtStdDev(getValue(contrastNonHarmonicResult.getTValue())); + + rawDataVOList.add(rawDataVO); + } + if (CollUtil.isNotEmpty(rawDataVOList)) { + resultMap.put(dictTree.getName(), rawDataVOList); + } + + if (CollUtil.isNotEmpty(devHarmonicRawDataList) && CollUtil.isNotEmpty(stdDevHarmonicRawDataList)) { + List harmonicNum = null; + if (DicDataEnum.HV.getCode().equals(dictTree.getCode()) || DicDataEnum.HI.getCode().equals(dictTree.getCode())) { + harmonicNum = Stream.iterate(2.0, n -> n + 1).limit(49).collect(Collectors.toList()); + } + if (DicDataEnum.HSV.getCode().equals(dictTree.getCode()) || DicDataEnum.HSI.getCode().equals(dictTree.getCode())) { + harmonicNum = Stream.iterate(0.5, n -> n + 1).limit(50).collect(Collectors.toList()); + } + for (Double n : harmonicNum) { + List rawDataVOList1 = new ArrayList<>(); + int i = StorageUtil.isHarmOrInHarm(n).intValue(); + for (int j = 0; j < devHarmonicRawDataList.size(); j++) { + AlignDataVO.RawData rawDataVO = new AlignDataVO.RawData(); + ContrastHarmonicResult devHarmonicResult = devHarmonicRawDataList.get(j); + ContrastHarmonicResult stdDevHarmonicResult = stdDevHarmonicRawDataList.get(j); + + rawDataVO.setTimeDev(String.valueOf(devHarmonicResult.getTimeId())); + rawDataVO.setTimeStdDev(String.valueOf(stdDevHarmonicResult.getTimeId())); + + try { + Field fieldA = devHarmonicResult.getClass().getDeclaredField("aValue" + i); + fieldA.setAccessible(true); + Double aValue = JSON.parseObject(fieldA.get(devHarmonicResult) + "", Double.class); + + rawDataVO.setUaDev(aValue); + Field fieldB = devHarmonicResult.getClass().getDeclaredField("bValue" + i); + fieldB.setAccessible(true); + Double bValue = JSON.parseObject(fieldB.get(devHarmonicResult) + "", Double.class); + rawDataVO.setUbDev(bValue); + + Field fieldC = devHarmonicResult.getClass().getDeclaredField("cValue" + i); + fieldC.setAccessible(true); + Double cValue = JSON.parseObject(fieldC.get(devHarmonicResult) + "", Double.class); + rawDataVO.setUcDev(cValue); + + Field fieldAStdDev = stdDevHarmonicResult.getClass().getDeclaredField("aValue" + i); + fieldAStdDev.setAccessible(true); + Double aValueStdDev = JSON.parseObject(fieldAStdDev.get(stdDevHarmonicResult) + "", Double.class); + rawDataVO.setUaStdDev(aValueStdDev); + + Field fieldBStdDev = stdDevHarmonicResult.getClass().getDeclaredField("bValue" + i); + fieldBStdDev.setAccessible(true); + Double bValueStdDev = JSON.parseObject(fieldBStdDev.get(stdDevHarmonicResult) + "", Double.class); + rawDataVO.setUbStdDev(bValueStdDev); + + Field fieldCStdDev = stdDevHarmonicResult.getClass().getDeclaredField("cValue" + i); + fieldCStdDev.setAccessible(true); + Double cValueStdDev = JSON.parseObject(fieldCStdDev.get(stdDevHarmonicResult) + "", Double.class); + rawDataVO.setUcStdDev(cValueStdDev); + } catch (NoSuchFieldException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + rawDataVOList1.add(rawDataVO); + } + resultMap.put(String.valueOf(n), rawDataVOList1); + } + } + + return resultMap; + } + + private Double getValue(String value) { + if (ObjectUtil.isNull(value)) { + return null; + } else { + return Double.valueOf(value); + } + } + private Integer conform(Set numbers) { if (CollUtil.isNotEmpty(numbers)) { @@ -1597,10 +1872,10 @@ public class ResultServiceImpl implements IResultService { dataRule = DictDataEnum.SECTION_VALUE; } - List allNonHarmonicRawData = adNonHarmonicService.listAllSimAndDigRawData(scriptId, oldCode, devId); + List allNonHarmonicRawData = simAndDigNonHarmonicService.listAllSimAndDigRawData(scriptId, oldCode, devId); LinkedHashMap> nonHarmonicMap = allNonHarmonicRawData.stream().sorted(Comparator.comparing(SimAndDigNonHarmonicResult::getSort)) .collect(Collectors.groupingBy(SimAndDigNonHarmonicResult::getSort, LinkedHashMap::new, Collectors.toList())); - List allHarmonicRawData = adHarmonicService.listAllRawData(scriptId, oldCode, devId); + List allHarmonicRawData = simAndDigHarmonicService.listAllRawData(scriptId, oldCode, devId); LinkedHashMap> harmonicMap = allHarmonicRawData.stream().sorted(Comparator.comparing(SimAndDigHarmonicResult::getSort)) .collect(Collectors.groupingBy(SimAndDigHarmonicResult::getSort, LinkedHashMap::new, Collectors.toList())); diff --git a/storage/src/main/java/com/njcn/gather/storage/mapper/mapping/TableGenMapper.xml b/storage/src/main/java/com/njcn/gather/storage/mapper/mapping/TableGenMapper.xml index 45b4cd1b..65e9c95c 100644 --- a/storage/src/main/java/com/njcn/gather/storage/mapper/mapping/TableGenMapper.xml +++ b/storage/src/main/java/com/njcn/gather/storage/mapper/mapping/TableGenMapper.xml @@ -18,6 +18,7 @@ Id char(32) COLLATE utf8mb4_bin NOT NULL COMMENT '主键Id', Std_Dev_Monitor_Id CHAR(34) NOT NULL COMMENT '标准设备监测点Id', Num tinyint(1) unsigned DEFAULT 0 COMMENT '第几次检测', + Flag tinyint(1) unsigned NOT NULL COMMENT '0表示被检设备数据,1表示标准设备数据', A_Value_0 float NULL COMMENT 'A相基波有效值', B_Value_0 float NULL COMMENT 'B相基波有效值', C_Value_0 float NULL COMMENT 'B相基波有效值', @@ -54,9 +55,10 @@ Id char(32) COLLATE utf8mb4_bin NOT NULL COMMENT '主键Id', Std_Dev_Monitor_Id CHAR(34) NOT NULL COMMENT '标准设备监测点Id', Num tinyint(1) unsigned DEFAULT 0 COMMENT '第几次检测', - A_Value_0 json NULL COMMENT 'A相基波有效值', - B_Value_0 json NULL COMMENT 'B相基波有效值', - C_Value_0 json NULL COMMENT 'B相基波有效值', + Flag tinyint(1) unsigned DEFAULT NULL COMMENT '0表示被检设备数据,1表示标准设备数据', + A_Value_0 json NULL COMMENT 'A相基波有效值', + B_Value_0 json NULL COMMENT 'B相基波有效值', + C_Value_0 json NULL COMMENT 'B相基波有效值', PRIMARY KEY (Id) diff --git a/storage/src/main/java/com/njcn/gather/storage/pojo/po/ContrastBaseResult.java b/storage/src/main/java/com/njcn/gather/storage/pojo/po/ContrastBaseResult.java index 73d511bc..0930ac39 100644 --- a/storage/src/main/java/com/njcn/gather/storage/pojo/po/ContrastBaseResult.java +++ b/storage/src/main/java/com/njcn/gather/storage/pojo/po/ContrastBaseResult.java @@ -21,4 +21,9 @@ public class ContrastBaseResult extends BaseResult { * 标准设备监测点id */ private String stdDevMonitorId; + + /** + * 0表示被检设备数据,1表示标准设备数据 + */ + private Integer flag; } diff --git a/storage/src/main/java/com/njcn/gather/storage/service/ContrastHarmonicService.java b/storage/src/main/java/com/njcn/gather/storage/service/ContrastHarmonicService.java index 1e68e449..0dba5ac3 100644 --- a/storage/src/main/java/com/njcn/gather/storage/service/ContrastHarmonicService.java +++ b/storage/src/main/java/com/njcn/gather/storage/service/ContrastHarmonicService.java @@ -3,9 +3,33 @@ package com.njcn.gather.storage.service; import com.baomidou.mybatisplus.extension.service.IService; import com.njcn.gather.storage.pojo.po.ContrastHarmonicResult; +import java.util.List; + /** * @author caozehui * @data 2025-07-28 */ public interface ContrastHarmonicService extends IService { + + /** + * 获取所有原始数据 + * + * @param code + * @param num 第几次检测 + * @param flag 0:被检设备,1:标准设备 + * @param devId 设备ID + * @param adTypeList + * @return + */ + List listAllRawData(String code, Integer num, Integer flag, String devId, List adTypeList); + + /** + * 获取所有谐波结果数据 + * + * @param code + * @param num 第几次检测 + * @param devId 设备ID + * @return + */ + List listAllResultData(String code, Integer num, String devId, List adTypeList); } diff --git a/storage/src/main/java/com/njcn/gather/storage/service/ContrastNonHarmonicService.java b/storage/src/main/java/com/njcn/gather/storage/service/ContrastNonHarmonicService.java index 6cebebfb..b0686eaa 100644 --- a/storage/src/main/java/com/njcn/gather/storage/service/ContrastNonHarmonicService.java +++ b/storage/src/main/java/com/njcn/gather/storage/service/ContrastNonHarmonicService.java @@ -3,10 +3,34 @@ package com.njcn.gather.storage.service; import com.baomidou.mybatisplus.extension.service.IService; import com.njcn.gather.storage.pojo.po.ContrastNonHarmonicResult; +import java.util.List; + /** * @author caozehui * @data 2025-07-28 */ public interface ContrastNonHarmonicService extends IService { + /** + * 获取所有原始数据 + * + * @param code + * @param num 第几次检测 + * @param flag 0:被检设备,1:标准设备 + * @param devId 设备ID + * @param adTypeList + * @return + */ + List listAllRawData(String code, Integer num, Integer flag, String devId, List adTypeList); + + /** + * 获取所有非谐波结果数据 + * + * @param code + * @param num 第几次检测 + * @param devId 设备ID + * @param adTypeList + * @return + */ + List listAllResultData(String code, Integer num, String devId, List adTypeList); } diff --git a/storage/src/main/java/com/njcn/gather/storage/service/SimAndDigHarmonicService.java b/storage/src/main/java/com/njcn/gather/storage/service/SimAndDigHarmonicService.java index 0c43983b..8bcc3641 100644 --- a/storage/src/main/java/com/njcn/gather/storage/service/SimAndDigHarmonicService.java +++ b/storage/src/main/java/com/njcn/gather/storage/service/SimAndDigHarmonicService.java @@ -3,6 +3,7 @@ package com.njcn.gather.storage.service; import com.baomidou.mybatisplus.extension.service.IService; import com.njcn.gather.storage.pojo.param.SingleNonHarmParam; import com.njcn.gather.storage.pojo.param.StorageParam; +import com.njcn.gather.storage.pojo.po.ContrastHarmonicResult; import com.njcn.gather.storage.pojo.po.SimAndDigBaseResult; import com.njcn.gather.storage.pojo.po.SimAndDigHarmonicResult; import com.njcn.gather.storage.pojo.vo.RawDataVO; diff --git a/storage/src/main/java/com/njcn/gather/storage/service/impl/ContrastHarmonicServiceImpl.java b/storage/src/main/java/com/njcn/gather/storage/service/impl/ContrastHarmonicServiceImpl.java index 9435d592..dccc7c65 100644 --- a/storage/src/main/java/com/njcn/gather/storage/service/impl/ContrastHarmonicServiceImpl.java +++ b/storage/src/main/java/com/njcn/gather/storage/service/impl/ContrastHarmonicServiceImpl.java @@ -1,12 +1,17 @@ package com.njcn.gather.storage.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.db.mybatisplus.handler.DynamicTableNameHandler; import com.njcn.gather.storage.mapper.ContrastHarmonicMappper; import com.njcn.gather.storage.pojo.po.ContrastHarmonicResult; import com.njcn.gather.storage.service.ContrastHarmonicService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; + /** * @author caozehui * @data 2025-07-28 @@ -14,4 +19,29 @@ import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class ContrastHarmonicServiceImpl extends ServiceImpl implements ContrastHarmonicService { + + + @Override + public List listAllRawData(String code, Integer num, Integer flag, String devId, List adTypeList) { + String prefix = "ad_harmonic_" + code; + DynamicTableNameHandler.setTableName(prefix); + List result = this.lambdaQuery().likeRight(ContrastHarmonicResult::getDevMonitorId, devId) + .eq(ObjectUtil.isNotNull(num), ContrastHarmonicResult::getNum, num) + .eq(ContrastHarmonicResult::getFlag, flag) + .in(CollUtil.isNotEmpty(adTypeList), ContrastHarmonicResult::getAdType, adTypeList) + .orderByAsc(ContrastHarmonicResult::getTimeId).list(); + DynamicTableNameHandler.remove(); + return result; + } + + @Override + public List listAllResultData(String code, Integer num, String devId, List adTypeList) { + String prefix = "ad_harmonic_result_" + code; + DynamicTableNameHandler.setTableName(prefix); + List result = this.lambdaQuery().likeRight(ContrastHarmonicResult::getDevMonitorId, devId) + .eq(ObjectUtil.isNotNull(num), ContrastHarmonicResult::getNum, num) + .in(CollUtil.isNotEmpty(adTypeList), ContrastHarmonicResult::getAdType, adTypeList).list(); + DynamicTableNameHandler.remove(); + return result; + } } diff --git a/storage/src/main/java/com/njcn/gather/storage/service/impl/ContrastNonHarmonicServiceImpl.java b/storage/src/main/java/com/njcn/gather/storage/service/impl/ContrastNonHarmonicServiceImpl.java index 53133f27..80e051e5 100644 --- a/storage/src/main/java/com/njcn/gather/storage/service/impl/ContrastNonHarmonicServiceImpl.java +++ b/storage/src/main/java/com/njcn/gather/storage/service/impl/ContrastNonHarmonicServiceImpl.java @@ -1,12 +1,17 @@ package com.njcn.gather.storage.service.impl; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.db.mybatisplus.handler.DynamicTableNameHandler; import com.njcn.gather.storage.mapper.ContrastNonHarmonicMappper; import com.njcn.gather.storage.pojo.po.ContrastNonHarmonicResult; import com.njcn.gather.storage.service.ContrastNonHarmonicService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.util.List; + /** * @author caozehui * @data 2025-07-28 @@ -14,4 +19,29 @@ import org.springframework.stereotype.Service; @Service @RequiredArgsConstructor public class ContrastNonHarmonicServiceImpl extends ServiceImpl implements ContrastNonHarmonicService { + + + @Override + public List listAllRawData(String code, Integer num, Integer flag, String devId, List adTypeList) { + String prefix = "ad_non_harmonic_" + code; + DynamicTableNameHandler.setTableName(prefix); + List result = this.lambdaQuery().likeRight(ContrastNonHarmonicResult::getDevMonitorId, devId) + .eq(ObjectUtil.isNotNull(num), ContrastNonHarmonicResult::getNum, num) + .eq(ContrastNonHarmonicResult::getFlag, flag) + .in(CollUtil.isNotEmpty(adTypeList), ContrastNonHarmonicResult::getAdType, adTypeList) + .orderByAsc(ContrastNonHarmonicResult::getTimeId).list(); + DynamicTableNameHandler.remove(); + return result; + } + + @Override + public List listAllResultData(String code, Integer num, String devId, List adTypeList) { + String prefix = "ad_non_harmonic_result_" + code; + DynamicTableNameHandler.setTableName(prefix); + List result = this.lambdaQuery().likeRight(ContrastNonHarmonicResult::getDevMonitorId, devId) + .eq(ObjectUtil.isNotNull(num), ContrastNonHarmonicResult::getNum, num) + .in(CollUtil.isNotEmpty(adTypeList), ContrastNonHarmonicResult::getAdType, adTypeList).list(); + DynamicTableNameHandler.remove(); + return result; + } } diff --git a/storage/src/main/java/com/njcn/gather/storage/service/impl/SimAndDigHarmonicServiceImpl.java b/storage/src/main/java/com/njcn/gather/storage/service/impl/SimAndDigHarmonicServiceImpl.java index 4531c76d..3e2a3595 100644 --- a/storage/src/main/java/com/njcn/gather/storage/service/impl/SimAndDigHarmonicServiceImpl.java +++ b/storage/src/main/java/com/njcn/gather/storage/service/impl/SimAndDigHarmonicServiceImpl.java @@ -15,6 +15,7 @@ import com.njcn.gather.storage.mapper.SimAndDigHarmonicMappper; import com.njcn.gather.storage.mapper.SimAndDigNonHarmonicMapper; import com.njcn.gather.storage.pojo.param.SingleNonHarmParam; import com.njcn.gather.storage.pojo.param.StorageParam; +import com.njcn.gather.storage.pojo.po.ContrastHarmonicResult; import com.njcn.gather.storage.pojo.po.SimAndDigBaseResult; import com.njcn.gather.storage.pojo.po.SimAndDigHarmonicResult; import com.njcn.gather.storage.pojo.po.SimAndDigNonHarmonicResult; @@ -25,6 +26,7 @@ import com.njcn.gather.system.dictionary.mapper.DictTreeMapper; import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum; import com.njcn.gather.system.dictionary.pojo.po.DictTree; import com.njcn.gather.system.dictionary.service.IDictTreeService; +import com.njcn.gather.util.StorageUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -106,15 +108,15 @@ public class SimAndDigHarmonicServiceImpl extends ServiceImpl numbers) { + public static Integer setResultFlag(List numbers) { List isData = numbers.stream().filter(Objects::nonNull) .filter(x -> ObjectUtil.isNotNull(x.getData())) .map(RawResultDataVO.DetectionData::getIsData) @@ -284,7 +286,7 @@ public class SimAndDigHarmonicServiceImpl extends ServiceImpl isData) { + public static Integer getInteger(List isData) { if (CollUtil.isNotEmpty(isData)) { List isQualified = isData.stream().filter(x -> 1 == x || 2 == x).collect(Collectors.toList()); if (CollUtil.isNotEmpty(isQualified)) { @@ -306,11 +308,4 @@ public class SimAndDigHarmonicServiceImpl extends ServiceImpl rawDataVOS = new ArrayList<>(); for (SimAndDigNonHarmonicResult result : value) { RawDataVO dataVO = new RawDataVO(); - dataVO.setUnit(dictTree.getCode().equals("MAG")?"%":unit(dictTree.getCode())); + dataVO.setUnit(dictTree.getCode().equals("MAG")?"%": StorageUtil.unit(dictTree.getCode())); dataVO.setTime(result.getTimeId().format(DateTimeFormatter.ofPattern(DatePattern.ISO8601_PATTERN))); dataVO.setDataA(StrUtil.isNotBlank(result.getAValue()) ? new BigDecimal(result.getAValue()).toPlainString() : null); dataVO.setDataB(StrUtil.isNotBlank(result.getBValue()) ? new BigDecimal(result.getBValue()).toPlainString() : null); @@ -112,7 +113,7 @@ public class SimAndDigNonHarmonicServiceImpl extends ServiceImpl