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 86236f2f..428477c9 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 @@ -34,7 +34,6 @@ import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.stream.Collectors; @Slf4j @@ -71,6 +70,32 @@ public class PreDetectionController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } + /** + * 关闭检测 + */ + @PostMapping("/closeCheck") + @OperateInfo + @ApiOperation("关闭检测") + @ApiImplicitParam(name = "param", value = "查询参数", required = true) + public HttpResult closeCheck(@RequestBody @Validated PreDetectionParam param){ + String methodDescribe = getMethodDescribe("closeCheck"); + preDetectionService.closeCheck(param); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } + + /** + * 下一步检测 + */ + @PostMapping("/nextScript") + @OperateInfo + @ApiOperation("下一步检测") + @ApiImplicitParam(name = "param", value = "查询参数", required = true) + public HttpResult nextScript(@RequestBody @Validated PreDetectionParam param){ + String methodDescribe = getMethodDescribe("nextScript"); + preDetectionService.nextScript(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 040e5775..3fbdee5b 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 @@ -149,8 +149,6 @@ public class SocketDevResponseService { } - - /** * 系数校验 */ @@ -270,7 +268,7 @@ public class SocketDevResponseService { successComm.add(devData.getId()); System.out.println(successComm.size() + " ==" + FormalTestManager.monitorIdListComm.size() + "FormalTestManager.realDataXiList:" + FormalTestManager.realDataXiList.size() + "当前步骤" + XiNumberManager.stepNumber); if (successComm.size() == FormalTestManager.monitorIdListComm.size()) { - processData(param,xiSocket); + processData(param, xiSocket); } break; @@ -298,26 +296,25 @@ public class SocketDevResponseService { } - - private void processData(PreDetectionParam param,SocketMsg xiSocket) { - System.out.println(XiNumberManager.stepNumber+"从装置中已经完成获取测试数据,准备开始计算----------------------"); + private void processData(PreDetectionParam param, SocketMsg xiSocket) { + System.out.println(XiNumberManager.stepNumber + "从装置中已经完成获取测试数据,准备开始计算----------------------"); Map> realDataXiMap = FormalTestManager.realDataXiList.stream().collect(Collectors.groupingBy(it -> it.getId().split(splitTag)[0])); - realDataXiMap.forEach((devIp, dataList) -> processDeviceData(devIp, dataList,param)); + realDataXiMap.forEach((devIp, dataList) -> processDeviceData(devIp, dataList, param)); - handleStep(XiNumberManager.stepNumber,param,xiSocket); + handleStep(XiNumberManager.stepNumber, param, xiSocket); } - private void handleStep(int stepNumber, PreDetectionParam param,SocketMsg xiSocket) { + private void handleStep(int stepNumber, PreDetectionParam param, SocketMsg xiSocket) { switch (stepNumber) { case 0: sendModifyCoefficientCommand(param, xiSocket); break; case 1: - handleSmallVoltageStep(param,xiSocket); + handleSmallVoltageStep(param, xiSocket); break; case 2: - handleBigVoltageStep(param,xiSocket); + handleBigVoltageStep(param, xiSocket); break; case 3: handleFinalStep(param); @@ -328,14 +325,14 @@ public class SocketDevResponseService { /** * 修改系数命令下发 */ - private void sendModifyCoefficientCommand(PreDetectionParam param,SocketMsg xiSocket) { + private void sendModifyCoefficientCommand(PreDetectionParam param, SocketMsg xiSocket) { xiSocket.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue()); xiSocket.setOperateCode(SourceOperateCodeEnum.DATA_CHNFACTOR$02.getValue()); xiSocket.setData(JSON.toJSONString(XiNumberManager.devXiNumDataMap.get(XiNumberManager.devXiList.get(0)))); SocketManager.sendMsg(param.getUserPageId() + handlerStr, JSON.toJSONString(xiSocket)); } - private void handleSmallVoltageStep(PreDetectionParam param,SocketMsg xiSocket) { + private void handleSmallVoltageStep(PreDetectionParam param, SocketMsg xiSocket) { System.out.println("进入小电压步骤》》》》》》》》》》》》》》》》》》》》》》》》"); double limit = 0.1; XiNumberManager.smallDevXiNumDataMap.forEach((devIp, devXiNumDataSmall) -> { @@ -365,7 +362,7 @@ public class SocketDevResponseService { } - private void handleBigVoltageStep(PreDetectionParam param,SocketMsg xiSocket){ + private void handleBigVoltageStep(PreDetectionParam param, SocketMsg xiSocket) { //大电压处理 sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.big_comp_end.getValue(), XiNumberManager.devParameterList.get(0)); sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.small_comp_start.getValue(), XiNumberManager.devParameterList.get(1)); @@ -378,7 +375,7 @@ public class SocketDevResponseService { successComm.clear(); } - private void handleFinalStep(PreDetectionParam param){ + private void handleFinalStep(PreDetectionParam param) { sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.small_comp_end.getValue(), XiNumberManager.devParameterList.get(1)); System.out.println("-------------------------已经全部结束----------------------"); CnSocketUtil.quitSend(param); @@ -446,7 +443,7 @@ public class SocketDevResponseService { } - private void processDeviceData(String devIp, List dataList,PreDetectionParam param) { + private void processDeviceData(String devIp, List dataList, PreDetectionParam param) { AtomicBoolean xiFlag = new AtomicBoolean(true); XiNumberManager.devXiList.add(devIp); @@ -468,7 +465,7 @@ public class SocketDevResponseService { DevXiNumData.GF gfItem = createGFItem(monitorId, F); gf.add(gfItem); //表格数据 - CnSocketUtil.sendToWebSocket(param.getUserPageId(),SourceOperateCodeEnum.Coefficient_Check.getValue(),SourceOperateCodeEnum.DATA_CHNFACTOR$02.getValue(),coefficientVO,null); + CnSocketUtil.sendToWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.DATA_CHNFACTOR$02.getValue(), coefficientVO, null); }); DevXiNumData devXiNumData = createDevXiNumData(devIp, gf, xiFlag.get()); @@ -785,7 +782,7 @@ public class SocketDevResponseService { StorageParam storageParam = new StorageParam(); storageParam.setCode(Integer.valueOf(param.getCode())); storageParam.setScriptId(param.getScriptId()); - List indexes = adHarmonicService.getIndex(storageParam,true); + List indexes = adHarmonicService.getIndex(storageParam, true); issueParam.setIndexList(indexes); issueParam.setIsPhaseSequence(SourceOperateCodeEnum.COEFFICIENT_TEST.getValue()); } else { @@ -948,7 +945,6 @@ public class SocketDevResponseService { SocketManager.sendMsg(param.getUserPageId() + handlerStr, JSON.toJSONString(socketMsg)); - XiNumberManager.stepNumber = 0; XiNumberManager.devXiList.clear(); XiNumberManager.devXiNumDataMap.clear(); @@ -1003,7 +999,7 @@ public class SocketDevResponseService { successComm.add(devData.getId()); if (SocketManager.clockMap.containsKey(sourceIssue.getIndex())) { - // SocketManager.clockMap.put(sourceIssue.getIndex(), 0L); + // SocketManager.clockMap.put(sourceIssue.getIndex(), 0L); } if (successComm.size() == FormalTestManager.monitorIdListComm.size()) { @@ -1047,39 +1043,40 @@ public class SocketDevResponseService { allDevTestList.clear(); CnSocketUtil.sendToWebSocket(param.getUserPageId(), socketDataMsg.getRequestId().split(stepTag)[1] + stepEnd, null, resultList, null); } - - //在这一步判断是否已经触发暂停按钮 - if (FormalTestManager.stopFlag && CollUtil.isNotEmpty(SocketManager.getSourceList())) { - FormalTestManager.stopTime = 0; - FormalTestManager.hasStopFlag = true; - successComm.clear(); - FormalTestManager.realDataXiList.clear(); - sendWebSocket(param.getUserPageId(), "preStopTest", "stop", null); - return; - } - - //开始进行下一项检测 - List sourceIssueList = SocketManager.getSourceList(); - if (CollUtil.isNotEmpty(sourceIssueList)) { - SourceIssue sourceIssues = SocketManager.getSourceList().get(0); - if (residueCount == 0) { - CnSocketUtil.sendToWebSocket(param.getUserPageId(), sourceIssues.getType() + stepBegin, null, new ArrayList<>(), null); + if (!param.getIsTeachingMode()) { + //在这一步判断是否已经触发暂停按钮 + if (FormalTestManager.stopFlag && CollUtil.isNotEmpty(SocketManager.getSourceList())) { + FormalTestManager.stopTime = 0; + FormalTestManager.hasStopFlag = true; + successComm.clear(); + FormalTestManager.realDataXiList.clear(); + sendWebSocket(param.getUserPageId(), "preStopTest", "stop", null); + return; } - SocketMsg xuMsg = new SocketMsg<>(); - xuMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue()); - xuMsg.setData(JSON.toJSONString(sourceIssues)); - xuMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + stepTag + sourceIssues.getType()); - SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, JSON.toJSONString(xuMsg)); - } else { - //TODO 是否最终检测完成需要推送给用户 - PqScriptCheckDataParam checkDataParam = new PqScriptCheckDataParam(); - checkDataParam.setScriptId(param.getScriptId()); - checkDataParam.setIsValueTypeName(false); - List valueType = iPqScriptCheckDataService.getValueType(checkDataParam); + //开始进行下一项检测 + List sourceIssueList = SocketManager.getSourceList(); + if (CollUtil.isNotEmpty(sourceIssueList)) { + SourceIssue sourceIssues = SocketManager.getSourceList().get(0); + if (residueCount == 0) { + CnSocketUtil.sendToWebSocket(param.getUserPageId(), sourceIssues.getType() + stepBegin, null, new ArrayList<>(), null); + } - iPqDevService.updateResult(param.getDevIds(), valueType, param.getCode()); - CnSocketUtil.quitSend(param); + SocketMsg xuMsg = new SocketMsg<>(); + xuMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue()); + xuMsg.setData(JSON.toJSONString(sourceIssues)); + xuMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + stepTag + sourceIssues.getType()); + SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, JSON.toJSONString(xuMsg)); + } else { + //TODO 是否最终检测完成需要推送给用户 + PqScriptCheckDataParam checkDataParam = new PqScriptCheckDataParam(); + checkDataParam.setScriptId(param.getScriptId()); + checkDataParam.setIsValueTypeName(false); + List valueType = iPqScriptCheckDataService.getValueType(checkDataParam); + + iPqDevService.updateResult(param.getDevIds(), valueType, param.getCode()); + CnSocketUtil.quitSend(param); + } } successComm.clear(); FormalTestManager.realDataXiList.clear(); @@ -1111,6 +1108,8 @@ public class SocketDevResponseService { } + + /* private void processData(List FormalTestManager.realDataXiList, List successComm, SourceIssue sourceIssue, PreDetectionParam param, SocketDataMsg socketDataMsg, Object dataRule, String handlerSourceStr) { if (SocketManager.clockMap.containsKey(sourceIssue.getIndex())) { @@ -1222,7 +1221,7 @@ public class SocketDevResponseService { case QUIT_INIT_01: //关闭所有 SocketManager.removeUser(s); - // CnSocketUtil.quitSendSource(param); + // CnSocketUtil.quitSendSource(param); break; case QUIT_INIT_02: socketMsg.setRequestId(SourceOperateCodeEnum.QUITE.getValue()); diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/param/PreDetectionParam.java b/detection/src/main/java/com/njcn/gather/detection/pojo/param/PreDetectionParam.java index b8909722..bcb4046e 100644 --- a/detection/src/main/java/com/njcn/gather/detection/pojo/param/PreDetectionParam.java +++ b/detection/src/main/java/com/njcn/gather/detection/pojo/param/PreDetectionParam.java @@ -61,4 +61,9 @@ public class PreDetectionParam { * 自动生成,用于生成数据表后缀 */ private String code; + + /** + * 是否是教学模式 + */ + private Boolean isTeachingMode=false; } diff --git a/detection/src/main/java/com/njcn/gather/detection/service/PreDetectionService.java b/detection/src/main/java/com/njcn/gather/detection/service/PreDetectionService.java index 98531e37..455b9b00 100644 --- a/detection/src/main/java/com/njcn/gather/detection/service/PreDetectionService.java +++ b/detection/src/main/java/com/njcn/gather/detection/service/PreDetectionService.java @@ -31,6 +31,8 @@ public interface PreDetectionService { boolean restartTemTest(PreDetectionParam param); + void closeCheck(PreDetectionParam param); + void nextScript(PreDetectionParam param); } 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 dd4a0a5f..1897a344 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 @@ -42,10 +42,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.util.*; import java.util.stream.Collectors; @@ -198,6 +195,39 @@ public class PreDetectionServiceImpl implements PreDetectionService { return true; } + @Override + public void closeCheck(PreDetectionParam param) { + commCheck(param); + specialDeal(param); + } + + @Override + public void nextScript(PreDetectionParam param) { + //开始进行下一项检测 + SourceIssue sourceIssue = SocketManager.getSourceList().get(0); + long residueCount = SocketManager.getSourceTarget(sourceIssue.getType()) - 1; + List sourceIssueList = SocketManager.getSourceList(); + if (CollUtil.isNotEmpty(sourceIssueList)) { + SourceIssue sourceIssues = SocketManager.getSourceList().get(0); + if (residueCount == 0) { + CnSocketUtil.sendToWebSocket(param.getUserPageId(), sourceIssues.getType() + "_Start", null, new ArrayList<>(), null); + } + SocketMsg xuMsg = new SocketMsg<>(); + xuMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue()); + xuMsg.setData(JSON.toJSONString(sourceIssues)); + xuMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + "&&" + sourceIssues.getType()); + SocketManager.sendMsg(param.getUserPageId() + "_Source", JSON.toJSONString(xuMsg)); + } else { + //TODO 是否最终检测完成需要推送给用户 + PqScriptCheckDataParam checkDataParam = new PqScriptCheckDataParam(); + checkDataParam.setScriptId(param.getScriptId()); + checkDataParam.setIsValueTypeName(false); + List valueType = iPqScriptCheckDataService.getValueType(checkDataParam); + iPqDevService.updateResult(param.getDevIds(), valueType, param.getCode()); + CnSocketUtil.quitSend(param); + } + } + /** * 对重复发起或者异常发起的检测进行关闭源操作 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 f5888ce0..9966ea0e 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 @@ -34,7 +34,7 @@ public class FormalTestManager { - //用于存储所有测点的试试数据 + //用于存储所有测点的实时数据 public static List realDataXiList = new ArrayList<>(); 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 8bd3c936..01874fd9 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 @@ -1,14 +1,21 @@ package com.njcn.gather.detection.util.socket; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.date.DatePattern; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.serializer.SerializerFeature; -import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum; -import com.njcn.gather.detection.pojo.param.PreDetectionParam; +import com.njcn.gather.detection.pojo.po.DevData; import com.njcn.gather.detection.pojo.vo.SocketDataMsg; -import com.njcn.gather.detection.pojo.vo.SocketMsg; +import com.njcn.gather.storage.pojo.po.AdHarmonicResult; +import com.njcn.gather.storage.pojo.po.AdNonHarmonicResult; +import java.lang.reflect.Field; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * @author wr @@ -19,9 +26,8 @@ import java.util.Map; public class MsgUtil { - - public static SocketDataMsg socketDataMsg(String textMsg){ - return JSON.parseObject(textMsg,SocketDataMsg.class); + public static SocketDataMsg socketDataMsg(String textMsg) { + return JSON.parseObject(textMsg, SocketDataMsg.class); } /** @@ -46,13 +52,12 @@ public class MsgUtil { /** - * * @param socketDataMsg * @param devMap - * @param type 0.装置 1.监测点 + * @param type 0.装置 1.监测点 * @return */ - public static String msgToWebData(SocketDataMsg socketDataMsg, Map devMap,Integer type){ + public static String msgToWebData(SocketDataMsg socketDataMsg, Map devMap, Integer type) { String data = socketDataMsg.getData(); if (StrUtil.isNotBlank(data)) { String[] parts = data.split("_"); @@ -60,10 +65,10 @@ public class MsgUtil { String key = parts[0]; String newValue = devMap.get(key); if (newValue != null) { - if(type == 0) { + if (type == 0) { socketDataMsg.setData(newValue); - }else { - socketDataMsg.setData(newValue+"_"+parts[1]+"路"); + } else { + socketDataMsg.setData(newValue + "_" + parts[1] + "路"); } } } @@ -71,6 +76,86 @@ public class MsgUtil { return JSON.toJSONString(socketDataMsg); } + public List toList(List nonHarm, List harm) { + List info = new ArrayList<>(); + if (CollUtil.isNotEmpty(nonHarm)) { + if (CollUtil.isNotEmpty(nonHarm)) { + Map> noHarmMap = nonHarm.stream() + .collect(Collectors.groupingBy(x -> x.getMonitorId() + "_" + x.getTimeId().format(DateTimeFormatter.ofPattern(DatePattern.UTC_SIMPLE_MS_PATTERN)) + "_" + x.getSort())); + noHarmMap.forEach((key, value) -> { + String[] split = key.split("_"); + DevData data = new DevData(); + data.setTime(split[1]); + data.setId(split[0]); + List sqlDataDTOS = new ArrayList<>(); + DevData.SqlDataDTO sqlDataDTO; + for (AdNonHarmonicResult result : value) { + sqlDataDTO = new DevData.SqlDataDTO(); + sqlDataDTO.setType(result.getDataType()); + sqlDataDTO.setDesc(result.getAdType()); + DevData.SqlDataDTO.ListDTO listDTO = new DevData.SqlDataDTO.ListDTO(); + listDTO.setA(StrUtil.isNotBlank(result.getAValue()) ? Double.valueOf(result.getAValue()) : null); + listDTO.setB(StrUtil.isNotBlank(result.getBValue()) ? Double.valueOf(result.getBValue()) : null); + listDTO.setC(StrUtil.isNotBlank(result.getCValue()) ? Double.valueOf(result.getCValue()) : null); + listDTO.setT(StrUtil.isNotBlank(result.getTValue()) ? Double.valueOf(result.getTValue()) : null); + sqlDataDTO.setList(listDTO); + sqlDataDTOS.add(sqlDataDTO); + } + data.setSqlData(sqlDataDTOS); + info.add(data); + }); + } + if (CollUtil.isNotEmpty(harm)) { + Map> harmMap = harm.stream() + .collect(Collectors.groupingBy(x -> x.getMonitorId() + "_" + x.getTimeId().format(DateTimeFormatter.ofPattern(DatePattern.UTC_SIMPLE_MS_PATTERN)))); + harmMap.forEach((key, value) -> { + List collect = info.stream().filter(x -> key.equals(x.getId() + "_" + x.getTime())).collect(Collectors.toList()); + List sqlDataDTOS = new ArrayList<>(); + DevData.SqlDataHarmDTO dataDTO; + for (AdHarmonicResult harmonicResult : value) { + dataDTO = new DevData.SqlDataHarmDTO(); + dataDTO.setType(harmonicResult.getDataType()); + dataDTO.setDesc(harmonicResult.getAdType()); + dataDTO.setNum(49); + DevData.SqlDataHarmDTO.ListDTO listDTO = new DevData.SqlDataHarmDTO.ListDTO(); + listDTO.setA(reflectHarmonicValue("a", harmonicResult)); + listDTO.setB(reflectHarmonicValue("b", harmonicResult)); + listDTO.setC(reflectHarmonicValue("c", harmonicResult)); + dataDTO.setList(listDTO); + sqlDataDTOS.add(dataDTO); + } + if (CollUtil.isNotEmpty(collect)) { + collect.get(0).setSqlDataHarm(sqlDataDTOS); + } else { + String[] split = key.split("_"); + DevData data = new DevData(); + data.setTime(split[1]); + data.setId(split[0]); + data.setSqlDataHarm(sqlDataDTOS); + info.add(data); + } + }); + } + } + return info; + + } + + private List reflectHarmonicValue(String phase, AdHarmonicResult adHarmonicResult) { + List info = new ArrayList<>(); + for (int i = 2; i < 50; i++) { + String fieldName = phase + "Value" + i; + try { + Field idField = AdHarmonicResult.class.getDeclaredField(fieldName); + idField.setAccessible(true); + String value = idField.get(adHarmonicResult) + ""; + info.add(value); + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException(e); + } + } + return info; + } }