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 a15ad1cd..1cddf38d 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 @@ -97,7 +97,7 @@ public class SocketContrastResponseService { private boolean alignCheckResult = false; /** - * 成功的配对 + * 成功的配对 key:被检设备ip_通道号,value:配对设备ip_通道号 */ private Map successPair = HashBiMap.create(); @@ -125,7 +125,6 @@ public class SocketContrastResponseService { put("I", Arrays.asList("real$IRMS")); put("IMBV", Arrays.asList("real$V_UNBAN")); put("IMBA", Arrays.asList("real$I_UNBAN")); - put("F", Arrays.asList("avg$PST")); put("P", Arrays.asList("real$P_FUND")); }}; @@ -143,12 +142,14 @@ public class SocketContrastResponseService { * @param param */ public void init(ContrastDetectionParam param) { + SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); SocketManager.contrastClockMap.clear(); successComm.clear(); failComm.clear(); + successPair.clear(); + FormalTestManager.isRemoveSocket = true; - FormalTestManager.pairsMap.clear(); - FormalTestManager.pairsMap.putAll(param.getPairs()); + HashBiMap hashBiMap = HashBiMap.create(param.getPairs()); FormalTestManager.currentTestPlan = adPlanService.getById(param.getPlanId()); DictData pattern = dictDataService.getById(FormalTestManager.currentTestPlan.getPattern()); @@ -160,7 +161,7 @@ public class SocketContrastResponseService { pqDevList.forEach(x -> { List monitorList = x.getMonitorList(); //移除不做检测的监测点 - monitorList.removeIf(y -> !FormalTestManager.pairsMap.containsKey(x.getDevId() + CnSocketUtil.SPLIT_TAG + y.getLine())); + monitorList.removeIf(y -> !hashBiMap.containsKey(x.getDevId() + CnSocketUtil.SPLIT_TAG + y.getLine())); monitorList.forEach(y -> { devMonitorMap.put(x.getDevId() + CnSocketUtil.SPLIT_TAG + y.getLine(), y); }); @@ -170,7 +171,7 @@ public class SocketContrastResponseService { // key为标准设备id,value为标准设备下的监测点列表(Id_通道号) Map> pairsMap = new HashMap<>(); - FormalTestManager.pairsMap.forEach((key, value) -> { + hashBiMap.forEach((key, value) -> { String[] split = value.split(CnSocketUtil.SPLIT_TAG); List monitorIdList = pairsMap.getOrDefault(split[0], new ArrayList<>()); monitorIdList.add(value); @@ -178,9 +179,10 @@ public class SocketContrastResponseService { }); FormalTestManager.standardDevList.clear(); - List standardDevIds = FormalTestManager.pairsMap.values().stream().map(key -> key.split(CnSocketUtil.SPLIT_TAG)[0]).distinct().collect(Collectors.toList()); + List standardDevIds = hashBiMap.values().stream().map(key -> key.split(CnSocketUtil.SPLIT_TAG)[0]).distinct().collect(Collectors.toList()); FormalTestManager.standardDevList.addAll(pqStandardDevService.listStandardDevPreDetection(standardDevIds)); + FormalTestManager.pairsMap.clear(); // 标准设备根据配对关系设置监测点 FormalTestManager.standardDevList.stream().forEach(x -> { List monitorList = new ArrayList<>(); @@ -191,12 +193,13 @@ public class SocketContrastResponseService { monitorListDTO.setLineId(x.getDevIP() + CnSocketUtil.SPLIT_TAG + split[1]); monitorListDTO.setLine(Integer.valueOf(split[1])); - PreDetection.MonitorListDTO monitorListDTO1 = devMonitorMap.get(FormalTestManager.pairsMap.inverse().get(y)); + PreDetection.MonitorListDTO monitorListDTO1 = devMonitorMap.get(hashBiMap.inverse().get(y)); monitorListDTO.setConnection(monitorListDTO1.getConnection()); monitorListDTO.setPtStr(monitorListDTO1.getPtStr()); monitorListDTO.setCtStr(monitorListDTO1.getCtStr()); monitorListDTO.setStatInterval(monitorListDTO1.getStatInterval()); + FormalTestManager.pairsMap.put(monitorListDTO1.getLineId(), monitorListDTO.getLineId()); monitorList.add(monitorListDTO); }); x.setMonitorList(monitorList); @@ -239,6 +242,7 @@ public class SocketContrastResponseService { 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))); + FormalTestManager.currentStep = SourceOperateCodeEnum.YJC_SBTXJY; } @@ -298,7 +302,7 @@ public class SocketContrastResponseService { // 通知前端整个装置通讯检测过程成功 SocketDataMsg temMsg = new SocketDataMsg(); temMsg.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode()); - temMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_01.getValue()); + temMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue()); temMsg.setRequestId(SourceOperateCodeEnum.YJC_SBTXJY.getValue()); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(temMsg)); @@ -311,7 +315,7 @@ public class SocketContrastResponseService { phaseSequenceParam.setMoniterIdList(Arrays.asList(FormalTestManager.monitorMap.keySet().toArray(new String[FormalTestManager.monitorMap.size()]))); phaseSequenceParam.setDataType(FormalTestManager.testItemCodeList); phaseSequenceParam.setReadCount(1); - phaseSequenceParam.setIgnoreCount(0); + phaseSequenceParam.setIgnoreCount(1); // 刚一开始实时数据申请后,第一组数据为空数据,忽略掉 socketMsg.setData(JSON.toJSONString(phaseSequenceParam)); FormalTestManager.currentStep = SourceOperateCodeEnum.YJC_MXYZXJY; @@ -336,10 +340,10 @@ public class SocketContrastResponseService { break; case RE_OPERATE: WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); - CnSocketUtil.contrastSendquit(param.getUserPageId()); + CnSocketUtil.contrastSendquit(param.getUserPageId(), false); break; case NO_INIT_DEV: - CnSocketUtil.contrastSendquit(param.getUserPageId()); + CnSocketUtil.contrastSendquit(param.getUserPageId(), false); break; default: WebServiceManager.sendUnknownErrorMessage(param.getUserPageId()); @@ -348,82 +352,6 @@ public class SocketContrastResponseService { } } - /** - * 协议检测 - */ -// private void protocolDeal(SocketDataMsg socketDataMsg, PreDetectionParam param) { -// SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); -// SocketMsg socketMsg = new SocketMsg<>(); -// String s = param.getUserPageId() + CnSocketUtil.CONTRAST_DEV_TAG; -// switch (Objects.requireNonNull(dictDataEnumByCode)) { -// case SUCCESS: -// if (socketDataMsg.getOperateCode().equals(SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue())) { -// successComm.add(socketDataMsg.getData()); -// // 推送前端单个测点协议校验成功 -// WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); -// if (successComm.size() == FormalTestManager.monitorMap.size()) { -// for (String string : successComm) { -// //模拟统计协议校验,通讯校验已经校验过,模拟直接推送 -// SocketDataMsg webSend = new SocketDataMsg(); -// webSend.setRequestId(SourceOperateCodeEnum.YJC_XYJY.getValue()); -// webSend.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue()); -// webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode()); -// webSend.setData(string); -// WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(webSend, FormalTestManager.devNameMapComm, 1)); -// } -// -// this.clearData(FormalTestManager.devDataMap, FormalTestManager.standardDevDataMap); -// -// SocketDataMsg webSend = new SocketDataMsg(); -// webSend.setRequestId(SourceOperateCodeEnum.YJC_XYJY.getValue()); -// webSend.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_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(FormalTestManager.testItemCodeList); -// phaseSequenceParam.setReadCount(this.getMaxReadCount(1)); -// phaseSequenceParam.setIgnoreCount(0); -// socketMsg.setData(JSON.toJSONString(phaseSequenceParam)); -// -// FormalTestManager.currentStep = SourceOperateCodeEnum.YJC_MXYZXJY; -// SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); -// // 实时数据开始计时 -// SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); -// } -// } -// completeJudgment(param); -// break; -// case UNPROCESSED_BUSINESS: -// 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)); -// completeJudgment(param); -// break; -// case DEV_TARGET: -// failComm.add(socketDataMsg.getData()); -// WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); -// completeJudgment(param); -// break; -// case RE_OPERATE: -// WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); -// CnSocketUtil.contrastSendquit(param.getUserPageId()); -// break; -// case ICD_NOT_FOUND: -// WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); -// CnSocketUtil.contrastSendquit(param.getUserPageId()); -// break; -// default: -// break; -// } -// } - /** * 模型一致性校验 */ @@ -432,6 +360,7 @@ public class SocketContrastResponseService { 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)) { switch (dictDataEnumByCode) { @@ -453,8 +382,10 @@ public class SocketContrastResponseService { if (successComm.size() == FormalTestManager.monitorMap.size()) { boolean modelCheckResult = this.modelCheck(param, FormalTestManager.devDataMap); - modelCheckResult = modelCheckResult && this.modelCheck(param, FormalTestManager.standardDevDataMap); + modelCheckResult = this.modelCheck(param, FormalTestManager.standardDevDataMap) && modelCheckResult; if (!modelCheckResult) { + this.clearData(FormalTestManager.devDataMap, FormalTestManager.standardDevDataMap); + SocketDataMsg webSend = new SocketDataMsg(); webSend.setRequestId(SourceOperateCodeEnum.YJC_MXYZXJY.getValue()); webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); @@ -462,7 +393,7 @@ public class SocketContrastResponseService { WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(webSend, FormalTestManager.devNameMapComm, 0)); System.out.println("模型一致性校验失败!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》"); - CnSocketUtil.contrastSendquit(param.getUserPageId()); + CnSocketUtil.contrastSendquit(param.getUserPageId(), false); return; } else { this.clearData(FormalTestManager.devDataMap, FormalTestManager.standardDevDataMap); @@ -489,29 +420,27 @@ public class SocketContrastResponseService { SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); } } - completeJudgment(param); 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: - failComm.addAll(FormalTestManager.devMapMonitorNum.get(socketDataMsg.getData())); WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0)); - CnSocketUtil.contrastSendquit(param.getUserPageId()); - completeJudgment(param); + CnSocketUtil.contrastSendquit(param.getUserPageId(), false); break; case DEV_TARGET: - failComm.add(socketDataMsg.getData()); WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); - CnSocketUtil.contrastSendquit(param.getUserPageId()); - completeJudgment(param); + CnSocketUtil.contrastSendquit(param.getUserPageId(), false); break; case RE_OPERATE: WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); - CnSocketUtil.contrastSendquit(param.getUserPageId()); + CnSocketUtil.contrastSendquit(param.getUserPageId(), false); break; case NO_INIT_DEV: - CnSocketUtil.contrastSendquit(param.getUserPageId()); + CnSocketUtil.contrastSendquit(param.getUserPageId(), false); break; default: WebServiceManager.sendUnknownErrorMessage(param.getUserPageId()); @@ -531,6 +460,7 @@ public class SocketContrastResponseService { 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)) { switch (dictDataEnumByCode) { @@ -545,10 +475,8 @@ public class SocketContrastResponseService { if (!alignCheckResult) { System.out.println("1minute内实时数据对齐校验失败!"); - // 向通讯模块发送不再接收数据 - this.sendNotReceiveData(s); + CnSocketUtil.contrastSendquit(param.getUserPageId(), false); - successPair.clear(); this.clearData(FormalTestManager.devDataMap, FormalTestManager.standardDevDataMap); Collection disjunction = CollectionUtil.disjunction(FormalTestManager.pairsMap.keySet(), successPair.keySet()); @@ -568,7 +496,9 @@ public class SocketContrastResponseService { webSend.setCode(SourceResponseCodeEnum.ALL_FAIL.getCode());//最终错误推送 WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(webSend, FormalTestManager.devNameMapComm, 0)); - CnSocketUtil.contrastSendquit(param.getUserPageId()); + // 将数据推送给前端 + this.sendAlignDataToWeb(param.getUserPageId()); + return; } scheduler.shutdown(); @@ -611,10 +541,6 @@ public class SocketContrastResponseService { // 将数据推送给前端 this.sendAlignDataToWeb(param.getUserPageId()); - // 向通讯模块发送不再接收数据 - this.sendNotReceiveData(s); - - successPair.clear(); this.clearData(FormalTestManager.devDataMap, FormalTestManager.standardDevDataMap); SocketDataMsg webSend1 = new SocketDataMsg(); @@ -646,23 +572,19 @@ public class SocketContrastResponseService { 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)); - CnSocketUtil.contrastSendquit(param.getUserPageId()); - //completeJudgment(param); + CnSocketUtil.contrastSendquit(param.getUserPageId(), false); break; case DEV_TARGET: - //failComm.add(socketDataMsg.getData()); WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); - CnSocketUtil.contrastSendquit(param.getUserPageId()); - //completeJudgment(param); + CnSocketUtil.contrastSendquit(param.getUserPageId(), false); break; case RE_OPERATE: WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); - CnSocketUtil.contrastSendquit(param.getUserPageId()); + CnSocketUtil.contrastSendquit(param.getUserPageId(), false); break; case NO_INIT_DEV: - CnSocketUtil.contrastSendquit(param.getUserPageId()); + CnSocketUtil.contrastSendquit(param.getUserPageId(), false); break; default: WebServiceManager.sendUnknownErrorMessage(param.getUserPageId()); @@ -680,6 +602,7 @@ public class SocketContrastResponseService { 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()); if (ObjectUtil.isNotNull(dictDataEnumByCode)) { switch (dictDataEnumByCode) { @@ -705,7 +628,7 @@ public class SocketContrastResponseService { // 进行单个监测点的相序校验 if (!successPair.containsKey(devMonitorId)) { - if (FormalTestManager.devDataMap.get(devMonitorId).size() > 1 + 5 && FormalTestManager.standardDevDataMap.get(standardDevMonitorId).size() > 1 + 5) { // 电压、电流误差校验至少需要1组数据。加5是为了避免数据在传输过程中因为网络波动导致的数据延时接收。 + if (FormalTestManager.devDataMap.get(devMonitorId).size() > 1 && FormalTestManager.standardDevDataMap.get(standardDevMonitorId).size() > 1) { successComm.add(standardDevMonitorId); successComm.add(devMonitorId); // successComm.add(monitorId1); @@ -714,9 +637,7 @@ public class SocketContrastResponseService { successPair.put(devMonitorId, standardDevMonitorId); // 若成功的配对项等于总的配对项,则判定为成功 if (successPair.keySet().containsAll(FormalTestManager.pairsMap.keySet())) { - successPair.clear(); - successComm.clear(); - failComm.clear(); + this.clearData(FormalTestManager.devDataMap, FormalTestManager.standardDevDataMap); SocketDataMsg webSend = new SocketDataMsg(); @@ -725,26 +646,29 @@ public class SocketContrastResponseService { webSend.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode());//最终成功推送 WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(webSend, FormalTestManager.devNameMapComm, 0)); - 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(FormalTestManager.testItemCodeList); - //phaseSequenceParam.setReadCount(this.getMaxReadCount(6 + 5)); - phaseSequenceParam.setIgnoreCount(0); - socketMsg.setData(JSON.toJSONString(phaseSequenceParam)); + // 后续做正式检测 + if (param.getTestItemList().get(2)) { + 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(FormalTestManager.testItemCodeList); + //phaseSequenceParam.setReadCount(this.getMaxReadCount(6 + 5)); + 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); + FormalTestManager.currentStep = SourceOperateCodeEnum.FORMAL_REAL; + //SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); + // 实时数据开始计时 + //SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); + } else { + // 断开与设备的连接,但是不要将Socket移除 + CnSocketUtil.contrastSendquit(param.getUserPageId(), false); + } } } else if (successComm.size() == FormalTestManager.monitorMap.size()) { this.clearData(FormalTestManager.devDataMap, FormalTestManager.standardDevDataMap); - successComm.clear(); - failComm.clear(); - successPair.clear(); // 相序校验失败,最终向前端发送失败消息 WebSocketVO webSend = new WebSocketVO<>(); @@ -753,7 +677,7 @@ public class SocketContrastResponseService { webSend.setCode(SourceResponseCodeEnum.ALL_FAIL.getCode()); //最终错误推送 WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); - CnSocketUtil.contrastSendquit(param.getUserPageId()); + CnSocketUtil.contrastSendquit(param.getUserPageId(), false); return; } } @@ -763,17 +687,13 @@ public class SocketContrastResponseService { 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)); - completeJudgment(param); break; case DEV_TARGET: - failComm.addAll(FormalTestManager.devMapMonitorNum.get(socketDataMsg.getData())); WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); - completeJudgment(param); break; case RE_OPERATE: - CnSocketUtil.contrastSendquit(param.getUserPageId()); + CnSocketUtil.contrastSendquit(param.getUserPageId(), false); break; default: WebServiceManager.sendUnknownErrorMessage(param.getUserPageId()); @@ -898,7 +818,7 @@ public class SocketContrastResponseService { // List valueType = iPqScriptCheckDataService.getValueType(checkDataParam); // // iPqDevService.updateResult(param.getDevIds(), valueType, param.getCode(), param.getUserId(), param.getTemperature(), param.getHumidity()); -// CnSocketUtil.contrastSendquit(param.getUserPageId()); +// CnSocketUtil.contrastSendquit(param.getUserPageId(),false); // } // successComm.clear(); // FormalTestManager.realDataXiList.clear(); @@ -950,7 +870,9 @@ public class SocketContrastResponseService { case SUCCESS: switch (Objects.requireNonNull(operateCodeEnum)) { case QUIT_INIT_02: - SocketManager.removeUser(s); + if (FormalTestManager.isRemoveSocket) { + SocketManager.removeUser(s); + } break; default: } @@ -960,7 +882,9 @@ public class SocketContrastResponseService { case NO_INIT_DEV: switch (operateCodeEnum) { case QUIT_INIT_02: - SocketManager.removeUser(s); + if (FormalTestManager.isRemoveSocket) { + SocketManager.removeUser(s); + } break; } break; @@ -976,7 +900,7 @@ public class SocketContrastResponseService { if (successComm.size() + failComm.size() == FormalTestManager.monitorMap.size()) { //全部装置返回 if (!failComm.isEmpty()) { - CnSocketUtil.contrastSendquit(param.getUserPageId()); + CnSocketUtil.contrastSendquit(param.getUserPageId(), false); WebSocketVO webSocketVO = new WebSocketVO<>(); webSocketVO.setRequestId(SourceOperateCodeEnum.ERROR_FLOW_END.getValue()); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO)); @@ -994,6 +918,9 @@ public class SocketContrastResponseService { * @param standardDevDataMap */ private void clearData(Map> devDataMap, Map> standardDevDataMap) { + successPair.clear(); + successComm.clear(); + failComm.clear(); standardDevDataMap.forEach((k, v) -> { v.clear(); }); @@ -1050,7 +977,7 @@ public class SocketContrastResponseService { List channelDataList = new ArrayList<>(); channelDataMap.forEach((channel, channelDevDataList) -> { - String standardDevMonitorId = FormalTestManager.pairsMap.get(ip + channel); + String standardDevMonitorId = FormalTestManager.pairsMap.get(ip + CnSocketUtil.SPLIT_TAG + channel); List standarDevDataList = BeanUtil.copyToList(FormalTestManager.standardDevDataMap.get(standardDevMonitorId), DevData.class); channelDevDataList.sort(Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); @@ -1115,7 +1042,8 @@ public class SocketContrastResponseService { webSend.setRequestId(SourceOperateCodeEnum.YJC_MXYZXJY.getValue()); webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); webSend.setData(k); - if (CollUtil.isNotEmpty(descList) && descList.containsAll(FormalTestManager.testItemCodeList)) { + List collect = FormalTestManager.testItemCodeList.stream().map(obj -> obj.split("\\$")[1]).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(descList) && descList.containsAll(collect)) { // 成功信息 webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode()); } else { @@ -1127,25 +1055,6 @@ public class SocketContrastResponseService { }); }); -// devDataMap.forEach((k, v) -> { -// v.stream().forEach(devData1 -> { -// List descList = devData1.getSqlData().stream().map(DevData.SqlDataDTO::getDesc).collect(Collectors.toList()); -// descList.addAll(devData1.getSqlDataHarm().stream().map(DevData.SqlDataHarmDTO::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); -// if (FormalTestManager.testItemCodeList.containsAll(descList)) { -// // 成功信息 -// webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode()); -// } else { -// // 错误信息 -// webSend.setCode(SourceResponseCodeEnum.FAIL.getCode()); -// flag.set(false); -// } -// WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(webSend, FormalTestManager.devNameMapComm, 1)); -// }); -// }); return flag.get(); } @@ -1188,7 +1097,7 @@ public class SocketContrastResponseService { * @return true:对齐成功;false:对齐失败 */ private boolean singleMonitorAlignCheck(List devDataList, List standardDevDataList) { - if (standardDevDataList.size() >= 5 + 5 && devDataList.size() >= 5 + 5) { //实时数据对齐需要至少对齐5组。为了防止网络波动,导致数据延迟接收,这里设置为5+5=10后再进行对齐 + if (standardDevDataList.size() >= 5 && devDataList.size() >= 5) { int count = 0; int jStart = 0; @@ -1225,7 +1134,6 @@ public class SocketContrastResponseService { * @return */ private boolean singleMonitorXuCheck(String devMonitorId, String standardDevMonitorId, List devData, List stdData, Map devNameMapComm, String userId) { - // 首先确保,至少有6组数据 Boolean flag = true; if (devData.size() < 1 || stdData.size() < 1) { return false; @@ -1253,6 +1161,7 @@ public class SocketContrastResponseService { webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode()); webSend.setData(pairStr + ":电压校验成功!被检设备:Ua=" + uDevList.getA() + ",Ub=" + uDevList.getB() + ",Uc=" + uDevList.getC() + ",标准设备:Ua=" + uStdList.getA() + ",Ub=" + uStdList.getB() + ",Uc=" + uStdList.getC()); } + WebServiceManager.sendMsg(userId, JSON.toJSONString(webSend)); if (!voltageOrCurrentCheck(iDevList.getA(), iDevList.getB(), iDevList.getC(), iStdList.getA(), iStdList.getB(), iStdList.getC(), false)) { // 单个检测点电流校验失败,推送失败消息 webSend.setCode(SourceResponseCodeEnum.FAIL.getCode()); @@ -1277,22 +1186,22 @@ public class SocketContrastResponseService { DevData.SqlDataDTO.ListDTO iUnblanceDevList = iUnblanceDev.get(0).getList(); DevData.SqlDataDTO.ListDTO iUnblanceStdList = iUnblanceStd.get(0).getList(); - if (!unbalanceCheck(uUnblanceDevList.getT(), uUnblanceStdList.getT(), true)) { + if (!unbalanceCheck(uUnblanceDevList.getB(), uUnblanceStdList.getB(), true)) { // 单个检测点三项电压不平衡校验失败,推送失败消息 webSend.setCode(SourceResponseCodeEnum.FAIL.getCode()); - webSend.setData(pairStr + ":三项电压不平衡校验失败!被检设备:IMBV=" + uUnblanceDevList.getT() + ",标准设备:IMBV=" + uUnblanceStdList.getT()); + webSend.setData(pairStr + ":三项电压不平衡校验失败!被检设备:IMBV=" + uUnblanceDevList.getB() + ",标准设备:IMBV=" + uUnblanceStdList.getB()); flag = false; } else { webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode()); - webSend.setData(pairStr + ":三项电压不平衡校验成功!被检设备:IMBV=" + uUnblanceDevList.getT() + ",标准设备:IMBV=" + uUnblanceStdList.getT()); + webSend.setData(pairStr + ":三项电压不平衡校验成功!被检设备:IMBV=" + uUnblanceDevList.getB() + ",标准设备:IMBV=" + uUnblanceStdList.getB()); } - if (!unbalanceCheck(iUnblanceDevList.getT(), iUnblanceStdList.getT(), false)) { + if (!unbalanceCheck(iUnblanceDevList.getB(), iUnblanceStdList.getB(), false)) { webSend.setCode(SourceResponseCodeEnum.FAIL.getCode()); - webSend.setData(pairStr + ":三项电流不平衡校验失败!被检设备:IMBA=" + iUnblanceDevList.getT() + ",标准设备:IMBA=" + iUnblanceStdList.getT()); + webSend.setData(pairStr + ":三项电流不平衡校验失败!被检设备:IMBA=" + iUnblanceDevList.getB() + ",标准设备:IMBA=" + iUnblanceStdList.getB()); flag = false; } else { webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode()); - webSend.setData(pairStr + ":三项电流不平衡校验成功!被检设备:IMBA=" + iUnblanceDevList.getT() + ",标准设备:IMBA=" + iUnblanceStdList.getT()); + webSend.setData(pairStr + ":三项电流不平衡校验成功!被检设备:IMBA=" + iUnblanceDevList.getB() + ",标准设备:IMBA=" + iUnblanceStdList.getB()); } WebServiceManager.sendMsg(userId, JSON.toJSONString(webSend)); } @@ -1316,11 +1225,11 @@ public class SocketContrastResponseService { if (!phaseCheck(vaUnblanceDevList, iaUnblanceDevList, vaUnblanceStdList, iaUnblanceStdList)) { // 单个检测点相角校验失败,推送失败消息 webSend.setCode(SourceResponseCodeEnum.FAIL.getCode()); - webSend.setData(pairStr + "相角校验失败!被检设备:a=" + vaUnblanceDevList.getA() + "°,b=" + vaUnblanceDevList.getB() + "°,c=" + vaUnblanceDevList.getC() + ",标准设备:a=" + vaUnblanceStdList.getA() + "°,b=" + vaUnblanceStdList.getB() + "°,c=" + vaUnblanceStdList.getC()); + webSend.setData(pairStr + ":相角校验失败!被检设备:a=" + vaUnblanceDevList.getA() + "°,b=" + vaUnblanceDevList.getB() + "°,c=" + vaUnblanceDevList.getC() + ",标准设备:a=" + vaUnblanceStdList.getA() + "°,b=" + vaUnblanceStdList.getB() + "°,c=" + vaUnblanceStdList.getC()); flag = false; } else { webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode()); - webSend.setData(pairStr + "相角校验成功!被检设备:a=" + vaUnblanceDevList.getA() + "°,b=" + vaUnblanceDevList.getB() + "°,c=" + vaUnblanceDevList.getC() + ",标准设备:a=" + vaUnblanceStdList.getA() + "°,b=" + vaUnblanceStdList.getB() + "°,c=" + vaUnblanceStdList.getC()); + webSend.setData(pairStr + ":相角校验成功!被检设备:a=" + vaUnblanceDevList.getA() + "°,b=" + vaUnblanceDevList.getB() + "°,c=" + vaUnblanceDevList.getC() + ",标准设备:a=" + vaUnblanceStdList.getA() + "°,b=" + vaUnblanceStdList.getB() + "°,c=" + vaUnblanceStdList.getC()); } WebServiceManager.sendMsg(userId, JSON.toJSONString(webSend)); } 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 38ec4156..3605f2c5 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 @@ -1692,7 +1692,8 @@ public class SocketDevResponseService { FormalTestManager.monitorIdListComm = pqDevList.stream().flatMap(x -> x.getMonitorList().stream()).map(PreDetection.MonitorListDTO::getLineId).collect(Collectors.toList()); FormalTestManager.devNameMapComm = pqDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevName)); - FormalTestManager.devIdMapComm = pqDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevId)); + FormalTestManager.devIdMapComm.clear(); + FormalTestManager.devIdMapComm.putAll(pqDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevId))); //初始化有效数据数 //Map sysRegResMap = iSysRegResService.listRegRes(); 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 f988737a..e1df41f8 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 @@ -40,8 +40,7 @@ public enum SourceResponseCodeEnum { ALL_SUCCESS(25001,"校验成功"), FAIL(25002,"失败"), ALL_FAIL(25003,"校验失败"), - ALIGN_CHECK_FAIL(25007,"实时数据对齐校验未通过"), - + RECEIVE_DATA_TIME_OUT(25004,"接收数据超时") diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/param/ContrastDetectionParam.java b/detection/src/main/java/com/njcn/gather/detection/pojo/param/ContrastDetectionParam.java index 7102ae2d..4f895af8 100644 --- a/detection/src/main/java/com/njcn/gather/detection/pojo/param/ContrastDetectionParam.java +++ b/detection/src/main/java/com/njcn/gather/detection/pojo/param/ContrastDetectionParam.java @@ -36,7 +36,7 @@ public class ContrastDetectionParam { */ @ApiModelProperty("配对关系") @NotEmpty(message = DetectionValidMessage.PAIRS_NOT_EMPTY) - private Map pairs; + private Map pairs; /** * 检测项列表。第一个元素为预检测、第二个元素为系数校准、第三个元素为正式检测 */ 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 747f7051..7cec2dfd 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 @@ -104,6 +104,7 @@ public class DetectionServiceImpl { param.setErrorSysId(errorSysId); param.setUn(sourceIssue.getFUn()); param.setIn(sourceIssue.getFIn()); + SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); List errDtlsCheckData = pqErrSysDtlsService.listByPqErrSysIdAndTypes(param); ResultUnitEnum resultUnitEnumByCode = ResultUnitEnum.getResultUnitEnumByCode(sourceIssue.getType()); switch (resultUnitEnumByCode) { @@ -111,40 +112,40 @@ public class DetectionServiceImpl { * 频率 */ case FREQ: - return isQualified(dev, devIdMapComm, errDtlsCheckData, F, sourceIssue, dataRule, code); + return isQualified(dev, devIdMapComm, errDtlsCheckData, F, sourceIssue, dataRule, code, oneConfig.getScale()); /** * 电压 */ case V_RELATIVE: case V_ABSOLUTELY: - return isQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, code); + return isQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, code, oneConfig.getScale()); /** * 电流 */ case I_RELATIVE: case I_ABSOLUTELY: - return isQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, code); + return isQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, code, oneConfig.getScale()); /** * 谐波 */ case HV: case HI: - SimAndDigHarmonicResult harmV = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, HARMONIC_FLAG); - SimAndDigHarmonicResult harmI = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, HARMONIC_FLAG); + SimAndDigHarmonicResult harmV = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, HARMONIC_FLAG, oneConfig.getScale()); + SimAndDigHarmonicResult harmI = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, HARMONIC_FLAG, oneConfig.getScale()); return resultFlag(harmV, harmI, code); /** * 间谐波 */ case HSV: case HSI: - SimAndDigHarmonicResult harmInV = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, INHARMONIC_FLAG); - SimAndDigHarmonicResult harmInI = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, INHARMONIC_FLAG); + SimAndDigHarmonicResult harmInV = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, INHARMONIC_FLAG, oneConfig.getScale()); + SimAndDigHarmonicResult harmInI = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, INHARMONIC_FLAG, oneConfig.getScale()); return resultFlag(harmInV, harmInI, code); /** * 三相电压不平衡度 */ case IMBV: - SimAndDigNonHarmonicResult vUnban = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, "V_UNBAN"); + SimAndDigNonHarmonicResult vUnban = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, "V_UNBAN", oneConfig.getScale()); if (ObjectUtil.isNotNull(vUnban)) { detectionDataDealService.acceptNonHarmonicResult(Arrays.asList(vUnban), code); return vUnban.getResultFlag(); @@ -154,7 +155,7 @@ public class DetectionServiceImpl { * 三相电流不平衡度 */ case IMBA: - SimAndDigNonHarmonicResult iUnban = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, "I_UNBAN"); + SimAndDigNonHarmonicResult iUnban = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, "I_UNBAN", oneConfig.getScale()); if (ObjectUtil.isNotNull(iUnban)) { detectionDataDealService.acceptNonHarmonicResult(Arrays.asList(iUnban), code); return iUnban.getResultFlag(); @@ -164,7 +165,7 @@ public class DetectionServiceImpl { * 谐波有功功率 */ case HP: - SimAndDigHarmonicResult harmP = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, HP, sourceIssue, dataRule, 2); + SimAndDigHarmonicResult harmP = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, HP, sourceIssue, dataRule, 2, oneConfig.getScale()); if (ObjectUtil.isNotNull(harmP)) { detectionDataDealService.acceptHarmonicResult(Arrays.asList(harmP), code); return harmP.getResultFlag(); @@ -174,7 +175,7 @@ public class DetectionServiceImpl { * 闪变 */ case F: - SimAndDigNonHarmonicResult pst = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, null, sourceIssue, dataRule, "PST"); + SimAndDigNonHarmonicResult pst = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, null, sourceIssue, dataRule, "PST", oneConfig.getScale()); if (ObjectUtil.isNotNull(pst)) { detectionDataDealService.acceptNonHarmonicResult(Arrays.asList(pst), code); return pst.getResultFlag(); @@ -185,11 +186,11 @@ public class DetectionServiceImpl { */ case VOLTAGE_MAG: case VOLTAGE_DUR: - return isVoltageQualified(dev, devIdMapComm, errDtlsCheckData, sourceIssue, dataRule, code); + return isVoltageQualified(dev, devIdMapComm, errDtlsCheckData, sourceIssue, dataRule, code, oneConfig.getScale()); case P: - return isQualified(dev, devIdMapComm, errDtlsCheckData, P, sourceIssue, dataRule, code); + return isQualified(dev, devIdMapComm, errDtlsCheckData, P, sourceIssue, dataRule, code, oneConfig.getScale()); default: - return isUnknownQualified(dev, devIdMapComm, errDtlsCheckData, sourceIssue, dataRule, code); + return isUnknownQualified(dev, devIdMapComm, errDtlsCheckData, sourceIssue, dataRule, code, oneConfig.getScale()); } } @@ -213,7 +214,7 @@ public class DetectionServiceImpl { List errDtlsCheckData, SourceIssue sourceIssue, DictDataEnum dataRule, - String code) { + String code, Integer scale) { List info = new ArrayList<>(); List harmonicResultList = new ArrayList<>(); List devValueTypeList = sourceIssue.getDevValueTypeList(); @@ -247,9 +248,9 @@ public class DetectionServiceImpl { if (CollUtil.isNotEmpty(checkData)) { DetectionData detectionData; if (DUR.equals(devIndex)) { - detectionData = rangeDURComparisonList(value, isQualified, new ArrayList<>(), sourceIssue.getFFreq(), checkData.get(0).getValue(), dataRule); + detectionData = rangeDURComparisonList(value, isQualified, new ArrayList<>(), sourceIssue.getFFreq(), checkData.get(0).getValue(), dataRule, scale); } else { - detectionData = rangeComparisonList(value, isQualified, new ArrayList<>(), null, checkData.get(0).getValue(), dataRule); + detectionData = rangeComparisonList(value, isQualified, new ArrayList<>(), null, checkData.get(0).getValue(), dataRule, scale); } if (key.equals(TYPE_T)) { result.setTValue(JSON.toJSONString(detectionData)); @@ -322,9 +323,9 @@ public class DetectionServiceImpl { isQualified = 4; } //电压下百分比给百分比直接算 电流是是下百分比给的是幅值要转换算 - List integerBooleanA = harmRangeComparison(isQualified, new ArrayList<>(), type, TYPE_A, sourceIssue, dataRule, devHarmMap.get(TYPE_A), fData, num); - List integerBooleanB = harmRangeComparison(isQualified, new ArrayList<>(), type, TYPE_B, sourceIssue, dataRule, devHarmMap.get(TYPE_B), fData, num); - List integerBooleanC = harmRangeComparison(isQualified, new ArrayList<>(), type, TYPE_C, sourceIssue, dataRule, devHarmMap.get(TYPE_C), fData, num); + List integerBooleanA = harmRangeComparison(isQualified, new ArrayList<>(), type, TYPE_A, sourceIssue, dataRule, devHarmMap.get(TYPE_A), fData, num, scale); + List integerBooleanB = harmRangeComparison(isQualified, new ArrayList<>(), type, TYPE_B, sourceIssue, dataRule, devHarmMap.get(TYPE_B), fData, num, scale); + List integerBooleanC = harmRangeComparison(isQualified, new ArrayList<>(), type, TYPE_C, sourceIssue, dataRule, devHarmMap.get(TYPE_C), fData, num, scale); harmonicResult.setDataType(sourceIssue.getDataType()); reflectHarmonic("a", integerBooleanA, harmonicResult, num); reflectHarmonic("b", integerBooleanB, harmonicResult, num); @@ -367,7 +368,7 @@ public class DetectionServiceImpl { String type, SourceIssue sourceIssue, DictDataEnum dataRule, - String code) { + String code, Integer scale) { List info = new ArrayList<>(); List devValueTypeList = sourceIssue.getDevValueTypeList(); for (String s : devValueTypeList) { @@ -407,7 +408,7 @@ public class DetectionServiceImpl { if (map.containsKey(TYPE_T)) { List checkDataT = dtlsCheckData.stream().filter(x -> TYPE_T.equals(x.getPhase())).collect(Collectors.toList()); if (CollUtil.isNotEmpty(checkDataT)) { - DetectionData t = rangeComparisonList(map.get(TYPE_T), isQualified, pqErrSysDtls, fData, checkDataT.get(0).getValue(), dataRule); + DetectionData t = rangeComparisonList(map.get(TYPE_T), isQualified, pqErrSysDtls, fData, checkDataT.get(0).getValue(), dataRule, scale); result.setTValue(JSON.toJSONString(t)); result.setResultFlag(t.getIsData()); } @@ -426,7 +427,7 @@ public class DetectionServiceImpl { if (CollUtil.isNotEmpty(checkData)) { List phaseValue = map.get(phase); // 注意:如果map中不存在该phase的键,phaseValue可能为null,需确保map包含该键 - DetectionData detectionData = rangeComparisonList(phaseValue, isQualified, pqErrSysDtls, fData, checkData.get(0).getValue(), dataRule); + DetectionData detectionData = rangeComparisonList(phaseValue, isQualified, pqErrSysDtls, fData, checkData.get(0).getValue(), dataRule, scale); resultFlag.add(detectionData); BiConsumer setter = setters.get(phase); if (setter != null) { @@ -467,7 +468,7 @@ public class DetectionServiceImpl { String type, SourceIssue sourceIssue, DictDataEnum dataRule, - Integer num) { + Integer num, Integer scale) { Double fData = 1.0; String fundCode = ""; String harmCode = ""; @@ -516,9 +517,9 @@ public class DetectionServiceImpl { pqErrSysDtls = adDtlsCheckData.get(0).getErrSysDtls(); } } - List integerBooleanA = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_A, sourceIssue, dataRule, devMap.get(TYPE_A), fData, num); - List integerBooleanB = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_B, sourceIssue, dataRule, devMap.get(TYPE_B), fData, num); - List integerBooleanC = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_C, sourceIssue, dataRule, devMap.get(TYPE_C), fData, num); + List integerBooleanA = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_A, sourceIssue, dataRule, devMap.get(TYPE_A), fData, num, scale); + List integerBooleanB = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_B, sourceIssue, dataRule, devMap.get(TYPE_B), fData, num, scale); + List integerBooleanC = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_C, sourceIssue, dataRule, devMap.get(TYPE_C), fData, num, scale); harmonicResult.setDataType(sourceIssue.getDataType()); reflectHarmonic("a", integerBooleanA, harmonicResult, num); reflectHarmonic("b", integerBooleanB, harmonicResult, num); @@ -549,7 +550,7 @@ public class DetectionServiceImpl { String type, SourceIssue sourceIssue, DictDataEnum dataRule, - String code) { + String code, Integer scale) { List checkData = pqScriptCheckDataService.list(new MPJLambdaWrapper() .eq(PqScriptCheckData::getScriptIndex, sourceIssue.getIndex()) .eq(PqScriptCheckData::getScriptId, sourceIssue.getScriptId()) @@ -584,19 +585,19 @@ public class DetectionServiceImpl { List channelTypeAList = checkData.stream() .filter(x -> TYPE_A.equals(x.getPhase())) .collect(Collectors.toList()); - DetectionData a = rangeComparisonList(map.get(TYPE_A), isQualified, pqErrSysDtls, fData, channelTypeAList.get(0).getValue(), dataRule); + DetectionData a = rangeComparisonList(map.get(TYPE_A), isQualified, pqErrSysDtls, fData, channelTypeAList.get(0).getValue(), dataRule, scale); result.setAValue(JSON.toJSONString(a)); List channelTypeBList = checkData.stream() .filter(x -> TYPE_B.equals(x.getPhase())) .collect(Collectors.toList()); - DetectionData b = rangeComparisonList(map.get(TYPE_B), isQualified, pqErrSysDtls, fData, channelTypeBList.get(0).getValue(), dataRule); + DetectionData b = rangeComparisonList(map.get(TYPE_B), isQualified, pqErrSysDtls, fData, channelTypeBList.get(0).getValue(), dataRule, scale); result.setBValue(JSON.toJSONString(b)); List channelTypeCList = checkData.stream() .filter(x -> TYPE_C.equals(x.getPhase())) .collect(Collectors.toList()); - DetectionData c = rangeComparisonList(map.get(TYPE_C), isQualified, pqErrSysDtls, fData, channelTypeCList.get(0).getValue(), dataRule); + DetectionData c = rangeComparisonList(map.get(TYPE_C), isQualified, pqErrSysDtls, fData, channelTypeCList.get(0).getValue(), dataRule, scale); result.setCValue(JSON.toJSONString(c)); result.setResultFlag(setResultFlag(Arrays.asList(a, b, c))); @@ -604,7 +605,7 @@ public class DetectionServiceImpl { List channelTypeBList = checkData.stream() .filter(x -> TYPE_T.equals(x.getPhase())) .collect(Collectors.toList()); - DetectionData t = rangeComparisonList(map.get(TYPE_B), isQualified, pqErrSysDtls, fData, channelTypeBList.get(0).getValue(), dataRule); + DetectionData t = rangeComparisonList(map.get(TYPE_B), isQualified, pqErrSysDtls, fData, channelTypeBList.get(0).getValue(), dataRule, scale); result.setTValue(JSON.toJSONString(t)); result.setResultFlag(setResultFlag(Arrays.asList(t))); } @@ -637,7 +638,8 @@ public class DetectionServiceImpl { List errDtlsCheckData, SourceIssue sourceIssue, DictDataEnum dataRule, - String code + String code, + Integer scale ) { //电压幅值处理数据 Map> mag = devListMap(dev, dataRule, MAG); @@ -647,8 +649,8 @@ public class DetectionServiceImpl { //暂态电压下多少就是多少 List magErrList = errDtlsCheckData.stream().filter(x -> MAG.equals(x.getValueTypeCode())).collect(Collectors.toList()); List durErrList = errDtlsCheckData.stream().filter(x -> DUR.equals(x.getValueTypeCode())).collect(Collectors.toList()); - SimAndDigNonHarmonicResult magResult = voltageResult(dev.get(0).getId(), devIdMapComm, sourceIssue, dataRule, mag, magErrList, sourceIssue.getFUn(), MAG); - SimAndDigNonHarmonicResult durResult = voltageResult(dev.get(0).getId(), devIdMapComm, sourceIssue, dataRule, dur, durErrList, sourceIssue.getFFreq(), DUR); + SimAndDigNonHarmonicResult magResult = voltageResult(dev.get(0).getId(), devIdMapComm, sourceIssue, dataRule, mag, magErrList, sourceIssue.getFUn(), MAG, scale); + SimAndDigNonHarmonicResult durResult = voltageResult(dev.get(0).getId(), devIdMapComm, sourceIssue, dataRule, dur, durErrList, sourceIssue.getFFreq(), DUR, scale); if (CollUtil.isNotEmpty(mag.get(TYPE_B)) && CollUtil.isNotEmpty(mag.get(TYPE_C))) { conclusion(magResult, durResult); } @@ -741,7 +743,8 @@ public class DetectionServiceImpl { Map> mag, List errDtlsCheckData, Double fData, - String dur + String dur, + Integer scale ) { SimAndDigNonHarmonicResult result = new SimAndDigNonHarmonicResult(); String[] split = devId.split("_"); @@ -763,13 +766,13 @@ public class DetectionServiceImpl { .filter(x -> ("Ub").equals(x.getChannelType())) .collect(Collectors.toList()); - DetectionData b = setDetectionData(isQualified, dataRule, mag, fData, dur, magErrList, channelTypeBList, TYPE_B); + DetectionData b = setDetectionData(isQualified, dataRule, mag, fData, dur, magErrList, channelTypeBList, TYPE_B, scale); result.setBValue(JSON.toJSONString(b)); List channelTypeCList = sourceIssue.getChannelList().stream() .filter(x -> ("Uc").equals(x.getChannelType())) .collect(Collectors.toList()); - DetectionData c = setDetectionData(isQualified, dataRule, mag, fData, dur, magErrList, channelTypeCList, TYPE_C); + DetectionData c = setDetectionData(isQualified, dataRule, mag, fData, dur, magErrList, channelTypeCList, TYPE_C, scale); result.setCValue(JSON.toJSONString(c)); if (CollUtil.isNotEmpty(mag.get(TYPE_B)) && CollUtil.isNotEmpty(mag.get(TYPE_C))) { @@ -777,7 +780,7 @@ public class DetectionServiceImpl { List channelTypeAList = sourceIssue.getChannelList().stream() .filter(x -> ("Ua").equals(x.getChannelType())) .collect(Collectors.toList()); - DetectionData a = setDetectionData(isQualified, dataRule, mag, fData, dur, magErrList, channelTypeAList, TYPE_A); + DetectionData a = setDetectionData(isQualified, dataRule, mag, fData, dur, magErrList, channelTypeAList, TYPE_A, scale); result.setAValue(JSON.toJSONString(a)); result.setResultFlag(setResultFlag(Arrays.asList(a, b, c))); } else { @@ -789,7 +792,7 @@ public class DetectionServiceImpl { .orElse(Double.NaN) )) .collect(Collectors.toList()); - DetectionData a = setDetectionData(isQualified, dataRule, mag, fData, dur, magErrList, channelTypeAList, TYPE_A); + DetectionData a = setDetectionData(isQualified, dataRule, mag, fData, dur, magErrList, channelTypeAList, TYPE_A, scale); result.setAValue(JSON.toJSONString(a)); result.setTValue(JSON.toJSONString(a)); result.setResultFlag(a.getIsData()); @@ -804,12 +807,12 @@ public class DetectionServiceImpl { String dur, List magErrList, List channelTypeCList, - String type) { + String type, Integer scale) { DetectionData data; if (DUR.equals(dur)) { - data = rangeDURComparisonList(mag.get(type), isQualified, magErrList, fData, channelTypeCList.get(0).getDipData().getRetainTime(), dataRule); + data = rangeDURComparisonList(mag.get(type), isQualified, magErrList, fData, channelTypeCList.get(0).getDipData().getRetainTime(), dataRule, scale); } else { - data = rangeComparisonList(mag.get(type), isQualified, magErrList, fData, channelTypeCList.get(0).getDipData().getFTransValue(), dataRule); + data = rangeComparisonList(mag.get(type), isQualified, magErrList, fData, channelTypeCList.get(0).getDipData().getFTransValue(), dataRule, scale); } return data; } @@ -910,7 +913,7 @@ public class DetectionServiceImpl { try { // 设置 id 字段; Field idField = SimAndDigHarmonicResult.class.getDeclaredField(phase + "Value" + (num == 1 ? (int) (key + 0.5) : key.intValue())); - if(harmonicResult instanceof ContrastNonHarmonicResult){ + if (harmonicResult instanceof ContrastNonHarmonicResult) { idField = ContrastNonHarmonicResult.class.getDeclaredField(phase + "Value" + (num == 1 ? (int) (key + 0.5) : key.intValue())); } idField.setAccessible(true); @@ -937,6 +940,7 @@ public class DetectionServiceImpl { * @param devMap * @param fData 额定值 * @param harmonicFlag 1:间谐波,2:谐波 + * @param scale 小数点位数 * @return */ public List harmRangeComparison(Integer isQualified, @@ -946,7 +950,7 @@ public class DetectionServiceImpl { SourceIssue sourceIssue, DictDataEnum dataRule, Map> devMap, - Double fData, Integer harmonicFlag) { + Double fData, Integer harmonicFlag, Integer scale) { List info = new ArrayList<>(); //根据谐波几次相值/额定值 Map issueHarmMap; @@ -981,9 +985,9 @@ public class DetectionServiceImpl { Map errSysDtlMap = new LinkedHashMap<>(); issueHarmMap.forEach((key, value) -> { //获得误差体系 - List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), fData, value, x.getConditionType()), + List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), fData, value, x.getConditionType(), scale), x.getStartFlag(), - startRadiusEnd(x.getEndValue(), fData, value, x.getConditionType()), + startRadiusEnd(x.getEndValue(), fData, value, x.getConditionType(), scale), x.getEndFlag(), value)).collect(Collectors.toList()); if (CollUtil.isNotEmpty(errSysDtls)) { @@ -998,20 +1002,20 @@ public class DetectionServiceImpl { DetectionData data = new DetectionData(); data.setIsData(isQualified); data.setNum(harm); - SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); + if (CollUtil.isNotEmpty(harmDataList)) { BigDecimal bd = BigDecimal.valueOf(harmDataList.get(0)); - bd = bd.setScale(oneConfig.getScale(), RoundingMode.HALF_UP); + bd = bd.setScale(scale, RoundingMode.HALF_UP); data.setData(bd.doubleValue()); } Double channelData = issueHarmMap.get(harm); data.setResultData(channelData); if (ObjectUtil.isNotNull(errSysDtl)) { PqErrSysDtls errSys = BeanUtil.copyProperties(errSysDtl, PqErrSysDtls.class); - errSys.setMaxErrorValue(maxErrorMultiply(errSys, fData, issueHarmMap.get(harm), oneConfig.getScale())); + errSys.setMaxErrorValue(maxErrorMultiply(errSys, fData, issueHarmMap.get(harm), scale)); data.setUnit(errSysDtl.getErrorUnit()); data.setRadius(-errSys.getMaxErrorValue() + "~" + errSys.getMaxErrorValue()); - setDetection(dataRule, harmDataList, errSys, data, channelData, fData, oneConfig.getScale()); + setDetection(dataRule, harmDataList, errSys, data, channelData, fData, scale); } info.add(data); }); @@ -1019,11 +1023,10 @@ public class DetectionServiceImpl { return info; } - private void isData(DictDataEnum dataRule, List harmDataList, DetectionData data, List qualifiedList) { + private void isData(DictDataEnum dataRule, List harmDataList, DetectionData data, List qualifiedList, Integer scale) { if (CollUtil.isNotEmpty(qualifiedList)) { - SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); BigDecimal bd = BigDecimal.valueOf(qualifiedList.get(0)); - bd = bd.setScale(oneConfig.getScale(), RoundingMode.HALF_UP); + bd = bd.setScale(scale, RoundingMode.HALF_UP); data.setData(bd.doubleValue()); switch (dataRule) { case AT_WILL_VALUE: @@ -1042,7 +1045,7 @@ public class DetectionServiceImpl { } else { List subtract = CollectionUtils.subtract(harmDataList, qualifiedList).stream().collect(Collectors.toList()); bd = BigDecimal.valueOf(subtract.get(0)); - bd = bd.setScale(oneConfig.getScale(), RoundingMode.HALF_UP); + bd = bd.setScale(scale, RoundingMode.HALF_UP); data.setData(bd.doubleValue()); data.setIsData(2); } @@ -1154,48 +1157,46 @@ public class DetectionServiceImpl { * @param dataRule 数据处理原则 * @returnd */ - public DetectionData rangeComparisonList(List list, Integer isQualified, List pqErrSysDtls, Double data, Double channelData, DictDataEnum dataRule) { + public DetectionData rangeComparisonList(List list, Integer isQualified, List pqErrSysDtls, Double data, Double channelData, DictDataEnum dataRule, Integer scale) { DetectionData detectionData = new DetectionData(); detectionData.setIsData(isQualified); if (CollUtil.isNotEmpty(list)) { - SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); BigDecimal bd = BigDecimal.valueOf(list.get(0)); - bd = bd.setScale(oneConfig.getScale(), RoundingMode.HALF_UP); + bd = bd.setScale(scale, RoundingMode.HALF_UP); detectionData.setData(bd.doubleValue()); detectionData.setResultData(channelData); //先根据源所下发的数据,是否在误差体系范围内在则可以进行误差体系判断 //获得误差体系 - List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), data, channelData, x.getConditionType()), + List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), data, channelData, x.getConditionType(), scale), x.getStartFlag(), - startRadiusEnd(x.getEndValue(), data, channelData, x.getConditionType()), + startRadiusEnd(x.getEndValue(), data, channelData, x.getConditionType(), scale), x.getEndFlag(), channelData)).collect(Collectors.toList()); if (CollUtil.isNotEmpty(errSysDtls)) { PqErrSysDtls errSysDtl = BeanUtil.copyProperties(errSysDtls.get(0), PqErrSysDtls.class); detectionData.setUnit(errSysDtl.getErrorUnit()); - errSysDtl.setMaxErrorValue(maxErrorMultiply(errSysDtl, data, channelData, oneConfig.getScale())); + errSysDtl.setMaxErrorValue(maxErrorMultiply(errSysDtl, data, channelData, scale)); detectionData.setRadius(-errSysDtl.getMaxErrorValue() + "~" + errSysDtl.getMaxErrorValue()); - setDetection(dataRule, list, errSysDtl, detectionData, channelData, data, oneConfig.getScale()); + setDetection(dataRule, list, errSysDtl, detectionData, channelData, data, scale); } } return detectionData; } - public DetectionData rangeDURComparisonList(List list, Integer isQualified, List pqErrSysDtls, Double data, Double channelData, DictDataEnum dataRule) { + public DetectionData rangeDURComparisonList(List list, Integer isQualified, List pqErrSysDtls, Double data, Double channelData, DictDataEnum dataRule, Integer scale) { DetectionData detectionData = new DetectionData(); detectionData.setIsData(isQualified); if (CollUtil.isNotEmpty(list)) { - SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); BigDecimal bd = BigDecimal.valueOf(list.get(0)); - bd = bd.setScale(oneConfig.getScale(), RoundingMode.HALF_UP); + bd = bd.setScale(scale, RoundingMode.HALF_UP); detectionData.setData(bd.doubleValue()); detectionData.setResultData(BigDecimal.valueOf(1.0 / data).doubleValue() * channelData); //先根据源所下发的数据,是否在误差体系范围内在则可以进行误差体系判断 //获得误差体系 - List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), data, channelData, x.getConditionType()), + List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), data, channelData, x.getConditionType(), scale), x.getStartFlag(), - startRadiusEnd(x.getEndValue(), data, channelData, x.getConditionType()), + startRadiusEnd(x.getEndValue(), data, channelData, x.getConditionType(), scale), x.getEndFlag(), channelData)).collect(Collectors.toList()); if (CollUtil.isNotEmpty(errSysDtls)) { @@ -1213,14 +1214,14 @@ public class DetectionServiceImpl { ).collect(Collectors.toList()); if (CollUtil.isNotEmpty(qualifiedList)) { BigDecimal subtract = BigDecimal.valueOf(qualifiedList.get(0)) - .subtract(BigDecimal.valueOf(1.0 / data * (channelData))).setScale(oneConfig.getScale(), RoundingMode.HALF_UP); + .subtract(BigDecimal.valueOf(1.0 / data * (channelData))).setScale(scale, RoundingMode.HALF_UP); detectionData.setErrorData(subtract); } else { BigDecimal subtract = BigDecimal.valueOf(list.get(0)) - .subtract(BigDecimal.valueOf(1.0 / data * (channelData))).setScale(oneConfig.getScale(), RoundingMode.HALF_UP); + .subtract(BigDecimal.valueOf(1.0 / data * (channelData))).setScale(scale, RoundingMode.HALF_UP); detectionData.setErrorData(subtract); } - isData(dataRule, list, detectionData, qualifiedList); + isData(dataRule, list, detectionData, qualifiedList, scale); } } return detectionData; @@ -1306,16 +1307,15 @@ public class DetectionServiceImpl { * @param type 误差值类型 * @return */ - public Double startRadiusEnd(Double value, Double ratedData, Double harmData, Integer type) { - SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); + public Double startRadiusEnd(Double value, Double ratedData, Double harmData, Integer type, Integer scale) { if (ObjectUtil.isNotNull(value)) { switch (type) { case 0: return BigDecimal.valueOf(value).multiply(BigDecimal.valueOf(ratedData)) - .setScale(oneConfig.getScale(), RoundingMode.HALF_UP).doubleValue(); - case 1: //无用 + .setScale(scale, RoundingMode.HALF_UP).doubleValue(); + case 1: return BigDecimal.valueOf(value).multiply(BigDecimal.valueOf(harmData)) - .setScale(oneConfig.getScale(), RoundingMode.HALF_UP).doubleValue(); + .setScale(scale, RoundingMode.HALF_UP).doubleValue(); default: return value; } @@ -1406,7 +1406,7 @@ public class DetectionServiceImpl { } } } else { - Map> integerListMap = new LinkedHashMap<>(5); + Map> integerListMap = new LinkedHashMap<>(50); for (Double i : harmNum) { List integerList = new ArrayList<>(); if (i.equals(1.0) && num != 1) { @@ -1443,20 +1443,22 @@ public class DetectionServiceImpl { * * @param devDataList 被检设备数据 * @param standardDevDataList 与之对齐的标准设备数据 - * @param pars 配对关系 + * @param pars 配对关系 key为被检设备ip_通道号,value为标准设备ip_通道号 * @param devIdMapComm 设备id映射关系 key为被检设备ip,value为被检设备id * @param monitorMap 监测器映射关系 key为被检设备ip_通道号,value为监测器信息 + * @param testItemCodeList 检测项code列表 + * @param errorSysId 误差体系id * @param dataRule 数据处理原则 * @param num 第几次检测 * @param code 结果表code - * @return key为被检设备id、value为是否合格(1合格 2不合格 4无法处理) + * @return key为被检设备ip_通道号、value为是否合格(1合格 2不合格 4无法处理) */ - public Map processing(List devDataList, List standardDevDataList, Map pars, Map devIdMapComm, Map monitorMap, List testItemCodeList, List dtlsCheckData, String errorSysId, DictDataEnum dataRule, Integer num, String code) { + public Map processing(List devDataList, List standardDevDataList, Map pars, Map devIdMapComm, Map monitorMap, List testItemCodeList, String errorSysId, DictDataEnum dataRule, Integer num, String code) { Map> devDataMap = devDataList.stream().collect(Collectors.groupingBy(DevData::getId)); Map> standardDevDataMap = standardDevDataList.stream().collect(Collectors.groupingBy(DevData::getId)); Map resultMap = new LinkedHashMap<>(); - pars.forEach((standardDevMoniterId, devMoniterId) -> { + pars.forEach((devMoniterId, standardDevMoniterId) -> { resultMap.put(devMoniterId, dataProcessing(devDataMap.get(devMoniterId), standardDevDataMap.get(standardDevMoniterId), devIdMapComm, testItemCodeList, monitorMap.get(devMoniterId), errorSysId, dataRule, num, code)); }); @@ -1466,8 +1468,12 @@ public class DetectionServiceImpl { private Integer dataProcessing(List devDataList, List standardDevDataList, Map devIdMapComm, List testItemCodeList, PreDetection.MonitorListDTO monitorDto, String errorSysId, DictDataEnum dataRule, Integer num, String code) { if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList)) { for (String testItemCode : testItemCodeList) { + if ("real$U1".equals(testItemCode) || "real$I1".equals(testItemCode)) { + continue; + } String[] split = testItemCode.split("\\$"); + SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); List pqErrSysDtls = pqErrSysDtlsService.listPqErrSysDtlsByPqErrSysIdAndScriptType(errorSysId, split[1]); DetectionCodeEnum anEnum = DetectionCodeEnum.getDetectionCodeByCode(split[1]); Double fUn = Double.valueOf(monitorDto.getPtStr().split(":")[1]); @@ -1475,27 +1481,27 @@ public class DetectionServiceImpl { Double fHz = 50.0; switch (anEnum) { case FREQ: - return isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fHz, DetectionCodeEnum.FREQ.getCode(), dataRule, num, code); + return isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fHz, DetectionCodeEnum.FREQ.getCode(), dataRule, num, code, oneConfig.getScale()); case VRMS: - return isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fUn, DetectionCodeEnum.VRMS.getCode(), dataRule, num, code); + return isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fUn, DetectionCodeEnum.VRMS.getCode(), dataRule, num, code, oneConfig.getScale()); case IRMS: - return isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fIn, DetectionCodeEnum.IRMS.getCode(), dataRule, num, code); + return isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fIn, DetectionCodeEnum.IRMS.getCode(), dataRule, num, code, oneConfig.getScale()); case V_UNBAN: - return isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fUn, DetectionCodeEnum.V_UNBAN.getCode(), dataRule, num, code); + break; case I_UNBAN: - return isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fIn, DetectionCodeEnum.I_UNBAN.getCode(), dataRule, num, code); - //case U1: + break; case V2_50: - ContrastHarmonicResult harmV = isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fUn, fIn, DetectionCodeEnum.V2_50.getCode(), dataRule, num, HARMONIC_FLAG); + ContrastHarmonicResult harmV = isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fUn, fIn, U, dataRule, num, HARMONIC_FLAG, oneConfig.getScale()); return resultFlag(harmV, null, code); - //case I1: case I2_50: - ContrastHarmonicResult harmI = isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fUn, fIn, DetectionCodeEnum.V2_50.getCode(), dataRule, num, HARMONIC_FLAG); + ContrastHarmonicResult harmI = isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fUn, fIn, I, dataRule, num, HARMONIC_FLAG, oneConfig.getScale()); return resultFlag(null, harmI, code); - case MAG: - break; - case DUR: - break; + case SV_1_49: + ContrastHarmonicResult harmSV = isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fUn, fIn, U, dataRule, num, INHARMONIC_FLAG, oneConfig.getScale()); + return resultFlag(harmSV, null, code); + case SI_1_49: + ContrastHarmonicResult harmSI = isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fUn, fIn, I, dataRule, num, INHARMONIC_FLAG, oneConfig.getScale()); + return resultFlag(null, harmSI, code); case UNKNOWN_ERROR: break; } @@ -1527,7 +1533,7 @@ public class DetectionServiceImpl { String desc, DictDataEnum dataRule, Integer num, - String code) { + String code, Integer scale) { List info = new ArrayList<>(); if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList) && CollUtil.isNotEmpty(errSysDtls)) { @@ -1543,7 +1549,7 @@ public class DetectionServiceImpl { Integer isQualified = 4; if (map.containsKey(TYPE_T)) { - DetectionData t = rangeComparisonList(map.get(TYPE_T).get(0), isQualified, errSysDtls, fData, map.get(TYPE_T).get(1).get(0), dataRule); + DetectionData t = rangeComparisonList(map.get(TYPE_T).get(0), isQualified, errSysDtls, fData, map.get(TYPE_T).get(1).get(0), dataRule, scale); result.setTValue(JSON.toJSONString(t)); result.setResultFlag(t.getIsData()); } else { @@ -1556,7 +1562,7 @@ public class DetectionServiceImpl { List phases = Arrays.asList(TYPE_A, TYPE_B, TYPE_C); for (String phase : phases) { List phaseValue = map.get(phase).get(0); - DetectionData detectionData = rangeComparisonList(phaseValue, isQualified, errSysDtls, fData, map.get(phase).get(1).get(0), dataRule); + DetectionData detectionData = rangeComparisonList(phaseValue, isQualified, errSysDtls, fData, map.get(phase).get(1).get(0), dataRule, scale); resultFlag.add(detectionData); BiConsumer setter = setters.get(phase); setter.accept(result, detectionData); @@ -1600,7 +1606,7 @@ public class DetectionServiceImpl { String type, DictDataEnum dataRule, Integer num, - Integer harmonicFlag) { + Integer harmonicFlag, Integer scale) { Double fData = 1.0; String fundCode = ""; String harmCode = ""; @@ -1637,12 +1643,12 @@ public class DetectionServiceImpl { harmonicResult.setAdType(errSysDtls.get(0).getScriptType()); harmonicResult.setNum(num); harmonicResult.setDataType(DataSourceEnum.REAL_DATA.getValue()); - List pqErrSysDtls = new ArrayList<>(); +// List pqErrSysDtls = new ArrayList<>(); Integer isQualified = 4; - List integerBooleanA = harmRangeComparison(isQualified, pqErrSysDtls, dataRule, devMap.get(TYPE_A).get(0), devMap.get(TYPE_A).get(1), fData); - List integerBooleanB = harmRangeComparison(isQualified, pqErrSysDtls, dataRule, devMap.get(TYPE_B).get(0), devMap.get(TYPE_A).get(1), fData); - List integerBooleanC = harmRangeComparison(isQualified, pqErrSysDtls, dataRule, devMap.get(TYPE_C).get(0), devMap.get(TYPE_A).get(1), fData); + List integerBooleanA = harmRangeComparison(isQualified, errSysDtls, dataRule, devMap.get(TYPE_A).get(0), devMap.get(TYPE_A).get(1), fData, scale); + List integerBooleanB = harmRangeComparison(isQualified, errSysDtls, dataRule, devMap.get(TYPE_B).get(0), devMap.get(TYPE_A).get(1), fData, scale); + List integerBooleanC = harmRangeComparison(isQualified, errSysDtls, dataRule, devMap.get(TYPE_C).get(0), devMap.get(TYPE_A).get(1), fData, scale); harmonicResult.setDataType(DataSourceEnum.REAL_DATA.getValue()); reflectHarmonic("a", integerBooleanA, harmonicResult, harmonicFlag); reflectHarmonic("b", integerBooleanB, harmonicResult, harmonicFlag); @@ -1681,7 +1687,7 @@ public class DetectionServiceImpl { List aDev = devList.stream().filter(x -> ObjectUtil.isNotNull(x.getA())) .map(x -> x.getA().doubleValue()) .collect(Collectors.toList()); - List aIdxs = DetectionUtil.sort(aDev); + List aIdxs = DetectionUtil.sort(aDev, false); List aStandardDev = standardDevList.stream().filter(x -> ObjectUtil.isNotNull(x.getA())) .map(x -> x.getA().doubleValue()) .collect(Collectors.toList()); @@ -1689,7 +1695,7 @@ public class DetectionServiceImpl { List bDev = devList.stream().filter(x -> ObjectUtil.isNotNull(x.getB())) .map(x -> x.getB().doubleValue()) .collect(Collectors.toList()); - List bIdxs = DetectionUtil.sort(bDev); + List bIdxs = DetectionUtil.sort(bDev, false); List bStandardDev = standardDevList.stream().filter(x -> ObjectUtil.isNotNull(x.getB())) .map(x -> x.getB().doubleValue()) .collect(Collectors.toList()); @@ -1697,7 +1703,7 @@ public class DetectionServiceImpl { List cDev = devList.stream().filter(x -> ObjectUtil.isNotNull(x.getC())) .map(x -> x.getC().doubleValue()) .collect(Collectors.toList()); - List cIdxs = DetectionUtil.sort(cDev); + List cIdxs = DetectionUtil.sort(cDev, false); List cStandardDev = standardDevList.stream().filter(x -> ObjectUtil.isNotNull(x.getC())) .map(x -> x.getC().doubleValue()) .collect(Collectors.toList()); @@ -1705,7 +1711,7 @@ public class DetectionServiceImpl { List tDev = devList.stream().filter(x -> ObjectUtil.isNotNull(x.getT())) .map(x -> x.getT().doubleValue()) .collect(Collectors.toList()); - List tIdxs = DetectionUtil.sort(tDev); + List tIdxs = DetectionUtil.sort(tDev, false); List tStandardDev = standardDevList.stream().filter(x -> ObjectUtil.isNotNull(x.getT())) .map(x -> x.getT().doubleValue()) .collect(Collectors.toList()); @@ -1799,6 +1805,7 @@ public class DetectionServiceImpl { DictDataEnum dataRule) { Map>>> resultMap = new HashMap<>(3); + // key为相别、value{key为谐波次数,value为按数据处理原则处理后的数据} Map>> devMap = new HashMap<>(3); Map>> standardDevMap = new HashMap<>(3); @@ -1849,9 +1856,8 @@ public class DetectionServiceImpl { } devMap.forEach((typeKey, typeValue) -> { typeValue.forEach((key, value) -> { - value.sort(Comparator.comparing(Double::doubleValue).reversed()); if (CollUtil.isNotEmpty(value)) { - List idx = DetectionUtil.sort(value); + List idx = DetectionUtil.sort(value, false); switch (dataRule) { case SECTION_VALUE: if (value.size() > 2) { @@ -1863,16 +1869,15 @@ public class DetectionServiceImpl { break; case CP95_VALUE: int cp95Idx = DetectionUtil.getCP95Idx(value); - value = Collections.singletonList(value.get(cp95Idx)); + value.clear(); + value.addAll(Collections.singletonList(value.get(cp95Idx))); Double standardCP95Data = standardDevMap.get(typeKey).get(key).get(cp95Idx); standardDevMap.get(typeKey).get(key).clear(); standardDevMap.get(typeKey).get(key).add(standardCP95Data); break; case AVG_VALUE: -// double average = value.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); -// value.clear(); // 清空列表 -// value.add(average); // 添加平均值 - value = DetectionUtil.getAvgDoubles(value); + value.clear(); + value.addAll(DetectionUtil.getAvgDoubles(value)); List standardAvgData = DetectionUtil.getAvgDoubles(standardDevMap.get(typeKey).get(key)); standardDevMap.get(typeKey).get(key).clear(); standardDevMap.get(typeKey).get(key).addAll(standardAvgData); @@ -1902,17 +1907,17 @@ public class DetectionServiceImpl { DictDataEnum dataRule, Map> devMap, Map> standardDevMap, - Double fData) { + Double fData, Integer scale) { List info = new ArrayList<>(); - //根据谐波几次相值/额定值 + //key为(间)谐波次数,value为标准设备数据 Map issueHarmMap = standardDevMap.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, x -> x.getValue().get(0))); Map errSysDtlMap = new LinkedHashMap<>(); issueHarmMap.forEach((key, value) -> { //获得误差体系 - List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), fData, value, x.getConditionType()), + List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), fData, value, x.getConditionType(), scale), x.getStartFlag(), - startRadiusEnd(x.getEndValue(), fData, value, x.getConditionType()), + startRadiusEnd(x.getEndValue(), fData, value, x.getConditionType(), scale), x.getEndFlag(), value)).collect(Collectors.toList()); if (CollUtil.isNotEmpty(errSysDtls)) { @@ -1927,20 +1932,19 @@ public class DetectionServiceImpl { DetectionData data = new DetectionData(); data.setIsData(isQualified); data.setNum(harm); - SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); if (CollUtil.isNotEmpty(harmDataList)) { BigDecimal bd = BigDecimal.valueOf(harmDataList.get(0)); - bd = bd.setScale(oneConfig.getScale(), RoundingMode.HALF_UP); + bd = bd.setScale(scale, RoundingMode.HALF_UP); data.setData(bd.doubleValue()); } Double channelData = issueHarmMap.get(harm); data.setResultData(channelData); if (ObjectUtil.isNotNull(errSysDtl)) { PqErrSysDtls errSys = BeanUtil.copyProperties(errSysDtl, PqErrSysDtls.class); - errSys.setMaxErrorValue(maxErrorMultiply(errSys, fData, issueHarmMap.get(harm), oneConfig.getScale())); + errSys.setMaxErrorValue(maxErrorMultiply(errSys, fData, issueHarmMap.get(harm), scale)); data.setUnit(errSysDtl.getErrorUnit()); data.setRadius(-errSys.getMaxErrorValue() + "~" + errSys.getMaxErrorValue()); - setDetection(dataRule, harmDataList, errSys, data, channelData, fData, oneConfig.getScale()); + setDetection(dataRule, harmDataList, errSys, data, channelData, fData, scale); } info.add(data); }); @@ -1960,14 +1964,13 @@ public class DetectionServiceImpl { * @param dataRule * @return */ - public DetectionData rangeComparisonList(List devData, List standardDevData, Integer isQualified, List pqErrSysDtls, Double fData, DictDataEnum dataRule) { + public DetectionData rangeComparisonList(List devData, List standardDevData, Integer isQualified, List pqErrSysDtls, Double fData, DictDataEnum dataRule, Integer scale) { DetectionData detectionData = new DetectionData(); detectionData.setIsData(isQualified); if (CollUtil.isNotEmpty(devData)) { - SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); BigDecimal bd = BigDecimal.valueOf(devData.get(0)); - bd = bd.setScale(oneConfig.getScale(), RoundingMode.HALF_UP); + bd = bd.setScale(scale, RoundingMode.HALF_UP); detectionData.setData(bd.doubleValue()); detectionData.setResultData(standardDevData.get(0)); @@ -1976,9 +1979,9 @@ public class DetectionServiceImpl { for (int i = 0; i < devData.size(); i++) { int finalI = i; - List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), fData, standardDevData.get(finalI), x.getConditionType()), + List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), fData, standardDevData.get(finalI), x.getConditionType(), scale), x.getStartFlag(), - startRadiusEnd(x.getEndValue(), fData, standardDevData.get(finalI), x.getConditionType()), + startRadiusEnd(x.getEndValue(), fData, standardDevData.get(finalI), x.getConditionType(), scale), x.getEndFlag(), devData.get(finalI))).collect(Collectors.toList()); @@ -2061,7 +2064,7 @@ public class DetectionServiceImpl { } else { data.setErrorData(devSubtractChannelData(harmDataList.get(0), channelData, ratedValue, errSysDtl, scale)); } - isData(dataRule, harmDataList, data, qualifiedList); + isData(dataRule, harmDataList, data, qualifiedList,scale); } } } 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 9661371d..919cf63a 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 @@ -316,7 +316,7 @@ public class PreDetectionServiceImpl implements PreDetectionService { checkDevIp(param.getDevIds()); socketContrastResponseService.init(param); //用于处理异常导致的socket通道未关闭,socket交互异常 - DetectionCommunicateUtil.checkContrastCommunicateChannel(param.getLoginName()); + //DetectionCommunicateUtil.checkContrastCommunicateChannel(param.getLoginName()); // 和通信模块进行连接 this.sendContrastSocket(param); 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 1a6bdd41..03cd5165 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 @@ -195,18 +195,25 @@ public class DetectionUtil { } /** - * 对list进行从大到小排序,并返回排序后的索引序列 + * 对list进行排序,并返回排序后的索引序列 * * @param list + * @param isAsc 是否升序 * @return */ - public static List sort(List list) { + public static List sort(List list, Boolean isAsc) { List indexList = Stream.iterate(0, i -> i + 1).limit(list.size()).collect(Collectors.toList()); for (int i = 0; i < list.size(); i++) { int maxIdx = i; for (int j = i + 1; j < list.size(); j++) { - if (list.get(j) > list.get(maxIdx)) { - maxIdx = j; + if (isAsc) { + if (list.get(j) < list.get(maxIdx)) { + maxIdx = j; + } + } else { + if (list.get(j) > list.get(maxIdx)) { + maxIdx = j; + } } } if (maxIdx != i) { diff --git a/detection/src/main/java/com/njcn/gather/detection/util/business/DetectionCommunicateUtil.java b/detection/src/main/java/com/njcn/gather/detection/util/business/DetectionCommunicateUtil.java index 8a415a96..5c24fcfa 100644 --- a/detection/src/main/java/com/njcn/gather/detection/util/business/DetectionCommunicateUtil.java +++ b/detection/src/main/java/com/njcn/gather/detection/util/business/DetectionCommunicateUtil.java @@ -62,18 +62,18 @@ public class DetectionCommunicateUtil { * * @param loginName */ - public static void checkContrastCommunicateChannel(String loginName) { - Channel channel = SocketManager.getChannelByUserId(loginName + CnSocketUtil.CONTRAST_DEV_TAG); - - if (Objects.nonNull(channel) && channel.isActive()) { - System.out.println("存在已有的Socket通道,强行关闭。。。。。。。。"); - CnSocketUtil.contrastSendquit(loginName); - SocketManager.removeUser(loginName + CnSocketUtil.CONTRAST_DEV_TAG); - try { - Thread.sleep(4000); - } catch (InterruptedException e) { - log.error(e.getMessage()); - } - } - } +// public static void checkContrastCommunicateChannel(String loginName) { +// Channel channel = SocketManager.getChannelByUserId(loginName + CnSocketUtil.CONTRAST_DEV_TAG); +// +// if (Objects.nonNull(channel) && channel.isActive()) { +// System.out.println("存在已有的Socket通道,强行关闭。。。。。。。。"); +// CnSocketUtil.contrastSendquit(loginName); +// SocketManager.removeUser(loginName + CnSocketUtil.CONTRAST_DEV_TAG); +// try { +// Thread.sleep(4000); +// } catch (InterruptedException e) { +// log.error(e.getMessage()); +// } +// } +// } } diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/CnSocketUtil.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/CnSocketUtil.java index 2dc913d9..52830f3a 100644 --- a/detection/src/main/java/com/njcn/gather/detection/util/socket/CnSocketUtil.java +++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/CnSocketUtil.java @@ -5,7 +5,6 @@ import com.alibaba.fastjson.JSONObject; import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum; import com.njcn.gather.detection.pojo.param.PreDetectionParam; import com.njcn.gather.detection.pojo.vo.SocketMsg; -import com.njcn.gather.detection.pojo.vo.WebSocketVO; import com.njcn.gather.detection.util.socket.websocket.WebServiceManager; /** @@ -58,13 +57,14 @@ public class CnSocketUtil { /** * 比对式-退出检测 */ - public static void contrastSendquit(String loginName) { + public static void contrastSendquit(String loginName,boolean isRemoveSocket) { System.out.println("比对式-发送关闭备通讯模块指令。。。。。。。。"); SocketMsg socketMsg = new SocketMsg<>(); socketMsg.setRequestId(SourceOperateCodeEnum.QUITE.getValue()); socketMsg.setOperateCode(SourceOperateCodeEnum.QUIT_INIT_02.getValue()); SocketManager.sendMsg(loginName + CONTRAST_DEV_TAG, JSON.toJSONString(socketMsg)); - WebServiceManager.removePreDetectionParam(loginName); - FormalTestManager.currentStep=SourceOperateCodeEnum.QUITE; +// WebServiceManager.removePreDetectionParam(); + FormalTestManager.isRemoveSocket = isRemoveSocket; + FormalTestManager.currentStep = SourceOperateCodeEnum.QUITE; } } 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 729abcb0..7bc525ad 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 @@ -62,7 +62,7 @@ public class FormalTestManager { /** * key:设备ip,value:装置id */ - public static Map devIdMapComm = HashBiMap.create(); + public static HashBiMap devIdMapComm = HashBiMap.create(); /** * 停止触发标识 @@ -105,7 +105,7 @@ public class FormalTestManager { public static DictDataEnum dataRule; /** - * 所有参与比对式检测的被检设备、标准设备配对关系。key:被检设备id_通道号,value:标准设备id_通道号 + * 所有参与比对式检测的被检设备、标准设备配对关系。key:被检设备ip_通道号,value:标准设备ip_通道号 */ public static HashBiMap pairsMap = HashBiMap.create(); @@ -118,4 +118,9 @@ public class FormalTestManager { * 标准设备的数据。key:设备ip_通道号,value:DevData数据集合 */ public static Map> standardDevDataMap = new HashMap<>(); + + /** + * 是否要移除和通信模块的socket连接 + */ + public static Boolean isRemoveSocket = true; } 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 bb473a54..287979f4 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 @@ -71,7 +71,7 @@ public class MsgUtil { * * @param devMonitorId * @param standardDevId - * @param devMap + * @param devMap key为设备ip,value为设备名称 * @return */ public static String getPairStr(String devMonitorId, String standardDevId, Map devMap) { @@ -80,7 +80,7 @@ public class MsgUtil { } else { String[] split1 = devMonitorId.split("_"); String[] split2 = standardDevId.split("_"); - return "被检设备" + devMap.get(split1[0]) + CnSocketUtil.SPLIT_TAG + split1[1] + "路" + " -> 标准设备" + devMap.get(split2[0]) + CnSocketUtil.SPLIT_TAG + split2[1] + "路"; + return "被检设备\"" + devMap.get(split1[0]) + CnSocketUtil.SPLIT_TAG + split1[1] + "路\"" + " -> 标准设备\"" + devMap.get(split2[0]) + CnSocketUtil.SPLIT_TAG + split2[1] + "路\""; } } } diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/SocketManager.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/SocketManager.java index 0a0dcb1d..8bd10557 100644 --- a/detection/src/main/java/com/njcn/gather/detection/util/socket/SocketManager.java +++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/SocketManager.java @@ -246,7 +246,7 @@ public class SocketManager { * @param userId 用户ID * @return boolean true:连接活跃, false:连接不存在或不活跃 */ - private static boolean isChannelActive(String userId) { + public static boolean isChannelActive(String userId) { Channel channel = getChannelByUserId(userId); return ObjectUtil.isNotNull(channel) && channel.isActive(); } diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyClient.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyClient.java index 9954f6f1..b648b76e 100644 --- a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyClient.java +++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyClient.java @@ -126,6 +126,7 @@ public class NettyClient { private void connectToContrast(String ip, Integer port, ContrastDetectionParam param, String msg) { PreDetectionParam preDetectionParam = new PreDetectionParam(); preDetectionParam.setUserPageId(param.getLoginName()); + preDetectionParam.setTestItemList(param.getTestItemList()); NettyContrastClientHandler handler = new NettyContrastClientHandler(preDetectionParam, socketContrastResponseService); executeSocketConnection(ip, port, preDetectionParam, msg, handler); } @@ -468,8 +469,6 @@ public class NettyClient { if (handler instanceof NettyDevClientHandler) { // 被检设备异常时,发送程控源退出指令 CnSocketUtil.quitSendSource(param); - } else if (handler instanceof NettyContrastClientHandler) { - CnSocketUtil.contrastSendquit(param.getUserPageId()); } // 程控源处理器异常时无需额外操作 } 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 07d5c9e7..9f4788c2 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,9 +1,16 @@ package com.njcn.gather.detection.util.socket.cilent; +import com.alibaba.fastjson.JSON; import com.njcn.gather.detection.handler.SocketContrastResponseService; import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum; +import com.njcn.gather.detection.pojo.enums.SourceResponseCodeEnum; import com.njcn.gather.detection.pojo.param.PreDetectionParam; +import com.njcn.gather.detection.pojo.vo.DevLineTestResult; +import com.njcn.gather.detection.pojo.vo.SocketDataMsg; +import com.njcn.gather.detection.pojo.vo.WebSocketVO; import com.njcn.gather.detection.util.socket.CnSocketUtil; +import com.njcn.gather.detection.util.socket.FormalTestManager; +import com.njcn.gather.detection.util.socket.MsgUtil; import com.njcn.gather.detection.util.socket.SocketManager; import com.njcn.gather.detection.util.socket.websocket.WebServiceManager; import com.njcn.gather.plan.pojo.enums.DataSourceEnum; @@ -14,17 +21,21 @@ import io.netty.handler.timeout.IdleState; import io.netty.handler.timeout.IdleStateEvent; import io.netty.handler.timeout.TimeoutException; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import java.io.IOException; import java.net.ConnectException; import java.net.ProtocolException; import java.time.LocalDateTime; +import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * @author caozehui * @data 2025-07-25 */ +@Slf4j @RequiredArgsConstructor public class NettyContrastClientHandler extends SimpleChannelInboundHandler { @@ -48,12 +59,12 @@ public class NettyContrastClientHandler extends SimpleChannelInboundHandler>>>>>" + msg); + log.info("contrastdevhandler接收server端数据: {}", msg); try { socketContrastResponseService.deal(param, msg); } catch (Exception e) { - e.printStackTrace(); - CnSocketUtil.contrastSendquit(param.getUserPageId()); + log.error("处理服务端消息异常", e); + CnSocketUtil.contrastSendquit(param.getUserPageId(), true); } } @@ -77,12 +88,15 @@ public class NettyContrastClientHandler extends SimpleChannelInboundHandler= 60) { - CnSocketUtil.contrastSendquit(param.getUserPageId()); - System.out.println("超时处理-----》" + "实时数据已超时----------------关闭"); - timeoutSend(); + if (FormalTestManager.isRemoveSocket) { + //实时数据 + if (SocketManager.contrastClockMap.get(DataSourceEnum.REAL_DATA) >= 60) { + CnSocketUtil.contrastSendquit(param.getUserPageId(), false); + System.out.println("超时处理-----》" + "实时数据已超时----------------关闭"); + timeoutSend(); + } } + } } } @@ -112,7 +126,7 @@ public class NettyContrastClientHandler extends SimpleChannelInboundHandler负责处理电能质量检测系统中的WebSocket连接和消息通信,主要功能包括:

*
    *
  • WebSocket连接的建立、维护和断开
  • @@ -32,34 +33,33 @@ import static com.njcn.gather.detection.util.socket.websocket.WebSocketConstants *
  • 检测状态和结果的实时推送
  • *
  • 异常处理和资源清理
  • *
- * + * *

通信协议:

*
  * 连接URL: ws://host:port/path?name=userId
  * 心跳消息: "alive" -> "over"
  * 业务消息: JSON格式的检测数据和状态信息
  * 
- * + * *

安全策略:

*
    *
  • 连接时必须提供有效的userId参数,否则拒绝连接
  • *
  • 支持心跳超时检测,超时3次自动断开连接
  • *
  • 连接断开时自动清理相关Socket资源
  • *
- * + * *

使用场景:

* 主要用于前端实时接收检测进度、检测结果、设备状态等信息的推送, * 配合detection模块的ResponseService类实现完整的实时通信链路。 - * + * * @author wr - * @date 2024/12/10 13:56 * @version 1.0 - * @since 检测系统 v2.3.12 - * + * @date 2024/12/10 13:56 * @see WebServiceManager 会话管理器 * @see WebSocketConstants 常量定义 * @see com.njcn.gather.detection.handler.SocketDevResponseService 设备响应处理 * @see com.njcn.gather.detection.handler.SocketSourceResponseService 源响应处理 + * @since 检测系统 v2.3.12 */ @@ -67,19 +67,19 @@ import static com.njcn.gather.detection.util.socket.websocket.WebSocketConstants public class WebSocketHandler extends SimpleChannelInboundHandler { // ================================ 字段定义 ================================ - + /** * 心跳超时计数器 */ private int times; - + /** * 当前WebSocket连接对应的用户ID * 在首次HTTP握手时从URL参数中提取并存储 * 用于后续的Socket连接管理和资源清理 */ private String userId; - + /** * 心跳响应内容常量 * 注意:不能预创建TextWebSocketFrame对象,因为ByteBuf状态会改变 @@ -120,7 +120,7 @@ public class WebSocketHandler extends SimpleChannelInboundHandlervalueOf("userId")).get(); - - log.info("WebSocket协议升级完成,userId: {}, channelId: {}, requestUri: {}", + + log.info("WebSocket协议升级完成,userId: {}, channelId: {}, requestUri: {}", this.userId, ctx.channel().id(), handshakeComplete.requestUri()); - + // 握手完成后建立用户会话 if (this.userId != null) { WebServiceManager.addUser(this.userId, ctx.channel()); log.info("WebSocket用户会话已建立,userId: {}, channelId: {}", this.userId, ctx.channel().id()); } - + // 发送连接成功消息给前端 sendConnectionSuccessMessage(ctx); return; } - + // 处理心跳超时事件 if (evt instanceof IdleStateEvent) { IdleStateEvent event = (IdleStateEvent) evt; @@ -184,7 +184,7 @@ public class WebSocketHandler extends SimpleChannelInboundHandler