diff --git a/detection/src/main/java/com/njcn/gather/detection/controller/PreDetectionController.java b/detection/src/main/java/com/njcn/gather/detection/controller/PreDetectionController.java index d9c14ccc..37409c91 100644 --- a/detection/src/main/java/com/njcn/gather/detection/controller/PreDetectionController.java +++ b/detection/src/main/java/com/njcn/gather/detection/controller/PreDetectionController.java @@ -1,8 +1,11 @@ package com.njcn.gather.detection.controller; import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.enums.common.LogEnum; import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.LogUtil; import com.njcn.gather.detection.pojo.param.ContrastDetectionParam; import com.njcn.gather.detection.pojo.param.PreDetectionParam; import com.njcn.gather.detection.pojo.param.SimulateDetectionParam; @@ -17,8 +20,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import java.util.Map; - /** * @author chendaofei @@ -145,19 +146,13 @@ public class PreDetectionController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } - /** - * 获取比对检测的监测次数信息 - * - * @param planId - * @return - */ - @GetMapping("/getContrastTestNumInfo") - @OperateInfo - @ApiOperation("获取比对检测的检测次数信息") - @ApiImplicitParam(name = "planId", value = "计划ID", required = true) - public HttpResult> getContrastTestNumInfo(@RequestParam("planId") String planId) { - String methodDescribe = getMethodDescribe("getContrastTestNumInfo"); - Map result = preDetectionService.getContrastTestNumInfo(planId); - return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + + @OperateInfo(info = LogEnum.SYSTEM_COMMON, operateType = OperateType.DOWNLOAD) + @PostMapping("/exportAlignData") + @ApiOperation("实时对齐数据导出为csv文件") + public void exportAlignData() { + String methodDescribe = getMethodDescribe("exportAlignData"); + LogUtil.njcnDebug(log, "{}", methodDescribe); + preDetectionService.exportAlignData(); } } 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 0a12be4f..f3c690e9 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,5 +1,6 @@ package com.njcn.gather.detection.handler; +import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; @@ -7,7 +8,9 @@ import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.google.common.collect.HashBiMap; +import com.njcn.common.pojo.exception.BusinessException; import com.njcn.gather.detection.pojo.enums.DetectionCodeEnum; +import com.njcn.gather.detection.pojo.enums.DetectionResponseEnum; import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum; import com.njcn.gather.detection.pojo.enums.SourceResponseCodeEnum; import com.njcn.gather.detection.pojo.param.ContrastDetectionParam; @@ -32,7 +35,11 @@ import com.njcn.gather.plan.pojo.enums.DataSourceEnum; import com.njcn.gather.plan.service.IAdPlanService; import com.njcn.gather.storage.pojo.po.ContrastHarmonicResult; import com.njcn.gather.storage.pojo.po.ContrastNonHarmonicResult; +import com.njcn.gather.storage.service.ContrastHarmonicService; +import com.njcn.gather.storage.service.ContrastNonHarmonicService; import com.njcn.gather.storage.service.DetectionDataDealService; +import com.njcn.gather.system.cfg.pojo.po.SysTestConfig; +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; import com.njcn.gather.system.dictionary.pojo.po.DictTree; @@ -40,7 +47,9 @@ import com.njcn.gather.system.dictionary.service.IDictDataService; import com.njcn.gather.system.dictionary.service.IDictTreeService; import com.njcn.gather.system.reg.pojo.po.SysRegRes; import com.njcn.gather.system.reg.service.ISysRegResService; +import com.njcn.web.utils.ExcelUtil; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.lang.reflect.Field; @@ -72,9 +81,11 @@ public class SocketContrastResponseService { private final DetectionDataDealService detectionDataDealService; private final ISysRegResService sysRegResService; private final DetectionServiceImpl detectionService; + private final ContrastNonHarmonicService contrastNonHarmonicService; + private final ContrastHarmonicService contrastHarmonicService; + private final ISysTestConfigService sysTestConfigService; private final IAdPariService adPairService; - /** * 定时器 */ @@ -90,6 +101,11 @@ public class SocketContrastResponseService { */ private boolean checkResult = false; + /** + * 是否接收数据 + */ + private boolean isReceiveData = true; + /** * 成功的配对 key:被检设备ip_通道号,value:配对设备ip_通道号 */ @@ -111,22 +127,78 @@ public class SocketContrastResponseService { private SysRegRes contrastRegRes = null; + @Value("${log.homeDir}") + private String alignDataFilePath; + + @Value("${phaseAngle.isEnable}") + private Boolean isPhaseAngle; + + private static final Map> testItemCodeMap = new HashMap() {{ put("FREQ", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.FREQ.getCode())); -// put("V", Arrays.asList("real$VRMS", "real$VA", "real$DELTA_V")); - put("V", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.VRMS.getCode())); - put("HV", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.V2_50.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.U1.getCode())); - put("HI", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I2_50.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I1.getCode())); + put("V", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.VRMS.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PVRMS.getCode())); + put("HV", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.V2_50.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PV2_50.getCode())); + put("HI", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I2_50.getCode())); put("HP", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.P2_50.getCode())); - put("HSV", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.SV_1_49.getCode())); + put("HSV", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.SV_1_49.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PSV_1_49.getCode())); put("HSI", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.SI_1_49.getCode())); -// put("I", Arrays.asList("real$IRMS", "real$IA")); put("I", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.IRMS.getCode())); put("IMBV", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.V_UNBAN.getCode())); put("IMBA", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I_UNBAN.getCode())); put("P", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.P_FUND.getCode())); }}; + /** + * 获取比对式检测次数 + * + * @param devMonitorIds 被检设备监测点id列表 + * @return + */ + private Map getContrastTestNum(List devMonitorIds) { + Map resultMap = new HashMap<>(); + for (String devMonitorId : devMonitorIds) { + Integer maxNum = 1; +// DynamicTableNameHandler.setTableName("ad_non_harmonic_" + code); +// List nonHarmonicResultList = contrastNonHarmonicService.lambdaQuery() +// .select(ContrastNonHarmonicResult::getNum) +// .eq(ContrastNonHarmonicResult::getMonitorId, devMonitorId) +// .orderByDesc(ContrastNonHarmonicResult::getNum) +// .last("LIMIT 1").list(); +// if (CollUtil.isNotEmpty(nonHarmonicResultList)) { +// if (maxNum <= nonHarmonicResultList.get(0).getNum()) { +// maxNum = nonHarmonicResultList.get(0).getNum() + 1; +// } +// } +// DynamicTableNameHandler.remove(); +// +// DynamicTableNameHandler.setTableName("ad_harmonic_" + code); +// List harmonicResultList = contrastHarmonicService.lambdaQuery() +// .select(ContrastHarmonicResult::getNum) +// .eq(ContrastHarmonicResult::getMonitorId, devMonitorId) +// .orderByDesc(ContrastHarmonicResult::getNum) +// .last("LIMIT 1").list(); +// if (CollUtil.isNotEmpty(harmonicResultList)) { +// if (maxNum <= harmonicResultList.get(0).getNum()) { +// maxNum = harmonicResultList.get(0).getNum() + 1; +// } +// } +// DynamicTableNameHandler.remove(); + + List adPairList = adPairService.lambdaQuery().select(AdPair::getNum) + .eq(AdPair::getDevMonitorId, devMonitorId) + .orderByDesc(AdPair::getNum) + .last("LIMIT 1").list(); + if (CollUtil.isNotEmpty(adPairList)) { + if (maxNum <= adPairList.get(0).getNum()) { + maxNum = adPairList.get(0).getNum() + 1; + } + } + + resultMap.put(devMonitorId, maxNum); + resultMap.put(FormalTestManager.pairsIdMap.get(devMonitorId), maxNum); + } + return resultMap; + } /** * 初始化操作 @@ -134,6 +206,8 @@ public class SocketContrastResponseService { * @param param */ public void init(ContrastDetectionParam param) { + FormalTestManager.currentTestPlan = adPlanService.getById(param.getPlanId()); + checkResult = false; SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L); SocketManager.contrastClockMap.clear(); @@ -143,10 +217,8 @@ public class SocketContrastResponseService { FormalTestManager.isRemoveSocket = true; HashBiMap hashBiMap = HashBiMap.create(param.getPairs()); - - FormalTestManager.currentTestPlan = adPlanService.getById(param.getPlanId()); - DictData pattern = dictDataService.getById(FormalTestManager.currentTestPlan.getPattern()); - FormalTestManager.patternEnum = PatternEnum.getEnum(pattern.getCode()); + FormalTestManager.pairsIdMap.clear(); + FormalTestManager.pairsIdMap.putAll(hashBiMap); List pqDevList = pqDevService.getDevInfo(param.getDevIds()); // key为被检设备id_通道号,value为监测点DTO @@ -175,7 +247,7 @@ public class SocketContrastResponseService { List standardDevIds = hashBiMap.values().stream().map(key -> key.split(CnSocketUtil.SPLIT_TAG)[0]).distinct().collect(Collectors.toList()); FormalTestManager.standardDevList.addAll(pqStandardDevService.listStandardDevPreDetection(standardDevIds)); - FormalTestManager.pairsMap.clear(); + FormalTestManager.pairsIpMap.clear(); // 标准设备根据配对关系设置监测点 FormalTestManager.standardDevList.stream().forEach(x -> { List monitorList = new ArrayList<>(); @@ -192,12 +264,34 @@ public class SocketContrastResponseService { monitorListDTO.setPtStr(monitorListDTO1.getPtStr()); monitorListDTO.setCtStr(monitorListDTO1.getCtStr()); monitorListDTO.setStatInterval(monitorListDTO1.getStatInterval()); - FormalTestManager.pairsMap.put(monitorListDTO1.getLineId(), monitorListDTO.getLineId()); + FormalTestManager.pairsIpMap.put(monitorListDTO1.getLineId(), monitorListDTO.getLineId()); monitorList.add(monitorListDTO); }); x.setMonitorList(monitorList); }); + FormalTestManager.devIdMapComm.clear(); + FormalTestManager.devIdMapComm.putAll(FormalTestManager.devList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevId))); + FormalTestManager.devIdMapComm.putAll(FormalTestManager.standardDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevId))); + + Map numMap = getContrastTestNum(param.getPairs().keySet().stream().collect(Collectors.toList())); + param.setNumMap(numMap); + SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); + if (param.getTestItemList().get(2)) { + numMap.forEach((devMonitorId, num) -> { + if (oneConfig.getMaxTime() < num) { + throw new BusinessException(DetectionResponseEnum.EXCEED_MAX_TIME); + } + }); + } + + DictData pattern = dictDataService.getById(FormalTestManager.currentTestPlan.getPattern()); + FormalTestManager.patternEnum = PatternEnum.getEnum(pattern.getCode()); + + FormalTestManager.devNameMapComm.clear(); + FormalTestManager.devNameMapComm.putAll(FormalTestManager.devList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevName))); + FormalTestManager.devNameMapComm.putAll(FormalTestManager.standardDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevName))); + FormalTestManager.devDataMap.clear(); FormalTestManager.devDataMap.putAll(FormalTestManager.devList.stream().flatMap(x -> x.getMonitorList().stream()).collect(Collectors.toMap(PreDetection.MonitorListDTO::getLineId, x -> new ArrayList<>()))); FormalTestManager.standardDevDataMap.clear(); @@ -229,13 +323,6 @@ public class SocketContrastResponseService { FormalTestManager.dataRule = DictDataEnum.SECTION_VALUE; } - FormalTestManager.devNameMapComm.clear(); - FormalTestManager.devNameMapComm.putAll(FormalTestManager.devList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevName))); - FormalTestManager.devNameMapComm.putAll(FormalTestManager.standardDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevName))); - - FormalTestManager.devIdMapComm.clear(); - FormalTestManager.devIdMapComm.putAll(FormalTestManager.devList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevId))); - FormalTestManager.devIdMapComm.putAll(FormalTestManager.standardDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevId))); FormalTestManager.currentStep = SourceOperateCodeEnum.YJC_SBTXJY; } @@ -404,7 +491,7 @@ public class SocketContrastResponseService { socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam(); phaseSequenceParam.setMoniterIdList(Arrays.asList(FormalTestManager.monitorMap.keySet().toArray(new String[FormalTestManager.monitorMap.size()]))); - phaseSequenceParam.setDataType(Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.VRMS.getCode())); + phaseSequenceParam.setDataType(Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.VRMS.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PVRMS.getCode())); phaseSequenceParam.setReadCount(this.getMaxReadCount(5)); phaseSequenceParam.setIgnoreCount(0); socketMsg.setData(JSON.toJSONString(phaseSequenceParam)); @@ -472,16 +559,14 @@ public class SocketContrastResponseService { CnSocketUtil.contrastSendquit(param.getUserPageId(), false); - this.clearData(); - - Collection disjunction = CollectionUtil.disjunction(FormalTestManager.pairsMap.keySet(), successPair.keySet()); + Collection disjunction = CollectionUtil.disjunction(FormalTestManager.pairsIpMap.keySet(), successPair.keySet()); // 向前端推送实时数据对齐失败的配对项 for (String key : disjunction) { SocketDataMsg webSend = new SocketDataMsg(); webSend.setRequestId(SourceOperateCodeEnum.YJC_ALIGN.getValue()); webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); webSend.setCode(SourceResponseCodeEnum.FAIL.getCode()); - webSend.setData(MsgUtil.getPairStr(key, FormalTestManager.pairsMap.inverse().get(key), FormalTestManager.devNameMapComm)); + webSend.setData(MsgUtil.getPairStr(key, FormalTestManager.pairsIpMap.inverse().get(key), FormalTestManager.devNameMapComm)); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); } // 推送最终失败结果 @@ -493,6 +578,9 @@ public class SocketContrastResponseService { // 将数据推送给前端 this.sendAlignDataToWeb(param.getUserPageId()); + this.saveAlignData(); + + this.clearData(); return; } @@ -504,12 +592,12 @@ public class SocketContrastResponseService { String devMonitorId = monitorId1; String standardDevMonitorId = monitorId1; if (FormalTestManager.devDataMap.containsKey(monitorId1)) { - standardDevMonitorId = FormalTestManager.pairsMap.get(monitorId1); + standardDevMonitorId = FormalTestManager.pairsIpMap.get(monitorId1); FormalTestManager.devDataMap.get(monitorId1).add(devData); Collections.sort(FormalTestManager.devDataMap.get(monitorId1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); } if (FormalTestManager.standardDevDataMap.containsKey(monitorId1)) { - devMonitorId = FormalTestManager.pairsMap.inverse().get(monitorId1); + devMonitorId = FormalTestManager.pairsIpMap.inverse().get(monitorId1); FormalTestManager.standardDevDataMap.get(monitorId1).add(devData); Collections.sort(FormalTestManager.standardDevDataMap.get(monitorId1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); } @@ -528,13 +616,14 @@ public class SocketContrastResponseService { WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); // 若成功的配对项等于总的配对项,则判定为成功 - if (successPair.keySet().containsAll(FormalTestManager.pairsMap.keySet())) { + if (successPair.keySet().containsAll(FormalTestManager.pairsIpMap.keySet())) { checkResult = true; scheduledFuture.cancel(true); scheduler.shutdown(); // 将数据推送给前端 this.sendAlignDataToWeb(param.getUserPageId()); + this.saveAlignData(); this.clearData(); @@ -552,9 +641,13 @@ public class SocketContrastResponseService { phaseSequenceParam.setMoniterIdList(Arrays.asList(FormalTestManager.monitorMap.keySet().toArray(new String[FormalTestManager.monitorMap.size()]))); phaseSequenceParam.setDataType(Arrays.asList( DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.VRMS.getCode(), + DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PVRMS.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.VA.getCode(), - DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.IRMS.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.IA.getCode(), + DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.U1A.getCode(), + DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PU1A.getCode(), + DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I1A.getCode(), + DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.IRMS.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.V_UNBAN.getCode(), DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I_UNBAN.getCode())); phaseSequenceParam.setReadCount(this.getMaxReadCount(1)); @@ -616,14 +709,14 @@ public class SocketContrastResponseService { String standardDevMonitorId = monitorId1; if (FormalTestManager.devDataMap.containsKey(monitorId1)) { - standardDevMonitorId = FormalTestManager.pairsMap.get(monitorId1); + standardDevMonitorId = FormalTestManager.pairsIpMap.get(monitorId1); if (!successPair.containsKey(devMonitorId)) { FormalTestManager.devDataMap.get(monitorId1).add(devData); Collections.sort(FormalTestManager.devDataMap.get(monitorId1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); } } if (FormalTestManager.standardDevDataMap.containsKey(monitorId1)) { - devMonitorId = FormalTestManager.pairsMap.inverse().get(monitorId1); + devMonitorId = FormalTestManager.pairsIpMap.inverse().get(monitorId1); if (!successPair.containsKey(devMonitorId)) { FormalTestManager.standardDevDataMap.get(monitorId1).add(devData); Collections.sort(FormalTestManager.standardDevDataMap.get(monitorId1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); @@ -635,12 +728,12 @@ public class SocketContrastResponseService { successComm.add(standardDevMonitorId); successComm.add(devMonitorId); // successComm.add(monitorId1); - List> singleMonitorAlignData = getSingleMonitorAlignData(FormalTestManager.devDataMap.get(devMonitorId), FormalTestManager.standardDevDataMap.get(standardDevMonitorId)); + List> singleMonitorAlignData = getSingleMonitorAlignData(FormalTestManager.devDataMap.get(devMonitorId), FormalTestManager.standardDevDataMap.get(standardDevMonitorId), 1); PreDetection.MonitorListDTO monitorListDTO = FormalTestManager.monitorMap.get(devMonitorId); if (this.singleMonitorXuCheck(devMonitorId, standardDevMonitorId, monitorListDTO, singleMonitorAlignData.get(0), singleMonitorAlignData.get(1), FormalTestManager.devNameMapComm, param.getUserPageId())) { successPair.put(devMonitorId, standardDevMonitorId); // 若成功的配对项等于总的配对项,则判定为成功 - if (successPair.keySet().containsAll(FormalTestManager.pairsMap.keySet())) { + if (successPair.keySet().containsAll(FormalTestManager.pairsIpMap.keySet())) { this.clearData(); @@ -743,11 +836,11 @@ public class SocketContrastResponseService { this.clearData(); - Collection disjunction = CollectionUtil.disjunction(FormalTestManager.pairsMap.keySet(), successPair.keySet()); + Collection disjunction = CollectionUtil.disjunction(FormalTestManager.pairsIpMap.keySet(), successPair.keySet()); // 向前端推送收集数据不完整的配对项 for (String key : disjunction) { webSend.setCode(SourceResponseCodeEnum.FAIL.getCode()); - webSend.setData(MsgUtil.getPairStr(key, FormalTestManager.pairsMap.inverse().get(key), FormalTestManager.devNameMapComm) + " 数据收集不完整!"); + webSend.setData(MsgUtil.getPairStr(key, FormalTestManager.pairsIpMap.inverse().get(key), FormalTestManager.devNameMapComm) + " 数据收集不完整!"); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); } // 推送最终失败结果 @@ -765,14 +858,14 @@ public class SocketContrastResponseService { String standardDevMonitorId = monitorId1; if (FormalTestManager.devDataMap.containsKey(monitorId1)) { - standardDevMonitorId = FormalTestManager.pairsMap.get(monitorId1); + standardDevMonitorId = FormalTestManager.pairsIpMap.get(monitorId1); if (!successPair.containsKey(devMonitorId)) { FormalTestManager.devDataMap.get(monitorId1).add(devData); Collections.sort(FormalTestManager.devDataMap.get(monitorId1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); } } if (FormalTestManager.standardDevDataMap.containsKey(monitorId1)) { - devMonitorId = FormalTestManager.pairsMap.inverse().get(monitorId1); + devMonitorId = FormalTestManager.pairsIpMap.inverse().get(monitorId1); if (!successPair.containsKey(devMonitorId)) { FormalTestManager.standardDevDataMap.get(monitorId1).add(devData); Collections.sort(FormalTestManager.standardDevDataMap.get(monitorId1), Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); @@ -781,7 +874,7 @@ public class SocketContrastResponseService { if (!successPair.containsKey(devMonitorId)) { if (FormalTestManager.devDataMap.get(devMonitorId).size() >= realTime && FormalTestManager.standardDevDataMap.get(standardDevMonitorId).size() >= realTime) { - List> singleMonitorAlignData = getSingleMonitorAlignData(FormalTestManager.devDataMap.get(devMonitorId), FormalTestManager.standardDevDataMap.get(standardDevMonitorId)); + List> singleMonitorAlignData = getSingleMonitorAlignData(FormalTestManager.devDataMap.get(devMonitorId), FormalTestManager.standardDevDataMap.get(standardDevMonitorId), realTime); if (singleMonitorAlignData.get(0).size() >= realTime && singleMonitorAlignData.get(1).size() >= realTime) { successPair.put(devMonitorId, standardDevMonitorId); // 推送收集数据成功的配对项 @@ -789,44 +882,41 @@ public class SocketContrastResponseService { webSend.setData(MsgUtil.getPairStr(devMonitorId, standardDevMonitorId, FormalTestManager.devNameMapComm) + " 数据收集成功!"); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); - if (successPair.keySet().containsAll(FormalTestManager.pairsMap.keySet())) { + if (successPair.keySet().containsAll(FormalTestManager.pairsIpMap.keySet())) { + isReceiveData = false; + // 断开与设备的连接,但是不要将Socket移除 + CnSocketUtil.contrastSendquit(param.getUserPageId(), false); checkResult = true; scheduledFuture.cancel(true); scheduler.shutdown(); - // 断开与设备的连接,但是不要将Socket移除 - CnSocketUtil.contrastSendquit(param.getUserPageId(), false); - String errorSysId = FormalTestManager.currentTestPlan.getErrorSysId(); String code = String.valueOf(FormalTestManager.currentTestPlan.getCode()); - // 原始数据入库 - baseDataInsert(singleMonitorAlignData.get(0), param.getNum(), code, FormalTestManager.testItemMap); - baseDataInsert(singleMonitorAlignData.get(1), param.getNum(), code, FormalTestManager.testItemMap); // 配对关系入库 List adPairList = new ArrayList<>(); - for (String key : FormalTestManager.pairsMap.keySet()) { - String standardDevId = FormalTestManager.pairsMap.get(key); + for (String key : FormalTestManager.pairsIdMap.keySet()) { AdPair adPair = new AdPair(); adPair.setPlanId(FormalTestManager.currentTestPlan.getId()); - String[] split = key.split(CnSocketUtil.SPLIT_TAG); - adPair.setDevMonitorId(FormalTestManager.devIdMapComm.get(split[0]) + CnSocketUtil.SPLIT_TAG + split[1]); - split = standardDevId.split(CnSocketUtil.SPLIT_TAG); - adPair.setStdDevMonitorId(FormalTestManager.devIdMapComm.get(split[0]) + CnSocketUtil.SPLIT_TAG + split[1]); - adPair.setNum(param.getNum()); + adPair.setDevMonitorId(key); + adPair.setStdDevMonitorId(FormalTestManager.pairsIdMap.get(key)); + adPair.setNum(param.getNumMap().get(key)); adPairList.add(adPair); } adPairService.saveBatch(adPairList); + // 原始数据入库 + baseDataInsert(false, singleMonitorAlignData.get(0), param.getNumMap(), code); + baseDataInsert(true, singleMonitorAlignData.get(1), param.getNumMap(), code); + // 进行误差计算 List allResultList = detectionService.processing( FormalTestManager.devDataMap.values().stream().flatMap(Collection::stream).collect(Collectors.toList()), FormalTestManager.standardDevDataMap.values().stream().flatMap(Collection::stream).collect(Collectors.toList()), - FormalTestManager.pairsMap, + FormalTestManager.pairsIpMap, FormalTestManager.devIdMapComm, - FormalTestManager.monitorMap, FormalTestManager.testItemMap.keySet().stream().collect(Collectors.toList()), - errorSysId, FormalTestManager.dataRule, param.getNum(), code); + errorSysId, FormalTestManager.dataRule, param.getNumMap(), code); this.clearData(); @@ -834,6 +924,9 @@ public class SocketContrastResponseService { webSend.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode());//最终成功推送 webSend.setData(JSON.toJSONString(allResultList)); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); + + // 修改设备状态 + pqDevService.updateResult(true, param.getDevIds(), FormalTestManager.testItemMap.keySet().stream().collect(Collectors.toList()), code, param.getUserId(), param.getTemperature(), param.getHumidity()); } } } @@ -932,14 +1025,18 @@ public class SocketContrastResponseService { * @return */ private List getAllDataType() { - List testCodes = FormalTestManager.testItemMap.keySet().stream().collect(Collectors.toList()); - if (testCodes.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.V2_50.getCode())) { + Set testCodes = FormalTestManager.testItemMap.keySet().stream().collect(Collectors.toSet()); + if (testCodes.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.V2_50.getCode()) + || testCodes.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PV2_50.getCode()) + || testCodes.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.SV_1_49.getCode()) + || testCodes.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PSV_1_49.getCode())) { testCodes.add(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.U1.getCode()); + testCodes.add(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PU1.getCode()); } if (testCodes.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I2_50.getCode())) { testCodes.add(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.I1.getCode()); } - return testCodes; + return testCodes.stream().sorted().collect(Collectors.toList()); } /** @@ -952,21 +1049,6 @@ public class SocketContrastResponseService { return (int) (Math.ceil(targetCount / 5.0) * 20); } - /** - * 向通讯模块发送不再接收数据 - */ - private void sendNotReceiveData(String s) { - SocketMsg socketMsg = new SocketMsg<>(); - socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue()); - socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); - DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam(); - phaseSequenceParam.setMoniterIdList(Arrays.asList(FormalTestManager.monitorMap.keySet().toArray(new String[FormalTestManager.monitorMap.size()]))); - phaseSequenceParam.setReadCount(0); - phaseSequenceParam.setIgnoreCount(0); - socketMsg.setData(JSON.toJSONString(phaseSequenceParam)); - - SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); - } /** * 实时数据对齐-将数据推送给前端 @@ -991,7 +1073,8 @@ public class SocketContrastResponseService { List channelDataList = new ArrayList<>(); channelDataMap.forEach((channel, channelDevDataList) -> { String standardDevMonitorId = ip + CnSocketUtil.SPLIT_TAG + channel; - String devMonitorId = FormalTestManager.pairsMap.inverse().get(standardDevMonitorId); + String devMonitorId = FormalTestManager.pairsIpMap.inverse().get(standardDevMonitorId); + PreDetection.MonitorListDTO monitorListDTO = FormalTestManager.monitorMap.get(devMonitorId); List devDataList = BeanUtil.copyToList(FormalTestManager.devDataMap.get(devMonitorId), DevData.class); channelDevDataList.sort(Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); @@ -1000,21 +1083,43 @@ public class SocketContrastResponseService { String[] split = devMonitorId.split(CnSocketUtil.SPLIT_TAG); channelData.setDevInfo(FormalTestManager.devNameMapComm.get(split[0]) + "通道" + split[1]); + boolean isStar = DetectionCodeEnum.STAR.getCode().equals(monitorListDTO.getConnection()); + boolean isDelta = DetectionCodeEnum.DELTA.getCode().equals(monitorListDTO.getConnection()); List dataList = channelDevDataList.stream().map(obj -> { + DevData.SqlDataDTO.ListDTO list1 = null; + DevData.SqlDataDTO sqlDataDTO1 = null; + if (isStar) { + sqlDataDTO1 = obj.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.VRMS.getCode())).findFirst().orElse(null); + } + if (isDelta) { + sqlDataDTO1 = obj.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.PVRMS.getCode())).findFirst().orElse(null); + } + if (ObjectUtil.isNotNull(sqlDataDTO1)) { + list1 = sqlDataDTO1.getList(); + } AlignDataVO.RawData rawData = new AlignDataVO.RawData(); - DevData.SqlDataDTO.ListDTO list = obj.getSqlData().get(0).getList(); - rawData.setUaStdDev(list.getA()); - rawData.setUbStdDev(list.getB()); - rawData.setUcStdDev(list.getC()); - rawData.setTimeStdDev(obj.getTime()); + rawData.setUaStdDev(list1.getA()); + rawData.setUbStdDev(list1.getB()); + rawData.setUcStdDev(list1.getC()); + rawData.setTimeStdDev(obj.getTime().replace("T", " ")); DevData devData = devDataList.stream().filter(obj1 -> DetectionUtil.isAlignData(obj1, obj)).findFirst().orElse(null); if (ObjectUtil.isNotNull(devData)) { - DevData.SqlDataDTO.ListDTO list1 = devData.getSqlData().get(0).getList(); - rawData.setUaDev(list1.getA()); - rawData.setUbDev(list1.getB()); - rawData.setUcDev(list1.getC()); - rawData.setTimeDev(devData.getTime()); + DevData.SqlDataDTO.ListDTO list2 = null; + DevData.SqlDataDTO sqlDataDTO2 = null; + if (isStar) { + sqlDataDTO2 = devData.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.VRMS.getCode())).findFirst().orElse(null); + } + if (isDelta) { + sqlDataDTO2 = devData.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.PVRMS.getCode())).findFirst().orElse(null); + } + if (ObjectUtil.isNotNull(sqlDataDTO2)) { + list2 = sqlDataDTO2.getList(); + } + rawData.setUaDev(list2.getA()); + rawData.setUbDev(list2.getB()); + rawData.setUcDev(list2.getC()); + rawData.setTimeDev(devData.getTime().replace("T", " ")); devDataList.remove(devData); } return rawData; @@ -1026,7 +1131,7 @@ public class SocketContrastResponseService { rawData.setUaDev(list.getA()); rawData.setUbDev(list.getB()); rawData.setUcDev(list.getC()); - rawData.setTimeDev(obj.getTime()); + rawData.setTimeDev(obj.getTime().replace("T", " ")); return rawData; }).collect(Collectors.toList())); channelData.setDataList(dataList); @@ -1040,6 +1145,94 @@ public class SocketContrastResponseService { WebServiceManager.sendMsg(userPageId, JSON.toJSONString(webSend)); } + /** + * 实时数据对齐-保存数据到excel文件 + */ + private void saveAlignData() { + List> sheetsList = new ArrayList<>(); + + // key为被检设备的ip, value为该ip下所有通道的设备数据 + Map> ipDevDataMap = FormalTestManager.standardDevDataMap.values().stream().flatMap(List::stream).collect(Collectors.groupingBy(obj -> obj.getId().split(CnSocketUtil.SPLIT_TAG)[0])); + + ipDevDataMap.forEach((ip, stdDevDataList) -> { + // 按照通道号分组。key为通道号,value为该通道号下所有设备数据 + Map> channelDataMap = stdDevDataList.stream().collect(Collectors.groupingBy(obj -> obj.getId().split(CnSocketUtil.SPLIT_TAG)[1])); + + channelDataMap.forEach((channel, channelDevDataList) -> { + String standardDevMonitorId = ip + CnSocketUtil.SPLIT_TAG + channel; + String devMonitorId = FormalTestManager.pairsIpMap.inverse().get(standardDevMonitorId); + PreDetection.MonitorListDTO monitorListDTO = FormalTestManager.monitorMap.get(devMonitorId); + List devDataList = BeanUtil.copyToList(FormalTestManager.devDataMap.get(devMonitorId), DevData.class); + channelDevDataList.sort(Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); + + HashMap sheet = new HashMap<>(); + ExportParams exportParams = new ExportParams(); + String standardDevName = FormalTestManager.devNameMapComm.get(ip); + exportParams.setSheetName(standardDevName + "通道" + channel); + sheet.put("title", exportParams); + + List dataList = new ArrayList<>(); + boolean isStar = DetectionCodeEnum.STAR.getCode().equals(monitorListDTO.getConnection()); + boolean isDelta = DetectionCodeEnum.DELTA.getCode().equals(monitorListDTO.getConnection()); + channelDevDataList.stream().forEach(obj -> { + DevData.SqlDataDTO.ListDTO list1 = null; + DevData.SqlDataDTO sqlDataDTO1 = null; + if (isStar) { + sqlDataDTO1 = obj.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.VRMS.getCode())).findFirst().orElse(null); + } + if (isDelta) { + sqlDataDTO1 = obj.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.PVRMS.getCode())).findFirst().orElse(null); + } + if (ObjectUtil.isNotNull(sqlDataDTO1)) { + list1 = sqlDataDTO1.getList(); + } + AlignDataExcel alignDataExcel = new AlignDataExcel(); + alignDataExcel.setTimeStdDev(obj.getTime().replace("T", " ")); + alignDataExcel.setUaStdDev(list1.getA()); + alignDataExcel.setUbStdDev(list1.getB()); + alignDataExcel.setUcStdDev(list1.getC()); + + DevData devData = devDataList.stream().filter(obj1 -> DetectionUtil.isAlignData(obj1, obj)).findFirst().orElse(null); + if (ObjectUtil.isNotNull(devData)) { + DevData.SqlDataDTO.ListDTO list2 = null; + DevData.SqlDataDTO sqlDataDTO2 = null; + if (isStar) { + sqlDataDTO2 = obj.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.VRMS.getCode())).findFirst().orElse(null); + } + if (isDelta) { + sqlDataDTO2 = obj.getSqlData().stream().filter(x -> x.getDesc().equals(DetectionCodeEnum.PVRMS.getCode())).findFirst().orElse(null); + } + if (ObjectUtil.isNotNull(sqlDataDTO2)) { + list2 = sqlDataDTO2.getList(); + } + alignDataExcel.setTimeDev(devData.getTime().replace("T", " ")); + alignDataExcel.setUaDev(list2.getA()); + alignDataExcel.setUbDev(list2.getB()); + alignDataExcel.setUcDev(list2.getC()); + devDataList.remove(devData); + } + dataList.add(alignDataExcel); + }); + devDataList.sort(Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime()))); + devDataList.stream().forEach(obj -> { + AlignDataExcel alignDataExcel = new AlignDataExcel(); + DevData.SqlDataDTO.ListDTO list2 = obj.getSqlData().get(0).getList(); + alignDataExcel.setTimeDev(obj.getTime().replace("T", " ")); + alignDataExcel.setUaDev(list2.getA()); + alignDataExcel.setUbDev(list2.getB()); + alignDataExcel.setUcDev(list2.getC()); + dataList.add(alignDataExcel); + }); + + sheet.put("data", dataList); + sheet.put("entity", AlignDataExcel.class); + sheetsList.add(sheet); + }); + }); + + ExcelUtil.saveExcel(alignDataFilePath, "实时数据.xlsx", sheetsList); + } + /** * 模型一致性校验 * @@ -1059,7 +1252,10 @@ public class SocketContrastResponseService { List allTestItem = this.getAllDataType(); if (DetectionCodeEnum.STAR.getCode().equals(monitorListDTO.getConnection())) { // 移除相关线电压测试项 -// allTestItem.remove() + allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PVRMS.getCode()); + allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PU1.getCode()); + allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PV2_50.getCode()); + allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PSV_1_49.getCode()); } if (DetectionCodeEnum.DELTA.getCode().equals(monitorListDTO.getConnection())) { // 移除相关相电压测试项 @@ -1067,6 +1263,16 @@ public class SocketContrastResponseService { allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.U1.getCode()); allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.V2_50.getCode()); allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.SV_1_49.getCode()); + + // 如果是在是没有线电压谐波含有率、线电压间谐波含有率,勉强使其通过 + if (!descList.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PV2_50.getCode())) { + allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PU1.getCode()); + allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PV2_50.getCode()); + } + if (!descList.contains(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PSV_1_49.getCode())) { + allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PU1.getCode()); + allTestItem.remove(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.PSV_1_49.getCode()); + } } if (CollUtil.isNotEmpty(descList) && descList.containsAll(allTestItem)) { @@ -1089,9 +1295,10 @@ public class SocketContrastResponseService { * * @param devDataList 被检设备数据(已经按照时间戳从小到大排过序) * @param standardDevDataList 标准设备数据(已经按照时间戳从小到大排过序) + * @param num 对齐的组数 * @return 返回一个List集合,集合中仅有2个元素。下标为0的元素为被检设备数据,下标为1的元素为其一一对齐的标准设备数据 */ - private List> getSingleMonitorAlignData(List devDataList, List standardDevDataList) { + private List> getSingleMonitorAlignData(List devDataList, List standardDevDataList, Integer num) { List> result = new ArrayList<>(); List alignDevData = new ArrayList<>(); @@ -1107,6 +1314,10 @@ public class SocketContrastResponseService { alignDevData.add(devDataList.get(j)); alignStdDevData.add(standardDevDataList.get(i)); jStart = j + 1; + + if (alignDevData.size() >= num && alignStdDevData.size() >= num) { + jStart = devDataList.size(); + } break; } } @@ -1184,8 +1395,8 @@ public class SocketContrastResponseService { } if (isDelta) { // 角型接线方式,则获取线电压 - uDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.LINE_VRMS.getCode()); - uStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.LINE_VRMS.getCode()); + uDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.PVRMS.getCode()); + uStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.PVRMS.getCode()); } if (CollUtil.isNotEmpty(uDev) && CollUtil.isNotEmpty(uStd)) { @@ -1289,44 +1500,66 @@ public class SocketContrastResponseService { WebServiceManager.sendMsg(userId, JSON.toJSONString(webSend)); } - // 获取被检设备的额定电流 - Double ratedCurrent = Double.valueOf(monitorListDTO.getCtStr().split("\\:")[1]); + // 动态调控是否支持相角差校验 + if (isPhaseAngle) { + // 获取被检设备的额定电流 + Double ratedCurrent = Double.valueOf(monitorListDTO.getCtStr().split("\\:")[1]); - // 是否存在电流 - boolean notHasCurrent = iDev.stream().allMatch( - p -> p.getList().getA() != null && DetectionUtil.isZero(p.getList().getA(), ratedCurrent) - && p.getList().getB() != null && DetectionUtil.isZero(p.getList().getB(), ratedCurrent) - && p.getList().getC() != null && DetectionUtil.isZero(p.getList().getC(), ratedCurrent)); - if (!notHasCurrent) { - detail = "数据为空!"; - // 相角差校验 - List vaDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.VA.getCode()); - List vaStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.VA.getCode()); - List iaDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.IA.getCode()); - List iaStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.IA.getCode()); - if (CollUtil.isNotEmpty(vaDev) && CollUtil.isNotEmpty(vaStd) && CollUtil.isNotEmpty(iaDev) && CollUtil.isNotEmpty(iaStd)) { - DevData.SqlDataDTO.ListDTO vaDevList = vaDev.get(0).getList(); - DevData.SqlDataDTO.ListDTO vaStdList = vaDev.get(0).getList(); - DevData.SqlDataDTO.ListDTO iaDevList = vaDev.get(0).getList(); - DevData.SqlDataDTO.ListDTO iaStdList = vaDev.get(0).getList(); + // 是否存在电流 + boolean notHasCurrent = iDev.stream().allMatch( + p -> p.getList().getA() != null && DetectionUtil.isZero(p.getList().getA(), ratedCurrent) + && p.getList().getB() != null && DetectionUtil.isZero(p.getList().getB(), ratedCurrent) + && p.getList().getC() != null && DetectionUtil.isZero(p.getList().getC(), ratedCurrent)); + if (!notHasCurrent) { + detail = "数据为空!"; + // 相角差校验 + List vaDev = null; + List vaStd = null; + List iaDev = null; + List iaStd = null; + if (isStar) { + vaDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.VA.getCode()); + vaStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.VA.getCode()); + iaDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.IA.getCode()); + iaStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.IA.getCode()); + if (CollUtil.isEmpty(vaDev) && CollUtil.isEmpty(vaStd) && CollUtil.isEmpty(iaDev) && CollUtil.isEmpty(iaStd)) { + vaDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.U1A.getCode()); + vaStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.U1A.getCode()); + iaDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.I1A.getCode()); + iaStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.I1A.getCode()); + } + } + if (isDelta) { + vaDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.PU1A.getCode()); + vaStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.PU1A.getCode()); + iaDev = getSingleMonitorSqlData(devData, DetectionCodeEnum.I1A.getCode()); + iaStd = getSingleMonitorSqlData(stdData, DetectionCodeEnum.I1A.getCode()); + } - detail = "被检设备:a=" + (vaDevList.getA() - iaDevList.getA()) + "°,b=" + (vaDevList.getB() - iaDevList.getB()) + "°,c=" + (vaDevList.getC() - iaDevList.getC()) + ";标准设备:a=" + (vaStdList.getA() - iaStdList.getA()) + "°,b=" + (vaStdList.getB() - iaStdList.getB()) + "°,c=" + (vaStdList.getC() - iaStdList.getC()); + if (CollUtil.isNotEmpty(vaDev) && CollUtil.isNotEmpty(vaStd) && CollUtil.isNotEmpty(iaDev) && CollUtil.isNotEmpty(iaStd)) { + DevData.SqlDataDTO.ListDTO vaDevList = vaDev.get(0).getList(); + DevData.SqlDataDTO.ListDTO vaStdList = vaDev.get(0).getList(); + DevData.SqlDataDTO.ListDTO iaDevList = vaDev.get(0).getList(); + DevData.SqlDataDTO.ListDTO iaStdList = vaDev.get(0).getList(); - if (!phaseCheck(vaDevList, iaDevList, vaStdList, iaStdList)) { - // 单个检测点相角校验失败,推送失败消息 + detail = "被检设备:a=" + (vaDevList.getA() - iaDevList.getA()) + "°,b=" + (vaDevList.getB() - iaDevList.getB()) + "°,c=" + (vaDevList.getC() - iaDevList.getC()) + ";标准设备:a=" + (vaStdList.getA() - iaStdList.getA()) + "°,b=" + (vaStdList.getB() - iaStdList.getB()) + "°,c=" + (vaStdList.getC() - iaStdList.getC()); + + if (!phaseCheck(vaDevList, iaDevList, vaStdList, iaStdList)) { + // 单个检测点相角校验失败,推送失败消息 + flag = false; + webSend.setCode(SourceResponseCodeEnum.FAIL.getCode()); + webSend.setData(pairStr + ":相角差校验失败!" + detail); + } else { + webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode()); + webSend.setData(pairStr + ":相角差校验成功!" + detail); + } + } else { flag = false; webSend.setCode(SourceResponseCodeEnum.FAIL.getCode()); - webSend.setData(pairStr + ":相角差校验失败!" + detail); - } else { - webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode()); - webSend.setData(pairStr + ":相角差校验成功!" + detail); + webSend.setData(pairStr + ":相角差校验失败!相角差" + detail); } - } else { - flag = false; - webSend.setCode(SourceResponseCodeEnum.FAIL.getCode()); - webSend.setData(pairStr + ":相角差校验失败!相角差" + detail); + WebServiceManager.sendMsg(userId, JSON.toJSONString(webSend)); } - WebServiceManager.sendMsg(userId, JSON.toJSONString(webSend)); } return flag; } @@ -1418,18 +1651,22 @@ public class SocketContrastResponseService { /** * 比对式原始数据入库 * - * @param devDataList 原始数据 - * @param num 第几次检测 - * @param code 表后缀code - * @param checkItemMap 检测项Map key为检测项code,value为检测项的id + * @param isStdDev 是否为标准设备 + * @param devDataList 原始数据 + * @param numMap 第几次监测 key为被检设备监测点id,value为第几次监测 + * @param code 表后缀code */ - private void baseDataInsert(List devDataList, Integer num, String code, Map checkItemMap) { + private void baseDataInsert(boolean isStdDev, List devDataList, Map numMap, String code) { System.out.println("原始数据插入数据库开始执行========================================="); List contrastNonHarmonicResults = new ArrayList<>(); List contrastHarmonicResults = new ArrayList<>(); Map harmonicRelationMap = new HashMap<>(); harmonicRelationMap.put(DetectionCodeEnum.V2_50.getCode(), DetectionCodeEnum.U1.getCode()); + harmonicRelationMap.put(DetectionCodeEnum.PV2_50.getCode(), DetectionCodeEnum.PU1.getCode()); + harmonicRelationMap.put(DetectionCodeEnum.SV_1_49.getCode(), DetectionCodeEnum.U1.getCode()); + harmonicRelationMap.put(DetectionCodeEnum.PSV_1_49.getCode(), DetectionCodeEnum.PU1.getCode()); harmonicRelationMap.put(DetectionCodeEnum.I2_50.getCode(), DetectionCodeEnum.I1.getCode()); + harmonicRelationMap.put(DetectionCodeEnum.SI_1_49.getCode(), DetectionCodeEnum.I1.getCode()); for (DevData data : devDataList) { LocalDateTime localDateTime = DetectionUtil.timeFormat(data.getTime(), DetectionUtil.FORMATTER); if (Objects.nonNull(localDateTime)) { @@ -1438,15 +1675,20 @@ public class SocketContrastResponseService { String temId = FormalTestManager.devIdMapComm.get(splitArr[0]) + CnSocketUtil.SPLIT_TAG + splitArr[1]; for (DevData.SqlDataDTO sqlDataDTO : data.getSqlData()) { - if (!DetectionCodeEnum.U1.getCode().equals(sqlDataDTO.getDesc()) && !DetectionCodeEnum.I1.getCode().equals(sqlDataDTO.getDesc())) { + if (!DetectionCodeEnum.U1.getCode().equals(sqlDataDTO.getDesc()) && !DetectionCodeEnum.PU1.getCode().equals(sqlDataDTO.getDesc()) && !DetectionCodeEnum.I1.getCode().equals(sqlDataDTO.getDesc())) { DevData.SqlDataDTO.ListDTO listDTO = sqlDataDTO.getList(); ContrastNonHarmonicResult adNonHarmonicResult = new ContrastNonHarmonicResult(); adNonHarmonicResult.setTimeId(localDateTime); - adNonHarmonicResult.setMonitorId(temId); - adNonHarmonicResult.setNum(num); - - adNonHarmonicResult.setAdType(checkItemMap.get(DetectionCodeEnum.REAL_PREFIX.getCode() + sqlDataDTO.getDesc())); + adNonHarmonicResult.setNum(numMap.get(temId)); + adNonHarmonicResult.setAdType(FormalTestManager.testItemMap.get(DetectionCodeEnum.REAL_PREFIX.getCode() + sqlDataDTO.getDesc())); adNonHarmonicResult.setDataType(DataSourceEnum.REAL_DATA.getValue()); + if (isStdDev) { + adNonHarmonicResult.setDevMonitorId(FormalTestManager.pairsIdMap.inverse().get(temId)); + adNonHarmonicResult.setStdDevMonitorId(temId); + } else { + adNonHarmonicResult.setDevMonitorId(temId); + adNonHarmonicResult.setStdDevMonitorId(FormalTestManager.pairsIdMap.get(temId)); + } Double a = listDTO.getA(); Double b = listDTO.getB(); @@ -1472,11 +1714,16 @@ public class SocketContrastResponseService { String dui = harmonicRelationMap.get(sqlDataDTO.getDesc()); ContrastHarmonicResult adHarmonicResult = new ContrastHarmonicResult(); adHarmonicResult.setTimeId(localDateTime); - - adHarmonicResult.setMonitorId(temId); - adHarmonicResult.setNum(num); - adHarmonicResult.setAdType(checkItemMap.get(DetectionCodeEnum.REAL_PREFIX.getCode() + sqlDataDTO.getDesc())); + adHarmonicResult.setNum(numMap.get(temId)); + adHarmonicResult.setAdType(FormalTestManager.testItemMap.get(DetectionCodeEnum.REAL_PREFIX.getCode() + sqlDataDTO.getDesc())); adHarmonicResult.setDataType(DataSourceEnum.REAL_DATA.getValue()); + if (isStdDev) { + adHarmonicResult.setDevMonitorId(FormalTestManager.pairsIdMap.inverse().get(temId)); + adHarmonicResult.setStdDevMonitorId(temId); + } else { + adHarmonicResult.setDevMonitorId(temId); + adHarmonicResult.setStdDevMonitorId(FormalTestManager.pairsIdMap.get(temId)); + } if (ObjectUtil.isNotNull(dui)) { DevData.SqlDataDTO.ListDTO vvv = data.getSqlData().stream().filter(it -> it.getDesc().equals(dui)).collect(Collectors.toList()).get(0).getList(); @@ -1485,13 +1732,16 @@ public class SocketContrastResponseService { Double bV = vvv.getB(); Double cV = vvv.getC(); if (Objects.nonNull(aV)) { - adHarmonicResult.setAValue1(String.format("%.7f", aV)); +// adHarmonicResult.setAValue1(String.format("%.7f", aV)); + adHarmonicResult.setAValue0(String.format("%.7f", aV)); } if (Objects.nonNull(bV)) { - adHarmonicResult.setBValue1(String.format("%.7f", bV)); +// adHarmonicResult.setBValue1(String.format("%.7f", bV)); + adHarmonicResult.setBValue0(String.format("%.7f", bV)); } if (Objects.nonNull(cV)) { - adHarmonicResult.setCValue1(String.format("%.7f", cV)); +// adHarmonicResult.setCValue1(String.format("%.7f", cV)); + adHarmonicResult.setCValue0(String.format("%.7f", bV)); } } } @@ -1503,7 +1753,7 @@ public class SocketContrastResponseService { Class example = (Class) adHarmonicResult.getClass(); - if (DetectionCodeEnum.SV_1_49.getCode().equals(sqlDataDTO.getDesc()) || DetectionCodeEnum.SI_1_49.getCode().equals(sqlDataDTO.getDesc())) { + if (DetectionCodeEnum.SV_1_49.getCode().equals(sqlDataDTO.getDesc()) || DetectionCodeEnum.PSV_1_49.getCode().equals(sqlDataDTO.getDesc()) || DetectionCodeEnum.SI_1_49.getCode().equals(sqlDataDTO.getDesc())) { for (int i = 1; i < a.size() + 1; i++) { try { Field aField = example.getDeclaredField("aValue" + i); @@ -1543,31 +1793,33 @@ public class SocketContrastResponseService { } } - if (CollUtil.isNotEmpty(contrastNonHarmonicResults)) { - Map> map = contrastNonHarmonicResults.stream().collect(Collectors.groupingBy(x -> x.getMonitorId() + x.getTimeId() + x.getNum() + x.getAdType())); - List info = new ArrayList<>(); - map.forEach((key, value) -> { - if (value.size() > 1) { - System.err.println("重复时间戳->" + key + value); - } else { - info.addAll(value); - } - }); - - detectionDataDealService.acceptAdNon(info, code); - } - if (CollUtil.isNotEmpty(contrastHarmonicResults)) { - Map> map = contrastHarmonicResults.stream().collect(Collectors.groupingBy(x -> x.getMonitorId() + x.getTimeId() + x.getNum() + x.getAdType())); - List info = new ArrayList<>(); - map.forEach((key, value) -> { - if (value.size() > 1) { - System.err.println("重复时间戳->" + key + value); - } else { - info.addAll(value); - } - }); - detectionDataDealService.acceptAd(info, code); - } +// if (CollUtil.isNotEmpty(contrastNonHarmonicResults)) { +// Map> map = contrastNonHarmonicResults.stream().collect(Collectors.groupingBy(x -> x.getDevMonitorId() + x.getTimeId() + x.getNum() + x.getAdType())); +// List info = new ArrayList<>(); +// map.forEach((key, value) -> { +// if (value.size() > 1) { +// System.err.println("重复时间戳->" + key + value); +// } else { +// info.addAll(value); +// } +// }); +// +// detectionDataDealService.acceptNonHarmonic(info, code); +// } +// if (CollUtil.isNotEmpty(contrastHarmonicResults)) { +// Map> map = contrastHarmonicResults.stream().collect(Collectors.groupingBy(x -> x.getDevMonitorId() + x.getTimeId() + x.getNum() + x.getAdType())); +// List info = new ArrayList<>(); +// map.forEach((key, value) -> { +// if (value.size() > 1) { +// System.err.println("重复时间戳->" + key + value); +// } else { +// info.addAll(value); +// } +// }); +// detectionDataDealService.acceptHarmonic(info, code); +// } + detectionDataDealService.acceptNonHarmonic(contrastNonHarmonicResults, code); + detectionDataDealService.acceptHarmonic(contrastHarmonicResults, code); System.out.println("原始数据插入数据库执行成功========================================="); } 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 88915366..08b1c900 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 @@ -1299,7 +1299,7 @@ public class SocketDevResponseService { checkDataParam.setIsValueTypeName(false); List valueType = iPqScriptCheckDataService.getValueType(checkDataParam); - iPqDevService.updateResult(param.getDevIds(), valueType, param.getCode(), param.getUserId(), param.getTemperature(), param.getHumidity()); + iPqDevService.updateResult(false,param.getDevIds(), valueType, param.getCode(), param.getUserId(), param.getTemperature(), param.getHumidity()); CnSocketUtil.quitSend(param); } successComm.clear(); @@ -1792,7 +1792,7 @@ public class SocketDevResponseService { DevData.SqlDataDTO.ListDTO listDTO = sqlDataDTO.getList(); SimAndDigNonHarmonicResult adNonHarmonicResult = new SimAndDigNonHarmonicResult(); adNonHarmonicResult.setTimeId(localDateTime); - adNonHarmonicResult.setMonitorId(temId); + adNonHarmonicResult.setDevMonitorId(temId); adNonHarmonicResult.setScriptId(param.getScriptId()); adNonHarmonicResult.setSort(sourceIssue.getIndex()); @@ -1825,7 +1825,7 @@ public class SocketDevResponseService { SimAndDigHarmonicResult adHarmonicResult = new SimAndDigHarmonicResult(); adHarmonicResult.setTimeId(localDateTime); - adHarmonicResult.setMonitorId(temId); + adHarmonicResult.setDevMonitorId(temId); adHarmonicResult.setScriptId(param.getScriptId()); adHarmonicResult.setSort(sourceIssue.getIndex()); adHarmonicResult.setAdType(checkDataMap.get(sqlDataDTO.getDesc())); @@ -1898,7 +1898,7 @@ public class SocketDevResponseService { } if (CollUtil.isNotEmpty(simAndDigNonHarmonicResultList)) { - Map> map = simAndDigNonHarmonicResultList.stream().collect(Collectors.groupingBy(x -> x.getMonitorId() + x.getTimeId() + x.getScriptId() + x.getSort() + x.getAdType() + x.getDataType())); + Map> map = simAndDigNonHarmonicResultList.stream().collect(Collectors.groupingBy(x -> x.getDevMonitorId() + x.getTimeId() + x.getScriptId() + x.getSort() + x.getAdType() + x.getDataType())); List info = new ArrayList<>(); map.forEach((key, value) -> { if (value.size() > 1) { @@ -1908,10 +1908,10 @@ public class SocketDevResponseService { } }); - detectionDataDealService.acceptAdNon(info, param.getCode()); + detectionDataDealService.acceptNonHarmonic(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())); + Map> map = adHarmonicResultList.stream().collect(Collectors.groupingBy(x -> x.getDevMonitorId() + x.getTimeId() + x.getScriptId() + x.getSort() + x.getAdType() + x.getDataType())); List info = new ArrayList<>(); map.forEach((key, value) -> { if (value.size() > 1) { @@ -1920,7 +1920,7 @@ public class SocketDevResponseService { info.addAll(value); } }); - detectionDataDealService.acceptAd(info, param.getCode()); + detectionDataDealService.acceptHarmonic(info, param.getCode()); } System.out.println("原始数据插入数据库执行成功========================================="); // }; 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 30a2867f..faf9213c 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 @@ -13,19 +13,25 @@ public enum DetectionCodeEnum { FREQ("FREQ", "频率"), VRMS("VRMS", "相电压有效值"), - LINE_VRMS("LINE_VRMS", "线电压有效值"), + PVRMS("PVRMS", "线电压有效值"), DELTA_V("DELTA_V", "电压偏差"), VA("VA", "电压相角"), + U1A("U1A", "相电压基波有效值角度值"), + PU1A("PU1A", "线电压基波有效值角度值"), U1("U1", "基波电压"), + PU1("PU1", "线电压基波电压"), V2_50("V2-50", "谐波电压"), + PV2_50("PV2-50", "线电压谐波电压"), I2_50("I2-50", "谐波电流"), P2_50("P2-50", "谐波有功功率"), SV_1_49("SV_1-49", "间谐波电压"), + PSV_1_49("PSV_1-49", "线电压间谐波电压"), SI_1_49("SI_1-49", "间谐波电流"), MAG("MAG", "电压幅值"), DUR("DUR", "持续时间"), IRMS("IRMS", "电流有效值"), IA("IA", "电流相角"), + I1A("I1A", "电流基波角度值"), V_UNBAN("V_UNBAN", "三相电压负序不平衡度"), I_UNBAN("I_UNBAN", "三相电流负序不平衡度"), PST("PST", "短时间闪变"), diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/enums/DetectionResponseEnum.java b/detection/src/main/java/com/njcn/gather/detection/pojo/enums/DetectionResponseEnum.java index 20360bc9..64b4ceb9 100644 --- a/detection/src/main/java/com/njcn/gather/detection/pojo/enums/DetectionResponseEnum.java +++ b/detection/src/main/java/com/njcn/gather/detection/pojo/enums/DetectionResponseEnum.java @@ -18,7 +18,8 @@ public enum DetectionResponseEnum { SOURCE_NOT_CONNECT("A020006", "源未连接"), - SCRIPT_CHECK_DATA_NOT_EXIST("A020040","测试脚本项暂无配置" ); + SCRIPT_CHECK_DATA_NOT_EXIST("A020040","测试脚本项暂无配置" ), + EXCEED_MAX_TIME("A020041","检测次数超出最大限制!" ); private final String code; private final String message; 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 27448822..dc8e1a80 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 @@ -43,7 +43,9 @@ public class ContrastDetectionParam { private List testItemList; /** - * 当前检测次数 + * 第几次监测 key为设备监测点id,value为第几次监测 */ - private Integer num; + private Map numMap; + + private String userId; } diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/param/PreDetectionParam.java b/detection/src/main/java/com/njcn/gather/detection/pojo/param/PreDetectionParam.java index 8180276d..cb933950 100644 --- a/detection/src/main/java/com/njcn/gather/detection/pojo/param/PreDetectionParam.java +++ b/detection/src/main/java/com/njcn/gather/detection/pojo/param/PreDetectionParam.java @@ -5,6 +5,7 @@ import lombok.Data; import javax.validation.constraints.NotBlank; import javax.validation.constraints.NotEmpty; import java.util.List; +import java.util.Map; /** * @author wr @@ -75,7 +76,7 @@ public class PreDetectionParam { private List testItemList; /** - * 第几次监测 + * 第几次监测 key为设备监测点id,value为第几次监测 */ - private Integer num; + private Map numMap; } diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/vo/AlignDataExcel.java b/detection/src/main/java/com/njcn/gather/detection/pojo/vo/AlignDataExcel.java index a50b635d..a6321455 100644 --- a/detection/src/main/java/com/njcn/gather/detection/pojo/vo/AlignDataExcel.java +++ b/detection/src/main/java/com/njcn/gather/detection/pojo/vo/AlignDataExcel.java @@ -10,41 +10,29 @@ import lombok.Data; @Data public class AlignDataExcel { - private ExcelConfig devDataConfig = new ExcelConfig(""); - private ExcelConfig standardDevDataConfig = new ExcelConfig(""); - - @Excel(name = "时间", width = 20, groupName = "被检设备") + @Excel(name = "时间", orderNum = "1", width = 40, groupName = "被检设备") private String timeDev; - @Excel(name = "Ua", groupName = "被检设备") + @Excel(name = "Ua", orderNum = "2", groupName = "被检设备") private Double uaDev; - @Excel(name = "Ub", groupName = "被检设备") + @Excel(name = "Ub", orderNum = "3", groupName = "被检设备") private Double ubDev; - @Excel(name = "Uc", groupName = "被检设备") + @Excel(name = "Uc", orderNum = "4", groupName = "被检设备") private Double ucDev; - @Excel(name = "时间", width = 20, groupName = "标准设备") + @Excel(name = "时间", orderNum = "5", width = 40, groupName = "标准设备") private String timeStdDev; - @Excel(name = "Ua", groupName = "标准设备") + @Excel(name = "Ua", orderNum = "6", groupName = "标准设备") private Double uaStdDev; - @Excel(name = "Ub", groupName = "标准设备") + @Excel(name = "Ub", orderNum = "7", groupName = "标准设备") private Double ubStdDev; - @Excel(name = "Uc", groupName = "标准设备") + @Excel(name = "Uc", orderNum = "8", groupName = "标准设备") private Double ucStdDev; - - @Data - public static class ExcelConfig { - private String name; - - public ExcelConfig(String name) { - this.name = name; - } - } } diff --git a/detection/src/main/java/com/njcn/gather/detection/service/PreDetectionService.java b/detection/src/main/java/com/njcn/gather/detection/service/PreDetectionService.java index 4f7278f6..64f9e9ba 100644 --- a/detection/src/main/java/com/njcn/gather/detection/service/PreDetectionService.java +++ b/detection/src/main/java/com/njcn/gather/detection/service/PreDetectionService.java @@ -60,10 +60,7 @@ public interface PreDetectionService { void startContrastTest(ContrastDetectionParam param); /** - * 获取比对式检测次数信息 - * - * @param planId - * @return + * 导出实时数据对齐过程中的数据 */ - Map getContrastTestNumInfo(String planId); + void exportAlignData(); } 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 d131374e..b954676f 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 @@ -15,7 +15,7 @@ import com.njcn.gather.detection.pojo.po.DevData; import com.njcn.gather.detection.pojo.vo.DetectionData; import com.njcn.gather.detection.pojo.vo.DevLineTestResult; import com.njcn.gather.detection.util.DetectionUtil; -import com.njcn.gather.device.pojo.vo.PreDetection; +import com.njcn.gather.detection.util.socket.CnSocketUtil; import com.njcn.gather.err.pojo.param.PqErrSysParam; import com.njcn.gather.err.pojo.po.PqErrSysDtls; import com.njcn.gather.err.pojo.vo.ErrDtlsCheckDataVO; @@ -236,7 +236,7 @@ public class DetectionServiceImpl { SimAndDigNonHarmonicResult result = new SimAndDigNonHarmonicResult(); String[] split = dev.get(0).getId().split("_"); String devID = devIdMapComm.get(split[0]); - result.setMonitorId(devID + "_" + split[1]); + result.setDevMonitorId(devID + "_" + split[1]); result.setScriptId(sourceIssue.getScriptId()); result.setSort(sourceIssue.getIndex()); result.setDataType(sourceIssue.getDataType()); @@ -316,7 +316,7 @@ public class DetectionServiceImpl { SimAndDigHarmonicResult harmonicResult = new SimAndDigHarmonicResult(); String[] split = dev.get(0).getId().split("_"); String devID = devIdMapComm.get(split[0]); - harmonicResult.setMonitorId(devID + "_" + split[1]); + harmonicResult.setDevMonitorId(devID + "_" + split[1]); harmonicResult.setScriptId(sourceIssue.getScriptId()); harmonicResult.setSort(sourceIssue.getIndex()); Integer isQualified; @@ -396,7 +396,7 @@ public class DetectionServiceImpl { SimAndDigNonHarmonicResult result = new SimAndDigNonHarmonicResult(); String[] split = dev.get(0).getId().split("_"); String devID = devIdMapComm.get(split[0]); - result.setMonitorId(devID + "_" + split[1]); + result.setDevMonitorId(devID + "_" + split[1]); result.setScriptId(sourceIssue.getScriptId()); result.setSort(sourceIssue.getIndex()); result.setDataType(sourceIssue.getDataType()); @@ -509,7 +509,7 @@ public class DetectionServiceImpl { SimAndDigHarmonicResult harmonicResult = new SimAndDigHarmonicResult(); String[] split = dev.get(0).getId().split("_"); String devID = devIdMapComm.get(split[0]); - harmonicResult.setMonitorId(devID + "_" + split[1]); + harmonicResult.setDevMonitorId(devID + "_" + split[1]); harmonicResult.setScriptId(sourceIssue.getScriptId()); harmonicResult.setSort(sourceIssue.getIndex()); List pqErrSysDtls = new ArrayList<>(); @@ -573,7 +573,7 @@ public class DetectionServiceImpl { SimAndDigNonHarmonicResult result = new SimAndDigNonHarmonicResult(); String[] split = dev.get(0).getId().split("_"); String devID = devIdMapComm.get(split[0]); - result.setMonitorId(devID + "_" + split[1]); + result.setDevMonitorId(devID + "_" + split[1]); result.setScriptId(sourceIssue.getScriptId()); result.setSort(sourceIssue.getIndex()); List pqErrSysDtls = new ArrayList<>(); @@ -755,7 +755,7 @@ public class DetectionServiceImpl { SimAndDigNonHarmonicResult result = new SimAndDigNonHarmonicResult(); String[] split = devId.split("_"); String devID = devIdMapComm.get(split[0]); - result.setMonitorId(devID + "_" + split[1]); + result.setDevMonitorId(devID + "_" + split[1]); result.setScriptId(sourceIssue.getScriptId()); result.setSort(sourceIssue.getIndex()); result.setDataType(sourceIssue.getDataType()); @@ -1384,6 +1384,7 @@ public class DetectionServiceImpl { 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); + integerListMap.get(0.0).add(multiply(fund, fund)); for (Double i : harmNum) { if (integerListMap.containsKey(i)) { if (i.equals(1.0) && num != 1) { @@ -1411,8 +1412,11 @@ public class DetectionServiceImpl { } } else { Map> integerListMap = new LinkedHashMap<>(50); + List integerList = new ArrayList<>(); + integerList.add(multiply(fund, fund)); + integerListMap.put(0.0, integerList); for (Double i : harmNum) { - List integerList = new ArrayList<>(); + integerList = new ArrayList<>(); if (i.equals(1.0) && num != 1) { integerList.add(multiply(fund, fund)); integerListMap.put(1.0, integerList); @@ -1435,7 +1439,6 @@ public class DetectionServiceImpl { } integerListMap.put(i, integerList); } - } map.put(type, integerListMap); } @@ -1495,17 +1498,16 @@ public class DetectionServiceImpl { * * @param devDataList 被检设备数据 * @param standardDevDataList 与之对齐的标准设备数据 - * @param pars 配对关系 key为被检设备ip_通道号,value为标准设备ip_通道号 + * @param parsIp 配对关系 key为被检设备ip_通道号,value为标准设备ip_通道号 * @param devIdMapComm 设备id映射关系 key为被检设备ip,value为被检设备id - * @param monitorMap 监测器映射关系 key为被检设备ip_通道号,value为监测器信息 * @param testItemCodeList 检测项code列表 * @param errorSysId 误差体系id * @param dataRule 数据处理原则 - * @param num 第几次检测 + * @param numMap 第几次检测 key为设备id_通道号,value为第几次检测 * @param code 结果表code * @return key为被检设备ip_通道号、value为是否合格(1合格 2不合格 4无法处理) */ - public List processing(List devDataList, List standardDevDataList, Map pars, Map devIdMapComm, Map monitorMap, List testItemCodeList, String errorSysId, DictDataEnum dataRule, Integer num, String code) { + public List processing(List devDataList, List standardDevDataList, Map parsIp, Map devIdMapComm, List testItemCodeList, String errorSysId, DictDataEnum dataRule, Map numMap, String code) { Map> devDataMap = devDataList.stream().collect(Collectors.groupingBy(obj -> obj.getId().split("_")[0])); Map> standardDevDataMap = standardDevDataList.stream().collect(Collectors.groupingBy(DevData::getId)); @@ -1516,12 +1518,14 @@ public class DetectionServiceImpl { List resultList = new ArrayList<>(); Map> devMonitorMap = devValueList.stream().collect(Collectors.groupingBy(DevData::getId, TreeMap::new, Collectors.toList())); + String devId = devIdMapComm.get(devIp); Map> chnResultMap = new HashMap<>(); devMonitorMap.forEach((devMoniterId, devData) -> { - Map map = singleMonitorProcessing(devData, standardDevDataMap.get(pars.get(devMoniterId)), devIdMapComm, testItemCodeList, errorSysId, dataRule, num, code); + String[] split = devMoniterId.split(CnSocketUtil.SPLIT_TAG); + Map map = singleMonitorProcessing(devData, standardDevDataMap.get(parsIp.get(devMoniterId)), devIdMapComm, testItemCodeList, errorSysId, dataRule, numMap.get(devId + CnSocketUtil.SPLIT_TAG + split[1]), code); map.forEach((key, value) -> { DevLineTestResult devLineTestResult = new DevLineTestResult(); - devLineTestResult.setDeviceId(devIdMapComm.get(devIp)); + devLineTestResult.setDeviceId(devId); devLineTestResult.setScriptName(key); List chnResult = chnResultMap.getOrDefault(key, new ArrayList<>()); chnResult.add(value); @@ -1557,34 +1561,42 @@ public class DetectionServiceImpl { private Map singleMonitorProcessing(List devDataList, List standardDevDataList, Map devIdMapComm, List testItemCodeList, String errorSysId, DictDataEnum dataRule, Integer num, String code) { Map resultMap = new HashMap<>(); if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList) && CollUtil.isNotEmpty(testItemCodeList)) { + SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); String[] split1 = devDataList.get(0).getId().split("_"); String devMonitorId = devIdMapComm.get(split1[0]) + "_" + split1[1]; + PqMonitor pqMonitor = pqMonitorService.getByDevMonitorId(devMonitorId); + boolean isStar = DetectionCodeEnum.STAR.getCode().equals(pqMonitor.getConnection()); + boolean isDelta = DetectionCodeEnum.DELTA.getCode().equals(pqMonitor.getConnection()); + Double fUn = pqMonitorService.getRatedVoltage(devMonitorId); + if (isStar) { + fUn = BigDecimal.valueOf(fUn).divide(BigDecimal.valueOf(Math.sqrt(3)), oneConfig.getScale(), RoundingMode.HALF_UP).doubleValue(); + } + Double fIn = pqMonitorService.getRatedCurrent(devMonitorId); + Double fHz = 50.0; for (String testItemCode : testItemCodeList) { -// if ("real$U1".equals(testItemCode) || "real$I1".equals(testItemCode)) { -// continue; -// } - String[] split = testItemCode.split("\\$"); - - SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); - List pqErrSysDtls = pqErrSysDtlsService.listPqErrSysDtlsByPqErrSysIdAndScriptType(errorSysId, split[1]); DetectionCodeEnum anEnum = DetectionCodeEnum.getDetectionCodeByCode(split[1]); - PqMonitor pqMonitor = pqMonitorService.getByDevMonitorId(devMonitorId); - boolean isStar = DetectionCodeEnum.STAR.getCode().equals(pqMonitor.getConnection()); - boolean isDelta = DetectionCodeEnum.DELTA.getCode().equals(pqMonitor.getConnection()); - Double fUn = pqMonitorService.getRatedVoltage(devMonitorId); - if (isStar) { - fUn = BigDecimal.valueOf(fUn).divide(BigDecimal.valueOf(Math.sqrt(3)), oneConfig.getScale(), RoundingMode.HALF_UP).doubleValue(); + if (isStar && (anEnum == DetectionCodeEnum.PVRMS || anEnum == DetectionCodeEnum.PV2_50 || anEnum == DetectionCodeEnum.PSV_1_49) || isDelta && (anEnum == DetectionCodeEnum.VRMS || anEnum == DetectionCodeEnum.V2_50 || anEnum == DetectionCodeEnum.SV_1_49)) { + continue; } - Double fIn = pqMonitorService.getRatedCurrent(devMonitorId); - Double fHz = 50.0; + String scriptType = split[1]; + if (isDelta) { + if (DetectionCodeEnum.PV2_50.getCode().equals(scriptType)) { + scriptType = DetectionCodeEnum.V2_50.getCode(); + } + if (DetectionCodeEnum.PSV_1_49.getCode().equals(scriptType)) { + scriptType = DetectionCodeEnum.SV_1_49.getCode(); + } + } + List pqErrSysDtls = pqErrSysDtlsService.listPqErrSysDtlsByPqErrSysIdAndScriptType(errorSysId, scriptType); + switch (anEnum) { case FREQ: resultMap.put(PowerIndexEnum.FREQ.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fHz, DetectionCodeEnum.FREQ.getCode(), dataRule, num, code, oneConfig.getScale())); break; case VRMS: - case LINE_VRMS: - resultMap.put(PowerIndexEnum.V.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fUn, (isStar ? DetectionCodeEnum.VRMS.getCode() : DetectionCodeEnum.LINE_VRMS.getCode()), dataRule, num, code, oneConfig.getScale())); + case PVRMS: + resultMap.put(PowerIndexEnum.V.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fUn, (isStar ? DetectionCodeEnum.VRMS.getCode() : DetectionCodeEnum.PVRMS.getCode()), dataRule, num, code, oneConfig.getScale())); break; case IRMS: resultMap.put(PowerIndexEnum.I.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fIn, DetectionCodeEnum.IRMS.getCode(), dataRule, num, code, oneConfig.getScale())); @@ -1599,19 +1611,21 @@ public class DetectionServiceImpl { resultMap.put(PowerIndexEnum.IMBA.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fIn, DetectionCodeEnum.I_UNBAN.getCode(), dataRule, num, code, oneConfig.getScale())); break; case V2_50: - resultMap.put(PowerIndexEnum.HV.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn, HARMONIC_FLAG, dataRule, num, code, oneConfig.getScale())); + case PV2_50: + resultMap.put(PowerIndexEnum.HV.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn, HARMONIC_FLAG, isDelta, dataRule, num, code, oneConfig.getScale())); break; case I2_50: - resultMap.put(PowerIndexEnum.HI.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, I, fIn, HARMONIC_FLAG, dataRule, num, code, oneConfig.getScale())); + resultMap.put(PowerIndexEnum.HI.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, I, fIn, HARMONIC_FLAG, isDelta, dataRule, num, code, oneConfig.getScale())); break; case P2_50: - resultMap.put(PowerIndexEnum.HP.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn * fIn, HARMONIC_FLAG, dataRule, num, code, oneConfig.getScale())); + resultMap.put(PowerIndexEnum.HP.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn * fIn, HARMONIC_FLAG, isDelta, dataRule, num, code, oneConfig.getScale())); break; case SV_1_49: - resultMap.put(PowerIndexEnum.HSV.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn, INHARMONIC_FLAG, dataRule, num, code, oneConfig.getScale())); + case PSV_1_49: + resultMap.put(PowerIndexEnum.HSV.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn, INHARMONIC_FLAG, isDelta, dataRule, num, code, oneConfig.getScale())); break; case SI_1_49: - resultMap.put(PowerIndexEnum.HSI.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, I, fIn, INHARMONIC_FLAG, dataRule, num, code, oneConfig.getScale())); + resultMap.put(PowerIndexEnum.HSI.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, I, fIn, INHARMONIC_FLAG, isDelta, dataRule, num, code, oneConfig.getScale())); break; case UNKNOWN_ERROR: break; @@ -1621,6 +1635,7 @@ public class DetectionServiceImpl { return resultMap; } + /** * 处理非谐波数据 * @@ -1654,9 +1669,11 @@ public class DetectionServiceImpl { Map>> map = devListMap(devDataList, standardDevDataList, desc, dataRule); ContrastNonHarmonicResult result = new ContrastNonHarmonicResult(); - String[] split1 = devDataList.get(0).getId().split("_"); + String[] split1 = devDataList.get(0).getId().split(CnSocketUtil.SPLIT_TAG); + String[] split2 = standardDevDataList.get(0).getId().split(CnSocketUtil.SPLIT_TAG); result.setNum(num); - result.setMonitorId(devIdMapComm.get(split1[0]) + "_" + split1[1]); + result.setDevMonitorId(devIdMapComm.get(split1[0]) + "_" + split1[1]); + result.setStdDevMonitorId(devIdMapComm.get(split2[0]) + "_" + split2[1]); result.setAdType(errSysDtls.get(0).getScriptType()); result.setDataType(DataSourceEnum.REAL_DATA.getValue()); @@ -1704,6 +1721,7 @@ public class DetectionServiceImpl { * @param fData 额定值 * @param type U或I、用来区分电压或电流 * @param harmonicFlag 1:间谐波,2:谐波 + * @param isDelta 是否角型接法 * @param dataRule 数据处理原则 * @param num 第几次检测 * @param code 结果表code @@ -1717,21 +1735,30 @@ public class DetectionServiceImpl { String type, Double fData, Integer harmonicFlag, + boolean isDelta, DictDataEnum dataRule, Integer num, String code, Integer scale) { - List info = new ArrayList<>(); if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList) && CollUtil.isNotEmpty(errSysDtls)) { String fundCode = ""; String harmCode = ""; if (U.equals(type)) { fundCode = DetectionCodeEnum.U1.getCode(); + if (isDelta) { + fundCode = DetectionCodeEnum.PU1.getCode(); + } if (harmonicFlag == 1) { harmCode = DetectionCodeEnum.SV_1_49.getCode(); + if (isDelta) { + harmCode = DetectionCodeEnum.PSV_1_49.getCode(); + } } else { harmCode = DetectionCodeEnum.V2_50.getCode(); + if (isDelta) { + harmCode = DetectionCodeEnum.PV2_50.getCode(); + } } } if (I.equals(type)) { @@ -1750,9 +1777,11 @@ public class DetectionServiceImpl { Map>>> devMap = devHarmListMap(devDataList, standardDevDataList, fundCode, harmCode, harmonicFlag, dataRule); ContrastHarmonicResult result = new ContrastHarmonicResult(); - String[] split = devDataList.get(0).getId().split("_"); + String[] split1 = devDataList.get(0).getId().split("_"); + String[] split2 = standardDevDataList.get(0).getId().split("_"); result.setNum(num); - result.setMonitorId(devIdMapComm.get(split[0]) + "_" + split[1]); + result.setDevMonitorId(devIdMapComm.get(split1[0]) + "_" + split1[1]); + result.setStdDevMonitorId(devIdMapComm.get(split2[0]) + "_" + split2[1]); result.setAdType(errSysDtls.get(0).getScriptType()); result.setDataType(DataSourceEnum.REAL_DATA.getValue()); @@ -1804,6 +1833,20 @@ public class DetectionServiceImpl { List standardDevList = standardDevSqlData.stream().filter(j -> desc.equals(j.getDesc())) .map(DevData.SqlDataDTO::getList).collect(Collectors.toList()); + // 如果角型接法中,不存在线电压有效值,则取相电压有效值进行计算 + if (CollUtil.isEmpty(devList)) { + if (desc.equals(DetectionCodeEnum.PVRMS.getCode())) { + devList = devSqlData.stream().filter(j -> DetectionCodeEnum.VRMS.getCode().equals(j.getDesc())) + .map(DevData.SqlDataDTO::getList).collect(Collectors.toList()); + } + } + if (CollUtil.isEmpty(standardDevList)) { + if (desc.equals(DetectionCodeEnum.PVRMS.getCode())) { + standardDevList = standardDevSqlData.stream().filter(j -> DetectionCodeEnum.VRMS.getCode().equals(j.getDesc())) + .map(DevData.SqlDataDTO::getList).collect(Collectors.toList()); + } + } + aDev.addAll(devList.stream().filter(x -> ObjectUtil.isNotNull(x.getA())) .map(x -> x.getA().doubleValue()) .collect(Collectors.toList())); @@ -1927,6 +1970,7 @@ public class DetectionServiceImpl { String harmCode, Integer harmonicFlag, DictDataEnum dataRule) { + System.out.println("aaa" + dev.size() + " " + standardDev.size()); Map>>> resultMap = new HashMap<>(3); // key为相别、value{key为谐波次数,value为按数据处理原则处理后的数据} @@ -1947,9 +1991,21 @@ public class DetectionServiceImpl { 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(); + first1 = devSqlData.stream().filter(j -> fundCode.equals(j.getDesc())).collect(Collectors.toList()).stream().findFirst(); + first2 = standardDevSqlData.stream().filter(j -> fundCode.equals(j.getDesc())).collect(Collectors.toList()).stream().findFirst(); } + // 如果角型接法中,不存在线电压谐波电压基波有效值,则取相电压谐波电压基波有效值进行计算 + if (!first1.isPresent()) { + if (DetectionCodeEnum.PU1.getCode().equals(fundCode)) { + first1 = devSqlData.stream().filter(j -> DetectionCodeEnum.U1.getCode().equals(j.getDesc())).collect(Collectors.toList()).stream().findFirst(); + } + } + if (!first2.isPresent()) { + if (DetectionCodeEnum.PU1.getCode().equals(fundCode)) { + first2 = devSqlData.stream().filter(j -> DetectionCodeEnum.U1.getCode().equals(j.getDesc())).collect(Collectors.toList()).stream().findFirst(); + } + } + DevData.SqlDataDTO fund1 = null; DevData.SqlDataDTO fund2 = null; if (first1.isPresent()) { @@ -1958,8 +2014,28 @@ public class DetectionServiceImpl { if (first2.isPresent()) { fund2 = first2.get(); } + List devHarmList = dev.get(i).getSqlDataHarm().stream().filter(x -> x.getDesc().equals(harmCode)).collect(Collectors.toList()); - List stdDevHarmList = dev.get(i).getSqlDataHarm().stream().filter(x -> x.getDesc().equals(harmCode)).collect(Collectors.toList()); + List stdDevHarmList = standardDev.get(i).getSqlDataHarm().stream().filter(x -> x.getDesc().equals(harmCode)).collect(Collectors.toList()); + + // 如果角型接法中,不存在线电压谐波电压含有率,则取相电压谐波电压含有率进行计算 + if (CollUtil.isEmpty(devHarmList)) { + if (DetectionCodeEnum.PV2_50.getCode().equals(harmCode)) { + devHarmList = dev.get(i).getSqlDataHarm().stream().filter(x -> DetectionCodeEnum.V2_50.getCode().equals(x.getDesc())).collect(Collectors.toList()); + } + if (DetectionCodeEnum.PSV_1_49.getCode().equals(harmCode)) { + devHarmList = dev.get(i).getSqlDataHarm().stream().filter(x -> DetectionCodeEnum.SV_1_49.getCode().equals(x.getDesc())).collect(Collectors.toList()); + } + } + if (CollUtil.isEmpty(stdDevHarmList)) { + if (DetectionCodeEnum.PV2_50.getCode().equals(harmCode)) { + stdDevHarmList = standardDev.get(i).getSqlDataHarm().stream().filter(x -> DetectionCodeEnum.V2_50.getCode().equals(x.getDesc())).collect(Collectors.toList()); + } + if (DetectionCodeEnum.PSV_1_49.getCode().equals(harmCode)) { + stdDevHarmList = standardDev.get(i).getSqlDataHarm().stream().filter(x -> DetectionCodeEnum.SV_1_49.getCode().equals(x.getDesc())).collect(Collectors.toList()); + } + } + if (CollUtil.isNotEmpty(devHarmList) && CollUtil.isNotEmpty(stdDevHarmList)) { DevData.SqlDataHarmDTO devHarm = devHarmList.get(0); DevData.SqlDataHarmDTO stdDevHarm = stdDevHarmList.get(0); @@ -2058,12 +2134,13 @@ public class DetectionServiceImpl { Integer scale) { List detectionDataList = new ArrayList<>(); List U1List = new ArrayList<>(); + if (U.equals(type)) { + U1List.addAll(standardDevMap.get(0.0)); + } standardDevMap.forEach((harmonicNum, stdDataList) -> { - if (U.equals(type)) { - // todo 间谐波电压使用U1??? - U1List.addAll(standardDevMap.get(1.0)); + if (harmonicNum != 0.0) { + detectionDataList.addAll(this.getDetectionDataList(devMap.get(harmonicNum), stdDataList, U1List, pqErrSysDtls, fData, harmonicNum, scale)); } - detectionDataList.addAll(this.getDetectionDataList(devMap.get(harmonicNum), stdDataList, U1List, pqErrSysDtls, fData, harmonicNum, scale)); }); return detectionDataList; } 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 90cf445b..6e3188be 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 @@ -6,7 +6,6 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.njcn.common.pojo.exception.BusinessException; -import com.njcn.db.mybatisplus.handler.DynamicTableNameHandler; import com.njcn.gather.detection.handler.SocketContrastResponseService; import com.njcn.gather.detection.handler.SocketDevResponseService; import com.njcn.gather.detection.handler.SocketSourceResponseService; @@ -37,20 +36,21 @@ import com.njcn.gather.script.service.IPqScriptCheckDataService; import com.njcn.gather.script.service.IPqScriptDtlsService; import com.njcn.gather.source.pojo.po.SourceInitialize; import com.njcn.gather.source.service.IPqSourceService; -import com.njcn.gather.storage.pojo.po.ContrastHarmonicResult; -import com.njcn.gather.storage.pojo.po.ContrastNonHarmonicResult; -import com.njcn.gather.storage.service.ContrastHarmonicService; -import com.njcn.gather.storage.service.ContrastNonHarmonicService; -import com.njcn.gather.system.cfg.pojo.po.SysTestConfig; -import com.njcn.gather.system.cfg.service.ISysTestConfigService; import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum; import com.njcn.gather.system.dictionary.service.IDictDataService; +import com.njcn.web.utils.HttpServletUtil; import com.njcn.web.utils.RequestUtil; import io.netty.channel.Channel; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletResponse; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStream; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -69,16 +69,16 @@ public class PreDetectionServiceImpl implements PreDetectionService { private final IAdPlanSourceService adPlanSourceService; private final IPqSourceService pqSourceService; private final IPqScriptDtlsService pqScriptDtlsService; - private final ISysTestConfigService testConfigService; private final SocketDevResponseService socketDevResponseService; private final SocketSourceResponseService socketSourceResponseService; private final SocketContrastResponseService socketContrastResponseService; private final IPqScriptCheckDataService iPqScriptCheckDataService; - private final ContrastNonHarmonicService contrastNonHarmonicService; - private final ContrastHarmonicService contrastHarmonicService; private final SocketManager socketManager; + @Value("${log.homeDir}") + private String alignDataFilePath; + @Override public void sourceCommunicationCheck(PreDetectionParam param) { @@ -251,9 +251,9 @@ public class PreDetectionServiceImpl implements PreDetectionService { PqScriptCheckDataParam checkDataParam = new PqScriptCheckDataParam(); checkDataParam.setScriptId(param.getScriptId()); checkDataParam.setIsValueTypeName(false); - List valueType = iPqScriptCheckDataService.getValueType(checkDataParam); + List adType = iPqScriptCheckDataService.getValueType(checkDataParam); - iPqDevService.updateResult(param.getDevIds(), valueType, param.getCode(), param.getUserId(), param.getTemperature(), param.getHumidity()); + iPqDevService.updateResult(false, param.getDevIds(), adType, param.getCode(), param.getUserId(), param.getTemperature(), param.getHumidity()); CnSocketUtil.quitSend(param); } @@ -330,36 +330,26 @@ public class PreDetectionServiceImpl implements PreDetectionService { } @Override - public Map getContrastTestNumInfo(String planId) { - AdPlan plan = iAdPlanService.getById(planId); - SysTestConfig oneConfig = testConfigService.getOneConfig(); - - Integer maxNum = 1; - String code = String.valueOf(plan.getCode()); - String adNonTable = "ad_non_harmonic_"; - String adTable = "ad_harmonic_"; - - DynamicTableNameHandler.setTableName(adNonTable + code); - ContrastNonHarmonicResult result1 = contrastNonHarmonicService.lambdaQuery().select(ContrastNonHarmonicResult::getNum).orderByDesc().last("LIMIT 1").one(); - if (ObjectUtil.isNotNull(result1)) { - if (result1.getNum().compareTo(maxNum) > 0) { - maxNum = result1.getNum() + 1; + public void exportAlignData() { + String fileName = "实时数据.xlsx"; + HttpServletResponse response = HttpServletUtil.getResponse(); + response.reset(); + response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); + response.setContentType("application/octet-stream;charset=UTF-8"); + try { + InputStream inputStream = new FileInputStream(alignDataFilePath + "\\" + fileName); + byte[] buffer = new byte[1024]; + int len = 0; + ServletOutputStream outputStream = response.getOutputStream(); + while ((len = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, len); } + outputStream.flush(); + outputStream.close(); + inputStream.close(); + } catch (IOException e) { + throw new RuntimeException(e); } - DynamicTableNameHandler.remove(); - - DynamicTableNameHandler.setTableName(adTable + code); - ContrastHarmonicResult result2 = contrastHarmonicService.lambdaQuery().select(ContrastHarmonicResult::getNum).orderByDesc().last("LIMIT 1").one(); - if (ObjectUtil.isNotNull(result2)) { - if (result2.getNum().compareTo(maxNum) > 0) { - maxNum = result2.getNum() + 1; - } - } - DynamicTableNameHandler.remove(); - - Map map = new HashMap<>(); - map.put(oneConfig.getMaxTime(), maxNum); - return map; } /** @@ -394,6 +384,10 @@ public class PreDetectionServiceImpl implements PreDetectionService { socketMsg.setData(jsonString); PreDetectionParam preDetectionParam = new PreDetectionParam(); preDetectionParam.setUserPageId(param.getLoginName()); + preDetectionParam.setTestItemList(param.getTestItemList()); + preDetectionParam.setNumMap(param.getNumMap()); + preDetectionParam.setDevIds(param.getDevIds()); + preDetectionParam.setUserId(param.getUserId()); WebServiceManager.addPreDetectionParam(param.getLoginName(), preDetectionParam); socketManager.smartSendToContrast(param, JSON.toJSONString(socketMsg)); } 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 67e779ae..7f95cde9 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 @@ -92,7 +92,7 @@ public class FormalTestManager { /** * 比对式检测-检测项。key为检测项id,value为检测项code */ - public static Map testItemMap = new HashMap<>(); + public static Map testItemMap = new HashMap<>(); /** * 数据处理原则 @@ -102,7 +102,12 @@ public class FormalTestManager { /** * 所有参与比对式检测的被检设备、标准设备配对关系。key:被检设备ip_通道号,value:标准设备ip_通道号 */ - public static HashBiMap pairsMap = HashBiMap.create(); + public static HashBiMap pairsIpMap = HashBiMap.create(); + + /** + * 所有参与比对式检测的被检设备、标准设备配对关系。key:被检设备id_通道号,value:标准设备id_通道号 + */ + public static HashBiMap pairsIdMap = HashBiMap.create(); /** * 被检设备的数据。key:设备ip_通道号,value:DevData数据集合 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 fcb56985..3ded6040 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 @@ -22,7 +22,6 @@ import io.netty.handler.codec.string.StringEncoder; import io.netty.handler.timeout.IdleStateHandler; import io.netty.util.CharsetUtil; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; @@ -127,7 +126,9 @@ public class NettyClient { PreDetectionParam preDetectionParam = new PreDetectionParam(); preDetectionParam.setUserPageId(param.getLoginName()); preDetectionParam.setTestItemList(param.getTestItemList()); - preDetectionParam.setNum(param.getNum()); + preDetectionParam.setNumMap(param.getNumMap()); + preDetectionParam.setDevIds(param.getDevIds()); + preDetectionParam.setUserId(param.getUserId()); NettyContrastClientHandler handler = new NettyContrastClientHandler(preDetectionParam, socketContrastResponseService); executeSocketConnection(ip, port, preDetectionParam, msg, handler); } diff --git a/detection/src/main/java/com/njcn/gather/device/service/IPqDevService.java b/detection/src/main/java/com/njcn/gather/device/service/IPqDevService.java index 98ba7451..e072ceb9 100644 --- a/detection/src/main/java/com/njcn/gather/device/service/IPqDevService.java +++ b/detection/src/main/java/com/njcn/gather/device/service/IPqDevService.java @@ -109,15 +109,16 @@ public interface IPqDevService extends IService { /** * 正式监测完成,修改中断状态 * + * @param isContrast * @param ids - * @param valueType + * @param adType * @param code * @param userId * @param temperature * @param humidity * @return */ - boolean updateResult(List ids, List valueType, String code, String userId, Float temperature, Float humidity); + boolean updateResult(boolean isContrast,List ids, List adType, String code,String userId, Float temperature, Float humidity); void updatePqDevReportState(String devId, int i); 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 acc12a11..aa011011 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 @@ -21,6 +21,7 @@ import com.njcn.common.pojo.enums.common.DataStateEnum; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.poi.PullDown; import com.njcn.common.utils.EncryptionUtil; +import com.njcn.common.utils.JwtUtil; import com.njcn.db.mybatisplus.constant.DbConstant; import com.njcn.gather.device.mapper.PqDevMapper; import com.njcn.gather.device.pojo.enums.*; @@ -48,6 +49,7 @@ import com.njcn.gather.user.user.service.ISysUserService; import com.njcn.web.factory.PageFactory; import com.njcn.web.utils.ExcelUtil; import com.njcn.web.utils.PoiUtil; +import com.njcn.web.utils.RequestUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; @@ -434,10 +436,11 @@ public class PqDevServiceImpl extends ServiceImpl implements @Override - public boolean updateResult(List ids, List valueType, String code, String userId, Float temperature, Float humidity) { + public boolean updateResult(boolean isContrast, List ids, List adType, String code,String userId, Float temperature, Float humidity) { if (CollUtil.isNotEmpty(ids)) { + SysTestConfig config = sysTestConfigService.getOneConfig(); - Map result = detectionDataDealService.devResult(ids, valueType, code); + Map result = detectionDataDealService.devResult(isContrast, ids, adType, code); List list = new ArrayList<>(); if (CollUtil.isNotEmpty(ids)) { list.addAll(this.baseMapper.listByDevIds(ids)); 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 e6a3c852..bd5289cd 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 @@ -33,18 +33,8 @@ and Num = #{num}