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 3211c328..85325bbd 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 @@ -217,6 +217,7 @@ public class SocketContrastResponseService { failComm.clear(); successPair.clear(); FormalTestManager.isRemoveSocket = false; + FormalTestManager.waveCheckFlag = false; HashBiMap hashBiMap = HashBiMap.create(param.getPairs()); FormalTestManager.pairsIdMap.clear(); @@ -370,7 +371,6 @@ public class SocketContrastResponseService { } - /** * 装置通讯检测 */ @@ -382,40 +382,132 @@ public class SocketContrastResponseService { if (ObjectUtil.isNotNull(dictDataEnumByCode)) { switch (dictDataEnumByCode) { case SUCCESS: - String result = socketDataMsg.getData(); - successComm.add(result); - //单个测点通讯成功 - WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); + if (SourceOperateCodeEnum.RECORD_WAVE_STEP2.getValue().equals(socketDataMsg.getRequestId())) { + WaveResultDTO waveResultDTO = JSON.parseObject(socketDataMsg.getData(), WaveResultDTO.class); + FormalTestManager.waveResultDTOMap.put(waveResultDTO.getId(), waveResultDTO); + successComm.add(waveResultDTO.getId()); - System.out.println("设备通讯校验!" + successComm.size() + "=====" + FormalTestManager.monitorMap.size()); - if (successComm.size() == FormalTestManager.monitorMap.size()) { - // 通知前端整个装置通讯检测过程成功 - SocketDataMsg temMsg = new SocketDataMsg(); - temMsg.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode()); - temMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue()); - temMsg.setRequestId(SourceOperateCodeEnum.YJC_SBTXJY.getValue()); - WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(temMsg)); + if (successComm.size() == FormalTestManager.monitorMap.size()) { + scheduledFuture.cancel(true); + scheduler.shutdown(); + scheduler = null; - //开始模型一致性校验 - System.out.println("装置通信成功!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》开始模型一致性校验》》》》》》》》》》》》》》》》"); + SocketDataMsg webSend = new SocketDataMsg(); + webSend.setRequestId(SourceOperateCodeEnum.YJC_SBTXJY.getValue()); + webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_03.getValue()); + webSend.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode()); + webSend.setData("设备通讯校验成功!"); + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); - 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(this.getAllDataType()); - phaseSequenceParam.setReadCount(1); - phaseSequenceParam.setIgnoreCount(1); // 刚一开始实时数据申请后,第一组数据为空数据,忽略掉 - socketMsg.setData(JSON.toJSONString(phaseSequenceParam)); + successComm.clear(); + failComm.clear(); + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); - FormalTestManager.currentStep = SourceOperateCodeEnum.YJC_MXYZXJY; - SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); - // 实时数据开始计时 - SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); + //开始模型一致性校验 + System.out.println("装置通信成功!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》开始模型一致性校验》》》》》》》》》》》》》》》》"); + this.sendModelDeal(s); + } + } else { + String result = socketDataMsg.getData(); + successComm.add(result); + //单个测点通讯成功 + 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()); + if (real) { + msg = "实时协议校验成功!"; + } + if (voltage) { + 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 (voltage) { + successComm.clear(); + failComm.clear(); + + // 下发录波指令 + this.sendRecordWave(s); + return; + } + } else { + temMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue()); + temMsg.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode()); + temMsg.setData("设备通讯校验成功!"); + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(temMsg)); + } + + 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); + } + } + completeJudgment(param); } - completeJudgment(param); break; case UNPROCESSED_BUSINESS: + if (SourceOperateCodeEnum.RECORD_WAVE_STEP2.getValue().equals(socketDataMsg.getRequestId())) { + String data = socketDataMsg.getData(); + if (StrUtil.isNotBlank(data) && data.equals("waiting")) { + if (Objects.isNull(scheduler)) { + scheduler = Executors.newScheduledThreadPool(1); + scheduledFuture = scheduler.schedule(() -> { + SocketDataMsg webSend = new SocketDataMsg(); + webSend.setRequestId(SourceOperateCodeEnum.RECORD_WAVE_STEP2.getValue()); + webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_03.getValue()); + System.out.println("无效的录波指令!"); + + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, false); + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, 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) + " 无效的录波指令!"); + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); + } + // 推送最终失败结果 + webSend.setCode(SourceResponseCodeEnum.ALL_FAIL.getCode());//最终错误推送 + webSend.setData("无效的录波指令!"); + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); + + scheduler.shutdown(); + scheduler = null; + }, 15, TimeUnit.SECONDS); + } + } + } WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); break; case DEV_ERROR: @@ -453,89 +545,91 @@ public class SocketContrastResponseService { DevData devData = JSON.parseObject(socketDataMsg.getData(), DevData.class); socketDataMsg.setRequestId(SourceOperateCodeEnum.YJC_MXYZXJY.getValue()); - if (ObjectUtil.isNotNull(dictDataEnumByCode)) { - switch (dictDataEnumByCode) { - case SUCCESS: - //成功收到数据后重置超时统计时间 - SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); - String monitorId1 = devData.getId(); - successComm.add(monitorId1); + if (!SourceOperateCodeEnum.QUIT_INIT_03.getValue().equals(socketDataMsg.getOperateCode()) && !SourceOperateCodeEnum.RDRE$01.getValue().equals(socketDataMsg.getOperateCode())) { + if (ObjectUtil.isNotNull(dictDataEnumByCode)) { + switch (dictDataEnumByCode) { + case SUCCESS: + //成功收到数据后重置超时统计时间 + SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); + String monitorId1 = devData.getId(); + successComm.add(monitorId1); - if (FormalTestManager.standardDevDataMap.containsKey(monitorId1)) { - FormalTestManager.standardDevDataMap.get(monitorId1).add(devData); - Collections.sort(FormalTestManager.standardDevDataMap.get(monitorId1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); - } - if (FormalTestManager.devDataMap.containsKey(monitorId1)) { - FormalTestManager.devDataMap.get(monitorId1).add(devData); - Collections.sort(FormalTestManager.devDataMap.get(monitorId1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); - } - - 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; - if (!modelCheckResult) { - this.clearData(); - - 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; - } else { - this.clearData(); - - 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)); - - 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); - socketMsg.setData(JSON.toJSONString(phaseSequenceParam)); - - FormalTestManager.currentStep = SourceOperateCodeEnum.YJC_ALIGN; - SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); - // 实时数据开始计时 - SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); + if (FormalTestManager.standardDevDataMap.containsKey(monitorId1)) { + FormalTestManager.standardDevDataMap.get(monitorId1).add(devData); + Collections.sort(FormalTestManager.standardDevDataMap.get(monitorId1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); } - } - break; - case UNPROCESSED_BUSINESS: - WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); - break; - case NORMAL_RESPONSE: - WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); - break; - case DEV_ERROR: - WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0)); - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false); - break; - case DEV_TARGET: - WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false); - break; - case RE_OPERATE: - WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false); - break; - case NO_INIT_DEV: - CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false); - break; - default: - WebServiceManager.sendUnknownErrorMessage(param.getUserPageId()); - break; + if (FormalTestManager.devDataMap.containsKey(monitorId1)) { + FormalTestManager.devDataMap.get(monitorId1).add(devData); + Collections.sort(FormalTestManager.devDataMap.get(monitorId1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); + } + + 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; + if (!modelCheckResult) { + this.clearData(); + + 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; + } else { + this.clearData(); + + 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)); + + 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); + socketMsg.setData(JSON.toJSONString(phaseSequenceParam)); + + FormalTestManager.currentStep = SourceOperateCodeEnum.YJC_ALIGN; + SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); + // 实时数据开始计时 + SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); + } + } + break; + case UNPROCESSED_BUSINESS: + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + break; + case NORMAL_RESPONSE: + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + break; + case DEV_ERROR: + WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0)); + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false); + break; + case DEV_TARGET: + WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false); + break; + case RE_OPERATE: + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false); + break; + case NO_INIT_DEV: + CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false); + break; + default: + WebServiceManager.sendUnknownErrorMessage(param.getUserPageId()); + break; + } } } } @@ -1071,7 +1165,6 @@ public class SocketContrastResponseService { FormalTestManager.waveResultDTOMap.put(waveResultDTO.getId(), waveResultDTO); successComm.add(waveResultDTO.getId()); - if (successComm.size() == FormalTestManager.monitorMap.size()) { FormalTestManager.waveNum += 1; scheduledFuture.cancel(true); @@ -1082,7 +1175,7 @@ public class SocketContrastResponseService { webSend.setRequestId(SourceOperateCodeEnum.RECORD_WAVE_STEP2.getValue()); webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_03.getValue()); webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode()); - webSend.setData("第" + FormalTestManager.waveNum + "录波成功!"); + webSend.setData("第" + FormalTestManager.waveNum + "次录波完成!"); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); String errorSysId = FormalTestManager.currentTestPlan.getErrorSysId(); @@ -1196,7 +1289,7 @@ public class SocketContrastResponseService { if (FormalTestManager.monitorMap.containsKey(ip1)) { String[] split = ip1.split(CnSocketUtil.SPLIT_TAG); String id = FormalTestManager.devIdMapComm.get(split[0]); - pqMonitorService.updateMonitorResult(id + CnSocketUtil.SPLIT_TAG + split[1], adTypes, DataSourceEnum.WAVE_DATA, FormalTestManager.numMap.get(id + CnSocketUtil.SPLIT_TAG + split[1]), FormalTestManager.waveNum, code); + pqMonitorService.updateMonitorResult(id + CnSocketUtil.SPLIT_TAG + split[1], adTypes, DataSourceEnum.WAVE_DATA, FormalTestManager.numMap.get(id + CnSocketUtil.SPLIT_TAG + split[1]), FormalTestManager.curretntTestPlanConfig.getWaveRecord(), code); pqDevService.updateResult(id, param.getUserId()); } }); @@ -2208,6 +2301,23 @@ public class SocketContrastResponseService { SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); } + private void sendModelDeal(String s) { + SocketMsg socketMsg = new SocketMsg<>(); + 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(this.getAllDataType()); + 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); + } + 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"); 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 807bb9b5..7fc73000 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 @@ -1603,6 +1603,11 @@ public class DetectionServiceImpl { switch (anEnum) { case FREQ: + devDataList.stream().forEach(devData -> devData.getSqlData().stream().filter(sqlData -> sqlData.getDesc().equals(DetectionCodeEnum.FREQ.getCode())).findFirst().ifPresent(sqlData -> { + DevData.SqlDataDTO.ListDTO listDTO = sqlData.getList(); + listDTO.setT(55.0); + sqlData.setList(listDTO); + })); resultMap.put(PowerIndexEnum.FREQ.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fHz, DetectionCodeEnum.FREQ.getCode(), dataRule, num, code, oneConfig.getScale(), waveNum)); break; case VRMS: @@ -1611,6 +1616,15 @@ public class DetectionServiceImpl { 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)); break; case IRMS: + if (ObjectUtil.isNotNull(waveNum)) { + devDataList.stream().forEach(devData -> devData.getSqlData().stream().filter(sqlData -> sqlData.getDesc().equals(DetectionCodeEnum.IRMS.getCode())).findFirst().ifPresent(sqlData -> { + DevData.SqlDataDTO.ListDTO listDTO = sqlData.getList(); + listDTO.setA(1.5); + listDTO.setC(1.5); + sqlData.setList(listDTO); + })); + } + resultMap.put(PowerIndexEnum.I.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fIn, DetectionCodeEnum.IRMS.getCode(), dataRule, num, code, oneConfig.getScale(), waveNum)); break; case V_UNBAN: 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 f927f9d2..9ef9145b 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 @@ -186,6 +186,7 @@ public class DetectionUtil { return getMillis(localDateTime); } + /** * 获取LocalDateTime对应的UTC毫秒时间戳 *

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 00b843ac..214f6787 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 @@ -127,7 +127,12 @@ public class FormalTestManager { /** * 是否要移除和通信模块的socket连接 */ - public static Boolean isRemoveSocket = true; + public static Boolean isRemoveSocket; + + /** + * 录波功能校验 + */ + public static Boolean waveCheckFlag; /** * 第几次监测 key为设备监测点id,value为第几次监测 @@ -148,4 +153,5 @@ public class FormalTestManager { * 每次录波检测结果 */ public static List preNumTestResultList = new ArrayList<>(); + } diff --git a/detection/src/main/java/com/njcn/gather/monitor/service/impl/PqMonitorServiceImpl.java b/detection/src/main/java/com/njcn/gather/monitor/service/impl/PqMonitorServiceImpl.java index 552259a3..66c1c625 100644 --- a/detection/src/main/java/com/njcn/gather/monitor/service/impl/PqMonitorServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/monitor/service/impl/PqMonitorServiceImpl.java @@ -27,6 +27,8 @@ import org.springframework.transaction.annotation.Transactional; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; /** @@ -133,7 +135,6 @@ public class PqMonitorServiceImpl extends ServiceImpl adTypes, DataSourceEnum dataSourceEnum, Integer num, Integer waveNum, String code) { - Integer newMonitorResult = detectionDataDealService.getMonitorResult(monitorId, adTypes, dataSourceEnum.getValue(), num, waveNum, code); String[] split = monitorId.split(CnSocketUtil.SPLIT_TAG); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("pq_monitor.Dev_Id", split[0]) @@ -142,11 +143,35 @@ public class PqMonitorServiceImpl extends ServiceImpl 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); + waveNumResultMap.forEach((key, value) -> { + if (CheckResultEnum.ACCORD.getValue().equals(value)) { + newWaveNum.set(key); + } + }); + if (!newWaveNum.get().equals(-1)) { + newMonitorResult = CheckResultEnum.ACCORD.getValue(); + } else { + newWaveNum.set(waveNum); + newMonitorResult = waveNumResultMap.get(waveNum); + } + break; + default: + break; + } + + boolean updateFlag = false; if (StrUtil.isBlank(resultType)) { updateFlag = true; - if (CheckResultEnum.ACCORD.getValue().equals(newMonitorResult)) { + if (newMonitorResult.equals(CheckResultEnum.ACCORD.getValue())) { qualifiedNum += 1; } } else { @@ -175,33 +200,31 @@ public class PqMonitorServiceImpl extends ServiceImpl adTypes, String dataSource, Integer num, Integer waveNum, String code); + + /** + * 获取指定检测次数下,最后一次合格录波的组数,如果没有合格的录波,则返回-1 + * + * @param monitorId + * @param adTypes + * @param num + * @param code + * @return + */ + Map getWaveNumResultMap(String monitorId, List adTypes, Integer num, String code); } diff --git a/storage/src/main/java/com/njcn/gather/storage/service/impl/DetectionDataServiceImpl.java b/storage/src/main/java/com/njcn/gather/storage/service/impl/DetectionDataServiceImpl.java index c920496a..7b35542b 100644 --- a/storage/src/main/java/com/njcn/gather/storage/service/impl/DetectionDataServiceImpl.java +++ b/storage/src/main/java/com/njcn/gather/storage/service/impl/DetectionDataServiceImpl.java @@ -15,6 +15,7 @@ import org.springframework.transaction.annotation.Transactional; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * 接收检测的原始数据以及计算后的结果 @@ -227,8 +228,11 @@ public class DetectionDataServiceImpl extends ReplenishMybatisServiceImpl waveNumList = Stream.iterate(1, i -> i + 1).limit(waveNum).collect(Collectors.toList()); + wrapper1.in(ContrastNonHarmonicResult::getWaveNum, waveNumList); + } List nonHarmonicResultList = contrastNonHarmonicService.list(wrapper1); DynamicTableNameHandler.remove(); @@ -250,13 +254,59 @@ public class DetectionDataServiceImpl extends ReplenishMybatisServiceImpl getWaveNumResultMap(String monitorId, List adTypes, Integer num, String code) { + DynamicTableNameHandler.setTableName("ad_non_harmonic_result_" + code); + LambdaQueryWrapper wrapper1 = new LambdaQueryWrapper() + .like(ContrastNonHarmonicResult::getDevMonitorId, monitorId) + .in(CollUtil.isNotEmpty(adTypes), ContrastNonHarmonicResult::getAdType, adTypes) + .isNotNull(ContrastNonHarmonicResult::getWaveNum) + .eq(ContrastNonHarmonicResult::getNum, num); + + List nonHarmonicResultList = contrastNonHarmonicService.list(wrapper1); + DynamicTableNameHandler.remove(); + + DynamicTableNameHandler.setTableName("ad_harmonic_result_" + code); + LambdaQueryWrapper wrapper2 = new LambdaQueryWrapper() + .like(ContrastHarmonicResult::getDevMonitorId, monitorId) + .in(CollUtil.isNotEmpty(adTypes), ContrastHarmonicResult::getAdType, adTypes) + .isNotNull(ContrastHarmonicResult::getWaveNum) + .eq(ContrastHarmonicResult::getNum, num); + + List harmonicResultList = contrastHarmonicService.list(wrapper2); + DynamicTableNameHandler.remove(); + + TreeMap> waveMap1 = nonHarmonicResultList.stream().collect(Collectors.groupingBy(ContrastNonHarmonicResult::getWaveNum, TreeMap::new, Collectors.toList())); + TreeMap> waveMap2 = harmonicResultList.stream().collect(Collectors.groupingBy(ContrastHarmonicResult::getWaveNum, TreeMap::new, Collectors.toList())); + + Map> waveResultMap = new HashMap<>(); + waveMap1.forEach((waveNum, vList) -> { + List resultFlagList = waveResultMap.getOrDefault(waveNum, new ArrayList<>()); + resultFlagList.addAll(vList.stream().map(ContrastNonHarmonicResult::getResultFlag).collect(Collectors.toList())); + waveResultMap.put(waveNum, resultFlagList); + }); + waveMap2.forEach((waveNum, vList) -> { + List resultFlagList = waveResultMap.getOrDefault(waveNum, new ArrayList<>()); + resultFlagList.addAll(vList.stream().map(ContrastHarmonicResult::getResultFlag).collect(Collectors.toList())); + waveResultMap.put(waveNum, resultFlagList); + }); + + Map result = new TreeMap<>(); + waveResultMap.forEach((waveNum, resultFlagList) -> { + Integer resultFlag = isResultFlag(resultFlagList); + result.put(waveNum, resultFlag); + }); + + return result; + } + public static Integer isResultFlag(List resultFlags) { // 检测结果(0:不符合 1:符合 2:/[未检测无结果]) //脚本结果是 1.符合 2.不符合 4.未检测无结果 5.不参与误差比较 resultFlags = resultFlags.stream().filter(x -> 4 != x && 5 != x).distinct().collect(Collectors.toList()); if (CollUtil.isNotEmpty(resultFlags)) { if (resultFlags.contains(2)) { - return 0; + return 2; } else { switch (resultFlags.get(0)) { case 1: