From ed69e53d6948bd38108d7c54dd679d1e8eb95714 Mon Sep 17 00:00:00 2001 From: chendaofei <857448963@qq.com> Date: Mon, 6 Jan 2025 21:02:37 +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 | 15 +- .../handler/SocketDevResponseService.java | 729 ++++++++++++++---- .../handler/SocketSourceResponseService.java | 54 +- .../detection/handler/XiNumberManager.java | 39 + .../detection/pojo/dto/DevXiNumData.java | 62 ++ .../pojo/enums/SourceOperateCodeEnum.java | 31 +- .../pojo/param/PreDetectionParam.java | 2 +- .../detection/pojo/vo/CoefficientVO.java | 76 ++ .../service/PreDetectionService.java | 3 + .../service/impl/DetectionServiceImpl.java | 2 +- .../service/impl/PreDetectionServiceImpl.java | 61 +- .../detection/util/socket/CnSocketUtil.java | 4 + .../detection/util/socket/SocketManager.java | 10 + .../device/mapper/mapping/PqDevMapper.xml | 4 + .../device/device/pojo/vo/PreDetection.java | 4 + .../gather/device/pojo/enums/CommonEnum.java | 7 + .../script/pojo/param/PqScriptIssueParam.java | 4 +- .../service/IPqScriptCheckDataService.java | 6 + .../impl/PqScriptCheckDataServiceImpl.java | 25 + .../service/impl/PqScriptDtlsServiceImpl.java | 12 +- .../storage/mapper/mapping/TableGenMapper.xml | 8 +- .../service/impl/TableGenServiceImpl.java | 12 +- 22 files changed, 1008 insertions(+), 162 deletions(-) create mode 100644 detection/src/main/java/com/njcn/gather/detection/handler/XiNumberManager.java create mode 100644 detection/src/main/java/com/njcn/gather/detection/pojo/dto/DevXiNumData.java create mode 100644 detection/src/main/java/com/njcn/gather/detection/pojo/vo/CoefficientVO.java 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 d6a23c5f..c564db5a 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 @@ -74,6 +74,19 @@ public class PreDetectionController extends BaseController { } + /** + * 系数校验 + */ + @PostMapping("/coefficientCheck") + @OperateInfo + @ApiOperation("系数校验") + @ApiImplicitParam(name = "param", value = "查询参数", required = true) + public HttpResult coefficientCheck(@RequestBody PreDetectionParam param){ + String methodDescribe = getMethodDescribe("coefficientCheck"); + preDetectionService.coefficientCheck(param); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } + /** @@ -113,7 +126,7 @@ public class PreDetectionController extends BaseController { issueParam.setSourceId(param.getSourceId()); issueParam.setDevIds(param.getDevIds()); issueParam.setScriptId("a303b2224845fcc6f60198b8ca23dca9"); - issueParam.setIsPhaseSequence(false); + //issueParam.setIsPhaseSequence(false); SourceIssue sourceIssues = pqScriptDtlsService.listSourceIssue(issueParam).get(0); List pqDevList = iPqDevService.getDevInfo(param.getDevIds()); 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 baea8a8c..ea66e7ff 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 @@ -5,15 +5,14 @@ import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.njcn.gather.detection.pojo.dto.DevXiNumData; import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum; import com.njcn.gather.detection.pojo.enums.SourceResponseCodeEnum; +import com.njcn.gather.detection.pojo.param.DevPhaseSequenceParam; import com.njcn.gather.detection.pojo.param.PreDetectionParam; import com.njcn.gather.detection.pojo.po.DevData; import com.njcn.gather.detection.pojo.po.SourceCompareDev; -import com.njcn.gather.detection.pojo.vo.DevLineTestResult; -import com.njcn.gather.detection.pojo.vo.SocketDataMsg; -import com.njcn.gather.detection.pojo.vo.SocketMsg; -import com.njcn.gather.detection.pojo.vo.WebSocketVO; +import com.njcn.gather.detection.pojo.vo.*; import com.njcn.gather.detection.service.impl.DetectionServiceImpl; import com.njcn.gather.detection.util.socket.MsgUtil; import com.njcn.gather.detection.util.socket.SocketManager; @@ -21,7 +20,9 @@ import com.njcn.gather.detection.util.socket.web.WebSocketHandler; import com.njcn.gather.device.device.pojo.vo.PreDetection; import com.njcn.gather.device.device.service.IPqDevService; import com.njcn.gather.device.script.pojo.param.PqScriptIssueParam; +import com.njcn.gather.device.script.pojo.po.PqScriptCheckData; import com.njcn.gather.device.script.pojo.po.SourceIssue; +import com.njcn.gather.device.script.service.IPqScriptCheckDataService; import com.njcn.gather.device.script.service.IPqScriptDtlsService; import com.njcn.gather.storage.pojo.po.AdHarmonicResult; import com.njcn.gather.storage.pojo.po.AdNonHarmonicResult; @@ -32,10 +33,12 @@ import com.njcn.gather.system.reg.pojo.po.SysRegRes; import com.njcn.gather.system.reg.pojo.vo.SysRegResVO; import com.njcn.gather.system.reg.service.ISysRegResService; import lombok.RequiredArgsConstructor; +import org.apache.poi.ss.formula.functions.T; import org.springframework.stereotype.Service; import java.lang.reflect.Field; import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZonedDateTime; @@ -58,11 +61,10 @@ public class SocketDevResponseService { private final String handlerSourceStr = "_Source"; // ISO 8601格式 private final DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME; - private final Integer[] resCount = {0,20,5,1}; - private final List nonHarmonicList = Stream.of(DicDataEnum.FREQ.getCode(),DicDataEnum.V.getCode(),DicDataEnum.I.getCode(),DicDataEnum.IMBV.getCode(),DicDataEnum.IMBA.getCode()).collect(Collectors.toList()); - private final List harmonicList = Stream.of(DicDataEnum.HV.getCode(),DicDataEnum.HI.getCode(),DicDataEnum.HP.getCode(),DicDataEnum.HSV.getCode(),DicDataEnum.HSI.getCode()).collect(Collectors.toList()); + private final List nonHarmonicList = Stream.of(DicDataEnum.FREQ.getCode(), DicDataEnum.V.getCode(), DicDataEnum.I.getCode(), DicDataEnum.IMBV.getCode(), DicDataEnum.IMBA.getCode()).collect(Collectors.toList()); + private final List harmonicList = Stream.of(DicDataEnum.HV.getCode(), DicDataEnum.HI.getCode(), DicDataEnum.HP.getCode(), DicDataEnum.HSV.getCode(), DicDataEnum.HSI.getCode()).collect(Collectors.toList()); private final WebSocketHandler webSocketHandler; private final IPqDevService iPqDevService; @@ -71,6 +73,7 @@ public class SocketDevResponseService { private final DetectionServiceImpl detectionServiceImpl; private final DetectionDataDealService detectionDataDealService; private final ISysRegResService iSysRegResService; + private final IPqScriptCheckDataService iPqScriptCheckDataService; private final ExecutorService executorPool = Executors.newFixedThreadPool(5); @@ -110,10 +113,13 @@ public class SocketDevResponseService { List successXieyi = new ArrayList<>(); List successXieyi3 = new ArrayList<>(); - // List adNonHarmonicResultList = new ArrayList<>(); + // List adNonHarmonicResultList = new ArrayList<>(); - public void deal(PreDetectionParam param, String msg) throws Exception{ + //标识当前检测小项是否结束 + private Integer dtlsFlag = null; + + public void deal(PreDetectionParam param, String msg) throws Exception { SocketDataMsg socketDataMsg = MsgUtil.socketDataMsg(msg); String[] tem = socketDataMsg.getRequestId().split("&&"); @@ -135,6 +141,10 @@ public class SocketDevResponseService { case FORMAL_REAL: realDeal(param, socketDataMsg); break; + //系数校验 + case Coefficient_Check: + coefficient(param, socketDataMsg); + break; //退出关闭 case QUITE: quitDeal(socketDataMsg, param, msg); @@ -145,6 +155,358 @@ public class SocketDevResponseService { } + private void xiDi(List devDataList, SourceIssue sourceIssue) { + + } + + + //用于存储所有测点的试试数据 + private final List realDataXiList = new ArrayList<>(); + + /** + * 系数校验 + */ + private void coefficient(PreDetectionParam param, SocketDataMsg socketDataMsg) { + SourceOperateCodeEnum sourceOperateCodeEnum = SourceOperateCodeEnum.getDictDataEnumByCode(socketDataMsg.getOperateCode()); + SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); + SocketMsg xiSocket = new SocketMsg<>(); + + switch (sourceOperateCodeEnum) { + case DATA_CHNFACTOR$01: + //获取系数 + + break; + case DATA_CHNFACTOR$02: + //系数下发后的回调 + switch (dictDataEnumByCode) { + case SUCCESS: + xiSocket.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue()); + + if (CollUtil.isNotEmpty(XiNumberManager.devXiList)) { + //单台装置系数下发后,需要删除集合中存在的当前装置 + String devIp = XiNumberManager.devXiList.get(0); + XiNumberManager.devXiList.removeIf(it -> it.equals(devIp)); + + //继续下发每台装置系数,只到集合为空 + if (CollUtil.isNotEmpty(XiNumberManager.devXiList)) { + 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)); + } else { + if (XiNumberManager.stepNumber == 0) { + //为空则认为所有装置都已经下发,开始进行小电压的申请,步骤进行+1 + XiNumberManager.stepNumber = 1; + sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.big_end.getValue(), XiNumberManager.devParameterList.get(0)); + + sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.small_start.getValue(), XiNumberManager.devParameterList.get(1)); + + System.out.println("开始配置小电压电流参数下发给源----------------------"); + xiSocket.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue()); + xiSocket.setData(JSON.toJSONString(XiNumberManager.xiSourceIssueList.get(1))); + SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xiSocket)); + } else if (XiNumberManager.stepNumber == 1) { + //小电流系数下发完毕;开始重新测试一次大电压 + sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.small_end.getValue(), XiNumberManager.devParameterList.get(0)); + sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.big_comp_start.getValue(), XiNumberManager.devParameterList.get(0)); + + xiSocket.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue()); + xiSocket.setData(JSON.toJSONString(XiNumberManager.xiSourceIssueList.get(0))); + SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xiSocket)); + XiNumberManager.stepNumber = 2; + } + realDataXiList.clear(); + successComm.clear(); + XiNumberManager.devXiList.clear(); + } + } else { + System.out.println("应该不会出现的--------------------------------"); + } + + break; + case UNPROCESSED_BUSINESS: + + break; + case NORMAL_RESPONSE: + + break; + case DATA_RESOLVE: + + //quitSend(param); + break; + default: + + + } + break; + case DEV_DATA_REQUEST_02: + //实时采集申请 + String data = socketDataMsg.getData(); + DevData devData = JSON.parseObject(data, DevData.class); + if (ObjectUtil.isNotNull(dictDataEnumByCode)) { + SocketMsg socketMsg = new SocketMsg<>(); + switch (dictDataEnumByCode) { + case SUCCESS: + 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("从装置中已经完成获取原始数据,准备开始计算----------------------"); + //获取数据流程结束,先把所有数据存到内存中 + Map> realDataXiMap = realDataXiList.stream().collect(Collectors.groupingBy(it -> it.getId().split("_")[0])); + realDataXiMap.forEach((devIp, dataList) -> { + XiNumberManager.devXiList.add(devIp); + Map> monitorMap = dataList.stream().collect(Collectors.groupingBy(DevData::getId)); + + List gf = new ArrayList<>(); + monitorMap.forEach((monitorId, list) -> { + DevXiNumData.F F = new DevXiNumData.F(); + CoefficientVO.DevParameter devParameter; + + CoefficientVO coefficientVO = new CoefficientVO(); + + if (XiNumberManager.stepNumber == 0 || XiNumberManager.stepNumber == 2) { + devParameter = XiNumberManager.devParameterList.get(0); + coefficientVO.setType("big"); + } else { + devParameter = XiNumberManager.devParameterList.get(1); + coefficientVO.setType("small"); + } + + String[] splitStr = monitorId.split("_"); + coefficientVO.setMonitorNum(splitStr[1]); + coefficientVO.setDevName(devNameMapComm.get(splitStr[0])); + coefficientVO.setDesc((XiNumberManager.stepNumber == 0 || XiNumberManager.stepNumber == 1) ? "系数下装" : "系数校准"); + + assemblyEntity(list, F, coefficientVO, devParameter); + + DevXiNumData.GF gfItem = new DevXiNumData.GF(); + gfItem.setUMonitorPoint(Integer.parseInt(splitStr[1]) - 1); + gfItem.setF(F); + gf.add(gfItem); + + //表格数据 + WebSocketVO webSocketVO = new WebSocketVO<>(); + webSocketVO.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue()); + webSocketVO.setOperateCode(SourceOperateCodeEnum.DATA_CHNFACTOR$02.getValue()); + webSocketVO.setData(coefficientVO); + webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(webSocketVO)); + }); + DevXiNumData devXiNumData = new DevXiNumData(); + devXiNumData.setChnNum(0); + devXiNumData.setDevIP(devIp); + devXiNumData.setGf(gf); + + if (XiNumberManager.stepNumber == 0) { + XiNumberManager.devXiNumDataMap.put(devIp, devXiNumData); + } else if (XiNumberManager.stepNumber == 1) { + XiNumberManager.smallDevXiNumDataMap.put(devIp, devXiNumData); + } + }); + + + if (XiNumberManager.stepNumber == 1) { + //判断小电压是否系数超过大电压10% + double limit = 0.1; + XiNumberManager.smallDevXiNumDataMap.forEach((devIp, devXiNumDataBig) -> { + //定义一个标识: false:表示小电流系数和大电流系数 + boolean flag = true; + DevXiNumData devXiNumDataSmall = XiNumberManager.devXiNumDataMap.get(devIp); + Map gfMap = devXiNumDataSmall.getGf().stream().collect(Collectors.toMap(DevXiNumData.GF::getUMonitorPoint, Function.identity())); + + for (DevXiNumData.GF bigGf : devXiNumDataBig.getGf()) { + DevXiNumData.F smallF = gfMap.get(bigGf.getUMonitorPoint()).getF(); + DevXiNumData.F bigF = bigGf.getF(); + + boolean ia = isWithinTenPercent(smallF.getIa_gain(), bigF.getIa_gain(), limit); + boolean ib = isWithinTenPercent(smallF.getIb_gain(), bigF.getIb_gain(), limit); + boolean ic = isWithinTenPercent(smallF.getIc_gain(), bigF.getIc_gain(), limit); + boolean va = isWithinTenPercent(smallF.getUa_gain(), bigF.getUa_gain(), limit); + boolean vb = isWithinTenPercent(smallF.getUb_gain(), bigF.getUb_gain(), limit); + boolean vc = isWithinTenPercent(smallF.getUc_gain(), bigF.getUc_gain(), limit); + if (ia && ib && ic && va && vb && vc) { + + } else { + flag = false; + //继续下发一轮 + if (!ia) { + Integer newIa = (smallF.getIa_gain() + bigF.getIa_gain()) / 2; + bigF.setIa_gain(newIa); + } + if (!ib) { + Integer newIb = (smallF.getIb_gain() + bigF.getIb_gain()) / 2; + bigF.setIb_gain(newIb); + } + if (!ic) { + Integer newIc = (smallF.getIc_gain() + bigF.getIc_gain()) / 2; + bigF.setIc_gain(newIc); + } + if (!va) { + Integer newVa = (smallF.getUa_gain() + bigF.getUa_gain()) / 2; + bigF.setUa_gain(newVa); + } + if (!vb) { + Integer newUb = (smallF.getUb_gain() + bigF.getUb_gain()) / 2; + bigF.setUb_gain(newUb); + } + if (!vc) { + Integer newUc = (smallF.getUc_gain() + bigF.getUc_gain()) / 2; + bigF.setUc_gain(newUc); + } + } + } + if (flag) { + //如果系数没问题则不需要 + XiNumberManager.devXiList.removeIf(it -> it.equals(devIp)); + } + + }); + + //如果差距超过10%则再次下发系数 + if (CollUtil.isNotEmpty(XiNumberManager.devXiList)) { + socketMsg.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue()); + socketMsg.setOperateCode(SourceOperateCodeEnum.DATA_CHNFACTOR$02.getValue()); + socketMsg.setData(JSON.toJSONString(XiNumberManager.devXiNumDataMap.get(XiNumberManager.devXiList.get(0)))); + SocketManager.sendMsg(param.getUserPageId() + handlerStr, JSON.toJSONString(socketMsg)); + } else { + //存在小电压系数在误差范围内情况,直接结束。 + sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.small_end.getValue(), XiNumberManager.devParameterList.get(1)); + + sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.big_comp_start.getValue(), XiNumberManager.devParameterList.get(0)); + + //小电流系数下发完毕;开始重新测试一次大电压 + xiSocket.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue()); + xiSocket.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue()); + xiSocket.setData(JSON.toJSONString(XiNumberManager.xiSourceIssueList.get(0))); + SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xiSocket)); + XiNumberManager.stepNumber = 2; + realDataXiList.clear(); + successComm.clear(); + } + } else if (XiNumberManager.stepNumber == 2) { + //大电压处理 + 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)); + + xiSocket.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue()); + xiSocket.setData(JSON.toJSONString(XiNumberManager.xiSourceIssueList.get(1))); + SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xiSocket)); + XiNumberManager.stepNumber = 3; + realDataXiList.clear(); + successComm.clear(); + } else if (XiNumberManager.stepNumber == 3) { + sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.small_comp_end.getValue(), XiNumberManager.devParameterList.get(1)); + System.out.println("-------------------------已经全部结束----------------------"); + quitSend(param); + } + + } + break; + case UNPROCESSED_BUSINESS: + webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + break; + case NORMAL_RESPONSE: + realDataXiList.add(devData); + break; + default: + socketMsg.setRequestId(socketDataMsg.getRequestId()); + socketMsg.setOperateCode(socketDataMsg.getOperateCode()); + socketMsg.setData(dictDataEnumByCode.getMessage()); + webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(socketMsg)); + break; + } + } + break; + default: + } + + + } + + + /** + * 比较两个数的差值,是否再limit范围内 + */ + private boolean isWithinTenPercent(double num1, double num2, double limit) { + double diff = Math.abs(num1 - num2); + double larger = Math.max(num1, num2); + double percentage = diff / larger; + return percentage <= limit; + } + + + private void assemblyEntity(List deList, DevXiNumData.F F, CoefficientVO coefficientVO, CoefficientVO.DevParameter devParameter) { + //表示接收完成,必须保证10个数 + if (deList.size() >= 10) { + + List aList = deList.stream().map(it -> it.getSqlData().get(0).getList().getA()).sorted().collect(Collectors.toList()); + List bList = deList.stream().map(it -> it.getSqlData().get(0).getList().getB()).sorted().collect(Collectors.toList()); + List cList = deList.stream().map(it -> it.getSqlData().get(0).getList().getC()).sorted().collect(Collectors.toList()); + + Double optionalA = reduceList(aList); + Double optionalB = reduceList(bList); + Double optionalC = reduceList(cList); + + List aIList = deList.stream().map(it -> it.getSqlData().get(1).getList().getA()).sorted().collect(Collectors.toList()); + List bIList = deList.stream().map(it -> it.getSqlData().get(1).getList().getB()).sorted().collect(Collectors.toList()); + List cIList = deList.stream().map(it -> it.getSqlData().get(1).getList().getC()).sorted().collect(Collectors.toList()); + + Double optionalIA = reduceList(aIList); + Double optionalIB = reduceList(bIList); + Double optionalIC = reduceList(cIList); + + coefficientVO.setAVuData(String.valueOf(optionalA)); + coefficientVO.setBVuData(String.valueOf(optionalB)); + coefficientVO.setCVuData(String.valueOf(optionalC)); + coefficientVO.setAIeData(String.valueOf(optionalIA)); + coefficientVO.setBIeData(String.valueOf(optionalIB)); + coefficientVO.setCIeData(String.valueOf(optionalIC)); + + if (XiNumberManager.stepNumber == 0 || XiNumberManager.stepNumber == 1) { + Integer aXi = (int) ((optionalA / devParameter.getDevCurr()) * 10000); + Integer bXi = (int) ((optionalB / devParameter.getDevCurr()) * 10000); + Integer cXi = (int) ((optionalC / devParameter.getDevCurr()) * 10000); + Integer aIXi = (int) ((optionalIA / devParameter.getDevCurr()) * 10000); + Integer bIXi = (int) ((optionalIB / devParameter.getDevCurr()) * 10000); + Integer cIXi = (int) ((optionalIC / devParameter.getDevCurr()) * 10000); + + coefficientVO.setAVuXi(aXi.toString()); + coefficientVO.setBVuXi(bXi.toString()); + coefficientVO.setCVuXi(cXi.toString()); + coefficientVO.setAIeXi(aIXi.toString()); + coefficientVO.setBIeXi(bIXi.toString()); + coefficientVO.setCIeXi(cIXi.toString()); + + F.setUa_gain(aXi); + F.setUb_gain(bXi); + F.setUc_gain(cXi); + F.setIa_gain(aIXi); + F.setIb_gain(bIXi); + F.setIc_gain(cIXi); + } else { + double vLimit = 0.1 * devParameter.getDevVolt() / 100; + double iLimit = 0.005; + coefficientVO.setAVuXi(isWithinTenPercent(optionalA, devParameter.getDevVolt(), vLimit) ? "合格" : "不合格"); + coefficientVO.setBVuXi(isWithinTenPercent(optionalB, devParameter.getDevVolt(), vLimit) ? "合格" : "不合格"); + coefficientVO.setCVuXi(isWithinTenPercent(optionalC, devParameter.getDevVolt(), vLimit) ? "合格" : "不合格"); + coefficientVO.setAIeXi(isWithinTenPercent(optionalIA, devParameter.getDevCurr(), iLimit) ? "合格" : "不合格"); + coefficientVO.setBIeXi(isWithinTenPercent(optionalIB, devParameter.getDevCurr(), iLimit) ? "合格" : "不合格"); + coefficientVO.setCIeXi(isWithinTenPercent(optionalIC, devParameter.getDevCurr(), iLimit) ? "合格" : "不合格"); + } + } + } + + /** + * 删除集合中前五个数以及最后两个数 + */ + private Double reduceList(List valList) { + valList.subList(0, 5).clear(); + valList.subList(valList.size() - 3, valList.size() - 1).clear(); + return valList.stream().mapToDouble(Double::doubleValue).average().getAsDouble(); + } + + /** * 装置通讯检测 */ @@ -221,7 +583,7 @@ public class SocketDevResponseService { */ private void devXieyi(SocketDataMsg socketDataMsg, PreDetectionParam param, String msg) { SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); - SocketMsg socketMsg = new SocketMsg(); + SocketMsg socketMsg = new SocketMsg<>(); String s = param.getUserPageId() + handlerStr; switch (Objects.requireNonNull(dictDataEnumByCode)) { @@ -281,7 +643,7 @@ public class SocketDevResponseService { List sourceIssues; if (SourceOperateCodeEnum.FORMAL_TEST.getValue().equals(param.getOperateType())) { //正式检测 - issueParam.setIsPhaseSequence(false); + issueParam.setIsPhaseSequence(SourceOperateCodeEnum.FORMAL_TEST.getValue()); sourceIssues = pqScriptDtlsService.listSourceIssue(issueParam); sourceIssues = sourceIssues.stream().sorted(Comparator.comparing(SourceIssue::getIndex)).collect(Collectors.toList()); SocketManager.addSourceList(sourceIssues); @@ -293,11 +655,38 @@ public class SocketDevResponseService { } else if (SourceOperateCodeEnum.PRE_TEST.getValue().equals(param.getOperateType())) { //预检测的相序检测 - issueParam.setIsPhaseSequence(true); + issueParam.setIsPhaseSequence(SourceOperateCodeEnum.PHASE_TEST.getValue()); xuMsg.setRequestId(SourceOperateCodeEnum.YJC_XUJY.getValue()); sourceIssues = pqScriptDtlsService.listSourceIssue(issueParam); xuMsg.setData(JSON.toJSONString(sourceIssues.get(0))); SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xuMsg)); + } else if (SourceOperateCodeEnum.COEFFICIENT_TEST.getValue().equals(param.getOperateType())) { + //系数校验 + + /* issueParam.setIsPhaseSequence(SourceOperateCodeEnum.PHASE_TEST.getValue()); + xuMsg.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue()); + sourceIssues = pqScriptDtlsService.listSourceIssue(issueParam); + xuMsg.setData(JSON.toJSONString(sourceIssues.get(0))); + SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xuMsg));*/ + + WebSocketVO webSocketVO = new WebSocketVO<>(); + webSocketVO.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue()); + webSocketVO.setOperateCode(SourceOperateCodeEnum.big_start.getValue()); + webSocketVO.setData(XiNumberManager.devParameterList.get(0)); + webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(webSocketVO)); + + xuMsg.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue()); + xuMsg.setData(JSON.toJSONString(XiNumberManager.xiSourceIssueList.get(0))); + SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xuMsg)); + + XiNumberManager.stepNumber = 0; + XiNumberManager.devXiList.clear(); + XiNumberManager.devXiNumDataMap.clear(); + XiNumberManager.smallDevXiNumDataMap.clear(); + + + //系数校验只支持单个装置修改系数 + // SocketManager.monitorXiList = new ArrayList<>(monitorIdListComm); } successComm.clear(); } @@ -351,7 +740,7 @@ public class SocketDevResponseService { PqScriptIssueParam sourceParam = new PqScriptIssueParam(); sourceParam.setPlanId(param.getPlanId()); sourceParam.setDevIds(param.getDevIds()); - sourceParam.setIsPhaseSequence(true); + sourceParam.setIsPhaseSequence(SourceOperateCodeEnum.PHASE_TEST.getValue()); sourceParam.setSourceId(param.getSourceId()); List sourceIssues = scriptDtlsService.listSourceIssue(sourceParam); List info = new ArrayList<>(); @@ -373,18 +762,17 @@ public class SocketDevResponseService { } String userSource = param.getUserPageId() + handlerSourceStr; - SocketMsg msg = new SocketMsg(); + SocketMsg msg = new SocketMsg<>(); - msg.setRequestId(SourceOperateCodeEnum.QUITE_SOURCE.getValue()); + /* msg.setRequestId(SourceOperateCodeEnum.QUITE_SOURCE.getValue()); msg.setOperateCode(SourceOperateCodeEnum.CLOSE_GATHER.getValue()); Map map = new HashMap<>(1); map.put("sourceId", sourceIssues.get(0).getSourceId()); msg.setData(JSON.toJSONString(map)); - SocketManager.sendMsg(userSource, MsgUtil.toJsonWithNewLinePlain(msg)); + SocketManager.sendMsg(userSource, MsgUtil.toJsonWithNewLinePlain(msg));*/ //同时关闭设备三个步骤 - SocketMsg quitDevMsg = new SocketMsg(); quitSend(param); //向前端推送消息 @@ -394,12 +782,6 @@ public class SocketDevResponseService { temMsg.setRequestId(SourceOperateCodeEnum.YJC_XUJY.getValue()); webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(temMsg)); - - //如果是正式校验需要继续校验 - if (SourceOperateCodeEnum.FORMAL_TEST.getValue().equals(param.getOperateType())) { - - } - } break; case UNPROCESSED_BUSINESS: @@ -436,18 +818,24 @@ public class SocketDevResponseService { /** * 实时数据 */ - private final List devDataList = new ArrayList(); + public void realDeal(PreDetectionParam param, SocketDataMsg socketDataMsg) { String data = socketDataMsg.getData(); DevData devData = JSON.parseObject(data, DevData.class); SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); + SourceIssue sourceIssue = SocketManager.getSourceList().get(0); + if (Objects.nonNull(dtlsFlag)) { + if (!sourceIssue.getIndex().equals(dtlsFlag)) { + + } + } + dtlsFlag = sourceIssue.getIndex(); realDonging(devData, dictDataEnumByCode, sourceIssue, socketDataMsg, param); - } public void realDonging(DevData devData, SourceResponseCodeEnum dictDataEnumByCode, SourceIssue sourceIssue, SocketDataMsg socketDataMsg, PreDetectionParam param) { @@ -456,28 +844,22 @@ public class SocketDevResponseService { switch (dictDataEnumByCode) { case SUCCESS: //List sqlDataDTOList = devData.getSqlData(); - devDataList.add(devData); + realDataXiList.add(devData); successComm.add(socketDataMsg.getRequestId()); - System.out.println("获取devData数量............." + devDataList.size()); if (successComm.size() == monitorIdListComm.size()) { //TODO 理论上遇到返回code10200的数量与监测点数量一致则认为数据返回结束,但是会存在缺失数据情况,例如有部分装置是没有暂降功能的 - - - System.out.println(sourceIssue.getType() +"_"+ sourceIssue.getIndex() + "当前测试小项读取数据已经全部结束。。。。。。。。。"); - - //原始数据入库 - baseDataInsert(devDataList,sourceIssue,param); - - System.out.println(JSON.toJSONString(sourceIssue)); + System.out.println(sourceIssue.getType() + "_" + sourceIssue.getIndex() + "当前测试小项读取数据已经全部结束。。。。。。。。。"); //开启线程进行入库原始数据操作 - Map flag = detectionServiceImpl.text(devDataList, param.getErrorSysId(), devIdMapComm, sourceIssue, DictDataEnum.AT_WILL_VALUE); + baseDataInsert(realDataXiList, sourceIssue, param, SocketManager.valueTypeMap); + + Map flag = detectionServiceImpl.text(realDataXiList, param.getErrorSysId(), devIdMapComm, sourceIssue, DictDataEnum.AT_WILL_VALUE); System.out.println(flag); long tem = SocketManager.getSourceTarget(sourceIssue.getType()) - 1; SocketManager.addTargetMap(sourceIssue.getType(), tem); - System.out.println("该大项还有"+tem+"个小项没有进行检测!!!!!!!!"); + System.out.println("该大项还有" + tem + "个小项没有进行检测!!!!!!!!"); if (tem == 0) { System.out.println(sourceIssue.getType() + sourceIssue.getIndex() + "当前测试大项已经全部结束》》》》》》》》"); @@ -492,21 +874,19 @@ public class SocketDevResponseService { devLineTestResult.setDeviceId(dev.getDevId()); devLineTestResult.setDeviceName(dev.getDevName()); - List tt = new ArrayList<>(); + List resultFlagList = new ArrayList<>(); List monitorListDTOList = dev.getMonitorList(); for (PreDetection.MonitorListDTO point : monitorListDTOList) { Integer resultFlag = flag.get(dev.getDevIP() + "_" + point.getLine()); - tt.add(resultFlag); + resultFlagList.add(resultFlag); } - devLineTestResult.setChnResult(tt.toArray(new Integer[monitorListDTOList.size()])); + devLineTestResult.setChnResult(resultFlagList.toArray(new Integer[monitorListDTOList.size()])); devListRes.add(devLineTestResult); }); webSocketVO.setData(devListRes); webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(webSocketVO)); - - } - System.out.println("当前小项结束进行删除============"+sourceIssue.getType()+"_"+sourceIssue.getIndex()); + System.out.println("当前小项结束进行删除============" + sourceIssue.getType() + "_" + sourceIssue.getIndex()); //当小项结束后需要删除集合中的小项 SocketManager.delSource(sourceIssue.getIndex()); @@ -521,13 +901,13 @@ public class SocketDevResponseService { xuMsg.setData(JSON.toJSONString(sourceIssues)); xuMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + "&&" + sourceIssues.getType()); SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xuMsg)); - }else { + } else { //TODO 是否最终检测完成需要推送给用户 quitSend(param); } successComm.clear(); - devDataList.clear(); + realDataXiList.clear(); } break; @@ -536,7 +916,7 @@ public class SocketDevResponseService { break; case NORMAL_RESPONSE: - devDataList.add(devData); + realDataXiList.add(devData); break; case DEV_ERROR: @@ -622,9 +1002,10 @@ public class SocketDevResponseService { * 退出检测 */ private void quitSend(PreDetectionParam param) { - SocketMsg socketMsg = new SocketMsg(); + SocketMsg socketMsg = new SocketMsg<>(); socketMsg.setRequestId(SourceOperateCodeEnum.QUITE.getValue()); socketMsg.setOperateCode(SourceOperateCodeEnum.QUIT_INIT_03.getValue()); + SocketManager.sendMsg(param.getUserPageId() + handlerStr, JSON.toJSONString(socketMsg)); } @@ -650,15 +1031,15 @@ public class SocketDevResponseService { List channelList = issue.getChannelList(); List sqlData = dev.getSqlData(); - List dataV = sqlData.stream().filter(x -> "电压有效值".equals(x.getDesc())).collect(Collectors.toList()); - List dataI = sqlData.stream().filter(x -> "电流有效值".equals(x.getDesc())).collect(Collectors.toList()); + List dataV = sqlData.stream().filter(x -> "VRMS".equals(x.getDesc())).collect(Collectors.toList()); + List dataI = sqlData.stream().filter(x -> "IRMS".equals(x.getDesc())).collect(Collectors.toList()); if (CollUtil.isNotEmpty(dataV)) { - SourceCompareDev compareDev = getSourceCompareDev(split, dataV, "电压有效值", "U", channelList); + SourceCompareDev compareDev = getSourceCompareDev(split, dataV, "VRMS", "U", channelList); compareDev.setDevName(devName); info.add(compareDev); } if (CollUtil.isNotEmpty(dataI)) { - SourceCompareDev compareDev = getSourceCompareDev(split, dataI, "电流有效值", "I", channelList); + SourceCompareDev compareDev = getSourceCompareDev(split, dataI, "IRMS", "I", channelList); compareDev.setDevName(devName); info.add(compareDev); } @@ -742,7 +1123,7 @@ public class SocketDevResponseService { this.success = new ArrayList<>(); this.devDataMap = new HashMap<>(); - this.devDataList.clear(); + this.realDataXiList.clear(); this.devList.clear(); List pqDevList = iPqDevService.getDevInfo(param.getDevIds()); @@ -756,123 +1137,184 @@ public class SocketDevResponseService { //初始化有效数据数 Map sysRegResMap = iSysRegResService.listRegRes(); + SocketManager.temXiDevList = new ArrayList<>(devList); + //字典树 + SocketManager.valueTypeMap.clear(); + SocketManager.valueTypeMap = iPqScriptCheckDataService.getValueTypeMap(param.getScriptId()); + + initXiManager(param); } + //初始化 + private void initXiManager(PreDetectionParam param) { + + Double v = devList.get(0).getDevVolt(); + Double i = 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()); + + 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); + + PqScriptIssueParam issueParam = new PqScriptIssueParam(); + issueParam.setPlanId(param.getPlanId()); + issueParam.setSourceId(param.getSourceId()); + issueParam.setDevIds(param.getDevIds()); + issueParam.setScriptId("a303b2224845fcc6f60198b8ca23dca9"); + issueParam.setIsPhaseSequence(SourceOperateCodeEnum.COEFFICIENT_TEST.getValue()); + List sourceIssues = pqScriptDtlsService.listSourceIssue(issueParam); + for (int j = 0; j < sourceIssues.size(); j++) { + if (i == 0) { + sourceIssues.get(j).getChannelList().forEach(it -> { + if (it.getChannelType().contains("U")) { + it.setFAmp(XiNumberManager.devParameterList.get(0).getDevVolt()); + } else if (it.getChannelType().contains("I")) { + it.setFAmp(XiNumberManager.devParameterList.get(0).getDevCurr()); + } + }); + } else { + sourceIssues.get(j).getChannelList().forEach(it -> { + if (it.getChannelType().contains("U")) { + it.setFAmp(XiNumberManager.devParameterList.get(1).getDevVolt()); + } else if (it.getChannelType().contains("I")) { + it.setFAmp(XiNumberManager.devParameterList.get(1).getDevCurr()); + } + }); + } + } + XiNumberManager.xiSourceIssueList = sourceIssues; + } /** * 原始数据入库 + * * @author cdf * @date 2024/12/29 */ - private void baseDataInsert(List devDataList,SourceIssue sourceIssue,PreDetectionParam param){ + private void baseDataInsert(List devDataList, SourceIssue sourceIssue, PreDetectionParam param, Map checkDataMap) { Runnable runnable = () -> { - + System.out.println("原始数据插入数据库开始执行========================================="); List adNonHarmonicResultList = new ArrayList<>(); List adHarmonicResultList = new ArrayList<>(); - for(DevData data : devDataList){ - LocalDateTime localDateTime = timeFormat(data.getTime(),formatter); - if(Objects.nonNull(localDateTime)){ + for (DevData data : devDataList) { + LocalDateTime localDateTime = timeFormat(data.getTime(), formatter); + if (Objects.nonNull(localDateTime)) { String[] splitArr = data.getId().split("_"); - String temId = devDataMap.get(splitArr[0]).getId()+"_"+splitArr[1]; - if(nonHarmonicList.contains(sourceIssue.getType())){ - AdNonHarmonicResult adNonHarmonicResult = new AdNonHarmonicResult(); - adNonHarmonicResult.setTimeId(localDateTime); - adNonHarmonicResult.setMonitorId(temId); - adNonHarmonicResult.setScriptId(param.getScriptId()); - adNonHarmonicResult.setSort(sourceIssue.getIndex()); - adNonHarmonicResult.setAdType(sourceIssue.getId()); - adNonHarmonicResult.setDataType("avg"); - DevData.SqlDataDTO.ListDTO tem = data.getSqlData().get(0).getList(); + String temId = devIdMapComm.get(splitArr[0]) + "_" + splitArr[1]; - Double a = tem.getA(); - Double b = tem.getB(); - Double c = tem.getC(); - Double d = tem.getT(); - if(Objects.nonNull(a)){ - adNonHarmonicResult.setAValue(String.format("%.7f", a)); - } - if(Objects.nonNull(b)){ - adNonHarmonicResult.setBValue(String.format("%.7f", b)); - } - if(Objects.nonNull(c)){ - adNonHarmonicResult.setCValue(String.format("%.7f", c)); - } - if(Objects.nonNull(d)){ - adNonHarmonicResult.setTValue(String.format("%.7f", d)); - } - adNonHarmonicResultList.add(adNonHarmonicResult); - }else { - AdHarmonicResult adHarmonicResult = new AdHarmonicResult(); - adHarmonicResult.setTimeId(localDateTime); + if (nonHarmonicList.contains(sourceIssue.getType())) { + for (DevData.SqlDataDTO sqlDataDTO : data.getSqlData()) { + DevData.SqlDataDTO.ListDTO listDTO = sqlDataDTO.getList(); + AdNonHarmonicResult adNonHarmonicResult = new AdNonHarmonicResult(); + adNonHarmonicResult.setTimeId(localDateTime); + adNonHarmonicResult.setMonitorId(temId); + adNonHarmonicResult.setScriptId(param.getScriptId()); + adNonHarmonicResult.setSort(sourceIssue.getIndex()); + adNonHarmonicResult.setAdType(checkDataMap.get(sqlDataDTO.getDesc())); + adNonHarmonicResult.setDataType("avg"); - adHarmonicResult.setMonitorId(temId); - adHarmonicResult.setScriptId(param.getScriptId()); - adHarmonicResult.setSort(sourceIssue.getIndex()); - adHarmonicResult.setAdType(sourceIssue.getId()); - adHarmonicResult.setDataType("avg"); - if(DicDataEnum.HI.getCode().equals(sourceIssue.getType())||DicDataEnum.HSI.getCode().equals(sourceIssue.getType())){ - DevData.SqlDataDTO.ListDTO vvv = data.getSqlData().get(0).getList(); - Double aV = vvv.getA(); - Double bV = vvv.getB(); - Double cV = vvv.getC(); - if (Objects.nonNull(aV)) { - adHarmonicResult.setAValue1(String.format("%.7f", aV)); + Double a = listDTO.getA(); + Double b = listDTO.getB(); + Double c = listDTO.getC(); + Double d = listDTO.getT(); + if (Objects.nonNull(a)) { + adNonHarmonicResult.setAValue(String.format("%.7f", a)); } - if (Objects.nonNull(bV)) { - adHarmonicResult.setBValue1(String.format("%.7f", bV)); + if (Objects.nonNull(b)) { + adNonHarmonicResult.setBValue(String.format("%.7f", b)); } - if (Objects.nonNull(cV)) { - adHarmonicResult.setCValue1(String.format("%.7f", cV)); + if (Objects.nonNull(c)) { + adNonHarmonicResult.setCValue(String.format("%.7f", c)); } + if (Objects.nonNull(d)) { + adNonHarmonicResult.setTValue(String.format("%.7f", d)); + } + adNonHarmonicResultList.add(adNonHarmonicResult); + } + } else { + for (DevData.SqlDataHarmDTO sqlDataDTO : data.getSqlDataHarm()) { + AdHarmonicResult adHarmonicResult = new AdHarmonicResult(); + adHarmonicResult.setTimeId(localDateTime); + + adHarmonicResult.setMonitorId(temId); + adHarmonicResult.setScriptId(param.getScriptId()); + adHarmonicResult.setSort(sourceIssue.getIndex()); + adHarmonicResult.setAdType(checkDataMap.get(sqlDataDTO.getDesc())); + adHarmonicResult.setDataType("avg"); + + if (!DicDataEnum.HI.getCode().equals(sourceIssue.getType()) && !DicDataEnum.HSI.getCode().equals(sourceIssue.getType()) && !DicDataEnum.HP.getCode().equals(sourceIssue.getType())) { + DevData.SqlDataDTO.ListDTO vvv = data.getSqlData().get(0).getList(); + Double aV = vvv.getA(); + Double bV = vvv.getB(); + Double cV = vvv.getC(); + if (Objects.nonNull(aV)) { + adHarmonicResult.setAValue1(String.format("%.7f", aV)); + } + if (Objects.nonNull(bV)) { + adHarmonicResult.setBValue1(String.format("%.7f", bV)); + } + if (Objects.nonNull(cV)) { + adHarmonicResult.setCValue1(String.format("%.7f", cV)); + } + } + + DevData.SqlDataHarmDTO.ListDTO tem = sqlDataDTO.getList(); + List a = tem.getA(); + List b = tem.getB(); + List c = tem.getC(); + + Class example = (Class) adHarmonicResult.getClass(); + for (int i = 2; i <= 50; i++) { + // 通过反射设置name字段的值 + try { + // 假设这些字段已经以正确的方式定义在AdHarmonicResult类中 + Field aField = example.getDeclaredField("aValue" + i); + Field bField = example.getDeclaredField("bValue" + i); + Field cField = example.getDeclaredField("cValue" + i); + + aField.setAccessible(true); + aField.set(adHarmonicResult, a.get(i - 2)); + bField.setAccessible(true); + bField.set(adHarmonicResult, b.get(i - 2)); + cField.setAccessible(true); + cField.set(adHarmonicResult, c.get(i - 2)); + + } catch (NoSuchFieldException | IllegalAccessException e) { + e.printStackTrace(); + } + } + adHarmonicResultList.add(adHarmonicResult); } - DevData.SqlDataHarmDTO.ListDTO tem = data.getSqlDataHarm().get(0).getList(); - List a = tem.getA(); - List b = tem.getB(); - List c = tem.getC(); - - Class example = (Class) adHarmonicResult.getClass(); - for(int i = 2;i<=50;i++){ - // 通过反射设置name字段的值 - try { - // 假设这些字段已经以正确的方式定义在AdHarmonicResult类中 - Field aField = example.getDeclaredField("aValue" + i); - Field bField = example.getDeclaredField("bValue" + i); - Field cField = example.getDeclaredField("cValue" + i); - - aField.setAccessible(true); - aField.set(adHarmonicResult,a.get(i - 2)); - bField.setAccessible(true); - bField.set(adHarmonicResult,b.get(i - 2)); - cField.setAccessible(true); - cField.set(adHarmonicResult,c.get(i - 2)); - - } catch (NoSuchFieldException | IllegalAccessException e) { - e.printStackTrace(); - } - } - adHarmonicResultList.add(adHarmonicResult); } + + } } - if(CollUtil.isNotEmpty(adNonHarmonicResultList)){ - detectionDataDealService.acceptAdNon(adNonHarmonicResultList,"1"); + if (CollUtil.isNotEmpty(adNonHarmonicResultList)) { + detectionDataDealService.acceptAdNon(adNonHarmonicResultList, "1"); } - if(CollUtil.isNotEmpty(adHarmonicResultList)){ - detectionDataDealService.acceptAd(adHarmonicResultList,"1"); + if (CollUtil.isNotEmpty(adHarmonicResultList)) { + detectionDataDealService.acceptAd(adHarmonicResultList, "1"); } + System.out.println("原始数据插入数据库执行成功========================================="); }; executorPool.submit(runnable); } - private LocalDateTime timeFormat(String dateTimeStr, DateTimeFormatter formatter){ - //DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME; // ISO 8601格式 + private LocalDateTime timeFormat(String dateTimeStr, DateTimeFormatter formatter) { try { // 假设输入是UTC时间,将其解析为ZonedDateTime ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateTimeStr, formatter.withZone(ZoneId.of("UTC"))); @@ -888,4 +1330,21 @@ public class SocketDevResponseService { } + /** + * 向前端推送消息 + * + * @param userId 前端用户信息 + * @param requestId + * @param operatorType + * @param devParameter + */ + private void sendWebSocket(String userId, String requestId, String operatorType, CoefficientVO.DevParameter devParameter) { + WebSocketVO webSocketVO = new WebSocketVO<>(); + webSocketVO.setRequestId(requestId); + webSocketVO.setOperateCode(operatorType); + webSocketVO.setData(devParameter); + webSocketHandler.sendMsgToUser(userId, JSON.toJSONString(webSocketVO)); + } + + } 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 b5cc9a00..302f77db 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 @@ -1,5 +1,6 @@ package com.njcn.gather.detection.handler; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum; @@ -48,6 +49,7 @@ public class SocketSourceResponseService { private Integer port; private List devList = new ArrayList<>(); + private List monitorIdList = new ArrayList<>(); @@ -69,6 +71,10 @@ public class SocketSourceResponseService { case FORMAL_REAL: senParamToDev(param, socketDataMsg); break; + //系数校验 + case Coefficient_Check: + coefficient(param, socketDataMsg); + break; case QUITE_SOURCE: quitDeal(socketDataMsg,param); // System.out.println("关闭源回调:"+msg); @@ -82,6 +88,47 @@ public class SocketSourceResponseService { } + + + /** + * 系数校验源数据返回处理 + */ + private void coefficient(PreDetectionParam param, SocketDataMsg socketDataMsg) { + SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); + if (ObjectUtil.isNotNull(dictDataEnumByCode)) { + SocketMsg socketMsg = new SocketMsg<>(); + switch (dictDataEnumByCode) { + case SUCCESS: + //向前端推送信息 + webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + + String s = param.getUserPageId() + DEV; + socketMsg.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue()); + socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); + DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam(); + phaseSequenceParam.setMoniterIdList(monitorIdList); + phaseSequenceParam.setDataType(Arrays.asList("real$VRMS","real$IRMS")); + phaseSequenceParam.setReadCount(10); + phaseSequenceParam.setIgnoreCount(2); + socketMsg.setData(JSON.toJSONString(phaseSequenceParam)); + SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); + + + + break; + case UNPROCESSED_BUSINESS: + webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + break; + default: + socketMsg.setRequestId(socketDataMsg.getRequestId()); + socketMsg.setOperateCode(socketDataMsg.getOperateCode()); + socketMsg.setData(dictDataEnumByCode.getMessage()); + webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(socketMsg)); + break; + } + } + } + /** * 装置检测(当源初始化成功后,直接向装置通道向装置服务器发送,装置检测) * @@ -147,9 +194,10 @@ public class SocketSourceResponseService { List moniterIdList = pqDevList.stream().flatMap(x -> x.getMonitorList().stream()) .map(PreDetection.MonitorListDTO::getLineId) .collect(Collectors.toList()); + DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam(); phaseSequenceParam.setMoniterIdList(moniterIdList); - phaseSequenceParam.setDataType(Arrays.asList("实时数据/电压有效值", "实时数据/电流有效值")); + phaseSequenceParam.setDataType(Arrays.asList("real$VRMS", "real$IRMS")); phaseSequenceParam.setReadCount(1); phaseSequenceParam.setIgnoreCount(10); socketMsg.setData(JSON.toJSONString(phaseSequenceParam)); @@ -266,7 +314,11 @@ public class SocketSourceResponseService { public void initList(PreDetectionParam param){ devList.clear(); + monitorIdList.clear(); this.devList = iPqDevService.getDevInfo(param.getDevIds()); + this.monitorIdList = devList.stream().flatMap(x -> x.getMonitorList().stream()) + .map(PreDetection.MonitorListDTO::getLineId) + .collect(Collectors.toList()); } } diff --git a/detection/src/main/java/com/njcn/gather/detection/handler/XiNumberManager.java b/detection/src/main/java/com/njcn/gather/detection/handler/XiNumberManager.java new file mode 100644 index 00000000..705b9545 --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/detection/handler/XiNumberManager.java @@ -0,0 +1,39 @@ +package com.njcn.gather.detection.handler; + +import com.njcn.gather.detection.pojo.dto.DevXiNumData; +import com.njcn.gather.detection.pojo.vo.CoefficientVO; +import com.njcn.gather.device.script.pojo.po.SourceIssue; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * @Author: cdf + * @CreateTime: 2025-01-05 + * @Description: 系数管理器 + */ +public class XiNumberManager { + + public static List xiSourceIssueList = new ArrayList<>(); + + public static List devXiList = new ArrayList<>(); + + public static Map devXiNumDataMap = new ConcurrentHashMap<>(); + + public static Map smallDevXiNumDataMap = new ConcurrentHashMap<>(); + + //系数校验步数计数器 0.大电压 1.小电压 2.小电压 3.大电压 + public static Integer stepNumber = 0; + + + public static List devParameterList = new ArrayList<>(); + + + + public static List rateDevParameterList = new ArrayList<>(); + + +} diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/dto/DevXiNumData.java b/detection/src/main/java/com/njcn/gather/detection/pojo/dto/DevXiNumData.java new file mode 100644 index 00000000..10d082cc --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/detection/pojo/dto/DevXiNumData.java @@ -0,0 +1,62 @@ +package com.njcn.gather.detection.pojo.dto; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +import java.util.List; + +/** + * @Author: cdf + * @CreateTime: 2025-01-04 + * @Description: 给装置下发的系数 + */ +@Data +public class DevXiNumData { + + private String devIP; + + private Integer chnNum; + + private List gf; + + @Data + public static class GF{ + + private Integer uMonitorPoint; + + private F f; + } + + @Data + public static class F{ + + private Integer count; + + @JSONField(name = "Ua_gain", ordinal = 1) + private Integer Ua_gain; + @JSONField(name = "Ub_gain", ordinal = 2) + private Integer Ub_gain; + @JSONField(name = "Uc_gain", ordinal = 3) + private Integer Uc_gain; + @JSONField(name = "U0_gain", ordinal = 4) + private Integer U0_gain; + + @JSONField(name = "Ia_gain", ordinal = 5) + private Integer Ia_gain; + @JSONField(name = "Ib_gain", ordinal = 6) + private Integer Ib_gain; + @JSONField(name = "Ic_gain", ordinal = 7) + private Integer Ic_gain; + @JSONField(name = "I0_gain", ordinal = 8) + private Integer I0_gain; + + @JSONField(name = "Uab_gain", ordinal = 9) + private Integer Uab_gain; + @JSONField(name = "Ubc_gain", ordinal = 10) + private Integer Ubc_gain; + @JSONField(name = "Uca_gain", ordinal = 11) + private Integer Uca_gain; + + + } +} 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 e74f347c..f43350fe 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 @@ -35,13 +35,17 @@ public enum SourceOperateCodeEnum { QUIT_INIT_03("QUIT_FUNEND$03", "关闭暂态申请"), + DATA_CHNFACTOR$01("DATA_CHNFACTOR$01","校验系数获取"), + DATA_CHNFACTOR$02("DATA_CHNFACTOR$02","校验系数下发"), + + /** * 请求操作类型对应实体中 requestId */ YJC_YTXJY("yjc_ytxjy", "预检测_源通讯检测"), YJC_SBTXJY("yjc_sbtxjy", "预检测_设备通讯检测"), YJC_XYJY("yjc_xyjy", "预检测_协议校验"), - YJC_XUJY("YJC_xujy", "预检测_相序校验"), + YJC_XUJY("YJC_xujy", "相序校验"), FORMAL_REAL("formal_real","正式检测_获取实时数据"), FORMAL_STATISTIC("formal_statistic","正式检测_获取统计数据"), @@ -51,11 +55,30 @@ public enum SourceOperateCodeEnum { QUITE_SOURCE("close_source","预监测_关闭源通讯"), + Coefficient_Check("Coefficient_Check","系数校验"), - PRE_TEST("0","预检测"), - FORMAL_TEST("1","正式检测"), - TIME_TEST("2","守时检测"), + /** + * + */ + COEFFICIENT_TEST("0","系数校验"), + PRE_TEST("1","预检测"), + FORMAL_TEST("2","正式检测"), + TIME_TEST("3","守时检测"), + PHASE_TEST("4","相序检测"), + + + /** + * 系数校验步骤 + */ + big_start("big_start","大电压系数下装开始"), + big_end("big_end","大电压系数下装结束"), + small_start("small_start","小电压系数下装开始"), + small_end("small_end","小电压系数下装结束"), + big_comp_start("big_comp_start","大电压校准开始"), + big_comp_end("big_comp_end","大电压校准结束"), + small_comp_start("small_comp_start","小电压校准开始"), + small_comp_end("small_comp_end","小电压校准结束"), /** * 检测类型 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 6f5391b8..624381de 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 @@ -13,7 +13,7 @@ import java.util.List; public class PreDetectionParam { /** - * 操作类型 0.预检测 1.正式检测 + * 操作类型 0.预检测 1.正式检测 2.系数校验 */ private String operateType = "0"; diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/vo/CoefficientVO.java b/detection/src/main/java/com/njcn/gather/detection/pojo/vo/CoefficientVO.java new file mode 100644 index 00000000..190ef7a2 --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/detection/pojo/vo/CoefficientVO.java @@ -0,0 +1,76 @@ +package com.njcn.gather.detection.pojo.vo; + +import com.alibaba.fastjson.annotation.JSONField; +import lombok.Data; + +import java.util.List; + +/** + * @Author: cdf + * @CreateTime: 2025-01-04 + * @Description: 系数校准前端返回实体 + */ +@Data +public class CoefficientVO { + + @JSONField(name = "type", ordinal = 0) + private String type; + + @JSONField(name = "devName", ordinal = 1) + private String devName; + + @JSONField(name = "monitorNum", ordinal = 2) + private String monitorNum; + + @JSONField(name = "desc", ordinal = 3) + private String desc; + + + @JSONField(name = "aVuData", ordinal = 4) + private String aVuData; + + @JSONField(name = "aVuXi", ordinal = 5) + private String aVuXi; + + @JSONField(name = "bVuData", ordinal = 6) + private String bVuData; + + @JSONField(name = "bVuXi", ordinal = 7) + private String bVuXi; + + @JSONField(name = "cVuData", ordinal = 8) + private String cVuData; + + @JSONField(name = "cVuXi", ordinal = 9) + private String cVuXi; + + @JSONField(name = "aIeData", ordinal = 10) + private String aIeData; + + @JSONField(name = "aIeXi", ordinal = 11) + private String aIeXi; + + @JSONField(name = "bIeData", ordinal = 12) + private String bIeData; + + @JSONField(name = "bIeXi", ordinal = 13) + private String bIeXi; + + @JSONField(name = "cIeData", ordinal = 14) + private String cIeData; + + @JSONField(name = "cIeXi", ordinal = 15) + private String cIeXi; + + + + @Data + public static class DevParameter{ + + private Double devVolt; + + private Double devCurr; + + + } +} 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 1798775f..d6bd1a27 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 @@ -20,6 +20,9 @@ public interface PreDetectionService { void sourceCommunicationCheck(PreDetectionParam param); + void coefficientCheck(PreDetectionParam param); + + boolean startTest(PreDetectionParam param); 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 15b8314c..e2b3619b 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 @@ -665,7 +665,7 @@ public class DetectionServiceImpl { */ private void setDetection(DictDataEnum dataRule, List harmDataList, PqErrSysDtls errSysDtl, DetectionData data, Double v) { List qualifiedList = harmDataList.stream() - .filter(x -> NumberUtil.isIn(devSubtractChannelData(x, v, errSysDtl.getErrorValueType()), + .filter(x -> x>0 && NumberUtil.isIn(devSubtractChannelData(x, v, errSysDtl.getErrorValueType()), BigDecimal.valueOf(-errSysDtl.getMaxErrorValue()), BigDecimal.valueOf(errSysDtl.getMaxErrorValue()))).collect(Collectors.toList()); data.setRadius(-errSysDtl.getMaxErrorValue() + "~" + errSysDtl.getMaxErrorValue()); 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 4169da33..d2052866 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 @@ -14,6 +14,7 @@ import com.njcn.gather.detection.pojo.vo.SocketDataMsg; import com.njcn.gather.detection.pojo.vo.SocketMsg; import com.njcn.gather.detection.service.PreDetectionService; +import com.njcn.gather.detection.util.socket.CnSocketUtil; import com.njcn.gather.detection.util.socket.MsgUtil; import com.njcn.gather.detection.util.socket.SocketManager; import com.njcn.gather.detection.util.socket.cilent.NettyClient; @@ -75,10 +76,7 @@ public class PreDetectionServiceImpl implements PreDetectionService { if (Objects.nonNull(channel) && channel.isActive()) { System.out.println("进入关闭源。。//////"); - SocketDataMsg socketDataMsg = new SocketDataMsg(); - socketDataMsg.setOperateCode(SourceOperateCodeEnum.CLOSE_GATHER.getValue()); - socketDataMsg.setRequestId(SourceOperateCodeEnum.QUITE_SOURCE.getValue()); - SocketManager.sendMsg(param.getUserPageId()+source,JSON.toJSONString(socketDataMsg)); + CnSocketUtil.quitSendSource(param); try { Thread.sleep(2000); @@ -105,6 +103,7 @@ public class PreDetectionServiceImpl implements PreDetectionService { */ AdPlan plan = iAdPlanService.getById(param.getPlanId()); PqSource pqSource = pqSourceService.getById(plan.getDatasourceId()); + param.setSourceId(plan.getDatasourceId()); if (ObjectUtil.isNotNull(plan)) { plan.setErrorSysId(plan.getId()); String code = dictDataService.getDictDataById(plan.getPattern()).getCode(); @@ -122,6 +121,58 @@ public class PreDetectionServiceImpl implements PreDetectionService { } + } + + @Override + public void coefficientCheck(PreDetectionParam param) { + System.out.println("进来了啊啊啊啊啊啊啊啊啊啊啊啊啊----------------------------------------------------------------"); + Channel channel = SocketManager.getChannelByUserId(param.getUserPageId() + source); + System.out.println("存活的源=========================="+channel); + + if (Objects.nonNull(channel) && channel.isActive()) { + System.out.println("进入关闭源。。//////"); + CnSocketUtil.quitSendSource(param); + + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + SocketManager.removeUser(param.getUserPageId() + source); + SocketManager.removeUser(param.getUserPageId() + dev); + + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + + + 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)) { + //开始组装socket报文请求头 + socketDevResponseService.initList(param); + socketSourceResponseService.initList(param); + 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()); + NettyClient.socketClient(ip, port, param.getUserPageId(), MsgUtil.toJsonWithNewLinePlain(msg), new NettySourceClientHandler(param, sourceResponseService)); + } else { + throw new BusinessException(DetectionResponseEnum.SOURCE_INFO_NOT); + } + } else { + throw new BusinessException(DetectionResponseEnum.PLAN_AND_SOURCE_NOT); + } + } + + + } private void sendYtxSocket(PreDetectionParam param) { @@ -134,7 +185,7 @@ public class PreDetectionServiceImpl implements PreDetectionService { //开始组装socket报文请求头 socketDevResponseService.initList(param); socketSourceResponseService.initList(param); - SocketMsg msg = new SocketMsg(); + SocketMsg msg = new SocketMsg<>(); msg.setRequestId(SourceOperateCodeEnum.YJC_YTXJY.getValue()); msg.setOperateCode(SourceOperateCodeEnum.INIT_GATHER.getValue()); msg.setData(JSON.toJSONString(sourceParam)); 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 e865ee3a..129ead9c 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 @@ -1,6 +1,7 @@ package com.njcn.gather.detection.util.socket; import com.alibaba.fastjson.JSON; +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; @@ -32,6 +33,9 @@ public class CnSocketUtil { SocketMsg socketMsg = new SocketMsg<>(); socketMsg.setRequestId(SourceOperateCodeEnum.QUITE_SOURCE.getValue()); socketMsg.setOperateCode(SourceOperateCodeEnum.CLOSE_GATHER.getValue()); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("sourceId",param.getSourceId()); + socketMsg.setData(jsonObject.toJSONString()); SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, JSON.toJSONString(socketMsg)); } 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 f3eb6fb7..40f4fa89 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 @@ -1,10 +1,14 @@ package com.njcn.gather.detection.util.socket; import cn.hutool.core.util.ObjectUtil; +import com.njcn.gather.detection.pojo.dto.DevXiNumData; +import com.njcn.gather.device.device.pojo.vo.PreDetection; import com.njcn.gather.device.script.pojo.po.SourceIssue; import io.netty.channel.Channel; import io.netty.channel.nio.NioEventLoopGroup; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -75,10 +79,16 @@ public class SocketManager { */ private static List sourceIssueList = new CopyOnWriteArrayList<>(); + //用于存储pq_script_checkdata表里Value_Type与树字典表code + public static Map valueTypeMap = new HashMap<>(); + + public static List temXiDevList = new ArrayList<>(); + private static volatile Boolean paused = false; + public static void addSourceList(List sList) { sourceIssueList = sList; // System.out.println(sList); diff --git a/device/src/main/java/com/njcn/gather/device/device/mapper/mapping/PqDevMapper.xml b/device/src/main/java/com/njcn/gather/device/device/mapper/mapping/PqDevMapper.xml index 328c7bbc..bb623a71 100644 --- a/device/src/main/java/com/njcn/gather/device/device/mapper/mapping/PqDevMapper.xml +++ b/device/src/main/java/com/njcn/gather/device/device/mapper/mapping/PqDevMapper.xml @@ -13,6 +13,8 @@ + + devIds; - @ApiModelProperty("是否是相序校验") - private Boolean isPhaseSequence; + @ApiModelProperty() + private String isPhaseSequence; @ApiModelProperty("源id") private String sourceId; diff --git a/device/src/main/java/com/njcn/gather/device/script/service/IPqScriptCheckDataService.java b/device/src/main/java/com/njcn/gather/device/script/service/IPqScriptCheckDataService.java index b3fd86f3..b671e202 100644 --- a/device/src/main/java/com/njcn/gather/device/script/service/IPqScriptCheckDataService.java +++ b/device/src/main/java/com/njcn/gather/device/script/service/IPqScriptCheckDataService.java @@ -3,8 +3,11 @@ package com.njcn.gather.device.script.service; import com.baomidou.mybatisplus.extension.service.IService; import com.njcn.gather.device.script.pojo.param.PqScriptCheckDataParam; import com.njcn.gather.device.script.pojo.po.PqScriptCheckData; +import com.njcn.gather.device.script.pojo.vo.PqScriptCheckDataVO; +import com.njcn.gather.system.dictionary.pojo.po.DictTree; import java.util.List; +import java.util.Map; /** @@ -22,4 +25,7 @@ public interface IPqScriptCheckDataService extends IService { */ List getValueType(PqScriptCheckDataParam param); + + Map getValueTypeMap(String scriptId); + } diff --git a/device/src/main/java/com/njcn/gather/device/script/service/impl/PqScriptCheckDataServiceImpl.java b/device/src/main/java/com/njcn/gather/device/script/service/impl/PqScriptCheckDataServiceImpl.java index a6362b8a..3d66d040 100644 --- a/device/src/main/java/com/njcn/gather/device/script/service/impl/PqScriptCheckDataServiceImpl.java +++ b/device/src/main/java/com/njcn/gather/device/script/service/impl/PqScriptCheckDataServiceImpl.java @@ -1,20 +1,26 @@ package com.njcn.gather.device.script.service.impl; import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.njcn.common.pojo.enums.common.DataStateEnum; import com.njcn.gather.device.script.mapper.PqScriptCheckDataMapper; import com.njcn.gather.device.script.pojo.param.PqScriptCheckDataParam; import com.njcn.gather.device.script.pojo.po.PqScriptCheckData; +import com.njcn.gather.device.script.pojo.vo.PqScriptCheckDataVO; import com.njcn.gather.device.script.service.IPqScriptCheckDataService; +import com.njcn.gather.system.dictionary.mapper.DictTreeMapper; import com.njcn.gather.system.dictionary.pojo.po.DictTree; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; @@ -31,6 +37,8 @@ public class PqScriptCheckDataServiceImpl extends ServiceImpl getValueType(PqScriptCheckDataParam param) { MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); @@ -56,4 +64,21 @@ public class PqScriptCheckDataServiceImpl extends ServiceImpl(); } + + @Override + public Map getValueTypeMap(String scriptId) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.select(PqScriptCheckData::getValueType) + .eq(PqScriptCheckData::getScriptId, scriptId) + .eq(PqScriptCheckData::getEnable, DataStateEnum.ENABLE.getCode()); + List pqScriptCheckData = this.baseMapper.selectList(queryWrapper); + + LambdaQueryWrapper dictTreeLambdaQueryWrapper = new LambdaQueryWrapper<>(); + dictTreeLambdaQueryWrapper.in(DictTree::getId,pqScriptCheckData.stream().map(PqScriptCheckData::getValueType).distinct().collect(Collectors.toList())); + List dictTreeList = dictTreeMapper.selectList(dictTreeLambdaQueryWrapper); + Map map = dictTreeList.stream().collect(Collectors.toMap(DictTree::getCode,DictTree::getId)); + return map; + } + + } diff --git a/device/src/main/java/com/njcn/gather/device/script/service/impl/PqScriptDtlsServiceImpl.java b/device/src/main/java/com/njcn/gather/device/script/service/impl/PqScriptDtlsServiceImpl.java index f7ab7500..27418545 100644 --- a/device/src/main/java/com/njcn/gather/device/script/service/impl/PqScriptDtlsServiceImpl.java +++ b/device/src/main/java/com/njcn/gather/device/script/service/impl/PqScriptDtlsServiceImpl.java @@ -9,6 +9,7 @@ import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.njcn.common.pojo.enums.common.DataStateEnum; import com.njcn.gather.device.device.pojo.po.PqDev; import com.njcn.gather.device.device.service.IPqDevService; +import com.njcn.gather.device.pojo.enums.CommonEnum; import com.njcn.gather.device.script.mapper.PqScriptDtlsMapper; import com.njcn.gather.device.script.mapper.PqScriptMapper; import com.njcn.gather.device.script.pojo.param.PqScriptCheckDataParam; @@ -28,6 +29,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; +import java.util.stream.Stream; /** * @author caozehui @@ -207,17 +209,23 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl pqScriptDtls(String scriptId, Boolean isPhaseSequence, Double volt, Double curr) { + private List pqScriptDtls(String scriptId, String isPhaseSequence, Double volt, Double curr) { List pqScriptDtls; MPJLambdaWrapper queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(PqScriptDtls.class) .selectAs(DictTree::getCode, PqScriptDtls::getScriptCode) .leftJoin(DictTree.class, DictTree::getId, PqScriptDtls::getScriptType) .eq(PqScriptDtls::getEnable, 1);; - if (isPhaseSequence) { + if (isPhaseSequence.equals(CommonEnum.PHASE_TEST.getValue())) { + //相序 queryWrapper.eq(PqScriptDtls::getIndex, -1) .eq(PqScriptDtls::getEnable, 1); pqScriptDtls = this.list(queryWrapper); + }else if(isPhaseSequence.equals(CommonEnum.COEFFICIENT_TEST.getValue())){ + //系数 + queryWrapper.in(PqScriptDtls::getIndex, Stream.of(-2,-3).collect(Collectors.toList())) + .eq(PqScriptDtls::getEnable, 1); + pqScriptDtls = this.list(queryWrapper); } else { //先获取检测脚本类型是否相对值 true相对值 false绝对值(相对值要乘额定值,绝对值不需要处理) Boolean isValueType = pqScriptMapper.selectScriptIsValueType(scriptId); diff --git a/storage/src/main/java/com/njcn/gather/storage/mapper/mapping/TableGenMapper.xml b/storage/src/main/java/com/njcn/gather/storage/mapper/mapping/TableGenMapper.xml index c03c4286..77412e4f 100644 --- a/storage/src/main/java/com/njcn/gather/storage/mapper/mapping/TableGenMapper.xml +++ b/storage/src/main/java/com/njcn/gather/storage/mapper/mapping/TableGenMapper.xml @@ -33,10 +33,10 @@ AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表', Data_Type CHAR(32) NOT NULL COMMENT '数据指标,只有数据源为分钟统计时候才会使用(最大、最小、平均、CP95,默认平均值),字典表', Result_Flag int(1) NOT NULL COMMENT '0.不合格 1.合格', - A_Value varchar(30) NULL COMMENT 'A相值', - B_Value varchar(30) NULL COMMENT 'B相值', - C_Value varchar(30) NULL COMMENT 'C相值', - T_Value varchar(30) NULL COMMENT 'T相值(没有相别的则存这里)', + A_Value json NULL COMMENT 'A相值', + B_Value json NULL COMMENT 'B相值', + C_Value json NULL COMMENT 'C相值', + T_Value json NULL COMMENT 'T相值(没有相别的则存这里)', PRIMARY KEY (Monitor_Id, Script_Id, Sort, Data_Type) ) COMMENT='监测数据表'; 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 b3c973f1..464d068c 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 @@ -25,13 +25,13 @@ public class TableGenServiceImpl implements TableGenService { StringBuilder C = new StringBuilder(); for(int i=1;i<=50;i++){ if(i == 1){ - A.append("A_Value_").append(i).append(" varchar(30) NULL COMMENT 'A相基波',"); - B.append("B_Value_").append(i).append(" varchar(30) NULL COMMENT 'B相基波',"); - C.append("C_Value_").append(i).append(" varchar(30) NULL COMMENT 'C相基波',"); + A.append("A_Value_").append(i).append(" json NULL COMMENT 'A相基波',"); + B.append("B_Value_").append(i).append(" json NULL COMMENT 'B相基波',"); + C.append("C_Value_").append(i).append(" json NULL COMMENT 'C相基波',"); }else { - A.append("A_Value_").append(i).append(" varchar(30) NULL COMMENT '").append(i).append("次A相谐波',"); - B.append("B_Value_").append(i).append(" varchar(30) NULL COMMENT '").append(i).append("次B相谐波',"); - C.append("C_Value_").append(i).append(" varchar(30) NULL COMMENT '").append(i).append("次C相谐波',"); + A.append("A_Value_").append(i).append(" json NULL COMMENT '").append(i).append("次A相谐波',"); + B.append("B_Value_").append(i).append(" json NULL COMMENT '").append(i).append("次B相谐波',"); + C.append("C_Value_").append(i).append(" json NULL COMMENT '").append(i).append("次C相谐波',"); } }