From 0cd8e454fc731a9329ca65143d2d96f48350a6ec Mon Sep 17 00:00:00 2001 From: caozehui <2427765068@qq.com> Date: Wed, 15 Jul 2026 16:23:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84=E6=9A=82=E5=AD=98=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/DetectionServiceImpl.java | 24 +++++--- .../service/impl/PreDetectionServiceImpl.java | 61 ++++++++++++++++--- .../service/impl/PqScriptDtlsServiceImpl.java | 14 ++--- .../impl/PreDetectionServiceImplTest.java | 47 ++++++++++++++ 4 files changed, 124 insertions(+), 22 deletions(-) create mode 100644 detection/src/test/java/com/njcn/gather/detection/service/impl/PreDetectionServiceImplTest.java 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 9207ee6d..4f244a86 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 @@ -433,7 +433,7 @@ public class DetectionServiceImpl { fData = sourceIssue.getFFreq(); } if (PowerIndexEnum.P.getKey().equals(type)) { - if (!DetectionCodeEnum.PF.getCode().equals(splitArr[1])) { + if (!DetectionCodeEnum.PF.getCode().equals(splitArr[1]) && !DetectionCodeEnum.TOTPF.getCode().equals(splitArr[1])) { Boolean valueType = pqScriptMapper.selectScriptIsValueType(sourceIssue.getScriptId()); if (valueType) { fData = sourceIssue.getFUn() * sourceIssue.getFIn() / 100; @@ -538,11 +538,15 @@ public class DetectionServiceImpl { SourceIssue sourceIssue, DictDataEnum dataRule, Integer num, Integer scale) { - Double fData = 1.0; + Double fDataA = 1.0; + Double fDataB = 1.0; + Double fDataC = 1.0; String fundCode = ""; String harmCode = ""; if (U.equals(type)) { - fData = sourceIssue.getFUn(); + fDataA = sourceIssue.getChannelList().stream().filter(x -> x.getChannelType().contains("Ua")).findFirst().get().getFAmp(); + fDataB = sourceIssue.getChannelList().stream().filter(x -> x.getChannelType().contains("Ub")).findFirst().get().getFAmp(); + fDataC = sourceIssue.getChannelList().stream().filter(x -> x.getChannelType().contains("Uc")).findFirst().get().getFAmp(); fundCode = DetectionCodeEnum.U1.getCode(); if (num == 1) { harmCode = DetectionCodeEnum.SV_1_49.getCode(); @@ -551,7 +555,9 @@ public class DetectionServiceImpl { } } if (I.equals(type)) { - fData = sourceIssue.getFIn(); + fDataA = sourceIssue.getChannelList().stream().filter(x -> x.getChannelType().contains("Ia")).findFirst().get().getFAmp(); + fDataB = sourceIssue.getChannelList().stream().filter(x -> x.getChannelType().contains("Ib")).findFirst().get().getFAmp(); + fDataC = sourceIssue.getChannelList().stream().filter(x -> x.getChannelType().contains("Ic")).findFirst().get().getFAmp(); fundCode = DetectionCodeEnum.I1.getCode(); if (num == 1) { harmCode = DetectionCodeEnum.SI_1_49.getCode(); @@ -560,7 +566,9 @@ public class DetectionServiceImpl { } } if (HP.equals(type)) { - fData = (sourceIssue.getFIn() * sourceIssue.getFUn()) * 0.01; + fDataA = (sourceIssue.getFIn() * sourceIssue.getFUn()) * 0.01; + fDataB = (sourceIssue.getFIn() * sourceIssue.getFUn()) * 0.01; + fDataC = (sourceIssue.getFIn() * sourceIssue.getFUn()) * 0.01; harmCode = DetectionCodeEnum.P2_50.getCode(); } // if (P.equals(type)) { @@ -586,9 +594,9 @@ public class DetectionServiceImpl { pqErrSysDtls = adDtlsCheckData.get(0).getErrSysDtls(); } } - List integerBooleanA = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_A, sourceIssue, dataRule, devMap.get(TYPE_A), fData, num, scale); - List integerBooleanB = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_B, sourceIssue, dataRule, devMap.get(TYPE_B), fData, num, scale); - List integerBooleanC = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_C, sourceIssue, dataRule, devMap.get(TYPE_C), fData, num, scale); + List integerBooleanA = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_A, sourceIssue, dataRule, devMap.get(TYPE_A), fDataA, num, scale); + List integerBooleanB = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_B, sourceIssue, dataRule, devMap.get(TYPE_B), fDataB, num, scale); + List integerBooleanC = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_C, sourceIssue, dataRule, devMap.get(TYPE_C), fDataC, num, scale); harmonicResult.setDataType(sourceIssue.getDataType()); reflectHarmonic(false, "a", integerBooleanA, harmonicResult, num); reflectHarmonic(false, "b", integerBooleanB, harmonicResult, num); diff --git a/detection/src/main/java/com/njcn/gather/detection/service/impl/PreDetectionServiceImpl.java b/detection/src/main/java/com/njcn/gather/detection/service/impl/PreDetectionServiceImpl.java index 3c4c1549..64a9bd84 100644 --- a/detection/src/main/java/com/njcn/gather/detection/service/impl/PreDetectionServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/detection/service/impl/PreDetectionServiceImpl.java @@ -284,28 +284,45 @@ public class PreDetectionServiceImpl implements PreDetectionService { @Override public boolean restartTemTest(PreDetectionParam param) { + PreDetectionParam runtimeParam = WebServiceManager.getPreDetectionParam(param.getUserPageId()); + if (runtimeParam == null) { + if (StrUtil.isBlank(param.getSourceId()) || StrUtil.isBlank(param.getScriptId()) || StrUtil.isBlank(param.getCode())) { + throw new BusinessException(CommonResponseEnum.FAIL, "未找到暂停检测上下文,请重新开始检测"); + } + runtimeParam = param; + } FormalTestManager.stopFlag = false; socketDevResponseService.initRestart(); List sourceIssueList = SocketManager.getSourceList(); - SourceInitialize sourceInitialize = pqSourceService.getSourceInitializeParam(param.getSourceId()); - param.setSourceName(sourceInitialize.getSourceId()); + if (StrUtil.isBlank(runtimeParam.getSourceName()) && StrUtil.isNotBlank(runtimeParam.getSourceId())) { + SourceInitialize sourceInitialize = pqSourceService.getSourceInitializeParam(runtimeParam.getSourceId()); + if (sourceInitialize == null) { + throw new BusinessException(DetectionResponseEnum.SOURCE_INFO_NOT); + } + runtimeParam.setSourceName(sourceInitialize.getSourceId()); + } if (CollUtil.isNotEmpty(sourceIssueList)) { SourceIssue sourceIssues = SocketManager.getSourceList().get(0); + String type = resolveFormalIssueType(sourceIssues); + sendBigItemStartIfFirstFormalIssue(runtimeParam, sourceIssues, type); + if (StrUtil.isNotBlank(sourceIssues.getOtherType())) { + sourceIssues.setType(PowerIndexEnum.V.getKey()); + } SocketMsg xuMsg = new SocketMsg<>(); xuMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue()); xuMsg.setData(JSON.toJSONString(sourceIssues)); - xuMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + "&&" + sourceIssues.getType()); - SocketManager.sendMsg(param.getUserPageId() + DetectionCommunicateConstant.SOURCE, JSON.toJSONString(xuMsg)); + xuMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + "&&" + type); + SocketManager.sendMsg(runtimeParam.getUserPageId() + DetectionCommunicateConstant.SOURCE, JSON.toJSONString(xuMsg)); // Resume_Success } else { //TODO 是否最终检测完成需要推送给用户 检测完成 PqScriptCheckDataParam checkDataParam = new PqScriptCheckDataParam(); - checkDataParam.setScriptId(param.getScriptId()); + checkDataParam.setScriptId(runtimeParam.getScriptId()); checkDataParam.setIsValueTypeName(false); List adType = iPqScriptCheckDataService.getValueType(checkDataParam); - iPqDevService.updateResult(param.getDevIds(), adType, param.getCode(), param.getUserId(), param.getTemperature(), param.getHumidity(), true); - CnSocketUtil.quitSend(param); + iPqDevService.updateResult(runtimeParam.getDevIds(), adType, runtimeParam.getCode(), runtimeParam.getUserId(), runtimeParam.getTemperature(), runtimeParam.getHumidity(), true); + CnSocketUtil.quitSend(runtimeParam); } return true; @@ -405,6 +422,36 @@ public class PreDetectionServiceImpl implements PreDetectionService { return pqScriptDtlsService.listSourceIssue(issueParam); } + private void sendBigItemStartIfFirstFormalIssue(PreDetectionParam param, SourceIssue currentIssue, String type) { + if (param == null || currentIssue == null || currentIssue.getIndex() == null || StrUtil.isBlank(type)) { + return; + } + List allIssues = buildAllFormalIssues(param); + if (isFirstFormalIssueOfBigItem(allIssues, currentIssue, type)) { + WebServiceManager.sendDetectionMessage(param.getUserPageId(), type + CnSocketUtil.START_TAG, null, new ArrayList<>(), null); + } + } + + static boolean isFirstFormalIssueOfBigItem(List allIssues, SourceIssue currentIssue, String type) { + if (CollUtil.isEmpty(allIssues) || currentIssue == null || currentIssue.getIndex() == null || StrUtil.isBlank(type)) { + return false; + } + Integer firstSort = allIssues.stream() + .filter(issue -> type.equals(resolveFormalIssueType(issue))) + .map(SourceIssue::getIndex) + .filter(Objects::nonNull) + .min(Integer::compareTo) + .orElse(null); + return Objects.equals(firstSort, currentIssue.getIndex()); + } + + static String resolveFormalIssueType(SourceIssue issue) { + if (issue == null) { + return null; + } + return StrUtil.isNotBlank(issue.getOtherType()) ? issue.getOtherType() : issue.getType(); + } + private void mergeResultFlags(Map> target, Map> source) { if (CollUtil.isEmpty(source)) { return; diff --git a/detection/src/main/java/com/njcn/gather/script/service/impl/PqScriptDtlsServiceImpl.java b/detection/src/main/java/com/njcn/gather/script/service/impl/PqScriptDtlsServiceImpl.java index b0568985..54a23ac5 100644 --- a/detection/src/main/java/com/njcn/gather/script/service/impl/PqScriptDtlsServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/script/service/impl/PqScriptDtlsServiceImpl.java @@ -663,7 +663,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl x.getChannelType().contains("I" + listDTO.getChannelType().substring(1, 2))) .collect(Collectors.toList()); if (CollUtil.isNotEmpty(channelI)) { - value += channelI.get(0).getFAmp() * listDTO.getFAmp(); + value += channelI.get(0).getFAmp() * listDTO.getFAmp() / radio; } } checkData = new PqScriptDtlsParam.CheckData(); @@ -841,9 +841,9 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl allIssues = Arrays.asList(issue(10, "voltage"), issue(20, "voltage"), issue(30, "current")); + + assertTrue(PreDetectionServiceImpl.isFirstFormalIssueOfBigItem(allIssues, issue(10, "voltage"), "voltage")); + } + + @Test + public void isFirstFormalIssueOfBigItem_returnsFalseWhenResumingInsideSameBigItem() { + List allIssues = Arrays.asList(issue(10, "voltage"), issue(20, "voltage"), issue(30, "current")); + + assertFalse(PreDetectionServiceImpl.isFirstFormalIssueOfBigItem(allIssues, issue(20, "voltage"), "voltage")); + } + + @Test + public void isFirstFormalIssueOfBigItem_usesOtherTypeAsBigItemType() { + List allIssues = Arrays.asList(otherTypeIssue(10, "V", "voltage"), otherTypeIssue(20, "V", "voltage")); + + assertTrue(PreDetectionServiceImpl.isFirstFormalIssueOfBigItem(allIssues, otherTypeIssue(10, "V", "voltage"), "voltage")); + } + + private SourceIssue issue(Integer index, String type) { + SourceIssue issue = new SourceIssue(); + issue.setIndex(index); + issue.setType(type); + return issue; + } + + private SourceIssue otherTypeIssue(Integer index, String type, String otherType) { + SourceIssue issue = issue(index, type); + issue.setOtherType(otherType); + return issue; + } +}