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 ef0f69ae..37b83823 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 @@ -4,15 +4,13 @@ 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; +import cn.hutool.core.date.DatePattern; 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.enums.*; import com.njcn.gather.detection.pojo.param.ContrastDetectionParam; import com.njcn.gather.detection.pojo.param.DevPhaseSequenceParam; import com.njcn.gather.detection.pojo.param.PreDetectionParam; @@ -56,6 +54,7 @@ import java.lang.reflect.Field; import java.math.BigDecimal; import java.text.DecimalFormat; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -130,7 +129,7 @@ public class SocketContrastResponseService { @Value("${log.homeDir}") private String alignDataFilePath; - private static final Map> testItemCodeMap = new HashMap() {{ + public static final Map> testItemCodeMap = new HashMap() {{ put("FREQ", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.FREQ.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())); @@ -141,7 +140,7 @@ public class SocketContrastResponseService { 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())); +// put("P", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.P_FUND.getCode())); }}; /** @@ -348,6 +347,10 @@ public class SocketContrastResponseService { case FORMAL_REAL: this.formalDeal(param, socketDataMsg); break; + // 启动录波 + case RECORD_WAVE: + this.recordWave(param, socketDataMsg); + break; //退出关闭 case QUITE: quitDeal(socketDataMsg, param); @@ -819,6 +822,7 @@ public class SocketContrastResponseService { */ private void formalDeal(PreDetectionParam param, SocketDataMsg socketDataMsg) { String data = socketDataMsg.getData(); + String s = param.getUserPageId() + CnSocketUtil.CONTRAST_DEV_TAG; DevData devData = JSON.parseObject(data, DevData.class); SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); @@ -905,7 +909,6 @@ public class SocketContrastResponseService { scheduledFuture.cancel(true); scheduler.shutdown(); - String errorSysId = FormalTestManager.currentTestPlan.getErrorSysId(); String code = String.valueOf(FormalTestManager.currentTestPlan.getCode()); @@ -936,13 +939,46 @@ public class SocketContrastResponseService { this.clearData(); - // 最终将检测结果推送到前端 - 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()); + List adTypes = FormalTestManager.testItemMap.keySet().stream().collect(Collectors.toList()); +// Map result = detectionDataDealService.devResult(true, FormalTestManager.pairsIdMap.keySet().stream().collect(Collectors.toList()), adTypes, code); +// // 若有不符合的 +// if (result.values().stream().anyMatch(r -> r.equals(ResultEnum.NOT_QUALIFIED.getValue()))) { +// // 判断是否启用录波 +// String datasourceId = FormalTestManager.currentTestPlan.getDatasourceId(); +// if (datasourceId.contains(DataSourceEnum.WAVE_DATA.getValue())) { +// FormalTestManager.currentStep = SourceOperateCodeEnum.RECORD_WAVE; +// SocketMsg socketMsg = new SocketMsg<>(); +// socketMsg.setRequestId(SourceOperateCodeEnum.YJC_XYJY.getValue()); +// socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_03.getValue()); +// Map> map = new HashMap<>(1); +// +// for (int i = 0; i < FormalTestManager.devList.size(); i++) { +// PreDetection preDetection = FormalTestManager.devList.get(i); +// +// } +// +// FormalTestManager.devList.stream().flatMap(obj -> obj.getMonitorList().stream()).forEach(monitor -> { +// String lineId = monitor.getLineId(); +// String[] split = lineId.split(CnSocketUtil.SPLIT_TAG); +// Integer i = result.get(FormalTestManager.devIdMapComm.get(split[1])); +// if (i.equals(ResultEnum.NOT_QUALIFIED.getValue())) { +// +// } +// }); +// +// map.put("deviceList", FormalTestManager.devList); +// String jsonString = JSON.toJSONString(map); +// socketMsg.setData(jsonString); +// SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); +// } +// } else { + // 最终将检测结果推送到前端 + webSend.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode());//最终成功推送 + webSend.setData(JSON.toJSONString(allResultList)); + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); + // 修改设备状态 + pqDevService.updateResult(true, param.getDevIds(), adTypes, code, param.getUserId(), param.getTemperature(), param.getHumidity()); +// } } } } @@ -967,6 +1003,29 @@ public class SocketContrastResponseService { } } + + /** + * 启动录波功能 + * + * @param param + * @param socketDataMsg + */ + private void recordWave(PreDetectionParam param, SocketDataMsg socketDataMsg) { + String data = socketDataMsg.getData(); + DevData devData = JSON.parseObject(data, DevData.class); + SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); + + switch (Objects.requireNonNull(dictDataEnumByCode)) { + case SUCCESS: + case NORMAL_RESPONSE: + + case RECORD_WAVE_FAILED: + WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg)); + CnSocketUtil.contrastSendquit(param.getUserPageId(), false); + break; + } + } + /** * 退出检测返回 */ @@ -1075,6 +1134,7 @@ public class SocketContrastResponseService { webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue()); webSend.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode()); List data = new ArrayList<>(); + DateTimeFormatter dtf = DateTimeFormatter.ofPattern(DatePattern.ISO8601_PATTERN); // key为标准设备的ip, value为该ip下所有通道的设备数据 Map> ipDevDataMap = FormalTestManager.standardDevDataMap.values().stream().flatMap(List::stream).collect(Collectors.groupingBy(obj -> obj.getId().split(CnSocketUtil.SPLIT_TAG)[0])); @@ -1117,7 +1177,9 @@ public class SocketContrastResponseService { rawData.setUaStdDev(list1.getA()); rawData.setUbStdDev(list1.getB()); rawData.setUcStdDev(list1.getC()); - rawData.setTimeStdDev(obj.getTime().replace("T", " ")); + + LocalDateTime localDateTime = DetectionUtil.timeFormat(obj.getTime(), DetectionUtil.FORMATTER); + rawData.setTimeStdDev(localDateTime.format(dtf)); DevData devData = devDataList.stream().filter(obj1 -> DetectionUtil.isAlignData(obj1, obj)).findFirst().orElse(null); if (ObjectUtil.isNotNull(devData)) { @@ -1135,7 +1197,8 @@ public class SocketContrastResponseService { rawData.setUaDev(list2.getA()); rawData.setUbDev(list2.getB()); rawData.setUcDev(list2.getC()); - rawData.setTimeDev(devData.getTime().replace("T", " ")); + localDateTime = DetectionUtil.timeFormat(devData.getTime(), DetectionUtil.FORMATTER); + rawData.setTimeDev(localDateTime.format(dtf)); devDataList.remove(devData); } return rawData; @@ -1166,6 +1229,7 @@ public class SocketContrastResponseService { */ private void saveAlignData() { List> sheetsList = new ArrayList<>(); + DateTimeFormatter dtf = DateTimeFormatter.ofPattern(DatePattern.ISO8601_PATTERN); // key为被检设备的ip, value为该ip下所有通道的设备数据 Map> ipDevDataMap = FormalTestManager.standardDevDataMap.values().stream().flatMap(List::stream).collect(Collectors.groupingBy(obj -> obj.getId().split(CnSocketUtil.SPLIT_TAG)[0])); @@ -1203,7 +1267,8 @@ public class SocketContrastResponseService { list1 = sqlDataDTO1.getList(); } AlignDataExcel alignDataExcel = new AlignDataExcel(); - alignDataExcel.setTimeStdDev(obj.getTime().replace("T", " ")); + LocalDateTime localDateTime = DetectionUtil.timeFormat(obj.getTime(), DetectionUtil.FORMATTER); + alignDataExcel.setTimeStdDev(localDateTime.format(dtf)); alignDataExcel.setUaStdDev(list1.getA()); alignDataExcel.setUbStdDev(list1.getB()); alignDataExcel.setUcStdDev(list1.getC()); @@ -1221,7 +1286,8 @@ public class SocketContrastResponseService { if (ObjectUtil.isNotNull(sqlDataDTO2)) { list2 = sqlDataDTO2.getList(); } - alignDataExcel.setTimeDev(devData.getTime().replace("T", " ")); + localDateTime = DetectionUtil.timeFormat(devData.getTime(), DetectionUtil.FORMATTER); + alignDataExcel.setTimeDev(localDateTime.format(dtf)); alignDataExcel.setUaDev(list2.getA()); alignDataExcel.setUbDev(list2.getB()); alignDataExcel.setUcDev(list2.getC()); 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 6c243175..a2200c6a 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 @@ -27,6 +27,7 @@ import com.njcn.gather.device.service.IPqDevService; import com.njcn.gather.device.service.IPqDevSubService; import com.njcn.gather.plan.pojo.po.AdPlan; import com.njcn.gather.plan.service.IAdPlanService; +import com.njcn.gather.result.pojo.enums.ResultUnitEnum; import com.njcn.gather.script.pojo.param.PqScriptCheckDataParam; import com.njcn.gather.script.pojo.param.PqScriptIssueParam; import com.njcn.gather.script.pojo.po.SourceIssue; @@ -436,13 +437,19 @@ public class SocketDevResponseService { Map sourceIssueMap = sourceIssues.stream().collect(Collectors.groupingBy(SourceIssue::getType, Collectors.counting())); SocketManager.initMap(sourceIssueMap); - socketMsg.setData(JSON.toJSONString(sourceIssues.get(0))); - socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + sourceIssues.get(0).getType()); - SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, JSON.toJSONString(socketMsg)); - //告诉前端当前项开始了 WebSocketVO webSocketVO = new WebSocketVO<>(); - webSocketVO.setRequestId(sourceIssues.get(0).getType() + CnSocketUtil.START_TAG); + String type = sourceIssues.get(0).getType(); + if (ResultUnitEnum.P.getCode().equals(type)) { + sourceIssues.get(0).setType(ResultUnitEnum.V_ABSOLUTELY.getCode()); + webSocketVO.setRequestId(ResultUnitEnum.P.getCode() + CnSocketUtil.START_TAG); + } else { + webSocketVO.setRequestId(sourceIssues.get(0).getType() + CnSocketUtil.START_TAG); + } + socketMsg.setData(JSON.toJSONString(sourceIssues.get(0))); + socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + type); + SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, JSON.toJSONString(socketMsg)); + webSocketVO.setDesc(null); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO)); } else { @@ -842,9 +849,9 @@ public class SocketDevResponseService { boolean isContinue = true; List descList = icdCheckData.getResultData().stream().map( obj -> { - if(DetectionCodeEnum.MAG.getCode().equals(obj.getDesc()) || DetectionCodeEnum.DUR.getCode().equals(obj.getDesc())){ + if (DetectionCodeEnum.MAG.getCode().equals(obj.getDesc()) || DetectionCodeEnum.DUR.getCode().equals(obj.getDesc())) { return DetectionCodeEnum.AVG_PREFIX.getCode() + obj.getDesc(); - }else{ + } else { return DetectionCodeEnum.REAL_PREFIX.getCode() + obj.getDesc(); } } @@ -937,13 +944,20 @@ public class SocketDevResponseService { Map sourceIssueMap = sourceIssues.stream().collect(Collectors.groupingBy(SourceIssue::getType, Collectors.counting())); SocketManager.initMap(sourceIssueMap); - socketMsg.setData(JSON.toJSONString(sourceIssues.get(0))); - socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + sourceIssues.get(0).getType()); - SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, JSON.toJSONString(socketMsg)); - //告诉前端当前项开始了 WebSocketVO webSocketVO = new WebSocketVO<>(); - webSocketVO.setRequestId(sourceIssues.get(0).getType() + CnSocketUtil.START_TAG); + String type = sourceIssues.get(0).getType(); + if (ResultUnitEnum.P.getCode().equals(type)) { + sourceIssues.get(0).setType(ResultUnitEnum.V_ABSOLUTELY.getCode()); + webSocketVO.setRequestId(ResultUnitEnum.P.getCode() + CnSocketUtil.START_TAG); + } else { + webSocketVO.setRequestId(sourceIssues.get(0).getType() + CnSocketUtil.START_TAG); + } + socketMsg.setData(JSON.toJSONString(sourceIssues.get(0))); + socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + type); + socketMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue()); + SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, JSON.toJSONString(socketMsg)); + webSocketVO.setDesc(null); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO)); } @@ -1187,14 +1201,20 @@ public class SocketDevResponseService { Map sourceIssueMap = sourceIssues.stream().collect(Collectors.groupingBy(SourceIssue::getType, Collectors.counting())); SocketManager.initMap(sourceIssueMap); + //告诉前端当前项开始了 + WebSocketVO webSocketVO = new WebSocketVO<>(); + String type = sourceIssues.get(0).getType(); + if (ResultUnitEnum.P.getCode().equals(type)) { + sourceIssues.get(0).setType(ResultUnitEnum.V_ABSOLUTELY.getCode()); + webSocketVO.setRequestId(ResultUnitEnum.P.getCode() + CnSocketUtil.START_TAG); + } else { + webSocketVO.setRequestId(sourceIssues.get(0).getType() + CnSocketUtil.START_TAG); + } socketMsg.setData(JSON.toJSONString(sourceIssues.get(0))); - socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + sourceIssues.get(0).getType()); + socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + type); socketMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue()); SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, JSON.toJSONString(socketMsg)); - //告诉前端当前项开始了 - WebSocketVO webSocketVO = new WebSocketVO<>(); - webSocketVO.setRequestId(sourceIssues.get(0).getType() + CnSocketUtil.START_TAG); webSocketVO.setDesc(null); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO)); } else { @@ -1281,8 +1301,14 @@ public class SocketDevResponseService { System.out.println("当前小项结束进行删除============" + sourceIssue.getType() + CnSocketUtil.SPLIT_TAG + sourceIssue.getIndex()); //小项检测完后小项数减一,并更新map - long residueCount = SocketManager.getSourceTarget(sourceIssue.getType()) - 1; - SocketManager.addTargetMap(sourceIssue.getType(), residueCount); + long residueCount = 0; + if (sourceIssue.getIsP()) { + residueCount = SocketManager.getSourceTarget(ResultUnitEnum.P.getCode()) - 1; + SocketManager.addTargetMap(ResultUnitEnum.P.getCode(), residueCount); + } else { + residueCount = SocketManager.getSourceTarget(sourceIssue.getType()) - 1; + SocketManager.addTargetMap(sourceIssue.getType(), residueCount); + } System.out.println("该大项还有" + residueCount + "个小项没有进行检测!!!!!!!!"); //当该大项中小项数量变为0,则任务该大项检测结束 @@ -1326,12 +1352,17 @@ public class SocketDevResponseService { if (residueCount == 0) { WebServiceManager.sendDetectionMessage(param.getUserPageId(), sourceIssues.getType() + CnSocketUtil.START_TAG, null, new ArrayList<>(), null); } + String type = sourceIssues.getType(); + if (sourceIssues.getIsP()) { + sourceIssues.setType(ResultUnitEnum.V_ABSOLUTELY.getCode()); + type = ResultUnitEnum.P.getCode(); + } //控源下发下一个小项脚本 SocketMsg xuMsg = new SocketMsg<>(); xuMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue()); xuMsg.setData(JSON.toJSONString(sourceIssues)); - xuMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + sourceIssues.getType()); + xuMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + type); SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, JSON.toJSONString(xuMsg)); } else { //TODO 是否最终检测完成需要推送给用户 @@ -1836,6 +1867,9 @@ public class SocketDevResponseService { if (nonHarmonicList.contains(sourceIssue.getType())) { for (DevData.SqlDataDTO sqlDataDTO : data.getSqlData()) { + if (sqlDataDTO.getDesc().equals("PF")) { + continue; + } DevData.SqlDataDTO.ListDTO listDTO = sqlDataDTO.getList(); SimAndDigNonHarmonicResult adNonHarmonicResult = new SimAndDigNonHarmonicResult(); adNonHarmonicResult.setTimeId(localDateTime); diff --git a/detection/src/main/java/com/njcn/gather/detection/handler/SocketSourceResponseService.java b/detection/src/main/java/com/njcn/gather/detection/handler/SocketSourceResponseService.java index 52842553..3d6e4a63 100644 --- a/detection/src/main/java/com/njcn/gather/detection/handler/SocketSourceResponseService.java +++ b/detection/src/main/java/com/njcn/gather/detection/handler/SocketSourceResponseService.java @@ -56,12 +56,12 @@ public class SocketSourceResponseService { * 设备信息服务,提供设备基础信息查询功能 */ private final IPqDevService iPqDevService; - + /** * Socket连接管理器,负责管理设备和源的Socket连接 */ private final SocketManager socketManager; - + /** * 发送WebSocket消息到指定用户页面 *

@@ -75,7 +75,7 @@ public class SocketSourceResponseService { private void sendWebSocketMessage(String userPageId, Object data) { WebServiceManager.sendMsg(userPageId, JSON.toJSONString(data)); } - + /** * 发送错误消息并退出源连接 *

@@ -97,7 +97,7 @@ public class SocketSourceResponseService { socketMsg.setData(errorMessage); sendWebSocketMessage(param.getUserPageId(), socketMsg); } - + /** * 发送错误消息并退出源连接(使用枚举消息) *

@@ -122,7 +122,7 @@ public class SocketSourceResponseService { *

*/ private List devList = new ArrayList<>(); - + /** * 当前检测会话中的监测点ID列表 *

@@ -156,11 +156,11 @@ public class SocketSourceResponseService { public void deal(PreDetectionParam param, String msg) throws Exception { // 解析接收到的Socket消息 SocketDataMsg socketDataMsg = MsgUtil.socketDataMsg(msg); - + // 从requestId中提取操作码,requestId格式为:操作码_步骤标识 String[] tem = socketDataMsg.getRequestId().split(CnSocketUtil.STEP_TAG); SourceOperateCodeEnum enumByCode = SourceOperateCodeEnum.getDictDataEnumByCode(tem[0]); - + if (ObjectUtil.isNotNull(enumByCode)) { switch (enumByCode) { // 源初始化处理:根据是否有计划ID判断是正式检测还是模拟检测 @@ -173,12 +173,12 @@ public class SocketSourceResponseService { handleYtxjySimulate(param, socketDataMsg); } break; - + // 相序检测:检测设备的相序是否正确 case YJC_XUJY: phaseSequenceDev(param, socketDataMsg); break; - + // 正式检测:根据是否有计划ID选择不同的处理方式 case FORMAL_REAL: if (ObjectUtil.isNotNull(param.getPlanId())) { @@ -189,22 +189,22 @@ public class SocketSourceResponseService { handleSimulateTest(param, socketDataMsg); } break; - + // 系数校验:验证设备的计量系数是否准确 case Coefficient_Check: coefficient(param, socketDataMsg); break; - + // 退出源连接:清理资源并关闭连接 case QUITE_SOURCE: quitDeal(socketDataMsg, param); break; - + // YXT操作:暂未实现具体功能 case YXT: // TODO: 实现YXT操作的具体逻辑 break; - + default: // TODO: 记录未知操作码到日志,并向前端发送友好提示 break; @@ -243,7 +243,7 @@ public class SocketSourceResponseService { if (param.getSendWebMsg()) { sendWebSocketMessage(param.getUserPageId(), socketDataMsg); } - log.info("模拟检测源初始化成功,用户: {}, WebSocket发送: {}", + log.info("模拟检测源初始化成功,用户: {}, WebSocket发送: {}", param.getUserPageId(), param.getSendWebMsg()); break; case UNPROCESSED_BUSINESS: @@ -283,7 +283,7 @@ public class SocketSourceResponseService { switch (dictDataEnumByCode) { case SUCCESS: sendWebSocketMessage(param.getUserPageId(), socketDataMsg); - log.info("模拟检测源成功执行脚本,用户: {}, 响应消息: {}", + log.info("模拟检测源成功执行脚本,用户: {}, 响应消息: {}", param.getUserPageId(), JSON.toJSONString(socketDataMsg)); break; case UNPROCESSED_BUSINESS: @@ -395,7 +395,7 @@ public class SocketSourceResponseService { WebServiceManager.sendUnknownErrorMessage(param.getUserPageId()); break; } - }else{ + } else { // todo... 这种情况是报文的状态码不一致,需要记录到日志表,以便问题追踪 } } @@ -454,9 +454,9 @@ public class SocketSourceResponseService { * 当程控源成功执行脚本后,根据检测项目类型向设备发送相应的数据请求: * 1. 获取源脚本信息,确定检测类型和数据类型 * 2. 根据检测类型设置不同的读取参数: - * - 闪变(F):忽略1次,读取2次,使用DEV_DATA_REQUEST_01 - * - 暂态(VOLTAGE):忽略5次,读取1次,使用DEV_DATA_REQUEST_03 - * - 其他类型:忽略5次,读取5次,根据数据类型选择操作码 + * - 闪变(F):忽略1次,读取2次,使用DEV_DATA_REQUEST_01 + * - 暂态(VOLTAGE):忽略5次,读取1次,使用DEV_DATA_REQUEST_03 + * - 其他类型:忽略5次,读取5次,根据数据类型选择操作码 * 3. 构造设备数据请求并发送 * 4. 向前端推送检测开始信息 *

@@ -483,20 +483,20 @@ public class SocketSourceResponseService { // 构造设备通道标识:用户ID + 设备标签 String s = param.getUserPageId() + CnSocketUtil.DEV_TAG; - + // 获取当前检测的源脚本信息,包含检测类型和数据要求 SourceIssue sourceIssue = SocketManager.getSourceList().get(0); // 数据类型列表,格式:real$VRMS、real$IRMS List comm = sourceIssue.getDevValueTypeList(); log.debug("向设备下发检测参数,用户: {}, 数据类型: {}", param.getUserPageId(), comm); - + // 设置请求ID:正式检测操作码 + 步骤标识 + 检测类型 - socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + sourceIssue.getType()); - + socketMsg.setRequestId(socketDataMsg.getRequestId()); + // 根据检测类型设置不同的读取参数和操作码 int ignoreCount; int readData; - + if (DicDataEnum.F.getCode().equals(sourceIssue.getType())) { // 闪变检测:数据变化较慢,只需少量预热和读取 // 闪变测量稳定性好,预热1次即可 @@ -517,7 +517,7 @@ public class SocketSourceResponseService { ignoreCount = 5; // 读取5次数据进行统计分析 readData = 5; - + // 根据数据类型选择相应的请求操作码 if ("real".equals(sourceIssue.getDataType())) { // 实时数据:瞬时值或有效值 @@ -527,13 +527,16 @@ public class SocketSourceResponseService { socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_01.getValue()); } } - log.debug("检测设备列表状态检查,用户: {}, 设备列表为空: {}", + log.debug("检测设备列表状态检查,用户: {}, 设备列表为空: {}", param.getUserPageId(), CollectionUtils.isEmpty(devList)); // 构造设备数据请求参数 DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam(); // 设置监测点ID列表 phaseSequenceParam.setMoniterIdList(monitorIdList); + if (socketDataMsg.getRequestId().equals(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + "P")) { + comm.add("real$PF"); + } // 设置数据类型列表 phaseSequenceParam.setDataType(comm); // 设置读取次数 @@ -541,7 +544,7 @@ public class SocketSourceResponseService { // 设置忽略次数 phaseSequenceParam.setIgnoreCount(ignoreCount); socketMsg.setData(JSON.toJSONString(phaseSequenceParam)); - + // 向设备发送数据请求 SocketManager.sendMsg(s, JSON.toJSONString(socketMsg)); @@ -638,16 +641,16 @@ public class SocketSourceResponseService { // 清空现有列表,为新的检测会话做准备 devList.clear(); monitorIdList.clear(); - + // 查询设备详细信息,包含监测点配置 this.devList = iPqDevService.getDevInfo(param.getDevIds()); - + // 提取所有设备的监测点线路ID this.monitorIdList = devList.stream() .flatMap(x -> x.getMonitorList().stream()) .map(PreDetection.MonitorListDTO::getLineId) .collect(Collectors.toList()); - + // 同步更新系数管理器中的设备列表 XiNumberManager.xiDevList = devList; } 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 a49909eb..56f6ceee 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 @@ -35,13 +35,19 @@ public enum DetectionCodeEnum { V_UNBAN("V_UNBAN", "三相电压负序不平衡度"), I_UNBAN("I_UNBAN", "三相电流负序不平衡度"), PST("PST", "短时间闪变"), - P_FUND("P_FUND", "功率"), + W("W", "有功功率"), + VARW("VARW", "无功功率"), + VAW("VAW", "视在功率"), +// PF("PF", "功率因数"), +// P_FUND("P_FUND", "基波有功功率"), +// P_HVAR("P_HVAR", "基波无功功率"), +// P_HVA("P_HVA", "基波视在功率"), I1("I1", "基波电流"), UNKNOWN_ERROR("-1", "未知异常"), - STAR("Star","星型接线"), - DELTA("Delta","角型接线"), + STAR("Star", "星型接线"), + DELTA("Delta", "角型接线"), REAL_PREFIX("real$", "实时数据前缀"), AVG_PREFIX("avg$", "统计数据前缀"); @@ -53,6 +59,7 @@ public enum DetectionCodeEnum { this.code = code; this.message = message; } + public static DetectionCodeEnum getDetectionCodeByCode(String code) { for (DetectionCodeEnum detectionCodeEnum : DetectionCodeEnum.values()) { if (ObjectUtil.equals(code, detectionCodeEnum.getCode())) { diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceOperateCodeEnum.java b/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceOperateCodeEnum.java index d4e86fdd..2ee94aa8 100644 --- a/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceOperateCodeEnum.java +++ b/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceOperateCodeEnum.java @@ -51,6 +51,7 @@ public enum SourceOperateCodeEnum { YJC_ALIGN("yjc_align","实时数据对齐校验"), YJC_MXYZXJY("yjc_mxyzxjy", "模型一致性校验"), FORMAL_REAL("formal_real","正式检测"), + RECORD_WAVE("record_wave","启动录波"), // SIMULATE_REAL("simulate_real","模拟检测"), Coefficient_Check("Coefficient_Check","系数校验"), QUITE("quit","关闭设备通讯初始化"), diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceResponseCodeEnum.java b/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceResponseCodeEnum.java index e1df41f8..718cd9b5 100644 --- a/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceResponseCodeEnum.java +++ b/detection/src/main/java/com/njcn/gather/detection/pojo/enums/SourceResponseCodeEnum.java @@ -14,6 +14,7 @@ public enum SourceResponseCodeEnum { UNPROCESSED_BUSINESS(10201, "立即响应,业务还未处理,类似肯定应答"), NORMAL_RESPONSE(10202, "正常响应中间状态码"), ICD_NOT_FOUND(10500, "未找到对应ICD"), + RECORD_WAVE_FAILED(10501, "录波失败"), MESSAGE_PARSING_ERROR(10520, "报文解析有误"), CONTROLLED_SOURCE_ERROR(10521, "程控源参数有误"), TEST_ITEM_PARSING_ERROR(10522, "测试项解析有误"), diff --git a/detection/src/main/java/com/njcn/gather/detection/service/IAdPariService.java b/detection/src/main/java/com/njcn/gather/detection/service/IAdPariService.java index 430372c5..aaacd8d4 100644 --- a/detection/src/main/java/com/njcn/gather/detection/service/IAdPariService.java +++ b/detection/src/main/java/com/njcn/gather/detection/service/IAdPariService.java @@ -3,6 +3,8 @@ package com.njcn.gather.detection.service; import com.baomidou.mybatisplus.extension.service.IService; import com.njcn.gather.detection.pojo.po.AdPair; +import java.util.List; + /** * @author caozehui * @data 2025-08-18 @@ -16,4 +18,12 @@ public interface IAdPariService extends IService { * @return */ Integer getMaxNum(String devMonitorId); + + /** + * 根据设备id查询配对关系 + * + * @param devIds + * @return + */ + List listByDevIds(List devIds); } diff --git a/detection/src/main/java/com/njcn/gather/detection/service/impl/AdPairServiceImpl.java b/detection/src/main/java/com/njcn/gather/detection/service/impl/AdPairServiceImpl.java index b86f3da5..84d9a927 100644 --- a/detection/src/main/java/com/njcn/gather/detection/service/impl/AdPairServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/detection/service/impl/AdPairServiceImpl.java @@ -1,6 +1,7 @@ package com.njcn.gather.detection.service.impl; import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.njcn.gather.detection.mapper.AdPairMapper; import com.njcn.gather.detection.pojo.po.AdPair; @@ -29,4 +30,11 @@ public class AdPairServiceImpl extends ServiceImpl impleme } return 1; } + + @Override + public List listByDevIds(List devIds) { + LambdaQueryChainWrapper wrapper = this.lambdaQuery(); + devIds.forEach(devId -> wrapper.likeRight(AdPair::getDevMonitorId, devId)); + return this.list(wrapper); + } } 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 2d5fac51..651e00d5 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 @@ -116,6 +116,9 @@ public class DetectionServiceImpl { SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); List errDtlsCheckData = pqErrSysDtlsService.listByPqErrSysIdAndTypes(param); ResultUnitEnum resultUnitEnumByCode = ResultUnitEnum.getResultUnitEnumByCode(sourceIssue.getType()); + if (sourceIssue.getIsP()) { + resultUnitEnumByCode = ResultUnitEnum.P; + } switch (resultUnitEnumByCode) { /** * 频率 @@ -381,6 +384,9 @@ public class DetectionServiceImpl { List info = new ArrayList<>(); List devValueTypeList = sourceIssue.getDevValueTypeList(); for (String s : devValueTypeList) { + if ((DetectionCodeEnum.REAL_PREFIX.getCode() + "PF").equals(s)) { + continue; + } // 根据数据处理规则取值。key为相别,value为值列表 Map> map = devListMap(dev, dataRule, s.split("\\$")[1]); Double fData = 1.0; @@ -1184,7 +1190,13 @@ public class DetectionServiceImpl { detectionData.setUnit(errSysDtl.getErrorUnit()); errSysDtl.setMaxErrorValue(maxErrorMultiply(errSysDtl, data, channelData, scale)); detectionData.setRadius(-errSysDtl.getMaxErrorValue() + "~" + errSysDtl.getMaxErrorValue()); - setDetection(dataRule, list, errSysDtl, detectionData, channelData, data, scale); + + // 处理相对值-标准值为0的问题 + if (errSysDtl.getValueType() == 2 && errSysDtl.getErrorValueType() == 1 && channelData == 0) { + detectionData.setIsData(ResultEnum.NO_ERROR_SYS.getValue()); + } else { + setDetection(dataRule, list, errSysDtl, detectionData, channelData, data, scale); + } } } return detectionData; @@ -1289,6 +1301,9 @@ public class DetectionServiceImpl { //计算装置值返回值 - 源下发值的数据 = 差值 // BigDecimal subtract = BigDecimal.valueOf(devData).setScale(scale, RoundingMode.HALF_UP).subtract(BigDecimal.valueOf(channelData)); BigDecimal subtract = BigDecimal.valueOf(devData).subtract(BigDecimal.valueOf(channelData)); +// if(ratedValue == 0 || channelData == 0){ +// return BigDecimal.valueOf(Double.MAX_VALUE); +// } //只有相对值需要%比较,绝对值直接相减就行 if (2 == error.getValueType()) { switch (error.getErrorValueType()) { @@ -1573,9 +1588,12 @@ public class DetectionServiceImpl { boolean isDelta = DetectionCodeEnum.DELTA.getCode().equals(pqMonitor.getConnection()); Double fUn = pqMonitorService.getRatedVoltage(devMonitorId); boolean isExitDelta = this.isExitDeltaIndex(devIdMapComm.get(split1[0]), devDataList); - if (isStar || !isExitDelta) { + if (isStar) { fUn = BigDecimal.valueOf(fUn).divide(BigDecimal.valueOf(Math.sqrt(3)), oneConfig.getScale(), RoundingMode.HALF_UP).doubleValue(); } +// if (isDelta && !isExitDelta) { +// 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) { @@ -1610,9 +1628,9 @@ public class DetectionServiceImpl { case IRMS: resultMap.put(PowerIndexEnum.I.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fIn, DetectionCodeEnum.IRMS.getCode(), dataRule, num, code, oneConfig.getScale())); break; - case P_FUND: - resultMap.put(PowerIndexEnum.P.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fUn * fIn, DetectionCodeEnum.P_FUND.getCode(), dataRule, num, code, oneConfig.getScale())); - break; +// case P_FUND: +// resultMap.put(PowerIndexEnum.P.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fUn * fIn, DetectionCodeEnum.P_FUND.getCode(), dataRule, num, code, oneConfig.getScale())); +// break; case V_UNBAN: resultMap.put(PowerIndexEnum.IMBV.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, false, fUn, DetectionCodeEnum.V_UNBAN.getCode(), dataRule, num, code, oneConfig.getScale())); break; @@ -1667,6 +1685,8 @@ public class DetectionServiceImpl { if (descList.containsAll(deltaIndex)) { List devInfo = pqDevService.getDevInfo(Collections.singletonList(devId)); if (devInfo.get(0).getUsePhaseIndex() == 1) { + return false; + } else { return true; } } 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 641e3590..5a8756d6 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 @@ -29,6 +29,7 @@ import com.njcn.gather.plan.pojo.po.AdPlan; import com.njcn.gather.plan.pojo.po.AdPlanSource; import com.njcn.gather.plan.service.IAdPlanService; import com.njcn.gather.plan.service.IAdPlanSourceService; +import com.njcn.gather.result.pojo.enums.ResultUnitEnum; import com.njcn.gather.script.pojo.param.PqScriptCheckDataParam; import com.njcn.gather.script.pojo.param.PqScriptIssueParam; import com.njcn.gather.script.pojo.po.SourceIssue; @@ -61,8 +62,6 @@ import java.util.stream.Collectors; @Slf4j public class PreDetectionServiceImpl implements PreDetectionService { - private final String stepTag = "&&"; - private final IPqDevService iPqDevService; private final IDictDataService dictDataService; private final IAdPlanService iAdPlanService; @@ -274,14 +273,14 @@ public class PreDetectionServiceImpl implements PreDetectionService { @Override public void sendScript(SimulateDetectionParam param) { Channel channel = SocketManager.getChannelByUserId(param.getUserPageId() + DetectionCommunicateConstant.SOURCE); - if (Objects.isNull(channel) || !channel.isActive()) { - // 进行源通信连接 - PreDetectionParam preDetectionParam = new PreDetectionParam(); - preDetectionParam.setSourceId(param.getSourceId()); - preDetectionParam.setUserPageId(param.getUserPageId()); - preDetectionParam.setSendWebMsg(false); - this.sendYtxSocketSimulate(preDetectionParam); - } +// if (Objects.isNull(channel) || !channel.isActive()) { +// // 进行源通信连接 +// PreDetectionParam preDetectionParam = new PreDetectionParam(); +// preDetectionParam.setSourceId(param.getSourceId()); +// preDetectionParam.setUserPageId(param.getUserPageId()); +// preDetectionParam.setSendWebMsg(false); +// this.sendYtxSocketSimulate(preDetectionParam); +// } //组装源控制脚本 PqScriptIssueParam issueParam = new PqScriptIssueParam(); issueParam.setSourceId(param.getSourceId()); @@ -295,12 +294,18 @@ public class PreDetectionServiceImpl implements PreDetectionService { .collect(Collectors.toList()); SourceIssue sourceIssue = sourceIssues.get(0); + String type = sourceIssue.getType(); + if (sourceIssue.getIsP()) { + sourceIssue.setType(ResultUnitEnum.V_ABSOLUTELY.getCode()); + type = ResultUnitEnum.P.getCode(); + } + List comm = sourceIssue.getDevValueTypeList(); System.out.println("向装置下发的参数ddd>>>>>>>>" + comm); SocketMsg socketMsg = new SocketMsg<>(); socketMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue()); - socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + stepTag + sourceIssue.getType()); + socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + type); socketMsg.setData(JSON.toJSONString(sourceIssues.get(0))); SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, JSON.toJSONString(socketMsg)); } diff --git a/detection/src/main/java/com/njcn/gather/plan/pojo/enums/DataSourceEnum.java b/detection/src/main/java/com/njcn/gather/plan/pojo/enums/DataSourceEnum.java index fc1130b2..fd3de769 100644 --- a/detection/src/main/java/com/njcn/gather/plan/pojo/enums/DataSourceEnum.java +++ b/detection/src/main/java/com/njcn/gather/plan/pojo/enums/DataSourceEnum.java @@ -14,7 +14,7 @@ public enum DataSourceEnum { MINUTE_STATISTICS_MIN("min", "分钟统计数据-最小"), MINUTE_STATISTICS_AVG("avg", "分钟统计数据-平均"), MINUTE_STATISTICS_CP95("cp95", "分钟统计数据-CP95"), - RECORDED_DATA("Recorded_data", "录播数据"); + WAVE_DATA("wave_data", "录播数据"); private String value; private String msg; diff --git a/detection/src/main/java/com/njcn/gather/result/pojo/param/ResultParam.java b/detection/src/main/java/com/njcn/gather/result/pojo/param/ResultParam.java index 0d8217ef..b6634a19 100644 --- a/detection/src/main/java/com/njcn/gather/result/pojo/param/ResultParam.java +++ b/detection/src/main/java/com/njcn/gather/result/pojo/param/ResultParam.java @@ -75,9 +75,7 @@ public class ResultParam { @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.PLAN_ID_FORMAT_ERROR) private String planId; - @ApiModelProperty(value = "脚本Id", required = true) - @NotBlank(message = DetectionValidMessage.SCRIPT_ID_NOT_BLANK) - @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.SCRIPT_ID_FORMAT_ERROR) + @ApiModelProperty(value = "脚本Id", required = false) private String scriptId; @ApiModelProperty(value = "误差体系Id", required = true) @@ -90,5 +88,8 @@ public class ResultParam { private String deviceId; private String code; + + @ApiModelProperty(value = "模式Id", required = true) + private String patternId; } } diff --git a/detection/src/main/java/com/njcn/gather/result/service/IResultService.java b/detection/src/main/java/com/njcn/gather/result/service/IResultService.java index 1472607a..96a68dc0 100644 --- a/detection/src/main/java/com/njcn/gather/result/service/IResultService.java +++ b/detection/src/main/java/com/njcn/gather/result/service/IResultService.java @@ -63,6 +63,7 @@ public interface IResultService { * 更换误差体系 * * @param param + * */ void changeErrorSystem(ResultParam.ChangeErrorSystemParam param); diff --git a/detection/src/main/java/com/njcn/gather/result/service/impl/ResultServiceImpl.java b/detection/src/main/java/com/njcn/gather/result/service/impl/ResultServiceImpl.java index 681fb653..0d8a522d 100644 --- a/detection/src/main/java/com/njcn/gather/result/service/impl/ResultServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/result/service/impl/ResultServiceImpl.java @@ -11,11 +11,15 @@ import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.google.common.collect.BiMap; +import com.google.common.collect.HashBiMap; import com.njcn.common.pojo.enums.common.DataStateEnum; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.utils.PubUtils; +import com.njcn.gather.detection.handler.SocketContrastResponseService; import com.njcn.gather.detection.pojo.enums.DetectionCodeEnum; import com.njcn.gather.detection.pojo.param.PreDetectionParam; +import com.njcn.gather.detection.pojo.po.AdPair; import com.njcn.gather.detection.pojo.po.DevData; import com.njcn.gather.detection.pojo.vo.AlignDataVO; import com.njcn.gather.detection.pojo.vo.DetectionData; @@ -23,6 +27,7 @@ import com.njcn.gather.detection.service.IAdPariService; import com.njcn.gather.detection.service.impl.DetectionServiceImpl; import com.njcn.gather.detection.util.socket.CnSocketUtil; import com.njcn.gather.device.pojo.enums.CommonEnum; +import com.njcn.gather.device.pojo.enums.PatternEnum; import com.njcn.gather.device.pojo.po.PqDev; import com.njcn.gather.device.service.IPqDevService; import com.njcn.gather.plan.pojo.po.AdPlan; @@ -72,6 +77,8 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.lang.reflect.Field; +import java.math.BigDecimal; +import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.*; import java.util.function.Function; @@ -351,6 +358,29 @@ public class ResultServiceImpl implements IResultService { List f = scriptDtlIndexList.stream().filter(x -> "Freq".equals(x.getValueType())).collect(Collectors.toList()); dtlType.setScriptTypeName(dictTree.getName() + "=" + f.get(0).getValue() + ResultUnitEnum.FREQ.getUnit()); break; + case P: { + String unitV; + String unitI; + if (isValueType) { + unitV = ResultUnitEnum.V_RELATIVE.getUnit(); + unitI = ResultUnitEnum.I_RELATIVE.getUnit(); + } else { + unitV = ResultUnitEnum.V_ABSOLUTELY.getUnit(); + unitI = ResultUnitEnum.I_ABSOLUTELY.getUnit(); + } + List v = scriptDtlIndexList.stream().filter(x -> "VOL".equals(x.getValueType())).collect(Collectors.toList()); + List i = scriptDtlIndexList.stream().filter(x -> "CUR".equals(x.getValueType())).collect(Collectors.toList()); + List aDtl1 = scriptDtlIndexList.stream().filter(x -> "A".equals(x.getPhase()) && "VOL".equals(x.getValueType())).collect(Collectors.toList()); + List aDtl2 = scriptDtlIndexList.stream().filter(x -> "A".equals(x.getPhase()) && "CUR".equals(x.getValueType())).collect(Collectors.toList()); + + double cosValue = Math.cos((aDtl1.get(0).getAngle() - aDtl2.get(0).getAngle()) / 180 * Math.PI); + BigDecimal bigDecimal = BigDecimal.valueOf(cosValue).setScale(6, BigDecimal.ROUND_HALF_UP); + + dtlType.setScriptTypeName(ResultUnitEnum.V_RELATIVE.getName() + "=" + v.get(0).getValue().intValue() + unitV + + " " + ResultUnitEnum.I_RELATIVE.getName() + "=" + i.get(0).getValue().intValue() + unitI + + " cos(φ)=" + bigDecimal.doubleValue()); + } + break; /** * 电压 */ @@ -928,8 +958,14 @@ public class ResultServiceImpl implements IResultService { @Override @Transactional public void changeErrorSystem(ResultParam.ChangeErrorSystemParam param) { - this.createTempResultTable(param.getCode() + "_temp"); - this.calculateResult(param.getPlanId(), param.getScriptId(), param.getCode() + "_temp", param.getErrorSysId(), param.getDeviceId()); + DictData dictData = dictDataService.getDictDataById(param.getPatternId()); + if (PatternEnum.CONTRAST.getValue().equals(dictData.getCode())) { + this.createTempResultTable(param.getCode() + "_temp", true); + this.contrastCalculateResult(param.getPlanId(), param.getCode() + "_temp", param.getErrorSysId(), param.getDeviceId()); + } else { + this.createTempResultTable(param.getCode() + "_temp", false); + this.simAndDigCalculateResult(param.getPlanId(), param.getScriptId(), param.getCode() + "_temp", param.getErrorSysId(), param.getDeviceId()); + } } @Override @@ -940,7 +976,12 @@ public class ResultServiceImpl implements IResultService { @Override public void reCalculate(ResultParam.ChangeErrorSystemParam param) { - this.calculateResult(param.getPlanId(), param.getScriptId(), param.getCode(), param.getErrorSysId(), param.getDeviceId()); + DictData dictData = dictDataService.getDictDataById(param.getPatternId()); + if (PatternEnum.CONTRAST.getValue().equals(dictData.getCode())) { + this.contrastCalculateResult(param.getPlanId(), param.getCode(), param.getErrorSysId(), param.getDeviceId()); + } else { + this.simAndDigCalculateResult(param.getPlanId(), param.getScriptId(), param.getCode(), param.getErrorSysId(), param.getDeviceId()); + } } /** @@ -1809,11 +1850,12 @@ public class ResultServiceImpl implements IResultService { * 拷贝结果表 * * @param code + * @param isContrast */ - private void createTempResultTable(String code) { + private void createTempResultTable(String code, boolean isContrast) { this.dropTempResultTable(code); String oldCode = code.replace("_temp", ""); - tableGenMapper.genNonHarmonicResultTable(code, false); + tableGenMapper.genNonHarmonicResultTable(code, isContrast); StringBuilder A = new StringBuilder(); StringBuilder B = new StringBuilder(); StringBuilder C = new StringBuilder(); @@ -1828,17 +1870,28 @@ public class ResultServiceImpl implements IResultService { C.append("C_Value_").append(i).append(" json NULL COMMENT '").append(i).append("次C相谐波',"); } } - String sql1 = "CREATE TABLE if not exists AD_Harmonic_Result_" + code + "(\n" + - " Monitor_Id CHAR(60) NOT NULL COMMENT '监测点Id',\n" + - " Time_Id DATETIME(3) NULL COMMENT '时间',\n" + - " Script_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id,字典表',\n" + - " Sort int(5) NOT NULL COMMENT '总检测脚本中的测试项序号',\n" + + + String sql1 = "CREATE TABLE if not exists AD_Harmonic_Result_" + code + " (\n" + + " Dev_Monitor_Id CHAR(34) NOT NULL COMMENT '监测点Id',\n" + + " Time_Id DATETIME(3) NULL COMMENT '时间',\n" + " AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表',\n" + " Data_Type CHAR(32) NOT NULL COMMENT '数据指标,只有数据源为分钟统计时候才会使用(最大、最小、平均、CP95,默认平均值),字典表',\n" + " Result_Flag int(1) NOT NULL COMMENT '1合格 2不合格 4无法处理',\n" + A + B + C + - " PRIMARY KEY (Monitor_Id, Script_Id, Sort, AD_Type)\n" + - ") COMMENT='监测数据表';"; + (isContrast ? + "Id char(32) COLLATE utf8mb4_bin NOT NULL COMMENT '主键Id',\n" + + "Std_Dev_Monitor_Id CHAR(34) NOT NULL COMMENT '标准设备监测点Id',\n" + + "Num tinyint(1) unsigned DEFAULT 0 COMMENT '第几次检测',\n" + + "Flag tinyint(1) unsigned DEFAULT NULL COMMENT '0表示被检设备数据,1表示标准设备数据',\n" + + "A_Value_0 json NULL COMMENT 'A相基波有效值',\n" + + "B_Value_0 json NULL COMMENT 'B相基波有效值',\n" + + "C_Value_0 json NULL COMMENT 'B相基波有效值',\n" + + "PRIMARY KEY (Id)\n" + : + " Script_Id CHAR(32) NOT NULL COMMENT '检测脚本表Id',\n" + + " Sort int(4) NOT NULL COMMENT '总检测脚本中的测试项序号',\n" + + " PRIMARY KEY (Dev_Monitor_Id,Script_Id, Sort, AD_Type)\n" + ) + ") COMMENT='谐波类检测结果表';"; tableGenMapper.genAdHarmonicTable(sql1); sql1 = "CREATE TABLE ad_non_harmonic_" + code + " LIKE ad_non_harmonic_" + oldCode; @@ -1856,14 +1909,14 @@ public class ResultServiceImpl implements IResultService { } /** - * 根据原始数据、误差体系id、计算检测结果 + * 数模-根据原始数据、误差体系id、计算检测结果 * * @param planId * @param code * @param errorSysId * @param devId */ - private void calculateResult(String planId, String scriptId, String code, String errorSysId, String devId) { + private void simAndDigCalculateResult(String planId, String scriptId, String code, String errorSysId, String devId) { String oldCode = code.replace("_temp", ""); PreDetectionParam param = new PreDetectionParam(); param.setCode(code); @@ -1912,13 +1965,13 @@ public class ResultServiceImpl implements IResultService { List harmonicResults = harmonicMap.get(sourceIssue.getIndex()); List realDataXiList = new ArrayList<>(); if (CollUtil.isNotEmpty(nonHarmonicResults)) { - realDataXiList.addAll(this.toList(nonHarmonicResults, null, true)); + realDataXiList.addAll(this.simAndDigToList(nonHarmonicResults, null, true)); } if (CollUtil.isNotEmpty(harmonicResults)) { if (DetectionCodeEnum.V2_50.getCode().equals(harmonicResults.get(0).getAdType()) || DetectionCodeEnum.I2_50.getCode().equals(harmonicResults.get(0).getAdType()) || DetectionCodeEnum.P2_50.getCode().equals(harmonicResults.get(0).getAdType())) { - realDataXiList.addAll(this.toList(null, harmonicResults, true)); + realDataXiList.addAll(this.simAndDigToList(null, harmonicResults, true)); } else { - realDataXiList.addAll(this.toList(null, harmonicResults, false)); + realDataXiList.addAll(this.simAndDigToList(null, harmonicResults, false)); } } @@ -1933,7 +1986,72 @@ public class ResultServiceImpl implements IResultService { iPqDevService.updateResult(false, param.getDevIds(), valueType, param.getCode(), param.getUserId(), param.getTemperature(), param.getHumidity()); } - private List toList(List nonHarm, List harm, boolean containBaseHarm) { + /** + * 比对-根据原始数据、误差体系id、计算检测结果 + * + * @param planId + * @param code + * @param errorSysId + * @param deviceId + */ + private void contrastCalculateResult(String planId, String code, String errorSysId, String deviceId) { + String oldCode = code.replace("_temp", ""); + + Map devIdMapComm = new HashMap<>(); + PqDev dev = pqDevService.getById(deviceId); + devIdMapComm.put(dev.getIp(), deviceId); + + AdPlan plan = adPlanService.getById(planId); + + BiMap testItemMap = HashBiMap.create(); + List testItemIds = Arrays.asList(plan.getTestItem().split(",")); + List dictTreeList = dictTreeService.getDictTreeById(testItemIds); + List fatherIdList = dictTreeList.stream().map(DictTree::getId).collect(Collectors.toList()); + List childDictTreeList = dictTreeService.listByFatherIds(fatherIdList); + if (CollUtil.isNotEmpty(childDictTreeList)) { + List collect1 = SocketContrastResponseService.testItemCodeMap.values().stream().flatMap(Collection::stream).map(x -> x.split("\\$")[1]).collect(Collectors.toList()); + testItemMap.putAll(childDictTreeList.stream().filter(x -> collect1.contains(x.getCode())).collect(Collectors.toMap(obj -> DetectionCodeEnum.REAL_PREFIX.getCode() + obj.getCode(), obj -> obj.getId()))); + } + + DictDataEnum dataRule; + DictData dictData = dictDataService.getDictDataById(plan.getDataRule()); + if (ObjectUtil.isNotNull(dictData)) { + dataRule = DictDataEnum.getDictDataEnumByCode(dictData.getCode()); + } else { + dataRule = DictDataEnum.SECTION_VALUE; + } + + List adPairList = adPairService.listByDevIds(Arrays.asList(deviceId)); + Map> numAdPairsMap = adPairList.stream().collect(Collectors.groupingBy(AdPair::getNum, Collectors.toList())); + numAdPairsMap.forEach((num, pairList) -> { + BiMap parsIp = HashBiMap.create(); + Map numMap = new HashMap<>(); + Map> devMonitroIdMap = pairList.stream().collect(Collectors.groupingBy(AdPair::getDevMonitorId, Collectors.toList())); + devMonitroIdMap.forEach((devMonitorId, pairList1) -> { + String[] split1 = devMonitorId.split(CnSocketUtil.SPLIT_TAG); + AdPair adPair = pairList1.get(0); + String[] split2 = adPair.getStdDevMonitorId().split(CnSocketUtil.SPLIT_TAG); + + PqDev stdDev = pqDevService.getById(split2[1]); + parsIp.put(dev.getIp() + split1[1], stdDev.getIp() + split2[1]); + numMap.put(devMonitorId, num); + numMap.put(adPair.getStdDevMonitorId(), num); + }); + + List devNonHarmonicRawDataList = contrastNonHarmonicService.listAllRawData(oldCode, num, 0, deviceId, null); + List stdDevNonHarmonicRawDataList = contrastNonHarmonicService.listAllRawData(oldCode, num, 1, deviceId, null); + List devHarmonicRawDataList = contrastHarmonicService.listAllRawData(oldCode, num, 0, deviceId, null); + List stdDevHarmonicRawDataList = contrastHarmonicService.listAllRawData(oldCode, num, 1, deviceId, null); + + List devData = contrastToList(devNonHarmonicRawDataList, devHarmonicRawDataList, testItemMap); + List standardDevData = contrastToList(stdDevNonHarmonicRawDataList, stdDevHarmonicRawDataList, testItemMap); + + detectionServiceImpl.processing(devData, standardDevData, parsIp, devIdMapComm, testItemMap.keySet().stream().collect(Collectors.toList()), errorSysId, dataRule, numMap, code); + }); + + } + + private List simAndDigToList(List nonHarm, List harm, boolean containBaseHarm) { List info = new ArrayList<>(); // if (CollUtil.isNotEmpty(nonHarm)) { if (CollUtil.isNotEmpty(nonHarm)) { @@ -2018,12 +2136,107 @@ public class ResultServiceImpl implements IResultService { return info; } - private List reflectHarmonicValue(String phase, SimAndDigHarmonicResult adHarmonicResult, boolean notContainBaseHarm) { + private List contrastToList(List nonHarm, List harm, BiMap testItemMap) { + List info = new ArrayList<>(); + if (CollUtil.isNotEmpty(nonHarm)) { + Map> devMonitorIdMap = nonHarm.stream().collect(Collectors.groupingBy(ContrastNonHarmonicResult::getDevMonitorId, Collectors.toList())); + devMonitorIdMap.forEach((devMonitorId, value) -> { + DevData devData = new DevData(); + String[] split = devMonitorId.split(CnSocketUtil.SPLIT_TAG); + PqDev dev = pqDevService.getById(split[0]); + devData.setId(dev.getIp() + CnSocketUtil.SPLIT_TAG + split[1]); + Map> timeListMap = value.stream().collect(Collectors.groupingBy(ContrastNonHarmonicResult::getTimeId, Collectors.toList())); + timeListMap.forEach((time, value1) -> { + List sqlData = new ArrayList<>(); + devData.setTime(time.format(DateTimeFormatter.ofPattern(DatePattern.ISO8601_PATTERN))); + + value1.forEach(x -> { + DevData.SqlDataDTO sqlDataDTO = new DevData.SqlDataDTO(); + DevData.SqlDataDTO.ListDTO listDTO = new DevData.SqlDataDTO.ListDTO(); + listDTO.setA(StrUtil.isNotBlank(x.getAValue()) ? Double.valueOf(x.getAValue()) : null); + listDTO.setB(StrUtil.isNotBlank(x.getBValue()) ? Double.valueOf(x.getBValue()) : null); + listDTO.setC(StrUtil.isNotBlank(x.getCValue()) ? Double.valueOf(x.getCValue()) : null); + listDTO.setT(StrUtil.isNotBlank(x.getTValue()) ? Double.valueOf(x.getTValue()) : null); + sqlDataDTO.setType(x.getDataType()); + sqlDataDTO.setDesc(testItemMap.inverse().get(x.getAdType()).replace(DetectionCodeEnum.REAL_PREFIX.getCode(), "")); + sqlData.add(sqlDataDTO); + }); + }); + }); + } + if (CollUtil.isNotEmpty(harm)) { + Map> devMonitorIdMap = harm.stream().collect(Collectors.groupingBy(ContrastHarmonicResult::getDevMonitorId, Collectors.toList())); + devMonitorIdMap.forEach((devMonitorId, value) -> { + DevData devData = new DevData(); + String[] split = devMonitorId.split(CnSocketUtil.SPLIT_TAG); + PqDev dev = pqDevService.getById(split[0]); + devData.setId(dev.getIp() + CnSocketUtil.SPLIT_TAG + split[1]); + Map> timeListMap = value.stream().collect(Collectors.groupingBy(ContrastHarmonicResult::getTimeId, Collectors.toList())); + + timeListMap.forEach((time, value1) -> { + devData.setTime(time.format(DateTimeFormatter.ofPattern(DatePattern.ISO8601_PATTERN))); + List sqlData = new ArrayList<>(); + List sqlDataHarm = new ArrayList<>(); + + value1.forEach(x -> { + DevData.SqlDataHarmDTO dataHarmDTO = new DevData.SqlDataHarmDTO(); + dataHarmDTO.setType(x.getDataType()); + String desc = testItemMap.inverse().get(x.getAdType()).replace(DetectionCodeEnum.REAL_PREFIX.getCode(), ""); + dataHarmDTO.setDesc(desc); + boolean notContainBaseHarm = false; + if (DetectionCodeEnum.V2_50.getCode().equals(desc) || DetectionCodeEnum.PV2_50.getCode().equals(desc) || DetectionCodeEnum.I2_50.getCode().equals(desc)) { + dataHarmDTO.setNum(49); + notContainBaseHarm = true; + } + if (DetectionCodeEnum.SV_1_49.getCode().equals(desc) || DetectionCodeEnum.PSV_1_49.getCode().equals(desc) || DetectionCodeEnum.SI_1_49.getCode().equals(desc)) { + dataHarmDTO.setNum(50); + notContainBaseHarm = false; + } + + DevData.SqlDataHarmDTO.ListDTO listHarmDTO = new DevData.SqlDataHarmDTO.ListDTO(); + listHarmDTO.setA(reflectHarmonicValue("a", x, notContainBaseHarm)); + listHarmDTO.setB(reflectHarmonicValue("b", x, notContainBaseHarm)); + listHarmDTO.setC(reflectHarmonicValue("c", x, notContainBaseHarm)); + dataHarmDTO.setList(listHarmDTO); + sqlDataHarm.add(dataHarmDTO); + + if (DetectionCodeEnum.V2_50.getCode().equals(desc) || DetectionCodeEnum.PV2_50.getCode().equals(desc) || DetectionCodeEnum.SV_1_49.getCode().equals(desc) || DetectionCodeEnum.PSV_1_49.getCode().equals(desc)) { + DevData.SqlDataDTO sqlDataDTO = new DevData.SqlDataDTO(); + sqlDataDTO.setType(x.getDataType()); + DevData.SqlDataDTO.ListDTO listDTO = new DevData.SqlDataDTO.ListDTO(); + listDTO.setA(StrUtil.isNotBlank(x.getAValue0()) ? Double.valueOf(x.getAValue0()) : null); + listDTO.setB(StrUtil.isNotBlank(x.getBValue0()) ? Double.valueOf(x.getBValue0()) : null); + listDTO.setC(StrUtil.isNotBlank(x.getCValue0()) ? Double.valueOf(x.getAValue0()) : null); + + + if (DetectionCodeEnum.PV2_50.getCode().equals(desc) || DetectionCodeEnum.PSV_1_49.getCode().equals(desc)) { + sqlDataDTO.setDesc(DetectionCodeEnum.PU1.getCode()); + } else { + sqlDataDTO.setDesc(DetectionCodeEnum.U1.getCode()); + } + sqlData.add(sqlDataDTO); + } + }); + devData.setSqlDataHarm(sqlDataHarm); + devData.setSqlData(sqlData); + }); + }); + } + return info; + } + + private List reflectHarmonicValue(String phase, T adHarmonicResult, boolean notContainBaseHarm) { List info = new ArrayList<>(); for (int i = notContainBaseHarm ? 2 : 1; i <= 50; i++) { String fieldName = phase + "Value" + i; try { - Field idField = SimAndDigHarmonicResult.class.getDeclaredField(fieldName); + Field idField = null; + if (adHarmonicResult instanceof SimAndDigHarmonicResult) { + idField = SimAndDigHarmonicResult.class.getDeclaredField(fieldName); + } + if (adHarmonicResult instanceof ContrastHarmonicResult) { + idField = ContrastHarmonicResult.class.getDeclaredField(fieldName); + } idField.setAccessible(true); String value = idField.get(adHarmonicResult) + ""; info.add(value); diff --git a/detection/src/main/java/com/njcn/gather/script/pojo/po/SourceIssue.java b/detection/src/main/java/com/njcn/gather/script/pojo/po/SourceIssue.java index 8a2bd8c6..39c86140 100644 --- a/detection/src/main/java/com/njcn/gather/script/pojo/po/SourceIssue.java +++ b/detection/src/main/java/com/njcn/gather/script/pojo/po/SourceIssue.java @@ -64,6 +64,12 @@ public class SourceIssue { @JSONField(name = "type", ordinal = 2) private String type; + /** + * 是否是功率 + */ + @JSONField(serialize = false) + private Boolean isP; + /** * 多量响量 */ diff --git a/detection/src/main/java/com/njcn/gather/script/service/impl/PqScriptDtlsServiceImpl.java b/detection/src/main/java/com/njcn/gather/script/service/impl/PqScriptDtlsServiceImpl.java index 5336e51c..e37a2bb5 100644 --- a/detection/src/main/java/com/njcn/gather/script/service/impl/PqScriptDtlsServiceImpl.java +++ b/detection/src/main/java/com/njcn/gather/script/service/impl/PqScriptDtlsServiceImpl.java @@ -16,6 +16,7 @@ import com.njcn.gather.device.pojo.po.PqDev; import com.njcn.gather.device.service.IPqDevService; import com.njcn.gather.plan.mapper.AdPlanMapper; import com.njcn.gather.plan.pojo.po.AdPlan; +import com.njcn.gather.result.pojo.enums.ResultUnitEnum; import com.njcn.gather.script.mapper.PqScriptCheckDataMapper; import com.njcn.gather.script.mapper.PqScriptDtlsMapper; import com.njcn.gather.script.mapper.PqScriptMapper; @@ -246,6 +247,11 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl scriptDtlsCheckDataList(PqScriptDtlsParam sourceIssue) { + Boolean valueType = pqScriptMapper.selectScriptIsValueType(sourceIssue.getScriptId()); + List info = new ArrayList<>(); //获取所有下拉值情况 List checkDataList = sourceIssue.getCheckDataList(); @@ -526,7 +534,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl x.getChannelType().contains("U")).collect(Collectors.toList()); if (CollUtil.isNotEmpty(channelU)) { for (PqScriptDtlsParam.ChannelListDTO listDTO : channelU) { //获取电流通道 channelI = channelList.stream() - .filter(PqScriptDtlsParam.ChannelListDTO::getHarmFlag) +// .filter(PqScriptDtlsParam.ChannelListDTO::getHarmFlag) .filter(x -> x.getChannelType().contains("I" + listDTO.getChannelType().substring(1, 2))) .collect(Collectors.toList()); if (CollUtil.isNotEmpty(channelI)) { @@ -619,7 +627,56 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl x.getChannelType().contains("U")).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(channelU)) { + for (PqScriptDtlsParam.ChannelListDTO listDTO : channelU) { + //获取电流通道 + channelI = channelList.stream() +// .filter(PqScriptDtlsParam.ChannelListDTO::getHarmFlag) + .filter(x -> x.getChannelType().contains("I" + listDTO.getChannelType().substring(1, 2))) + .collect(Collectors.toList()); + if (CollUtil.isNotEmpty(channelI)) { + checkData = new PqScriptDtlsParam.CheckData(); + checkData.setErrorFlag(channelListDTO.getErrorFlag()); + checkData.setEnable(channelListDTO.getEnable()); + //电压*电流*cos(电压角度-电流角度) + checkData.setValue(channelI.get(0).getFAmp() * listDTO.getFAmp() / 10000 * Math.sin((listDTO.getFPhase() - channelI.get(0).getFPhase()) * Math.PI / 180)); + if (valueType) { + checkData.setValue(checkData.getValue() * 57.74 * 5); + } + setCheck(info, checkData, channelListDTO, checkArchive, listDTO); + } + } + } + break; + case VAW: + channelU = channelList.stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(channelU)) { + for (PqScriptDtlsParam.ChannelListDTO listDTO : channelU) { + //获取电流通道 + channelI = channelList.stream() +// .filter(PqScriptDtlsParam.ChannelListDTO::getHarmFlag) + .filter(x -> x.getChannelType().contains("I" + listDTO.getChannelType().substring(1, 2))) + .collect(Collectors.toList()); + if (CollUtil.isNotEmpty(channelI)) { + checkData = new PqScriptDtlsParam.CheckData(); + checkData.setErrorFlag(channelListDTO.getErrorFlag()); + checkData.setEnable(channelListDTO.getEnable()); + //电压*电流*cos(电压角度-电流角度) + checkData.setValue(channelI.get(0).getFAmp() * listDTO.getFAmp() / 10000); + if (valueType) { + checkData.setValue(checkData.getValue() * 57.74 * 5); + } setCheck(info, checkData, channelListDTO, checkArchive, listDTO); } } @@ -1032,7 +1089,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl