From 0b35ce08b07f747fcee53c8c82d2c4fcd1175d25 Mon Sep 17 00:00:00 2001 From: chendaofei <857448963@qq.com> Date: Thu, 9 Jan 2025 14:44:48 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PreDetectionController.java | 4 +- .../handler/SocketDevResponseService.java | 216 +++++++++++------- .../handler/SocketSourceResponseService.java | 6 +- .../pojo/enums/DetectionResponseEnum.java | 4 +- .../pojo/enums/SourceOperateCodeEnum.java | 7 +- .../pojo/enums/SourceResponseCodeEnum.java | 1 + .../gather/detection/pojo/vo/WebSocketVO.java | 2 +- .../service/impl/PreDetectionServiceImpl.java | 24 +- .../util/socket/FormalTestManager.java | 32 ++- .../util/socket/cilent/NettyClient.java | 13 +- .../cilent/NettySourceClientHandler.java | 2 +- .../plan/service/impl/AdPlanServiceImpl.java | 7 +- storage/README.md | 3 + .../storage/service/TableGenService.java | 1 + .../service/impl/TableGenServiceImpl.java | 8 +- 15 files changed, 211 insertions(+), 119 deletions(-) create mode 100644 storage/README.md diff --git a/detection/src/main/java/com/njcn/gather/detection/controller/PreDetectionController.java b/detection/src/main/java/com/njcn/gather/detection/controller/PreDetectionController.java index 5b12ffd8..fd128c18 100644 --- a/detection/src/main/java/com/njcn/gather/detection/controller/PreDetectionController.java +++ b/detection/src/main/java/com/njcn/gather/detection/controller/PreDetectionController.java @@ -99,9 +99,9 @@ public class PreDetectionController extends BaseController { @OperateInfo @ApiOperation("重新开始检测") @ApiImplicitParam(name = "param", value = "参数", required = true) - public HttpResult restartTemTest(){ + public HttpResult restartTemTest(@RequestBody PreDetectionParam param){ String methodDescribe = getMethodDescribe("restartTemTest"); - + preDetectionService.restartTemTest(param); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } 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 d266ab82..bd4f4cb0 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 @@ -84,35 +84,31 @@ public class SocketDevResponseService { List devInfo = new ArrayList<>(); Map devDataMap = new HashMap<>(); - /** - * 成功结束的装置 - */ - List success = new ArrayList<>(); /** - * 所有装置通道信息 - */ - List monitorIdListComm = new ArrayList<>(); - - - /** - * 装置名称 - */ - Map devNameMapComm = new HashMap<>(); - /** - * 装置id - */ - Map devIdMapComm = new HashMap<>(); - /** - * 成功结束的装置 + * 成功结束的测点 */ List successComm = new ArrayList<>(); + /** + * 失败的测点 + */ + List failComm = new ArrayList<>(); + + + /** + * 成功结束的装置 + */ + Set successDevComm = new HashSet<>(); + /** + * 失败结束的装置 + */ + Set failDevComm = new HashSet<>(); + /** * 保存成功的协议 */ - List successXieyi = new ArrayList<>(); - List successXieyi3 = new ArrayList<>(); + DictDataEnum dataRule; @@ -130,7 +126,7 @@ public class SocketDevResponseService { break; //协议校验 case YJC_XYJY: - devXieyi(socketDataMsg, param, msg); + protocolDeal(socketDataMsg, param, msg); break; //相序校验 case YJC_XUJY: @@ -138,7 +134,7 @@ public class SocketDevResponseService { break; //正式检测 case FORMAL_REAL: - realDeal(param, socketDataMsg); + formalDeal(param, socketDataMsg); break; //系数校验 case Coefficient_Check: @@ -149,8 +145,6 @@ public class SocketDevResponseService { quitDeal(socketDataMsg, param, msg); break; } - - } @@ -243,8 +237,8 @@ public class SocketDevResponseService { realDataXiList.add(devData); successComm.add(devData.getId()); - System.out.println(successComm.size() + " ==" + monitorIdListComm.size() + "realDataXiList:" + realDataXiList.size() + "当前步骤" + XiNumberManager.stepNumber); - if (successComm.size() == monitorIdListComm.size()) { + System.out.println(successComm.size() + " ==" + FormalTestManager.monitorIdListComm.size() + "realDataXiList:" + realDataXiList.size() + "当前步骤" + XiNumberManager.stepNumber); + if (successComm.size() == FormalTestManager.monitorIdListComm.size()) { System.out.println("从装置中已经完成获取原始数据,准备开始计算----------------------"); //获取数据流程结束,先把所有数据存到内存中 Map> realDataXiMap = realDataXiList.stream().collect(Collectors.groupingBy(it -> it.getId().split(splitTag)[0])); @@ -269,7 +263,7 @@ public class SocketDevResponseService { String[] splitStr = monitorId.split(splitTag); coefficientVO.setMonitorNum(splitStr[1]); - coefficientVO.setDevName(devNameMapComm.get(splitStr[0])); + coefficientVO.setDevName(FormalTestManager.devNameMapComm.get(splitStr[0])); coefficientVO.setDesc((XiNumberManager.stepNumber == 0 || XiNumberManager.stepNumber == 1) ? "系数下装" : "系数校准"); assemblyEntity(list, F, coefficientVO, devParameter); @@ -520,23 +514,27 @@ public class SocketDevResponseService { SocketMsg socketMsg = new SocketMsg<>(); switch (Objects.requireNonNull(dictDataEnumByCode)) { case SUCCESS: + String result = socketDataMsg.getData(); //通讯校验成功 - webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, devNameMapComm, 1)); - successComm.add(socketDataMsg.getData()); - System.out.println("设备通讯校验全部成功!" + successComm.size() + "=====" + monitorIdListComm.size()); - if (successComm.size() == monitorIdListComm.size()) { + webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); + successDevComm.add(result.split(splitTag)[0]); + successComm.add(result); + System.out.println("设备通讯校验全部成功!" + successComm.size() + "=====" + FormalTestManager.monitorIdListComm.size()); + + if (successComm.size() == FormalTestManager.monitorIdListComm.size()) { SocketDataMsg temMsg = new SocketDataMsg(); temMsg.setCode(SourceResponseCodeEnum.DEV_COMM_ALL_SUCCESS.getCode()); temMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_01.getValue()); temMsg.setRequestId(SourceOperateCodeEnum.YJC_SBTXJY.getValue()); webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(temMsg)); - //开始进行协议校验 - List devList = iPqDevService.getDevInfo(param.getDevIds()); + successComm.clear(); + successDevComm.clear(); + failDevComm.clear(); Map> map = new HashMap<>(1); - map.put("deviceList", devList); + map.put("deviceList", FormalTestManager.devList); String jsonString = JSON.toJSONString(map); socketMsg.setRequestId(SourceOperateCodeEnum.YJC_XYJY.getValue()); socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue()); @@ -547,6 +545,9 @@ public class SocketDevResponseService { SocketManager.sendMsg(s, json); } + completeJudgment(param); + + break; case UNPROCESSED_BUSINESS: @@ -554,12 +555,20 @@ public class SocketDevResponseService { break; case DEV_ERROR: - webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, devNameMapComm, 2)); - CnSocketUtil.quitSend(param); + failDevComm.add(socketDataMsg.getData()); + failComm.addAll(FormalTestManager.devMapMonitorNum.get(socketDataMsg.getData())); + + System.out.println(failDevComm.size() + "xNNN+" + successDevComm.size()); + webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0)); + + completeJudgment(param); break; case DEV_TARGET: - webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, devNameMapComm, 2)); - CnSocketUtil.quitSend(param); + failDevComm.add(socketDataMsg.getData()); + failComm.addAll(FormalTestManager.devMapMonitorNum.get(socketDataMsg.getData())); + webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0)); + completeJudgment(param); + break; case RE_OPERATE: //出现已经初始化情况,发送用户用户确认是否继续检测 @@ -579,29 +588,50 @@ public class SocketDevResponseService { } } + + private void completeJudgment(PreDetectionParam param){ + if(successDevComm.size()+failDevComm.size() == FormalTestManager.devList.size() && successComm.size() + failComm.size() == FormalTestManager.monitorIdListComm.size()){ + //全部装置返回 + if(!failDevComm.isEmpty()){ + CnSocketUtil.quitSend(param); + WebSocketVO webSocketVO = new WebSocketVO<>(); + webSocketVO.setRequestId(SourceOperateCodeEnum.ERROR_FLOW_END.getValue()); + webSocketHandler.sendMsgToUser(param.getUserPageId(),JSON.toJSONString(webSocketVO)); + } + successDevComm.clear(); + failDevComm.clear(); + successComm.clear(); + failComm.clear(); + } + } + /** * 装置协议检测 */ - private void devXieyi(SocketDataMsg socketDataMsg, PreDetectionParam param, String msg) { + private void protocolDeal(SocketDataMsg socketDataMsg, PreDetectionParam param, String msg) { SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); SocketMsg socketMsg = new SocketMsg<>(); String s = param.getUserPageId() + handlerStr; switch (Objects.requireNonNull(dictDataEnumByCode)) { case SUCCESS: - webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, devNameMapComm, 2)); + webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0)); if (socketDataMsg.getOperateCode().equals(SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue())) { - successXieyi.add(socketDataMsg.getData()); - if (successXieyi.size() == monitorIdListComm.size()) { - for (String string : successXieyi) { + successDevComm.add(socketDataMsg.getData().split(splitTag)[0]); + successComm.add(socketDataMsg.getData()); + + if (successComm.size() == FormalTestManager.monitorIdListComm.size()) { + for (String string : successComm) { //模拟统计协议校验,通讯校验已经校验过,模拟直接推送 SocketDataMsg webSend = new SocketDataMsg(); webSend.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_01.getValue()); webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode()); webSend.setRequestId(SourceOperateCodeEnum.YJC_XYJY.getValue()); webSend.setData(string); - webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(webSend, devNameMapComm, 1)); + webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(webSend, FormalTestManager.devNameMapComm, 1)); } + successComm.clear(); + successDevComm.clear(); Map> map = new HashMap<>(1); map.put("deviceList", FormalTestManager.devList); String jsonString = JSON.toJSONString(map); @@ -611,22 +641,31 @@ public class SocketDevResponseService { System.out.println("开始3协议校验++++++++++"); SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); } + + completeJudgment(param); + + + } else if (socketDataMsg.getOperateCode().equals(SourceOperateCodeEnum.DEV_INIT_GATHER_03.getValue())) { - successXieyi3.add(socketDataMsg.getData()); - System.out.println(successXieyi3.size() + "=====" + monitorIdListComm.size()); - if (successXieyi3.size() == monitorIdListComm.size()) { + successDevComm.add(socketDataMsg.getData().split(splitTag)[0]); + successComm.add(socketDataMsg.getData()); + System.out.println(successComm.size() + "=====" + FormalTestManager.monitorIdListComm.size()); + + if (successComm.size() == FormalTestManager.monitorIdListComm.size()) { SocketDataMsg temMsg = new SocketDataMsg(); temMsg.setCode(SourceResponseCodeEnum.DEV_COMM_ALL_SUCCESS.getCode()); temMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_03.getValue()); temMsg.setRequestId(SourceOperateCodeEnum.YJC_XYJY.getValue()); webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(temMsg)); + //开始下源控制脚本 PqScriptIssueParam issueParam = new PqScriptIssueParam(); issueParam.setPlanId(param.getPlanId()); issueParam.setSourceId(param.getSourceId()); issueParam.setDevIds(param.getDevIds()); issueParam.setScriptId(param.getScriptId()); - + successComm.clear(); + successDevComm.clear(); socketMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue()); List sourceIssues; if (SourceOperateCodeEnum.FORMAL_TEST.getValue().equals(param.getOperateType())) { @@ -649,6 +688,8 @@ public class SocketDevResponseService { socketMsg.setData(JSON.toJSONString(sourceIssues.get(0))); SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, JSON.toJSONString(socketMsg)); } else if (SourceOperateCodeEnum.TEST_TEM_START.getValue().equals(param.getOperateType())) { + //暂停检测后的继续检测 + System.out.println("进入暂停后的继续检测》》》》》》》》》》》》》》》》》》》》》》》》》》》" + "剩余检测小项" + SocketManager.getSourceList().size()); if (CollUtil.isNotEmpty(SocketManager.getSourceList())) { SourceIssue sourceIssue = SocketManager.getSourceList().get(0); socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + stepTag + sourceIssue.getType()); @@ -661,6 +702,8 @@ public class SocketDevResponseService { } successComm.clear(); } + + completeJudgment(param); } @@ -669,11 +712,13 @@ public class SocketDevResponseService { webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); break; case DEV_ERROR: - webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, devNameMapComm, 2)); + failDevComm.add(socketDataMsg.getData()); + webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0)); CnSocketUtil.quitSend(param); break; case DEV_TARGET: - webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, devNameMapComm, 2)); + failDevComm.add(socketDataMsg.getData()); + webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0)); CnSocketUtil.quitSend(param); break; @@ -705,10 +750,10 @@ public class SocketDevResponseService { case SUCCESS: //webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(MsgUtil.msgToWebData(socketDataMsg,devNameMapComm,1))); devInfo.add(devData); - success.add(devData.getId()); + successComm.add(devData.getId()); - if (success.size() == monitorIdListComm.size()) { - System.out.println("相序校验接受数据完成---------" + success.size() + "__" + monitorIdListComm.size()); + if (successComm.size() == FormalTestManager.monitorIdListComm.size()) { + System.out.println("相序校验接受数据完成---------" + successComm.size() + "__" + FormalTestManager.monitorIdListComm.size()); PqScriptIssueParam sourceParam = new PqScriptIssueParam(); sourceParam.setPlanId(param.getPlanId()); @@ -741,6 +786,7 @@ public class SocketDevResponseService { temMsg.setRequestId(SourceOperateCodeEnum.YJC_XUJY.getValue()); webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(temMsg)); + successComm.clear(); if (param.getOperateType().equals(SourceOperateCodeEnum.PRE_TEST.getValue())) { System.out.println("预检测流程接受-----------------关闭源"); //同时关闭设备三个步骤 @@ -776,14 +822,15 @@ public class SocketDevResponseService { devInfo.add(devData); break; case DEV_ERROR: - webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, devNameMapComm, 2)); + webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0)); CnSocketUtil.quitSend(param); break; case DEV_TARGET: - webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, devNameMapComm, 2)); + webSocketHandler.sendMsgToUser(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0)); CnSocketUtil.quitSend(param); break; case RE_OPERATE: + CnSocketUtil.quitSend(param); break; default: WebSocketVO webSocketVO = new WebSocketVO<>(); @@ -800,7 +847,7 @@ public class SocketDevResponseService { /** * 正式检测 */ - public void realDeal(PreDetectionParam param, SocketDataMsg socketDataMsg) { + public void formalDeal(PreDetectionParam param, SocketDataMsg socketDataMsg) { String data = socketDataMsg.getData(); DevData devData = JSON.parseObject(data, DevData.class); SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); @@ -813,7 +860,7 @@ public class SocketDevResponseService { //FormalTestManager.devXiNumDataMap.put(devData.getId(),) - if (successComm.size() == monitorIdListComm.size()) { + if (successComm.size() == FormalTestManager.monitorIdListComm.size()) { //TODO 理论上遇到返回code10200的数量与监测点数量一致则认为数据返回结束,但是会存在缺失数据情况,例如有部分装置是没有暂降功能的 System.out.println(sourceIssue.getType() + splitTag + sourceIssue.getIndex() + "当前测试小项读取数据已经全部结束。。。。。。。。。"); @@ -821,7 +868,7 @@ public class SocketDevResponseService { baseDataInsert(realDataXiList, sourceIssue, param, SocketManager.valueTypeMap); //调用判断方法 - Map textResult = detectionServiceImpl.processing(realDataXiList, param, devIdMapComm, sourceIssue, dataRule); + Map textResult = detectionServiceImpl.processing(realDataXiList, param, FormalTestManager.devIdMapComm, sourceIssue, dataRule); long tem = SocketManager.getSourceTarget(sourceIssue.getType()) - 1; SocketManager.addTargetMap(sourceIssue.getType(), tem); @@ -978,8 +1025,8 @@ public class SocketDevResponseService { List info = new ArrayList<>(); String[] split = dev.getId().split(splitTag); String devName = null; - if (devNameMapComm.containsKey(split[0])) { - devName = devNameMapComm.get(split[0]); + if (FormalTestManager.devNameMapComm.containsKey(split[0])) { + devName = FormalTestManager.devNameMapComm.get(split[0]); } List channelList = issue.getChannelList(); @@ -1063,29 +1110,42 @@ public class SocketDevResponseService { } + /** + * 暂停后的重新检测 + */ + public void initRestart() { + this.successComm.clear(); + this.realDataXiList.clear(); + } + + /** * 初始化集合 */ public void initList(PreDetectionParam param) { - this.monitorIdListComm.clear(); - this.successComm.clear(); - this.successXieyi.clear(); - this.successXieyi3.clear(); + FormalTestManager.monitorIdListComm.clear(); + FormalTestManager.devList.clear(); + SocketManager.valueTypeMap.clear(); + SocketManager.clockMap.clear(); + successComm.clear(); + successDevComm.clear(); + failDevComm.clear(); + //初始化相序集合 this.devInfo.clear(); - this.success.clear(); this.devDataMap.clear(); - this.realDataXiList.clear(); - FormalTestManager.devList.clear(); + List pqDevList = iPqDevService.getDevInfo(param.getDevIds()); FormalTestManager.devList = pqDevList; - this.monitorIdListComm = pqDevList.stream().flatMap(x -> x.getMonitorList().stream()).map(PreDetection.MonitorListDTO::getLineId).collect(Collectors.toList()); - this.devNameMapComm = pqDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevName)); - this.devIdMapComm = pqDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevId)); - SocketManager.clockMap.clear(); + FormalTestManager.devMapMonitorNum = pqDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP,it->it.getMonitorList().stream().map(PreDetection.MonitorListDTO::getLineId).collect(Collectors.toList()))); + 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)); + //初始化有效数据数 - Map sysRegResMap = iSysRegResService.listRegRes(); + //Map sysRegResMap = iSysRegResService.listRegRes(); SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); if (ObjectUtil.isNotNull(oneConfig)) { @@ -1094,25 +1154,25 @@ public class SocketDevResponseService { dataRule = DictDataEnum.AT_WILL_VALUE; } //字典树 - SocketManager.valueTypeMap.clear(); SocketManager.valueTypeMap = iPqScriptCheckDataService.getValueTypeMap(param.getScriptId()); - initXiManager(param); } //初始化 private void initXiManager(PreDetectionParam param) { + XiNumberManager.devParameterList.clear(); + Double v = FormalTestManager.devList.get(0).getDevVolt(); Double i = FormalTestManager.devList.get(0).getDevCurr(); CoefficientVO.DevParameter devParameterBig = new CoefficientVO.DevParameter(); devParameterBig.setDevVolt(BigDecimal.valueOf(v * 1.2).setScale(2, RoundingMode.HALF_UP).doubleValue()); - devParameterBig.setDevCurr(BigDecimal.valueOf(i * 1.5).setScale(2, RoundingMode.HALF_UP).doubleValue()); + devParameterBig.setDevCurr(BigDecimal.valueOf(i * 1.2).setScale(2, RoundingMode.HALF_UP).doubleValue()); CoefficientVO.DevParameter devParameterSmall = new CoefficientVO.DevParameter(); devParameterSmall.setDevVolt(BigDecimal.valueOf(v * 0.2).setScale(2, RoundingMode.HALF_UP).doubleValue()); devParameterSmall.setDevCurr(BigDecimal.valueOf(i * 0.2).setScale(2, RoundingMode.HALF_UP).doubleValue()); - XiNumberManager.devParameterList.clear(); + XiNumberManager.devParameterList.add(devParameterBig); XiNumberManager.devParameterList.add(devParameterSmall); @@ -1164,7 +1224,7 @@ public class SocketDevResponseService { if (Objects.nonNull(localDateTime)) { String[] splitArr = data.getId().split(splitTag); - String temId = devIdMapComm.get(splitArr[0]) + splitTag + splitArr[1]; + String temId = FormalTestManager.devIdMapComm.get(splitArr[0]) + splitTag + splitArr[1]; if (nonHarmonicList.contains(sourceIssue.getType())) { for (DevData.SqlDataDTO sqlDataDTO : data.getSqlData()) { diff --git a/detection/src/main/java/com/njcn/gather/detection/handler/SocketSourceResponseService.java b/detection/src/main/java/com/njcn/gather/detection/handler/SocketSourceResponseService.java index 696e9654..3f60a128 100644 --- a/detection/src/main/java/com/njcn/gather/detection/handler/SocketSourceResponseService.java +++ b/detection/src/main/java/com/njcn/gather/detection/handler/SocketSourceResponseService.java @@ -83,6 +83,8 @@ public class SocketSourceResponseService { case QUITE_SOURCE: quitDeal(socketDataMsg,param); break; + case YXT: + break; } } else { @@ -160,7 +162,7 @@ public class SocketSourceResponseService { socketMsg.setData(jsonString); String json = JSON.toJSONString(socketMsg); // SocketManager.sendMsg(s,json); - NettyClient.socketClient(ip, port, param.getUserPageId(), json, new NettyDevClientHandler(param, socketDevResponseService)); + NettyClient.socketClient(ip, port, param, json, new NettyDevClientHandler(param, socketDevResponseService)); break; case UNPROCESSED_BUSINESS: webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); @@ -205,7 +207,7 @@ public class SocketSourceResponseService { DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam(); phaseSequenceParam.setMoniterIdList(moniterIdList); phaseSequenceParam.setDataType(Arrays.asList("real$VRMS", "real$IRMS")); - phaseSequenceParam.setReadCount(1); + phaseSequenceParam.setReadCount(5); phaseSequenceParam.setIgnoreCount(10); socketMsg.setData(JSON.toJSONString(phaseSequenceParam)); SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/enums/DetectionResponseEnum.java b/detection/src/main/java/com/njcn/gather/detection/pojo/enums/DetectionResponseEnum.java index 9fced6b2..188bfb92 100644 --- a/detection/src/main/java/com/njcn/gather/detection/pojo/enums/DetectionResponseEnum.java +++ b/detection/src/main/java/com/njcn/gather/detection/pojo/enums/DetectionResponseEnum.java @@ -10,8 +10,8 @@ import lombok.Getter; public enum DetectionResponseEnum { PLAN_PATTERN_NOT("A020001", "计划模式查询为空"), SOURCE_INFO_NOT("A020002", "源表信息不存在"), - PLAN_AND_SOURCE_NOT("A020003", "计划和源关系不存在") - + PLAN_AND_SOURCE_NOT("A020003", "计划和源关系不存在"), + ITEM_TEST_NOT("A020003", "检测项为空") ; private String code; diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceOperateCodeEnum.java b/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceOperateCodeEnum.java index dcfc411b..45597939 100644 --- a/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceOperateCodeEnum.java +++ b/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceOperateCodeEnum.java @@ -42,8 +42,8 @@ public enum SourceOperateCodeEnum { /** * 请求操作类型对应实体中 requestId */ - YJC_YTXJY("yjc_ytxjy", "预检测_源通讯检测"), - YJC_SBTXJY("yjc_sbtxjy", "预检测_设备通讯检测"), + YJC_YTXJY("yjc_ytxjy", "源通讯检测"), + YJC_SBTXJY("yjc_sbtxjy", "设备通讯检测"), YJC_XYJY("yjc_xyjy", "预检测_协议校验"), YJC_XUJY("YJC_xujy", "相序校验"), FORMAL_REAL("formal_real","正式检测_获取实时数据"), @@ -52,6 +52,9 @@ public enum SourceOperateCodeEnum { Coefficient_Check("Coefficient_Check","系数校验"), QUITE("quit","预监测_关闭设备通讯初始化"), QUITE_SOURCE("close_source","预监测_关闭源通讯"), + ERROR_FLOW_END("error_flow_end","当前流程存在异常结束"), + YXT("yxt","心跳"), + UNKNOWN_OPERATE("unknown_operate","未知的操作返回,请联系管理员排查"), SOCKET_TIMEOUT("socket_timeout","与源或者装置通讯等待超时"), 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 265d12fe..144d4cc3 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 @@ -36,6 +36,7 @@ public enum SourceResponseCodeEnum { //自定义前端展示消息 SOCKET_ERROR(25000,"服务端连接失败"), DEV_COMM_ALL_SUCCESS(25001,"校验成功"), + DEV_COMM_TEST_FAIL(25002,"设备通讯校验失败"), diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/vo/WebSocketVO.java b/detection/src/main/java/com/njcn/gather/detection/pojo/vo/WebSocketVO.java index 1aa1c5eb..cac182ac 100644 --- a/detection/src/main/java/com/njcn/gather/detection/pojo/vo/WebSocketVO.java +++ b/detection/src/main/java/com/njcn/gather/detection/pojo/vo/WebSocketVO.java @@ -17,7 +17,7 @@ public class WebSocketVO { private String operateCode; - private String code; + private Integer code; private T data; 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 d97f0fb7..8840f080 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 @@ -1,6 +1,7 @@ package com.njcn.gather.detection.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -21,6 +22,7 @@ import com.njcn.gather.detection.util.socket.SocketManager; import com.njcn.gather.detection.util.socket.cilent.NettyClient; import com.njcn.gather.detection.util.socket.cilent.NettySourceClientHandler; import com.njcn.gather.device.device.service.IPqDevService; +import com.njcn.gather.device.script.pojo.po.SourceIssue; import com.njcn.gather.device.script.service.IPqScriptDtlsService; import com.njcn.gather.device.source.pojo.po.PqSource; import com.njcn.gather.device.source.pojo.po.SourceInitialize; @@ -114,7 +116,7 @@ public class PreDetectionServiceImpl implements PreDetectionService { msg.setOperateCode(SourceOperateCodeEnum.INIT_GATHER.getValue()); msg.setData(JSON.toJSONString(sourceParam)); param.setSourceId(sourceParam.getSourceId()); - NettyClient.socketClient(ip, port, param.getUserPageId(), JSON.toJSONString(msg), new NettySourceClientHandler(param, sourceResponseService)); + NettyClient.socketClient(ip, port, param, JSON.toJSONString(msg), new NettySourceClientHandler(param, sourceResponseService)); } else { throw new BusinessException(DetectionResponseEnum.SOURCE_INFO_NOT); } @@ -137,7 +139,7 @@ public class PreDetectionServiceImpl implements PreDetectionService { msg.setOperateCode(SourceOperateCodeEnum.INIT_GATHER.getValue()); msg.setData(JSON.toJSONString(sourceParam)); param.setSourceId(sourceParam.getSourceId()); - NettyClient.socketClient(ip, port, param.getUserPageId(), JSON.toJSONString(msg), new NettySourceClientHandler(param, sourceResponseService)); + NettyClient.socketClient(ip, port, param, JSON.toJSONString(msg), new NettySourceClientHandler(param, sourceResponseService)); } else { throw new BusinessException(DetectionResponseEnum.SOURCE_INFO_NOT); } @@ -151,7 +153,7 @@ public class PreDetectionServiceImpl implements PreDetectionService { public boolean startTest(PreDetectionParam param) { socketDevResponseService.initList(param); - NettyClient.socketClient(ip, port, param.getUserPageId(), "start\n", new NettySourceClientHandler(param, sourceResponseService)); + NettyClient.socketClient(ip, port, param, "start\n", new NettySourceClientHandler(param, sourceResponseService)); return true; } @@ -169,19 +171,21 @@ public class PreDetectionServiceImpl implements PreDetectionService { AdPlanSource planSource = adPlanSourceService.getOne(new LambdaQueryWrapper().eq(AdPlanSource::getPlanId, param.getPlanId())); if (ObjectUtil.isNotNull(planSource)) { SourceInitialize sourceParam = pqSourceService.getSourceInitializeParam(planSource.getSourceId()); - if (ObjectUtil.isNotNull(sourceParam)) { + if (Objects.isNull(sourceParam)) { + throw new BusinessException(DetectionResponseEnum.SOURCE_INFO_NOT); + } + param.setSourceId(sourceParam.getSourceId()); + + if (CollUtil.isNotEmpty(SocketManager.getSourceList())) { //开始组装socket报文请求头 - socketDevResponseService.initList(param); - socketSourceResponseService.initList(param); + socketDevResponseService.initRestart(); SocketMsg msg = new SocketMsg<>(); msg.setRequestId(SourceOperateCodeEnum.YJC_YTXJY.getValue()); msg.setOperateCode(SourceOperateCodeEnum.INIT_GATHER.getValue()); msg.setData(JSON.toJSONString(sourceParam)); - param.setSourceId(sourceParam.getSourceId()); - param.setOperateType(SourceOperateCodeEnum.TEST_TEM_START.getValue()); - NettyClient.socketClient(ip, port, param.getUserPageId(), JSON.toJSONString(msg), new NettySourceClientHandler(param, sourceResponseService)); + NettyClient.socketClient(ip, port, param, JSON.toJSONString(msg), new NettySourceClientHandler(param, sourceResponseService)); } else { - throw new BusinessException(DetectionResponseEnum.SOURCE_INFO_NOT); + throw new BusinessException(DetectionResponseEnum.ITEM_TEST_NOT); } } else { throw new BusinessException(DetectionResponseEnum.PLAN_AND_SOURCE_NOT); 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 03d89035..0d19d9ee 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 @@ -3,6 +3,7 @@ package com.njcn.gather.detection.util.socket; import com.njcn.gather.device.device.pojo.vo.PreDetection; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -14,23 +15,30 @@ import java.util.concurrent.ConcurrentHashMap; */ public class FormalTestManager { - public static Map devXiNumDataMap = new ConcurrentHashMap<>(); + + public static Map> devMapMonitorNum = new ConcurrentHashMap<>(); /** - * 存储所有准备测试的检测点通道 + * 所有参与检测的装置 */ - public static List allMonitorList = new ArrayList<>(); - - - /** - * 存储每个测试项正常结束的监测点通道 - */ - public static List monitorSuccessList = new ArrayList<>(); - - - public static List devList = new ArrayList<>(); + /** + * 所有参与检测的监测点 + */ + public static List monitorIdListComm = new ArrayList<>(); + + + + /** + * 装置名称 + */ + public static Map devNameMapComm = new HashMap<>(); + /** + * 装置id + */ + public static Map devIdMapComm = new HashMap<>(); + public static Boolean stopFlag = false; 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 8a3d886f..455fa41a 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 @@ -4,8 +4,10 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.njcn.gather.detection.pojo.enums.SourceResponseCodeEnum; +import com.njcn.gather.detection.pojo.param.PreDetectionParam; 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.SocketManager; import com.njcn.gather.detection.util.socket.WebServiceManager; import io.netty.bootstrap.Bootstrap; @@ -30,7 +32,7 @@ import java.util.concurrent.TimeUnit; @Getter public class NettyClient { - public static void socketClient(String ip, Integer port, String userPageId,String msg, SimpleChannelInboundHandler handler) { + public static void socketClient(String ip, Integer port, PreDetectionParam param, String msg, SimpleChannelInboundHandler handler) { NioEventLoopGroup group = new NioEventLoopGroup(); Bootstrap bootstrap = new Bootstrap(); try { @@ -72,14 +74,14 @@ public class NettyClient { channelFuture.channel().writeAndFlush(msg+"\n"); } }); - NioEventLoopGroup groupByUserId = SocketManager.getGroupByUserId(userPageId + "_Dev"); + NioEventLoopGroup groupByUserId = SocketManager.getGroupByUserId(param.getUserPageId() + "_Dev"); if(ObjectUtil.isNotNull(groupByUserId)){ groupByUserId.shutdownGracefully(); }else{ if (handler instanceof NettySourceClientHandler) { - SocketManager.addGroup(userPageId+"_Source",group); + SocketManager.addGroup(param.getUserPageId()+"_Source",group); }else{ - SocketManager.addGroup(userPageId+"_Dev",group); + SocketManager.addGroup(param.getUserPageId()+"_Dev",group); } } } catch (Exception e) { @@ -94,9 +96,10 @@ public class NettyClient { if (handler instanceof NettySourceClientHandler) { socketDataMsg.setOperateCode("Source"); }else{ + CnSocketUtil.quitSendSource(param); socketDataMsg.setOperateCode("Dev"); } - WebServiceManager.sendMsg(userPageId, JSON.toJSONString(socketDataMsg)); + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); } finally { // System.out.println("进入clientSocket最后步骤---------------------"); } diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettySourceClientHandler.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettySourceClientHandler.java index 7178532d..58c447c9 100644 --- a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettySourceClientHandler.java +++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettySourceClientHandler.java @@ -106,7 +106,7 @@ public class NettySourceClientHandler extends SimpleChannelInboundHandler impleme private final IPqSourceService pqSourceService; private final IPqScriptDtlsService pqScriptDtlsService; private final IDictTreeService dictTreeService; + private final TableGenService tableGenService; @Override public Page listAdPlan(AdPlanParam.QueryParam queryParam) { @@ -118,7 +120,10 @@ public class AdPlanServiceImpl extends ServiceImpl impleme pqDevService.updatePqDevTimeCheckResult(param.getDevIds(), TimeCheckResultEnum.UNKNOWN); } - return this.save(adPlan); + //新增相关计划 + this.save(adPlan); + tableGenService.genAdNonHarmonicTable(adPlan.getCode().toString()); + return true; } @Override diff --git a/storage/README.md b/storage/README.md new file mode 100644 index 00000000..dcaab13e --- /dev/null +++ b/storage/README.md @@ -0,0 +1,3 @@ +#### 简介 + 检测数据模块主要包含以下功能: +* 计划关联数据管理 diff --git a/storage/src/main/java/com/njcn/gather/storage/service/TableGenService.java b/storage/src/main/java/com/njcn/gather/storage/service/TableGenService.java index 5f122ffb..e28d2fad 100644 --- a/storage/src/main/java/com/njcn/gather/storage/service/TableGenService.java +++ b/storage/src/main/java/com/njcn/gather/storage/service/TableGenService.java @@ -5,6 +5,7 @@ public interface TableGenService { void genAdNonHarmonicTable(String code); + void delAdNonHarmonicTable(String code); } diff --git a/storage/src/main/java/com/njcn/gather/storage/service/impl/TableGenServiceImpl.java b/storage/src/main/java/com/njcn/gather/storage/service/impl/TableGenServiceImpl.java index 642c73f2..144e589c 100644 --- a/storage/src/main/java/com/njcn/gather/storage/service/impl/TableGenServiceImpl.java +++ b/storage/src/main/java/com/njcn/gather/storage/service/impl/TableGenServiceImpl.java @@ -62,9 +62,11 @@ public class TableGenServiceImpl implements TableGenService { tableGenMapper.genAdHarmonicTable(sql2); } - - - + @Override + public void delAdNonHarmonicTable(String code) { + String sql = "DROP TABLE ad_harmonic_"+code+",ad_harmonic_result_"+code+",ad_non_harmonic_"+code+",ad_non_harmonic_result_"+code; + tableGenMapper.genAdHarmonicTable(sql); + } }