From 1abba4a528df988a66aae1634a0dd38e173273bf Mon Sep 17 00:00:00 2001 From: caozehui <2427765068@qq.com> Date: Thu, 9 Oct 2025 15:50:54 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SocketContrastResponseService.java | 909 ++++++++++++------ .../handler/SocketDevResponseService.java | 4 +- .../pojo/enums/DetectionCodeEnum.java | 5 +- .../pojo/enums/SourceResponseCodeEnum.java | 3 +- .../service/impl/DetectionServiceImpl.java | 51 +- .../service/impl/PreDetectionServiceImpl.java | 20 +- .../gather/detection/util/DetectionUtil.java | 34 +- .../util/socket/FormalTestManager.java | 14 + .../gather/detection/util/socket/MsgUtil.java | 9 + .../cilent/NettyContrastClientHandler.java | 47 +- .../socket/websocket/WebServiceManager.java | 2 + .../socket/websocket/WebSocketHandler.java | 20 +- .../service/impl/PqMonitorServiceImpl.java | 24 +- .../report/pojo/enums/PowerIndexEnum.java | 3 +- .../service/impl/ResultServiceImpl.java | 93 +- 15 files changed, 816 insertions(+), 422 deletions(-) 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 30eaf7ec..f54fa172 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 @@ -124,17 +124,17 @@ public class SocketContrastResponseService { private String alignDataFilePath; public static final Map> testItemCodeMap = new HashMap() {{ - put("FREQ", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.FREQ.getCode())); - put("V", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.VRMS.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PVRMS.getCode())); - put("HV", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.V2_50.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PV2_50.getCode())); - put("HI", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I2_50.getCode())); - put("HP", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.P2_50.getCode())); - put("HSV", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.SV_1_49.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PSV_1_49.getCode())); - put("HSI", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.SI_1_49.getCode())); - put("I", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.IRMS.getCode())); - put("IMBV", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.V_UNBAN.getCode())); - put("IMBA", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I_UNBAN.getCode())); -// put("P", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.P_FUND.getCode())); + put("FREQ", Arrays.asList(DetectionCodeEnum.FREQ.getCode())); + put("V", Arrays.asList(DetectionCodeEnum.VRMS.getCode(), DetectionCodeEnum.PVRMS.getCode())); + put("HV", Arrays.asList(DetectionCodeEnum.V2_50.getCode(), DetectionCodeEnum.PV2_50.getCode())); + put("HI", Arrays.asList(DetectionCodeEnum.I2_50.getCode())); + put("HP", Arrays.asList(DetectionCodeEnum.P2_50.getCode())); + put("HSV", Arrays.asList(DetectionCodeEnum.SV_1_49.getCode(), DetectionCodeEnum.PSV_1_49.getCode())); + put("HSI", Arrays.asList(DetectionCodeEnum.SI_1_49.getCode())); + put("I", Arrays.asList(DetectionCodeEnum.IRMS.getCode())); + put("IMBV", Arrays.asList(DetectionCodeEnum.V_UNBAN.getCode())); + put("IMBA", Arrays.asList(DetectionCodeEnum.I_UNBAN.getCode())); + put("F", Arrays.asList(DetectionCodeEnum.PST.getCode())); }}; /** @@ -175,7 +175,38 @@ public class SocketContrastResponseService { FormalTestManager.preNumTestResultList.clear(); checkResult = false; - SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); + + FormalTestManager.isWaveCheck = false; + FormalTestManager.nonWaveDataSourceEnum = null; + + String[] datasourceIds = FormalTestManager.currentTestPlan.getDatasourceId().split(","); + for (String datasourceId : datasourceIds) { + switch (DataSourceEnum.ofByValue(datasourceId)) { + case REAL_DATA: + FormalTestManager.nonWaveDataSourceEnum = DataSourceEnum.REAL_DATA; + break; + case WAVE_DATA: + FormalTestManager.isWaveCheck = true; + break; + case MINUTE_STATISTICS_MIN: + FormalTestManager.nonWaveDataSourceEnum = DataSourceEnum.MINUTE_STATISTICS_MIN; + break; + case MINUTE_STATISTICS_MAX: + FormalTestManager.nonWaveDataSourceEnum = DataSourceEnum.MINUTE_STATISTICS_MAX; + break; + case MINUTE_STATISTICS_AVG: + FormalTestManager.nonWaveDataSourceEnum = DataSourceEnum.MINUTE_STATISTICS_AVG; + break; + case MINUTE_STATISTICS_CP95: + FormalTestManager.nonWaveDataSourceEnum = DataSourceEnum.MINUTE_STATISTICS_CP95; + break; + } + } + + if (ObjectUtil.isNotNull(FormalTestManager.nonWaveDataSourceEnum)) { + SocketManager.contrastClockMap.put(FormalTestManager.nonWaveDataSourceEnum, 0L); + } + SocketManager.contrastClockMap.clear(); successComm.clear(); failComm.clear(); @@ -218,6 +249,8 @@ public class SocketContrastResponseService { FormalTestManager.standardDevList.addAll(pqStandardDevService.listStandardDevPreDetection(standardDevIds)); FormalTestManager.pairsIpMap.clear(); + + final Integer[] maxStatInterval = {0}; // 标准设备根据配对关系设置监测点 FormalTestManager.standardDevList.stream().forEach(x -> { List monitorList = new ArrayList<>(); @@ -235,11 +268,15 @@ public class SocketContrastResponseService { monitorListDTO.setCtStr(monitorListDTO1.getCtStr()); monitorListDTO.setStatInterval(monitorListDTO1.getStatInterval()); FormalTestManager.pairsIpMap.put(monitorListDTO1.getLineId(), monitorListDTO.getLineId()); + + maxStatInterval[0] = Math.max(maxStatInterval[0], monitorListDTO.getStatInterval()); monitorList.add(monitorListDTO); }); x.setMonitorList(monitorList); }); + FormalTestManager.maxTime = (long) (maxStatInterval[0] * 5 * 60); + FormalTestManager.devIdMapComm.clear(); FormalTestManager.devIdMapComm.putAll(FormalTestManager.devList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevId))); FormalTestManager.devIdMapComm.putAll(FormalTestManager.standardDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevId))); @@ -283,8 +320,9 @@ public class SocketContrastResponseService { List fatherIdList = dictTreeList.stream().map(DictTree::getId).collect(Collectors.toList()); List childDictTreeList = dictTreeService.listByFatherIds(fatherIdList); if (CollUtil.isNotEmpty(childDictTreeList)) { - List collect1 = testItemCodeMap.values().stream().flatMap(Collection::stream).map(x -> x.split("\\$")[1]).collect(Collectors.toList()); - FormalTestManager.testItemMap.putAll(childDictTreeList.stream().filter(x -> collect1.contains(x.getCode())).collect(Collectors.toMap(obj -> DetectionCodeEnum.REAL_PREFIX.getCode() + obj.getCode(), obj -> obj.getId()))); + List collect1 = testItemCodeMap.values().stream().flatMap(Collection::stream).collect(Collectors.toList()); + DetectionCodeEnum prefixEnum = this.getPrefixEnum(); + FormalTestManager.testItemMap.putAll(childDictTreeList.stream().filter(x -> collect1.contains(x.getCode())).collect(Collectors.toMap(obj -> prefixEnum.getCode() + obj.getCode(), obj -> obj.getId()))); } DictData dictData = dictDataService.getDictDataById(FormalTestManager.currentTestPlan.getDataRule()); @@ -342,9 +380,14 @@ public class SocketContrastResponseService { private void devComm(SocketDataMsg socketDataMsg, PreDetectionParam param) { SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); String s = param.getUserPageId() + CnSocketUtil.CONTRAST_DEV_TAG; - SocketMsg socketMsg = new SocketMsg<>(); + SourceOperateCodeEnum quitOperateCode = this.getQuitOperateCode(); + boolean real = false; + boolean statistics = false; + boolean voltage = false; if (ObjectUtil.isNotNull(dictDataEnumByCode)) { + SourceOperateCodeEnum requestOperateCode = this.getRequestOperateCode(); + switch (dictDataEnumByCode) { case SUCCESS: if (SourceOperateCodeEnum.RECORD_WAVE_STEP1.getValue().equals(socketDataMsg.getRequestId())) { @@ -359,7 +402,7 @@ public class SocketContrastResponseService { SocketDataMsg webSend = new SocketDataMsg(); webSend.setRequestId(SourceOperateCodeEnum.YJC_SBTXJY.getValue()); - webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_03.getValue()); + webSend.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_03.getValue()); webSend.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode()); webSend.setData("设备通讯校验成功!"); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); @@ -369,7 +412,26 @@ public class SocketContrastResponseService { //开始模型一致性校验 System.out.println("装置通信成功!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》开始模型一致性校验》》》》》》》》》》》》》》》》"); - this.sendModelDeal(s); + List allDataType = this.getAllDataType(); + if (allDataType.contains(getPrefixEnum().getCode() + DetectionCodeEnum.PST.getCode())) { + allDataType.remove(getPrefixEnum().getCode() + DetectionCodeEnum.PST.getCode()); + } + if (CollUtil.isNotEmpty(allDataType)) { + this.sendModelDeal(s, allDataType); + } else { + SocketDataMsg webSend1 = new SocketDataMsg(); + webSend1.setRequestId(SourceOperateCodeEnum.YJC_MXYZXJY.getValue()); + webSend1.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode());//最终成功推送 + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend1)); + + System.out.println("模型一致性校验成功!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》开始数据对齐校验》》》》》》》》》》》》》》》》"); + + this.sendAlignData(s, requestOperateCode); + + FormalTestManager.currentStep = SourceOperateCodeEnum.YJC_ALIGN; + + this.resetTimer(); + } } } else { String result = socketDataMsg.getData(); @@ -377,32 +439,26 @@ public class SocketContrastResponseService { //单个测点通讯成功 socketDataMsg.setRequestId(SourceOperateCodeEnum.YJC_SBTXJY.getValue()); String msg = ""; - boolean real = SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue().equals(socketDataMsg.getOperateCode()); - boolean voltage = SourceOperateCodeEnum.DEV_INIT_GATHER_03.getValue().equals(socketDataMsg.getOperateCode()); + statistics = SourceOperateCodeEnum.DEV_INIT_GATHER_01.getValue().equals(socketDataMsg.getOperateCode()); + real = SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue().equals(socketDataMsg.getOperateCode()); + voltage = SourceOperateCodeEnum.DEV_INIT_GATHER_03.getValue().equals(socketDataMsg.getOperateCode()); if (real) { msg = "实时协议校验成功!"; } if (voltage) { msg = "暂态协议校验成功!"; } + if (statistics) { + msg = "统计协议校验成功!"; + } MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1); socketDataMsg.setData(socketDataMsg.getData() + msg); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); System.out.println(msg + successComm.size() + "=====" + FormalTestManager.monitorMap.size()); if (successComm.size() == FormalTestManager.monitorMap.size()) { - String datasourceId = FormalTestManager.currentTestPlan.getDatasourceId(); - boolean isWaveCheck = datasourceId.contains(DataSourceEnum.WAVE_DATA.getValue()); - SocketDataMsg temMsg = new SocketDataMsg(); - temMsg.setRequestId(SourceOperateCodeEnum.YJC_SBTXJY.getValue()); - - if (isWaveCheck) { -// if (real) { -// temMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue()); -// temMsg.setCode(SourceResponseCodeEnum.SUCCESS.getCode()); -// temMsg.setData(msg); -// } + if (FormalTestManager.isWaveCheck) { if (voltage) { successComm.clear(); failComm.clear(); @@ -410,36 +466,54 @@ public class SocketContrastResponseService { // 下发录波指令 this.sendRecordWave(s); return; + } else { + SocketMsg socketMsg = new SocketMsg<>(); + // 进行暂态协议校验 + socketMsg.setRequestId(SourceOperateCodeEnum.YJC_XYJY.getValue()); + socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_03.getValue()); + Map> map = new HashMap<>(1); + List preDetectionList = new ArrayList<>(); + preDetectionList.addAll(FormalTestManager.devList); + preDetectionList.addAll(FormalTestManager.standardDevList); + map.put("deviceList", preDetectionList); + socketMsg.setData(JSON.toJSONString(map)); + SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); } } else { - temMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue()); - temMsg.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode()); - temMsg.setData("设备通讯校验成功!"); - WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(temMsg)); - } + socketDataMsg.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode()); + socketDataMsg.setData("设备通讯校验成功!"); + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); - if (isWaveCheck && real) { - // 进行暂态协议校验 - socketMsg.setRequestId(SourceOperateCodeEnum.YJC_XYJY.getValue()); - socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_03.getValue()); - Map> map = new HashMap<>(1); - List preDetectionList = new ArrayList<>(); - preDetectionList.addAll(FormalTestManager.devList); - preDetectionList.addAll(FormalTestManager.standardDevList); - map.put("deviceList", preDetectionList); - socketMsg.setData(JSON.toJSONString(map)); - SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); - } else { //开始模型一致性校验 System.out.println("装置通信成功!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》开始模型一致性校验》》》》》》》》》》》》》》》》"); - this.sendModelDeal(s); + List allDataType = this.getAllDataType(); + if (allDataType.contains(getPrefixEnum().getCode() + DetectionCodeEnum.PST.getCode())) { + allDataType.remove(getPrefixEnum().getCode() + DetectionCodeEnum.PST.getCode()); + } + if (CollUtil.isNotEmpty(allDataType)) { + this.sendModelDeal(s, allDataType); + } else { + SocketDataMsg webSend = new SocketDataMsg(); + webSend.setRequestId(SourceOperateCodeEnum.YJC_MXYZXJY.getValue()); + webSend.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode());//最终成功推送 + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); + + System.out.println("模型一致性校验成功!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》开始数据对齐校验》》》》》》》》》》》》》》》》"); + + this.sendAlignData(s, requestOperateCode); + + FormalTestManager.currentStep = SourceOperateCodeEnum.YJC_ALIGN; + + this.resetTimer(); + } } } completeJudgment(param); } break; case UNPROCESSED_BUSINESS: + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); if (SourceOperateCodeEnum.RECORD_WAVE_STEP1.getValue().equals(socketDataMsg.getRequestId())) { String data = socketDataMsg.getData(); if (StrUtil.isNotBlank(data) && data.equals("waiting")) { @@ -453,13 +527,13 @@ public class SocketContrastResponseService { System.out.println("无效的录波指令!"); CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, true); + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, true); Collection disjunction = CollectionUtil.disjunction(FormalTestManager.monitorMap.keySet(), successComm); // 向前端推送 for (String key : disjunction) { webSend.setCode(SourceResponseCodeEnum.FAIL.getCode()); - webSend.setData(MsgUtil.getPairStr(key, FormalTestManager.pairsIpMap.inverse().get(key), FormalTestManager.devNameMapComm) + " 无效的录波指令!"); + webSend.setData(MsgUtil.getMonitorInfo(key, FormalTestManager.devNameMapComm) + " 无效的录波指令!"); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); } // 推送最终失败结果 @@ -469,30 +543,42 @@ public class SocketContrastResponseService { } FormalTestManager.scheduler.shutdown(); FormalTestManager.scheduler = null; - }, 20, TimeUnit.SECONDS); + }, 30, TimeUnit.SECONDS); } } } - WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); break; case DEV_ERROR: - failComm.addAll(FormalTestManager.devMapMonitorNum.get(socketDataMsg.getData())); WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0)); + failComm.addAll(FormalTestManager.devMapMonitorNum.get(socketDataMsg.getData())); completeJudgment(param); + if (voltage) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, true); break; case DEV_TARGET: - failComm.add(socketDataMsg.getData()); WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); + failComm.add(socketDataMsg.getData()); completeJudgment(param); + if (voltage) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, true); break; case RE_OPERATE: WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false); - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, true); + if (voltage) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, true); break; case NO_INIT_DEV: - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false); - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, true); + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + if (voltage) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, true); break; default: WebServiceManager.sendUnknownErrorMessage(param.getUserPageId()); @@ -508,15 +594,17 @@ public class SocketContrastResponseService { private void modelDeal(SocketDataMsg socketDataMsg, PreDetectionParam param) { SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); String s = param.getUserPageId() + CnSocketUtil.CONTRAST_DEV_TAG; - SocketMsg socketMsg = new SocketMsg<>(); DevData devData = JSON.parseObject(socketDataMsg.getData(), DevData.class); socketDataMsg.setRequestId(SourceOperateCodeEnum.YJC_MXYZXJY.getValue()); if (ObjectUtil.isNotNull(dictDataEnumByCode)) { + SourceOperateCodeEnum requestOperateCode = this.getRequestOperateCode(); + SourceOperateCodeEnum quitOperateCode = this.getQuitOperateCode(); + switch (dictDataEnumByCode) { case SUCCESS: //成功收到数据后重置超时统计时间 - SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); + this.resetTimer(); String monitorId1 = devData.getId(); successComm.add(monitorId1); @@ -530,7 +618,6 @@ public class SocketContrastResponseService { } if (successComm.size() == FormalTestManager.monitorMap.size()) { - boolean modelCheckResult = this.modelCheck(param, FormalTestManager.devDataMap, FormalTestManager.monitorMap.get(monitorId1), true); modelCheckResult = this.modelCheck(param, FormalTestManager.standardDevDataMap, FormalTestManager.monitorMap.get(monitorId1), false) && modelCheckResult; @@ -538,49 +625,36 @@ public class SocketContrastResponseService { if (!modelCheckResult) { SocketDataMsg webSend = new SocketDataMsg(); webSend.setRequestId(SourceOperateCodeEnum.YJC_MXYZXJY.getValue()); - webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); webSend.setCode(SourceResponseCodeEnum.ALL_FAIL.getCode()); //最终错误推送 WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(webSend, FormalTestManager.devNameMapComm, 0)); System.out.println("模型一致性校验失败!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》"); - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false); - return; + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, false); } else { SocketDataMsg webSend = new SocketDataMsg(); webSend.setRequestId(SourceOperateCodeEnum.YJC_MXYZXJY.getValue()); - webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); webSend.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode());//最终成功推送 WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); - String[] dataSources = FormalTestManager.currentTestPlan.getDatasourceId().split(","); + if (ObjectUtil.isNotNull(FormalTestManager.nonWaveDataSourceEnum)) { + System.out.println("模型一致性校验成功!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》开始数据对齐校验》》》》》》》》》》》》》》》》"); + this.sendAlignData(s, requestOperateCode); - if (Arrays.stream(dataSources).anyMatch(DataSourceEnum.REAL_DATA.getValue()::equals)) { - System.out.println("模型一致性校验成功!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》开始实时数据对齐校验》》》》》》》》》》》》》》》》"); - - socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue()); - socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); - DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam(); - phaseSequenceParam.setMoniterIdList(Arrays.asList(FormalTestManager.monitorMap.keySet().toArray(new String[FormalTestManager.monitorMap.size()]))); - phaseSequenceParam.setDataType(Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.VRMS.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PVRMS.getCode())); - phaseSequenceParam.setReadCount(this.getMaxReadCount(5)); - phaseSequenceParam.setIgnoreCount(0); - phaseSequenceParam.setDataType(Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.VRMS.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PVRMS.getCode())); - phaseSequenceParam.setReadCount(this.getMaxReadCount(5)); - phaseSequenceParam.setIgnoreCount(0); - socketMsg.setData(JSON.toJSONString(phaseSequenceParam)); - SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); FormalTestManager.currentStep = SourceOperateCodeEnum.YJC_ALIGN; - } else { + + this.resetTimer(); + } else if (FormalTestManager.isWaveCheck) { System.out.println("(仅有录波)模型一致性校验成功!》》》》》》》》》》》》》》》》》》》》》》》》》》》开始相序校验》》》》》》》》》》》》》》》》》》》》》》》》》》》"); this.sendXu(s); + this.resetTimer(); FormalTestManager.currentStep = SourceOperateCodeEnum.YJC_XUJY; } - - // 实时数据开始计时 - SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); } } break; @@ -592,18 +666,31 @@ public class SocketContrastResponseService { break; case DEV_ERROR: WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0)); - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, true); + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, true); break; case DEV_TARGET: WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, true); + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, true); break; case RE_OPERATE: WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, true); + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, true); break; case NO_INIT_DEV: - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, true); + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, true); break; default: WebServiceManager.sendUnknownErrorMessage(param.getUserPageId()); @@ -621,51 +708,63 @@ public class SocketContrastResponseService { private void alignDeal(SocketDataMsg socketDataMsg, PreDetectionParam param) { SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); String s = param.getUserPageId() + CnSocketUtil.CONTRAST_DEV_TAG; - SocketMsg socketMsg = new SocketMsg<>(); DevData devData = JSON.parseObject(socketDataMsg.getData(), DevData.class); socketDataMsg.setRequestId(SourceOperateCodeEnum.YJC_ALIGN.getValue()); + if (ObjectUtil.isNotNull(dictDataEnumByCode)) { + SourceOperateCodeEnum requestOperateCode = this.getRequestOperateCode(); + SourceOperateCodeEnum quitOperateCode = this.getQuitOperateCode(); + switch (dictDataEnumByCode) { case SUCCESS: case NORMAL_RESPONSE: String monitorId1 = devData.getId(); - //成功收到数据后重置超时统计时间 - SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); + this.resetTimer(); + + int type = 1; + int targetCount = 5; + if (ObjectUtil.isNotNull(FormalTestManager.nonWaveDataSourceEnum)) { + if (FormalTestManager.nonWaveDataSourceEnum != DataSourceEnum.REAL_DATA) { + type = 2; + targetCount = 2; + } + } + if (Objects.isNull(FormalTestManager.scheduler)) { FormalTestManager.scheduler = Executors.newScheduledThreadPool(1); + long delay = this.getDelay(targetCount); FormalTestManager.scheduledFuture = FormalTestManager.scheduler.schedule(() -> { if (!checkResult) { - System.out.println("1minute内实时数据对齐校验失败!"); - - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false); - + System.out.println(delay + "s内数据对齐校验失败!"); + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, false); Collection disjunction = CollectionUtil.disjunction(FormalTestManager.pairsIpMap.keySet(), successPair.keySet()); // 向前端推送实时数据对齐失败的配对项 for (String key : disjunction) { SocketDataMsg webSend = new SocketDataMsg(); webSend.setRequestId(SourceOperateCodeEnum.YJC_ALIGN.getValue()); - webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); + webSend.setOperateCode(requestOperateCode.getValue()); webSend.setCode(SourceResponseCodeEnum.FAIL.getCode()); - webSend.setData(MsgUtil.getPairStr(key, FormalTestManager.pairsIpMap.inverse().get(key), FormalTestManager.devNameMapComm)); + webSend.setData(MsgUtil.getPairStr(key, FormalTestManager.pairsIpMap.get(key), FormalTestManager.devNameMapComm)); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); } // 推送最终失败结果 SocketDataMsg webSend = new SocketDataMsg(); webSend.setRequestId(SourceOperateCodeEnum.YJC_ALIGN.getValue()); - webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); + webSend.setOperateCode(requestOperateCode.getValue()); webSend.setCode(SourceResponseCodeEnum.ALL_FAIL.getCode());//最终错误推送 + webSend.setData(this.getAlignDataToWeb()); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); - - // 将数据推送给前端 - this.sendAlignDataToWeb(param.getUserPageId()); this.saveAlignData(); this.clearData(); - FormalTestManager.scheduler.shutdown(); - FormalTestManager.scheduler = null; } - }, 1, TimeUnit.MINUTES); + FormalTestManager.scheduler.shutdown(); + FormalTestManager.scheduler = null; + }, delay, TimeUnit.SECONDS); } String devMonitorId = monitorId1; @@ -687,11 +786,10 @@ public class SocketContrastResponseService { // 进行单个监测点的对齐校验 if (!successPair.containsKey(devMonitorId)) { - if (FormalTestManager.devDataMap.get(devMonitorId).size() >= 5 && FormalTestManager.standardDevDataMap.get(standardDevMonitorId).size() >= 5) { - List> singleMonitorAlignData = this.getSingleMonitorAlignData(FormalTestManager.devDataMap.get(devMonitorId), FormalTestManager.standardDevDataMap.get(standardDevMonitorId), 5); + if (FormalTestManager.devDataMap.get(devMonitorId).size() >= targetCount && FormalTestManager.standardDevDataMap.get(standardDevMonitorId).size() >= targetCount) { + List> singleMonitorAlignData = this.getSingleMonitorAlignData(FormalTestManager.devDataMap.get(devMonitorId), FormalTestManager.standardDevDataMap.get(standardDevMonitorId), targetCount, type); -// if (this.singleMonitorAlignCheck(FormalTestManager.devDataMap.get(devMonitorId), FormalTestManager.standardDevDataMap.get(standardDevMonitorId))) { - if (singleMonitorAlignData.get(0).size() >= 5 && singleMonitorAlignData.get(1).size() >= 5) { + if (singleMonitorAlignData.get(0).size() >= targetCount && singleMonitorAlignData.get(1).size() >= targetCount) { successPair.put(devMonitorId, standardDevMonitorId); FormalTestManager.devDataMap.get(devMonitorId).clear(); FormalTestManager.devDataMap.get(devMonitorId).addAll(singleMonitorAlignData.get(0)); @@ -702,7 +800,7 @@ public class SocketContrastResponseService { //向前端推送实时数据对齐成功的配对 SocketDataMsg webSend = new SocketDataMsg(); webSend.setRequestId(SourceOperateCodeEnum.YJC_ALIGN.getValue()); - webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); + webSend.setOperateCode(requestOperateCode.getValue()); webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode()); webSend.setData(MsgUtil.getPairStr(standardDevMonitorId, devMonitorId, FormalTestManager.devNameMapComm)); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); @@ -712,24 +810,23 @@ public class SocketContrastResponseService { checkResult = true; FormalTestManager.scheduledFuture.cancel(true); FormalTestManager.scheduler.shutdown(); + FormalTestManager.scheduler = null; - // 将数据推送给前端 - this.sendAlignDataToWeb(param.getUserPageId()); this.saveAlignData(); - this.clearData(); - SocketDataMsg webSend1 = new SocketDataMsg(); webSend1.setRequestId(SourceOperateCodeEnum.YJC_ALIGN.getValue()); - webSend1.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); + webSend1.setOperateCode(requestOperateCode.getValue()); webSend1.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode());//最终成功推送 + webSend1.setData(this.getAlignDataToWeb()); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend1)); - System.out.println("实时数据对齐校验成功!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》开始相序校验》》》》》》》》》》》》》》》》"); + this.clearData(); + + System.out.println("数据对齐校验成功!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》开始相序校验》》》》》》》》》》》》》》》》"); this.sendXu(s); FormalTestManager.currentStep = SourceOperateCodeEnum.YJC_XUJY; - // 实时数据开始计时 - SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); + this.resetTimer(); } } } @@ -740,18 +837,31 @@ public class SocketContrastResponseService { break; case DEV_ERROR: WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0)); - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, true); + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, true); break; case DEV_TARGET: WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, true); + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, true); break; case RE_OPERATE: WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, true); + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, true); break; case NO_INIT_DEV: - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, true); + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, true); break; default: WebServiceManager.sendUnknownErrorMessage(param.getUserPageId()); @@ -764,23 +874,31 @@ public class SocketContrastResponseService { * 相序校验 */ private void devXu(PreDetectionParam param, SocketDataMsg socketDataMsg) { - SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); String s = param.getUserPageId() + CnSocketUtil.CONTRAST_DEV_TAG; - SocketMsg socketMsg = new SocketMsg<>(); DevData devData = JSON.parseObject(socketDataMsg.getData(), DevData.class); socketDataMsg.setRequestId(SourceOperateCodeEnum.YJC_XUJY.getValue()); + SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); if (ObjectUtil.isNotNull(dictDataEnumByCode)) { + SourceOperateCodeEnum requestOperateCode = this.getRequestOperateCode(); + SourceOperateCodeEnum quitOperateCode = this.getQuitOperateCode(); + switch (dictDataEnumByCode) { case SUCCESS: case NORMAL_RESPONSE: String monitorId1 = devData.getId(); - //成功收到数据后重置超时统计时间 - SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); + this.resetTimer(); String devMonitorId = monitorId1; String standardDevMonitorId = monitorId1; + int type = 1; + if (ObjectUtil.isNotNull(FormalTestManager.nonWaveDataSourceEnum)) { + if (FormalTestManager.nonWaveDataSourceEnum != DataSourceEnum.REAL_DATA) { + type = 2; + } + } + if (FormalTestManager.devDataMap.containsKey(monitorId1)) { standardDevMonitorId = FormalTestManager.pairsIpMap.get(monitorId1); if (!successPair.containsKey(devMonitorId)) { @@ -800,7 +918,7 @@ public class SocketContrastResponseService { if (FormalTestManager.devDataMap.get(devMonitorId).size() >= 1 && FormalTestManager.standardDevDataMap.get(standardDevMonitorId).size() >= 1) { successComm.add(standardDevMonitorId); successComm.add(devMonitorId); - List> singleMonitorAlignData = getSingleMonitorAlignData(FormalTestManager.devDataMap.get(devMonitorId), FormalTestManager.standardDevDataMap.get(standardDevMonitorId), 1); + List> singleMonitorAlignData = getSingleMonitorAlignData(FormalTestManager.devDataMap.get(devMonitorId), FormalTestManager.standardDevDataMap.get(standardDevMonitorId), 1, type); if (CollUtil.isNotEmpty(singleMonitorAlignData.get(0)) && CollUtil.isNotEmpty(singleMonitorAlignData.get(1))) { PreDetection.MonitorListDTO monitorListDTO = FormalTestManager.monitorMap.get(devMonitorId); @@ -811,47 +929,42 @@ public class SocketContrastResponseService { this.clearData(); WebSocketVO webSend = new WebSocketVO(); webSend.setRequestId(SourceOperateCodeEnum.YJC_XUJY.getValue()); - webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); + webSend.setOperateCode(requestOperateCode.getValue()); webSend.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode());//最终成功推送 WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); // 后续做正式检测 if (param.getTestItemList().get(2)) { System.out.println("相序校验成功!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》开始正式检测》》》》》》》》》》》》》》》》"); - String datasourceId = FormalTestManager.currentTestPlan.getDatasourceId(); - - if (datasourceId.contains(DataSourceEnum.REAL_DATA.getValue())) { + if (ObjectUtil.isNotNull(FormalTestManager.nonWaveDataSourceEnum)) { + SocketMsg socketMsg = new SocketMsg<>(); socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue()); - socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); + socketMsg.setOperateCode(requestOperateCode.getValue()); DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam(); phaseSequenceParam.setMoniterIdList(Arrays.asList(FormalTestManager.monitorMap.keySet().toArray(new String[FormalTestManager.monitorMap.size()]))); phaseSequenceParam.setDataType(this.getAllDataType()); - phaseSequenceParam.setReadCount(this.getMaxReadCount(FormalTestManager.curretntTestPlanConfig.getRealTime())); + phaseSequenceParam.setReadCount(this.getReadCount(this.getTargetCount())); phaseSequenceParam.setIgnoreCount(0); socketMsg.setData(JSON.toJSONString(phaseSequenceParam)); FormalTestManager.currentStep = SourceOperateCodeEnum.FORMAL_REAL; SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); - // 实时数据开始计时 - SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); + this.resetTimer(); checkResult = false; - } else if (datasourceId.contains(DataSourceEnum.WAVE_DATA.getValue())) { - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false); - + } else if (FormalTestManager.isWaveCheck) { // 录波数据 + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, false); successComm.clear(); failComm.clear(); FormalTestManager.currentStep = SourceOperateCodeEnum.RECORD_WAVE_STEP1; // 发送录波指令 this.sendRecordWave(s); - } else { - // 统计数据 - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false); - } } else { - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false); - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, false); } } } else if (successComm.size() == FormalTestManager.monitorMap.size()) { @@ -860,24 +973,29 @@ public class SocketContrastResponseService { // 相序校验失败,最终向前端发送失败消息 WebSocketVO webSend = new WebSocketVO<>(); webSend.setRequestId(SourceOperateCodeEnum.YJC_XUJY.getValue()); - webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); + webSend.setOperateCode(requestOperateCode.getValue()); webSend.setCode(SourceResponseCodeEnum.ALL_FAIL.getCode()); //最终错误推送 WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false); - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); - return; + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, false); } } else { - Integer maxReadCount = getMaxReadCount(1); - + Integer maxReadCount = getReadCount(1); WebSocketVO webSend = new WebSocketVO(); webSend.setRequestId(SourceOperateCodeEnum.YJC_XUJY.getValue()); - webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); + webSend.setOperateCode(requestOperateCode.getValue()); if (FormalTestManager.devDataMap.get(devMonitorId).size() >= maxReadCount && FormalTestManager.standardDevDataMap.get(standardDevMonitorId).size() >= maxReadCount) { webSend.setCode(SourceResponseCodeEnum.ALL_FAIL.getCode()); webSend.setData(MsgUtil.getPairStr(devMonitorId, standardDevMonitorId, FormalTestManager.devNameMapComm) + " 数据对齐失败!"); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); + + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, false); } } } @@ -888,13 +1006,24 @@ public class SocketContrastResponseService { break; case DEV_ERROR: WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0)); + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, true); break; case DEV_TARGET: WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, true); break; case RE_OPERATE: WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, true); + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, true); break; default: WebServiceManager.sendUnknownErrorMessage(param.getUserPageId()); @@ -913,28 +1042,40 @@ public class SocketContrastResponseService { String data = socketDataMsg.getData(); String s = param.getUserPageId() + CnSocketUtil.CONTRAST_DEV_TAG; DevData devData = JSON.parseObject(data, DevData.class); + SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); if (SourceOperateCodeEnum.FORMAL_REAL.getValue().equals(socketDataMsg.getRequestId())) { + SourceOperateCodeEnum requestOperateCode = this.getRequestOperateCode(); + SourceOperateCodeEnum quitOperateCode = this.getQuitOperateCode(); + switch (Objects.requireNonNull(dictDataEnumByCode)) { case SUCCESS: case NORMAL_RESPONSE: + this.resetTimer(); + SocketDataMsg webSend = new SocketDataMsg(); webSend.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue()); - webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); + webSend.setOperateCode(requestOperateCode.getValue()); - String monitorId1 = devData.getId(); - // 实时数据有效组数 - Integer realTime = FormalTestManager.curretntTestPlanConfig.getRealTime(); - //成功收到数据后重置超时统计时间 - SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); + int targetCount = this.getTargetCount(); + + int type = 1; + if (ObjectUtil.isNotNull(FormalTestManager.nonWaveDataSourceEnum)) { + if (FormalTestManager.nonWaveDataSourceEnum != DataSourceEnum.REAL_DATA) { + type = 2; + } + } if (Objects.isNull(FormalTestManager.scheduler)) { FormalTestManager.scheduler = Executors.newScheduledThreadPool(1); + long delay = this.getDelay(targetCount); FormalTestManager.scheduledFuture = FormalTestManager.scheduler.schedule(() -> { if (!checkResult) { - System.out.println("正式检测-" + (long) Math.ceil(realTime / 5) + "分钟内收集数据不完整!"); - + System.out.println("正式检测-" + delay + "s内收集数据不完整!"); // 断开与设备的连接,但是不要将Socket移除 - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false); + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, false); this.clearData(); @@ -948,14 +1089,13 @@ public class SocketContrastResponseService { // 推送最终失败结果 webSend.setCode(SourceResponseCodeEnum.ALL_FAIL.getCode());//最终错误推送 WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); - - return; } FormalTestManager.scheduler.shutdown(); FormalTestManager.scheduler = null; - }, (long) Math.ceil(realTime / 5), TimeUnit.MINUTES); + }, delay, TimeUnit.SECONDS); } + String monitorId1 = devData.getId(); String devMonitorId = monitorId1; String standardDevMonitorId = monitorId1; @@ -975,9 +1115,9 @@ public class SocketContrastResponseService { } if (!successPair.containsKey(devMonitorId)) { - if (FormalTestManager.devDataMap.get(devMonitorId).size() >= realTime && FormalTestManager.standardDevDataMap.get(standardDevMonitorId).size() >= realTime) { - List> singleMonitorAlignData = getSingleMonitorAlignData(FormalTestManager.devDataMap.get(devMonitorId), FormalTestManager.standardDevDataMap.get(standardDevMonitorId), realTime); - if (singleMonitorAlignData.get(0).size() >= realTime && singleMonitorAlignData.get(1).size() >= realTime) { + if (FormalTestManager.devDataMap.get(devMonitorId).size() >= targetCount && FormalTestManager.standardDevDataMap.get(standardDevMonitorId).size() >= targetCount) { + List> singleMonitorAlignData = getSingleMonitorAlignData(FormalTestManager.devDataMap.get(devMonitorId), FormalTestManager.standardDevDataMap.get(standardDevMonitorId), targetCount, type); + if (singleMonitorAlignData.get(0).size() >= targetCount && singleMonitorAlignData.get(1).size() >= targetCount) { successPair.put(devMonitorId, standardDevMonitorId); // 推送收集数据成功的配对项 webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode()); @@ -992,7 +1132,7 @@ public class SocketContrastResponseService { if (successPair.keySet().containsAll(FormalTestManager.pairsIpMap.keySet())) { // 断开与设备的连接,但是不要将Socket移除 - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false); + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, false); checkResult = true; FormalTestManager.scheduledFuture.cancel(true); FormalTestManager.scheduler.shutdown(); @@ -1004,8 +1144,9 @@ public class SocketContrastResponseService { // 原始数据入库 List devDataList = FormalTestManager.devDataMap.values().stream().flatMap(List::stream).collect(Collectors.toList()); List standardDevDataList = FormalTestManager.standardDevDataMap.values().stream().flatMap(List::stream).collect(Collectors.toList()); - baseDataInsert(false, null, DataSourceEnum.REAL_DATA, devDataList, FormalTestManager.numMap, code); - baseDataInsert(true, null, DataSourceEnum.REAL_DATA, standardDevDataList, FormalTestManager.numMap, code); + DetectionCodeEnum prefixEnum = this.getPrefixEnum(); + baseDataInsert(false, null, FormalTestManager.nonWaveDataSourceEnum, devDataList, FormalTestManager.numMap, prefixEnum, code); + baseDataInsert(true, null, FormalTestManager.nonWaveDataSourceEnum, standardDevDataList, FormalTestManager.numMap, prefixEnum, code); // 进行误差计算 List allResultList = detectionService.processing( @@ -1014,7 +1155,7 @@ public class SocketContrastResponseService { FormalTestManager.pairsIpMap, FormalTestManager.devIdMapComm, FormalTestManager.testItemMap.keySet().stream().collect(Collectors.toList()), - errorSysId, FormalTestManager.dataRule, FormalTestManager.numMap, code, null); + errorSysId, FormalTestManager.dataRule, FormalTestManager.numMap, code, null, FormalTestManager.nonWaveDataSourceEnum); this.clearData(); @@ -1022,16 +1163,19 @@ public class SocketContrastResponseService { List adTypes = FormalTestManager.testItemMap.values().stream().collect(Collectors.toList()); + Map result = detectionDataDealService.devResult(true, FormalTestManager.pairsIdMap.keySet().stream().collect(Collectors.toList()), adTypes, code); // 若有不符合的 if (result.values().stream().anyMatch(r -> r.equals(ResultEnum.NOT_QUALIFIED.getValue()))) { - // 判断是否启用录波 - String datasourceId = FormalTestManager.currentTestPlan.getDatasourceId(); // 最终将检测结果推送到前端 - if (datasourceId.contains(DataSourceEnum.WAVE_DATA.getValue())) { - webSend.setCode(SourceResponseCodeEnum.REAL_DATA_CHECK_FAIL.getCode());// 实时数据检测失败,最终错误推送 + if (FormalTestManager.isWaveCheck) { + if (FormalTestManager.nonWaveDataSourceEnum == DataSourceEnum.WAVE_DATA) { + webSend.setCode(SourceResponseCodeEnum.REAL_DATA_CHECK_FAIL.getCode()); + } else { + webSend.setCode(SourceResponseCodeEnum.STATISTICS_DATA_CHECK_FAIL.getCode()); + } WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); - System.out.println("实时数据校验失败!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》开始录波》》》》》》》》》》》》》》》》"); + System.out.println("实时/统计数据校验失败!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》开始录波》》》》》》》》》》》》》》》》"); Set delSet = new HashSet<>(); for (int i = 0; i < FormalTestManager.devList.size(); i++) { @@ -1067,7 +1211,6 @@ public class SocketContrastResponseService { // 发送录波指令 this.sendRecordWave(s); } else { - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); // 配对关系入库 this.pairDataInsert(); @@ -1076,7 +1219,7 @@ public class SocketContrastResponseService { WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); // 修改检测点状态、设备状态 FormalTestManager.pairsIdMap.forEach((id1, id2) -> { - pqMonitorService.updateMonitorResult(id1, adTypes, DataSourceEnum.REAL_DATA, FormalTestManager.numMap.get(id1), null, code); + pqMonitorService.updateMonitorResult(id1, adTypes, FormalTestManager.nonWaveDataSourceEnum, FormalTestManager.numMap.get(id1), null, code); pqDevService.updateResult(id1.split(CnSocketUtil.SPLIT_TAG)[0], param.getUserId()); }); } @@ -1089,11 +1232,13 @@ public class SocketContrastResponseService { WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); // 修改检测点状态、设备状态 FormalTestManager.pairsIdMap.forEach((id1, id2) -> { - pqMonitorService.updateMonitorResult(id1, adTypes, DataSourceEnum.REAL_DATA, FormalTestManager.numMap.get(id1), null, code); + pqMonitorService.updateMonitorResult(id1, adTypes, FormalTestManager.nonWaveDataSourceEnum, FormalTestManager.numMap.get(id1), null, code); pqDevService.updateResult(id1.split(CnSocketUtil.SPLIT_TAG)[0], param.getUserId()); }); - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } } } } @@ -1105,13 +1250,24 @@ public class SocketContrastResponseService { break; case DEV_ERROR: WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0)); + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, true); break; case DEV_TARGET: WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, true); break; case RE_OPERATE: WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, true); + if (FormalTestManager.isWaveCheck) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + } + CnSocketUtil.contrastSendquit(param.getUserPageId(), quitOperateCode, true); break; default: WebServiceManager.sendUnknownErrorMessage(param.getUserPageId()); @@ -1179,8 +1335,9 @@ public class SocketContrastResponseService { List standardDevDataList = FormalTestManager.standardDevDataMap.values().stream().flatMap(List::stream).collect(Collectors.toList()); // 原始数据入库 - baseDataInsert(false, FormalTestManager.waveNum, DataSourceEnum.WAVE_DATA, devDataList, FormalTestManager.numMap, code); - baseDataInsert(true, FormalTestManager.waveNum, DataSourceEnum.WAVE_DATA, standardDevDataList, FormalTestManager.numMap, code); + DetectionCodeEnum prefixEnum = this.getPrefixEnum(); + baseDataInsert(false, FormalTestManager.waveNum, DataSourceEnum.WAVE_DATA, devDataList, FormalTestManager.numMap, prefixEnum, code); + baseDataInsert(true, FormalTestManager.waveNum, DataSourceEnum.WAVE_DATA, standardDevDataList, FormalTestManager.numMap, prefixEnum, code); // 进行误差计算 List allResultList = detectionService.processing( @@ -1189,7 +1346,7 @@ public class SocketContrastResponseService { FormalTestManager.pairsIpMap, FormalTestManager.devIdMapComm, FormalTestManager.testItemMap.keySet().stream().collect(Collectors.toList()), - errorSysId, FormalTestManager.dataRule, FormalTestManager.numMap, code, FormalTestManager.waveNum); + errorSysId, FormalTestManager.dataRule, FormalTestManager.numMap, code, FormalTestManager.waveNum, DataSourceEnum.WAVE_DATA); Map> deviceIdMap = allResultList.stream().collect(Collectors.groupingBy(DevLineTestResult::getDeviceId, Collectors.toList())); deviceIdMap.forEach((deviceId, devLineTestResultList) -> { @@ -1298,7 +1455,7 @@ public class SocketContrastResponseService { // 向前端推送 for (String key : disjunction) { webSend.setCode(SourceResponseCodeEnum.FAIL.getCode()); - webSend.setData(MsgUtil.getPairStr(key, FormalTestManager.pairsIpMap.inverse().get(key), FormalTestManager.devNameMapComm) + " 无效的录波指令!"); + webSend.setData(MsgUtil.getMonitorInfo(key, FormalTestManager.devNameMapComm) + " 无效的录波指令!"); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); } // 推送最终失败结果 @@ -1309,7 +1466,7 @@ public class SocketContrastResponseService { FormalTestManager.scheduler.shutdown(); FormalTestManager.scheduler = null; - }, 20, TimeUnit.SECONDS); + }, 30, TimeUnit.SECONDS); } } } @@ -1334,6 +1491,7 @@ public class SocketContrastResponseService { switch (Objects.requireNonNull(dictDataEnumByCode)) { case SUCCESS: switch (Objects.requireNonNull(operateCodeEnum)) { + case QUIT_INIT_01: case QUIT_INIT_02: case QUIT_INIT_03: if (FormalTestManager.isRemoveSocket) { @@ -1347,6 +1505,7 @@ public class SocketContrastResponseService { break; case NO_INIT_DEV: switch (operateCodeEnum) { + case QUIT_INIT_01: case QUIT_INIT_02: case QUIT_INIT_03: if (FormalTestManager.isRemoveSocket) { @@ -1399,39 +1558,104 @@ public class SocketContrastResponseService { * @return */ private List getAllDataType() { + DetectionCodeEnum prefixEnum = this.getPrefixEnum(); Set testCodes = FormalTestManager.testItemMap.keySet().stream().collect(Collectors.toSet()); - if (testCodes.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.V2_50.getCode()) - || testCodes.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PV2_50.getCode()) - || testCodes.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.SV_1_49.getCode()) - || testCodes.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PSV_1_49.getCode())) { - testCodes.add(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.U1.getCode()); - testCodes.add(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PU1.getCode()); + if (testCodes.contains(prefixEnum.getCode() + DetectionCodeEnum.V2_50.getCode()) + || testCodes.contains(prefixEnum.getCode() + DetectionCodeEnum.PV2_50.getCode()) + || testCodes.contains(prefixEnum.getCode() + DetectionCodeEnum.SV_1_49.getCode()) + || testCodes.contains(prefixEnum.getCode() + DetectionCodeEnum.PSV_1_49.getCode())) { + testCodes.add(prefixEnum.getCode() + DetectionCodeEnum.U1.getCode()); + testCodes.add(prefixEnum.getCode() + DetectionCodeEnum.PU1.getCode()); } - if (testCodes.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I2_50.getCode())) { - testCodes.add(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I1.getCode()); + if (testCodes.contains(prefixEnum.getCode() + DetectionCodeEnum.I2_50.getCode())) { + testCodes.add(prefixEnum.getCode() + DetectionCodeEnum.I1.getCode()); } return testCodes.stream().sorted().collect(Collectors.toList()); } + /** + * 获取前缀 + * + * @return + */ + private DetectionCodeEnum getPrefixEnum() { + DetectionCodeEnum prefixEnum = DetectionCodeEnum.REAL_PREFIX; + if (ObjectUtil.isNotNull(FormalTestManager.nonWaveDataSourceEnum)) { + switch (FormalTestManager.nonWaveDataSourceEnum) { + case REAL_DATA: + break; + case MINUTE_STATISTICS_AVG: + prefixEnum = DetectionCodeEnum.AVG_PREFIX; + break; + case MINUTE_STATISTICS_CP95: + prefixEnum = DetectionCodeEnum.CP_95_PREFIX; + break; + case MINUTE_STATISTICS_MIN: + prefixEnum = DetectionCodeEnum.MIN_PREFIX; + break; + case MINUTE_STATISTICS_MAX: + prefixEnum = DetectionCodeEnum.MAX_PREFIX; + break; + } + } + return prefixEnum; + } + /** * 获取最大读取数据的组数 * * @param targetCount 目标数量 * @return */ - private Integer getMaxReadCount(int targetCount) { - return (int) (Math.ceil(targetCount / 5.0) * 20); + private Integer getReadCount(int targetCount) { + if (ObjectUtil.isNotNull(FormalTestManager.nonWaveDataSourceEnum)) { + if (FormalTestManager.nonWaveDataSourceEnum == DataSourceEnum.REAL_DATA) { + return (int) (Math.ceil(targetCount / 5.0) * 20); + } else { + return (int) (Math.ceil(targetCount / 2.0) * 5); + } + } else { + return (int) (Math.ceil(targetCount / 5.0) * 20); + } } + /** + * 获取延迟时间 + * + * @param targetCount + * @return + */ + private long getDelay(int targetCount) { + if (ObjectUtil.isNotNull(FormalTestManager.nonWaveDataSourceEnum)) { + if (FormalTestManager.nonWaveDataSourceEnum == DataSourceEnum.REAL_DATA) { + return (int) (Math.ceil(targetCount / 5.0) * 60); + } else { + return (int) (Math.ceil(targetCount / 2.0) * FormalTestManager.maxTime); + } + } + return targetCount; + } + + /** + * 获取目标数量 + * + * @return + */ + private Integer getTargetCount() { + if (ObjectUtil.isNotNull(FormalTestManager.nonWaveDataSourceEnum)) { + if (FormalTestManager.nonWaveDataSourceEnum == DataSourceEnum.REAL_DATA) { + return FormalTestManager.curretntTestPlanConfig.getRealTime(); + } else { + return FormalTestManager.curretntTestPlanConfig.getStatistics(); + } + } + return -1; + } /** * 实时数据对齐-将数据推送给前端 */ - private void sendAlignDataToWeb(String userPageId) { - SocketDataMsg webSend = new SocketDataMsg(); - webSend.setRequestId(SourceOperateCodeEnum.YJC_ALIGN.getValue()); - webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); - webSend.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode()); + private String getAlignDataToWeb() { List data = new ArrayList<>(); DateTimeFormatter dtf = DateTimeFormatter.ofPattern(DatePattern.ISO8601_PATTERN); @@ -1451,6 +1675,7 @@ public class SocketContrastResponseService { String devMonitorId = FormalTestManager.pairsIpMap.inverse().get(standardDevMonitorId); PreDetection.MonitorListDTO monitorListDTO = FormalTestManager.monitorMap.get(devMonitorId); List devDataList = BeanUtil.copyToList(FormalTestManager.devDataMap.get(devMonitorId), DevData.class); + devDataList.sort(Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); channelDevDataList.sort(Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); AlignDataVO.ChannelData channelData = new AlignDataVO.ChannelData(); @@ -1460,14 +1685,16 @@ public class SocketContrastResponseService { boolean isStar = DetectionCodeEnum.STAR.getCode().equals(monitorListDTO.getConnection()); boolean isDelta = DetectionCodeEnum.DELTA.getCode().equals(monitorListDTO.getConnection()); - List dataList = channelDevDataList.stream().map(obj -> { + + List dataList = new ArrayList<>(); + for (int i = 0; i < channelDevDataList.size(); i++) { DevData.SqlDataDTO.ListDTO list1 = null; DevData.SqlDataDTO sqlDataDTO1 = null; if (isStar) { - sqlDataDTO1 = obj.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.VRMS.getCode())).findFirst().orElse(null); + sqlDataDTO1 = channelDevDataList.get(i).getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.VRMS.getCode())).findFirst().orElse(null); } if (isDelta) { - sqlDataDTO1 = obj.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.PVRMS.getCode())).findFirst().orElse(null); + sqlDataDTO1 = channelDevDataList.get(i).getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.PVRMS.getCode())).findFirst().orElse(null); } if (ObjectUtil.isNotNull(sqlDataDTO1)) { list1 = sqlDataDTO1.getList(); @@ -1477,10 +1704,10 @@ public class SocketContrastResponseService { rawData.setUbStdDev(list1.getB()); rawData.setUcStdDev(list1.getC()); - LocalDateTime localDateTime = DetectionUtil.timeFormat(obj.getTime(), DetectionUtil.FORMATTER); + LocalDateTime localDateTime = DetectionUtil.timeFormat(channelDevDataList.get(i).getTime(), DetectionUtil.FORMATTER); rawData.setTimeStdDev(localDateTime.format(dtf)); - DevData devData = devDataList.stream().filter(obj1 -> DetectionUtil.isAlignData(obj1, obj)).findFirst().orElse(null); + DevData devData = devDataList.get(i); if (ObjectUtil.isNotNull(devData)) { DevData.SqlDataDTO.ListDTO list2 = null; DevData.SqlDataDTO sqlDataDTO2 = null; @@ -1498,20 +1725,19 @@ public class SocketContrastResponseService { rawData.setUcDev(list2.getC()); localDateTime = DetectionUtil.timeFormat(devData.getTime(), DetectionUtil.FORMATTER); rawData.setTimeDev(localDateTime.format(dtf)); - devDataList.remove(devData); } - return rawData; - }).collect(Collectors.toList()); - devDataList.sort(Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); - dataList.addAll(devDataList.stream().map(obj -> { + dataList.add(rawData); + } + for (int i = channelDevDataList.size(); i < devDataList.size(); i++) { AlignDataVO.RawData rawData = new AlignDataVO.RawData(); - DevData.SqlDataDTO.ListDTO list = obj.getSqlData().get(0).getList(); + DevData devData = devDataList.get(i); + DevData.SqlDataDTO.ListDTO list = devData.getSqlData().get(0).getList(); rawData.setUaDev(list.getA()); rawData.setUbDev(list.getB()); rawData.setUcDev(list.getC()); - rawData.setTimeDev(obj.getTime().replace("T", " ")); - return rawData; - }).collect(Collectors.toList())); + LocalDateTime localDateTime = DetectionUtil.timeFormat(devDataList.get(i).getTime(), DetectionUtil.FORMATTER); + rawData.setTimeDev(localDateTime.format(dtf)); + } channelData.setDataList(dataList); channelDataList.add(channelData); }); @@ -1519,8 +1745,7 @@ public class SocketContrastResponseService { data.add(alignDataVO); }); - webSend.setData(JSON.toJSONString(data, SerializerFeature.WriteMapNullValue)); - WebServiceManager.sendMsg(userPageId, JSON.toJSONString(webSend)); + return JSON.toJSONString(data, SerializerFeature.WriteMapNullValue); } /** @@ -1543,7 +1768,7 @@ public class SocketContrastResponseService { PreDetection.MonitorListDTO monitorListDTO = FormalTestManager.monitorMap.get(devMonitorId); List devDataList = BeanUtil.copyToList(FormalTestManager.devDataMap.get(devMonitorId), DevData.class); channelDevDataList.sort(Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); - + devDataList.sort(Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); HashMap sheet = new HashMap<>(); ExportParams exportParams = new ExportParams(); String standardDevName = FormalTestManager.devNameMapComm.get(ip); @@ -1553,58 +1778,58 @@ public class SocketContrastResponseService { List dataList = new ArrayList<>(); boolean isStar = DetectionCodeEnum.STAR.getCode().equals(monitorListDTO.getConnection()); boolean isDelta = DetectionCodeEnum.DELTA.getCode().equals(monitorListDTO.getConnection()); - channelDevDataList.stream().forEach(obj -> { + for (int i = 0; i < channelDevDataList.size(); i++) { DevData.SqlDataDTO.ListDTO list1 = null; DevData.SqlDataDTO sqlDataDTO1 = null; if (isStar) { - sqlDataDTO1 = obj.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.VRMS.getCode())).findFirst().orElse(null); + sqlDataDTO1 = channelDevDataList.get(i).getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.VRMS.getCode())).findFirst().orElse(null); } if (isDelta) { - sqlDataDTO1 = obj.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.PVRMS.getCode())).findFirst().orElse(null); + sqlDataDTO1 = channelDevDataList.get(i).getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.PVRMS.getCode())).findFirst().orElse(null); } if (ObjectUtil.isNotNull(sqlDataDTO1)) { list1 = sqlDataDTO1.getList(); } AlignDataExcel alignDataExcel = new AlignDataExcel(); - LocalDateTime localDateTime = DetectionUtil.timeFormat(obj.getTime(), DetectionUtil.FORMATTER); + LocalDateTime localDateTime = DetectionUtil.timeFormat(channelDevDataList.get(i).getTime(), DetectionUtil.FORMATTER); alignDataExcel.setTimeStdDev(localDateTime.format(dtf)); alignDataExcel.setUaStdDev(list1.getA()); alignDataExcel.setUbStdDev(list1.getB()); alignDataExcel.setUcStdDev(list1.getC()); - DevData devData = devDataList.stream().filter(obj1 -> DetectionUtil.isAlignData(obj1, obj)).findFirst().orElse(null); + DevData devData = devDataList.get(i); if (ObjectUtil.isNotNull(devData)) { DevData.SqlDataDTO.ListDTO list2 = null; DevData.SqlDataDTO sqlDataDTO2 = null; if (isStar) { - sqlDataDTO2 = obj.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.VRMS.getCode())).findFirst().orElse(null); + sqlDataDTO2 = devData.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.VRMS.getCode())).findFirst().orElse(null); } if (isDelta) { - sqlDataDTO2 = obj.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.PVRMS.getCode())).findFirst().orElse(null); + sqlDataDTO2 = devData.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.PVRMS.getCode())).findFirst().orElse(null); } if (ObjectUtil.isNotNull(sqlDataDTO2)) { list2 = sqlDataDTO2.getList(); } - localDateTime = DetectionUtil.timeFormat(devData.getTime(), DetectionUtil.FORMATTER); - alignDataExcel.setTimeDev(localDateTime.format(dtf)); alignDataExcel.setUaDev(list2.getA()); alignDataExcel.setUbDev(list2.getB()); alignDataExcel.setUcDev(list2.getC()); - devDataList.remove(devData); + localDateTime = DetectionUtil.timeFormat(devData.getTime(), DetectionUtil.FORMATTER); + alignDataExcel.setTimeDev(localDateTime.format(dtf)); } dataList.add(alignDataExcel); - }); - devDataList.sort(Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); - devDataList.stream().forEach(obj -> { + } + + for (int i = channelDevDataList.size(); i < devDataList.size(); i++) { AlignDataExcel alignDataExcel = new AlignDataExcel(); - DevData.SqlDataDTO.ListDTO list2 = obj.getSqlData().get(0).getList(); - alignDataExcel.setTimeDev(obj.getTime().replace("T", " ")); + DevData.SqlDataDTO.ListDTO list2 = devDataList.get(i).getSqlData().get(0).getList(); alignDataExcel.setUaDev(list2.getA()); alignDataExcel.setUbDev(list2.getB()); alignDataExcel.setUcDev(list2.getC()); - dataList.add(alignDataExcel); - }); + LocalDateTime localDateTime = DetectionUtil.timeFormat(devDataList.get(i).getTime(), DetectionUtil.FORMATTER); + alignDataExcel.setTimeDev(localDateTime.format(dtf)); + dataList.add(alignDataExcel); + } sheet.put("data", dataList); sheet.put("entity", AlignDataExcel.class); sheetsList.add(sheet); @@ -1623,28 +1848,31 @@ public class SocketContrastResponseService { */ private boolean modelCheck(PreDetectionParam param, Map> dataMap, PreDetection.MonitorListDTO monitorListDTO, boolean isDev) { AtomicBoolean flag = new AtomicBoolean(true); + DetectionCodeEnum prefixEnum = this.getPrefixEnum(); dataMap.forEach((k, v) -> { v.stream().forEach(devData1 -> { - List descList = devData1.getSqlData().stream().map(obj -> DetectionCodeEnum.REAL_PREFIX.getCode() + obj.getDesc()).collect(Collectors.toList()); - descList.addAll(devData1.getSqlDataHarm().stream().map(obj -> DetectionCodeEnum.REAL_PREFIX.getCode() + obj.getDesc()).collect(Collectors.toList())); + List descList = devData1.getSqlData().stream().map(obj -> prefixEnum.getCode() + obj.getDesc()).collect(Collectors.toList()); + descList.addAll(devData1.getSqlDataHarm().stream().map(obj -> prefixEnum.getCode() + obj.getDesc()).collect(Collectors.toList())); SocketDataMsg webSend = new SocketDataMsg(); webSend.setRequestId(SourceOperateCodeEnum.YJC_MXYZXJY.getValue()); - webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); webSend.setData(k); List allTestItem = this.getAllDataType(); + if (allTestItem.contains(prefixEnum.getCode() + DetectionCodeEnum.PST.getCode())) { + allTestItem.remove(prefixEnum.getCode() + DetectionCodeEnum.PST.getCode()); + } if (DetectionCodeEnum.STAR.getCode().equals(monitorListDTO.getConnection())) { // 移除相关线电压测试项 - allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PVRMS.getCode()); - allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PU1.getCode()); - allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PV2_50.getCode()); - allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PSV_1_49.getCode()); + allTestItem.remove(prefixEnum.getCode() + DetectionCodeEnum.PVRMS.getCode()); + allTestItem.remove(prefixEnum.getCode() + DetectionCodeEnum.PU1.getCode()); + allTestItem.remove(prefixEnum.getCode() + DetectionCodeEnum.PV2_50.getCode()); + allTestItem.remove(prefixEnum.getCode() + DetectionCodeEnum.PSV_1_49.getCode()); } if (DetectionCodeEnum.DELTA.getCode().equals(monitorListDTO.getConnection())) { // 移除相关相电压测试项 - allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.VRMS.getCode()); - allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.U1.getCode()); - allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.V2_50.getCode()); - allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.SV_1_49.getCode()); + allTestItem.remove(prefixEnum.getCode() + DetectionCodeEnum.VRMS.getCode()); + allTestItem.remove(prefixEnum.getCode() + DetectionCodeEnum.U1.getCode()); + allTestItem.remove(prefixEnum.getCode() + DetectionCodeEnum.V2_50.getCode()); + allTestItem.remove(prefixEnum.getCode() + DetectionCodeEnum.SV_1_49.getCode()); // 如果是在是没有线电压谐波含有率、线电压间谐波含有率,勉强使其通过 String ip = k.split(CnSocketUtil.SPLIT_TAG)[0]; @@ -1656,10 +1884,10 @@ public class SocketContrastResponseService { } if (ObjectUtil.isNotNull(preDetection)) { if (preDetection.getUsePhaseIndex() == 1) { - allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PVRMS.getCode()); - allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PU1.getCode()); - allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PV2_50.getCode()); - allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PSV_1_49.getCode()); + allTestItem.remove(prefixEnum.getCode() + DetectionCodeEnum.PVRMS.getCode()); + allTestItem.remove(prefixEnum.getCode() + DetectionCodeEnum.PU1.getCode()); + allTestItem.remove(prefixEnum.getCode() + DetectionCodeEnum.PV2_50.getCode()); + allTestItem.remove(prefixEnum.getCode() + DetectionCodeEnum.PSV_1_49.getCode()); } } } @@ -1672,7 +1900,7 @@ public class SocketContrastResponseService { // 错误信息 allTestItem.removeAll(descList); String appendMsg = allTestItem.stream().map(obj -> { - String s = obj.replace(DetectionCodeEnum.REAL_PREFIX.getCode(), ""); + String s = obj.replace(prefixEnum.getCode(), ""); DetectionCodeEnum anEnum = DetectionCodeEnum.getDetectionCodeByCode(s); return anEnum.getMessage(); }).reduce((a, b) -> a + "、" + b).get(); @@ -1697,7 +1925,7 @@ public class SocketContrastResponseService { * @param num 对齐的组数 * @return 返回一个List集合,集合中仅有2个元素。下标为0的元素为被检设备数据,下标为1的元素为其一一对齐的标准设备数据 */ - private List> getSingleMonitorAlignData(List devDataList, List standardDevDataList, Integer num) { + private List> getSingleMonitorAlignData(List devDataList, List standardDevDataList, int num, int type) { List> result = new ArrayList<>(); List alignDevData = new ArrayList<>(); @@ -1709,7 +1937,7 @@ public class SocketContrastResponseService { break; } for (; j < devDataList.size(); j++) { - if (DetectionUtil.isAlignData(devDataList.get(j), standardDevDataList.get(i))) { + if (DetectionUtil.isAlignData(devDataList.get(j), standardDevDataList.get(i), type)) { alignDevData.add(devDataList.get(j)); alignStdDevData.add(standardDevDataList.get(i)); jStart = j + 1; @@ -1727,39 +1955,6 @@ public class SocketContrastResponseService { return result; } - /** - * 单个检测点实时数据对齐校验 - * - * @param devDataList 被检设备数据(已经按照时间戳从小到大排过序) - * @param standardDevDataList 标准设备数据(已经按照时间戳从小到大排过序) - * @return true:对齐成功;false:对齐失败 - */ - private boolean singleMonitorAlignCheck(List devDataList, List standardDevDataList) { - if (standardDevDataList.size() >= 5 && devDataList.size() >= 5) { - int count = 0; - - int jStart = 0; - for (int i = 0; i < standardDevDataList.size(); i++) { - int j = jStart; - if (j >= devDataList.size()) { - break; - } - for (; j < devDataList.size(); j++) { - if (DetectionUtil.isAlignData(devDataList.get(j), standardDevDataList.get(i))) { - count++; - jStart = j + 1; - break; - } - } - if (count >= 5) { - break; - } - } - return count >= 5; - } - return false; - } - /** * 单个检测点相序校验 * @@ -2058,7 +2253,7 @@ public class SocketContrastResponseService { * @param numMap 第几次监测 key为被检设备监测点id,value为第几次监测 * @param code 表后缀code */ - private void baseDataInsert(boolean isStdDev, Integer waveNum, DataSourceEnum dataType, List devDataList, Map numMap, String code) { + private void baseDataInsert(boolean isStdDev, Integer waveNum, DataSourceEnum dataType, List devDataList, Map numMap, DetectionCodeEnum prefixEnum, String code) { System.out.println("原始数据插入数据库开始执行========================================="); List contrastNonHarmonicResults = new ArrayList<>(); List contrastHarmonicResults = new ArrayList<>(); @@ -2103,7 +2298,7 @@ public class SocketContrastResponseService { ContrastNonHarmonicResult adNonHarmonicResult = new ContrastNonHarmonicResult(); adNonHarmonicResult.setTimeId(localDateTime); adNonHarmonicResult.setNum(numMap.get(temId)); - adNonHarmonicResult.setAdType(FormalTestManager.testItemMap.get(DetectionCodeEnum.REAL_PREFIX.getCode() + sqlDataDTO.getDesc())); + adNonHarmonicResult.setAdType(FormalTestManager.testItemMap.get(prefixEnum.getCode() + sqlDataDTO.getDesc())); adNonHarmonicResult.setDataType(dataType.getValue()); if (isStdDev) { adNonHarmonicResult.setDevMonitorId(FormalTestManager.pairsIdMap.inverse().get(temId)); @@ -2151,7 +2346,7 @@ public class SocketContrastResponseService { ContrastHarmonicResult adHarmonicResult = new ContrastHarmonicResult(); adHarmonicResult.setTimeId(localDateTime); adHarmonicResult.setNum(numMap.get(temId)); - adHarmonicResult.setAdType(FormalTestManager.testItemMap.get(DetectionCodeEnum.REAL_PREFIX.getCode() + sqlDataDTO.getDesc())); + adHarmonicResult.setAdType(FormalTestManager.testItemMap.get(prefixEnum.getCode() + sqlDataDTO.getDesc())); adHarmonicResult.setDataType(dataType.getValue()); if (isStdDev) { adHarmonicResult.setDevMonitorId(FormalTestManager.pairsIdMap.inverse().get(temId)); @@ -2293,47 +2488,140 @@ public class SocketContrastResponseService { SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); } - private void sendModelDeal(String s) { + private void sendModelDeal(String s, List allDataType) { SocketMsg socketMsg = new SocketMsg<>(); socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue()); - socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); + socketMsg.setOperateCode(this.getRequestOperateCode().getValue()); DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam(); phaseSequenceParam.setMoniterIdList(Arrays.asList(FormalTestManager.monitorMap.keySet().toArray(new String[FormalTestManager.monitorMap.size()]))); - phaseSequenceParam.setDataType(this.getAllDataType()); + phaseSequenceParam.setDataType(allDataType); phaseSequenceParam.setReadCount(1); phaseSequenceParam.setIgnoreCount(1); // 刚一开始实时数据申请后,第一组数据为空数据,忽略掉 socketMsg.setData(JSON.toJSONString(phaseSequenceParam)); FormalTestManager.currentStep = SourceOperateCodeEnum.YJC_MXYZXJY; SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); - // 实时数据开始计时 - SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); + + // 开始计时 + this.resetTimer(); } - private void sendXu(String s) { + private void sendAlignData(String s, SourceOperateCodeEnum requestOperateCode) { SocketMsg socketMsg = new SocketMsg<>(); socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue()); - socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); + socketMsg.setOperateCode(requestOperateCode.getValue()); + DetectionCodeEnum prefixEnum = this.getPrefixEnum(); DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam(); phaseSequenceParam.setMoniterIdList(Arrays.asList(FormalTestManager.monitorMap.keySet().toArray(new String[FormalTestManager.monitorMap.size()]))); - phaseSequenceParam.setDataType(Arrays.asList( - DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.VRMS.getCode(), - DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PVRMS.getCode(), - DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.VA.getCode(), - DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.IA.getCode(), - DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.U1A.getCode(), - DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PU1A.getCode(), - DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I1A.getCode(), - DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.IRMS.getCode(), - DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.V_UNBAN.getCode(), - DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I_UNBAN.getCode())); - phaseSequenceParam.setReadCount(this.getMaxReadCount(1)); + phaseSequenceParam.setDataType(Arrays.asList(prefixEnum.getCode() + DetectionCodeEnum.VRMS.getCode(), prefixEnum.getCode() + DetectionCodeEnum.PVRMS.getCode())); + + int targetCount = 5; + if (ObjectUtil.isNotNull(FormalTestManager.nonWaveDataSourceEnum)) { + if (FormalTestManager.nonWaveDataSourceEnum != DataSourceEnum.REAL_DATA) { + targetCount = 2; + } + } + phaseSequenceParam.setReadCount(this.getReadCount(targetCount)); phaseSequenceParam.setIgnoreCount(0); socketMsg.setData(JSON.toJSONString(phaseSequenceParam)); SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); } - private List> analyzeWaveFile(WaveResultDTO devWaveResultDTO, WaveResultDTO stdDevWaveResultDTO, PreDetection.MonitorListDTO monitorListDTO, String devMonitorId, String stdDevMonitorId, List adTypeCodeList) { + /** + * 获取初始化operateCode + * + * @return + */ + private SourceOperateCodeEnum getInitOperateCode() { + if (ObjectUtil.isNotNull(FormalTestManager.nonWaveDataSourceEnum)) { + if (FormalTestManager.nonWaveDataSourceEnum == DataSourceEnum.REAL_DATA) { + return SourceOperateCodeEnum.DEV_INIT_GATHER_02; + } else { + return SourceOperateCodeEnum.DEV_INIT_GATHER_01; + } + } else { + if (FormalTestManager.isWaveCheck) { + return SourceOperateCodeEnum.DEV_INIT_GATHER_03; + } + } + return null; + } + + /** + * 获取申请operateCode + * + * @return + */ + private SourceOperateCodeEnum getRequestOperateCode() { + if (ObjectUtil.isNotNull(FormalTestManager.nonWaveDataSourceEnum)) { + if (FormalTestManager.nonWaveDataSourceEnum == DataSourceEnum.REAL_DATA) { + return SourceOperateCodeEnum.DEV_DATA_REQUEST_02; + } else { + return SourceOperateCodeEnum.DEV_DATA_REQUEST_01; + } + } else { + if (FormalTestManager.isWaveCheck) { + return SourceOperateCodeEnum.DEV_DATA_REQUEST_02; + } + } + return null; + } + + /** + * 获取退出operateCode + * + * @return + */ + private SourceOperateCodeEnum getQuitOperateCode() { + if (ObjectUtil.isNotNull(FormalTestManager.nonWaveDataSourceEnum)) { + if (FormalTestManager.nonWaveDataSourceEnum == DataSourceEnum.REAL_DATA) { + return SourceOperateCodeEnum.QUIT_INIT_02; + } else { + return SourceOperateCodeEnum.QUIT_INIT_01; + } + } else { + if (FormalTestManager.isWaveCheck) { + return SourceOperateCodeEnum.QUIT_INIT_02; + } + } + return null; + } + + /** + * 重置超时时间 + */ + private void resetTimer() { + if (ObjectUtil.isNotNull(FormalTestManager.nonWaveDataSourceEnum)) { + SocketManager.contrastClockMap.put(FormalTestManager.nonWaveDataSourceEnum, 0L); + } + } + + private void sendXu(String s) { + SocketMsg socketMsg = new SocketMsg<>(); + socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue()); + socketMsg.setOperateCode(this.getRequestOperateCode().getValue()); + DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam(); + phaseSequenceParam.setMoniterIdList(Arrays.asList(FormalTestManager.monitorMap.keySet().toArray(new String[FormalTestManager.monitorMap.size()]))); + DetectionCodeEnum prefixEnum = this.getPrefixEnum(); + phaseSequenceParam.setDataType(Arrays.asList( + prefixEnum.getCode() + DetectionCodeEnum.VRMS.getCode(), + prefixEnum.getCode() + DetectionCodeEnum.PVRMS.getCode(), + prefixEnum.getCode() + DetectionCodeEnum.VA.getCode(), + prefixEnum.getCode() + DetectionCodeEnum.IA.getCode(), + prefixEnum.getCode() + DetectionCodeEnum.U1A.getCode(), + prefixEnum.getCode() + DetectionCodeEnum.PU1A.getCode(), + prefixEnum.getCode() + DetectionCodeEnum.I1A.getCode(), + prefixEnum.getCode() + DetectionCodeEnum.IRMS.getCode(), + prefixEnum.getCode() + DetectionCodeEnum.V_UNBAN.getCode(), + prefixEnum.getCode() + DetectionCodeEnum.I_UNBAN.getCode())); + phaseSequenceParam.setReadCount(this.getReadCount(1)); + phaseSequenceParam.setIgnoreCount(0); + socketMsg.setData(JSON.toJSONString(phaseSequenceParam)); + SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); + } + + private List> analyzeWaveFile(WaveResultDTO devWaveResultDTO, WaveResultDTO stdDevWaveResultDTO, PreDetection.MonitorListDTO + monitorListDTO, String devMonitorId, String stdDevMonitorId, List adTypeCodeList) { String stdDevCfgPath = stdDevWaveResultDTO.getPath().replaceAll("\\\\", "/").replace(".CFG", ".cfg"); String devCfgPath = devWaveResultDTO.getPath().replaceAll("\\\\", "/").replace(".CFG", ".cfg"); @@ -2382,7 +2670,8 @@ public class SocketContrastResponseService { * @param targetDataList 标准设备数据 * @return 下标为0的是被检设备数据,下标为1的是标准设备数据 */ - private List> getDevData(List sourceDataList, List targetDataList, String devMonitorId, String stdDevMonitorId, List adTypeCodeList) { + private List> getDevData(List sourceDataList, List targetDataList, String devMonitorId, String + stdDevMonitorId, List adTypeCodeList) { List> result = new ArrayList<>(); List devDataList = new ArrayList<>(); List stdDevDataList = new ArrayList<>(); diff --git a/detection/src/main/java/com/njcn/gather/detection/handler/SocketDevResponseService.java b/detection/src/main/java/com/njcn/gather/detection/handler/SocketDevResponseService.java index 64152679..8443ae97 100644 --- a/detection/src/main/java/com/njcn/gather/detection/handler/SocketDevResponseService.java +++ b/detection/src/main/java/com/njcn/gather/detection/handler/SocketDevResponseService.java @@ -849,7 +849,7 @@ public class SocketDevResponseService { boolean isContinue = true; List descList = icdCheckData.getResultData().stream().map( obj -> { - if (DetectionCodeEnum.MAG.getCode().equals(obj.getDesc()) || DetectionCodeEnum.DUR.getCode().equals(obj.getDesc())) { + if (DetectionCodeEnum.MAG.getCode().equals(obj.getDesc()) || DetectionCodeEnum.DUR.getCode().equals(obj.getDesc()) || DetectionCodeEnum.PST.getCode().equals(obj.getDesc())) { return DetectionCodeEnum.AVG_PREFIX.getCode() + obj.getDesc(); } else { return DetectionCodeEnum.REAL_PREFIX.getCode() + obj.getDesc(); @@ -1371,7 +1371,7 @@ public class SocketDevResponseService { checkDataParam.setIsValueTypeName(false); List valueType = iPqScriptCheckDataService.getValueType(checkDataParam); - iPqDevService.updateResult( param.getDevIds(), valueType, param.getCode(), param.getUserId(), param.getTemperature(), param.getHumidity()); + iPqDevService.updateResult(param.getDevIds(), valueType, param.getCode(), param.getUserId(), param.getTemperature(), param.getHumidity()); CnSocketUtil.quitSend(param); } successComm.clear(); diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/enums/DetectionCodeEnum.java b/detection/src/main/java/com/njcn/gather/detection/pojo/enums/DetectionCodeEnum.java index 56f6ceee..5a537de6 100644 --- a/detection/src/main/java/com/njcn/gather/detection/pojo/enums/DetectionCodeEnum.java +++ b/detection/src/main/java/com/njcn/gather/detection/pojo/enums/DetectionCodeEnum.java @@ -50,7 +50,10 @@ public enum DetectionCodeEnum { DELTA("Delta", "角型接线"), REAL_PREFIX("real$", "实时数据前缀"), - AVG_PREFIX("avg$", "统计数据前缀"); + CP_95_PREFIX("cp95$", "分钟统计-CP95值数据前缀"), + MAX_PREFIX("max$", "分钟统计-最大值数据前缀"), + MIN_PREFIX("min$", "分钟统计-最小值数据前缀"), + AVG_PREFIX("avg$", "分钟统计-平均值数据前缀"); private final String code; private final String message; diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceResponseCodeEnum.java b/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceResponseCodeEnum.java index 8d24dcd2..b7ef7116 100644 --- a/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceResponseCodeEnum.java +++ b/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceResponseCodeEnum.java @@ -42,7 +42,8 @@ public enum SourceResponseCodeEnum { FAIL(25002,"失败"), ALL_FAIL(25003,"校验失败"), RECEIVE_DATA_TIME_OUT(25004,"接收数据超时"), - REAL_DATA_CHECK_FAIL(25005,"实时数据校验失败") + REAL_DATA_CHECK_FAIL(25005,"实时数据校验失败"), + STATISTICS_DATA_CHECK_FAIL(25006,"统计数据校验失败") 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 6f389a28..ff8cc712 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 @@ -1508,9 +1508,10 @@ public class DetectionServiceImpl { * @param numMap 第几次检测 key为设备id_通道号,value为第几次检测 * @param code 结果表code * @param waveNum 第几次录波 + * @param dataSourceEnum 数据源类型 * @return key为被检设备ip_通道号、value为是否合格(1合格 2不合格 4无法处理) */ - public List processing(List devDataList, List standardDevDataList, Map parsIp, Map devIdMapComm, List testItemCodeList, String errorSysId, DictDataEnum dataRule, Map numMap, String code, Integer waveNum) { + public List processing(List devDataList, List standardDevDataList, Map parsIp, Map devIdMapComm, List testItemCodeList, String errorSysId, DictDataEnum dataRule, Map numMap, String code, Integer waveNum, DataSourceEnum dataSourceEnum) { Map> devDataMap = devDataList.stream().collect(Collectors.groupingBy(obj -> obj.getId().split("_")[0])); Map> standardDevDataMap = standardDevDataList.stream().collect(Collectors.groupingBy(DevData::getId)); @@ -1525,7 +1526,7 @@ public class DetectionServiceImpl { Map> chnResultMap = new HashMap<>(); devMonitorMap.forEach((devMoniterId, devData) -> { String[] split = devMoniterId.split(CnSocketUtil.SPLIT_TAG); - Map map = singleMonitorProcessing(devData, standardDevDataMap.get(parsIp.get(devMoniterId)), devIdMapComm, testItemCodeList, errorSysId, dataRule, numMap.get(devId + CnSocketUtil.SPLIT_TAG + split[1]), code, waveNum); + Map map = singleMonitorProcessing(devData, standardDevDataMap.get(parsIp.get(devMoniterId)), devIdMapComm, testItemCodeList, errorSysId, dataRule, numMap.get(devId + CnSocketUtil.SPLIT_TAG + split[1]), code, waveNum, dataSourceEnum); map.forEach((key, value) -> { DevLineTestResult devLineTestResult = new DevLineTestResult(); devLineTestResult.setDeviceId(devId); @@ -1560,9 +1561,10 @@ public class DetectionServiceImpl { * @param num 第几次检测 * @param code 结果表code * @param waveNum 第几次录波 + * @param dataSourceEnum 数据源类型 * @return */ - private Map singleMonitorProcessing(List devDataList, List standardDevDataList, Map devIdMapComm, List testItemCodeList, String errorSysId, DictDataEnum dataRule, Integer num, String code, Integer waveNum) { + private Map singleMonitorProcessing(List devDataList, List standardDevDataList, Map devIdMapComm, List testItemCodeList, String errorSysId, DictDataEnum dataRule, Integer num, String code, Integer waveNum, DataSourceEnum dataSourceEnum) { Map resultMap = new HashMap<>(); if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList) && CollUtil.isNotEmpty(testItemCodeList)) { SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); @@ -1610,12 +1612,12 @@ public class DetectionServiceImpl { sqlData.setList(listDTO); })); } - resultMap.put(PowerIndexEnum.FREQ.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fHz, DetectionCodeEnum.FREQ.getCode(), dataRule, num, code, oneConfig.getScale(), waveNum)); + resultMap.put(PowerIndexEnum.FREQ.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fHz, DetectionCodeEnum.FREQ.getCode(), dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum)); break; case VRMS: case PVRMS: // 如果是角型接法且存在角型接法的一些指标,则不进行使用角型接线的指标。反之,则使用相别的指标。 - resultMap.put(PowerIndexEnum.V.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fUn, (isDelta && isExitDelta ? DetectionCodeEnum.PVRMS.getCode() : DetectionCodeEnum.VRMS.getCode()), dataRule, num, code, oneConfig.getScale(), waveNum)); + resultMap.put(PowerIndexEnum.V.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fUn, (isDelta && isExitDelta ? DetectionCodeEnum.PVRMS.getCode() : DetectionCodeEnum.VRMS.getCode()), dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum)); break; case IRMS: // if (ObjectUtil.isNotNull(waveNum) && (waveNum.equals(2) || waveNum.equals(5))) { @@ -1626,30 +1628,33 @@ public class DetectionServiceImpl { // sqlData.setList(listDTO); // })); // } - resultMap.put(PowerIndexEnum.I.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fIn, DetectionCodeEnum.IRMS.getCode(), dataRule, num, code, oneConfig.getScale(), waveNum)); + resultMap.put(PowerIndexEnum.I.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fIn, DetectionCodeEnum.IRMS.getCode(), dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum)); break; case V_UNBAN: - resultMap.put(PowerIndexEnum.IMBV.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, false, fUn, DetectionCodeEnum.V_UNBAN.getCode(), dataRule, num, code, oneConfig.getScale(), waveNum)); + resultMap.put(PowerIndexEnum.IMBV.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, false, fUn, DetectionCodeEnum.V_UNBAN.getCode(), dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum)); break; case I_UNBAN: - resultMap.put(PowerIndexEnum.IMBA.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, false, fIn, DetectionCodeEnum.I_UNBAN.getCode(), dataRule, num, code, oneConfig.getScale(), waveNum)); + resultMap.put(PowerIndexEnum.IMBA.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, false, fIn, DetectionCodeEnum.I_UNBAN.getCode(), dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum)); break; case V2_50: case PV2_50: - resultMap.put(PowerIndexEnum.HV.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn, HARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum)); + resultMap.put(PowerIndexEnum.HV.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn, HARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum)); break; case I2_50: - resultMap.put(PowerIndexEnum.HI.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, I, fIn, HARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum)); + resultMap.put(PowerIndexEnum.HI.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, I, fIn, HARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum)); break; case P2_50: - resultMap.put(PowerIndexEnum.HP.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, HP, fUn * fIn, HARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum)); + resultMap.put(PowerIndexEnum.HP.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, HP, fUn * fIn, HARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum)); break; case SV_1_49: case PSV_1_49: - resultMap.put(PowerIndexEnum.HSV.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn, INHARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum)); + resultMap.put(PowerIndexEnum.HSV.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn, INHARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum)); break; case SI_1_49: - resultMap.put(PowerIndexEnum.HSI.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, I, fIn, INHARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum)); + resultMap.put(PowerIndexEnum.HSI.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, I, fIn, INHARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum)); + break; + case PST: + resultMap.put(PowerIndexEnum.PST.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fUn , DetectionCodeEnum.PST.getCode(), dataRule, num, code, oneConfig.getScale(), waveNum, dataSourceEnum)); break; case UNKNOWN_ERROR: break; @@ -1708,6 +1713,7 @@ public class DetectionServiceImpl { * @param code 结果表code * @param scale 小数点位数 * @param waveNum 第几次录波 + * @param dataSourceEnum 数据源类型 * @return */ private Integer isQualified(List devDataList, @@ -1721,12 +1727,13 @@ public class DetectionServiceImpl { Integer num, String code, Integer scale, - Integer waveNum) { + Integer waveNum, + DataSourceEnum dataSourceEnum) { List info = new ArrayList<>(); if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList) && CollUtil.isNotEmpty(errSysDtls)) { Map>> map = devListMap(devDataList, standardDevDataList, desc, dataRule); - if(ObjectUtil.isNull(map)){ + if (ObjectUtil.isNull(map)) { return 4; } ContrastNonHarmonicResult result = new ContrastNonHarmonicResult(); @@ -1738,7 +1745,7 @@ public class DetectionServiceImpl { result.setDevMonitorId(devIdMapComm.get(split1[0]) + "_" + split1[1]); result.setStdDevMonitorId(devIdMapComm.get(split2[0]) + "_" + split2[1]); result.setAdType(errSysDtls.get(0).getScriptType()); - result.setDataType(DataSourceEnum.REAL_DATA.getValue()); + result.setDataType(dataSourceEnum.getValue()); if (ObjectUtil.isNotNull(waveNum)) { result.setDataType(DataSourceEnum.WAVE_DATA.getValue()); } @@ -1793,6 +1800,7 @@ public class DetectionServiceImpl { * @param code 结果表code * @param scale 小数点位数 * @param waveNum 第几次录波 + * @param dataSourceEnum 数据源类型 * @return */ public Integer isHarmQualified(List devDataList, @@ -1807,7 +1815,8 @@ public class DetectionServiceImpl { Integer num, String code, Integer scale, - Integer waveNum) { + Integer waveNum, + DataSourceEnum dataSourceEnum) { List info = new ArrayList<>(); if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList) && CollUtil.isNotEmpty(errSysDtls)) { String fundCode = ""; @@ -1852,14 +1861,14 @@ public class DetectionServiceImpl { result.setDevMonitorId(devIdMapComm.get(split1[0]) + "_" + split1[1]); result.setStdDevMonitorId(devIdMapComm.get(split2[0]) + "_" + split2[1]); result.setAdType(errSysDtls.get(0).getScriptType()); - result.setDataType(DataSourceEnum.REAL_DATA.getValue()); + result.setDataType(dataSourceEnum.getValue()); if (ObjectUtil.isNotNull(waveNum)) { result.setDataType(DataSourceEnum.WAVE_DATA.getValue()); } List integerBooleanA = harmRangeComparison(devMap.get(TYPE_A).get(0), devMap.get(TYPE_A).get(1), errSysDtls, type, fData, scale, dataRule); - List integerBooleanB = harmRangeComparison(devMap.get(TYPE_B).get(0), devMap.get(TYPE_A).get(1), errSysDtls, type, fData, scale, dataRule); - List integerBooleanC = harmRangeComparison(devMap.get(TYPE_C).get(0), devMap.get(TYPE_A).get(1), errSysDtls, type, fData, scale, dataRule); + List integerBooleanB = harmRangeComparison(devMap.get(TYPE_B).get(0), devMap.get(TYPE_B).get(1), errSysDtls, type, fData, scale, dataRule); + List integerBooleanC = harmRangeComparison(devMap.get(TYPE_C).get(0), devMap.get(TYPE_C).get(1), errSysDtls, type, fData, scale, dataRule); reflectHarmonic(true, "a", integerBooleanA, result, harmonicFlag); reflectHarmonic(true, "b", integerBooleanB, result, harmonicFlag); reflectHarmonic(true, "c", integerBooleanC, result, harmonicFlag); @@ -1906,7 +1915,7 @@ public class DetectionServiceImpl { List standardDevList = standardDevSqlData.stream().filter(j -> finalDesc.equals(j.getDesc())) .map(DevData.SqlDataDTO::getList).collect(Collectors.toList()); - if(CollUtil.isEmpty(devList) || CollUtil.isEmpty(standardDevList)){ + if (CollUtil.isEmpty(devList) || CollUtil.isEmpty(standardDevList)) { return null; } 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 b2a36d49..f1e2b1bf 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 @@ -25,6 +25,7 @@ import com.njcn.gather.detection.util.socket.websocket.WebServiceManager; import com.njcn.gather.device.pojo.po.PqDev; import com.njcn.gather.device.pojo.vo.PreDetection; import com.njcn.gather.device.service.IPqDevService; +import com.njcn.gather.plan.pojo.enums.DataSourceEnum; import com.njcn.gather.plan.pojo.po.AdPlan; import com.njcn.gather.plan.pojo.po.AdPlanSource; import com.njcn.gather.plan.service.IAdPlanService; @@ -385,16 +386,15 @@ public class PreDetectionServiceImpl implements PreDetectionService { String jsonString = JSON.toJSONString(map); SocketMsg socketMsg = new SocketMsg<>(); socketMsg.setRequestId(SourceOperateCodeEnum.YJC_SBTXJY.getValue()); -// AdPlan currentTestPlan = FormalTestManager.currentTestPlan; -// String[] datasource = currentTestPlan.getDatasourceId().split(","); -// if (Arrays.stream(datasource).anyMatch(x -> x.equals(DataSourceEnum.REAL_DATA.getValue()))) { -// socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue()); -// } else if (Arrays.stream(datasource).anyMatch(x -> x.equals(DataSourceEnum.MINUTE_STATISTICS_AVG.getValue()) || x.equals(DataSourceEnum.MINUTE_STATISTICS_MAX.getValue()) || x.equals(DataSourceEnum.MINUTE_STATISTICS_MIN.getValue()) || x.equals(DataSourceEnum.MINUTE_STATISTICS_CP95.getValue()))) { -// -// } else if (Arrays.stream(datasource).anyMatch(x -> x.equals(DataSourceEnum.WAVE_DATA.getValue()))) { -// socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_03.getValue()); -// } - socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue()); + AdPlan currentTestPlan = FormalTestManager.currentTestPlan; + String[] datasource = currentTestPlan.getDatasourceId().split(","); + if (Arrays.stream(datasource).anyMatch(x -> x.equals(DataSourceEnum.REAL_DATA.getValue()))) { + socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue()); + } else if (Arrays.stream(datasource).anyMatch(x -> x.equals(DataSourceEnum.MINUTE_STATISTICS_AVG.getValue()) || x.equals(DataSourceEnum.MINUTE_STATISTICS_MAX.getValue()) || x.equals(DataSourceEnum.MINUTE_STATISTICS_MIN.getValue()) || x.equals(DataSourceEnum.MINUTE_STATISTICS_CP95.getValue()))) { + socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_01.getValue()); + } else if (Arrays.stream(datasource).anyMatch(x -> x.equals(DataSourceEnum.WAVE_DATA.getValue()))) { + socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue()); + } socketMsg.setData(jsonString); PreDetectionParam preDetectionParam = new PreDetectionParam(); preDetectionParam.setUserPageId(param.getLoginName()); diff --git a/detection/src/main/java/com/njcn/gather/detection/util/DetectionUtil.java b/detection/src/main/java/com/njcn/gather/detection/util/DetectionUtil.java index 9ef9145b..03cb9bcb 100644 --- a/detection/src/main/java/com/njcn/gather/detection/util/DetectionUtil.java +++ b/detection/src/main/java/com/njcn/gather/detection/util/DetectionUtil.java @@ -51,6 +51,11 @@ public class DetectionUtil { */ private static final long MILLIS_TO_SECONDS = 1000L; + /** + * 毫秒转分钟的转换因子 + */ + private static final long MILLIS_TO_MINUTES = 1000 * 60L; + /** * 时间对齐判断的容差毫秒数 * 当两个时间戳差值小于此值时,认为时间是对齐的 @@ -123,24 +128,33 @@ public class DetectionUtil { * @param standardDevData 标准设备数据,包含时间戳信息 * @return true表示数据时间对齐,false表示不对齐 */ - public static boolean isAlignData(DevData devData, DevData standardDevData) { + public static boolean isAlignData(DevData devData, DevData standardDevData, int type) { if (ObjectUtil.isNotNull(devData) && ObjectUtil.isNotNull(standardDevData)) { // 获取两个设备数据的时间戳(毫秒) long devMillis = getMillis(devData.getTime()); long standardMillis = getMillis(standardDevData.getTime()); + if (type == 1) { // 实时数据 + // 方式1:将时间戳转换为秒级精度进行比较(处理跨秒边界情况) + BigDecimal devSeconds = BigDecimal.valueOf(devMillis).divide(BigDecimal.valueOf(MILLIS_TO_SECONDS), 0, RoundingMode.HALF_UP); + BigDecimal standardSeconds = BigDecimal.valueOf(standardMillis).divide(BigDecimal.valueOf(MILLIS_TO_SECONDS), 0, RoundingMode.HALF_UP); + if (devSeconds.compareTo(standardSeconds) == 0) { + return true; + } - // 方式1:将时间戳转换为秒级精度进行比较(处理跨秒边界情况) - BigDecimal devSeconds = BigDecimal.valueOf(devMillis).divide(BigDecimal.valueOf(MILLIS_TO_SECONDS), 0, RoundingMode.HALF_UP); - BigDecimal standardSeconds = BigDecimal.valueOf(standardMillis).divide(BigDecimal.valueOf(MILLIS_TO_SECONDS), 0, RoundingMode.HALF_UP); - if (devSeconds.compareTo(standardSeconds) == 0) { - return true; + // 方式2:毫秒级时间差小于容差值也认为是对齐的(处理精确对齐) + if (Math.abs(devMillis - standardMillis) < TIME_ALIGNMENT_TOLERANCE_MS) { + return true; + } } - - // 方式2:毫秒级时间差小于容差值也认为是对齐的(处理精确对齐) - if (Math.abs(devMillis - standardMillis) < TIME_ALIGNMENT_TOLERANCE_MS) { - return true; + if (type == 2) { //统计数据 + BigDecimal devSeconds = BigDecimal.valueOf(devMillis).divide(BigDecimal.valueOf(MILLIS_TO_MINUTES), 0, RoundingMode.HALF_UP); + BigDecimal standardSeconds = BigDecimal.valueOf(standardMillis).divide(BigDecimal.valueOf(MILLIS_TO_MINUTES), 0, RoundingMode.HALF_UP); + if (devSeconds.compareTo(standardSeconds) == 0) { + return true; + } } } + return false; } diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/FormalTestManager.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/FormalTestManager.java index 1e63c405..b016e34d 100644 --- a/detection/src/main/java/com/njcn/gather/detection/util/socket/FormalTestManager.java +++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/FormalTestManager.java @@ -7,6 +7,7 @@ import com.njcn.gather.detection.pojo.po.DevData; import com.njcn.gather.detection.pojo.vo.DevLineTestResult; import com.njcn.gather.device.pojo.enums.PatternEnum; import com.njcn.gather.device.pojo.vo.PreDetection; +import com.njcn.gather.plan.pojo.enums.DataSourceEnum; import com.njcn.gather.plan.pojo.po.AdPlan; import com.njcn.gather.plan.pojo.po.AdPlanTestConfig; import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum; @@ -89,6 +90,17 @@ public class FormalTestManager { */ public static AdPlan currentTestPlan; + /** + * 非录波数据源枚举 + */ + public static DataSourceEnum nonWaveDataSourceEnum; + + + /** + * 统计数据最大超时时间 + */ + public static Long maxTime; + public static AdPlanTestConfig curretntTestPlanConfig; /** @@ -166,4 +178,6 @@ public class FormalTestManager { */ public static ScheduledFuture scheduledFuture; + + public static boolean isWaveCheck; } diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/MsgUtil.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/MsgUtil.java index 2768d5d1..cfb57a09 100644 --- a/detection/src/main/java/com/njcn/gather/detection/util/socket/MsgUtil.java +++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/MsgUtil.java @@ -84,6 +84,15 @@ public class MsgUtil { } } + public static String getMonitorInfo(String monitorId, Map devMap) { + if (StrUtil.isBlank(monitorId)) { + return ""; + } else { + String[] split1 = monitorId.split("_"); + return devMap.get(split1[0]) + CnSocketUtil.SPLIT_TAG + split1[1] + "路\""; + } + } + /** * 获取消息 * diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyContrastClientHandler.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyContrastClientHandler.java index 433d11e8..5c4f830e 100644 --- a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyContrastClientHandler.java +++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyContrastClientHandler.java @@ -1,6 +1,6 @@ package com.njcn.gather.detection.util.socket.cilent; -import com.alibaba.fastjson.JSON; +import cn.hutool.core.util.ObjectUtil; import com.njcn.gather.detection.handler.SocketContrastResponseService; import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum; import com.njcn.gather.detection.pojo.enums.SourceResponseCodeEnum; @@ -60,11 +60,14 @@ public class NettyContrastClientHandler extends SimpleChannelInboundHandler= 60) { - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false); - System.out.println("超时处理-----》" + "实时数据已超时----------------关闭"); - timeoutSend(); + if (!FormalTestManager.isRemoveSocket && ObjectUtil.isNotNull(FormalTestManager.nonWaveDataSourceEnum)) { + long time = SocketManager.contrastClockMap.get(FormalTestManager.nonWaveDataSourceEnum) + 60L; + SocketManager.contrastClockMap.put(FormalTestManager.nonWaveDataSourceEnum, time); + + if (DataSourceEnum.REAL_DATA == FormalTestManager.nonWaveDataSourceEnum) { + if (time >= 60) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, true); + timeoutSend(SourceOperateCodeEnum.QUIT_INIT_02); + } + } else if (time >= FormalTestManager.maxTime) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, true); + timeoutSend(SourceOperateCodeEnum.QUIT_INIT_01); } } - } } } @@ -126,8 +133,9 @@ public class NettyContrastClientHandler extends SimpleChannelInboundHandler newWaveNum = new AtomicReference<>(-1); switch (dataSourceEnum) { - case REAL_DATA: - newMonitorResult = detectionDataDealService.getMonitorResult(monitorId, adTypes, dataSourceEnum.getValue(), num, null, code); - break; case WAVE_DATA: Map waveNumResultMap = detectionDataDealService.getWaveNumResultMap(monitorId, adTypes, num, code); - if(CollUtil.isEmpty(waveNumResultMap)){ + if (CollUtil.isEmpty(waveNumResultMap)) { return true; } waveNumResultMap.forEach((key, value) -> { @@ -169,6 +166,7 @@ public class PqMonitorServiceImpl extends ServiceImpl new LinkedHashMap<>()) - .computeIfAbsent(numOfDataStr, k -> new ArrayList<>()) - .add(phase.toUpperCase() + "相"); + .computeIfAbsent(numOfDataStr, k -> new ArrayList<>()) + .add(phase.toUpperCase() + "相"); } else if ("不符合".equals(resultTemp)) { String numOfDataStr = singlePhaseData.get(ItemReportKeyEnum.NUM_OF_DATA.getKey()); unqualifiedMap.computeIfAbsent(harmNum, k -> new LinkedHashMap<>()) - .computeIfAbsent(numOfDataStr, k -> new ArrayList<>()) - .add(phase.toUpperCase() + "相"); + .computeIfAbsent(numOfDataStr, k -> new ArrayList<>()) + .add(phase.toUpperCase() + "相"); } } } @@ -2035,7 +2033,7 @@ public class ResultServiceImpl implements IResultService { // 生成specialCase描述 String specialCase = generateHarmonicSpecialCase(zeroFilteredMap, unComparableMap, unqualifiedMap, - totalDataPoints, zeroFilteredPoints, isInterHarmonic); + totalDataPoints, zeroFilteredPoints, isInterHarmonic); // 设置检测结果 String overallResult; @@ -2058,6 +2056,7 @@ public class ResultServiceImpl implements IResultService { /** * 判断值是否为零 + * * @param value 字符串值 * @return 是否为零 */ @@ -2075,12 +2074,13 @@ public class ResultServiceImpl implements IResultService { /** * 生成谐波类特殊情况描述 - * @param zeroFilteredMap 双零过滤的次数和相别 - * @param unComparableMap 无法比较的次数和相别 - * @param unqualifiedMap 不符合的次数和相别 - * @param totalDataPoints 总数据点数 + * + * @param zeroFilteredMap 双零过滤的次数和相别 + * @param unComparableMap 无法比较的次数和相别 + * @param unqualifiedMap 不符合的次数和相别 + * @param totalDataPoints 总数据点数 * @param zeroFilteredPoints 双零过滤的数据点数 - * @param isInterHarmonic 是否为间谐波 + * @param isInterHarmonic 是否为间谐波 * @return 特殊情况描述 */ private String generateHarmonicSpecialCase(Map> zeroFilteredMap, @@ -2122,8 +2122,8 @@ public class ResultServiceImpl implements IResultService { List phases = dataEntry.getValue(); String phaseKey = String.join("、", phases); groupedUnComparable.computeIfAbsent(numOfData, k -> new LinkedHashMap<>()) - .computeIfAbsent(phaseKey, k -> new ArrayList<>()) - .add(harmNum); + .computeIfAbsent(phaseKey, k -> new ArrayList<>()) + .add(harmNum); } } @@ -2164,7 +2164,7 @@ public class ResultServiceImpl implements IResultService { harmPhaseDesc = "第" + displayHarmNum + "次谐波" + String.join("、", phases); } groupedByNumOfData.computeIfAbsent(numOfData, k -> new ArrayList<>()) - .add(harmPhaseDesc); + .add(harmPhaseDesc); } } @@ -2176,7 +2176,7 @@ public class ResultServiceImpl implements IResultService { // 合并描述:第4次谐波A相、B相、C相、第32次谐波A相、第44次谐波C相 specialCaseDesc.append(String.join("、", harmPhaseList)); specialCaseDesc.append("收集有效组数为").append(numOfData) - .append("组,误差计算结果不符合误差标准要求。"); + .append("组,误差计算结果不符合误差标准要求。"); } } @@ -2195,7 +2195,8 @@ public class ResultServiceImpl implements IResultService { /** * 获取显示用的谐波次数 - * @param harmNum 原始次数(2-50) + * + * @param harmNum 原始次数(2-50) * @param isInterHarmonic 是否为间谐波 * @return 显示用的次数字符串 */ @@ -2214,7 +2215,8 @@ public class ResultServiceImpl implements IResultService { /** * 格式化谐波次数列表 - * @param harmNumbers 谐波次数列表 + * + * @param harmNumbers 谐波次数列表 * @param isInterHarmonic 是否为间谐波 * @return 格式化的字符串,如"2、3、5"或"2-5、7、9-11"(间谐波为"1.5、2.5、3.5") */ @@ -2401,10 +2403,10 @@ public class ResultServiceImpl implements IResultService { /** * 解析非谐波数据 * - * @param valueJson JSON格式的数据 - * @param phase 相别标识 - * @param numOfData 收集组数 - * @param scriptCode 脚本代码,用于判断是否需要特殊格式化 + * @param valueJson JSON格式的数据 + * @param phase 相别标识 + * @param numOfData 收集组数 + * @param scriptCode 脚本代码,用于判断是否需要特殊格式化 * @param decimalPlaces 小数位数,null则不格式化 * @return 解析后的数据列表 */ @@ -2528,11 +2530,11 @@ public class ResultServiceImpl implements IResultService { /** * 解析谐波相数据 * - * @param jsonData JSON格式的数据 - * @param phase 相别标识 - * @param harmNum 谐波次数 - * @param numOfData 收集组数 - * @param scriptCode 脚本代码,用于判断是否需要特殊格式化 + * @param jsonData JSON格式的数据 + * @param phase 相别标识 + * @param harmNum 谐波次数 + * @param numOfData 收集组数 + * @param scriptCode 脚本代码,用于判断是否需要特殊格式化 * @param decimalPlaces 小数位数,null则不格式化 * @return 解析后的数据列表 */ @@ -3036,13 +3038,35 @@ public class ResultServiceImpl implements IResultService { AdPlan plan = adPlanService.getById(planId); + String dataSourceId = plan.getDatasourceId(); + String[] dataSourceIds = dataSourceId.split(StrUtil.COMMA); + + DataSourceEnum nonWaveDataSourceEnum = DataSourceEnum.REAL_DATA; + for (String ds : dataSourceIds) { + switch (DataSourceEnum.valueOf(ds)) { + case MINUTE_STATISTICS_MIN: + nonWaveDataSourceEnum = DataSourceEnum.MINUTE_STATISTICS_MIN; + break; + case MINUTE_STATISTICS_MAX: + nonWaveDataSourceEnum = DataSourceEnum.MINUTE_STATISTICS_MAX; + break; + case MINUTE_STATISTICS_AVG: + nonWaveDataSourceEnum = DataSourceEnum.MINUTE_STATISTICS_AVG; + break; + case MINUTE_STATISTICS_CP95: + nonWaveDataSourceEnum = DataSourceEnum.MINUTE_STATISTICS_CP95; + break; + } + } + DataSourceEnum finalNonWaveDataSourceEnum = nonWaveDataSourceEnum; + BiMap testItemMap = HashBiMap.create(); List testItemIds = Arrays.asList(plan.getTestItem().split(",")); List dictTreeList = dictTreeService.getDictTreeById(testItemIds); List fatherIdList = dictTreeList.stream().map(DictTree::getId).collect(Collectors.toList()); List childDictTreeList = dictTreeService.listByFatherIds(fatherIdList); if (CollUtil.isNotEmpty(childDictTreeList)) { - List collect1 = SocketContrastResponseService.testItemCodeMap.values().stream().flatMap(Collection::stream).map(x -> x.split("\\$")[1]).collect(Collectors.toList()); + List collect1 = SocketContrastResponseService.testItemCodeMap.values().stream().flatMap(Collection::stream).collect(Collectors.toList()); testItemMap.putAll(childDictTreeList.stream().filter(x -> collect1.contains(x.getCode())).collect(Collectors.toMap(obj -> DetectionCodeEnum.REAL_PREFIX.getCode() + obj.getCode(), obj -> obj.getId()))); } @@ -3067,6 +3091,7 @@ public class ResultServiceImpl implements IResultService { .update(); List adPairList = adPairService.listByDevIds(Arrays.asList(deviceId)); Map> numAdPairsMap = adPairList.stream().collect(Collectors.groupingBy(AdPair::getNum, Collectors.toList())); + numAdPairsMap.forEach((num, pairList) -> { BiMap parsIp = HashBiMap.create(); BiMap parsId = HashBiMap.create(); @@ -3092,11 +3117,11 @@ public class ResultServiceImpl implements IResultService { List devData = contrastToList(devNonHarmonicRawDataList, devHarmonicRawDataList, testItemMap); List standardDevData = contrastToList(stdDevNonHarmonicRawDataList, stdDevHarmonicRawDataList, testItemMap); - detectionServiceImpl.processing(devData, standardDevData, parsIp, devIdMapComm, testItemMap.keySet().stream().collect(Collectors.toList()), errorSysId, dataRule, numMap, code, null); + detectionServiceImpl.processing(devData, standardDevData, parsIp, devIdMapComm, testItemMap.keySet().stream().collect(Collectors.toList()), errorSysId, dataRule, numMap, code, null, finalNonWaveDataSourceEnum); parsId.forEach((devMonitorId, stdDevMonitorId) -> { String[] split = devMonitorId.split(CnSocketUtil.SPLIT_TAG); - pqMonitorService.updateMonitorResult(devMonitorId, null, DataSourceEnum.REAL_DATA, num, null, oldCode); + pqMonitorService.updateMonitorResult(devMonitorId, null, finalNonWaveDataSourceEnum, num, null, oldCode); pqDevService.updateResult(split[0], null); }); @@ -3109,12 +3134,12 @@ public class ResultServiceImpl implements IResultService { devData = contrastToList(devNonHarmonicRawDataList, devHarmonicRawDataList, testItemMap); standardDevData = contrastToList(stdDevNonHarmonicRawDataList, stdDevHarmonicRawDataList, testItemMap); - detectionServiceImpl.processing(devData, standardDevData, parsIp, devIdMapComm, testItemMap.keySet().stream().collect(Collectors.toList()), errorSysId, dataRule, numMap, oldCode, i); + detectionServiceImpl.processing(devData, standardDevData, parsIp, devIdMapComm, testItemMap.keySet().stream().collect(Collectors.toList()), errorSysId, dataRule, numMap, oldCode, i, DataSourceEnum.WAVE_DATA); } parsId.forEach((devMonitorId, stdDevMonitorId) -> { String[] split = devMonitorId.split(CnSocketUtil.SPLIT_TAG); - pqMonitorService.updateMonitorResult(devMonitorId, null, DataSourceEnum.WAVE_DATA, num, adPlanTestConfig.getWaveRecord(), oldCode); + pqMonitorService.updateMonitorResult(devMonitorId, null, finalNonWaveDataSourceEnum, num, adPlanTestConfig.getWaveRecord(), oldCode); pqDevService.updateResult(split[0], null); }); }); @@ -3325,7 +3350,7 @@ public class ResultServiceImpl implements IResultService { /** * 格式化数值,保留指定的小数位数 * - * @param value 原始数值 + * @param value 原始数值 * @param decimalPlaces 小数位数 * @return 格式化后的字符串 */ @@ -3366,7 +3391,7 @@ public class ResultServiceImpl implements IResultService { /** * 格式化误差范围字符串,支持处理"-0.05~0.05"格式并转换为"±0.05"格式 * - * @param errorRange 误差范围字符串 + * @param errorRange 误差范围字符串 * @param decimalPlaces 小数位数 * @return 格式化后的误差范围 */