From 2d889b07f73d5ee253d7e674e77443a41aa3bd30 Mon Sep 17 00:00:00 2001 From: caozehui <2427765068@qq.com> Date: Mon, 4 Aug 2025 10:27:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AF=94=E5=AF=B9=E7=9B=B8=E5=85=B3=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SocketContrastResponseService.java | 995 +++++++++++++++++- .../handler/SocketDevResponseService.java | 96 +- .../pojo/enums/DetectionCodeEnum.java | 10 +- .../pojo/enums/SourceOperateCodeEnum.java | 8 +- .../pojo/param/ContrastDetectionParam.java | 3 + .../service/impl/DetectionServiceImpl.java | 950 +++++++++++++---- .../service/impl/PreDetectionServiceImpl.java | 48 +- .../gather/detection/util/DetectionUtil.java | 219 ++++ .../util/socket/FormalTestManager.java | 59 +- .../detection/util/socket/SocketManager.java | 5 + .../util/socket/cilent/NettyClient.java | 5 +- .../cilent/NettyContrastClientHandler.java | 164 ++- .../socket/cilent/NettyDevClientHandler.java | 27 +- .../controller/PqStandardDevController.java | 1 - .../device/mapper/PqStandardDevMapper.java | 5 + .../mapper/mapping/PqStandardDevMapper.xml | 41 + .../gather/device/pojo/param/PqDevParam.java | 2 +- .../device/pojo/vo/ContrastDevExcel.java | 28 +- .../gather/device/pojo/vo/PreDetection.java | 22 +- .../device/service/IPqStandardDevService.java | 11 +- .../device/service/impl/PqDevServiceImpl.java | 20 +- .../impl/PqStandardDevServiceImpl.java | 9 + .../err/service/IPqErrSysDtlsService.java | 6 + .../service/impl/PqErrSysDtlsServiceImpl.java | 10 + .../mapper/mapping/PqMonitorMapper.xml | 19 +- .../monitor/pojo/vo/PqMonitorExcel.java | 4 +- .../plan/pojo/enums/DataSourceEnum.java | 2 +- .../plan/service/impl/AdPlanServiceImpl.java | 33 +- .../pojo/enums/DetectionResponseEnum.java | 2 +- .../service/impl/PqReportServiceImpl.java | 58 +- .../service/impl/ResultServiceImpl.java | 82 +- entrance/src/main/resources/application.yml | 17 +- .../controller/DataDealController.java | 34 +- .../controller/TableGenController.java | 4 +- .../storage/mapper/AdNonHarmonicMapper.java | 17 - .../mapper/ContrastHarmonicMappper.java | 11 + .../mapper/ContrastNonHarmonicMappper.java | 11 + .../mapper/DetectionDataDealMapper.java | 4 +- ...per.java => SimAndDigHarmonicMappper.java} | 5 +- .../mapper/SimAndDigNonHarmonicMapper.java | 11 + .../gather/storage/mapper/TableGenMapper.java | 7 +- ...per.xml => SimAndDigNonHarmonicMapper.xml} | 2 +- .../storage/mapper/mapping/TableGenMapper.xml | 70 +- .../storage/pojo/po/AdNonHarmonicResult.java | 80 -- .../gather/storage/pojo/po/BaseResult.java | 37 + .../storage/pojo/po/ContrastBaseResult.java | 22 + .../pojo/po/ContrastHarmonicResult.java | 917 ++++++++++++++++ .../pojo/po/ContrastNonHarmonicResult.java | 34 + ...seResult.java => SimAndDigBaseResult.java} | 18 +- ...sult.java => SimAndDigHarmonicResult.java} | 44 +- .../pojo/po/SimAndDigNonHarmonicResult.java | 41 + .../service/ContrastHarmonicService.java | 11 + .../service/ContrastNonHarmonicService.java | 12 + .../service/DetectionDataDealService.java | 17 +- ...ice.java => SimAndDigHarmonicService.java} | 14 +- ....java => SimAndDigNonHarmonicService.java} | 16 +- .../storage/service/TableGenService.java | 2 +- .../impl/ContrastHarmonicServiceImpl.java | 17 + .../impl/ContrastNonHarmonicServiceImpl.java | 17 + .../impl/DetectionDataServiceImpl.java | 115 +- ...java => SimAndDigHarmonicServiceImpl.java} | 144 +-- ...a => SimAndDigNonHarmonicServiceImpl.java} | 114 +- .../service/impl/TableGenServiceImpl.java | 41 +- 63 files changed, 3987 insertions(+), 863 deletions(-) create mode 100644 detection/src/main/java/com/njcn/gather/detection/util/DetectionUtil.java delete mode 100644 storage/src/main/java/com/njcn/gather/storage/mapper/AdNonHarmonicMapper.java create mode 100644 storage/src/main/java/com/njcn/gather/storage/mapper/ContrastHarmonicMappper.java create mode 100644 storage/src/main/java/com/njcn/gather/storage/mapper/ContrastNonHarmonicMappper.java rename storage/src/main/java/com/njcn/gather/storage/mapper/{AdHarmonicMappper.java => SimAndDigHarmonicMappper.java} (50%) create mode 100644 storage/src/main/java/com/njcn/gather/storage/mapper/SimAndDigNonHarmonicMapper.java rename storage/src/main/java/com/njcn/gather/storage/mapper/mapping/{AdNonHarmonicMapper.xml => SimAndDigNonHarmonicMapper.xml} (67%) delete mode 100644 storage/src/main/java/com/njcn/gather/storage/pojo/po/AdNonHarmonicResult.java create mode 100644 storage/src/main/java/com/njcn/gather/storage/pojo/po/BaseResult.java create mode 100644 storage/src/main/java/com/njcn/gather/storage/pojo/po/ContrastBaseResult.java create mode 100644 storage/src/main/java/com/njcn/gather/storage/pojo/po/ContrastHarmonicResult.java create mode 100644 storage/src/main/java/com/njcn/gather/storage/pojo/po/ContrastNonHarmonicResult.java rename storage/src/main/java/com/njcn/gather/storage/pojo/po/{AdBaseResult.java => SimAndDigBaseResult.java} (52%) rename storage/src/main/java/com/njcn/gather/storage/pojo/po/{AdHarmonicResult.java => SimAndDigHarmonicResult.java} (95%) create mode 100644 storage/src/main/java/com/njcn/gather/storage/pojo/po/SimAndDigNonHarmonicResult.java create mode 100644 storage/src/main/java/com/njcn/gather/storage/service/ContrastHarmonicService.java create mode 100644 storage/src/main/java/com/njcn/gather/storage/service/ContrastNonHarmonicService.java rename storage/src/main/java/com/njcn/gather/storage/service/{AdHarmonicService.java => SimAndDigHarmonicService.java} (69%) rename storage/src/main/java/com/njcn/gather/storage/service/{AdNonHarmonicService.java => SimAndDigNonHarmonicService.java} (66%) create mode 100644 storage/src/main/java/com/njcn/gather/storage/service/impl/ContrastHarmonicServiceImpl.java create mode 100644 storage/src/main/java/com/njcn/gather/storage/service/impl/ContrastNonHarmonicServiceImpl.java rename storage/src/main/java/com/njcn/gather/storage/service/impl/{AdHarmonicServiceImpl.java => SimAndDigHarmonicServiceImpl.java} (63%) rename storage/src/main/java/com/njcn/gather/storage/service/impl/{AdNonHarmonicServiceImpl.java => SimAndDigNonHarmonicServiceImpl.java} (59%) diff --git a/detection/src/main/java/com/njcn/gather/detection/handler/SocketContrastResponseService.java b/detection/src/main/java/com/njcn/gather/detection/handler/SocketContrastResponseService.java index cb663bde..834da0b0 100644 --- a/detection/src/main/java/com/njcn/gather/detection/handler/SocketContrastResponseService.java +++ b/detection/src/main/java/com/njcn/gather/detection/handler/SocketContrastResponseService.java @@ -1,18 +1,45 @@ package com.njcn.gather.detection.handler; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSON; +import com.njcn.gather.detection.pojo.enums.DetectionCodeEnum; +import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum; +import com.njcn.gather.detection.pojo.enums.SourceResponseCodeEnum; import com.njcn.gather.detection.pojo.param.ContrastDetectionParam; -import com.njcn.gather.detection.util.socket.FormalTestManager; +import com.njcn.gather.detection.pojo.param.PreDetectionParam; +import com.njcn.gather.detection.pojo.po.DevData; +import com.njcn.gather.detection.pojo.po.IcdCheckData; +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.util.DetectionUtil; +import com.njcn.gather.detection.util.socket.*; +import com.njcn.gather.device.pojo.vo.PreDetection; +import com.njcn.gather.device.service.IPqDevService; +import com.njcn.gather.device.service.IPqStandardDevService; +import com.njcn.gather.plan.pojo.enums.DataSourceEnum; import com.njcn.gather.plan.service.IAdPlanService; import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum; import com.njcn.gather.system.dictionary.pojo.po.DictData; +import com.njcn.gather.system.dictionary.pojo.po.DictTree; import com.njcn.gather.system.dictionary.service.IDictDataService; +import com.njcn.gather.system.dictionary.service.IDictTreeService; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.*; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; + /** * @author caozehui - * @data 2025-07-18 + * @data 2025-07-24 */ @Service @RequiredArgsConstructor @@ -20,11 +47,77 @@ public class SocketContrastResponseService { private final IAdPlanService adPlanService; private final IDictDataService dictDataService; + private final IPqDevService pqDevService; + private final IPqStandardDevService pqStandardDevService; + private final IDictTreeService dictTreeService; /** - * 数据处理原则 + * 定时器 */ - private DictDataEnum dataRule; + private ScheduledExecutorService scheduler = null; + + /** + * 定时器任务 + */ + private ScheduledFuture scheduledFuture = null; + + /** + * 实时数据对齐校验结果 + */ + private boolean alignCheckResult = false; + + /** + * 成功的配对 + */ + private Map successPair = new HashMap<>(); + + /** + * 接收数据成功的测点(设备ip_通道号) + */ + Set successComm = new HashSet<>(); + + /** + * 接收数据失败的测点(设备ip_通道号) + */ + Set failComm = new HashSet<>(); + + /** + * 相序校验-电压或电流校验的组数 + */ + @Value("${detection.xujy.volOrCur}") + private Integer volOrCurCheckCount; + + /** + * 相序校验-相角校验的组数 + */ + @Value("${detection.xujy.phase}") + private Integer phaseCheckCount; + + private static final Map> testItemCodeMap = new HashMap() {{ + put("FREQ", Arrays.asList("real$FREQ")); +// put("V", Arrays.asList("real$VRMS", "real$VA", "real$DELTA_V")); + put("V", Arrays.asList("real$VRMS")); + put("HV", Arrays.asList("real$V2-50", "real$U1")); + put("HI", Arrays.asList("real$I2-50", "real$I1")); + put("HP", Arrays.asList("real$P2-50")); + put("HSV", Arrays.asList("real$SV_1-49")); + put("HSI", Arrays.asList("real$SI_1-49")); + put("VOLTAGE", Arrays.asList("avg$MAG", "avg$DUR")); +// put("I", Arrays.asList("real$IRMS", "real$IA")); + put("I", Arrays.asList("real$IRMS")); + put("IMBV", Arrays.asList("real$V_UNBAN")); + put("IMBA", Arrays.asList("real$I_UNBAN")); + put("F", Arrays.asList("avg$PST")); + put("P", Arrays.asList("real$P_FUND")); + }}; + + private List icdTypeList; + + /** + * 存放从装置收到的icd校验数据。key为icdType,value为IcdCheckData + */ + private Map icdCheckDataMap = new HashMap<>(); + /** * 初始化操作 @@ -32,13 +125,903 @@ public class SocketContrastResponseService { * @param param */ public void init(ContrastDetectionParam param) { + SocketManager.contrastClockMap.clear(); + successComm.clear(); + failComm.clear(); + + FormalTestManager.pairsMap.clear(); + FormalTestManager.pairsMap.putAll(param.getPairs()); + FormalTestManager.currentTestPlan = adPlanService.getById(param.getPlanId()); + List pqDevList = pqDevService.getDevInfo(param.getDevIds()); + // key为被检设备id_通道号,value为监测点DTO + Map devMonitorMap = new HashMap<>(); + pqDevList.forEach(x -> { + List monitorList = x.getMonitorList(); + //移除不做检测的监测点 + monitorList.removeIf(y -> !param.getPairs().containsValue(x.getDevId() + y.getLine())); + monitorList.forEach(y -> { + devMonitorMap.put(x.getDevId() + "_" + y.getLine(), y); + }); + }); + FormalTestManager.devList.clear(); + FormalTestManager.devList.addAll(pqDevList); + + // key为标准设备id,value为标准设备下的监测点列表 + Map> pairsMap = new HashMap<>(); + param.getPairs().forEach((key, value) -> { + String[] split = key.split("_"); + List monitorIdList = pairsMap.getOrDefault(split[0], new ArrayList<>()); + monitorIdList.add(key); + pairsMap.put(split[0], monitorIdList); + }); + + FormalTestManager.standardDevList.clear(); + List standardDevIds = param.getPairs().keySet().stream().map(key -> key.split("_")[0]).distinct().collect(Collectors.toList()); + FormalTestManager.standardDevList.addAll(pqStandardDevService.listStandardDevPreDetection(standardDevIds)); + + // 标准设备根据配对关系设置监测点 + FormalTestManager.standardDevList.stream().forEach(x -> { + List monitorList = new ArrayList<>(); + + pairsMap.get(x.getDevId()).forEach(y -> { + PreDetection.MonitorListDTO monitorListDTO = new PreDetection.MonitorListDTO(); + monitorListDTO.setLineId(y); + String[] split = y.split("_"); + monitorListDTO.setLine(Integer.valueOf(split[1])); + + PreDetection.MonitorListDTO monitorListDTO1 = devMonitorMap.get(param.getPairs().get(y)); + + monitorListDTO.setConnection(monitorListDTO1.getConnection()); + monitorListDTO.setPt(monitorListDTO1.getPt()); + monitorListDTO.setCt(monitorListDTO1.getCt()); + monitorListDTO.setStatInterval(monitorListDTO.getStatInterval()); + monitorList.add(monitorListDTO); + }); + x.setMonitorList(monitorList); + }); + + FormalTestManager.devDataMap.clear(); + FormalTestManager.devDataMap.putAll(param.getDevIds().stream().collect(Collectors.toMap(x -> x, x -> new ArrayList<>()))); + FormalTestManager.standardDevDataMap.clear(); + FormalTestManager.standardDevDataMap.putAll(param.getStandardDevIds().stream().collect(Collectors.toMap(x -> x, x -> new ArrayList<>()))); + + FormalTestManager.monitorMap.clear(); + //FormalTestManager.monitorMap.putAll(FormalTestManager.standardDevList.stream().flatMap(x -> x.getMonitorList().stream()).collect(Collectors.toMap(PreDetection.MonitorListDTO::getLineId, obj -> obj))); + FormalTestManager.monitorMap.putAll(FormalTestManager.devList.stream().flatMap(x -> x.getMonitorList().stream()).collect(Collectors.toMap(PreDetection.MonitorListDTO::getLineId, obj -> obj))); + + FormalTestManager.devMapMonitorNum.clear(); + FormalTestManager.devMapMonitorNum.putAll(pqDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, it -> it.getMonitorList().stream().map(PreDetection.MonitorListDTO::getLineId).collect(Collectors.toList())))); + FormalTestManager.devMapMonitorNum.putAll(FormalTestManager.standardDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, it -> it.getMonitorList().stream().map(PreDetection.MonitorListDTO::getLineId).collect(Collectors.toList())))); + + FormalTestManager.testItemCodeList.clear(); + List testItemIds = Arrays.asList(FormalTestManager.currentTestPlan.getTestItem().split(",")); + List dictTreeList = dictTreeService.getDictTreeById(testItemIds); + List topLevelCodes = dictTreeList.stream().map(DictTree::getCode).collect(Collectors.toList()); + topLevelCodes.stream().forEach(topLevelCode -> FormalTestManager.testItemCodeList.addAll(testItemCodeMap.get(topLevelCode))); + DictData dictData = dictDataService.getDictDataById(FormalTestManager.currentTestPlan.getDataRule()); if (ObjectUtil.isNotNull(dictData)) { - this.dataRule = DictDataEnum.getDictDataEnumByCode(dictData.getCode()); + FormalTestManager.dataRule = DictDataEnum.getDictDataEnumByCode(dictData.getCode()); } else { - this.dataRule = DictDataEnum.SECTION_VALUE; + FormalTestManager.dataRule = DictDataEnum.SECTION_VALUE; + } + + + } + + public void deal(PreDetectionParam param, String msg) throws Exception { + SocketDataMsg socketDataMsg = MsgUtil.socketDataMsg(msg); + String[] tem = socketDataMsg.getRequestId().split(CnSocketUtil.STEP_TAG); + SourceOperateCodeEnum sourceOperateCodeEnum = SourceOperateCodeEnum.getDictDataEnumByCode(tem[0]); + + switch (Objects.requireNonNull(sourceOperateCodeEnum)) { + //设备通讯校验 + case YJC_SBTXJY: + this.devComm(socketDataMsg, param); + break; + case YJC_ALIGN: + this.alignDeal(socketDataMsg, param); + break; + //模型一致性校验 + case YJC_MXYZXJY: + this.modelDeal(socketDataMsg, param); + break; + //相序校验 + case YJC_XUJY: + this.devXu(param, socketDataMsg); + break; + //正式检测 + case FORMAL_REAL: + this.formalDeal(param, socketDataMsg); + break; + } + + } + + + /** + * 装置通讯检测 + */ + private void devComm(SocketDataMsg socketDataMsg, PreDetectionParam param) { + SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); + String s = param.getUserPageId() + CnSocketUtil.DEV_TAG; + SocketMsg socketMsg = new SocketMsg<>(); + + if (ObjectUtil.isNotNull(dictDataEnumByCode)) { + switch (dictDataEnumByCode) { + case SUCCESS: + String result = socketDataMsg.getData(); + successComm.add(result); + //单个测点通讯成功 + WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); + + System.out.println("设备通讯校验!" + successComm.size() + "=====" + FormalTestManager.monitorMap.size()); + if (successComm.size() == FormalTestManager.monitorMap.size()) { + // 通知前端整个装置通讯检测过程成功 + SocketDataMsg temMsg = new SocketDataMsg(); + temMsg.setCode(SourceResponseCodeEnum.DEV_COMM_ALL_SUCCESS.getCode()); + temMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_01.getValue()); + temMsg.setRequestId(SourceOperateCodeEnum.YJC_SBTXJY.getValue()); + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(temMsg)); + + successComm.clear(); + failComm.clear(); +// Map> map = new HashMap<>(1); +// List preDetections = BeanUtil.copyToList(FormalTestManager.devList, PreDetection.class); +// preDetections.forEach(x -> { +// x.setDevType(x.getIcdType()); +// }); +// map.put("deviceList", preDetections); +// String jsonString = JSON.toJSONString(map); + socketMsg.setRequestId(SourceOperateCodeEnum.YJC_MXYZXJY.getValue()); + socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue()); +// socketMsg.setData(jsonString); + String json = JSON.toJSONString(socketMsg); + + + socketMsg.setRequestId(SourceOperateCodeEnum.YJC_XYJY.getValue()); + socketMsg.setOperateCode(SourceOperateCodeEnum.VERIFY_MAPPING$01.getValue()); + Map map = new HashMap<>(2); + map.put("dataType", FormalTestManager.testItemCodeList); + icdTypeList = FormalTestManager.devList.stream().map(PreDetection::getIcdType).distinct().collect(Collectors.toList()); + icdTypeList.addAll(FormalTestManager.standardDevList.stream().map(PreDetection::getIcdType).distinct().collect(Collectors.toList())); + map.put("icdType", icdTypeList.get(0)); + socketMsg.setData(JSON.toJSONString(map)); + SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); + + + System.out.println("装置通信成功!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》开始模型一致性校验》》》》》》》》》》》》》》》》"); + SocketManager.sendMsg(s, json); + } + completeJudgment(param); + break; + case UNPROCESSED_BUSINESS: + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + break; + case DEV_ERROR: + failComm.addAll(FormalTestManager.devMapMonitorNum.get(socketDataMsg.getData())); + WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0)); + completeJudgment(param); + break; + case DEV_TARGET: + failComm.add(socketDataMsg.getData()); + WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); + completeJudgment(param); + break; + case RE_OPERATE: + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + CnSocketUtil.quitSend(param); + break; + case NO_INIT_DEV: + CnSocketUtil.quitSend(param); + break; + default: + CnSocketUtil.sendUnSocket(param.getUserPageId()); + break; + } } } + + + /** + * 模型一致性校验 + */ + private void modelDeal(SocketDataMsg socketDataMsg, PreDetectionParam param) { + SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); + String s = param.getUserPageId() + CnSocketUtil.DEV_TAG; + SocketMsg socketMsg = new SocketMsg<>(); + + if (ObjectUtil.isNotNull(dictDataEnumByCode)) { + switch (dictDataEnumByCode) { + case SUCCESS: + if (socketDataMsg.getOperateCode().equals(SourceOperateCodeEnum.VERIFY_MAPPING$01.getValue())) { + String data = socketDataMsg.getData(); + IcdCheckData icdCheckData = JSON.parseObject(data, IcdCheckData.class); + + boolean isContinue = true; + for (int i = 0; i < icdCheckData.getResultData().size(); i++) { + IcdCheckData.ResultData item = icdCheckData.getResultData().get(i); + Integer errorType = SocketDevResponseService.getErrorType(item.getDesc(), item.getPhaseResult()); + // 校验脚本与icd校验失败 + if (errorType.equals(0)) { + isContinue = false; + Map map = new HashMap<>(2); + map.put("icdType", icdCheckData.getIcdType()); + DetectionCodeEnum anEnum = DetectionCodeEnum.getDetectionCodeByCode(item.getDesc()); + map.put("dataType", anEnum.getMessage()); + WebSocketVO webSocketVO = new WebSocketVO<>(); + webSocketVO.setData(JSON.toJSONString(map)); + webSocketVO.setRequestId(SourceOperateCodeEnum.YJC_XYJY.getValue()); + webSocketVO.setOperateCode(SourceOperateCodeEnum.VERIFY_MAPPING$01.getValue()); + webSocketVO.setCode(SourceResponseCodeEnum.SUCCESS.getCode()); + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO)); + CnSocketUtil.quitSend(param); + break; + } + } + + + icdCheckDataMap.put(icdCheckData.getIcdType(), icdCheckData); + if (isContinue) { + if (icdCheckDataMap.size() == icdTypeList.size()) { + SocketDataMsg temMsg = new SocketDataMsg(); + temMsg.setCode(SourceResponseCodeEnum.DEV_COMM_ALL_SUCCESS.getCode()); + temMsg.setOperateCode(SourceOperateCodeEnum.VERIFY_MAPPING$01.getValue()); + temMsg.setRequestId(SourceOperateCodeEnum.YJC_XYJY.getValue()); + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(temMsg)); + + System.out.println("模型一致性校验成功!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》开始实时数据对齐校验》》》》》》》》》》》》》》》》"); + // 实时数据开始计时 + SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); +// socketMsg.setData(JSON.toJSONString(sourceIssues.get(0))); +// socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + sourceIssues.get(0).getType()); +// SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, JSON.toJSONString(socketMsg)); +// +// //告诉前端当前项开始了 +// WebSocketVO webSocketVO = new WebSocketVO<>(); +// webSocketVO.setRequestId(sourceIssues.get(0).getType() + CnSocketUtil.START_TAG); +// webSocketVO.setDesc(null); +// WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO)); + + } else { + // 发送下一个脚本与icd校验 + String icdType = icdTypeList.stream().filter(it -> !icdCheckDataMap.containsKey(it)).findFirst().orElse(null); + if (ObjectUtil.isNotNull(icdType)) { + Map map = new HashMap<>(2); + map.put("dataType", FormalTestManager.testItemCodeList); + map.put("icdType", icdType); + socketMsg.setData(JSON.toJSONString(map)); + socketMsg.setRequestId(SourceOperateCodeEnum.YJC_XYJY.getValue()); + socketMsg.setOperateCode(SourceOperateCodeEnum.VERIFY_MAPPING$01.getValue()); + SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); + } + } + } + } + + break; + case UNPROCESSED_BUSINESS: + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + break; + case DEV_ERROR: + WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0)); + CnSocketUtil.quitSend(param); + break; + case DEV_TARGET: + WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); + CnSocketUtil.quitSend(param); + break; + case RE_OPERATE: + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + CnSocketUtil.quitSend(param); + break; + case NO_INIT_DEV: + CnSocketUtil.quitSend(param); + break; + default: + CnSocketUtil.sendUnSocket(param.getUserPageId()); + break; + } + } + } + + /** + * 实时数据对齐校验 + * + * @param socketDataMsg + * @param param + */ + private void alignDeal(SocketDataMsg socketDataMsg, PreDetectionParam param) { + SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); + String s = param.getUserPageId() + CnSocketUtil.DEV_TAG; + SocketMsg socketMsg = new SocketMsg<>(); + DevData devData = JSON.parseObject(socketMsg.getData(), DevData.class); + String id1 = devData.getId(); + + if (ObjectUtil.isNotNull(dictDataEnumByCode)) { + switch (dictDataEnumByCode) { + case SUCCESS: + if (Objects.isNull(scheduler)) { + scheduler = Executors.newScheduledThreadPool(1); + scheduledFuture = scheduler.schedule(() -> { + if (!alignCheckResult) { + System.out.println("1minute内实时数据对齐校验失败!"); + } + scheduler.shutdown(); + scheduler = null; + }, 1, TimeUnit.MINUTES); + } + + String id2 = FormalTestManager.pairsMap.get(id1); + boolean isStandardDevData = true; + if (FormalTestManager.standardDevDataMap.containsKey(id1)) { + FormalTestManager.standardDevDataMap.get(id1).add(devData); + Collections.sort(FormalTestManager.standardDevDataMap.get(id1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); + } + if (FormalTestManager.devDataMap.containsKey(id1)) { + isStandardDevData = false; + FormalTestManager.devDataMap.get(id1).add(devData); + Collections.sort(FormalTestManager.devDataMap.get(id1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); + } + + String standardDevId = id1; + String devId = id2; + if (!isStandardDevData) { + standardDevId = id2; + devId = id1; + } + + // 进行单个监测点的对齐校验 + if (isStandardDevData && !successPair.containsKey(standardDevId) || !isStandardDevData && !successPair.containsKey(devId)) { + if (this.singleMonitorAlignCheck(FormalTestManager.devDataMap.get(devId), FormalTestManager.standardDevDataMap.get(standardDevId))) { + successPair.put(standardDevId, devId); + + // 若成功的配对项等于总的配对项,则判定为成功 + if (successPair.keySet().containsAll(FormalTestManager.pairsMap.keySet())) { + alignCheckResult = true; + scheduledFuture.cancel(true); + scheduler.shutdown(); + + FormalTestManager.standardDevDataMap.forEach((k, v) -> { + v.clear(); + }); + FormalTestManager.devDataMap.forEach((k, v) -> { + v.clear(); + }); + successPair.clear(); + System.out.println("实时数据对齐校验成功!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》开始相序校验》》》》》》》》》》》》》》》》"); + SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); + } + } + } + break; + case UNPROCESSED_BUSINESS: + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + break; + case DEV_ERROR: + WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0)); + CnSocketUtil.quitSend(param); + break; + case DEV_TARGET: + WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); + CnSocketUtil.quitSend(param); + break; + case RE_OPERATE: + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + CnSocketUtil.quitSend(param); + break; + case NO_INIT_DEV: + CnSocketUtil.quitSend(param); + break; + default: + CnSocketUtil.sendUnSocket(param.getUserPageId()); + break; + } + } + } + + /** + * 相序接线校验 + */ + private void devXu(PreDetectionParam param, SocketDataMsg socketDataMsg) { + SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); + String s = param.getUserPageId() + CnSocketUtil.DEV_TAG; + SocketMsg socketMsg = new SocketMsg<>(); + String data = socketDataMsg.getData(); + DevData devData = JSON.parseObject(data, DevData.class); + String id1 = devData.getId(); + + if (ObjectUtil.isNotNull(dictDataEnumByCode)) { + switch (dictDataEnumByCode) { + case SUCCESS: + String id2 = FormalTestManager.pairsMap.get(id1); + boolean isStandardDevData = true; + if (FormalTestManager.standardDevDataMap.containsKey(id1)) { + FormalTestManager.standardDevDataMap.get(id1).add(devData); + Collections.sort(FormalTestManager.standardDevDataMap.get(id1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); + } + if (FormalTestManager.devDataMap.containsKey(id1)) { + isStandardDevData = false; + FormalTestManager.devDataMap.get(id1).add(devData); + Collections.sort(FormalTestManager.devDataMap.get(id1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); + } + + String standardDevId = id1; + String devId = id2; + if (!isStandardDevData) { + standardDevId = id2; + devId = id1; + } + + // 进行单个监测点的相序校验 + if (isStandardDevData && !successPair.containsKey(standardDevId) || !isStandardDevData && !successPair.containsKey(devId)) { + + if (FormalTestManager.devDataMap.get(devId).size() > 6 + 5 && FormalTestManager.standardDevDataMap.get(standardDevId).size() > 6 + 5) { + successComm.add(id1); + List> singleMonitorAlignData = getSingleMonitorAlignData(FormalTestManager.devDataMap.get(devId), FormalTestManager.standardDevDataMap.get(standardDevId)); + if (this.singleMonitorXuCheck(devId, singleMonitorAlignData.get(0), singleMonitorAlignData.get(1))) { + successPair.put(standardDevId, devId); + // 若成功的配对项等于总的配对项,则判定为成功 + if (successPair.keySet().containsAll(FormalTestManager.pairsMap.keySet())) { + FormalTestManager.standardDevDataMap.forEach((k, v) -> { + v.clear(); + }); + FormalTestManager.devDataMap.forEach((k, v) -> { + v.clear(); + }); + successPair.clear(); + successComm.clear(); + failComm.clear(); + System.out.println("相序校验成功!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》开始正式检测》》》》》》》》》》》》》》》》"); + SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); + } + } else if (successComm.size() == FormalTestManager.monitorMap.size()) { + successComm.clear(); + failComm.clear(); + // 相序校验失败,最终向前端发送失败消息 + WebSocketVO webSocketVO = new WebSocketVO<>(); + webSocketVO.setRequestId(SourceOperateCodeEnum.YJC_XUJY.getValue()); + webSocketVO.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); + webSocketVO.setCode(SourceResponseCodeEnum.PHASE_CHECK_FAIL.getCode()); + webSocketVO.setData(SourceResponseCodeEnum.PHASE_CHECK_FAIL.getMessage()); + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO)); + + CnSocketUtil.quitSend(param); + return; + } + } + } + break; + case UNPROCESSED_BUSINESS: + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + break; + case NORMAL_RESPONSE: +// if (devData.getResult()) { +// devXuData.add(devData); +// } else { +// SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); +// System.out.println("相序接线校验被抛除的数据:" + data); +// } + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + break; + case DEV_ERROR: + failComm.addAll(FormalTestManager.devMapMonitorNum.get(socketDataMsg.getData())); + WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0)); + completeJudgment(param); + break; + case DEV_TARGET: + failComm.addAll(FormalTestManager.devMapMonitorNum.get(socketDataMsg.getData())); + WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); + completeJudgment(param); + break; + case RE_OPERATE: + CnSocketUtil.quitSend(param); + break; + default: + CnSocketUtil.sendUnSocket(param.getUserPageId()); + break; + } + } + } + + /** + * 正式检测 + * + * @param param + * @param socketDataMsg + */ + private void formalDeal(PreDetectionParam param, SocketDataMsg socketDataMsg) { + String data = socketDataMsg.getData(); + DevData devData = JSON.parseObject(data, DevData.class); //DevData的id值为 设备id_通道号 这种形式 + SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); + String id1 = devData.getId(); + + switch (Objects.requireNonNull(dictDataEnumByCode)) { + case SUCCESS: + //成功收到数据后重置超时统计时间 + SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); + + if (devData.getResult()) { + String id2 = FormalTestManager.pairsMap.get(id1); + boolean isStandardDevData = true; + if (FormalTestManager.standardDevDataMap.containsKey(id1)) { + FormalTestManager.standardDevDataMap.get(id1).add(devData); + Collections.sort(FormalTestManager.standardDevDataMap.get(id1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); + } + if (FormalTestManager.devDataMap.containsKey(id1)) { + isStandardDevData = false; + FormalTestManager.devDataMap.get(id1).add(devData); + Collections.sort(FormalTestManager.devDataMap.get(id1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); + } + + String standardDevId = id1; + String devId = id2; + if (!isStandardDevData) { + standardDevId = id2; + devId = id1; + } + + if (isStandardDevData && !successPair.containsKey(standardDevId) || !isStandardDevData && !successPair.containsKey(devId)) { + + + } +// //当成功的通道数量和检测通道数量相同时进入 +// if (successComm.size() == FormalTestManager.monitorMap.size()) { +// System.out.println(sourceIssue.getType() + CnSocketUtil.SPLIT_TAG + sourceIssue.getIndex() + "当前测试小项读取数据已经全部结束。。。。。。。。。"); +// //修改装置为监测中 +//// adPlanService.updateTestState(param.getPlanId(), param.getDevIds()); +// //开启线程进行入库原始数据操作 +// baseDataInsert(FormalTestManager.realDataXiList, sourceIssue, param, SocketManager.valueTypeMap); +// +// //调用判断方法 +// Map textResult = detectionServiceImpl.processing(FormalTestManager.realDataXiList, param, FormalTestManager.devIdMapComm, sourceIssue, dataRule); +// +// System.out.println(textResult); +// //对检测结果组装实体推送给前台 +// assWebJson(param, textResult, socketDataMsg, sourceIssue); +// +// //当小项结束后需要删除集合中的小项 +// SocketManager.delSource(sourceIssue.getIndex()); +// System.out.println("当前小项结束进行删除============" + sourceIssue.getType() + CnSocketUtil.SPLIT_TAG + sourceIssue.getIndex()); +// +// //小项检测完后小项数减一,并更新map +// long residueCount = SocketManager.getSourceTarget(sourceIssue.getType()) - 1; +// SocketManager.addTargetMap(sourceIssue.getType(), residueCount); +// System.out.println("该大项还有" + residueCount + "个小项没有进行检测!!!!!!!!"); +// +// //当该大项中小项数量变为0,则任务该大项检测结束 +// if (residueCount == 0) { +// System.out.println(sourceIssue.getType() + sourceIssue.getIndex() + "当前测试大项已经全部结束》》》》》》》》"); +// //当residueCount为0则认为大项中的小项已经全部跑完,开始组装信息推送给前端 +// List resultList = new ArrayList<>(); +// // 获取当前检测大项的所有设备的检测结果 +// List allDevTestList = targetTestMap.get(sourceIssue.getType()); +// Map> map = allDevTestList.stream().collect(Collectors.groupingBy(DevLineTestResult::getDeviceId)); +// map.forEach((dev, list) -> { +// DevLineTestResult devTem = new DevLineTestResult(); +// devTem.setDeviceId(dev); +// devTem.setDeviceName(list.get(0).getDeviceName()); +// Integer[] arr = list.get(0).getChnResult(); +// for (int i = 0; i < arr.length; i++) { +// List arrList = list.stream().map(DevLineTestResult::getChnResult).collect(Collectors.toList()); +// Integer[] resultArr = getMaxIntArray(arrList); +// devTem.setChnResult(resultArr); +// } +// resultList.add(devTem); +// }); +// allDevTestList.clear(); +// CnSocketUtil.sendToWebSocket(param.getUserPageId(), socketDataMsg.getRequestId().split(CnSocketUtil.STEP_TAG)[1] + CnSocketUtil.END_TAG, 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() + CnSocketUtil.START_TAG, 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() + CnSocketUtil.STEP_TAG + sourceIssues.getType()); +// SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, 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(), param.getUserId(), param.getTemperature(), param.getHumidity()); +// CnSocketUtil.quitSend(param); +// } +// successComm.clear(); +// FormalTestManager.realDataXiList.clear(); +// + } +// } else { +// System.out.println("被抛除的数据:" + data); +// } + break; + case UNPROCESSED_BUSINESS: + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + break; + case NORMAL_RESPONSE: +// if (devData.getResult()) { +// if (SocketManager.clockMap.containsKey(sourceIssue.getIndex())) { +// SocketManager.clockMap.put(sourceIssue.getIndex(), 0L); +// } +// FormalTestManager.realDataXiList.add(devData); +// } else { +// System.out.println("被抛除的数据:" + data); +// } + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + break; + case DEV_ERROR: + failComm.addAll(FormalTestManager.devMapMonitorNum.get(socketDataMsg.getData())); + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + break; + case DEV_TARGET: + failComm.addAll(FormalTestManager.devMapMonitorNum.get(socketDataMsg.getData())); + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + break; + case RE_OPERATE: + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + break; + case MESSAGE_PARSING_ERROR: + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + break; + default: + CnSocketUtil.sendUnSocket(param.getUserPageId()); + break; + } + } + + private void completeJudgment(PreDetectionParam param) { + System.out.println("成功失败测点数量" + successComm.size() + ":" + failComm.size() + "监测点总数" + FormalTestManager.monitorMap.size()); + + if (successComm.size() + failComm.size() == FormalTestManager.monitorMap.size()) { + //全部装置返回 + if (!failComm.isEmpty()) { + CnSocketUtil.quitSend(param); + WebSocketVO webSocketVO = new WebSocketVO<>(); + webSocketVO.setRequestId(SourceOperateCodeEnum.ERROR_FLOW_END.getValue()); + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO)); + } + successComm.clear(); + failComm.clear(); + } + } + + + /** + * 根据数据对齐算法,针对单个监测点进行数据对齐 + * + * @param devDataList 被检设备数据(已经按照时间戳从小到大排过序) + * @param standardDevDataList 标准设备数据(已经按照时间戳从小到大排过序) + * @return 返回一个List集合,集合中仅有2个元素。下标为0的元素为被检设备数据,下标为1的元素为其一一对齐的标准设备数据 + */ + private List> getSingleMonitorAlignData(List devDataList, List standardDevDataList) { + List> result = new ArrayList<>(); + result.add(devDataList); + + List alignDevData = new ArrayList<>(); + int jStart = 0; + for (int i = 0; i < devDataList.size(); i++) { + int j = jStart; + if (j >= standardDevDataList.size()) { + break; + } + for (; j < standardDevDataList.size(); j++) { + if (DetectionUtil.isAlignData(devDataList.get(i), standardDevDataList.get(j))) { + alignDevData.add(standardDevDataList.get(j)); + jStart = j + 1; + break; + } + } + } + + result.add(alignDevData); + return result; + } + + /** + * 单个检测点实时数据对齐校验 + * + * @param devDataList 被检设备数据(已经按照时间戳从小到大排过序) + * @param standardDevDataList 标准设备数据(已经按照时间戳从小到大排过序) + * @return true:对齐成功;false:对齐失败 + */ + private boolean singleMonitorAlignCheck(List devDataList, List standardDevDataList) { + if (standardDevDataList.size() >= 5 + 5 && devDataList.size() >= 5 + 5) { //实时数据对齐需要至少对齐5组。为了防止网络波动,导致数据延迟接收,这里设置为5+5=10后再进行对齐 + int count = 0; + + int jStart = 0; + for (int i = 0; i < devDataList.size(); i++) { + int j = jStart; + if (j >= standardDevDataList.size()) { + break; + } + for (; j < standardDevDataList.size(); j++) { + if (DetectionUtil.isAlignData(devDataList.get(i), standardDevDataList.get(j))) { + count++; + jStart = j + 1; + break; + } + } + if (count >= 5) { + break; + } + } + return count >= 5; + } + return false; + } + + /** + * 单个检测点相序校验 + * + * @param lineId 单个检测点的被检设备线路id + * @param devData 单个检测点的被检设备数据 + * @param stdData 单个检测点的标准设备数据 + * @return + */ + private boolean singleMonitorXuCheck(String lineId, List devData, List stdData) { + // 首先确保,至少有6组数据 + if (devData.size() < volOrCurCheckCount || stdData.size() < volOrCurCheckCount) { + return false; + } else { + // 电压&电流校验(校验6组数据即可) + List uDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.VRMS.getCode()); + List uStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.VRMS.getCode()); + List iDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.IRMS.getCode()); + List iStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.IRMS.getCode()); + for (int i = 0; i < volOrCurCheckCount; i++) { + DevData.SqlDataDTO.ListDTO uDevList = uDev.get(i).getList(); + DevData.SqlDataDTO.ListDTO uStdList = uStd.get(i).getList(); + DevData.SqlDataDTO.ListDTO iDevList = iDev.get(i).getList(); + DevData.SqlDataDTO.ListDTO iStdList = iStd.get(i).getList(); + + if (!voltageOrCurrentCheck(uDevList.getA(), uDevList.getB(), uDevList.getC(), uStdList.getA(), uStdList.getB(), uStdList.getC(), true) + || !voltageOrCurrentCheck(iDevList.getA(), iDevList.getB(), iDevList.getC(), iStdList.getA(), iStdList.getB(), iStdList.getC(), false)) { + // todo 单个检测点电压&电流校验失败,推送失败消息 + return false; + } + } + // 根据接线方式(星型、角型)来决定是否进行三项不平衡校验 + if (DetectionCodeEnum.STAR.getCode().equals(FormalTestManager.monitorMap.get(lineId).getConnection())) { + //进行三项不平衡校验 + List uUnblanceDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.V_UNBAN.getCode()); + List uUnblanceStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.V_UNBAN.getCode()); + List iUnblanceDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.I_UNBAN.getCode()); + List iUnblanceStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.I_UNBAN.getCode()); + for (int i = 0; i < volOrCurCheckCount; i++) { + DevData.SqlDataDTO.ListDTO uUnblanceDevList = uUnblanceDev.get(i).getList(); + DevData.SqlDataDTO.ListDTO uUnblanceStdList = uUnblanceStd.get(i).getList(); + DevData.SqlDataDTO.ListDTO iUnblanceDevList = iUnblanceDev.get(i).getList(); + DevData.SqlDataDTO.ListDTO iUnblanceStdList = iUnblanceStd.get(i).getList(); + + if (!unbalanceCheck(uUnblanceDevList.getT(), uUnblanceStdList.getT(), true) + || !unbalanceCheck(iUnblanceDevList.getT(), iUnblanceStdList.getT(), false)) { + // todo 单个检测点三项不平衡校验失败,推送失败消息 + return false; + } + } + } + + // 是否存在电流 + boolean notHasCurrent = iDev.stream().allMatch( + p -> p.getList().getA() != null && DetectionUtil.isZero(p.getList().getA()) + && p.getList().getB() != null && DetectionUtil.isZero(p.getList().getB()) + && p.getList().getC() != null && DetectionUtil.isZero(p.getList().getC())); + if (!notHasCurrent) { + // 相角校验 + List vaUnblanceDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.VA.getCode()); + List vaUnblanceStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.VA.getCode()); + List iaUnblanceDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.IA.getCode()); + List iaUnblanceStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.IA.getCode()); + for (int i = 0; i < phaseCheckCount; i++) { + DevData.SqlDataDTO.ListDTO vaUnblanceDevList = vaUnblanceDev.get(i).getList(); + DevData.SqlDataDTO.ListDTO vaUnblanceStdList = vaUnblanceStd.get(i).getList(); + DevData.SqlDataDTO.ListDTO iaUnblanceDevList = iaUnblanceDev.get(i).getList(); + DevData.SqlDataDTO.ListDTO iaUnblanceStdList = iaUnblanceStd.get(i).getList(); + + if (!phaseCheck(vaUnblanceDevList.getA(), vaUnblanceDevList.getB(), vaUnblanceDevList.getC(), vaUnblanceStdList.getA(), vaUnblanceStdList.getB(), vaUnblanceStdList.getC()) + || !phaseCheck(iaUnblanceDevList.getA(), iaUnblanceDevList.getB(), iaUnblanceDevList.getC(), iaUnblanceStdList.getA(), iaUnblanceStdList.getB(), iaUnblanceStdList.getC())) { + // todo 单个检测点相角校验失败,推送失败消息 + return false; + } + } + } + return true; + } + } + + /** + * 从单个检测点中,根据检测项code获取SqlDataDTO数据 + * + * @param devData 原始数据 + * @param type 检测项code + * @return key为设备id_通道号,value为对应的SqlDataDTO数据集合 + */ + public static List getSingleMonitorSqlData(List devData, String type) { + return devData.stream().flatMap(x -> x.getSqlData().stream().filter(x1 -> type.equals(x1.getDesc().substring(x1.getType().indexOf("$") + 1)))).collect(Collectors.toList()); + } + + /** + * 相序校验中的电压或电流校验 + * + * @param a 被检设备a相电压\电流 + * @param b 被检设备b相电压\电流 + * @param c 被检设备c相电压\电流 + * @param aStd 标准设备a相电压\电流 + * @param bStd 标准设备b相电压\电流 + * @param cStd 标准设备c相电压\电流 + * @param isVoltage 是否为电压校验 + * @return + */ + private boolean voltageOrCurrentCheck(Double a, Double b, Double c, Double aStd, Double bStd, Double cStd, boolean isVoltage) { + if (isVoltage) { + return NumberUtil.isIn(BigDecimal.valueOf(a), BigDecimal.valueOf(aStd * 0.99), BigDecimal.valueOf(aStd * 1.01)) + && NumberUtil.isIn(BigDecimal.valueOf(b), BigDecimal.valueOf(bStd * 0.99), BigDecimal.valueOf(bStd * 1.01)) + && NumberUtil.isIn(BigDecimal.valueOf(c), BigDecimal.valueOf(cStd * 0.99), BigDecimal.valueOf(cStd * 1.01)); + } else { + return NumberUtil.isIn(BigDecimal.valueOf(a), BigDecimal.valueOf(aStd * 0.90), BigDecimal.valueOf(aStd * 1.10)) + && NumberUtil.isIn(BigDecimal.valueOf(b), BigDecimal.valueOf(bStd * 0.90), BigDecimal.valueOf(bStd * 1.10)) + && NumberUtil.isIn(BigDecimal.valueOf(c), BigDecimal.valueOf(cStd * 0.90), BigDecimal.valueOf(cStd * 1.10)); + } + } + + /** + * 相序校验中的电压(电流)不平衡度校验 + * + * @param devData 被检设备的数据 + * @param stdData 标准设备的数据 + * @param isVoltage 是否为三项电压不平衡度校验 + * @return + */ + private boolean unbalanceCheck(Double devData, Double stdData, boolean isVoltage) { + if (isVoltage) { + return NumberUtil.isIn(BigDecimal.valueOf(devData), BigDecimal.valueOf(stdData * 0.95), BigDecimal.valueOf(stdData * 1.05)); + } else { + return NumberUtil.isIn(BigDecimal.valueOf(devData), BigDecimal.valueOf(stdData * 0.90), BigDecimal.valueOf(stdData * 1.10)); + } + } + + /** + * 相序校验中的相角校验 + * + * @param a 被检设备a相相角 + * @param b 被检设备b相相角 + * @param c 被检设备c相相角 + * @param aStd 标准设备a相相角 + * @param bStd 标准设备b相相角 + * @param cStd 标准设备c相相角 + * @return + */ + private boolean phaseCheck(Double a, Double b, Double c, Double aStd, Double bStd, Double cStd) { + a = DetectionUtil.adjustPhase(a); + b = DetectionUtil.adjustPhase(b); + c = DetectionUtil.adjustPhase(c); + aStd = DetectionUtil.adjustPhase(aStd); + bStd = DetectionUtil.adjustPhase(bStd); + cStd = DetectionUtil.adjustPhase(cStd); + return NumberUtil.isIn(BigDecimal.valueOf(a), BigDecimal.valueOf(aStd - 1), BigDecimal.valueOf(aStd + 1)) + && NumberUtil.isIn(BigDecimal.valueOf(b), BigDecimal.valueOf(bStd - 1), BigDecimal.valueOf(bStd + 1)) + && NumberUtil.isIn(BigDecimal.valueOf(c), BigDecimal.valueOf(cStd - 1), BigDecimal.valueOf(cStd + 1)); + } } 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 34a10f62..d47eee53 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 @@ -17,6 +17,7 @@ import com.njcn.gather.detection.pojo.po.IcdCheckData; import com.njcn.gather.detection.pojo.po.SourceCompareDev; import com.njcn.gather.detection.pojo.vo.*; import com.njcn.gather.detection.service.impl.DetectionServiceImpl; +import com.njcn.gather.detection.util.DetectionUtil; import com.njcn.gather.detection.util.socket.*; import com.njcn.gather.device.pojo.enums.CommonEnum; import com.njcn.gather.device.pojo.po.PqDevSub; @@ -31,10 +32,10 @@ import com.njcn.gather.script.pojo.po.SourceIssue; import com.njcn.gather.script.service.IPqScriptCheckDataService; import com.njcn.gather.script.service.IPqScriptDtlsService; import com.njcn.gather.storage.pojo.param.StorageParam; -import com.njcn.gather.storage.pojo.po.AdHarmonicResult; -import com.njcn.gather.storage.pojo.po.AdNonHarmonicResult; -import com.njcn.gather.storage.service.AdHarmonicService; +import com.njcn.gather.storage.pojo.po.SimAndDigHarmonicResult; +import com.njcn.gather.storage.pojo.po.SimAndDigNonHarmonicResult; import com.njcn.gather.storage.service.DetectionDataDealService; +import com.njcn.gather.storage.service.SimAndDigHarmonicService; import com.njcn.gather.system.cfg.service.ISysTestConfigService; import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum; import com.njcn.gather.system.dictionary.pojo.po.DictData; @@ -49,10 +50,7 @@ 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; import java.time.format.DateTimeFormatter; -import java.time.format.DateTimeParseException; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Function; @@ -85,7 +83,7 @@ public class SocketDevResponseService { private final ISysRegResService iSysRegResService; private final IPqScriptCheckDataService iPqScriptCheckDataService; private final ISysTestConfigService sysTestConfigService; - private final AdHarmonicService adHarmonicService; + private final SimAndDigHarmonicService adHarmonicService; private final IAdPlanService adPlanService; private final IPqScriptCheckDataService pqScriptCheckDataService; private final IDictDataService dictDataService; @@ -712,19 +710,18 @@ public class SocketDevResponseService { case SUCCESS: String result = socketDataMsg.getData(); successComm.add(result); - //通讯校验成功 - if (!param.getOperateType().equals(SourceOperateCodeEnum.TEST_TEM_START.getValue())) { - WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); - } + //单个测点通讯成功 + WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1)); + System.out.println("设备通讯校验!" + successComm.size() + "=====" + FormalTestManager.monitorIdListComm.size()); if (successComm.size() == FormalTestManager.monitorIdListComm.size()) { - if (!param.getOperateType().equals(SourceOperateCodeEnum.TEST_TEM_START.getValue())) { - SocketDataMsg temMsg = new SocketDataMsg(); - temMsg.setCode(SourceResponseCodeEnum.DEV_COMM_ALL_SUCCESS.getCode()); - temMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_01.getValue()); - temMsg.setRequestId(SourceOperateCodeEnum.YJC_SBTXJY.getValue()); - WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(temMsg)); - } + // 通知前端整个装置通讯检测过程成功 + SocketDataMsg temMsg = new SocketDataMsg(); + temMsg.setCode(SourceResponseCodeEnum.DEV_COMM_ALL_SUCCESS.getCode()); + temMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_01.getValue()); + temMsg.setRequestId(SourceOperateCodeEnum.YJC_SBTXJY.getValue()); + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(temMsg)); + //开始进行协议校验 successComm.clear(); failComm.clear(); @@ -1011,7 +1008,7 @@ public class SocketDevResponseService { * @param list * @return */ - private Integer getErrorType(String desc, DevData.SqlDataDTO.ListDTO list) { + public static Integer getErrorType(String desc, DevData.SqlDataDTO.ListDTO list) { if (ObjectUtil.isNotNull(list)) { if (DetectionCodeEnum.MAG.getCode().equals(desc) || DetectionCodeEnum.DUR.getCode().equals(desc)) { if (ObjectUtil.isNull(list.getA()) && ObjectUtil.isNull(list.getB()) && ObjectUtil.isNull(list.getC()) && ObjectUtil.isNull(list.getT())) { @@ -1190,7 +1187,6 @@ public class SocketDevResponseService { case UNPROCESSED_BUSINESS: break; - case NORMAL_RESPONSE: if (devData.getResult()) { devInfo.add(devData); @@ -1479,7 +1475,7 @@ public class SocketDevResponseService { switch (operateCodeEnum) { case QUIT_INIT_01: SocketManager.removeUser(s); - CnSocketUtil.quitSendSource(param); + // CnSocketUtil.quitSendSource(param); break; case QUIT_INIT_02: socketMsg.setRequestId(SourceOperateCodeEnum.QUITE.getValue()); @@ -1666,26 +1662,10 @@ public class SocketDevResponseService { * @return */ private Boolean phaseBoolean(SourceIssue.ChannelListDTO channelListDTO, Double devPhase) { - Double phase = devPhase; - if (devPhase < -180) { - phase = devPhase + 360; - } - if (devPhase > 180) { - phase = devPhase - 360; - } - + devPhase = DetectionUtil.adjustPhase(devPhase); Double fPhase = channelListDTO.getFPhase(); - if (fPhase < -180) { - fPhase = fPhase + 360; - } - if (fPhase > 180) { - fPhase = fPhase - 360; - } - return - NumberUtil.isIn(BigDecimal.valueOf(phase), - BigDecimal.valueOf(fPhase - 1), - BigDecimal.valueOf(fPhase + 1)); - + fPhase = DetectionUtil.adjustPhase(fPhase); + return NumberUtil.isIn(BigDecimal.valueOf(devPhase), BigDecimal.valueOf(fPhase - 1), BigDecimal.valueOf(fPhase + 1)); } @@ -1811,10 +1791,10 @@ public class SocketDevResponseService { // Runnable runnable = () -> { System.out.println("原始数据插入数据库开始执行========================================="); - List adNonHarmonicResultList = new ArrayList<>(); - List adHarmonicResultList = new ArrayList<>(); + List simAndDigNonHarmonicResultList = new ArrayList<>(); + List adHarmonicResultList = new ArrayList<>(); for (DevData data : devDataList) { - LocalDateTime localDateTime = timeFormat(data.getTime(), formatter); + LocalDateTime localDateTime = DetectionUtil.timeFormat(data.getTime(), formatter); if (Objects.nonNull(localDateTime)) { String[] splitArr = data.getId().split(CnSocketUtil.SPLIT_TAG); @@ -1823,7 +1803,7 @@ public class SocketDevResponseService { if (nonHarmonicList.contains(sourceIssue.getType())) { for (DevData.SqlDataDTO sqlDataDTO : data.getSqlData()) { DevData.SqlDataDTO.ListDTO listDTO = sqlDataDTO.getList(); - AdNonHarmonicResult adNonHarmonicResult = new AdNonHarmonicResult(); + SimAndDigNonHarmonicResult adNonHarmonicResult = new SimAndDigNonHarmonicResult(); adNonHarmonicResult.setTimeId(localDateTime); adNonHarmonicResult.setMonitorId(temId); adNonHarmonicResult.setScriptId(param.getScriptId()); @@ -1848,14 +1828,14 @@ public class SocketDevResponseService { if (Objects.nonNull(d)) { adNonHarmonicResult.setTValue(String.format("%.7f", d)); } - adNonHarmonicResultList.add(adNonHarmonicResult); + simAndDigNonHarmonicResultList.add(adNonHarmonicResult); } } else { for (int j = 0; j < data.getSqlDataHarm().size(); j++) { DevData.SqlDataHarmDTO sqlDataDTO = data.getSqlDataHarm().get(j); String dui = harmonicRelationMap.get(sqlDataDTO.getDesc()); - AdHarmonicResult adHarmonicResult = new AdHarmonicResult(); + SimAndDigHarmonicResult adHarmonicResult = new SimAndDigHarmonicResult(); adHarmonicResult.setTimeId(localDateTime); adHarmonicResult.setMonitorId(temId); @@ -1888,7 +1868,7 @@ public class SocketDevResponseService { List b = tem.getB(); List c = tem.getC(); - Class example = (Class) adHarmonicResult.getClass(); + Class example = (Class) adHarmonicResult.getClass(); if (DicDataEnum.HSV.getCode().equals(sourceIssue.getType()) || DicDataEnum.HSI.getCode().equals(sourceIssue.getType())) { for (int i = 1; i < a.size() + 1; i++) { try { @@ -1930,9 +1910,9 @@ public class SocketDevResponseService { } } - if (CollUtil.isNotEmpty(adNonHarmonicResultList)) { - Map> map = adNonHarmonicResultList.stream().collect(Collectors.groupingBy(x -> x.getMonitorId() + x.getTimeId() + x.getScriptId() + x.getSort() + x.getAdType() + x.getDataType())); - List info = new ArrayList<>(); + if (CollUtil.isNotEmpty(simAndDigNonHarmonicResultList)) { + Map> map = simAndDigNonHarmonicResultList.stream().collect(Collectors.groupingBy(x -> x.getMonitorId() + x.getTimeId() + x.getScriptId() + x.getSort() + x.getAdType() + x.getDataType())); + List info = new ArrayList<>(); map.forEach((key, value) -> { if (value.size() > 1) { System.err.println("重复时间戳->" + key + value); @@ -1944,8 +1924,8 @@ public class SocketDevResponseService { detectionDataDealService.acceptAdNon(info, param.getCode()); } if (CollUtil.isNotEmpty(adHarmonicResultList)) { - Map> map = adHarmonicResultList.stream().collect(Collectors.groupingBy(x -> x.getMonitorId() + x.getTimeId() + x.getScriptId() + x.getSort() + x.getAdType() + x.getDataType())); - List info = new ArrayList<>(); + Map> map = adHarmonicResultList.stream().collect(Collectors.groupingBy(x -> x.getMonitorId() + x.getTimeId() + x.getScriptId() + x.getSort() + x.getAdType() + x.getDataType())); + List info = new ArrayList<>(); map.forEach((key, value) -> { if (value.size() > 1) { System.err.println("重复时间戳->" + key + value); @@ -1961,18 +1941,6 @@ public class SocketDevResponseService { } - private LocalDateTime timeFormat(String dateTimeStr, DateTimeFormatter formatter) { - try { - ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateTimeStr, formatter.withZone(ZoneId.of("UTC"))); - LocalDateTime localDateTime = zonedDateTime.toLocalDateTime(); - return localDateTime; - } catch (DateTimeParseException e) { - System.err.println("日期时间字符串格式错误: " + e.getMessage()); - return null; - } - } - - /** * 向前端推送消息 * diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/enums/DetectionCodeEnum.java b/detection/src/main/java/com/njcn/gather/detection/pojo/enums/DetectionCodeEnum.java index 8b8201d7..2397266c 100644 --- a/detection/src/main/java/com/njcn/gather/detection/pojo/enums/DetectionCodeEnum.java +++ b/detection/src/main/java/com/njcn/gather/detection/pojo/enums/DetectionCodeEnum.java @@ -29,16 +29,12 @@ public enum DetectionCodeEnum { I_UNBAN("I_UNBAN", "三相电流负序不平衡度"), PST("PST", "短时间闪变"), P_FUND("P_FUND", "功率"), - - I1("I1", "基波电流"), - - - - UNKNOWN_ERROR("-1", "未知异常"), - ; + + STAR("Star","星型接线"), + DELTA("Delta","角型接线"); private final String code; private final String message; 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 a906569c..5153669c 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 @@ -48,6 +48,8 @@ public enum SourceOperateCodeEnum { YJC_SBTXJY("yjc_sbtxjy", "设备通讯检测"), YJC_XYJY("yjc_xyjy", "协议校验"), YJC_XUJY("YJC_xujy", "相序校验"), + YJC_ALIGN("YJC_align","实时数据对齐校验"), + YJC_MXYZXJY("YJC_mxyzxjy", "模型一致性校验"), FORMAL_REAL("formal_real","正式检测"), // SIMULATE_REAL("simulate_real","模拟检测"), Coefficient_Check("Coefficient_Check","系数校验"), @@ -78,7 +80,6 @@ public enum SourceOperateCodeEnum { // TEST_TEM_STOP("5","临时停止"), ALL_TEST("1","全部检测"), RE_ERROR_TEST("2","不合格项复检"), - TEST_TEM_START("3","继续检测"), SIMULATE_TEST("4","模拟检测"), //TEST_STOP("7","停止检测"), //FAST_TEST("10","一键检测"), @@ -99,10 +100,7 @@ public enum SourceOperateCodeEnum { /** * ftp文件传送指令 */ - FTP_SEND_01("FTP_SEND$01", "发送文件") - - - ; + FTP_SEND_01("FTP_SEND$01", "发送文件"),; private final String value; private final String msg; diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/param/ContrastDetectionParam.java b/detection/src/main/java/com/njcn/gather/detection/pojo/param/ContrastDetectionParam.java index 9568e74c..c8074369 100644 --- a/detection/src/main/java/com/njcn/gather/detection/pojo/param/ContrastDetectionParam.java +++ b/detection/src/main/java/com/njcn/gather/detection/pojo/param/ContrastDetectionParam.java @@ -31,6 +31,9 @@ public class ContrastDetectionParam { @NotEmpty(message = DetectionValidMessage.STANDARD_DEV_IDS_NOT_EMPTY) private List standardDevIds; + /** + * key为 标准设备ID_检测点序号、value为 被检设备ID_检测点序号 + */ @ApiModelProperty("配对关系") @NotEmpty(message = DetectionValidMessage.PAIRS_NOT_EMPTY) private Map pairs; diff --git a/detection/src/main/java/com/njcn/gather/detection/service/impl/DetectionServiceImpl.java b/detection/src/main/java/com/njcn/gather/detection/service/impl/DetectionServiceImpl.java index 15dd4e91..2db7a187 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 @@ -12,16 +12,21 @@ import com.njcn.gather.detection.pojo.enums.DetectionCodeEnum; import com.njcn.gather.detection.pojo.param.PreDetectionParam; import com.njcn.gather.detection.pojo.po.DevData; import com.njcn.gather.detection.pojo.vo.DetectionData; +import com.njcn.gather.detection.util.DetectionUtil; +import com.njcn.gather.device.pojo.vo.PreDetection; import com.njcn.gather.err.pojo.param.PqErrSysParam; import com.njcn.gather.err.pojo.po.PqErrSysDtls; import com.njcn.gather.err.pojo.vo.ErrDtlsCheckDataVO; import com.njcn.gather.err.service.IPqErrSysDtlsService; +import com.njcn.gather.plan.pojo.enums.DataSourceEnum; import com.njcn.gather.result.pojo.enums.ResultUnitEnum; import com.njcn.gather.script.pojo.po.PqScriptCheckData; import com.njcn.gather.script.pojo.po.SourceIssue; import com.njcn.gather.script.service.IPqScriptCheckDataService; -import com.njcn.gather.storage.pojo.po.AdHarmonicResult; -import com.njcn.gather.storage.pojo.po.AdNonHarmonicResult; +import com.njcn.gather.storage.pojo.po.ContrastHarmonicResult; +import com.njcn.gather.storage.pojo.po.ContrastNonHarmonicResult; +import com.njcn.gather.storage.pojo.po.SimAndDigHarmonicResult; +import com.njcn.gather.storage.pojo.po.SimAndDigNonHarmonicResult; import com.njcn.gather.storage.service.DetectionDataDealService; import com.njcn.gather.system.cfg.pojo.po.SysTestConfig; import com.njcn.gather.system.cfg.service.ISysTestConfigService; @@ -38,6 +43,7 @@ import java.util.*; import java.util.function.BiConsumer; import java.util.function.Function; import java.util.stream.Collectors; +import java.util.stream.Stream; /** @@ -54,10 +60,10 @@ public class DetectionServiceImpl { private final DetectionDataDealService detectionDataDealService; private final ISysTestConfigService sysTestConfigService; - private final String TYPE_A = "A"; - private final String TYPE_B = "B"; - private final String TYPE_C = "C"; - private final String TYPE_T = "T"; + public static final String TYPE_A = "A"; + public static final String TYPE_B = "B"; + public static final String TYPE_C = "C"; + public static final String TYPE_T = "T"; private final String U = "U"; private final String I = "I"; private final String F = "F"; @@ -123,24 +129,24 @@ public class DetectionServiceImpl { */ case HV: case HI: - AdHarmonicResult harmV = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, 2); - AdHarmonicResult harmI = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, 2); + SimAndDigHarmonicResult harmV = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, 2); + SimAndDigHarmonicResult harmI = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, 2); return resultFlag(harmV, harmI, code); /** * 间谐波 */ case HSV: case HSI: - AdHarmonicResult harmInV = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, 1); - AdHarmonicResult harmInI = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, 1); + SimAndDigHarmonicResult harmInV = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, 1); + SimAndDigHarmonicResult harmInI = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, 1); return resultFlag(harmInV, harmInI, code); /** * 三相电压不平衡度 */ case IMBV: - AdNonHarmonicResult vUnban = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, "V_UNBAN"); + SimAndDigNonHarmonicResult vUnban = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, "V_UNBAN"); if (ObjectUtil.isNotNull(vUnban)) { - detectionDataDealService.acceptAdNonResult(Arrays.asList(vUnban), code); + detectionDataDealService.acceptNonHarmonicResult(Arrays.asList(vUnban), code); return vUnban.getResultFlag(); } return 4; @@ -148,9 +154,9 @@ public class DetectionServiceImpl { * 三相电流不平衡度 */ case IMBA: - AdNonHarmonicResult iUnban = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, "I_UNBAN"); + SimAndDigNonHarmonicResult iUnban = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, "I_UNBAN"); if (ObjectUtil.isNotNull(iUnban)) { - detectionDataDealService.acceptAdNonResult(Arrays.asList(iUnban), code); + detectionDataDealService.acceptNonHarmonicResult(Arrays.asList(iUnban), code); return iUnban.getResultFlag(); } return 4; @@ -158,7 +164,7 @@ public class DetectionServiceImpl { * 谐波有功功率 */ case HP: - AdHarmonicResult harmP = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, HP, sourceIssue, dataRule, 2); + SimAndDigHarmonicResult harmP = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, HP, sourceIssue, dataRule, 2); if (ObjectUtil.isNotNull(harmP)) { detectionDataDealService.acceptAdResult(Arrays.asList(harmP), code); return harmP.getResultFlag(); @@ -168,9 +174,9 @@ public class DetectionServiceImpl { * 闪变 */ case F: - AdNonHarmonicResult pst = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, null, sourceIssue, dataRule, "PST"); + SimAndDigNonHarmonicResult pst = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, null, sourceIssue, dataRule, "PST"); if (ObjectUtil.isNotNull(pst)) { - detectionDataDealService.acceptAdNonResult(Arrays.asList(pst), code); + detectionDataDealService.acceptNonHarmonicResult(Arrays.asList(pst), code); return pst.getResultFlag(); } return 4; @@ -187,8 +193,8 @@ public class DetectionServiceImpl { } } - public Integer resultFlag(AdHarmonicResult v, AdHarmonicResult i, String code) { - List info = new ArrayList<>(); + public Integer resultFlag(SimAndDigHarmonicResult v, SimAndDigHarmonicResult i, String code) { + List info = new ArrayList<>(); if (ObjectUtil.isNotNull(v)) { info.add(v); } @@ -208,8 +214,8 @@ public class DetectionServiceImpl { SourceIssue sourceIssue, DictDataEnum dataRule, String code) { - List info = new ArrayList<>(); - List harmonicResultList = new ArrayList<>(); + List info = new ArrayList<>(); + List harmonicResultList = new ArrayList<>(); List devValueTypeList = sourceIssue.getDevValueTypeList(); //非谐波指标 List harmDesc = dev.stream().flatMap(x -> x.getSqlData().stream()).map(DevData.SqlDataDTO::getDesc).distinct().collect(Collectors.toList()); @@ -220,7 +226,7 @@ public class DetectionServiceImpl { if (harmDesc.contains(devIndex)) { //基本数据(频率,电压,电流) Map> map = devListMap(dev, dataRule, devIndex); - AdNonHarmonicResult result = new AdNonHarmonicResult(); + SimAndDigNonHarmonicResult result = new SimAndDigNonHarmonicResult(); String[] split = dev.get(0).getId().split("_"); String devID = devIdMapComm.get(split[0]); result.setMonitorId(devID + "_" + split[1]); @@ -300,7 +306,7 @@ public class DetectionServiceImpl { } Map>> devHarmMap = devHarmListMap(dev, sourceIssue, dataRule, fundCode, harmCode, num); if (CollUtil.isNotEmpty(devHarmMap)) { - AdHarmonicResult harmonicResult = new AdHarmonicResult(); + SimAndDigHarmonicResult harmonicResult = new SimAndDigHarmonicResult(); String[] split = dev.get(0).getId().split("_"); String devID = devIdMapComm.get(split[0]); harmonicResult.setMonitorId(devID + "_" + split[1]); @@ -335,7 +341,7 @@ public class DetectionServiceImpl { } if (CollUtil.isNotEmpty(info)) { - detectionDataDealService.acceptAdNonResult(info, code); + detectionDataDealService.acceptNonHarmonicResult(info, code); } if (CollUtil.isNotEmpty(harmonicResultList)) { detectionDataDealService.acceptAdResult(harmonicResultList, code); @@ -347,6 +353,7 @@ public class DetectionServiceImpl { * 判断值是否在误差范围内,有则进行判断否则则不进行计算(非谐波类型) * * @param dev 处理过后的数据 + * @param devIdMapComm 设备id映射表 key为设备ip,value为设备id * @param errDtlsCheckData 误差体系 * @param type (电压或者电流或者频率或者功率) * @param sourceIssue 源下发所对应的参数 @@ -361,7 +368,7 @@ public class DetectionServiceImpl { SourceIssue sourceIssue, DictDataEnum dataRule, String code) { - List info = new ArrayList<>(); + List info = new ArrayList<>(); List devValueTypeList = sourceIssue.getDevValueTypeList(); for (String s : devValueTypeList) { // 根据数据处理规则取值。key为相别,value为值列表 @@ -379,7 +386,7 @@ public class DetectionServiceImpl { if (P.equals(type)) { fData = sourceIssue.getFUn() * sourceIssue.getFIn(); } - AdNonHarmonicResult result = new AdNonHarmonicResult(); + SimAndDigNonHarmonicResult result = new SimAndDigNonHarmonicResult(); String[] split = dev.get(0).getId().split("_"); String devID = devIdMapComm.get(split[0]); result.setMonitorId(devID + "_" + split[1]); @@ -406,7 +413,7 @@ public class DetectionServiceImpl { } } else { List resultFlag = new ArrayList<>(); - Map> setters = new HashMap<>(); + Map> setters = new HashMap<>(); setters.put(TYPE_A, (r, d) -> r.setAValue(JSON.toJSONString(d))); setters.put(TYPE_B, (r, d) -> r.setBValue(JSON.toJSONString(d))); setters.put(TYPE_C, (r, d) -> r.setCValue(JSON.toJSONString(d))); @@ -421,7 +428,7 @@ public class DetectionServiceImpl { // 注意:如果map中不存在该phase的键,phaseValue可能为null,需确保map包含该键 DetectionData detectionData = rangeComparisonList(phaseValue, isQualified, pqErrSysDtls, fData, checkData.get(0).getValue(), dataRule); resultFlag.add(detectionData); - BiConsumer setter = setters.get(phase); + BiConsumer setter = setters.get(phase); if (setter != null) { setter.accept(result, detectionData); } else { @@ -436,8 +443,8 @@ public class DetectionServiceImpl { } } if (CollUtil.isNotEmpty(info)) { - detectionDataDealService.acceptAdNonResult(info, code); - List resultFlag = info.stream().map(AdNonHarmonicResult::getResultFlag).distinct().collect(Collectors.toList()); + detectionDataDealService.acceptNonHarmonicResult(info, code); + List resultFlag = info.stream().map(SimAndDigNonHarmonicResult::getResultFlag).distinct().collect(Collectors.toList()); return getInteger(resultFlag); } return 4; @@ -451,16 +458,16 @@ public class DetectionServiceImpl { * @param type (电压还是电流) * @param sourceIssue 源下发所对应的参数 * @param dataRule 数据处理原则 - * @param num 处理数组下标位数 + * @param num 区分谐波还是间谐波 1:间谐波,2:谐波 * @return */ - public AdHarmonicResult isHarmQualified(List dev, - Map devIdMapComm, - List errDtlsCheckData, - String type, - SourceIssue sourceIssue, - DictDataEnum dataRule, - Integer num) { + public SimAndDigHarmonicResult isHarmQualified(List dev, + Map devIdMapComm, + List errDtlsCheckData, + String type, + SourceIssue sourceIssue, + DictDataEnum dataRule, + Integer num) { Double fData = 1.0; String fundCode = ""; String harmCode = ""; @@ -492,7 +499,7 @@ public class DetectionServiceImpl { // } Map>> devMap = devHarmListMap(dev, sourceIssue, dataRule, fundCode, harmCode, num); if (CollUtil.isNotEmpty(devMap)) { - AdHarmonicResult harmonicResult = new AdHarmonicResult(); + SimAndDigHarmonicResult harmonicResult = new SimAndDigHarmonicResult(); String[] split = dev.get(0).getId().split("_"); String devID = devIdMapComm.get(split[0]); harmonicResult.setMonitorId(devID + "_" + split[1]); @@ -526,7 +533,6 @@ public class DetectionServiceImpl { return null; } - /** * 判断值是否在误差范围内,有则进行判断否则则不进行计算(三相不平衡和闪变) * @@ -537,13 +543,13 @@ public class DetectionServiceImpl { * @param dataRule 数据处理原则 * @return */ - public AdNonHarmonicResult isUnBalanceOrFlickerQualified(List dev, - Map devIdMapComm, - List errDtlsCheckData, - String type, - SourceIssue sourceIssue, - DictDataEnum dataRule, - String code) { + public SimAndDigNonHarmonicResult isUnBalanceOrFlickerQualified(List dev, + Map devIdMapComm, + List errDtlsCheckData, + String type, + SourceIssue sourceIssue, + DictDataEnum dataRule, + String code) { List checkData = pqScriptCheckDataService.list(new MPJLambdaWrapper() .eq(PqScriptCheckData::getScriptIndex, sourceIssue.getIndex()) .eq(PqScriptCheckData::getScriptId, sourceIssue.getScriptId()) @@ -557,7 +563,7 @@ public class DetectionServiceImpl { if (I.equals(type)) { fData = sourceIssue.getFIn(); } - AdNonHarmonicResult result = new AdNonHarmonicResult(); + SimAndDigNonHarmonicResult result = new SimAndDigNonHarmonicResult(); String[] split = dev.get(0).getId().split("_"); String devID = devIdMapComm.get(split[0]); result.setMonitorId(devID + "_" + split[1]); @@ -641,12 +647,12 @@ public class DetectionServiceImpl { //暂态电压下多少就是多少 List magErrList = errDtlsCheckData.stream().filter(x -> MAG.equals(x.getValueTypeCode())).collect(Collectors.toList()); List durErrList = errDtlsCheckData.stream().filter(x -> DUR.equals(x.getValueTypeCode())).collect(Collectors.toList()); - AdNonHarmonicResult magResult = voltageResult(dev.get(0).getId(), devIdMapComm, sourceIssue, dataRule, mag, magErrList, sourceIssue.getFUn(), MAG); - AdNonHarmonicResult durResult = voltageResult(dev.get(0).getId(), devIdMapComm, sourceIssue, dataRule, dur, durErrList, sourceIssue.getFFreq(), DUR); + SimAndDigNonHarmonicResult magResult = voltageResult(dev.get(0).getId(), devIdMapComm, sourceIssue, dataRule, mag, magErrList, sourceIssue.getFUn(), MAG); + SimAndDigNonHarmonicResult durResult = voltageResult(dev.get(0).getId(), devIdMapComm, sourceIssue, dataRule, dur, durErrList, sourceIssue.getFFreq(), DUR); if (CollUtil.isNotEmpty(mag.get(TYPE_B)) && CollUtil.isNotEmpty(mag.get(TYPE_C))) { conclusion(magResult, durResult); } - detectionDataDealService.acceptAdNonResult(Arrays.asList(magResult, durResult), code); + detectionDataDealService.acceptNonHarmonicResult(Arrays.asList(magResult, durResult), code); List numbers = Arrays.asList(magResult.getResultFlag(), durResult.getResultFlag()).stream().distinct().collect(Collectors.toList()); return getInteger(numbers); } @@ -658,7 +664,7 @@ public class DetectionServiceImpl { * @Author: wr * @Date: 2025/4/9 18:54 */ - private void conclusion(AdNonHarmonicResult magResult, AdNonHarmonicResult durResult) { + private void conclusion(SimAndDigNonHarmonicResult magResult, SimAndDigNonHarmonicResult durResult) { if (magResult.getResultFlag() == 1) { if (durResult.getResultFlag() != 2) { setTValueBasedOnAValue(magResult, durResult); @@ -672,7 +678,7 @@ public class DetectionServiceImpl { } } - private void setTValueBasedOnAValue(AdNonHarmonicResult magResult, AdNonHarmonicResult durResult, Boolean isMag) { + private void setTValueBasedOnAValue(SimAndDigNonHarmonicResult magResult, SimAndDigNonHarmonicResult durResult, Boolean isMag) { DetectionData a; DetectionData b; DetectionData c; @@ -700,17 +706,17 @@ public class DetectionServiceImpl { * @Description: * @Author: wr */ - private void setTValueBasedOnAValue(AdNonHarmonicResult magResult, AdNonHarmonicResult durResult) { + private void setTValueBasedOnAValue(SimAndDigNonHarmonicResult magResult, SimAndDigNonHarmonicResult durResult) { magResult.setTValue(magResult.getAValue()); durResult.setTValue(durResult.getAValue()); } - private void setTValueBasedOnBValue(AdNonHarmonicResult magResult, AdNonHarmonicResult durResult) { + private void setTValueBasedOnBValue(SimAndDigNonHarmonicResult magResult, SimAndDigNonHarmonicResult durResult) { magResult.setTValue(magResult.getBValue()); durResult.setTValue(durResult.getBValue()); } - private void setTValueBasedOnCValue(AdNonHarmonicResult magResult, AdNonHarmonicResult durResult) { + private void setTValueBasedOnCValue(SimAndDigNonHarmonicResult magResult, SimAndDigNonHarmonicResult durResult) { magResult.setTValue(magResult.getCValue()); durResult.setTValue(durResult.getCValue()); } @@ -724,20 +730,20 @@ public class DetectionServiceImpl { * @param errDtlsCheckData * @param fData * @Description: - * @return: com.njcn.gather.storage.pojo.po.AdNonHarmonicResult + * @return: com.njcn.gather.storage.pojo.po.SimAndDigNonHarmonicResult * @Author: wr * @Date: 2024/12/30 14:54 */ - private AdNonHarmonicResult voltageResult(String devId, - Map devIdMapComm, - SourceIssue sourceIssue, - DictDataEnum dataRule, - Map> mag, - List errDtlsCheckData, - Double fData, - String dur + private SimAndDigNonHarmonicResult voltageResult(String devId, + Map devIdMapComm, + SourceIssue sourceIssue, + DictDataEnum dataRule, + Map> mag, + List errDtlsCheckData, + Double fData, + String dur ) { - AdNonHarmonicResult result = new AdNonHarmonicResult(); + SimAndDigNonHarmonicResult result = new SimAndDigNonHarmonicResult(); String[] split = devId.split("_"); String devID = devIdMapComm.get(split[0]); result.setMonitorId(devID + "_" + split[1]); @@ -842,10 +848,10 @@ public class DetectionServiceImpl { * @param dev * @param dataRule */ - public Map> devListMap(List dev, DictDataEnum dataRule, String code) { + public Map> devListMap(List dev, DictDataEnum dataRule, String desc) { Map> map = new HashMap<>(3); - List sqlDataDTOS = dev.stream().flatMap(x -> x.getSqlData().stream().filter(j -> code.equals(j.getDesc()))) + List sqlDataDTOS = dev.stream().flatMap(x -> x.getSqlData().stream().filter(j -> desc.equals(j.getDesc()))) .collect(Collectors.toList()); if (CollUtil.isNotEmpty(sqlDataDTOS)) { List list = sqlDataDTOS.stream().map(DevData.SqlDataDTO::getList).collect(Collectors.toList()); @@ -870,22 +876,22 @@ public class DetectionServiceImpl { .collect(Collectors.toList()); switch (dataRule) { case SECTION_VALUE: - a = getDoubles(a); - b = getDoubles(b); - c = getDoubles(c); - t = getDoubles(t); + a = DetectionUtil.getSectionValueDoubles(a); + b = DetectionUtil.getSectionValueDoubles(b); + c = DetectionUtil.getSectionValueDoubles(c); + t = DetectionUtil.getSectionValueDoubles(t); break; case CP95_VALUE: - a = getCP95Doubles(a); - b = getCP95Doubles(b); - c = getCP95Doubles(c); - t = getCP95Doubles(t); + a = DetectionUtil.getCP95Doubles(a); + b = DetectionUtil.getCP95Doubles(b); + c = DetectionUtil.getCP95Doubles(c); + t = DetectionUtil.getCP95Doubles(t); break; case AVG_VALUE: - a = getAvgDoubles(a); - b = getAvgDoubles(b); - c = getAvgDoubles(c); - t = getAvgDoubles(t); + a = DetectionUtil.getAvgDoubles(a); + b = DetectionUtil.getAvgDoubles(b); + c = DetectionUtil.getAvgDoubles(c); + t = DetectionUtil.getAvgDoubles(t); break; } map.put(TYPE_A, a); @@ -898,12 +904,12 @@ public class DetectionServiceImpl { return map; } - private void reflectHarmonic(String phase, List integerBooleanA, AdHarmonicResult harmonicResult, Integer num) { + private void reflectHarmonic(String phase, List integerBooleanA, SimAndDigHarmonicResult harmonicResult, Integer num) { Map dataMap = integerBooleanA.stream().collect(Collectors.toMap(DetectionData::getNum, Function.identity())); dataMap.forEach((key, value) -> { try { // 设置 id 字段; - Field idField = AdHarmonicResult.class.getDeclaredField(phase + "Value" + (num == 1 ? (int) (key + 0.5) : key.intValue())); + Field idField = SimAndDigHarmonicResult.class.getDeclaredField(phase + "Value" + (num == 1 ? (int) (key + 0.5) : key.intValue())); idField.setAccessible(true); if (ObjectUtil.isNull(value.getIsData())) { idField.set(harmonicResult, value.getData()); @@ -927,6 +933,7 @@ public class DetectionServiceImpl { * @param dataRule 数据处理原则 * @param devMap * @param fData 额定值 + * @param harmonicFlag 1:间谐波,2:谐波 * @return */ public List harmRangeComparison(Integer isQualified, @@ -936,7 +943,7 @@ public class DetectionServiceImpl { SourceIssue sourceIssue, DictDataEnum dataRule, Map> devMap, - Double fData, Integer num) { + Double fData, Integer harmonicFlag) { List info = new ArrayList<>(); //根据谐波几次相值/额定值 Map issueHarmMap; @@ -956,7 +963,7 @@ public class DetectionServiceImpl { //电压是百分比算的 percent = 1.0; } - if (1 == num) { + if (1 == harmonicFlag) { issueHarmMap = sourceIssue.getChannelList().stream() .filter(x -> (type + phase.toLowerCase()).equals(x.getChannelType())) .flatMap(x -> x.getInharmList().stream()) @@ -1009,56 +1016,6 @@ public class DetectionServiceImpl { return info; } - /** - * @param dataRule 数据处理原则 - * @param harmDataList 原始数据集合 - * @param errSysDtl 误差体系 - * @param data 初始化原始数据 - * @param channelData 源下发的数据 - * @param ratedValue 额定值 - * @Description: - * @Author: wr - * @Date: 2024/12/29 18:10 - */ - private void setDetection(DictDataEnum dataRule, List harmDataList, PqErrSysDtls errSysDtl, DetectionData data, Double channelData, Double ratedValue) { - if (CollUtil.isNotEmpty(harmDataList)) { - // 存放合格的数据 - SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); - List qualifiedList = harmDataList.stream() - .filter(x -> channelData == 0 ? NumberUtil.isIn(devSubtractChannelData(x, channelData, ratedValue, errSysDtl, oneConfig.getScale()), - BigDecimal.valueOf(-errSysDtl.getMaxErrorValue()), - BigDecimal.valueOf(errSysDtl.getMaxErrorValue())) - : - x != 0 && NumberUtil.isIn(devSubtractChannelData(x, channelData, ratedValue, errSysDtl, oneConfig.getScale()), - BigDecimal.valueOf(-errSysDtl.getMaxErrorValue()), - BigDecimal.valueOf(errSysDtl.getMaxErrorValue()))).collect(Collectors.toList()); - if (CollUtil.isNotEmpty(qualifiedList)) { - switch (dataRule) { - case AT_WILL_VALUE: - case CP95_VALUE: - case AVG_VALUE: - data.setErrorData(devSubtractChannelData(qualifiedList.get(0), channelData, ratedValue, errSysDtl, oneConfig.getScale())); - break; - case SECTION_VALUE: - case Own_value: - if (qualifiedList.size() == harmDataList.size()) { - data.setErrorData(devSubtractChannelData(qualifiedList.get(0), channelData, ratedValue, errSysDtl, oneConfig.getScale())); - } else { - List subtract = CollectionUtils.subtract(harmDataList, qualifiedList).stream().collect(Collectors.toList()); - BigDecimal bd = BigDecimal.valueOf(subtract.get(0)); - bd = bd.setScale(oneConfig.getScale(), RoundingMode.HALF_UP); - data.setData(bd.doubleValue()); - data.setErrorData(devSubtractChannelData(subtract.get(0), channelData, ratedValue, errSysDtl, oneConfig.getScale())); - } - break; - } - } else { - data.setErrorData(devSubtractChannelData(harmDataList.get(0), channelData, ratedValue, errSysDtl, oneConfig.getScale())); - } - isData(dataRule, harmDataList, data, qualifiedList); - } - } - private void isData(DictDataEnum dataRule, List harmDataList, DetectionData data, List qualifiedList) { if (CollUtil.isNotEmpty(qualifiedList)) { SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); @@ -1099,7 +1056,7 @@ public class DetectionServiceImpl { * @param dataRule 数据处理原则 * @param fundCode 装置下发基波code * @param harmCode 装置下发谐波信息 - * @param num 区分谐波还是间谐波1:谐波,2:间谐波 + * @param num 区分谐波还是间谐波 1:间谐波,2:谐波 * @return */ public Map>> devHarmListMap(List dev, @@ -1151,28 +1108,31 @@ public class DetectionServiceImpl { if (CollUtil.isNotEmpty(value)) { switch (dataRule) { case SECTION_VALUE: - if (value.size() > 2) { - Double max = Collections.max(value); - Double min = Collections.min(value); - value.remove(max); - value.remove(min); - } +// if (value.size() > 2) { +// Double max = Collections.max(value); +// Double min = Collections.min(value); +// value.remove(max); +// value.remove(min); +// } + value = DetectionUtil.getSectionValueDoubles(value); break; case CP95_VALUE: - if (value.size() < 21) { - if (value.size() > 1) { - value.subList(1, 2); - } - } else { - int v = (int) (value.size() * 0.5); - value.subList(v, v + 1); - } - value.subList(1, value.size()).clear(); // 保留第一个元素 +// if (value.size() < 21) { +// if (value.size() > 1) { +// value.subList(1, 2); +// } +// } else { +// int v = (int) (value.size() * 0.5); +// value.subList(v, v + 1); +// } +// value.subList(1, value.size()).clear(); // 保留第一个元素 + value = DetectionUtil.getCP95Doubles(value); break; case AVG_VALUE: - double average = value.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); - value.clear(); // 清空列表 - value.add(average); // 添加平均值 +// double average = value.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); +// value.clear(); // 清空列表 +// value.add(average); // 添加平均值 + value = DetectionUtil.getAvgDoubles(value); break; } } @@ -1273,8 +1233,7 @@ public class DetectionServiceImpl { * @param devData 装置上送值 * @return */ - public Boolean rangeComparison(Double startValue, Integer startFlag, Double endValue, Integer endFlag, Double - devData) { + public Boolean rangeComparison(Double startValue, Integer startFlag, Double endValue, Integer endFlag, Double devData) { Boolean minBool = null; Boolean maxBool = null; if (ObjectUtil.isNotNull(startValue)) { @@ -1351,7 +1310,7 @@ public class DetectionServiceImpl { case 0: return BigDecimal.valueOf(value).multiply(BigDecimal.valueOf(ratedData)) .setScale(oneConfig.getScale(), RoundingMode.HALF_UP).doubleValue(); - case 1: + case 1: //无用 return BigDecimal.valueOf(value).multiply(BigDecimal.valueOf(harmData)) .setScale(oneConfig.getScale(), RoundingMode.HALF_UP).doubleValue(); default: @@ -1415,9 +1374,7 @@ public class DetectionServiceImpl { * @param harm 基波信息 * @param fund 2-50次谐波信息 */ - public void harmPut(String - type, Map>> map, List harmNum, DevData.SqlDataHarmDTO - harm, String fund, Integer num) { + public void harmPut(String type, Map>> map, List harmNum, DevData.SqlDataHarmDTO harm, String fund, Integer num) { if (map.containsKey(type)) { Map> integerListMap = map.get(type); for (Double i : harmNum) { @@ -1477,39 +1434,668 @@ public class DetectionServiceImpl { } } - public List getAvgDoubles(List t) { - if (CollUtil.isNotEmpty(t)) { - t = Arrays.asList(t.stream().mapToDouble(Double::doubleValue).average().orElse(0.0)); - } - return t; + + /** + * 比对式正式检测-处理数据 + * + * @param devDataList 被检设备数据 + * @param standardDevDataList 与之对齐的标准设备数据 + * @param pars 配对关系 + * @param devIdMapComm 设备id映射关系 key为被检设备ip,value为被检设备id + * @param monitorMap 监测器映射关系 key为被检设备ip_通道号,value为监测器信息 + * @param dataRule 数据处理原则 + * @param num 第几次检测 + * @param code 结果表code + * @return key为被检设备id、value为是否合格(1合格 2不合格 4无法处理) + */ + public Map processing(List devDataList, List standardDevDataList, Map pars, Map devIdMapComm, Map monitorMap, List testItemCodeList, List dtlsCheckData, String errorSysId, DictDataEnum dataRule, Integer num, String code) { + Map> devDataMap = devDataList.stream().collect(Collectors.groupingBy(DevData::getId)); + Map> standardDevDataMap = standardDevDataList.stream().collect(Collectors.groupingBy(DevData::getId)); + + Map resultMap = new LinkedHashMap<>(); + pars.forEach((standardDevMoniterId, devMoniterId) -> { + resultMap.put(devMoniterId, dataProcessing(devDataMap.get(devMoniterId), standardDevDataMap.get(standardDevMoniterId), devIdMapComm, testItemCodeList, monitorMap.get(devMoniterId), errorSysId, dataRule, num, code)); + }); + + return resultMap; } - public List getDoubles(List t) { - if (CollUtil.isNotEmpty(t)) { - if (t.size() > 2) { - Double max = Collections.max(t); - Double min = Collections.min(t); - t.remove(max); - t.remove(min); + private Integer dataProcessing(List devDataList, List standardDevDataList, Map devIdMapComm, List testItemCodeList, PreDetection.MonitorListDTO monitorDto, String errorSysId, DictDataEnum dataRule, Integer num, String code) { + if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList)) { + for (String testItemCode : testItemCodeList) { + String[] split = testItemCode.split("\\$"); + + List pqErrSysDtls = pqErrSysDtlsService.listPqErrSysDtlsByPqErrSysIdAndScriptType(errorSysId, split[1]); + DetectionCodeEnum anEnum = DetectionCodeEnum.getDetectionCodeByCode(split[1]); + Double fData = null; + switch (anEnum) { + case FREQ: + fData = 50.0; + return isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fData, DetectionCodeEnum.FREQ.getCode(), dataRule, num, code); + case VRMS: + fData = Double.valueOf(monitorDto.getPt().split(":")[1]); + return isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fData, DetectionCodeEnum.VRMS.getCode(), dataRule, num, code); + case IRMS: + break; + case V_UNBAN: + break; + case I_UNBAN: + break; + case U1: + break; + case V2_50: + break; + case I1: + break; + case I2_50: + break; + case MAG: + break; + case DUR: + break; + case UNKNOWN_ERROR: + break; + } + } + return 1; + } else { + return 4; + } + } + + /** + * 处理非谐波数据 + * + * @param devDataList 被检设备数据 + * @param standardDevDataList 与之对齐的标准设备数据 + * @param devIdMapComm 设备id映射表 key为被检设备ip,value为被检设备id + * @param errSysDtls 误差体系 + * @param desc 检测项类型 + * @param dataRule 数据处理原则 + * @param num 第几次检测 + * @param code 结果表code + * @return + */ + private Integer isQualified(List devDataList, + List standardDevDataList, + Map devIdMapComm, + List errSysDtls, + Double fData, + String desc, + DictDataEnum dataRule, + Integer num, + String code) { + List info = new ArrayList<>(); + if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList) && CollUtil.isNotEmpty(errSysDtls)) { + + Map>> map = devListMap(devDataList, standardDevDataList, desc, dataRule); + + ContrastNonHarmonicResult result = new ContrastNonHarmonicResult(); + String[] split1 = devDataList.get(0).getId().split("_"); + result.setMonitorId(devIdMapComm.get(split1[0]) + "_" + split1[1]); + result.setErrorId(errSysDtls.get(0).getErrorSysId()); + result.setAdType(errSysDtls.get(0).getScriptType()); + result.setNum(num); + result.setDataType(DataSourceEnum.REAL_DATA.getValue()); + + Integer isQualified = 4; + if (map.containsKey(TYPE_T)) { + DetectionData t = rangeComparisonList(map.get(TYPE_T).get(0), isQualified, errSysDtls, fData, map.get(TYPE_T).get(1).get(0), dataRule); + result.setTValue(JSON.toJSONString(t)); + result.setResultFlag(t.getIsData()); + } else { + List resultFlag = new ArrayList<>(); + Map> setters = new HashMap<>(); + setters.put(TYPE_A, (r, d) -> r.setAValue(JSON.toJSONString(d))); + setters.put(TYPE_B, (r, d) -> r.setBValue(JSON.toJSONString(d))); + setters.put(TYPE_C, (r, d) -> r.setCValue(JSON.toJSONString(d))); + + List phases = Arrays.asList(TYPE_A, TYPE_B, TYPE_C); + for (String phase : phases) { + List phaseValue = map.get(phase).get(0); + DetectionData detectionData = rangeComparisonList(phaseValue, isQualified, errSysDtls, fData, map.get(phase).get(1).get(0), dataRule); + resultFlag.add(detectionData); + BiConsumer setter = setters.get(phase); + setter.accept(result, detectionData); + } + result.setResultFlag(setResultFlag(resultFlag)); + } + info.add(result); + } + + if (CollUtil.isNotEmpty(info)) { + detectionDataDealService.acceptNonHarmonicResult(info, code); + List resultFlag = info.stream().map(ContrastNonHarmonicResult::getResultFlag).distinct().collect(Collectors.toList()); + return getInteger(resultFlag); + } else { + return 4; + } + } + + /** + * 处理谐波数据 + * + * @param devDataList 被检设备数据 + * @param standardDevDataList 与之对齐的标准设备数据 + * @param devIdMapComm 设备id映射表 key为被检设备ip,value为被检设备id + * @param devDataList 被检设备数据 + * @param standardDevDataList 与之对齐的标准设备数据 + * @param devIdMapComm 设备id映射表 key为被检设备ip,value为被检设备id + * @param errSysDtls 误差体系 + * @param type U或I、用来区分电压或电流 + * @param dataRule 数据处理原则 + * @param num 第几次检测 + * @param harmonicFlag 1:间谐波,2:谐波 + * @return + */ + public ContrastHarmonicResult isHarmQualified(List devDataList, + List standardDevDataList, + Map devIdMapComm, + List errSysDtls, + Double fUn, + Double fIn, + String type, + DictDataEnum dataRule, + Integer num, + Integer harmonicFlag) { + Double fData = 1.0; + String fundCode = ""; + String harmCode = ""; + if (U.equals(type)) { + fData = fUn; + fundCode = DetectionCodeEnum.U1.getCode(); + if (harmonicFlag == 1) { + harmCode = DetectionCodeEnum.SV_1_49.getCode(); + } else { + harmCode = DetectionCodeEnum.V2_50.getCode(); } } - return t; + if (I.equals(type)) { + fData = fIn; + fundCode = DetectionCodeEnum.I1.getCode(); + if (harmonicFlag == 1) { + harmCode = DetectionCodeEnum.SI_1_49.getCode(); + } else { + harmCode = DetectionCodeEnum.I2_50.getCode(); + } + } + if (HP.equals(type)) { + fData = (fIn * fUn) * 0.01; + harmCode = DetectionCodeEnum.P2_50.getCode(); + } + + Map>>> devMap = devHarmListMap(devDataList, standardDevDataList, fundCode, harmCode, harmonicFlag, dataRule); + if (CollUtil.isNotEmpty(devMap)) { + ContrastHarmonicResult harmonicResult = new ContrastHarmonicResult(); + String[] split = devDataList.get(0).getId().split("_"); + String devID = devIdMapComm.get(split[0]); + harmonicResult.setMonitorId(devID + "_" + split[1]); + harmonicResult.setErrorId(errSysDtls.get(0).getErrorSysId()); + harmonicResult.setAdType(errSysDtls.get(0).getScriptType()); + harmonicResult.setNum(num); + harmonicResult.setDataType(DataSourceEnum.REAL_DATA.getValue()); + List pqErrSysDtls = new ArrayList<>(); + Integer isQualified = 4; +// if (CollUtil.isNotEmpty(errDtlsCheckData)) { +// String finalHarmCode = harmCode; +// List adDtlsCheckData = errDtlsCheckData.stream().filter(x -> finalHarmCode.equals(x.getValueTypeCode())).collect(Collectors.toList()); +// harmonicResult.setAdType(adDtlsCheckData.get(0).getValueType()); +// isQualified = adDtlsCheckData.get(0).getIsQualified(); +// if (CollUtil.isNotEmpty(adDtlsCheckData.get(0).getErrSysDtls())) { +// pqErrSysDtls = adDtlsCheckData.get(0).getErrSysDtls(); +// } +// } + List integerBooleanA = harmRangeComparison(isQualified, pqErrSysDtls, dataRule, devMap.get(TYPE_A).get(0), fData, harmonicFlag); + List integerBooleanB = harmRangeComparison(isQualified, pqErrSysDtls, dataRule, devMap.get(TYPE_B).get(0), fData, harmonicFlag); + List integerBooleanC = harmRangeComparison(isQualified, pqErrSysDtls, dataRule, devMap.get(TYPE_C).get(0), fData, harmonicFlag); + harmonicResult.setDataType(DataSourceEnum.REAL_DATA.getValue()); +// reflectHarmonic("a", integerBooleanA, harmonicResult, humonicFlag); +// reflectHarmonic("b", integerBooleanB, harmonicResult, humonicFlag); +// reflectHarmonic("c", integerBooleanC, harmonicResult, humonicFlag); + List list = new ArrayList<>(); + list.addAll(integerBooleanA.stream().filter(x -> 1 != x.getNum()).distinct().collect(Collectors.toList())); + list.addAll(integerBooleanB.stream().filter(x -> 1 != x.getNum()).distinct().collect(Collectors.toList())); + list.addAll(integerBooleanC.stream().filter(x -> 1 != x.getNum()).distinct().collect(Collectors.toList())); + harmonicResult.setResultFlag(setResultFlag(list)); + return harmonicResult; + } + return null; } - public List getCP95Doubles(List t) { - if (CollUtil.isNotEmpty(t)) { - if (t.size() < 21) { - if (t.size() == 1) { - return t; + + /** + * 处理非谐波类取值 + * + * @param dev 被检设备原始数据 + * @param standardDev 与之对齐的标准设备原始数据 + * @param desc 检测项 + * @param dataRule 数据处理原则 + */ + public Map>> devListMap(List dev, List standardDev, String desc, DictDataEnum dataRule) { + Map>> resultMap = new HashMap<>(3); + + for (int i = 0; i < dev.size(); i++) { + List devSqlData = dev.get(i).getSqlData(); + List standardDevSqlData = standardDev.get(i).getSqlData(); + + List devList = devSqlData.stream().filter(j -> desc.equals(j.getDesc())) + .map(DevData.SqlDataDTO::getList).collect(Collectors.toList()); + List standardDevList = standardDevSqlData.stream().filter(j -> desc.equals(j.getDesc())) + .map(DevData.SqlDataDTO::getList).collect(Collectors.toList()); + + List aDev = devList.stream().filter(x -> ObjectUtil.isNotNull(x.getA())) + .map(x -> x.getA().doubleValue()) + .collect(Collectors.toList()); + List aIdxs = DetectionUtil.sort(aDev); + List aStandardDev = standardDevList.stream().filter(x -> ObjectUtil.isNotNull(x.getA())) + .map(x -> x.getA().doubleValue()) + .collect(Collectors.toList()); + + List bDev = devList.stream().filter(x -> ObjectUtil.isNotNull(x.getB())) + .map(x -> x.getB().doubleValue()) + .collect(Collectors.toList()); + List bIdxs = DetectionUtil.sort(bDev); + List bStandardDev = standardDevList.stream().filter(x -> ObjectUtil.isNotNull(x.getB())) + .map(x -> x.getB().doubleValue()) + .collect(Collectors.toList()); + + List cDev = devList.stream().filter(x -> ObjectUtil.isNotNull(x.getC())) + .map(x -> x.getC().doubleValue()) + .collect(Collectors.toList()); + List cIdxs = DetectionUtil.sort(cDev); + List cStandardDev = standardDevList.stream().filter(x -> ObjectUtil.isNotNull(x.getC())) + .map(x -> x.getC().doubleValue()) + .collect(Collectors.toList()); + + List tDev = devList.stream().filter(x -> ObjectUtil.isNotNull(x.getT())) + .map(x -> x.getT().doubleValue()) + .collect(Collectors.toList()); + List tIdxs = DetectionUtil.sort(tDev); + List tStandardDev = standardDevList.stream().filter(x -> ObjectUtil.isNotNull(x.getT())) + .map(x -> x.getT().doubleValue()) + .collect(Collectors.toList()); + + switch (dataRule) { + case SECTION_VALUE: + if (aDev.size() > 2) { + aDev.remove(aIdxs.get(0)); + aDev.remove(aIdxs.get(aIdxs.size() - 1)); + aStandardDev.remove(aIdxs.get(0)); + aStandardDev.remove(aIdxs.get(aIdxs.size() - 1)); + } + + if (bDev.size() > 2) { + bDev.remove(bIdxs.get(0)); + bDev.remove(bIdxs.get(bIdxs.size() - 1)); + bStandardDev.remove(bIdxs.get(0)); + bStandardDev.remove(bIdxs.get(bIdxs.size() - 1)); + } + + if (cDev.size() > 2) { + cDev.remove(cIdxs.get(0)); + cDev.remove(cIdxs.get(cIdxs.size() - 1)); + cStandardDev.remove(cIdxs.get(0)); + cStandardDev.remove(cIdxs.get(cIdxs.size() - 1)); + } + + if (tDev.size() > 2) { + tDev.remove(tIdxs.get(0)); + tDev.remove(tIdxs.get(tIdxs.size() - 1)); + tStandardDev.remove(tIdxs.get(0)); + tStandardDev.remove(tIdxs.get(tIdxs.size() - 1)); + } + break; + case CP95_VALUE: + int cp95Idx = DetectionUtil.getCP95Idx(aDev); + aDev = Collections.singletonList(aDev.get(cp95Idx)); + aStandardDev = Collections.singletonList(aStandardDev.get(cp95Idx)); + + cp95Idx = DetectionUtil.getCP95Idx(bDev); + bDev = Collections.singletonList(bDev.get(cp95Idx)); + bStandardDev = Collections.singletonList(bStandardDev.get(cp95Idx)); + + cp95Idx = DetectionUtil.getCP95Idx(cDev); + cDev = Collections.singletonList(cDev.get(cp95Idx)); + cStandardDev = Collections.singletonList(cStandardDev.get(cp95Idx)); + + cp95Idx = DetectionUtil.getCP95Idx(tDev); + tDev = Collections.singletonList(tDev.get(cp95Idx)); + tStandardDev = Collections.singletonList(tStandardDev.get(cp95Idx)); + break; + case AVG_VALUE: + aDev = DetectionUtil.getAvgDoubles(aDev); + bDev = DetectionUtil.getAvgDoubles(bDev); + cDev = DetectionUtil.getAvgDoubles(cDev); + tDev = DetectionUtil.getAvgDoubles(tDev); + + aStandardDev = DetectionUtil.getAvgDoubles(aStandardDev); + bStandardDev = DetectionUtil.getAvgDoubles(bStandardDev); + cStandardDev = DetectionUtil.getAvgDoubles(cStandardDev); + tStandardDev = DetectionUtil.getAvgDoubles(tStandardDev); + break; + } + resultMap.put(TYPE_A, Arrays.asList(aDev, aStandardDev)); + resultMap.put(TYPE_B, Arrays.asList(bDev, bStandardDev)); + resultMap.put(TYPE_C, Arrays.asList(cDev, cStandardDev)); + if (CollUtil.isNotEmpty(tDev)) { + resultMap.put(TYPE_T, Arrays.asList(tDev, tStandardDev)); + } + + } + return resultMap; + } + + /** + * 处理谐波类取值 + * + * @param dev 被检设备原始数据 + * @param standardDev 与之对齐的标准设备原始数据 + * @param fundCode 装置下发基波code + * @param harmCode 装置下发谐波信息 + * @param harmonicFlag 1:间谐波,2:谐波 + * @param dataRule 数据处理原则 + * @return + */ + public Map>>> devHarmListMap(List dev, + List standardDev, + String fundCode, + String harmCode, + Integer harmonicFlag, + DictDataEnum dataRule) { + Map>>> resultMap = new HashMap<>(3); + + Map>> devMap = new HashMap<>(3); + Map>> standardDevMap = new HashMap<>(3); + + List harmNum = new ArrayList<>(); + if (1 == harmonicFlag) { + harmNum.addAll(Stream.iterate(0.5, x -> x + 1.0).limit(50).collect(Collectors.toList())); + } else { + harmNum.addAll(Stream.iterate(1.0, x -> x + 1.0).limit(50).collect(Collectors.toList())); + } + + for (int i = 0; i < dev.size(); i++) { + List devSqlData = dev.get(i).getSqlData(); + List standardDevSqlData = standardDev.get(i).getSqlData(); + + Optional first1 = Optional.empty(); + Optional first2 = Optional.empty(); + if (CollUtil.isNotEmpty(devSqlData) && CollUtil.isNotEmpty(standardDevSqlData)) { + first1 = devSqlData.stream().filter(j -> j.getDesc().equals(fundCode)).collect(Collectors.toList()).stream().findFirst(); + first2 = standardDevSqlData.stream().filter(j -> j.getDesc().equals(fundCode)).collect(Collectors.toList()).stream().findFirst(); + } + DevData.SqlDataDTO fund1 = null; + DevData.SqlDataDTO fund2 = null; + if (first1.isPresent()) { + fund1 = first1.get(); + } + if (first2.isPresent()) { + fund2 = first2.get(); + } + List harmList = dev.get(i).getSqlDataHarm().stream().filter(x -> x.getDesc().equals(harmCode)).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(harmList)) { + DevData.SqlDataHarmDTO harm = harmList.get(0); + if (ObjectUtil.isNotNull(fund1)) { + harmPut(TYPE_A, devMap, harmNum, harm, String.valueOf(fund1.getList().getA()), harmonicFlag); + harmPut(TYPE_A, standardDevMap, harmNum, harm, String.valueOf(fund2.getList().getB()), harmonicFlag); + harmPut(TYPE_B, devMap, harmNum, harm, String.valueOf(fund1.getList().getB()), harmonicFlag); + harmPut(TYPE_B, standardDevMap, harmNum, harm, String.valueOf(fund2.getList().getC()), harmonicFlag); + harmPut(TYPE_C, devMap, harmNum, harm, String.valueOf(fund1.getList().getC()), harmonicFlag); + harmPut(TYPE_C, standardDevMap, harmNum, harm, String.valueOf(fund2.getList().getT()), harmonicFlag); + } else { + harmPut(TYPE_A, devMap, harmNum, harm, "1.0", harmonicFlag); + harmPut(TYPE_A, standardDevMap, harmNum, harm, "1.0", harmonicFlag); + harmPut(TYPE_B, devMap, harmNum, harm, "1.0", harmonicFlag); + harmPut(TYPE_B, standardDevMap, harmNum, harm, "1.0", harmonicFlag); + harmPut(TYPE_C, devMap, harmNum, harm, "1.0", harmonicFlag); + harmPut(TYPE_C, standardDevMap, harmNum, harm, "1.0", harmonicFlag); } - if (t.size() > 1) { - return t.subList(1, 2); + } + } + devMap.forEach((typeKey, typeValue) -> { + typeValue.forEach((key, value) -> { + value.sort(Comparator.comparing(Double::doubleValue).reversed()); + if (CollUtil.isNotEmpty(value)) { + List idx = DetectionUtil.sort(value); + switch (dataRule) { + case SECTION_VALUE: + if (value.size() > 2) { + value.remove(idx.get(0)); + value.remove(idx.get(idx.size() - 1)); + standardDevMap.get(typeKey).get(key).remove(idx.get(0)); + standardDevMap.get(typeKey).get(key).remove(idx.get(idx.size() - 1)); + } + break; + case CP95_VALUE: + int cp95Idx = DetectionUtil.getCP95Idx(value); + value = Collections.singletonList(value.get(cp95Idx)); + Double standardCP95Data = standardDevMap.get(typeKey).get(key).get(cp95Idx); + standardDevMap.get(typeKey).get(key).clear(); + standardDevMap.get(typeKey).get(key).add(standardCP95Data); + break; + case AVG_VALUE: +// double average = value.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); +// value.clear(); // 清空列表 +// value.add(average); // 添加平均值 + value = DetectionUtil.getAvgDoubles(value); + List standardAvgData = DetectionUtil.getAvgDoubles(standardDevMap.get(typeKey).get(key)); + standardDevMap.get(typeKey).get(key).clear(); + standardDevMap.get(typeKey).get(key).addAll(standardAvgData); + break; + } + } + }); + }); + + resultMap.put(TYPE_A, Arrays.asList(devMap.get(TYPE_A), standardDevMap.get(TYPE_A))); + resultMap.put(TYPE_B, Arrays.asList(devMap.get(TYPE_B), standardDevMap.get(TYPE_B))); + resultMap.put(TYPE_C, Arrays.asList(devMap.get(TYPE_C), standardDevMap.get(TYPE_C))); + return resultMap; + } + + /** + * @param pqErrSysDtls 误差体系 + * @param dataRule 数据处理原则 + * @param devMap + * @param fData 额定值 + * @param harmonicFlag 1:间谐波,2:谐波 + * @return + */ + public List harmRangeComparison(Integer isQualified, + List pqErrSysDtls, + DictDataEnum dataRule, + Map> devMap, + Double fData, + Integer harmonicFlag) { + List info = new ArrayList<>(); + //根据谐波几次相值/额定值 + Map issueHarmMap=devMap.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, x -> x.getValue().get(0))); + + +// if (HP.equals(type)) { +// List checkData = pqScriptCheckDataService.list(new MPJLambdaWrapper() +// .eq(PqScriptCheckData::getScriptIndex, sourceIssue.getIndex()) +// .eq(PqScriptCheckData::getPhase, phase) +// .eq(PqScriptCheckData::getScriptId, sourceIssue.getScriptId()) +// ); +// issueHarmMap = checkData.stream().collect(Collectors.toMap(PqScriptCheckData::getHarmNum, x -> x.getValue() * fData)); +// } else { +// Double percent; +// if (I.equals(type)) { +// //电流是百分比转换成赋值算的 +// percent = fData * 0.01; +// } else { +// //电压是百分比算的 +// percent = 1.0; +// } +// if (1 == harmonicFlag) { +// issueHarmMap = sourceIssue.getChannelList().stream() +// .filter(x -> (type + phase.toLowerCase()).equals(x.getChannelType())) +// .flatMap(x -> x.getInharmList().stream()) +// .collect(Collectors.toMap(SourceIssue.ChannelListDTO.InharmModel::getInharm, x -> BigDecimal.valueOf(x.getFAmp()).multiply(BigDecimal.valueOf(percent)).doubleValue())); +// } else { +// issueHarmMap = sourceIssue.getChannelList().stream() +// .filter(x -> (type + phase.toLowerCase()).equals(x.getChannelType())) +// .flatMap(x -> x.getHarmList().stream()) +// .collect(Collectors.toMap(SourceIssue.ChannelListDTO.HarmModel::getHarm, x -> BigDecimal.valueOf(x.getFAmp()).multiply(BigDecimal.valueOf(percent)).doubleValue())); +// } +// } + Map errSysDtlMap = new LinkedHashMap<>(); + issueHarmMap.forEach((key, value) -> { + //获得误差体系 + List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), fData, value, x.getConditionType()), + x.getStartFlag(), + startRadiusEnd(x.getEndValue(), fData, value, x.getConditionType()), + x.getEndFlag(), + value)).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(errSysDtls)) { + errSysDtlMap.put(key, errSysDtls.get(0)); + } else { + errSysDtlMap.put(key, null); + } + }); + if (CollUtil.isNotEmpty(devMap)) { + devMap.forEach((harm, harmDataList) -> { + PqErrSysDtls errSysDtl = errSysDtlMap.get(harm); + DetectionData data = new DetectionData(); + data.setIsData(isQualified); + data.setNum(harm); + if (CollUtil.isNotEmpty(harmDataList)) { + SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); + BigDecimal bd = BigDecimal.valueOf(harmDataList.get(0)); + bd = bd.setScale(oneConfig.getScale(), RoundingMode.HALF_UP); + data.setData(bd.doubleValue()); + } + Double channelData = issueHarmMap.get(harm); + data.setResultData(channelData); + if (ObjectUtil.isNotNull(errSysDtl)) { + PqErrSysDtls errSys = BeanUtil.copyProperties(errSysDtl, PqErrSysDtls.class); + errSys.setMaxErrorValue(maxErrorMultiply(errSys, fData, issueHarmMap.get(harm))); + data.setUnit(errSysDtl.getErrorUnit()); + data.setRadius(-errSys.getMaxErrorValue() + "~" + errSys.getMaxErrorValue()); + setDetection(dataRule, harmDataList, errSys, data, channelData, fData); + } + info.add(data); + }); + } + return info; + } + + + /** + * 处理数据是否合格 + * + * @param devData + * @param standardDevData + * @param isQualified + * @param pqErrSysDtls + * @param fData + * @param dataRule + * @return + */ + public DetectionData rangeComparisonList(List devData, List standardDevData, Integer isQualified, List pqErrSysDtls, Double fData, DictDataEnum dataRule) { + DetectionData detectionData = new DetectionData(); + detectionData.setIsData(isQualified); + + if (CollUtil.isNotEmpty(devData)) { + SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); + BigDecimal bd = BigDecimal.valueOf(devData.get(0)); + bd = bd.setScale(oneConfig.getScale(), RoundingMode.HALF_UP); + detectionData.setData(bd.doubleValue()); + detectionData.setResultData(standardDevData.get(0)); + + //先根据源所下发的数据,是否在误差体系范围内在则可以进行误差体系判断 +// //获得误差体系 + + for (int i = 0; i < devData.size(); i++) { + int finalI = i; + List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), fData, standardDevData.get(finalI), x.getConditionType()), + x.getStartFlag(), + startRadiusEnd(x.getEndValue(), fData, standardDevData.get(finalI), x.getConditionType()), + x.getEndFlag(), + devData.get(finalI))).collect(Collectors.toList()); + + if (CollUtil.isNotEmpty(errSysDtls)) { + PqErrSysDtls errSysDtl = BeanUtil.copyProperties(errSysDtls.get(0), PqErrSysDtls.class); + detectionData.setUnit(errSysDtl.getErrorUnit()); +// errSysDtl.setMaxErrorValue(maxErrorMultiply(errSysDtl, fData, channelData)); +// detectionData.setRadius(-errSysDtl.getMaxErrorValue() + "~" + errSysDtl.getMaxErrorValue()); +// setDetection(dataRule, list, errSysDtl, detectionData, channelData, data); + } + } + } +// if (CollUtil.isNotEmpty(list)) { +// SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); +// BigDecimal bd = BigDecimal.valueOf(list.get(0)); +// bd = bd.setScale(oneConfig.getScale(), RoundingMode.HALF_UP); +// detectionData.setData(bd.doubleValue()); +// detectionData.setResultData(channelData); +// //先根据源所下发的数据,是否在误差体系范围内在则可以进行误差体系判断 +// //获得误差体系 +// List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), data, channelData, x.getConditionType()), +// x.getStartFlag(), +// startRadiusEnd(x.getEndValue(), data, channelData, x.getConditionType()), +// x.getEndFlag(), +// channelData)).collect(Collectors.toList()); +// if (CollUtil.isNotEmpty(errSysDtls)) { +// PqErrSysDtls errSysDtl = BeanUtil.copyProperties(errSysDtls.get(0), PqErrSysDtls.class); +// detectionData.setUnit(errSysDtl.getErrorUnit()); +// errSysDtl.setMaxErrorValue(maxErrorMultiply(errSysDtl, data, channelData)); +// detectionData.setRadius(-errSysDtl.getMaxErrorValue() + "~" + errSysDtl.getMaxErrorValue()); +// setDetection(dataRule, list, errSysDtl, detectionData, channelData, data); +// } +// } + + return detectionData; + } + + /** + * @param dataRule 数据处理原则 + * @param harmDataList 原始数据集合 + * @param errSysDtl 误差体系 + * @param data 初始化原始数据 + * @param channelData 源下发的数据 + * @param ratedValue 额定值 + * @Description: + * @Author: wr + * @Date: 2024/12/29 18:10 + */ + private void setDetection(DictDataEnum dataRule, List harmDataList, PqErrSysDtls errSysDtl, DetectionData data, Double channelData, Double ratedValue) { + if (CollUtil.isNotEmpty(harmDataList)) { + // 存放合格的数据 + SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); + List qualifiedList = harmDataList.stream() + .filter(x -> channelData == 0 ? NumberUtil.isIn(devSubtractChannelData(x, channelData, ratedValue, errSysDtl, oneConfig.getScale()), + BigDecimal.valueOf(-errSysDtl.getMaxErrorValue()), + BigDecimal.valueOf(errSysDtl.getMaxErrorValue())) + : + x != 0 && NumberUtil.isIn(devSubtractChannelData(x, channelData, ratedValue, errSysDtl, oneConfig.getScale()), + BigDecimal.valueOf(-errSysDtl.getMaxErrorValue()), + BigDecimal.valueOf(errSysDtl.getMaxErrorValue()))).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(qualifiedList)) { + switch (dataRule) { + case AT_WILL_VALUE: + case CP95_VALUE: + case AVG_VALUE: + data.setErrorData(devSubtractChannelData(qualifiedList.get(0), channelData, ratedValue, errSysDtl, oneConfig.getScale())); + break; + case SECTION_VALUE: + case Own_value: + if (qualifiedList.size() == harmDataList.size()) { + data.setErrorData(devSubtractChannelData(qualifiedList.get(0), channelData, ratedValue, errSysDtl, oneConfig.getScale())); + } else { + List subtract = CollectionUtils.subtract(harmDataList, qualifiedList).stream().collect(Collectors.toList()); + BigDecimal bd = BigDecimal.valueOf(subtract.get(0)); + bd = bd.setScale(oneConfig.getScale(), RoundingMode.HALF_UP); + data.setData(bd.doubleValue()); + data.setErrorData(devSubtractChannelData(subtract.get(0), channelData, ratedValue, errSysDtl, oneConfig.getScale())); + } + break; } } else { - int v = (int) (t.size() * 0.5); - return t.subList(v, v + 1); + data.setErrorData(devSubtractChannelData(harmDataList.get(0), channelData, ratedValue, errSysDtl, oneConfig.getScale())); } + isData(dataRule, harmDataList, data, qualifiedList); } - return t; } } 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 7dd192d5..b7601ec2 100644 --- a/detection/src/main/java/com/njcn/gather/detection/service/impl/PreDetectionServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/detection/service/impl/PreDetectionServiceImpl.java @@ -1,6 +1,7 @@ package com.njcn.gather.detection.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; @@ -23,8 +24,10 @@ import com.njcn.gather.detection.util.socket.FormalTestManager; import com.njcn.gather.detection.util.socket.SocketManager; import com.njcn.gather.detection.util.socket.WebServiceManager; import com.njcn.gather.detection.util.socket.cilent.NettyClient; +import com.njcn.gather.detection.util.socket.cilent.NettyContrastClientHandler; import com.njcn.gather.detection.util.socket.cilent.NettySourceClientHandler; import com.njcn.gather.device.pojo.po.PqDev; +import com.njcn.gather.device.pojo.vo.PreDetection; import com.njcn.gather.device.service.IPqDevService; import com.njcn.gather.plan.pojo.po.AdPlan; import com.njcn.gather.plan.pojo.po.AdPlanSource; @@ -45,7 +48,10 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.math.BigDecimal; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; @@ -292,19 +298,35 @@ public class PreDetectionServiceImpl implements PreDetectionService { private void sendContrastSocket(ContrastDetectionParam param) { String s = param.getUserId() + CnSocketUtil.DEV_TAG; -// Map> map = new HashMap<>(1); -// List preDetections = BeanUtil.copyToList(FormalTestManager.devList, PreDetection.class); -// preDetections.forEach(x -> { -// x.setDevType(x.getIcdType()); -// }); -// map.put("deviceList", preDetections); -// String jsonString = JSON.toJSONString(map); -// socketMsg.setRequestId(SourceOperateCodeEnum.YJC_SBTXJY.getValue()); -// socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_01.getValue()); -// socketMsg.setData(jsonString); -// String json = JSON.toJSONString(socketMsg); - // SocketManager.sendMsg(s,json); -// NettyClient.socketClient(ip, port, param, json, new NettyDevClientHandler(param, socketDevResponseService)); + Map> map = new HashMap<>(1); + List preDetections = BeanUtil.copyToList(FormalTestManager.devList, PreDetection.class); + preDetections.addAll(BeanUtil.copyToList(FormalTestManager.standardDevList, PreDetection.class)); + preDetections.forEach(x -> { + x.setDevType(x.getIcdType()); + x.getMonitorList().forEach(y -> { + + String pt = y.getPt(); + int i = pt.indexOf(":"); + y.setPt(BigDecimal.valueOf(Double.parseDouble(pt.substring(0, i))).divide(BigDecimal.valueOf(Double.parseDouble(pt.substring(i + 1))), 5, BigDecimal.ROUND_HALF_UP) + ""); + + String ct = y.getCt(); + i = ct.indexOf(":"); + y.setCt(BigDecimal.valueOf(Double.parseDouble(ct.substring(0, i))).divide(BigDecimal.valueOf(Double.parseDouble(ct.substring(i + 1))), 5, BigDecimal.ROUND_HALF_UP) + ""); + }); + }); + map.put("deviceList", preDetections); + String jsonString = JSON.toJSONString(map); + + SocketMsg socketMsg = new SocketMsg<>(); + socketMsg.setRequestId(SourceOperateCodeEnum.YJC_SBTXJY.getValue()); + socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_01.getValue()); + socketMsg.setData(jsonString); + String json = JSON.toJSONString(socketMsg); + SocketManager.sendMsg(s, json); + + PreDetectionParam preDetectionParam = new PreDetectionParam(); + preDetectionParam.setUserPageId(param.getUserId()); + NettyClient.socketClient(ip, port, preDetectionParam, json, new NettyContrastClientHandler(preDetectionParam, socketContrastResponseService)); } /** diff --git a/detection/src/main/java/com/njcn/gather/detection/util/DetectionUtil.java b/detection/src/main/java/com/njcn/gather/detection/util/DetectionUtil.java new file mode 100644 index 00000000..88110135 --- /dev/null +++ b/detection/src/main/java/com/njcn/gather/detection/util/DetectionUtil.java @@ -0,0 +1,219 @@ +package com.njcn.gather.detection.util; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; +import com.njcn.gather.detection.pojo.po.DevData; +import com.njcn.gather.detection.service.impl.DetectionServiceImpl; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.format.DateTimeFormatter; +import java.time.format.DateTimeParseException; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @author caozehui + * @data 2025-07-28 + */ +public class DetectionUtil { + /** + * 相角矫正到统一个区间 + * + * @param phase + * @return + */ + public static Double adjustPhase(Double phase) { + if (phase < -180) { + return phase + 360; + } + if (phase > 180) { + return phase - 360; + } + return phase; + } + + /** + * 判断数据是否对齐 + * + * @param devData 被检设备数据 + * @param standardDevData 标准设备数据 + * @return + */ + public static boolean isAlignData(DevData devData, DevData standardDevData) { + if (ObjectUtil.isNotNull(devData) && ObjectUtil.isNotNull(standardDevData)) { + + long devMillis = getMillis(devData.getTime()); + long standardMillis = getMillis(standardDevData.getTime()); + if (BigDecimal.valueOf(devMillis).divide(BigDecimal.valueOf(10), 0, BigDecimal.ROUND_HALF_UP).compareTo(BigDecimal.valueOf(standardMillis).divide(BigDecimal.valueOf(10), 0, BigDecimal.ROUND_HALF_UP)) == 0) { + return true; + } else if (Math.abs(devMillis - standardMillis) < 100) { + return true; + } + } + return false; + } + + /** + * 将字符串日期时间转换为指定格式的LocalDateTime + * + * @param dateTimeStr + * @param formatter + * @return + */ + public static LocalDateTime timeFormat(String dateTimeStr, DateTimeFormatter formatter) { + try { + ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateTimeStr, formatter.withZone(ZoneId.of("UTC"))); + LocalDateTime localDateTime = zonedDateTime.toLocalDateTime(); + return localDateTime; + } catch (DateTimeParseException e) { + System.err.println("日期时间字符串格式错误: " + e.getMessage()); + return null; + } + } + + /** + * 获取字符串日期时间对应的毫秒数 + * + * @param dateTimeStr + * @return + */ + public static long getMillis(String dateTimeStr) { + LocalDateTime localDateTime = timeFormat(dateTimeStr, DateTimeFormatter.ISO_DATE_TIME); + return getMillis(localDateTime); + } + + /** + * 获取LocalDateTime的所对应的毫秒数 + * + * @param localDateTime + * @return + */ + public static long getMillis(LocalDateTime localDateTime) { + return localDateTime.atZone(ZoneId.of("UTC")).toInstant().toEpochMilli(); + } + + /** + * 判断value是否为0 + * @param value + * @return + */ + public static boolean isZero(Double value) { + BigDecimal bd = BigDecimal.valueOf(value); + if(bd.subtract(BigDecimal.ZERO).abs().compareTo(BigDecimal.valueOf(0.001)) < 0){ + return true; + } + return false; + } + + /** + * 获取CP95值 + * + * @param t + * @return + */ + public static List getCP95Doubles(List t) { + if (CollUtil.isNotEmpty(t)) { + if (t.size() < 21) { + if (t.size() == 1) { + return t; + } + if (t.size() > 1) { + return t.subList(1, 2); + } + } else { + int v = (int) (t.size() * 0.5); + return t.subList(v, v + 1); + } + } + return t; + } + + /** + * 获取CP95值所在索引 + * + * @param t + * @return + */ + public static int getCP95Idx(List t) { + if (CollUtil.isNotEmpty(t)) { + if (t.size() < 21) { + if (t.size() == 1) { + return 0; + } + if (t.size() > 1) { + return 1; + } + } else { + int v = (int) (t.size() * 0.5); + return v; + } + } + return -1; + } + + /** + * 获取部分值 + * + * @param t + * @return + */ + public static List getSectionValueDoubles(List t) { + if (CollUtil.isNotEmpty(t)) { + if (t.size() > 2) { + Double max = Collections.max(t); + Double min = Collections.min(t); + t.remove(max); + t.remove(min); + } + } + return t; + } + + /** + * 获取平均值 + * + * @param t + * @return + */ + public static List getAvgDoubles(List t) { + if (CollUtil.isNotEmpty(t)) { + t = Arrays.asList(t.stream().mapToDouble(Double::doubleValue).average().orElse(0.0)); + } + return t; + } + + /** + * 对list进行从大到小排序,并返回排序后的索引序列 + * + * @param list + * @return + */ + public static List sort(List list) { + List indexList = Stream.iterate(0, i -> i + 1).limit(list.size()).collect(Collectors.toList()); + for (int i = 0; i < list.size(); i++) { + int maxIdx = i; + for (int j = i + 1; j < list.size(); j++) { + if (list.get(j) > list.get(maxIdx)) { + maxIdx = j; + } + } + if (maxIdx != i) { + double temp = list.get(i); + list.set(i, list.get(maxIdx)); + list.set(maxIdx, temp); + + int tempIdx = indexList.get(i); + indexList.set(i, indexList.get(maxIdx)); + indexList.set(maxIdx, tempIdx); + } + } + return indexList; + } + +} 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 749e46bb..04dac9fe 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 @@ -1,8 +1,11 @@ package com.njcn.gather.detection.util.socket; +import com.google.common.collect.HashBiMap; import com.njcn.gather.detection.pojo.po.DevData; +import com.njcn.gather.device.pojo.po.PqStandardDev; import com.njcn.gather.device.pojo.vo.PreDetection; import com.njcn.gather.plan.pojo.po.AdPlan; +import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum; import java.util.ArrayList; import java.util.HashMap; @@ -13,68 +16,98 @@ import java.util.concurrent.ConcurrentHashMap; /** * @Author: cdf * @CreateTime: 2025-01-08 - * @Description: 正式检测对象管理 + * @Description: 正式(预)检测对象管理 */ public class FormalTestManager { /** - * key:设备ip,value:当前设备下面的通道序号 + * key:设备ip,value:当前设备下面的通道号 */ - public static Map> devMapMonitorNum = new ConcurrentHashMap<>(); + public static Map> devMapMonitorNum = new ConcurrentHashMap<>(); /** - * 所有参与检测的装置 + * 所有参与检测的被检设备 */ public static List devList = new ArrayList<>(); + /** + * 所有参与检测的标准设备 + */ + public static List standardDevList = new ArrayList<>(); + /** * 所有参与检测的监测点 */ public static List monitorIdListComm = new ArrayList<>(); + /** + * 所有参与检测的监测点。key:监测点id(ip_通道号),value:检测点实体 + */ + public static Map monitorMap = new HashMap<>(); - - //用于存储所有测点的实时数据 + /** + * 用于存储所有测点的实时数据 + */ public static List realDataXiList = new ArrayList<>(); - /** * key:设备ip,value:装置名称 */ public static Map devNameMapComm = new HashMap<>(); + /** * key:设备ip,value:装置id */ public static Map devIdMapComm = new HashMap<>(); - /** * 停止触发标识 */ public static Boolean stopFlag = false; - /** * 已经暂停后的标识 */ public static Boolean hasStopFlag = false; - /** * 暂停后的超时计时时间 */ public static Integer stopTime = 0; - /** * 强行赋值关系 */ - public static Map harmonicRelationMap = new HashMap<>(); - + public static Map harmonicRelationMap = new HashMap<>(); /** * 当前正在检测的计划 */ public static AdPlan currentTestPlan; + + /** + * 比对式检测-检测项。 + */ + public static List testItemCodeList = new ArrayList<>(); + + /** + * 数据处理原则 + */ + public static DictDataEnum dataRule; + + /** + * 所有参与比对式检测的被检设备、标准设备配对关系。key:标准设备id_通道号,value:被检设备id_通道号 + */ + public static Map pairsMap = HashBiMap.create(); + + /** + * 被检设备的数据。key:设备ip_通道号,value:DevData数据集合 + */ + public static Map> devDataMap = new HashMap<>(); + + /** + * 标准设备的数据。key:设备ip_通道号,value:DevData数据集合 + */ + public static Map> standardDevDataMap = new HashMap<>(); } 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 d3421a28..a233f68c 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,6 +1,7 @@ package com.njcn.gather.detection.util.socket; import cn.hutool.core.util.ObjectUtil; +import com.njcn.gather.plan.pojo.enums.DataSourceEnum; import com.njcn.gather.script.pojo.po.SourceIssue; import io.netty.channel.Channel; import io.netty.channel.nio.NioEventLoopGroup; @@ -94,6 +95,10 @@ public class SocketManager { */ public static volatile Map clockMap = new ConcurrentHashMap<>(); + /** + * 用于存储比对式测试时间。 + */ + public static volatile Map contrastClockMap = new ConcurrentHashMap<>(); diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyClient.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyClient.java index 9218b9ee..cde4878a 100644 --- a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyClient.java +++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyClient.java @@ -106,9 +106,12 @@ public class NettyClient { socketDataMsg.setRequestId("connect"); if (handler instanceof NettySourceClientHandler) { socketDataMsg.setOperateCode("Source"); - } else { + } else if (handler instanceof NettyDevClientHandler) { CnSocketUtil.quitSendSource(param); socketDataMsg.setOperateCode("Dev"); + } else { + socketDataMsg.setOperateCode("Dev"); + CnSocketUtil.quitSend(param); } WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); } finally { diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyContrastClientHandler.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyContrastClientHandler.java index 82615cd6..fca4fae9 100644 --- a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyContrastClientHandler.java +++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyContrastClientHandler.java @@ -1,23 +1,181 @@ package com.njcn.gather.detection.util.socket.cilent; import com.njcn.gather.detection.handler.SocketContrastResponseService; +import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum; +import com.njcn.gather.detection.pojo.param.PreDetectionParam; +import com.njcn.gather.detection.util.socket.CnSocketUtil; +import com.njcn.gather.detection.util.socket.SocketManager; +import com.njcn.gather.plan.pojo.enums.DataSourceEnum; +import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; +import io.netty.handler.timeout.IdleState; +import io.netty.handler.timeout.IdleStateEvent; +import io.netty.handler.timeout.TimeoutException; import lombok.RequiredArgsConstructor; +import java.io.IOException; +import java.net.ConnectException; +import java.net.ProtocolException; +import java.time.LocalDateTime; +import java.util.Objects; + /** * @author caozehui - * @data 2025-07-18 + * @data 2025-07-25 */ @RequiredArgsConstructor public class NettyContrastClientHandler extends SimpleChannelInboundHandler { - + private final PreDetectionParam param; private final SocketContrastResponseService socketContrastResponseService; @Override - protected void channelRead0(ChannelHandlerContext channelHandlerContext, String s) throws Exception { + public void channelActive(ChannelHandlerContext ctx) throws Exception { + System.out.println("客户端通道已建立" + ctx.channel().id()); + Channel channel = SocketManager.getChannelByUserId(param.getUserPageId() + CnSocketUtil.DEV_TAG); + if (Objects.nonNull(channel)) { + try { + channel.close().sync(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + SocketManager.addUser(param.getUserPageId() + CnSocketUtil.DEV_TAG, ctx.channel()); + } + + @Override + protected void channelRead0(ChannelHandlerContext ctx, String msg) throws InterruptedException { + System.out.println("contrastClientHandler接收server端数据>>>>>>" + msg); + try { + socketContrastResponseService.deal(param, msg); + } catch (Exception e) { + e.printStackTrace(); + CnSocketUtil.quitSend(param); + } + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + System.out.println("与通信模块端断线"); + ctx.close(); + SocketManager.removeUser(param.getUserPageId() + CnSocketUtil.DEV_TAG); + } + + /** + * 用户事件的回调方法(自定义事件用于心跳机制) + * + * @param ctx + * @param evt + */ + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) { + if (evt instanceof IdleStateEvent) { //IdleState.在一段时间内没有收到任何消息时,会触发该事件 + if (((IdleStateEvent) evt).state() == IdleState.READER_IDLE) { + System.out.println(LocalDateTime.now() + "contrastClientHandler触发读超时函数**************************************"); + SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, SocketManager.contrastClockMap.get(DataSourceEnum.REAL_DATA) + 60L); + + //实时数据 + if (SocketManager.contrastClockMap.get(DataSourceEnum.REAL_DATA) >= 60) { + CnSocketUtil.quitSend(param); + System.out.println("超时处理-----》" + "实时数据已超时----------------关闭"); + timeoutSend(); + } +// if (!FormalTestManager.hasStopFlag) { +// if (CollUtil.isNotEmpty(SocketManager.getSourceList())) { +// SourceIssue sourceIssue = SocketManager.getSourceList().get(0); +// if (SocketManager.clockMap.containsKey(sourceIssue.getIndex())) { +// SocketManager.clockMap.put(sourceIssue.getIndex(), SocketManager.clockMap.get(sourceIssue.getIndex()) + 60L); +// } else { +// SocketManager.clockMap.put(sourceIssue.getIndex(), 60L); +// } +// +// if (sourceIssue.getType().equals(DicDataEnum.F.getCode())) { +// //闪变,正常抛一轮最大等待20分钟超时 +// if (SocketManager.clockMap.get(sourceIssue.getIndex()) > 1300) { +// fly = true; +// System.out.println("超时处理-----》" + sourceIssue.getType() + "已超时----------------关闭"); +// CnSocketUtil.quitSend(param); +// timeoutSend(sourceIssue); +// } +// } else if (sourceIssue.getType().equals(DicDataEnum.VOLTAGE.getCode()) || sourceIssue.getType().equals(DicDataEnum.HP.getCode())) { +// //统计数据项,正常抛一轮数据,超时 +// if (SocketManager.clockMap.get(sourceIssue.getIndex()) > 180) { +// fly = true; +// CnSocketUtil.quitSend(param); +// System.out.println("超时处理-----》" + sourceIssue.getType() + "已超时----------------关闭"); +// timeoutSend(sourceIssue); +// } +// } else { +// //实时数据 +// if (SocketManager.clockMap.get(sourceIssue.getIndex()) > 60) { +// fly = true; +// CnSocketUtil.quitSend(param); +// System.out.println("超时处理-----》" + sourceIssue.getType() + "已超时----------------关闭"); +// timeoutSend(sourceIssue); +// } +// } +// } else { +// fly = true; +// //为空则认为是常规步骤,设定一分钟超时 +// CnSocketUtil.quitSend(param); +// CnSocketUtil.sendToWebSocket(param.getUserPageId(), SourceOperateCodeEnum.SOCKET_TIMEOUT.getValue(), SourceOperateCodeEnum.SOCKET_TIMEOUT.getValue(), SourceOperateCodeEnum.SOCKET_TIMEOUT.getMsg(), null); +// } +// if (fly) { +// socketContrastResponseService.backCheckState(param); +// } +// } else { +// //如果是暂停操作后 +// FormalTestManager.stopTime += 60; +// System.out.println("当前进入暂停操作超时函数-----------------" + FormalTestManager.stopTime); +// if (FormalTestManager.stopTime > 600) { +// CnSocketUtil.quitSend(param); +// CnSocketUtil.sendToWebSocket(param.getUserPageId(), SourceOperateCodeEnum.FORMAL_REAL.getValue(), SourceOperateCodeEnum.STOP_TIMEOUT.getValue(), SourceOperateCodeEnum.STOP_TIMEOUT.getMsg(), null); +// } +// } + } + } + } + + @Override + public void handlerAdded(ChannelHandlerContext ctx) { + System.out.println("有通道准备接入" + ctx.channel()); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { + System.out.println("捕获到通信模块服务异常。。。。。。。"); + // 处理异常,例如记录日志、关闭连接等 + cause.printStackTrace(); + // 根据异常类型进行不同的处理 + if (cause instanceof ConnectException) { + System.out.println("连接socket服务端异常"); + } else if (cause instanceof IOException) { + System.out.println("IOException caught: There was an I/O error."); + CnSocketUtil.sendToWebSocket(param.getUserPageId(), SourceOperateCodeEnum.DEVICE_ERROR.getValue(), SourceOperateCodeEnum.DEVICE_ERROR.getValue(), SourceOperateCodeEnum.DEVICE_ERROR.getMsg(), null); + } else if (cause instanceof TimeoutException) { + System.out.println("TimeoutException caught: Operation timed out."); + } else if (cause instanceof ProtocolException) { + System.out.println("ProtocolException caught: Invalid protocol message."); + } else { + // 处理其他类型的异常 + System.out.println("Unknown exception caught: " + cause.getMessage()); + CnSocketUtil.sendToWebSocket(param.getUserPageId(), SourceOperateCodeEnum.DEVICE_ERROR.getValue(), SourceOperateCodeEnum.DEVICE_ERROR.getValue(), SourceOperateCodeEnum.DEVICE_ERROR.getMsg(), null); + } + CnSocketUtil.quitSend(param); +// socketContrastResponseService.backCheckState(param); + ctx.close(); + } + + + /** + * 接收数据超时处理 + */ + private void timeoutSend() { + + } + } diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyDevClientHandler.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyDevClientHandler.java index eb2537b6..32ebcd83 100644 --- a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyDevClientHandler.java +++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyDevClientHandler.java @@ -6,10 +6,11 @@ import com.njcn.gather.detection.handler.SocketDevResponseService; import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum; import com.njcn.gather.detection.pojo.param.PreDetectionParam; import com.njcn.gather.detection.pojo.vo.DevLineTestResult; -import com.njcn.gather.detection.pojo.vo.SocketDataMsg; -import com.njcn.gather.detection.pojo.vo.SocketMsg; import com.njcn.gather.detection.pojo.vo.WebSocketVO; -import com.njcn.gather.detection.util.socket.*; +import com.njcn.gather.detection.util.socket.CnSocketUtil; +import com.njcn.gather.detection.util.socket.FormalTestManager; +import com.njcn.gather.detection.util.socket.SocketManager; +import com.njcn.gather.detection.util.socket.WebServiceManager; import com.njcn.gather.device.pojo.vo.PreDetection; import com.njcn.gather.script.pojo.po.SourceIssue; import com.njcn.gather.system.pojo.enums.DicDataEnum; @@ -25,11 +26,9 @@ import java.io.IOException; import java.net.ConnectException; import java.net.ProtocolException; import java.time.LocalDateTime; -import java.util.*; -import java.util.concurrent.ScheduledExecutorService; -import java.util.concurrent.ScheduledFuture; -import java.util.concurrent.ScheduledThreadPoolExecutor; -import java.util.concurrent.TimeUnit; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; /** @@ -41,8 +40,6 @@ import java.util.concurrent.TimeUnit; @RequiredArgsConstructor public class NettyDevClientHandler extends SimpleChannelInboundHandler { - private final String dev = "_Dev"; - private final PreDetectionParam param; private final SocketDevResponseService socketResponseService; @@ -56,7 +53,7 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler { @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { System.out.println("客户端通道已建立" + ctx.channel().id()); - Channel channel = SocketManager.getChannelByUserId(param.getUserPageId() + dev); + Channel channel = SocketManager.getChannelByUserId(param.getUserPageId() + CnSocketUtil.DEV_TAG); if (Objects.nonNull(channel)) { try { channel.close().sync(); @@ -64,7 +61,7 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler { e.printStackTrace(); } } - SocketManager.addUser(param.getUserPageId() + dev, ctx.channel()); + SocketManager.addUser(param.getUserPageId() + CnSocketUtil.DEV_TAG, ctx.channel()); } /** @@ -79,8 +76,6 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler { e.printStackTrace(); CnSocketUtil.quitSend(param); } - - } /** @@ -92,7 +87,7 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler { public void channelInactive(ChannelHandlerContext ctx) throws Exception { System.out.println("设备通讯客户端断线"); ctx.close(); - SocketManager.removeUser(param.getUserPageId() + dev); + SocketManager.removeUser(param.getUserPageId() + CnSocketUtil.DEV_TAG); CnSocketUtil.quitSendSource(param); } @@ -243,7 +238,7 @@ public class NettyDevClientHandler extends SimpleChannelInboundHandler { devListRes.add(devLineTestResult); }); WebSocketVO> socketVO = new WebSocketVO<>(); - socketVO.setRequestId(sourceIssue.getType() + "_End"); + socketVO.setRequestId(sourceIssue.getType() + CnSocketUtil.END_TAG); socketVO.setOperateCode(sourceIssue.getType()); socketVO.setData(devListRes); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketVO)); diff --git a/detection/src/main/java/com/njcn/gather/device/controller/PqStandardDevController.java b/detection/src/main/java/com/njcn/gather/device/controller/PqStandardDevController.java index 5778f2c1..3f9689e1 100644 --- a/detection/src/main/java/com/njcn/gather/device/controller/PqStandardDevController.java +++ b/detection/src/main/java/com/njcn/gather/device/controller/PqStandardDevController.java @@ -28,7 +28,6 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.util.List; - /** * @author caozehui * @date 2025-07-02 diff --git a/detection/src/main/java/com/njcn/gather/device/mapper/PqStandardDevMapper.java b/detection/src/main/java/com/njcn/gather/device/mapper/PqStandardDevMapper.java index 9b2cea45..05a8ed6e 100644 --- a/detection/src/main/java/com/njcn/gather/device/mapper/PqStandardDevMapper.java +++ b/detection/src/main/java/com/njcn/gather/device/mapper/PqStandardDevMapper.java @@ -2,6 +2,10 @@ package com.njcn.gather.device.mapper; import com.github.yulichang.base.MPJBaseMapper; import com.njcn.gather.device.pojo.po.PqStandardDev; +import com.njcn.gather.device.pojo.vo.PreDetection; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * @author makejava @@ -9,5 +13,6 @@ import com.njcn.gather.device.pojo.po.PqStandardDev; */ public interface PqStandardDevMapper extends MPJBaseMapper { + List listStandardDevPreDetection(@Param("devIds") List ids); } diff --git a/detection/src/main/java/com/njcn/gather/device/mapper/mapping/PqStandardDevMapper.xml b/detection/src/main/java/com/njcn/gather/device/mapper/mapping/PqStandardDevMapper.xml index ccf7e331..e3ac6ef9 100644 --- a/detection/src/main/java/com/njcn/gather/device/mapper/mapping/PqStandardDevMapper.xml +++ b/detection/src/main/java/com/njcn/gather/device/mapper/mapping/PqStandardDevMapper.xml @@ -2,6 +2,47 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/detection/src/main/java/com/njcn/gather/device/pojo/param/PqDevParam.java b/detection/src/main/java/com/njcn/gather/device/pojo/param/PqDevParam.java index 21f79dfc..8c526b7f 100644 --- a/detection/src/main/java/com/njcn/gather/device/pojo/param/PqDevParam.java +++ b/detection/src/main/java/com/njcn/gather/device/pojo/param/PqDevParam.java @@ -125,7 +125,7 @@ public class PqDevParam { private String delegate; @ApiModelProperty("被检通道") - private List inspectChannel; + private String inspectChannel; @ApiModelProperty("投运日期") @DateTimeStrValid(message = DetectionValidMessage.OPERATION_DATE_FORMAT_ERROR) diff --git a/detection/src/main/java/com/njcn/gather/device/pojo/vo/ContrastDevExcel.java b/detection/src/main/java/com/njcn/gather/device/pojo/vo/ContrastDevExcel.java index 4c4bd0ca..9d05b1aa 100644 --- a/detection/src/main/java/com/njcn/gather/device/pojo/vo/ContrastDevExcel.java +++ b/detection/src/main/java/com/njcn/gather/device/pojo/vo/ContrastDevExcel.java @@ -50,51 +50,51 @@ public class ContrastDevExcel implements Serializable { @NotBlank(message = DetectionValidMessage.MANUFACTURER_NOT_BLANK) private String manufacturer; - @Excel(name = "被检通道", width = 20, needMerge = true, orderNum = "8") - private String inspectChannel; +// @Excel(name = "被检通道", width = 20, needMerge = true, orderNum = "8") +// private String inspectChannel; - @Excel(name = "固件版本", width = 15, needMerge = true, orderNum = "9") + @Excel(name = "固件版本", width = 15, needMerge = true, orderNum = "8") private String hardwareVersion; - @Excel(name = "软件版本", width = 15, needMerge = true, orderNum = "10") + @Excel(name = "软件版本", width = 15, needMerge = true, orderNum = "9") private String softwareVersion; - @Excel(name = "通讯协议*", width = 15, needMerge = true, orderNum = "11") + @Excel(name = "通讯协议*", width = 15, needMerge = true, orderNum = "10") @NotBlank(message = DetectionValidMessage.PROTOCOL_NOT_BLANK) private String protocol; - @Excel(name = "是否加密*", width = 20, needMerge = true, replace = {"否_0", "是_1"}, orderNum = "12") + @Excel(name = "是否加密*", width = 20, needMerge = true, replace = {"否_0", "是_1"}, orderNum = "11") @NotNull(message = DetectionValidMessage.ENCRYPTION_NOT_NULL) private Integer encryptionFlag; - @Excel(name = "识别码(当加密时必填)", width = 30, needMerge = true, orderNum = "13") + @Excel(name = "识别码(当加密时必填)", width = 30, needMerge = true, orderNum = "12") private String series; - @Excel(name = "秘钥(当加密时必填)", width = 30, needMerge = true, orderNum = "14") + @Excel(name = "秘钥(当加密时必填)", width = 30, needMerge = true, orderNum = "13") private String devKey; - @Excel(name = "IP地址*", width = 20, needMerge = true, orderNum = "15") + @Excel(name = "IP地址*", width = 20, needMerge = true, orderNum = "14") @NotBlank(message = DetectionValidMessage.IP_NOT_BLANK) @Pattern(regexp = PatternRegex.IP_REGEX, message = DetectionValidMessage.IP_FORMAT_ERROR) private String ip; - @Excel(name = "端口号*", width = 15, needMerge = true, orderNum = "16") + @Excel(name = "端口号*", width = 15, needMerge = true, orderNum = "15") @NotNull(message = DetectionValidMessage.PORT_NOT_NULL) @Range(min = 1, max = 65535, message = DetectionValidMessage.PORT_RANGE_ERROR) private Integer port; - @Excel(name = "投运日期(yyyy-MM-dd)*", width = 30, needMerge = true, orderNum = "17", format = "yyyy-MM-dd") + @Excel(name = "投运日期(yyyy-MM-dd)*", width = 30, needMerge = true, orderNum = "16", format = "yyyy-MM-dd") @NotNull(message = DetectionValidMessage.CREATE_DATE_NOT_NULL) private LocalDate createDate; - @Excel(name = "定检日期(yyyy-MM-dd)*", width = 30, needMerge = true, orderNum = "18", format = "yyyy-MM-dd") + @Excel(name = "定检日期(yyyy-MM-dd)*", width = 30, needMerge = true, orderNum = "17", format = "yyyy-MM-dd") @NotNull(message = DetectionValidMessage.INSPECT_DATE_NOT_NULL) private LocalDate inspectDate; - @Excel(name = "谐波系统设备id*", width = 30, needMerge = true, orderNum = "19") + @Excel(name = "谐波系统设备id*", width = 30, needMerge = true, orderNum = "18") @NotBlank(message = DetectionValidMessage.HARM_SYS_ID_NOT_BLANK) private String harmSysId; - @ExcelCollection(name = "监测点信息", orderNum = "22") + @ExcelCollection(name = "监测点信息", orderNum = "19") private List pqMonitorExcelList; } diff --git a/detection/src/main/java/com/njcn/gather/device/pojo/vo/PreDetection.java b/detection/src/main/java/com/njcn/gather/device/pojo/vo/PreDetection.java index f457acd5..4850475b 100644 --- a/detection/src/main/java/com/njcn/gather/device/pojo/vo/PreDetection.java +++ b/detection/src/main/java/com/njcn/gather/device/pojo/vo/PreDetection.java @@ -18,7 +18,7 @@ import java.util.List; public class PreDetection { /** - * 装置ip + * 装置id */ @JSONField(serialize = false) private String devId; @@ -95,16 +95,28 @@ public class PreDetection { private Integer line; /** - * 监测点线路号 + * pt */ @JSONField(name = "pt") - private Integer pt; + private String pt; /** - * 监测点线路号 + * ct */ @JSONField(name = "ct") //todo 是否改为ct - private Integer ct; + private String ct; + + /** + * 统计间隔 + */ + @JSONField(name = "statInterval") + private Integer statInterval; + + /** + * 接线方式 + */ + @JSONField(name = "connection") + private String connection; } public String getDevKey() { diff --git a/detection/src/main/java/com/njcn/gather/device/service/IPqStandardDevService.java b/detection/src/main/java/com/njcn/gather/device/service/IPqStandardDevService.java index 771ca9e4..73b1a29d 100644 --- a/detection/src/main/java/com/njcn/gather/device/service/IPqStandardDevService.java +++ b/detection/src/main/java/com/njcn/gather/device/service/IPqStandardDevService.java @@ -2,12 +2,11 @@ package com.njcn.gather.device.service; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; -import com.njcn.gather.device.pojo.param.PqDevParam; import com.njcn.gather.device.pojo.param.PqStandardDevParam; import com.njcn.gather.device.pojo.po.PqStandardDev; +import com.njcn.gather.device.pojo.vo.PreDetection; import org.springframework.web.multipart.MultipartFile; -import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.List; @@ -84,4 +83,12 @@ public interface IPqStandardDevService extends IService { * @return */ List listByPlanId(String planId); + + /** + * 查询出标准设备所需的检测信息 + * + * @param ids + * @return + */ + List listStandardDevPreDetection(List ids); } diff --git a/detection/src/main/java/com/njcn/gather/device/service/impl/PqDevServiceImpl.java b/detection/src/main/java/com/njcn/gather/device/service/impl/PqDevServiceImpl.java index fba1e972..3279b503 100644 --- a/detection/src/main/java/com/njcn/gather/device/service/impl/PqDevServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/device/service/impl/PqDevServiceImpl.java @@ -57,6 +57,7 @@ import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.*; import java.util.regex.Pattern; @@ -144,7 +145,6 @@ public class PqDevServiceImpl extends ServiceImpl implements if (ObjectUtil.isNotEmpty(pqDevParam.getMonitorList())) { pqMonitorService.addPqMonitorByDevId(id, pqDevParam.getMonitorList()); } - pqDev.setInspectChannel(String.join(StrUtil.COMMA, pqDevParam.getInspectChannel())); } pqDev.setImportFlag(0); pqDev.setState(DataStateEnum.ENABLE.getCode()); @@ -201,7 +201,6 @@ public class PqDevServiceImpl extends ServiceImpl implements // 比对式设备修改监测点 if (PatternEnum.CONTRAST.getValue().equals(dictDataService.getDictDataById(updateParam.getPattern()).getCode())) { pqMonitorService.updatePqMonitorByDevId(updateParam.getId(), updateParam.getMonitorList()); - pqDev.setInspectChannel(String.join(StrUtil.COMMA, updateParam.getInspectChannel())); } return this.updateById(pqDev); } @@ -419,8 +418,8 @@ public class PqDevServiceImpl extends ServiceImpl implements monitorListDTO = new PreDetection.MonitorListDTO(); monitorListDTO.setLineId(preDetection.getDevIP() + "_" + i); monitorListDTO.setLine(i); - monitorListDTO.setPt(1); - monitorListDTO.setCt(1); + monitorListDTO.setPt("1"); + monitorListDTO.setCt("1"); monitorList.add(monitorListDTO); } preDetection.setMonitorList(monitorList); @@ -1290,8 +1289,8 @@ public class PqDevServiceImpl extends ServiceImpl implements dictDataList = dictDataService.getDictDataByTypeId(dictType.getId()); pullDown = new PullDown(); - pullDown.setFirstCol(startCol + 10); - pullDown.setLastCol(startCol + 10); + pullDown.setFirstCol(startCol + 9); + pullDown.setLastCol(startCol + 9); pullDown.setStrings(dictDataList.stream().map(DictData::getName).collect(Collectors.toList())); pullDowns.add(pullDown); @@ -1299,20 +1298,19 @@ public class PqDevServiceImpl extends ServiceImpl implements // 是否加密 pullDown = new PullDown(); - pullDown.setFirstCol(startCol + 11); - pullDown.setLastCol(startCol + 11); + pullDown.setFirstCol(startCol + 10); + pullDown.setLastCol(startCol + 10); pullDown.setStrings(Arrays.asList("是", "否")); pullDowns.add(pullDown); // 接线方式 - dictType = dictTypeService.getByCode("Dev_Connect"); if (ObjectUtil.isNotNull(dictType)) { dictDataList = dictDataService.getDictDataByTypeId(dictType.getId()); pullDown = new PullDown(); - pullDown.setFirstCol(startCol + 25); - pullDown.setLastCol(startCol + 25); + pullDown.setFirstCol(startCol + 24); + pullDown.setLastCol(startCol + 24); pullDown.setStrings(dictDataList.stream().map(DictData::getName).collect(Collectors.toList())); pullDowns.add(pullDown); diff --git a/detection/src/main/java/com/njcn/gather/device/service/impl/PqStandardDevServiceImpl.java b/detection/src/main/java/com/njcn/gather/device/service/impl/PqStandardDevServiceImpl.java index b212a99e..845a3004 100644 --- a/detection/src/main/java/com/njcn/gather/device/service/impl/PqStandardDevServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/device/service/impl/PqStandardDevServiceImpl.java @@ -20,6 +20,7 @@ import com.njcn.gather.device.mapper.PqStandardDevMapper; import com.njcn.gather.device.pojo.param.PqStandardDevParam; import com.njcn.gather.device.pojo.po.PqStandardDev; import com.njcn.gather.device.pojo.vo.PqStandardDevExcel; +import com.njcn.gather.device.pojo.vo.PreDetection; import com.njcn.gather.device.service.IPqStandardDevService; import com.njcn.gather.plan.mapper.AdPlanStandardDevMapper; import com.njcn.gather.pojo.enums.DetectionResponseEnum; @@ -155,6 +156,14 @@ public class PqStandardDevServiceImpl extends ServiceImpl listStandardDevPreDetection(List ids) { + if (CollectionUtil.isNotEmpty(ids)) { + return this.baseMapper.listStandardDevPreDetection(ids); + } + return Collections.emptyList(); + } + /** * 导入数据 * diff --git a/detection/src/main/java/com/njcn/gather/err/service/IPqErrSysDtlsService.java b/detection/src/main/java/com/njcn/gather/err/service/IPqErrSysDtlsService.java index d805f8bb..72e5d749 100644 --- a/detection/src/main/java/com/njcn/gather/err/service/IPqErrSysDtlsService.java +++ b/detection/src/main/java/com/njcn/gather/err/service/IPqErrSysDtlsService.java @@ -57,4 +57,10 @@ public interface IPqErrSysDtlsService extends IService { * @return */ List listByPqErrSysIdAndTypes(PqErrSysParam.DetectionParam param); + + /** + * 根据误差体系id和脚本类型查询脚本类型 + * @return + */ + List listPqErrSysDtlsByPqErrSysIdAndScriptType(String errSysId, String scriptType); } diff --git a/detection/src/main/java/com/njcn/gather/err/service/impl/PqErrSysDtlsServiceImpl.java b/detection/src/main/java/com/njcn/gather/err/service/impl/PqErrSysDtlsServiceImpl.java index 2a773393..b8cf7867 100644 --- a/detection/src/main/java/com/njcn/gather/err/service/impl/PqErrSysDtlsServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/err/service/impl/PqErrSysDtlsServiceImpl.java @@ -155,4 +155,14 @@ public class PqErrSysDtlsServiceImpl extends ServiceImpl listPqErrSysDtlsByPqErrSysIdAndScriptType(String errSysId, String scriptType) { + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + wrapper.selectAll(PqErrSysDtls.class) + .leftJoin(DictTree.class, DictTree::getId, PqErrSysDtls::getScriptType) + .eq(PqErrSysDtls::getErrorSysId, errSysId) + .eq(DictTree::getId, scriptType); + return this.list(wrapper); + } } diff --git a/detection/src/main/java/com/njcn/gather/monitor/mapper/mapping/PqMonitorMapper.xml b/detection/src/main/java/com/njcn/gather/monitor/mapper/mapping/PqMonitorMapper.xml index c7b2f766..775d0959 100644 --- a/detection/src/main/java/com/njcn/gather/monitor/mapper/mapping/PqMonitorMapper.xml +++ b/detection/src/main/java/com/njcn/gather/monitor/mapper/mapping/PqMonitorMapper.xml @@ -4,15 +4,16 @@ diff --git a/detection/src/main/java/com/njcn/gather/monitor/pojo/vo/PqMonitorExcel.java b/detection/src/main/java/com/njcn/gather/monitor/pojo/vo/PqMonitorExcel.java index 014d5d65..f42a9127 100644 --- a/detection/src/main/java/com/njcn/gather/monitor/pojo/vo/PqMonitorExcel.java +++ b/detection/src/main/java/com/njcn/gather/monitor/pojo/vo/PqMonitorExcel.java @@ -30,11 +30,11 @@ public class PqMonitorExcel { @NotNull(message = DetectionValidMessage.MONITOR_NUM_NOT_NULL) private Integer num; - @Excel(name = "PT变比*", width = 20, orderNum = "5") + @Excel(name = "PT变比(pt1:pt2)*", width = 20, orderNum = "5") @NotBlank(message = DetectionValidMessage.PT_NOT_BLANK) private String pt; - @Excel(name = "CT变比*", width = 20, orderNum = "6") + @Excel(name = "CT变比(ct1:ct2)*", width = 20, orderNum = "6") @NotBlank(message = DetectionValidMessage.CT_NOT_BLANK) private String ct; diff --git a/detection/src/main/java/com/njcn/gather/plan/pojo/enums/DataSourceEnum.java b/detection/src/main/java/com/njcn/gather/plan/pojo/enums/DataSourceEnum.java index 7e9a0462..fc1130b2 100644 --- a/detection/src/main/java/com/njcn/gather/plan/pojo/enums/DataSourceEnum.java +++ b/detection/src/main/java/com/njcn/gather/plan/pojo/enums/DataSourceEnum.java @@ -8,7 +8,7 @@ import lombok.Getter; */ @Getter public enum DataSourceEnum { - THREE_SENSE_ACTUAL_TIME_DATA("real", "3s实时数据"), + REAL_DATA("real", "3s实时数据"), MINUTE_STATISTICS_MAX("max", "分钟统计数据-最大"), MINUTE_STATISTICS_MIN("min", "分钟统计数据-最小"), diff --git a/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanServiceImpl.java b/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanServiceImpl.java index 9d6bc72b..6944b66e 100644 --- a/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/plan/service/impl/AdPlanServiceImpl.java @@ -53,7 +53,7 @@ import com.njcn.gather.script.service.IPqScriptService; import com.njcn.gather.source.pojo.po.PqSource; import com.njcn.gather.source.service.IPqSourceService; import com.njcn.gather.storage.pojo.param.StorageParam; -import com.njcn.gather.storage.service.AdHarmonicService; +import com.njcn.gather.storage.service.SimAndDigHarmonicService; import com.njcn.gather.storage.service.TableGenService; import com.njcn.gather.system.cfg.pojo.enums.SceneEnum; import com.njcn.gather.system.cfg.pojo.po.SysTestConfig; @@ -110,7 +110,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme private final ISysTestConfigService sysTestConfigService; private final IDevTypeService devTypeService; private final IDictTypeService dictTypeService; - private final AdHarmonicService adHarmonicService; + private final SimAndDigHarmonicService adHarmonicService; private final PqDevMapper pqDevMapper; private final IPqDevSubService pqDevSubService; private final IAdPlanStandardDevService adPlanStandardDevService; @@ -192,7 +192,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme } Map standardDevIds = adPlanVO.getStandardDevMap(); standardDevIds.putAll(pqStandardDevs.stream().collect(Collectors.toMap(PqStandardDev::getId, obj -> 1))); - adPlanVO.setStandardDevNameStr(adPlanVO.getStandardDevNameStr() + pqStandardDevs.stream().map(PqStandardDev::getName).reduce((a, b) -> a + "," + b).orElse("")); +// adPlanVO.setStandardDevNameStr(adPlanVO.getStandardDevNameStr() + pqStandardDevs.stream().map(PqStandardDev::getName).reduce((a, b) -> a + "," + b).orElse("")); } } @@ -260,9 +260,9 @@ public class AdPlanServiceImpl extends ServiceImpl impleme } else { // 关联检测源 adPlanSourceService.addAdPlanSource(planId, param.getSourceIds()); - tableGenService.deleteTable(Arrays.asList(adPlan.getCode().toString())); - tableGenService.genAdNonHarmonicTable(adPlan.getCode().toString()); } + tableGenService.deleteTable(Arrays.asList(adPlan.getCode().toString())); + tableGenService.genTable(adPlan.getCode().toString(), PatternEnum.CONTRAST.getValue().equals(dictData.getCode())); return true; } @@ -332,11 +332,11 @@ public class AdPlanServiceImpl extends ServiceImpl impleme List devIds = pqDevVOList.stream().map(PqDevVO::getId).collect(Collectors.toList()); param.getDevIds().removeAll(devIds); - plan2.setTestState(pqDevService.bind(param.getId(), param.getDevIds())); } else { // 修改检测计划、检测源关联 adPlanSourceService.updateAdPlanSource(param.getId(), param.getSourceIds()); } + plan2.setTestState(pqDevService.bind(param.getId(), param.getDevIds())); // 若修改了名称,则修改相关子计划的来源字段 if (!plan1.getName().equals(param.getName()) && CommonEnum.FATHER_ID.getValue().equals(plan1.getFatherPlanId())) { this.lambdaUpdate().in(AdPlan::getFatherPlanId, plan1.getId()).eq(AdPlan::getState, DataStateEnum.ENABLE.getCode()) @@ -401,6 +401,17 @@ public class AdPlanServiceImpl extends ServiceImpl impleme child.put("pid", adPlan.getFatherPlanId()); child.put("name", adPlan.getName()); child.put("timeCheck", adPlan.getTimeCheck()); + + List pqStandardDevs = adPlanStandardDevMapper.listByPlanId(Collections.singletonList(adPlan.getId())); + List devTypeIdList = pqStandardDevs.stream().map(PqStandardDev::getDevType).collect(Collectors.toList()); + if (devTypeIdList.size() > 0) { + List devTypeList = devTypeService.listByIds(devTypeIdList); + pqStandardDevs.forEach(pqStandardDev -> { + DevType devType1 = devTypeList.stream().filter(devType -> devType.getId().equals(pqStandardDev.getDevType())).findFirst().get(); + pqStandardDev.setDevType(devType1.getName()); + }); + } + child.put("standardDevs", pqStandardDevs); children.add(child); }); } @@ -463,13 +474,13 @@ public class AdPlanServiceImpl extends ServiceImpl impleme // 不合格项复检 if (reCheckType == 0) { -// List allResultList = new ArrayList<>(); +// List allResultList = new ArrayList<>(); // allResultList.addAll(adHarmonicService.get(scriptId, null, devId, "-1", adPlan.getCode())); // allResultList.addAll(adNonHarmonicService.get(scriptId, null, devId, "-1", adPlan.getCode())); // // if (ObjectUtil.isNotEmpty(allResultList)) { -// List passList = allResultList.stream().filter(obj -> obj.getResultFlag() == 1).collect(Collectors.toList()); -// TreeSet sortSet = passList.stream().map(AdBaseResult::getSort).collect(Collectors.toCollection(TreeSet::new)); +// List passList = allResultList.stream().filter(obj -> obj.getResultFlag() == 1).collect(Collectors.toList()); +// TreeSet sortSet = passList.stream().map(SimAndDigBaseResult::getSort).collect(Collectors.toCollection(TreeSet::new)); // // scriptDtlsList = scriptDtlsList.stream().filter(obj -> !sortSet.contains(obj.getScriptIndex())).collect(Collectors.toList()); // } @@ -909,7 +920,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme pqDevService.importCNDev(cnDevExcelList, patternId, planId); tableGenService.deleteTable(Arrays.asList(code.toString())); - tableGenService.genAdNonHarmonicTable(code.toString()); + tableGenService.genTable(code.toString(), PatternEnum.CONTRAST.getValue().equals(patternCode)); } // 逆向可视化 this.reverseVisualize(adPlans); @@ -967,7 +978,7 @@ public class AdPlanServiceImpl extends ServiceImpl impleme adPlans.get(i).setCode(code); tableGenService.deleteTable(Arrays.asList(code.toString())); - tableGenService.genAdNonHarmonicTable(code.toString()); + tableGenService.genTable(code.toString(), PatternEnum.CONTRAST.getValue().equals(patternCode)); String source = planExcel.getSource(); String[] sourceNames = source.split(StrUtil.COMMA); diff --git a/detection/src/main/java/com/njcn/gather/pojo/enums/DetectionResponseEnum.java b/detection/src/main/java/com/njcn/gather/pojo/enums/DetectionResponseEnum.java index 8d956699..c7ffce3d 100644 --- a/detection/src/main/java/com/njcn/gather/pojo/enums/DetectionResponseEnum.java +++ b/detection/src/main/java/com/njcn/gather/pojo/enums/DetectionResponseEnum.java @@ -68,7 +68,7 @@ public enum DetectionResponseEnum { IMPORT_FLAG_NOT_UPDATE("A02091", "从谐波系统导入的设备不支持修改"), CONNECTION_NOT_EXIST("A02092", "该连接不存在,请先在\"接线方式\"字典中添加"), MONITOR_NUM_OUT_OF_RANGE("A02093", "检测点线路号超出范围,请检查线路号"), - MONITOR_NUM_REPEAT("A02094", "改被检设备下存在相同线路号的监测点"), + MONITOR_NUM_REPEAT("A02094", "该被检设备下存在相同线路号的监测点"), PLAN_HAS_CHILDREN("A02095", "该计划下存在子计划,请先删除子计划"), PLAN_REPEATED_IN_SAME_LEVEL("A02096", "该父计划下存在同名的子计划"), PLEASE_UNASSIGN_STANDARD_DEV("A02097","存在已分配给子计划的标准设备,请先解除分配" ), diff --git a/detection/src/main/java/com/njcn/gather/report/service/impl/PqReportServiceImpl.java b/detection/src/main/java/com/njcn/gather/report/service/impl/PqReportServiceImpl.java index f50315d8..32b9df72 100644 --- a/detection/src/main/java/com/njcn/gather/report/service/impl/PqReportServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/report/service/impl/PqReportServiceImpl.java @@ -12,6 +12,7 @@ import cn.hutool.extra.qrcode.QrCodeUtil; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -31,9 +32,11 @@ import com.njcn.gather.detection.util.socket.SocketManager; import com.njcn.gather.detection.util.socket.cilent.NettyClient; import com.njcn.gather.detection.util.socket.cilent.NettyDevClientHandler; import com.njcn.gather.device.mapper.PqDevMapper; +import com.njcn.gather.device.mapper.PqDevSubMapper; import com.njcn.gather.device.pojo.enums.CheckStateEnum; import com.njcn.gather.device.pojo.enums.DevReportStateEnum; import com.njcn.gather.device.pojo.param.PqDevParam; +import com.njcn.gather.device.pojo.po.PqDev; import com.njcn.gather.device.pojo.po.PqDevSub; import com.njcn.gather.device.pojo.vo.PqDevVO; import com.njcn.gather.device.service.IPqDevService; @@ -59,10 +62,10 @@ import com.njcn.gather.result.service.IResultService; import com.njcn.gather.script.pojo.vo.PqScriptDtlDataVO; import com.njcn.gather.script.service.IPqScriptDtlsService; import com.njcn.gather.storage.pojo.param.SingleNonHarmParam; -import com.njcn.gather.storage.pojo.po.AdHarmonicResult; -import com.njcn.gather.storage.pojo.po.AdNonHarmonicResult; -import com.njcn.gather.storage.service.AdHarmonicService; -import com.njcn.gather.storage.service.AdNonHarmonicService; +import com.njcn.gather.storage.pojo.po.SimAndDigHarmonicResult; +import com.njcn.gather.storage.pojo.po.SimAndDigNonHarmonicResult; +import com.njcn.gather.storage.service.SimAndDigHarmonicService; +import com.njcn.gather.storage.service.SimAndDigNonHarmonicService; import com.njcn.gather.system.cfg.pojo.enums.SceneEnum; import com.njcn.gather.system.cfg.service.ISysTestConfigService; import com.njcn.gather.system.dictionary.pojo.po.DictData; @@ -158,6 +161,7 @@ public class PqReportServiceImpl extends ServiceImpl i @Value("${qr.gcDev.path}") private String gcDevPath; + private final IPqDevService iPqDevService; private final PqDevMapper pqDevMapper; private final IPqDevSubService iPqDevSubService; @@ -168,9 +172,9 @@ public class PqReportServiceImpl extends ServiceImpl i private final IPqScriptDtlsService pqScriptDtlsService; - private final AdNonHarmonicService adNonHarmonicService; + private final SimAndDigNonHarmonicService adNonHarmonicService; - private final AdHarmonicService adHarmonicService; + private final SimAndDigHarmonicService adHarmonicService; private final IDevTypeService devTypeService; @@ -1500,8 +1504,8 @@ public class PqReportServiceImpl extends ServiceImpl i return obj.substring(index1, obj.indexOf("#", index1)); }, Collectors.toSet()))); //key为index,value为该index下所有测试项对应的code - List adNonHarmonicResultList = adNonHarmonicService.listAllResultData(devReportParam.getScriptId(), devReportParam.getPlanCode(), devReportParam.getDevId() + "_" + i); - List adHarmonicResultList = adHarmonicService.listAllResultData(devReportParam.getScriptId(), devReportParam.getPlanCode(), devReportParam.getDevId() + "_" + i); + List simAndDigNonHarmonicResultList = adNonHarmonicService.listSimAndDigBaseResult(devReportParam.getScriptId(), devReportParam.getPlanCode(), devReportParam.getDevId() + "_" + i); + List adHarmonicResultList = adHarmonicService.listAllResultData(devReportParam.getScriptId(), devReportParam.getPlanCode(), devReportParam.getDevId() + "_" + i); // 填充数据 indexKeysMap.forEach((index, keys) -> { @@ -1512,9 +1516,9 @@ public class PqReportServiceImpl extends ServiceImpl i } else { // 非谐波类 if (DetectionCodeEnum.V_UNBAN.getCode().equals(s1) || DetectionCodeEnum.FREQ.getCode().equals(s1)) { - fillMapValueT(adNonHarmonicResultList, dataModelMap, keys, index); + fillMapValueT(simAndDigNonHarmonicResultList, dataModelMap, keys, index); } else { - fillMapValueABC(adNonHarmonicResultList, dataModelMap, keys, index); + fillMapValueABC(simAndDigNonHarmonicResultList, dataModelMap, keys, index); } } }); @@ -1534,11 +1538,11 @@ public class PqReportServiceImpl extends ServiceImpl i * @param keys * @param index */ - private void fillMapValueABC(List allNonHarmonicResultList, Map dataModelMap, Set keys, String index) { + private void fillMapValueABC(List allNonHarmonicResultList, Map dataModelMap, Set keys, String index) { keys.forEach(key -> { - List resultList = allNonHarmonicResultList.stream().filter(obj -> obj.getAdType().equals(key) && obj.getSort().toString().equals(index)).collect(Collectors.toList()); + List resultList = allNonHarmonicResultList.stream().filter(obj -> obj.getAdType().equals(key) && obj.getSort().toString().equals(index)).collect(Collectors.toList()); if (CollectionUtil.isNotEmpty(resultList)) { - AdNonHarmonicResult adNonHarmonicResult = resultList.get(0); + SimAndDigNonHarmonicResult adNonHarmonicResult = resultList.get(0); if (ObjectUtil.isNotNull(adNonHarmonicResult)) { dataModelMap.put("${" + index + "#" + key + "#A}", devValue(adNonHarmonicResult.getAValue(), 1, 1)); dataModelMap.put("${" + index + "#" + key + "#B}", devValue(adNonHarmonicResult.getBValue(), 1, 1)); @@ -1556,11 +1560,11 @@ public class PqReportServiceImpl extends ServiceImpl i * @param keys * @param index */ - private void fillMapValueT(List allNonHarmonicResultList, Map dataModelMap, Set keys, String index) { + private void fillMapValueT(List allNonHarmonicResultList, Map dataModelMap, Set keys, String index) { keys.forEach(key -> { - List resultList = allNonHarmonicResultList.stream().filter(obj -> obj.getAdType().equals(key) && obj.getSort().toString().equals(index)).collect(Collectors.toList()); + List resultList = allNonHarmonicResultList.stream().filter(obj -> obj.getAdType().equals(key) && obj.getSort().toString().equals(index)).collect(Collectors.toList()); if (CollectionUtil.isNotEmpty(resultList)) { - AdNonHarmonicResult adNonHarmonicResult = resultList.get(0); + SimAndDigNonHarmonicResult adNonHarmonicResult = resultList.get(0); if (ObjectUtil.isNotNull(adNonHarmonicResult)) { dataModelMap.put("${" + index + "#" + key + "#T}", devValue(adNonHarmonicResult.getTValue(), 1, 1)); } @@ -1576,11 +1580,11 @@ public class PqReportServiceImpl extends ServiceImpl i * @param keys * @param index */ - private void fillMapValueHarm(List allHarmonicResultList, Map dataModelMap, Set keys, String index) { + private void fillMapValueHarm(List allHarmonicResultList, Map dataModelMap, Set keys, String index) { keys.forEach(key -> { - List resultList = allHarmonicResultList.stream().filter(obj -> obj.getAdType().equals(key) && obj.getSort().toString().equals(index)).collect(Collectors.toList()); + List resultList = allHarmonicResultList.stream().filter(obj -> obj.getAdType().equals(key) && obj.getSort().toString().equals(index)).collect(Collectors.toList()); if (CollectionUtil.isNotEmpty(resultList)) { - AdHarmonicResult adHarmonicResult = resultList.get(0); + SimAndDigHarmonicResult adHarmonicResult = resultList.get(0); if (Objects.nonNull(adHarmonicResult)) { if (DetectionCodeEnum.V2_50.getCode().equals(key) || DetectionCodeEnum.SV_1_49.getCode().equals(key)) { fillHarm(dataModelMap, adHarmonicResult, index, key, 57.74, 100); @@ -1603,7 +1607,7 @@ public class PqReportServiceImpl extends ServiceImpl i * @param baseValue * @param percent */ - private void fillHarm(Map dataModelMap, AdHarmonicResult adHarmonicResult, String index, String key, double baseValue, int percent) { + private void fillHarm(Map dataModelMap, SimAndDigHarmonicResult adHarmonicResult, String index, String key, double baseValue, int percent) { // 要处理 2 5 7 11 23 35 43 50 String aBase = devValue(adHarmonicResult.getAValue1(), 1, 1); @@ -1753,16 +1757,14 @@ public class PqReportServiceImpl extends ServiceImpl i public void uploadReportToCloud(List deviceIds) { log.info("开始批量上传检测报告到云端,设备ID列表:{}", deviceIds); - // 查询条件:报告状态为已生成(1)的设备 - LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(PqDev::getReportState, DevReportStateEnum.GENERATED.getValue()); - // 如果指定了设备ID列表,则只查询这些设备 - if (CollUtil.isNotEmpty(deviceIds)) { - wrapper.in(PqDev::getId, deviceIds); - } + List deviceSubs = iPqDevSubService.lambdaQuery() + .eq(PqDevSub::getReportState, DevReportStateEnum.GENERATED.getValue()) + .in(CollUtil.isNotEmpty(deviceIds),PqDevSub::getDevId, deviceIds).list(); + List devIds = deviceSubs.stream().map(PqDevSub::getDevId).collect(Collectors.toList()); - List devices = iPqDevService.list(wrapper); + List devices = iPqDevService.lambdaQuery() + .in(CollUtil.isNotEmpty(devIds), PqDev::getId, devIds).list(); if (CollUtil.isEmpty(devices)) { log.warn("未找到符合条件的设备,无需上传"); diff --git a/detection/src/main/java/com/njcn/gather/result/service/impl/ResultServiceImpl.java b/detection/src/main/java/com/njcn/gather/result/service/impl/ResultServiceImpl.java index 59df73fc..836c1256 100644 --- a/detection/src/main/java/com/njcn/gather/result/service/impl/ResultServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/result/service/impl/ResultServiceImpl.java @@ -48,12 +48,12 @@ import com.njcn.gather.script.util.ScriptDtlsDesc; import com.njcn.gather.storage.mapper.TableGenMapper; import com.njcn.gather.storage.pojo.param.SingleNonHarmParam; import com.njcn.gather.storage.pojo.param.StorageParam; -import com.njcn.gather.storage.pojo.po.AdBaseResult; -import com.njcn.gather.storage.pojo.po.AdHarmonicResult; -import com.njcn.gather.storage.pojo.po.AdNonHarmonicResult; +import com.njcn.gather.storage.pojo.po.SimAndDigBaseResult; +import com.njcn.gather.storage.pojo.po.SimAndDigHarmonicResult; +import com.njcn.gather.storage.pojo.po.SimAndDigNonHarmonicResult; import com.njcn.gather.storage.pojo.vo.RawDataVO; -import com.njcn.gather.storage.service.AdHarmonicService; -import com.njcn.gather.storage.service.AdNonHarmonicService; +import com.njcn.gather.storage.service.SimAndDigHarmonicService; +import com.njcn.gather.storage.service.SimAndDigNonHarmonicService; import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum; import com.njcn.gather.system.dictionary.pojo.po.DictData; import com.njcn.gather.system.dictionary.pojo.po.DictTree; @@ -82,8 +82,8 @@ public class ResultServiceImpl implements IResultService { private final IAdPlanService adPlanService; private final IPqDevService pqDevService; - private final AdNonHarmonicService adNonHarmonicService; - private final AdHarmonicService adHarmonicService; + private final SimAndDigNonHarmonicService adNonHarmonicService; + private final SimAndDigHarmonicService adHarmonicService; private final IPqScriptDtlsService pqScriptDtlsService; private final PqScriptMapper scriptMapper; private final IDictTreeService dictTreeService; @@ -116,7 +116,7 @@ public class ResultServiceImpl implements IResultService { List> chnList = new ArrayList<>(); - List allResultList = new ArrayList<>(); + List allResultList = new ArrayList<>(); //只查询指定的脚本类型 if (ObjectUtil.isNotNull(queryParam.getScriptType())) { List indexList = pqScriptDtlsService.getIndexList(queryParam.getScriptType(), scriptId); @@ -125,22 +125,22 @@ public class ResultServiceImpl implements IResultService { if (HARMONIC_TYPE_CODE.contains(dictTree.getCode())) { allResultList.addAll(adHarmonicService.get(scriptId, indexList, queryParam.getDeviceId(), queryParam.getChnNum(), plan.getCode() + "")); } else { - allResultList.addAll(adNonHarmonicService.get(scriptId, indexList, queryParam.getDeviceId(), queryParam.getChnNum(), plan.getCode() + "")); + allResultList.addAll(adNonHarmonicService.listSimAndDigBaseResult(scriptId, indexList, queryParam.getDeviceId(), queryParam.getChnNum(), plan.getCode() + "")); } } else { //查询所有的脚本类型 allResultList.addAll(adHarmonicService.get(scriptId, null, queryParam.getDeviceId(), queryParam.getChnNum(), plan.getCode() + "")); - allResultList.addAll(adNonHarmonicService.get(scriptId, null, queryParam.getDeviceId(), queryParam.getChnNum(), plan.getCode() + "")); + allResultList.addAll(adNonHarmonicService.listSimAndDigBaseResult(scriptId, null, queryParam.getDeviceId(), queryParam.getChnNum(), plan.getCode() + "")); } if (ObjectUtil.isNotEmpty(allResultList)) { - Map> chnMap = allResultList.stream().collect( + Map> chnMap = allResultList.stream().collect( Collectors.groupingBy(obj -> obj.getMonitorId().substring(obj.getMonitorId().lastIndexOf("_") + 1)) ); chnMap.forEach((chn, list) -> { Map map = new HashMap<>(); map.put("value", chn); - Set collect = list.stream().filter(obj -> obj.getResultFlag() != 4).map(AdBaseResult::getResultFlag).collect(Collectors.toSet()); + Set collect = list.stream().filter(obj -> obj.getResultFlag() != 4).map(SimAndDigBaseResult::getResultFlag).collect(Collectors.toSet()); map.put("label", conform(collect) + ""); chnList.add(map); @@ -164,15 +164,15 @@ public class ResultServiceImpl implements IResultService { ); Map> resultMap = new HashMap<>(5); if (StrUtil.isNotBlank(param.getDevId())) { - List allResultList = new ArrayList<>(); + List allResultList = new ArrayList<>(); List indexList = new ArrayList<>(); if (StrUtil.isNotBlank(param.getScriptType())) { indexList = pqScriptDtlsService.getIndexList(param.getScriptType(), param.getScriptId()); } - allResultList.addAll(adNonHarmonicService.get(param.getScriptId(), indexList, param.getDevId(), param.getDevNum(), param.getCode())); + allResultList.addAll(adNonHarmonicService.listSimAndDigBaseResult(param.getScriptId(), indexList, param.getDevId(), param.getDevNum(), param.getCode())); allResultList.addAll(adHarmonicService.get(param.getScriptId(), indexList, param.getDevId(), param.getDevNum(), param.getCode())); if (CollUtil.isNotEmpty(allResultList)) { - resultMap = allResultList.stream().collect(Collectors.groupingBy(AdBaseResult::getSort, Collectors.mapping(AdBaseResult::getResultFlag, Collectors.toSet()))); + resultMap = allResultList.stream().collect(Collectors.groupingBy(SimAndDigBaseResult::getSort, Collectors.mapping(SimAndDigBaseResult::getResultFlag, Collectors.toSet()))); } } @@ -971,7 +971,7 @@ public class ResultServiceImpl implements IResultService { List> keyFillMapList = new ArrayList<>(); for (Integer sort : indexList) { SingleNonHarmParam param = new SingleNonHarmParam(planCode, devId, lineNo, valueTypeList, Collections.singletonList(sort)); - List nonHarmList = adNonHarmonicService.queryByCondition(param); + List nonHarmList = adNonHarmonicService.queryByCondition(param); if (CollUtil.isNotEmpty(nonHarmList)) { Map keyFillMap = new HashMap<>(16); fillVoltagePhaseData(nonHarmList, keyFillMap, tableKeys); @@ -996,7 +996,7 @@ public class ResultServiceImpl implements IResultService { if (indexList.size() == 1) { // 获取谐波数据 SingleNonHarmParam param = new SingleNonHarmParam(planCode, devId, lineNo, valueType, indexList.get(0)); - AdHarmonicResult singleResult = adHarmonicService.getSingleResult(param); + SimAndDigHarmonicResult singleResult = adHarmonicService.getSingleResult(param); // 注:如果ABC的标准值一致,则同步到standard中 Map> checkDataHarmNumMap = scriptCheckDataList.stream().collect(Collectors.groupingBy(PqScriptCheckData::getHarmNum)); List> keyFillMapList = new ArrayList<>(); @@ -1039,12 +1039,12 @@ public class ResultServiceImpl implements IResultService { if (PowerConstant.THREE_PHASE.contains(scriptCode)) { // 获取该三相的数据 SingleNonHarmParam param = new SingleNonHarmParam(planCode, devId, lineNo, Collections.singletonList(valueType), indexList); - List nonHarmList = adNonHarmonicService.queryByCondition(param); + List nonHarmList = adNonHarmonicService.queryByCondition(param); if (CollUtil.isNotEmpty(nonHarmList)) { List> keyFillMapList = new ArrayList<>(); - for (AdNonHarmonicResult adNonHarmonicResult : nonHarmList) { + for (SimAndDigNonHarmonicResult SimAndDigNonHarmonicResult : nonHarmList) { Map keyFillMap = new HashMap<>(16); - fillThreePhaseData(adNonHarmonicResult, null, keyFillMap, scriptCode); + fillThreePhaseData(SimAndDigNonHarmonicResult, null, keyFillMap, scriptCode); keyFillMapList.add(keyFillMap); } if (CollUtil.isNotEmpty(keyFillMapList)) { @@ -1067,11 +1067,11 @@ public class ResultServiceImpl implements IResultService { // 非三相且非暂态,通常只有一个数据,所以直接赋值即可 List> keyFillMapList = new ArrayList<>(); SingleNonHarmParam param = new SingleNonHarmParam(planCode, devId, lineNo, Collections.singletonList(valueType), indexList); - List nonHarmList = adNonHarmonicService.queryByCondition(param); + List nonHarmList = adNonHarmonicService.queryByCondition(param); if (CollUtil.isNotEmpty(nonHarmList)) { - for (AdNonHarmonicResult adNonHarmonicResult : nonHarmList) { + for (SimAndDigNonHarmonicResult simAndDigNonHarmonicResult : nonHarmList) { Map keyFillMap = new HashMap<>(8); - fillTPhaseData(adNonHarmonicResult, null, keyFillMap); + fillTPhaseData(simAndDigNonHarmonicResult, null, keyFillMap); keyFillMapList.add(keyFillMap); } } @@ -1286,14 +1286,14 @@ public class ResultServiceImpl implements IResultService { * @param keyFillMap 待填充的集合Map * @param tableKeys 模板表格中的key */ - private void fillVoltagePhaseData(List nonHarmList, Map keyFillMap, List tableKeys) { + private void fillVoltagePhaseData(List nonHarmList, Map keyFillMap, List tableKeys) { String standardMag = "/", standardDur = "/", testMag = "/", testDur = "/", errorMag = "/", errorDur = "/", resultMag = "/", resultDur = "/", result, errorScope, errorScopeMag = "/", errorScopeDur = "/", unitMag = "", unitDur = ""; - for (AdNonHarmonicResult adNonHarmonicResult : nonHarmList) { + for (SimAndDigNonHarmonicResult adNonHarmonicResult : nonHarmList) { DetectionData tempT = getResultData(adNonHarmonicResult, null, PowerConstant.PHASE_T); // 需要判断adNonHarmonicResult是特征幅值还是持续时间 String adType = adNonHarmonicResult.getAdType(); @@ -1520,7 +1520,7 @@ public class ResultServiceImpl implements IResultService { private void createTempResultTable(String code) { this.dropTempResultTable(code); String oldCode = code.replace("_temp", ""); - tableGenMapper.genAdNonHarmonicResultTable(code); + tableGenMapper.genNonHarmonicResultTable(code, false); StringBuilder A = new StringBuilder(); StringBuilder B = new StringBuilder(); StringBuilder C = new StringBuilder(); @@ -1596,12 +1596,12 @@ public class ResultServiceImpl implements IResultService { dataRule = DictDataEnum.SECTION_VALUE; } - List allNonHarmonicRawData = adNonHarmonicService.listAllRawData(scriptId, oldCode, devId); - LinkedHashMap> nonHarmonicMap = allNonHarmonicRawData.stream().sorted(Comparator.comparing(AdNonHarmonicResult::getSort)) - .collect(Collectors.groupingBy(AdNonHarmonicResult::getSort, LinkedHashMap::new, Collectors.toList())); - List allHarmonicRawData = adHarmonicService.listAllRawData(scriptId, oldCode, devId); - LinkedHashMap> harmonicMap = allHarmonicRawData.stream().sorted(Comparator.comparing(AdHarmonicResult::getSort)) - .collect(Collectors.groupingBy(AdHarmonicResult::getSort, LinkedHashMap::new, Collectors.toList())); + List allNonHarmonicRawData = adNonHarmonicService.listAllSimAndDigRawData(scriptId, oldCode, devId); + LinkedHashMap> nonHarmonicMap = allNonHarmonicRawData.stream().sorted(Comparator.comparing(SimAndDigNonHarmonicResult::getSort)) + .collect(Collectors.groupingBy(SimAndDigNonHarmonicResult::getSort, LinkedHashMap::new, Collectors.toList())); + List allHarmonicRawData = adHarmonicService.listAllRawData(scriptId, oldCode, devId); + LinkedHashMap> harmonicMap = allHarmonicRawData.stream().sorted(Comparator.comparing(SimAndDigHarmonicResult::getSort)) + .collect(Collectors.groupingBy(SimAndDigHarmonicResult::getSort, LinkedHashMap::new, Collectors.toList())); PqScriptIssueParam issueParam = new PqScriptIssueParam(); issueParam.setPlanId(planId); @@ -1615,8 +1615,8 @@ public class ResultServiceImpl implements IResultService { List sourceIssues = pqScriptDtlsService.listSourceIssue(issueParam); sourceIssues.forEach(sourceIssue -> { - List nonHarmonicResults = nonHarmonicMap.get(sourceIssue.getIndex()); - List harmonicResults = harmonicMap.get(sourceIssue.getIndex()); + List nonHarmonicResults = nonHarmonicMap.get(sourceIssue.getIndex()); + List harmonicResults = harmonicMap.get(sourceIssue.getIndex()); List realDataXiList = new ArrayList<>(); if (CollUtil.isNotEmpty(nonHarmonicResults)) { realDataXiList.addAll(this.toList(nonHarmonicResults, null, true)); @@ -1640,11 +1640,11 @@ public class ResultServiceImpl implements IResultService { iPqDevService.updateResult(param.getDevIds(), valueType, param.getCode(), null, param.getTemperature(), param.getHumidity()); } - private List toList(List nonHarm, List harm, boolean containBaseHarm) { + private List toList(List nonHarm, List harm, boolean containBaseHarm) { List info = new ArrayList<>(); // if (CollUtil.isNotEmpty(nonHarm)) { if (CollUtil.isNotEmpty(nonHarm)) { - Map> noHarmMap = nonHarm.stream() + 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("_"); @@ -1653,7 +1653,7 @@ public class ResultServiceImpl implements IResultService { data.setId(split[0] + "_" + split[1]); List sqlDataDTOS = new ArrayList<>(); DevData.SqlDataDTO sqlDataDTO; - for (AdNonHarmonicResult result : value) { + for (SimAndDigNonHarmonicResult result : value) { sqlDataDTO = new DevData.SqlDataDTO(); sqlDataDTO.setType(result.getDataType()); sqlDataDTO.setDesc(result.getAdType()); @@ -1670,7 +1670,7 @@ public class ResultServiceImpl implements IResultService { }); } if (CollUtil.isNotEmpty(harm)) { - Map> harmMap = harm.stream() + 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()); @@ -1678,7 +1678,7 @@ public class ResultServiceImpl implements IResultService { DevData.SqlDataDTO sqlDataDTO; List sqlDataHarmDTOS = new ArrayList<>(); DevData.SqlDataHarmDTO dataHarmDTO; - for (AdHarmonicResult harmonicResult : value) { + for (SimAndDigHarmonicResult harmonicResult : value) { if (containBaseHarm) { sqlDataDTO = new DevData.SqlDataDTO(); sqlDataDTO.setType(harmonicResult.getDataType()); @@ -1725,12 +1725,12 @@ public class ResultServiceImpl implements IResultService { return info; } - private List reflectHarmonicValue(String phase, AdHarmonicResult adHarmonicResult, boolean notContainBaseHarm) { + private List reflectHarmonicValue(String phase, SimAndDigHarmonicResult adHarmonicResult, boolean notContainBaseHarm) { List info = new ArrayList<>(); for (int i = notContainBaseHarm ? 2 : 1; i <= 50; i++) { String fieldName = phase + "Value" + i; try { - Field idField = AdHarmonicResult.class.getDeclaredField(fieldName); + Field idField = SimAndDigHarmonicResult.class.getDeclaredField(fieldName); idField.setAccessible(true); String value = idField.get(adHarmonicResult) + ""; info.add(value); diff --git a/entrance/src/main/resources/application.yml b/entrance/src/main/resources/application.yml index c807eec5..9097c056 100644 --- a/entrance/src/main/resources/application.yml +++ b/entrance/src/main/resources/application.yml @@ -9,9 +9,9 @@ spring: url: jdbc:mysql://192.168.1.24:13306/pqs9100?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=Asia/Shanghai username: root password: njcnpqs -# url: jdbc:mysql://localhost:3306/pqs91001?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=CTT -# username: root -# password: root + # url: jdbc:mysql://localhost:3306/pqs91001?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=CTT + # username: root + # password: root #初始化建立物理连接的个数、最小、最大连接数 initial-size: 5 min-idle: 5 @@ -38,7 +38,7 @@ mybatis-plus: #配置sql日志输出 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #关闭日志输出 -# log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl + # log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl global-config: db-config: #指定主键生成策略 @@ -62,7 +62,7 @@ socket: # port: 61000 webSocket: - port: 7777 + port: 7777 #源参数下发,暂态数据默认值 Dip: @@ -102,4 +102,9 @@ qr: path: /emmc/qrc.bin db: - type: mysql \ No newline at end of file + type: mysql + +detection: + xujy: + volOrCur: 6 + phase: 3 \ No newline at end of file diff --git a/storage/src/main/java/com/njcn/gather/storage/controller/DataDealController.java b/storage/src/main/java/com/njcn/gather/storage/controller/DataDealController.java index 71279485..0414e93b 100644 --- a/storage/src/main/java/com/njcn/gather/storage/controller/DataDealController.java +++ b/storage/src/main/java/com/njcn/gather/storage/controller/DataDealController.java @@ -3,8 +3,8 @@ package com.njcn.gather.storage.controller; import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.response.HttpResult; import com.njcn.db.mybatisplus.handler.DynamicTableNameHandler; -import com.njcn.gather.storage.pojo.po.AdHarmonicResult; -import com.njcn.gather.storage.pojo.po.AdNonHarmonicResult; +import com.njcn.gather.storage.pojo.po.SimAndDigHarmonicResult; +import com.njcn.gather.storage.pojo.po.SimAndDigNonHarmonicResult; import com.njcn.gather.storage.service.DetectionDataDealService; import com.njcn.web.controller.BaseController; import com.njcn.web.utils.HttpResultUtil; @@ -33,24 +33,24 @@ public class DataDealController extends BaseController { public HttpResult dataDealAndInsert(){ String methodDescribe = getMethodDescribe("dataDealAndInsert"); - List list2 = new ArrayList<>(); - AdHarmonicResult adHarmonicResult = new AdHarmonicResult(); - adHarmonicResult.setDataType("aa"); - adHarmonicResult.setAdType("aaaa"); + List list2 = new ArrayList<>(); + SimAndDigHarmonicResult SimAndDigHarmonicResult = new SimAndDigHarmonicResult(); + SimAndDigHarmonicResult.setDataType("aa"); + SimAndDigHarmonicResult.setAdType("aaaa"); - adHarmonicResult.setMonitorId("ss"); - adHarmonicResult.setScriptId("ddd"); - adHarmonicResult.setTimeId(LocalDateTime.now()); + SimAndDigHarmonicResult.setMonitorId("ss"); + SimAndDigHarmonicResult.setScriptId("ddd"); + SimAndDigHarmonicResult.setTimeId(LocalDateTime.now()); - list2.add(adHarmonicResult); - AdHarmonicResult adHarmonicResult2 = new AdHarmonicResult(); - adHarmonicResult2.setDataType("aabb"); - adHarmonicResult2.setAdType("aaaabb"); + list2.add(SimAndDigHarmonicResult); + SimAndDigHarmonicResult SimAndDigHarmonicResult2 = new SimAndDigHarmonicResult(); + SimAndDigHarmonicResult2.setDataType("aabb"); + SimAndDigHarmonicResult2.setAdType("aaaabb"); - adHarmonicResult2.setMonitorId("ssbb"); - adHarmonicResult2.setScriptId("dddbb"); - adHarmonicResult2.setTimeId(LocalDateTime.now()); - list2.add(adHarmonicResult2); + SimAndDigHarmonicResult2.setMonitorId("ssbb"); + SimAndDigHarmonicResult2.setScriptId("dddbb"); + SimAndDigHarmonicResult2.setTimeId(LocalDateTime.now()); + list2.add(SimAndDigHarmonicResult2); detectionDataDealService.acceptAd(list2,"1"); diff --git a/storage/src/main/java/com/njcn/gather/storage/controller/TableGenController.java b/storage/src/main/java/com/njcn/gather/storage/controller/TableGenController.java index b5a70571..7daac5a7 100644 --- a/storage/src/main/java/com/njcn/gather/storage/controller/TableGenController.java +++ b/storage/src/main/java/com/njcn/gather/storage/controller/TableGenController.java @@ -28,9 +28,9 @@ public class TableGenController extends BaseController { @GetMapping("genAdHarmonicTable") @ApiOperation("生成表") @OperateInfo - public HttpResult genAdHarmonicTable(@RequestParam("code") String code){ + public HttpResult genAdHarmonicTable(@RequestParam("code") String code, @RequestParam("isContrast") boolean isContrast) { String methodDescribe = getMethodDescribe("genAdHarmonicTable"); - tableGenService.genAdNonHarmonicTable(code); + tableGenService.genTable(code, isContrast); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } } diff --git a/storage/src/main/java/com/njcn/gather/storage/mapper/AdNonHarmonicMapper.java b/storage/src/main/java/com/njcn/gather/storage/mapper/AdNonHarmonicMapper.java deleted file mode 100644 index 7dee9ef1..00000000 --- a/storage/src/main/java/com/njcn/gather/storage/mapper/AdNonHarmonicMapper.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.njcn.gather.storage.mapper; - -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.github.yulichang.base.MPJBaseMapper; -import com.njcn.gather.storage.pojo.po.AdHarmonicResult; -import com.njcn.gather.storage.pojo.po.AdNonHarmonicResult; -import org.apache.ibatis.annotations.Mapper; - -@Mapper -public interface AdNonHarmonicMapper extends MPJBaseMapper { - - - - - - -} diff --git a/storage/src/main/java/com/njcn/gather/storage/mapper/ContrastHarmonicMappper.java b/storage/src/main/java/com/njcn/gather/storage/mapper/ContrastHarmonicMappper.java new file mode 100644 index 00000000..62a12f59 --- /dev/null +++ b/storage/src/main/java/com/njcn/gather/storage/mapper/ContrastHarmonicMappper.java @@ -0,0 +1,11 @@ +package com.njcn.gather.storage.mapper; + +import com.github.yulichang.base.MPJBaseMapper; +import com.njcn.gather.storage.pojo.po.ContrastHarmonicResult; + +/** + * @author caozehui + * @data 2025-08-06 + */ +public interface ContrastHarmonicMappper extends MPJBaseMapper { +} diff --git a/storage/src/main/java/com/njcn/gather/storage/mapper/ContrastNonHarmonicMappper.java b/storage/src/main/java/com/njcn/gather/storage/mapper/ContrastNonHarmonicMappper.java new file mode 100644 index 00000000..f2c0b7c9 --- /dev/null +++ b/storage/src/main/java/com/njcn/gather/storage/mapper/ContrastNonHarmonicMappper.java @@ -0,0 +1,11 @@ +package com.njcn.gather.storage.mapper; + +import com.github.yulichang.base.MPJBaseMapper; +import com.njcn.gather.storage.pojo.po.ContrastNonHarmonicResult; + +/** + * @author caozehui + * @data 2025-07-28 + */ +public interface ContrastNonHarmonicMappper extends MPJBaseMapper { +} diff --git a/storage/src/main/java/com/njcn/gather/storage/mapper/DetectionDataDealMapper.java b/storage/src/main/java/com/njcn/gather/storage/mapper/DetectionDataDealMapper.java index 537e6388..27cb25a9 100644 --- a/storage/src/main/java/com/njcn/gather/storage/mapper/DetectionDataDealMapper.java +++ b/storage/src/main/java/com/njcn/gather/storage/mapper/DetectionDataDealMapper.java @@ -1,11 +1,11 @@ package com.njcn.gather.storage.mapper; import com.njcn.db.mybatisplus.mapper.BatchBaseMapper; -import com.njcn.gather.storage.pojo.po.AdHarmonicResult; +import com.njcn.gather.storage.pojo.po.SimAndDigHarmonicResult; import java.util.List; -public interface DetectionDataDealMapper extends BatchBaseMapper { +public interface DetectionDataDealMapper extends BatchBaseMapper { /** * 根据设备ID查询禁用的脚本详情索引 diff --git a/storage/src/main/java/com/njcn/gather/storage/mapper/AdHarmonicMappper.java b/storage/src/main/java/com/njcn/gather/storage/mapper/SimAndDigHarmonicMappper.java similarity index 50% rename from storage/src/main/java/com/njcn/gather/storage/mapper/AdHarmonicMappper.java rename to storage/src/main/java/com/njcn/gather/storage/mapper/SimAndDigHarmonicMappper.java index aa87c142..47b0daef 100644 --- a/storage/src/main/java/com/njcn/gather/storage/mapper/AdHarmonicMappper.java +++ b/storage/src/main/java/com/njcn/gather/storage/mapper/SimAndDigHarmonicMappper.java @@ -1,8 +1,7 @@ package com.njcn.gather.storage.mapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.github.yulichang.base.MPJBaseMapper; -import com.njcn.gather.storage.pojo.po.AdHarmonicResult; +import com.njcn.gather.storage.pojo.po.SimAndDigHarmonicResult; import org.apache.ibatis.annotations.Mapper; /** @@ -10,5 +9,5 @@ import org.apache.ibatis.annotations.Mapper; * @data 2024-12-30 */ @Mapper -public interface AdHarmonicMappper extends MPJBaseMapper { +public interface SimAndDigHarmonicMappper extends MPJBaseMapper { } diff --git a/storage/src/main/java/com/njcn/gather/storage/mapper/SimAndDigNonHarmonicMapper.java b/storage/src/main/java/com/njcn/gather/storage/mapper/SimAndDigNonHarmonicMapper.java new file mode 100644 index 00000000..8cc17aab --- /dev/null +++ b/storage/src/main/java/com/njcn/gather/storage/mapper/SimAndDigNonHarmonicMapper.java @@ -0,0 +1,11 @@ +package com.njcn.gather.storage.mapper; + +import com.github.yulichang.base.MPJBaseMapper; +import com.njcn.gather.storage.pojo.po.SimAndDigNonHarmonicResult; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SimAndDigNonHarmonicMapper extends MPJBaseMapper { + + +} diff --git a/storage/src/main/java/com/njcn/gather/storage/mapper/TableGenMapper.java b/storage/src/main/java/com/njcn/gather/storage/mapper/TableGenMapper.java index e695d349..36b79e76 100644 --- a/storage/src/main/java/com/njcn/gather/storage/mapper/TableGenMapper.java +++ b/storage/src/main/java/com/njcn/gather/storage/mapper/TableGenMapper.java @@ -1,16 +1,15 @@ package com.njcn.gather.storage.mapper; import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; public interface TableGenMapper { - void genAdNonHarmonicTable(@Param("code")String code); + void genNonHarmonicTable(@Param("code") String code, @Param("isContrast") boolean isContrast); - void genAdHarmonicTable(@Param("tableSql")String tableSql); + void genAdHarmonicTable(@Param("tableSql") String tableSql); - void genAdNonHarmonicResultTable(@Param("code")String code); + void genNonHarmonicResultTable(@Param("code") String code, @Param("isContrast") boolean isContrast); } diff --git a/storage/src/main/java/com/njcn/gather/storage/mapper/mapping/AdNonHarmonicMapper.xml b/storage/src/main/java/com/njcn/gather/storage/mapper/mapping/SimAndDigNonHarmonicMapper.xml similarity index 67% rename from storage/src/main/java/com/njcn/gather/storage/mapper/mapping/AdNonHarmonicMapper.xml rename to storage/src/main/java/com/njcn/gather/storage/mapper/mapping/SimAndDigNonHarmonicMapper.xml index d98510dc..3a679eec 100644 --- a/storage/src/main/java/com/njcn/gather/storage/mapper/mapping/AdNonHarmonicMapper.xml +++ b/storage/src/main/java/com/njcn/gather/storage/mapper/mapping/SimAndDigNonHarmonicMapper.xml @@ -1,6 +1,6 @@ - + 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 71ec898c..5ffd548b 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 @@ -1,45 +1,65 @@ - - - CREATE TABLE ad_non_harmonic_${code} ( - Monitor_Id CHAR(60) NOT NULL COMMENT '监测点Id', - Time_Id DATETIME(3) NOT NULL COMMENT '时间', - Script_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id,字典表', - Sort int(4) NOT NULL COMMENT '总检测脚本中的测试项序号', - AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表', - Data_Type CHAR(32) NOT NULL COMMENT '数据指标,只有数据源为分钟统计时候才会使用(最大、最小、平均、CP95,默认平均值),字典表', - A_Value float DEFAULT NULL COMMENT 'A相值', - B_Value float DEFAULT NULL COMMENT 'B相值', - C_Value float DEFAULT NULL COMMENT 'C相值', - T_Value float DEFAULT NULL COMMENT 'T相值(没有相别的则存这里)', - Result_Flag int(1) NULL COMMENT '1合格 2不合格 4无法处理', - PRIMARY KEY (Monitor_Id, Time_Id, Script_Id, Sort, AD_Type) - ) COMMENT='监测数据表'; + + CREATE TABLE ad_non_harmonic_${code} + ( + Monitor_Id CHAR(34) NOT NULL COMMENT '监测点Id', + Time_Id DATETIME(3) NOT NULL COMMENT '时间', + AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表', + Data_Type CHAR(32) NOT NULL COMMENT '数据指标,只有数据源为分钟统计时候才会使用(最大、最小、平均、CP95,默认平均值),字典表', + A_Value float DEFAULT NULL COMMENT 'A相值', + B_Value float DEFAULT NULL COMMENT 'B相值', + C_Value float DEFAULT NULL COMMENT 'C相值', + T_Value float DEFAULT NULL COMMENT 'T相值(没有相别的则存这里)', + Result_Flag int(1) NULL COMMENT '1合格 2不合格 4无法处理', + + + Error_Id CHAR(32) NOT NULL COMMENT '误差体系表ID', + Num tinyint(1) unsigned DEFAULT 0 COMMENT '第几次检测', + PRIMARY KEY (Monitor_Id, Time_Id, Error_Id, AD_Type) + + + Script_Id CHAR(32) NOT NULL COMMENT '检测脚本表Id', + Sort int(4) NOT NULL COMMENT '总检测脚本中的测试项序号', + PRIMARY KEY (Monitor_Id, Time_Id, Script_Id, Sort, AD_Type) + + + ) COMMENT='非谐波类原始数据表'; + ${tableSql} - - + CREATE TABLE if not exists ad_non_harmonic_result_${code} ( - Monitor_Id CHAR(60) NOT NULL COMMENT '监测点Id', - Time_Id DATETIME(3) NULL COMMENT '时间', - Script_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id,字典表', - Sort int(4) NOT NULL COMMENT '总检测脚本中的测试项序号', + Monitor_Id CHAR(34) NOT NULL COMMENT '监测点Id', + Time_Id DATETIME NULL COMMENT '时间', AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表', Data_Type CHAR(32) NOT NULL COMMENT '数据指标,只有数据源为分钟统计时候才会使用(最大、最小、平均、CP95,默认平均值),字典表', - Result_Flag int(1) NOT NULL COMMENT '1合格 2不合格 4无法处理', 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, AD_Type,Data_Type) - ) COMMENT='监测数据表'; + Result_Flag int(1) NOT NULL COMMENT '1合格 2不合格 4无法处理', + + + Error_Id CHAR(32) NOT NULL COMMENT '误差体系表ID', + Num tinyint(1) unsigned DEFAULT 0 COMMENT '第几次检测', + PRIMARY KEY (Monitor_Id, Error_Id, Num, AD_Type) + + + Script_Id CHAR(32) NOT NULL COMMENT '检测脚本表Id', + Sort int(4) NOT NULL COMMENT '总检测脚本中的测试项序号', + PRIMARY KEY (Monitor_Id, Script_Id, Sort, AD_Type) + + + ) COMMENT='非谐波类检测结果表'; + + diff --git a/storage/src/main/java/com/njcn/gather/storage/pojo/po/AdNonHarmonicResult.java b/storage/src/main/java/com/njcn/gather/storage/pojo/po/AdNonHarmonicResult.java deleted file mode 100644 index 43fc40e4..00000000 --- a/storage/src/main/java/com/njcn/gather/storage/pojo/po/AdNonHarmonicResult.java +++ /dev/null @@ -1,80 +0,0 @@ -package com.njcn.gather.storage.pojo.po; - -import com.baomidou.mybatisplus.annotation.TableName; - -import java.time.LocalDateTime; -import lombok.Getter; -import lombok.Setter; - -/** - *

- * 监测数据表 - *

- * - * @author cdf - * @since 2024-12-24 - */ -@Getter -@Setter -@TableName(value = "ad_harmonic_xx") -public class AdNonHarmonicResult { - - private static final long serialVersionUID = 1L; - - /** - * 监测点Id - */ - private String monitorId; - - /** - * 时间 - */ - private LocalDateTime timeId; - - /** - * 检测脚本子表Id,字典表 - */ - private String scriptId; - - /** - * 总检测脚本中的测试项序号 - */ - private Integer sort; - - /** - * 检测指标,字典表 - */ - private String adType; - - /** - * 数据指标,只有数据源为分钟统计时候才会使用(最大、最小、平均、CP95,默认平均值),字典表 - */ - private String dataType; - - /** - * 1.合格 2.不合格 4.无法处理 - */ - private Integer resultFlag; - - /** - * A相值 - */ - private String aValue; - - /** - * B相值 - */ - private String bValue; - - /** - * C相值 - */ - private String cValue; - - /** - * T相值(没有相别的则存这里) - */ - private String tValue; - - -} diff --git a/storage/src/main/java/com/njcn/gather/storage/pojo/po/BaseResult.java b/storage/src/main/java/com/njcn/gather/storage/pojo/po/BaseResult.java new file mode 100644 index 00000000..b5277d8d --- /dev/null +++ b/storage/src/main/java/com/njcn/gather/storage/pojo/po/BaseResult.java @@ -0,0 +1,37 @@ +package com.njcn.gather.storage.pojo.po; + +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * @author caozehui + * @data 2025-07-28 + */ +@Data +public class BaseResult { + /** + * 监测点Id + */ + private String monitorId; + + /** + * 时间 + */ + private LocalDateTime timeId; + + /** + * 0.不合格 1.合格 4.无法处理 + */ + private Integer resultFlag; + + /** + * 检测指标,字典表 + */ + private String adType; + + /** + * 数据指标,只有数据源为分钟统计时候才会使用(最大、最小、平均、CP95,默认平均值),字典表 + */ + private String dataType; +} diff --git a/storage/src/main/java/com/njcn/gather/storage/pojo/po/ContrastBaseResult.java b/storage/src/main/java/com/njcn/gather/storage/pojo/po/ContrastBaseResult.java new file mode 100644 index 00000000..a3316cbc --- /dev/null +++ b/storage/src/main/java/com/njcn/gather/storage/pojo/po/ContrastBaseResult.java @@ -0,0 +1,22 @@ +package com.njcn.gather.storage.pojo.po; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author caozehui + * @data 2025-07-28 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class ContrastBaseResult extends BaseResult { + /** + * 误差体系Id + */ + private String errorId; + + /** + * 第几次检测 + */ + private Integer num; +} diff --git a/storage/src/main/java/com/njcn/gather/storage/pojo/po/ContrastHarmonicResult.java b/storage/src/main/java/com/njcn/gather/storage/pojo/po/ContrastHarmonicResult.java new file mode 100644 index 00000000..3a622ca9 --- /dev/null +++ b/storage/src/main/java/com/njcn/gather/storage/pojo/po/ContrastHarmonicResult.java @@ -0,0 +1,917 @@ +package com.njcn.gather.storage.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author caozehui + * @data 2025-08-04 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("ad_harmonic_xx") +public class ContrastHarmonicResult extends ContrastBaseResult { + private static final long serialVersionUID = 1L; + + /** + * A相基波 + */ + @TableField(value = "A_Value_1") + private String aValue1; + + /** + * 2次A相谐波 + */ + @TableField(value = "A_Value_2") + private String aValue2; + + /** + * 3次A相谐波 + */ + @TableField(value = "A_Value_3") + private String aValue3; + + /** + * 4次A相谐波 + */ + @TableField(value = "A_Value_4") + private String aValue4; + + /** + * 5次A相谐波 + */ + @TableField(value = "A_Value_5") + private String aValue5; + + /** + * 6次A相谐波 + */ + @TableField(value = "A_Value_6") + private String aValue6; + + /** + * 7次A相谐波 + */ + @TableField(value = "A_Value_7") + private String aValue7; + + /** + * 8次A相谐波 + */ + @TableField(value = "A_Value_8") + private String aValue8; + + /** + * 9次A相谐波 + */ + @TableField(value = "A_Value_9") + private String aValue9; + + /** + * 10次A相谐波 + */ + @TableField(value = "A_Value_10") + private String aValue10; + + /** + * 11次A相谐波 + */ + @TableField(value = "A_Value_11") + private String aValue11; + + /** + * 12次A相谐波 + */ + @TableField(value = "A_Value_12") + private String aValue12; + + /** + * 13次A相谐波 + */ + @TableField(value = "A_Value_13") + private String aValue13; + + /** + * 14次A相谐波 + */ + @TableField(value = "A_Value_14") + private String aValue14; + + /** + * 15次A相谐波 + */ + @TableField(value = "A_Value_15") + private String aValue15; + + /** + * 16次A相谐波 + */ + @TableField(value = "A_Value_16") + private String aValue16; + + /** + * 17次A相谐波 + */ + @TableField(value = "A_Value_17") + private String aValue17; + + /** + * 18次A相谐波 + */ + @TableField(value = "A_Value_18") + private String aValue18; + + /** + * 19次A相谐波 + */ + @TableField(value = "A_Value_19") + private String aValue19; + + /** + * 20次A相谐波 + */ + @TableField(value = "A_Value_20") + private String aValue20; + + /** + * 21次A相谐波 + */ + @TableField(value = "A_Value_21") + private String aValue21; + + /** + * 22次A相谐波 + */ + @TableField(value = "A_Value_22") + private String aValue22; + + /** + * 23次A相谐波 + */ + @TableField(value = "A_Value_23") + private String aValue23; + + /** + * 24次A相谐波 + */ + @TableField(value = "A_Value_24") + private String aValue24; + + /** + * 25次A相谐波 + */ + @TableField(value = "A_Value_25") + private String aValue25; + + /** + * 26次A相谐波 + */ + @TableField(value = "A_Value_26") + private String aValue26; + + /** + * 27次A相谐波 + */ + @TableField(value = "A_Value_27") + private String aValue27; + + /** + * 28次A相谐波 + */ + @TableField(value = "A_Value_28") + private String aValue28; + + /** + * 29次A相谐波 + */ + @TableField(value = "A_Value_29") + private String aValue29; + + /** + * 30次A相谐波 + */ + @TableField(value = "A_Value_30") + private String aValue30; + + /** + * 31次A相谐波 + */ + @TableField(value = "A_Value_31") + private String aValue31; + + /** + * 32次A相谐波 + */ + @TableField(value = "A_Value_32") + private String aValue32; + + /** + * 33次A相谐波 + */ + @TableField(value = "A_Value_33") + private String aValue33; + + /** + * 34次A相谐波 + */ + @TableField(value = "A_Value_34") + private String aValue34; + + /** + * 35次A相谐波 + */ + @TableField(value = "A_Value_35") + private String aValue35; + + /** + * 36次A相谐波 + */ + @TableField(value = "A_Value_36") + private String aValue36; + + /** + * 37次A相谐波 + */ + @TableField(value = "A_Value_37") + private String aValue37; + + /** + * 38次A相谐波 + */ + @TableField(value = "A_Value_38") + private String aValue38; + + /** + * 39次A相谐波 + */ + @TableField(value = "A_Value_39") + private String aValue39; + + /** + * 40次A相谐波 + */ + @TableField(value = "A_Value_40") + private String aValue40; + + /** + * 41次A相谐波 + */ + @TableField(value = "A_Value_41") + private String aValue41; + + /** + * 42次A相谐波 + */ + @TableField(value = "A_Value_42") + private String aValue42; + + /** + * 43次A相谐波 + */ + @TableField(value = "A_Value_43") + private String aValue43; + + /** + * 44次A相谐波 + */ + @TableField(value = "A_Value_44") + private String aValue44; + + /** + * 45次A相谐波 + */ + @TableField(value = "A_Value_45") + private String aValue45; + + /** + * 46次A相谐波 + */ + @TableField(value = "A_Value_46") + private String aValue46; + + /** + * 47次A相谐波 + */ + @TableField(value = "A_Value_47") + private String aValue47; + + /** + * 48次A相谐波 + */ + @TableField(value = "A_Value_48") + private String aValue48; + + /** + * 49次A相谐波 + */ + @TableField(value = "A_Value_49") + private String aValue49; + + /** + * 50次A相谐波 + */ + @TableField(value = "A_Value_50") + private String aValue50; + + /** + * B相基波 + */ + @TableField(value = "B_Value_1") + private String bValue1; + + /** + * 2次B相谐波 + */ + @TableField(value = "B_Value_2") + private String bValue2; + + /** + * 3次B相谐波 + */ + @TableField(value = "B_Value_3") + private String bValue3; + + /** + * 4次B相谐波 + */ + @TableField(value = "B_Value_4") + private String bValue4; + + /** + * 5次B相谐波 + */ + @TableField(value = "B_Value_5") + private String bValue5; + + /** + * 6次B相谐波 + */ + @TableField(value = "B_Value_6") + private String bValue6; + + /** + * 7次B相谐波 + */ + @TableField(value = "B_Value_7") + private String bValue7; + + /** + * 8次B相谐波 + */ + @TableField(value = "B_Value_8") + private String bValue8; + + /** + * 9次B相谐波 + */ + @TableField(value = "B_Value_9") + private String bValue9; + + /** + * 10次B相谐波 + */ + @TableField(value = "B_Value_10") + private String bValue10; + + /** + * 11次B相谐波 + */ + @TableField(value = "B_Value_11") + private String bValue11; + + /** + * 12次B相谐波 + */ + @TableField(value = "B_Value_12") + private String bValue12; + + /** + * 13次B相谐波 + */ + @TableField(value = "B_Value_13") + private String bValue13; + + /** + * 14次B相谐波 + */ + @TableField(value = "B_Value_14") + private String bValue14; + + /** + * 15次B相谐波 + */ + @TableField(value = "B_Value_15") + private String bValue15; + + /** + * 16次B相谐波 + */ + @TableField(value = "B_Value_16") + private String bValue16; + + /** + * 17次B相谐波 + */ + @TableField(value = "B_Value_17") + private String bValue17; + + /** + * 18次B相谐波 + */ + @TableField(value = "B_Value_18") + private String bValue18; + + /** + * 19次B相谐波 + */ + @TableField(value = "B_Value_19") + private String bValue19; + + /** + * 20次B相谐波 + */ + @TableField(value = "B_Value_20") + private String bValue20; + + /** + * 21次B相谐波 + */ + @TableField(value = "B_Value_21") + private String bValue21; + + /** + * 22次B相谐波 + */ + @TableField(value = "B_Value_22") + private String bValue22; + + /** + * 23次B相谐波 + */ + @TableField(value = "B_Value_23") + private String bValue23; + + /** + * 24次B相谐波 + */ + @TableField(value = "B_Value_24") + private String bValue24; + + /** + * 25次B相谐波 + */ + @TableField(value = "B_Value_25") + private String bValue25; + + /** + * 26次B相谐波 + */ + @TableField(value = "B_Value_26") + private String bValue26; + + /** + * 27次B相谐波 + */ + @TableField(value = "B_Value_27") + private String bValue27; + + /** + * 28次B相谐波 + */ + @TableField(value = "B_Value_28") + private String bValue28; + + /** + * 29次B相谐波 + */ + @TableField(value = "B_Value_29") + private String bValue29; + + /** + * 30次B相谐波 + */ + @TableField(value = "B_Value_30") + private String bValue30; + + /** + * 31次B相谐波 + */ + @TableField(value = "B_Value_31") + private String bValue31; + + /** + * 32次B相谐波 + */ + @TableField(value = "B_Value_32") + private String bValue32; + + /** + * 33次B相谐波 + */ + @TableField(value = "B_Value_33") + private String bValue33; + + /** + * 34次B相谐波 + */ + @TableField(value = "B_Value_34") + private String bValue34; + + /** + * 35次B相谐波 + */ + @TableField(value = "B_Value_35") + private String bValue35; + + /** + * 36次B相谐波 + */ + @TableField(value = "B_Value_36") + private String bValue36; + + /** + * 37次B相谐波 + */ + @TableField(value = "B_Value_37") + private String bValue37; + + /** + * 38次B相谐波 + */ + @TableField(value = "B_Value_38") + private String bValue38; + + /** + * 39次B相谐波 + */ + @TableField(value = "B_Value_39") + private String bValue39; + + /** + * 40次B相谐波 + */ + @TableField(value = "B_Value_40") + private String bValue40; + + /** + * 41次B相谐波 + */ + @TableField(value = "B_Value_41") + private String bValue41; + + /** + * 42次B相谐波 + */ + @TableField(value = "B_Value_42") + private String bValue42; + + /** + * 43次B相谐波 + */ + @TableField(value = "B_Value_43") + private String bValue43; + + /** + * 44次B相谐波 + */ + @TableField(value = "B_Value_44") + private String bValue44; + + /** + * 45次B相谐波 + */ + @TableField(value = "B_Value_45") + private String bValue45; + + /** + * 46次B相谐波 + */ + @TableField(value = "B_Value_46") + private String bValue46; + + /** + * 47次B相谐波 + */ + @TableField(value = "B_Value_47") + private String bValue47; + + /** + * 48次B相谐波 + */ + @TableField(value = "B_Value_48") + private String bValue48; + + /** + * 49次B相谐波 + */ + @TableField(value = "B_Value_49") + private String bValue49; + + /** + * 50次B相谐波 + */ + @TableField(value = "B_Value_50") + private String bValue50; + + /** + * C相基波 + */ + @TableField(value = "C_Value_1") + private String cValue1; + + /** + * 2次C相谐波 + */ + @TableField(value = "C_Value_2") + private String cValue2; + + /** + * 3次C相谐波 + */ + @TableField(value = "C_Value_3") + private String cValue3; + + /** + * 4次C相谐波 + */ + @TableField(value = "C_Value_4") + private String cValue4; + + /** + * 5次C相谐波 + */ + @TableField(value = "C_Value_5") + private String cValue5; + + /** + * 6次C相谐波 + */ + @TableField(value = "C_Value_6") + private String cValue6; + + /** + * 7次C相谐波 + */ + @TableField(value = "C_Value_7") + private String cValue7; + + /** + * 8次C相谐波 + */ + @TableField(value = "C_Value_8") + private String cValue8; + + /** + * 9次C相谐波 + */ + @TableField(value = "C_Value_9") + private String cValue9; + + /** + * 10次C相谐波 + */ + @TableField(value = "C_Value_10") + private String cValue10; + + /** + * 11次C相谐波 + */ + @TableField(value = "C_Value_11") + private String cValue11; + + /** + * 12次C相谐波 + */ + @TableField(value = "C_Value_12") + private String cValue12; + + /** + * 13次C相谐波 + */ + @TableField(value = "C_Value_13") + private String cValue13; + + /** + * 14次C相谐波 + */ + @TableField(value = "C_Value_14") + private String cValue14; + + /** + * 15次C相谐波 + */ + @TableField(value = "C_Value_15") + private String cValue15; + + /** + * 16次C相谐波 + */ + @TableField(value = "C_Value_16") + private String cValue16; + + /** + * 17次C相谐波 + */ + @TableField(value = "C_Value_17") + private String cValue17; + + /** + * 18次C相谐波 + */ + @TableField(value = "C_Value_18") + private String cValue18; + + /** + * 19次C相谐波 + */ + @TableField(value = "C_Value_19") + private String cValue19; + + /** + * 20次C相谐波 + */ + @TableField(value = "C_Value_20") + private String cValue20; + + /** + * 21次C相谐波 + */ + @TableField(value = "C_Value_21") + private String cValue21; + + /** + * 22次C相谐波 + */ + @TableField(value = "C_Value_22") + private String cValue22; + + /** + * 23次C相谐波 + */ + @TableField(value = "C_Value_23") + private String cValue23; + + /** + * 24次C相谐波 + */ + @TableField(value = "C_Value_24") + private String cValue24; + + /** + * 25次C相谐波 + */ + @TableField(value = "C_Value_25") + private String cValue25; + + /** + * 26次C相谐波 + */ + @TableField(value = "C_Value_26") + private String cValue26; + + /** + * 27次C相谐波 + */ + @TableField(value = "C_Value_27") + private String cValue27; + + /** + * 28次C相谐波 + */ + @TableField(value = "C_Value_28") + private String cValue28; + + /** + * 29次C相谐波 + */ + @TableField(value = "C_Value_29") + private String cValue29; + + /** + * 30次C相谐波 + */ + @TableField(value = "C_Value_30") + private String cValue30; + + /** + * 31次C相谐波 + */ + @TableField(value = "C_Value_31") + private String cValue31; + + /** + * 32次C相谐波 + */ + @TableField(value = "C_Value_32") + private String cValue32; + + /** + * 33次C相谐波 + */ + @TableField(value = "C_Value_33") + private String cValue33; + + /** + * 34次C相谐波 + */ + @TableField(value = "C_Value_34") + private String cValue34; + + /** + * 35次C相谐波 + */ + @TableField(value = "C_Value_35") + private String cValue35; + + /** + * 36次C相谐波 + */ + @TableField(value = "C_Value_36") + private String cValue36; + + /** + * 37次C相谐波 + */ + @TableField(value = "C_Value_37") + private String cValue37; + + /** + * 38次C相谐波 + */ + @TableField(value = "C_Value_38") + private String cValue38; + + /** + * 39次C相谐波 + */ + @TableField(value = "C_Value_39") + private String cValue39; + + /** + * 40次C相谐波 + */ + @TableField(value = "C_Value_40") + private String cValue40; + + /** + * 41次C相谐波 + */ + @TableField(value = "C_Value_41") + private String cValue41; + + /** + * 42次C相谐波 + */ + @TableField(value = "C_Value_42") + private String cValue42; + + /** + * 43次C相谐波 + */ + @TableField(value = "C_Value_43") + private String cValue43; + + /** + * 44次C相谐波 + */ + @TableField(value = "C_Value_44") + private String cValue44; + + /** + * 45次C相谐波 + */ + @TableField(value = "C_Value_45") + private String cValue45; + + /** + * 46次C相谐波 + */ + @TableField(value = "C_Value_46") + private String cValue46; + + /** + * 47次C相谐波 + */ + @TableField(value = "C_Value_47") + private String cValue47; + + /** + * 48次C相谐波 + */ + @TableField(value = "C_Value_48") + private String cValue48; + + /** + * 49次C相谐波 + */ + @TableField(value = "C_Value_49") + private String cValue49; + + /** + * 50次C相谐波 + */ + @TableField(value = "C_Value_50") + private String cValue50; +} diff --git a/storage/src/main/java/com/njcn/gather/storage/pojo/po/ContrastNonHarmonicResult.java b/storage/src/main/java/com/njcn/gather/storage/pojo/po/ContrastNonHarmonicResult.java new file mode 100644 index 00000000..c2791694 --- /dev/null +++ b/storage/src/main/java/com/njcn/gather/storage/pojo/po/ContrastNonHarmonicResult.java @@ -0,0 +1,34 @@ +package com.njcn.gather.storage.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * @author caozehui + * @data 2025-08-06 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "ad_harmonic_xx") +public class ContrastNonHarmonicResult extends ContrastBaseResult { + /** + * A相值 + */ + private String aValue; + + /** + * B相值 + */ + private String bValue; + + /** + * C相值 + */ + private String cValue; + + /** + * T相值(没有相别的则存这里) + */ + private String tValue; +} diff --git a/storage/src/main/java/com/njcn/gather/storage/pojo/po/AdBaseResult.java b/storage/src/main/java/com/njcn/gather/storage/pojo/po/SimAndDigBaseResult.java similarity index 52% rename from storage/src/main/java/com/njcn/gather/storage/pojo/po/AdBaseResult.java rename to storage/src/main/java/com/njcn/gather/storage/pojo/po/SimAndDigBaseResult.java index fb39cd8c..653bc2f8 100644 --- a/storage/src/main/java/com/njcn/gather/storage/pojo/po/AdBaseResult.java +++ b/storage/src/main/java/com/njcn/gather/storage/pojo/po/SimAndDigBaseResult.java @@ -1,17 +1,15 @@ package com.njcn.gather.storage.pojo.po; import lombok.Data; +import lombok.EqualsAndHashCode; /** * @author caozehui * @data 2024-12-30 */ @Data -public class AdBaseResult { - /** - * 监测点Id - */ - private String monitorId; +@EqualsAndHashCode(callSuper = true) +public class SimAndDigBaseResult extends BaseResult { /** * 检测脚本Id @@ -22,14 +20,4 @@ public class AdBaseResult { * 总检测脚本中的测试项序号 */ private Integer sort; - - /** - * 0.不合格 1.合格 - */ - private Integer resultFlag; - - /** - * 检测指标,字典表 - */ - private String adType; } diff --git a/storage/src/main/java/com/njcn/gather/storage/pojo/po/AdHarmonicResult.java b/storage/src/main/java/com/njcn/gather/storage/pojo/po/SimAndDigHarmonicResult.java similarity index 95% rename from storage/src/main/java/com/njcn/gather/storage/pojo/po/AdHarmonicResult.java rename to storage/src/main/java/com/njcn/gather/storage/pojo/po/SimAndDigHarmonicResult.java index 60bb1e64..390799ea 100644 --- a/storage/src/main/java/com/njcn/gather/storage/pojo/po/AdHarmonicResult.java +++ b/storage/src/main/java/com/njcn/gather/storage/pojo/po/SimAndDigHarmonicResult.java @@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.annotation.TableName; import java.time.LocalDateTime; +import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; @@ -16,49 +18,13 @@ import lombok.Setter; * @author cdf * @since 2024-12-24 */ -@Getter -@Setter +@Data +@EqualsAndHashCode(callSuper = true) @TableName("ad_harmonic_xx") -public class AdHarmonicResult { +public class SimAndDigHarmonicResult extends SimAndDigBaseResult { private static final long serialVersionUID = 1L; - - /** - * 监测点Id - */ - private String monitorId; - - /** - * 时间 - */ - private LocalDateTime timeId; - - /** - * 检测脚本子表Id,字典表 - */ - private String scriptId; - - /** - * 总检测脚本中的测试项序号 - */ - private Integer sort; - - /** - * 检测指标,字典表 - */ - private String adType; - - /** - * 数据指标,只有数据源为分钟统计时候才会使用(最大、最小、平均、CP95,默认平均值),字典表 - */ - private String dataType; - - /** - * 1.合格 2.不合格 4.无法处理 - */ - private Integer resultFlag; - /** * A相基波 */ diff --git a/storage/src/main/java/com/njcn/gather/storage/pojo/po/SimAndDigNonHarmonicResult.java b/storage/src/main/java/com/njcn/gather/storage/pojo/po/SimAndDigNonHarmonicResult.java new file mode 100644 index 00000000..f210eed2 --- /dev/null +++ b/storage/src/main/java/com/njcn/gather/storage/pojo/po/SimAndDigNonHarmonicResult.java @@ -0,0 +1,41 @@ +package com.njcn.gather.storage.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * 监测数据表 + *

+ * + * @author cdf + * @since 2024-12-24 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName(value = "ad_harmonic_xx") +public class SimAndDigNonHarmonicResult extends SimAndDigBaseResult { + + private static final long serialVersionUID = 1L; + + /** + * A相值 + */ + private String aValue; + + /** + * B相值 + */ + private String bValue; + + /** + * C相值 + */ + private String cValue; + + /** + * T相值(没有相别的则存这里) + */ + private String tValue; +} diff --git a/storage/src/main/java/com/njcn/gather/storage/service/ContrastHarmonicService.java b/storage/src/main/java/com/njcn/gather/storage/service/ContrastHarmonicService.java new file mode 100644 index 00000000..1e68e449 --- /dev/null +++ b/storage/src/main/java/com/njcn/gather/storage/service/ContrastHarmonicService.java @@ -0,0 +1,11 @@ +package com.njcn.gather.storage.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.gather.storage.pojo.po.ContrastHarmonicResult; + +/** + * @author caozehui + * @data 2025-07-28 + */ +public interface ContrastHarmonicService extends IService { +} diff --git a/storage/src/main/java/com/njcn/gather/storage/service/ContrastNonHarmonicService.java b/storage/src/main/java/com/njcn/gather/storage/service/ContrastNonHarmonicService.java new file mode 100644 index 00000000..6cebebfb --- /dev/null +++ b/storage/src/main/java/com/njcn/gather/storage/service/ContrastNonHarmonicService.java @@ -0,0 +1,12 @@ +package com.njcn.gather.storage.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.njcn.gather.storage.pojo.po.ContrastNonHarmonicResult; + +/** + * @author caozehui + * @data 2025-07-28 + */ +public interface ContrastNonHarmonicService extends IService { + +} diff --git a/storage/src/main/java/com/njcn/gather/storage/service/DetectionDataDealService.java b/storage/src/main/java/com/njcn/gather/storage/service/DetectionDataDealService.java index 82eb14cb..bc08a2a5 100644 --- a/storage/src/main/java/com/njcn/gather/storage/service/DetectionDataDealService.java +++ b/storage/src/main/java/com/njcn/gather/storage/service/DetectionDataDealService.java @@ -1,24 +1,25 @@ package com.njcn.gather.storage.service; import com.njcn.db.mybatisplus.service.IReplenishMybatisService; -import com.njcn.gather.storage.pojo.po.AdHarmonicResult; -import com.njcn.gather.storage.pojo.po.AdNonHarmonicResult; +import com.njcn.gather.storage.pojo.po.BaseResult; +import com.njcn.gather.storage.pojo.po.ContrastNonHarmonicResult; +import com.njcn.gather.storage.pojo.po.SimAndDigHarmonicResult; +import com.njcn.gather.storage.pojo.po.SimAndDigNonHarmonicResult; import java.util.List; import java.util.Map; -public interface DetectionDataDealService extends IReplenishMybatisService { +public interface DetectionDataDealService extends IReplenishMybatisService { - Boolean acceptAdNon(List adNonHarmonicResultList,String code); + Boolean acceptAdNon(List SimAndDigNonHarmonicResultList,String code); - Boolean acceptAd(List adHarmonicResultList,String code); + Boolean acceptAd(List SimAndDigHarmonicResultList,String code); + Boolean acceptNonHarmonicResult(List nonHarmonicResultList, String code); - Boolean acceptAdNonResult(List adNonHarmonicResultList,String code); - - Boolean acceptAdResult(List adHarmonicResultList,String code); + Boolean acceptAdResult(List SimAndDigHarmonicResultList,String code); /** * 根据终端id查询终端所有监测项目是否合格 diff --git a/storage/src/main/java/com/njcn/gather/storage/service/AdHarmonicService.java b/storage/src/main/java/com/njcn/gather/storage/service/SimAndDigHarmonicService.java similarity index 69% rename from storage/src/main/java/com/njcn/gather/storage/service/AdHarmonicService.java rename to storage/src/main/java/com/njcn/gather/storage/service/SimAndDigHarmonicService.java index ad97fa25..0c43983b 100644 --- a/storage/src/main/java/com/njcn/gather/storage/service/AdHarmonicService.java +++ b/storage/src/main/java/com/njcn/gather/storage/service/SimAndDigHarmonicService.java @@ -3,8 +3,8 @@ package com.njcn.gather.storage.service; import com.baomidou.mybatisplus.extension.service.IService; import com.njcn.gather.storage.pojo.param.SingleNonHarmParam; import com.njcn.gather.storage.pojo.param.StorageParam; -import com.njcn.gather.storage.pojo.po.AdBaseResult; -import com.njcn.gather.storage.pojo.po.AdHarmonicResult; +import com.njcn.gather.storage.pojo.po.SimAndDigBaseResult; +import com.njcn.gather.storage.pojo.po.SimAndDigHarmonicResult; import com.njcn.gather.storage.pojo.vo.RawDataVO; import com.njcn.gather.storage.pojo.vo.RawResultDataVO; @@ -15,7 +15,7 @@ import java.util.Map; * @author caozehui * @data 2024-12-30 */ -public interface AdHarmonicService extends IService { +public interface SimAndDigHarmonicService extends IService { /** * 根据设备ID和通道号获取谐波结果 @@ -26,7 +26,7 @@ public interface AdHarmonicService extends IService { * @param code 计划code * @return 谐波结果 */ - List get(String scriptId, List index, String deviceId, String chnNum, String code); + List get(String scriptId, List index, String deviceId, String chnNum, String code); /** * 查询原始数据 @@ -52,7 +52,7 @@ public interface AdHarmonicService extends IService { */ List getIndex(StorageParam param); - AdHarmonicResult getSingleResult(SingleNonHarmParam singleNonHarmParam); + SimAndDigHarmonicResult getSingleResult(SingleNonHarmParam singleNonHarmParam); /** * 获取所有谐波结果数据 @@ -62,7 +62,7 @@ public interface AdHarmonicService extends IService { * @param devId 设备ID * @return */ - List listAllResultData(String scriptId, String code, String devId); + List listAllResultData(String scriptId, String code, String devId); /** * 获取所有原始数据 @@ -72,5 +72,5 @@ public interface AdHarmonicService extends IService { * @param devId * @return */ - List listAllRawData(String scriptId, String code, String devId); + List listAllRawData(String scriptId, String code, String devId); } diff --git a/storage/src/main/java/com/njcn/gather/storage/service/AdNonHarmonicService.java b/storage/src/main/java/com/njcn/gather/storage/service/SimAndDigNonHarmonicService.java similarity index 66% rename from storage/src/main/java/com/njcn/gather/storage/service/AdNonHarmonicService.java rename to storage/src/main/java/com/njcn/gather/storage/service/SimAndDigNonHarmonicService.java index 0373aedb..7db890ad 100644 --- a/storage/src/main/java/com/njcn/gather/storage/service/AdNonHarmonicService.java +++ b/storage/src/main/java/com/njcn/gather/storage/service/SimAndDigNonHarmonicService.java @@ -3,15 +3,15 @@ package com.njcn.gather.storage.service; import com.baomidou.mybatisplus.extension.service.IService; import com.njcn.gather.storage.pojo.param.SingleNonHarmParam; import com.njcn.gather.storage.pojo.param.StorageParam; -import com.njcn.gather.storage.pojo.po.AdBaseResult; -import com.njcn.gather.storage.pojo.po.AdNonHarmonicResult; +import com.njcn.gather.storage.pojo.po.SimAndDigBaseResult; +import com.njcn.gather.storage.pojo.po.SimAndDigNonHarmonicResult; import com.njcn.gather.storage.pojo.vo.RawDataVO; import com.njcn.gather.storage.pojo.vo.RawResultDataVO; import java.util.List; import java.util.Map; -public interface AdNonHarmonicService extends IService { +public interface SimAndDigNonHarmonicService extends IService { /** @@ -23,7 +23,7 @@ public interface AdNonHarmonicService extends IService { * @param chnNum 通道号,从1开始 * @return 非谐波结果 */ - List get(String scriptId, List sort, String deviceId, String chnNum, String code); + List listSimAndDigBaseResult(String scriptId, List sort, String deviceId, String chnNum, String code); /** * 非谐波原始数据展示 @@ -45,7 +45,7 @@ public interface AdNonHarmonicService extends IService { * 根据参数查询指定非谐波结果 * @param singleNonHarmParam 查询参数 */ - AdNonHarmonicResult getSingleResult(SingleNonHarmParam singleNonHarmParam); + SimAndDigNonHarmonicResult getSingleSimAndDigBaseResult(SingleNonHarmParam singleNonHarmParam); /** * 获取所有结果数据 @@ -54,13 +54,13 @@ public interface AdNonHarmonicService extends IService { * @param devId * @return */ - List listAllResultData(String scriptId,String code,String devId); + List listSimAndDigBaseResult(String scriptId,String code,String devId); /** * 根据查询条件查找结果 * @param param 查询条件 */ - List queryByCondition(SingleNonHarmParam param); + List queryByCondition(SingleNonHarmParam param); /** @@ -72,5 +72,5 @@ public interface AdNonHarmonicService extends IService { * @param devId * @return */ - List listAllRawData(String scriptId, String code, String devId); + List listAllSimAndDigRawData(String scriptId, String code, String devId); } diff --git a/storage/src/main/java/com/njcn/gather/storage/service/TableGenService.java b/storage/src/main/java/com/njcn/gather/storage/service/TableGenService.java index a8783e2a..6136a3e1 100644 --- a/storage/src/main/java/com/njcn/gather/storage/service/TableGenService.java +++ b/storage/src/main/java/com/njcn/gather/storage/service/TableGenService.java @@ -5,7 +5,7 @@ import java.util.List; public interface TableGenService { - void genAdNonHarmonicTable(String code); + void genTable(String code, boolean isContrast); /** * 批量删除表 (包括谐波表、谐波结果表、非谐波表、非谐波结果表) diff --git a/storage/src/main/java/com/njcn/gather/storage/service/impl/ContrastHarmonicServiceImpl.java b/storage/src/main/java/com/njcn/gather/storage/service/impl/ContrastHarmonicServiceImpl.java new file mode 100644 index 00000000..9435d592 --- /dev/null +++ b/storage/src/main/java/com/njcn/gather/storage/service/impl/ContrastHarmonicServiceImpl.java @@ -0,0 +1,17 @@ +package com.njcn.gather.storage.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.gather.storage.mapper.ContrastHarmonicMappper; +import com.njcn.gather.storage.pojo.po.ContrastHarmonicResult; +import com.njcn.gather.storage.service.ContrastHarmonicService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +/** + * @author caozehui + * @data 2025-07-28 + */ +@Service +@RequiredArgsConstructor +public class ContrastHarmonicServiceImpl extends ServiceImpl implements ContrastHarmonicService { +} diff --git a/storage/src/main/java/com/njcn/gather/storage/service/impl/ContrastNonHarmonicServiceImpl.java b/storage/src/main/java/com/njcn/gather/storage/service/impl/ContrastNonHarmonicServiceImpl.java new file mode 100644 index 00000000..53133f27 --- /dev/null +++ b/storage/src/main/java/com/njcn/gather/storage/service/impl/ContrastNonHarmonicServiceImpl.java @@ -0,0 +1,17 @@ +package com.njcn.gather.storage.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.gather.storage.mapper.ContrastNonHarmonicMappper; +import com.njcn.gather.storage.pojo.po.ContrastNonHarmonicResult; +import com.njcn.gather.storage.service.ContrastNonHarmonicService; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +/** + * @author caozehui + * @data 2025-07-28 + */ +@Service +@RequiredArgsConstructor +public class ContrastNonHarmonicServiceImpl extends ServiceImpl implements ContrastNonHarmonicService { +} diff --git a/storage/src/main/java/com/njcn/gather/storage/service/impl/DetectionDataServiceImpl.java b/storage/src/main/java/com/njcn/gather/storage/service/impl/DetectionDataServiceImpl.java index 085b8fc6..d7876bde 100644 --- a/storage/src/main/java/com/njcn/gather/storage/service/impl/DetectionDataServiceImpl.java +++ b/storage/src/main/java/com/njcn/gather/storage/service/impl/DetectionDataServiceImpl.java @@ -1,19 +1,26 @@ package com.njcn.gather.storage.service.impl; +import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.njcn.db.mybatisplus.handler.DynamicTableNameHandler; import com.njcn.db.mybatisplus.service.impl.ReplenishMybatisServiceImpl; import com.njcn.gather.storage.mapper.DetectionDataDealMapper; -import com.njcn.gather.storage.pojo.po.AdHarmonicResult; -import com.njcn.gather.storage.pojo.po.AdNonHarmonicResult; -import com.njcn.gather.storage.service.AdNonHarmonicService; +import com.njcn.gather.storage.pojo.po.BaseResult; +import com.njcn.gather.storage.pojo.po.ContrastNonHarmonicResult; +import com.njcn.gather.storage.pojo.po.SimAndDigHarmonicResult; +import com.njcn.gather.storage.pojo.po.SimAndDigNonHarmonicResult; +import com.njcn.gather.storage.service.ContrastNonHarmonicService; import com.njcn.gather.storage.service.DetectionDataDealService; +import com.njcn.gather.storage.service.SimAndDigNonHarmonicService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.*; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -23,23 +30,24 @@ import java.util.stream.Collectors; */ @Service @RequiredArgsConstructor -public class DetectionDataServiceImpl extends ReplenishMybatisServiceImpl implements DetectionDataDealService { +public class DetectionDataServiceImpl extends ReplenishMybatisServiceImpl implements DetectionDataDealService { - private final AdNonHarmonicService adNonHarmonicService; + private final SimAndDigNonHarmonicService adNonHarmonicService; + private final ContrastNonHarmonicService contrastNonHarmonicService; private final DetectionDataDealMapper detectionDataDealMapper; @Override @Transactional - public Boolean acceptAdNon(List adNonHarmonicResultList, String code) { + public Boolean acceptAdNon(List SimAndDigNonHarmonicResultList, String code) { String adNonTable = "ad_non_harmonic_"; DynamicTableNameHandler.setTableName(adNonTable + code); - List monitorIds = adNonHarmonicResultList.stream().map(AdNonHarmonicResult::getMonitorId).distinct().collect(Collectors.toList()); + List monitorIds = SimAndDigNonHarmonicResultList.stream().map(SimAndDigNonHarmonicResult::getMonitorId).distinct().collect(Collectors.toList()); if (CollUtil.isNotEmpty(monitorIds)) { - adNonHarmonicService.remove(new LambdaQueryWrapper().in(AdNonHarmonicResult::getMonitorId, monitorIds) - .eq(AdNonHarmonicResult::getScriptId, adNonHarmonicResultList.get(0).getScriptId()) - .eq(AdNonHarmonicResult::getSort, adNonHarmonicResultList.get(0).getSort())); - adNonHarmonicService.saveBatch(adNonHarmonicResultList, 100); + adNonHarmonicService.remove(new LambdaQueryWrapper().in(SimAndDigNonHarmonicResult::getMonitorId, monitorIds) + .eq(SimAndDigNonHarmonicResult::getScriptId, SimAndDigNonHarmonicResultList.get(0).getScriptId()) + .eq(SimAndDigNonHarmonicResult::getSort, SimAndDigNonHarmonicResultList.get(0).getSort())); + adNonHarmonicService.saveBatch(SimAndDigNonHarmonicResultList, 100); } DynamicTableNameHandler.remove(); return true; @@ -47,15 +55,15 @@ public class DetectionDataServiceImpl extends ReplenishMybatisServiceImpl adHarmonicResultList, String code) { + public Boolean acceptAd(List SimAndDigHarmonicResultList, String code) { String adTable = "ad_harmonic_"; DynamicTableNameHandler.setTableName(adTable + code); - List monitorIds = adHarmonicResultList.stream().map(AdHarmonicResult::getMonitorId).distinct().collect(Collectors.toList()); + List monitorIds = SimAndDigHarmonicResultList.stream().map(SimAndDigHarmonicResult::getMonitorId).distinct().collect(Collectors.toList()); if (CollUtil.isNotEmpty(monitorIds)) { - this.remove(new LambdaQueryWrapper().in(AdHarmonicResult::getMonitorId, monitorIds) - .eq(AdHarmonicResult::getScriptId, adHarmonicResultList.get(0).getScriptId()) - .eq(AdHarmonicResult::getSort, adHarmonicResultList.get(0).getSort())); - this.saveBatch(adHarmonicResultList, 100); + this.remove(new LambdaQueryWrapper().in(SimAndDigHarmonicResult::getMonitorId, monitorIds) + .eq(SimAndDigHarmonicResult::getScriptId, SimAndDigHarmonicResultList.get(0).getScriptId()) + .eq(SimAndDigHarmonicResult::getSort, SimAndDigHarmonicResultList.get(0).getSort())); + this.saveBatch(SimAndDigHarmonicResultList, 100); } DynamicTableNameHandler.remove(); @@ -64,31 +72,46 @@ public class DetectionDataServiceImpl extends ReplenishMybatisServiceImpl adNonHarmonicResultList, String code) { - String adNonTableResult = "ad_non_harmonic_result_"; - DynamicTableNameHandler.setTableName(adNonTableResult + code); - List monitorIds = adNonHarmonicResultList.stream().map(AdNonHarmonicResult::getMonitorId).distinct().collect(Collectors.toList()); - if (CollUtil.isNotEmpty(monitorIds)) { - adNonHarmonicService.remove(new LambdaQueryWrapper().in(AdNonHarmonicResult::getMonitorId, monitorIds) - .eq(AdNonHarmonicResult::getScriptId, adNonHarmonicResultList.get(0).getScriptId()) - .eq(AdNonHarmonicResult::getSort, adNonHarmonicResultList.get(0).getSort())); - adNonHarmonicService.saveBatch(adNonHarmonicResultList, 100); + public Boolean acceptNonHarmonicResult(List nonHarmonicResultList, String code) { + if (CollUtil.isNotEmpty(nonHarmonicResultList)) { + String adNonTableResult = "ad_non_harmonic_result_"; + DynamicTableNameHandler.setTableName(adNonTableResult + code); + if (nonHarmonicResultList.get(0) instanceof SimAndDigNonHarmonicResult) { + List simAndDigNonHarmonicResultList = BeanUtil.copyToList(nonHarmonicResultList, SimAndDigNonHarmonicResult.class); + List monitorIds = simAndDigNonHarmonicResultList.stream().map(SimAndDigNonHarmonicResult::getMonitorId).distinct().collect(Collectors.toList()); + if (CollUtil.isNotEmpty(monitorIds)) { + adNonHarmonicService.remove(new LambdaQueryWrapper().in(SimAndDigNonHarmonicResult::getMonitorId, monitorIds) + .eq(SimAndDigNonHarmonicResult::getScriptId, simAndDigNonHarmonicResultList.get(0).getScriptId()) + .eq(SimAndDigNonHarmonicResult::getSort, simAndDigNonHarmonicResultList.get(0).getSort())); + adNonHarmonicService.saveBatch(simAndDigNonHarmonicResultList, 100); + } + } + if (nonHarmonicResultList.get(0) instanceof ContrastNonHarmonicResult) { + List contrastNonHarmonicResultList = BeanUtil.copyToList(nonHarmonicResultList, ContrastNonHarmonicResult.class); + List monitorIds = contrastNonHarmonicResultList.stream().map(ContrastNonHarmonicResult::getMonitorId).distinct().collect(Collectors.toList()); + if (CollUtil.isNotEmpty(monitorIds)) { + contrastNonHarmonicService.remove(new LambdaQueryWrapper().in(ContrastNonHarmonicResult::getMonitorId, monitorIds) + .eq(ContrastNonHarmonicResult::getErrorId, contrastNonHarmonicResultList.get(0).getErrorId()) + .eq(ContrastNonHarmonicResult::getNum, contrastNonHarmonicResultList.get(0).getNum())); + contrastNonHarmonicService.saveBatch(contrastNonHarmonicResultList, 100); + } + } + DynamicTableNameHandler.remove(); } - DynamicTableNameHandler.remove(); return true; } @Override @Transactional - public Boolean acceptAdResult(List adHarmonicResultList, String code) { + public Boolean acceptAdResult(List simAndDigHarmonicResultList, String code) { String adTableResult = "ad_harmonic_result_"; DynamicTableNameHandler.setTableName(adTableResult + code); - List monitorIds = adHarmonicResultList.stream().map(AdHarmonicResult::getMonitorId).distinct().collect(Collectors.toList()); + List monitorIds = simAndDigHarmonicResultList.stream().map(SimAndDigHarmonicResult::getMonitorId).distinct().collect(Collectors.toList()); if (CollUtil.isNotEmpty(monitorIds)) { - this.remove(new LambdaQueryWrapper().in(AdHarmonicResult::getMonitorId, monitorIds) - .eq(AdHarmonicResult::getScriptId, adHarmonicResultList.get(0).getScriptId()) - .eq(AdHarmonicResult::getSort, adHarmonicResultList.get(0).getSort())); - this.saveBatch(adHarmonicResultList, 100); + this.remove(new LambdaQueryWrapper().in(SimAndDigHarmonicResult::getMonitorId, monitorIds) + .eq(SimAndDigHarmonicResult::getScriptId, simAndDigHarmonicResultList.get(0).getScriptId()) + .eq(SimAndDigHarmonicResult::getSort, simAndDigHarmonicResultList.get(0).getSort())); + this.saveBatch(simAndDigHarmonicResultList, 100); } DynamicTableNameHandler.remove(); return true; @@ -97,30 +120,30 @@ public class DetectionDataServiceImpl extends ReplenishMybatisServiceImpl devResult(List ids, List valueType, String code) { List disabledScriptDtlIndexs = detectionDataDealMapper.listDisabledScriptDtlIndexs(ids.get(0)); - List noHarm = new ArrayList<>(); + List noHarm = new ArrayList<>(); for (String id : ids) { DynamicTableNameHandler.setTableName("ad_non_harmonic_result_" + code); - noHarm.addAll(adNonHarmonicService.list(new LambdaQueryWrapper() - .like(AdNonHarmonicResult::getMonitorId, id) - .notIn(CollUtil.isNotEmpty(disabledScriptDtlIndexs), AdNonHarmonicResult::getSort, disabledScriptDtlIndexs) - .in(CollUtil.isNotEmpty(valueType), AdNonHarmonicResult::getAdType, valueType) + noHarm.addAll(adNonHarmonicService.list(new LambdaQueryWrapper() + .like(SimAndDigNonHarmonicResult::getMonitorId, id) + .notIn(CollUtil.isNotEmpty(disabledScriptDtlIndexs), SimAndDigNonHarmonicResult::getSort, disabledScriptDtlIndexs) + .in(CollUtil.isNotEmpty(valueType), SimAndDigNonHarmonicResult::getAdType, valueType) )); } DynamicTableNameHandler.remove(); - List harm = new ArrayList<>(); + List harm = new ArrayList<>(); for (String id : ids) { DynamicTableNameHandler.setTableName("ad_harmonic_result_" + code); - harm.addAll(this.list(new LambdaQueryWrapper() - .like(AdHarmonicResult::getMonitorId, id) - .notIn(CollUtil.isNotEmpty(disabledScriptDtlIndexs), AdHarmonicResult::getSort, disabledScriptDtlIndexs) - .in(CollUtil.isNotEmpty(valueType), AdHarmonicResult::getAdType, valueType) + harm.addAll(this.list(new LambdaQueryWrapper() + .like(SimAndDigHarmonicResult::getMonitorId, id) + .notIn(CollUtil.isNotEmpty(disabledScriptDtlIndexs), SimAndDigHarmonicResult::getSort, disabledScriptDtlIndexs) + .in(CollUtil.isNotEmpty(valueType), SimAndDigHarmonicResult::getAdType, valueType) )); } DynamicTableNameHandler.remove(); Map> noHarmMap = noHarm.stream().collect(Collectors.groupingBy(x -> x.getMonitorId().split("_")[0], - Collectors.mapping(AdNonHarmonicResult::getResultFlag, Collectors.toList()))); + Collectors.mapping(SimAndDigNonHarmonicResult::getResultFlag, Collectors.toList()))); Map> harmMap = harm.stream().collect(Collectors.groupingBy(x -> x.getMonitorId().split("_")[0], - Collectors.mapping(AdHarmonicResult::getResultFlag, Collectors.toList()))); + Collectors.mapping(SimAndDigHarmonicResult::getResultFlag, Collectors.toList()))); Map map = new HashMap<>(2); for (String id : ids) { List resultFlags = new ArrayList<>(); diff --git a/storage/src/main/java/com/njcn/gather/storage/service/impl/AdHarmonicServiceImpl.java b/storage/src/main/java/com/njcn/gather/storage/service/impl/SimAndDigHarmonicServiceImpl.java similarity index 63% rename from storage/src/main/java/com/njcn/gather/storage/service/impl/AdHarmonicServiceImpl.java rename to storage/src/main/java/com/njcn/gather/storage/service/impl/SimAndDigHarmonicServiceImpl.java index d2c53650..8dc53adf 100644 --- a/storage/src/main/java/com/njcn/gather/storage/service/impl/AdHarmonicServiceImpl.java +++ b/storage/src/main/java/com/njcn/gather/storage/service/impl/SimAndDigHarmonicServiceImpl.java @@ -11,16 +11,16 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.njcn.db.mybatisplus.handler.DynamicTableNameHandler; -import com.njcn.gather.storage.mapper.AdHarmonicMappper; -import com.njcn.gather.storage.mapper.AdNonHarmonicMapper; +import com.njcn.gather.storage.mapper.SimAndDigHarmonicMappper; +import com.njcn.gather.storage.mapper.SimAndDigNonHarmonicMapper; import com.njcn.gather.storage.pojo.param.SingleNonHarmParam; import com.njcn.gather.storage.pojo.param.StorageParam; -import com.njcn.gather.storage.pojo.po.AdBaseResult; -import com.njcn.gather.storage.pojo.po.AdHarmonicResult; -import com.njcn.gather.storage.pojo.po.AdNonHarmonicResult; +import com.njcn.gather.storage.pojo.po.SimAndDigBaseResult; +import com.njcn.gather.storage.pojo.po.SimAndDigHarmonicResult; +import com.njcn.gather.storage.pojo.po.SimAndDigNonHarmonicResult; import com.njcn.gather.storage.pojo.vo.RawDataVO; import com.njcn.gather.storage.pojo.vo.RawResultDataVO; -import com.njcn.gather.storage.service.AdHarmonicService; +import com.njcn.gather.storage.service.SimAndDigHarmonicService; import com.njcn.gather.system.dictionary.mapper.DictTreeMapper; import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum; import com.njcn.gather.system.dictionary.pojo.po.DictTree; @@ -42,42 +42,42 @@ import java.util.stream.Collectors; */ @Service @RequiredArgsConstructor -public class AdHarmonicServiceImpl extends ServiceImpl implements AdHarmonicService { +public class SimAndDigHarmonicServiceImpl extends ServiceImpl implements SimAndDigHarmonicService { - private final AdNonHarmonicMapper adNonHarmonicMapper; + private final SimAndDigNonHarmonicMapper adNonHarmonicMapper; private final DictTreeMapper dictTreeMapper; private final IDictTreeService dictTreeService; @Override - public List get(String scriptId, List sort, String deviceId, String chnNum, String code) { + public List get(String scriptId, List sort, String deviceId, String chnNum, String code) { String prefix = "ad_harmonic_result_"; DynamicTableNameHandler.setTableName(prefix + code); - MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); String monitorId = deviceId + "_" + chnNum; if ("-1".equals(chnNum)) { monitorId = deviceId; } - wrapper.like(AdHarmonicResult::getMonitorId, monitorId) - .eq(ObjectUtil.isNotNull(scriptId), AdHarmonicResult::getScriptId, scriptId) - .in(CollUtil.isNotEmpty(sort), AdHarmonicResult::getSort, sort); - List list = this.getBaseMapper().selectJoinList(AdHarmonicResult.class, wrapper); + wrapper.like(SimAndDigHarmonicResult::getMonitorId, monitorId) + .eq(ObjectUtil.isNotNull(scriptId), SimAndDigHarmonicResult::getScriptId, scriptId) + .in(CollUtil.isNotEmpty(sort), SimAndDigHarmonicResult::getSort, sort); + List list = this.getBaseMapper().selectJoinList(SimAndDigHarmonicResult.class, wrapper); DynamicTableNameHandler.remove(); - return BeanUtil.copyToList(list, AdBaseResult.class); + return BeanUtil.copyToList(list, SimAndDigBaseResult.class); } @Override public Map> listHarmData(StorageParam param) { String prefix = "ad_harmonic_"; DynamicTableNameHandler.setTableName(prefix + param.getCode()); - MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); - wrapper.like(AdHarmonicResult::getMonitorId, param.getDevId() + "_" + param.getDevNum()) - .eq(ObjectUtil.isNotNull(param.getScriptId()), AdHarmonicResult::getScriptId, param.getScriptId()) - .in(ObjectUtil.isNotEmpty(param.getIndex()), AdHarmonicResult::getSort, param.getIndex()) - .orderByAsc(AdHarmonicResult::getTimeId) + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + wrapper.like(SimAndDigHarmonicResult::getMonitorId, param.getDevId() + "_" + param.getDevNum()) + .eq(ObjectUtil.isNotNull(param.getScriptId()), SimAndDigHarmonicResult::getScriptId, param.getScriptId()) + .in(ObjectUtil.isNotEmpty(param.getIndex()), SimAndDigHarmonicResult::getSort, param.getIndex()) + .orderByAsc(SimAndDigHarmonicResult::getTimeId) ; - List adHarmonicResults = this.getBaseMapper().selectJoinList(AdHarmonicResult.class, wrapper); - LinkedHashMap> adMap = - adHarmonicResults.stream().collect(Collectors.groupingBy(AdHarmonicResult::getAdType, LinkedHashMap::new, Collectors.toList())); + List simAndDigHarmonicResults = this.getBaseMapper().selectJoinList(SimAndDigHarmonicResult.class, wrapper); + LinkedHashMap> adMap = + simAndDigHarmonicResults.stream().collect(Collectors.groupingBy(SimAndDigHarmonicResult::getAdType, LinkedHashMap::new, Collectors.toList())); List dictTreeById = dictTreeService.getDictTreeById(new ArrayList<>(adMap.keySet())); Map dictTreeByName = dictTreeById.stream().collect(Collectors.toMap(DictTree::getId, Function.identity())); Map> info = new LinkedHashMap<>(3); @@ -95,13 +95,13 @@ public class AdHarmonicServiceImpl extends ServiceImpl> listHarmResultData(StorageParam param) { String prefix = "ad_harmonic_result_"; DynamicTableNameHandler.setTableName(prefix + param.getCode()); - MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); - wrapper.like(AdHarmonicResult::getMonitorId, param.getDevId() + "_" + param.getDevNum()) - .eq(ObjectUtil.isNotNull(param.getScriptId()), AdHarmonicResult::getScriptId, param.getScriptId()) - .in(ObjectUtil.isNotEmpty(param.getIndex()), AdHarmonicResult::getSort, param.getIndex()) - .orderByAsc(AdHarmonicResult::getTimeId); - List adHarmonicResults = this.getBaseMapper().selectJoinList(AdHarmonicResult.class, wrapper); - LinkedHashMap> adMap = - adHarmonicResults.stream().collect(Collectors.groupingBy(AdHarmonicResult::getAdType, LinkedHashMap::new, Collectors.toList())); + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + wrapper.like(SimAndDigHarmonicResult::getMonitorId, param.getDevId() + "_" + param.getDevNum()) + .eq(ObjectUtil.isNotNull(param.getScriptId()), SimAndDigHarmonicResult::getScriptId, param.getScriptId()) + .in(ObjectUtil.isNotEmpty(param.getIndex()), SimAndDigHarmonicResult::getSort, param.getIndex()) + .orderByAsc(SimAndDigHarmonicResult::getTimeId); + List adHarmonicResults = this.getBaseMapper().selectJoinList(SimAndDigHarmonicResult.class, wrapper); + LinkedHashMap> adMap = + adHarmonicResults.stream().collect(Collectors.groupingBy(SimAndDigHarmonicResult::getAdType, LinkedHashMap::new, Collectors.toList())); List dictTreeById = dictTreeService.getDictTreeById(new ArrayList<>(adMap.keySet())); Map dictTreeByName = dictTreeById.stream().collect(Collectors.toMap(DictTree::getId, Function.identity())); Map> info = new LinkedHashMap<>(3); @@ -161,7 +161,7 @@ public class AdHarmonicServiceImpl extends ServiceImpl lambdaQueryWrapper = new LambdaQueryWrapper<>(); - lambdaQueryWrapper.select(AdHarmonicResult::getSort) - .likeRight(StrUtil.isNotBlank(param.getDevId()), AdHarmonicResult::getMonitorId, param.getDevId()) - .ne(AdHarmonicResult::getResultFlag, 1) - .ne(AdHarmonicResult::getResultFlag, 4) - .ne(AdHarmonicResult::getResultFlag, 5) - .eq(AdHarmonicResult::getScriptId, param.getScriptId()); - List adHarmonicResultList = this.list(lambdaQueryWrapper); - List indexes = new ArrayList<>(adHarmonicResultList.stream().map(AdHarmonicResult::getSort).distinct().collect(Collectors.toList())); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.select(SimAndDigHarmonicResult::getSort) + .likeRight(StrUtil.isNotBlank(param.getDevId()), SimAndDigHarmonicResult::getMonitorId, param.getDevId()) + .ne(SimAndDigHarmonicResult::getResultFlag, 1) + .ne(SimAndDigHarmonicResult::getResultFlag, 4) + .ne(SimAndDigHarmonicResult::getResultFlag, 5) + .eq(SimAndDigHarmonicResult::getScriptId, param.getScriptId()); + List adHarmonicResultList = this.list(lambdaQueryWrapper); + List indexes = new ArrayList<>(adHarmonicResultList.stream().map(SimAndDigHarmonicResult::getSort).distinct().collect(Collectors.toList())); DynamicTableNameHandler.setTableName(prefixNon + param.getCode()); - LambdaQueryWrapper resultLambdaQueryWrapper = new LambdaQueryWrapper<>(); - resultLambdaQueryWrapper.select(AdNonHarmonicResult::getSort) - .likeRight(StrUtil.isNotBlank(param.getDevId()), AdNonHarmonicResult::getMonitorId, param.getDevId()) - .ne(AdNonHarmonicResult::getResultFlag, 1) - .ne(AdNonHarmonicResult::getResultFlag, 4) - .ne(AdNonHarmonicResult::getResultFlag, 5) - .eq(AdNonHarmonicResult::getScriptId, param.getScriptId()); - List nonHarmonicResults = adNonHarmonicMapper.selectList(resultLambdaQueryWrapper); - indexes.addAll(nonHarmonicResults.stream().map(AdNonHarmonicResult::getSort).distinct().collect(Collectors.toList())); + LambdaQueryWrapper resultLambdaQueryWrapper = new LambdaQueryWrapper<>(); + resultLambdaQueryWrapper.select(SimAndDigNonHarmonicResult::getSort) + .likeRight(StrUtil.isNotBlank(param.getDevId()), SimAndDigNonHarmonicResult::getMonitorId, param.getDevId()) + .ne(SimAndDigNonHarmonicResult::getResultFlag, 1) + .ne(SimAndDigNonHarmonicResult::getResultFlag, 4) + .ne(SimAndDigNonHarmonicResult::getResultFlag, 5) + .eq(SimAndDigNonHarmonicResult::getScriptId, param.getScriptId()); + List nonHarmonicResults = adNonHarmonicMapper.selectList(resultLambdaQueryWrapper); + indexes.addAll(nonHarmonicResults.stream().map(SimAndDigNonHarmonicResult::getSort).distinct().collect(Collectors.toList())); DynamicTableNameHandler.remove(); return indexes; } @Override - public AdHarmonicResult getSingleResult(SingleNonHarmParam singleNonHarmParam) { + public SimAndDigHarmonicResult getSingleResult(SingleNonHarmParam singleNonHarmParam) { if (ObjectUtil.isNotNull(singleNonHarmParam)) { String prefix = "ad_harmonic_result_"; DynamicTableNameHandler.setTableName(prefix + singleNonHarmParam.getPlanCode()); - MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); - wrapper.like(AdHarmonicResult::getMonitorId, singleNonHarmParam.getDevId() + "_" + singleNonHarmParam.getChannelNo()) - .eq(AdHarmonicResult::getSort, singleNonHarmParam.getSort()) - .eq(AdHarmonicResult::getAdType, singleNonHarmParam.getAdType()); - List adHarmonicResults = this.getBaseMapper().selectJoinList(AdHarmonicResult.class, wrapper); + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + wrapper.like(SimAndDigHarmonicResult::getMonitorId, singleNonHarmParam.getDevId() + "_" + singleNonHarmParam.getChannelNo()) + .eq(SimAndDigHarmonicResult::getSort, singleNonHarmParam.getSort()) + .eq(SimAndDigHarmonicResult::getAdType, singleNonHarmParam.getAdType()); + List adHarmonicResults = this.getBaseMapper().selectJoinList(SimAndDigHarmonicResult.class, wrapper); DynamicTableNameHandler.remove(); if (CollectionUtil.isNotEmpty(adHarmonicResults)) { return adHarmonicResults.get(0); @@ -248,29 +248,29 @@ public class AdHarmonicServiceImpl extends ServiceImpl listAllResultData(String scriptId, String code, String devId) { + public List listAllResultData(String scriptId, String code, String devId) { String prefix = "ad_harmonic_result_" + code; DynamicTableNameHandler.setTableName(prefix); - MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); - wrapper.selectAll(AdHarmonicResult.class) - .selectAs(DictTree::getCode, AdHarmonicResult::getAdType) - .leftJoin(DictTree.class, DictTree::getId, AdHarmonicResult::getAdType).eq(AdHarmonicResult::getScriptId, scriptId) - .likeRight(AdHarmonicResult::getMonitorId, devId); - List results = this.getBaseMapper().selectJoinList(AdHarmonicResult.class, wrapper); + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + wrapper.selectAll(SimAndDigHarmonicResult.class) + .selectAs(DictTree::getCode, SimAndDigHarmonicResult::getAdType) + .leftJoin(DictTree.class, DictTree::getId, SimAndDigHarmonicResult::getAdType).eq(SimAndDigHarmonicResult::getScriptId, scriptId) + .likeRight(SimAndDigHarmonicResult::getMonitorId, devId); + List results = this.getBaseMapper().selectJoinList(SimAndDigHarmonicResult.class, wrapper); DynamicTableNameHandler.remove(); return results; } @Override - public List listAllRawData(String scriptId, String code, String devId) { + public List listAllRawData(String scriptId, String code, String devId) { String prefix = "ad_harmonic_" + code; DynamicTableNameHandler.setTableName(prefix); - MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); - wrapper.selectAll(AdHarmonicResult.class) - .selectAs(DictTree::getCode, AdHarmonicResult::getAdType) - .leftJoin(DictTree.class, DictTree::getId, AdHarmonicResult::getAdType).eq(AdHarmonicResult::getScriptId, scriptId) - .likeRight(AdHarmonicResult::getMonitorId, devId); - List results = this.getBaseMapper().selectJoinList(AdHarmonicResult.class, wrapper); + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + wrapper.selectAll(SimAndDigHarmonicResult.class) + .selectAs(DictTree::getCode, SimAndDigHarmonicResult::getAdType) + .leftJoin(DictTree.class, DictTree::getId, SimAndDigHarmonicResult::getAdType).eq(SimAndDigHarmonicResult::getScriptId, scriptId) + .likeRight(SimAndDigHarmonicResult::getMonitorId, devId); + List results = this.getBaseMapper().selectJoinList(SimAndDigHarmonicResult.class, wrapper); DynamicTableNameHandler.remove(); return results; } diff --git a/storage/src/main/java/com/njcn/gather/storage/service/impl/AdNonHarmonicServiceImpl.java b/storage/src/main/java/com/njcn/gather/storage/service/impl/SimAndDigNonHarmonicServiceImpl.java similarity index 59% rename from storage/src/main/java/com/njcn/gather/storage/service/impl/AdNonHarmonicServiceImpl.java rename to storage/src/main/java/com/njcn/gather/storage/service/impl/SimAndDigNonHarmonicServiceImpl.java index c9a126e5..7712b0d8 100644 --- a/storage/src/main/java/com/njcn/gather/storage/service/impl/AdNonHarmonicServiceImpl.java +++ b/storage/src/main/java/com/njcn/gather/storage/service/impl/SimAndDigNonHarmonicServiceImpl.java @@ -10,14 +10,14 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.njcn.db.mybatisplus.handler.DynamicTableNameHandler; -import com.njcn.gather.storage.mapper.AdNonHarmonicMapper; +import com.njcn.gather.storage.mapper.SimAndDigNonHarmonicMapper; import com.njcn.gather.storage.pojo.param.SingleNonHarmParam; import com.njcn.gather.storage.pojo.param.StorageParam; -import com.njcn.gather.storage.pojo.po.AdBaseResult; -import com.njcn.gather.storage.pojo.po.AdNonHarmonicResult; +import com.njcn.gather.storage.pojo.po.SimAndDigBaseResult; +import com.njcn.gather.storage.pojo.po.SimAndDigNonHarmonicResult; import com.njcn.gather.storage.pojo.vo.RawDataVO; import com.njcn.gather.storage.pojo.vo.RawResultDataVO; -import com.njcn.gather.storage.service.AdNonHarmonicService; +import com.njcn.gather.storage.service.SimAndDigNonHarmonicService; import com.njcn.gather.system.dictionary.pojo.po.DictTree; import com.njcn.gather.system.dictionary.service.IDictTreeService; import lombok.RequiredArgsConstructor; @@ -34,46 +34,46 @@ import java.util.stream.Collectors; */ @Service @RequiredArgsConstructor -public class AdNonHarmonicServiceImpl extends ServiceImpl implements AdNonHarmonicService { +public class SimAndDigNonHarmonicServiceImpl extends ServiceImpl implements SimAndDigNonHarmonicService { private final IDictTreeService dictTreeService; @Override - public List get(String scriptId, List sort, String deviceId, String chnNum, String code) { + public List listSimAndDigBaseResult(String scriptId, List sort, String deviceId, String chnNum, String code) { String prefix = "ad_non_harmonic_result_"; DynamicTableNameHandler.setTableName(prefix + code); - MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); String monitorId = deviceId + "_" + chnNum; if ("-1".equals(chnNum)) { monitorId = deviceId; } - wrapper.like(AdNonHarmonicResult::getMonitorId, monitorId) - .eq(ObjectUtil.isNotNull(scriptId), AdNonHarmonicResult::getScriptId, scriptId) - .in(CollUtil.isNotEmpty(sort), AdNonHarmonicResult::getSort, sort); - List list = this.getBaseMapper().selectJoinList(AdNonHarmonicResult.class, wrapper); + wrapper.like(SimAndDigNonHarmonicResult::getMonitorId, monitorId) + .eq(ObjectUtil.isNotNull(scriptId), SimAndDigNonHarmonicResult::getScriptId, scriptId) + .in(CollUtil.isNotEmpty(sort), SimAndDigNonHarmonicResult::getSort, sort); + List list = this.getBaseMapper().selectJoinList(SimAndDigNonHarmonicResult.class, wrapper); DynamicTableNameHandler.remove(); - return BeanUtil.copyToList(list, AdBaseResult.class); + return BeanUtil.copyToList(list, SimAndDigBaseResult.class); } @Override public Map> listNonHarmData(StorageParam param) { String prefix = "ad_non_harmonic_"; DynamicTableNameHandler.setTableName(prefix + param.getCode()); - MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); - wrapper.like(AdNonHarmonicResult::getMonitorId, param.getDevId() + "_" + param.getDevNum()) - .eq(ObjectUtil.isNotNull(param.getScriptId()), AdNonHarmonicResult::getScriptId, param.getScriptId()) - .in(ObjectUtil.isNotEmpty(param.getIndex()), AdNonHarmonicResult::getSort, param.getIndex()); - List adHarmonicResults = this.getBaseMapper().selectJoinList(AdNonHarmonicResult.class, wrapper); + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + wrapper.like(SimAndDigNonHarmonicResult::getMonitorId, param.getDevId() + "_" + param.getDevNum()) + .eq(ObjectUtil.isNotNull(param.getScriptId()), SimAndDigNonHarmonicResult::getScriptId, param.getScriptId()) + .in(ObjectUtil.isNotEmpty(param.getIndex()), SimAndDigNonHarmonicResult::getSort, param.getIndex()); + List SimAndDigHarmonicResults = this.getBaseMapper().selectJoinList(SimAndDigNonHarmonicResult.class, wrapper); Map> info = new LinkedHashMap<>(2); - Map> adTypeMap = adHarmonicResults.stream().collect(Collectors.groupingBy(AdNonHarmonicResult::getAdType)); + Map> adTypeMap = SimAndDigHarmonicResults.stream().collect(Collectors.groupingBy(SimAndDigNonHarmonicResult::getAdType)); List dictTreeById = dictTreeService.getDictTreeById(new ArrayList<>(adTypeMap.keySet())); Map dictTreeByName = dictTreeById.stream().collect(Collectors.toMap(DictTree::getId, Function.identity())); adTypeMap.forEach((key, value) -> { if (dictTreeByName.containsKey(key)) { DictTree dictTree = dictTreeByName.get(key); List rawDataVOS = new ArrayList<>(); - for (AdNonHarmonicResult result : value) { + for (SimAndDigNonHarmonicResult result : value) { RawDataVO dataVO = new RawDataVO(); dataVO.setUnit(dictTree.getCode().equals("MAG")?"%":unit(dictTree.getCode())); dataVO.setTime(result.getTimeId().format(DateTimeFormatter.ofPattern(DatePattern.ISO8601_PATTERN))); @@ -94,17 +94,17 @@ public class AdNonHarmonicServiceImpl extends ServiceImpl> listNonHarmResultData(StorageParam param) { String prefix = "ad_non_harmonic_result_"; DynamicTableNameHandler.setTableName(prefix + param.getCode()); - MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); - wrapper.like(AdNonHarmonicResult::getMonitorId, param.getDevId() + "_" + param.getDevNum()) - .eq(ObjectUtil.isNotNull(param.getScriptId()), AdNonHarmonicResult::getScriptId, param.getScriptId()) - .in(ObjectUtil.isNotEmpty(param.getIndex()), AdNonHarmonicResult::getSort, param.getIndex()); + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + wrapper.like(SimAndDigNonHarmonicResult::getMonitorId, param.getDevId() + "_" + param.getDevNum()) + .eq(ObjectUtil.isNotNull(param.getScriptId()), SimAndDigNonHarmonicResult::getScriptId, param.getScriptId()) + .in(ObjectUtil.isNotEmpty(param.getIndex()), SimAndDigNonHarmonicResult::getSort, param.getIndex()); - List adHarmonicResults = this.getBaseMapper().selectJoinList(AdNonHarmonicResult.class, wrapper); + List SimAndDigHarmonicResults = this.getBaseMapper().selectJoinList(SimAndDigNonHarmonicResult.class, wrapper); Map> info = new LinkedHashMap<>(2); - Map adTypeMap = adHarmonicResults.stream() - .sorted(Comparator.comparing(AdNonHarmonicResult::getResultFlag)) - .collect(Collectors.toMap(AdNonHarmonicResult::getAdType, Function.identity(), (a, b) -> a, LinkedHashMap::new)); + Map adTypeMap = SimAndDigHarmonicResults.stream() + .sorted(Comparator.comparing(SimAndDigNonHarmonicResult::getResultFlag)) + .collect(Collectors.toMap(SimAndDigNonHarmonicResult::getAdType, Function.identity(), (a, b) -> a, LinkedHashMap::new)); List dictTreeById = dictTreeService.getDictTreeById(new ArrayList<>(adTypeMap.keySet())); Map dictTreeByName = dictTreeById.stream().collect(Collectors.toMap(DictTree::getId, Function.identity())); adTypeMap.forEach((key, result) -> { @@ -136,62 +136,62 @@ public class AdNonHarmonicServiceImpl extends ServiceImpl wrapper = new MPJLambdaWrapper<>(); - wrapper.like(AdNonHarmonicResult::getMonitorId, singleNonHarmParam.getDevId() + "_" + singleNonHarmParam.getChannelNo()) - .eq(AdNonHarmonicResult::getSort, singleNonHarmParam.getSort()) - .eq(AdNonHarmonicResult::getAdType, singleNonHarmParam.getAdType()); - List adHarmonicResults = this.getBaseMapper().selectJoinList(AdNonHarmonicResult.class, wrapper); - if (CollectionUtil.isNotEmpty(adHarmonicResults)) { - return adHarmonicResults.get(0); + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + wrapper.like(SimAndDigNonHarmonicResult::getMonitorId, singleNonHarmParam.getDevId() + "_" + singleNonHarmParam.getChannelNo()) + .eq(SimAndDigNonHarmonicResult::getSort, singleNonHarmParam.getSort()) + .eq(SimAndDigNonHarmonicResult::getAdType, singleNonHarmParam.getAdType()); + List SimAndDigHarmonicResults = this.getBaseMapper().selectJoinList(SimAndDigNonHarmonicResult.class, wrapper); + if (CollectionUtil.isNotEmpty(SimAndDigHarmonicResults)) { + return SimAndDigHarmonicResults.get(0); } } return null; } @Override - public List listAllResultData(String scriptId, String code, String devId) { + public List listSimAndDigBaseResult(String scriptId, String code, String devId) { String prefix = "ad_non_harmonic_result_" + code; DynamicTableNameHandler.setTableName(prefix); - MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); - wrapper.selectAll(AdNonHarmonicResult.class) - .selectAs(DictTree::getCode, AdNonHarmonicResult::getAdType) - .leftJoin(DictTree.class, DictTree::getId, AdNonHarmonicResult::getAdType) - .eq(AdNonHarmonicResult::getScriptId, scriptId) - .likeRight(AdNonHarmonicResult::getMonitorId, devId); - List results = this.getBaseMapper().selectJoinList(AdNonHarmonicResult.class, wrapper); + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + wrapper.selectAll(SimAndDigNonHarmonicResult.class) + .selectAs(DictTree::getCode, SimAndDigNonHarmonicResult::getAdType) + .leftJoin(DictTree.class, DictTree::getId, SimAndDigNonHarmonicResult::getAdType) + .eq(SimAndDigNonHarmonicResult::getScriptId, scriptId) + .likeRight(SimAndDigNonHarmonicResult::getMonitorId, devId); + List results = this.getBaseMapper().selectJoinList(SimAndDigNonHarmonicResult.class, wrapper); DynamicTableNameHandler.remove(); return results; } @Override - public List queryByCondition(SingleNonHarmParam param) { + public List queryByCondition(SingleNonHarmParam param) { String prefix = "ad_non_harmonic_result_"; DynamicTableNameHandler.setTableName(prefix + param.getPlanCode()); - MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); - wrapper.like(AdNonHarmonicResult::getMonitorId, param.getDevId() + "_" + param.getChannelNo()) - .in(AdNonHarmonicResult::getSort, param.getSortList()) - .in(AdNonHarmonicResult::getAdType, param.getValueTypeList()); - List adNonHarmonicResults = this.getBaseMapper().selectJoinList(AdNonHarmonicResult.class, wrapper); + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + wrapper.like(SimAndDigNonHarmonicResult::getMonitorId, param.getDevId() + "_" + param.getChannelNo()) + .in(SimAndDigNonHarmonicResult::getSort, param.getSortList()) + .in(SimAndDigNonHarmonicResult::getAdType, param.getValueTypeList()); + List adNonHarmonicResults = this.getBaseMapper().selectJoinList(SimAndDigNonHarmonicResult.class, wrapper); DynamicTableNameHandler.remove(); return adNonHarmonicResults; } @Override - public List listAllRawData(String scriptId, String code, String devId) { + public List listAllSimAndDigRawData(String scriptId, String code, String devId) { String prefix = "ad_non_harmonic_" + code; DynamicTableNameHandler.setTableName(prefix); - MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); - wrapper.selectAll(AdNonHarmonicResult.class) - .selectAs(DictTree::getCode, AdNonHarmonicResult::getAdType) - .leftJoin(DictTree.class, DictTree::getId, AdNonHarmonicResult::getAdType) - .eq(AdNonHarmonicResult::getScriptId, scriptId) - .likeRight(AdNonHarmonicResult::getMonitorId, devId); - List results = this.getBaseMapper().selectJoinList(AdNonHarmonicResult.class, wrapper); + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + wrapper.selectAll(SimAndDigNonHarmonicResult.class) + .selectAs(DictTree::getCode, SimAndDigNonHarmonicResult::getAdType) + .leftJoin(DictTree.class, DictTree::getId, SimAndDigNonHarmonicResult::getAdType) + .eq(SimAndDigNonHarmonicResult::getScriptId, scriptId) + .likeRight(SimAndDigNonHarmonicResult::getMonitorId, devId); + List results = this.getBaseMapper().selectJoinList(SimAndDigNonHarmonicResult.class, wrapper); DynamicTableNameHandler.remove(); return results; } 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 9ba0b6f0..b6c8fcc8 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 @@ -4,7 +4,6 @@ import com.njcn.gather.storage.mapper.TableGenMapper; import com.njcn.gather.storage.service.TableGenService; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import java.util.List; @@ -16,9 +15,9 @@ public class TableGenServiceImpl implements TableGenService { @Override - public void genAdNonHarmonicTable(String code) { - tableGenMapper.genAdNonHarmonicTable(code); - tableGenMapper.genAdNonHarmonicResultTable(code); + public void genTable(String code, boolean isContrast) { + tableGenMapper.genNonHarmonicTable(code, isContrast); + tableGenMapper.genNonHarmonicResultTable(code, isContrast); StringBuilder A = new StringBuilder(); StringBuilder B = new StringBuilder(); @@ -36,32 +35,42 @@ public class TableGenServiceImpl implements TableGenService { } String sql = "CREATE TABLE AD_Harmonic_" + code + " (\n" + - " Monitor_Id CHAR(60) NOT NULL COMMENT '监测点Id',\n" + + " Monitor_Id CHAR(34) NOT NULL COMMENT '监测点Id',\n" + " Time_Id DATETIME(3) NOT NULL COMMENT '时间',\n" + - " Script_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id,字典表',\n" + - " Sort int(4) NOT NULL COMMENT '总检测脚本中的测试项序号',\n" + " AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表',\n" + " Data_Type CHAR(32) NOT NULL COMMENT '数据指标,只有数据源为分钟统计时候才会使用(最大、最小、平均、CP95,默认平均值),字典表',\n" + - " Result_Flag int(1) NULL COMMENT '0不合格 1合格 4无法处理',\n" + A + B + C + - " PRIMARY KEY (Monitor_Id,Time_Id,Script_Id, Sort, AD_Type)\n" + - ") COMMENT='监测数据表';"; + " Result_Flag int(1) NULL COMMENT '0不合格 1合格 4无法处理',\n" + + (isContrast ? + " Error_Id CHAR(32) NOT NULL COMMENT '误差体系表Id',\n" + + " Num tinyint(1) unsigned DEFAULT 0 COMMENT '第几次检测',\n" + + " PRIMARY KEY (Monitor_Id,Time_Id,Error_Id, AD_Type)\n" + : + " Script_Id CHAR(32) NOT NULL COMMENT '检测脚本表Id',\n" + + " Sort int(4) NOT NULL COMMENT '总检测脚本中的测试项序号',\n"+ + " PRIMARY KEY (Monitor_Id, Time_Id, Script_Id, Sort, AD_Type)\n" + ) + ") COMMENT='谐波类原始数据表';"; tableGenMapper.genAdHarmonicTable(sql); String a = A.toString().replaceAll("float", "json"); String b = B.toString().replaceAll("float", "json"); String c = C.toString().replaceAll("float", "json"); String sql2 = "CREATE TABLE AD_Harmonic_Result_" + code + " (\n" + - " Monitor_Id CHAR(60) NOT NULL COMMENT '监测点Id',\n" + + " Monitor_Id CHAR(34) NOT NULL COMMENT '监测点Id',\n" + " Time_Id DATETIME(3) NULL COMMENT '时间',\n" + - " Script_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id,字典表',\n" + - " Sort int(5) NOT NULL COMMENT '总检测脚本中的测试项序号',\n" + " AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表',\n" + " Data_Type CHAR(32) NOT NULL COMMENT '数据指标,只有数据源为分钟统计时候才会使用(最大、最小、平均、CP95,默认平均值),字典表',\n" + - " Result_Flag int(1) NOT NULL COMMENT '1合格 2不合格 4无法处理',\n" + a + b + c + - " PRIMARY KEY (Monitor_Id,Script_Id, Sort, AD_Type)\n" + - ") COMMENT='监测数据表';"; + " Result_Flag int(1) NOT NULL COMMENT '1合格 2不合格 4无法处理',\n" + + (isContrast ? + " Error_Id CHAR(32) NOT NULL COMMENT '误差体系表Id',\n" + + " Num tinyint(1) unsigned DEFAULT 0 COMMENT '第几次检测',\n" + + " PRIMARY KEY (Monitor_Id, Error_Id, Num, AD_Type)\n" + : + " Script_Id CHAR(32) NOT NULL COMMENT '检测脚本表Id',\n" + + " Sort int(4) NOT NULL COMMENT '总检测脚本中的测试项序号',\n"+ + " PRIMARY KEY (Monitor_Id,Script_Id, Sort, AD_Type)\n" + ) + ") COMMENT='谐波类检测结果表';"; tableGenMapper.genAdHarmonicTable(sql2); }