比对完善

This commit is contained in:
caozehui
2025-09-01 13:39:52 +08:00
parent 0977a77eed
commit 8963b20dd3
17 changed files with 551 additions and 115 deletions

View File

@@ -4,15 +4,13 @@ import cn.afterturn.easypoi.excel.entity.ExportParams;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.google.common.collect.HashBiMap; import com.google.common.collect.HashBiMap;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.gather.detection.pojo.enums.DetectionCodeEnum; import com.njcn.gather.detection.pojo.enums.*;
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; import com.njcn.gather.detection.pojo.param.ContrastDetectionParam;
import com.njcn.gather.detection.pojo.param.DevPhaseSequenceParam; import com.njcn.gather.detection.pojo.param.DevPhaseSequenceParam;
import com.njcn.gather.detection.pojo.param.PreDetectionParam; import com.njcn.gather.detection.pojo.param.PreDetectionParam;
@@ -56,6 +54,7 @@ import java.lang.reflect.Field;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
@@ -130,7 +129,7 @@ public class SocketContrastResponseService {
@Value("${log.homeDir}") @Value("${log.homeDir}")
private String alignDataFilePath; private String alignDataFilePath;
private static final Map<String, List<String>> testItemCodeMap = new HashMap() {{ public static final Map<String, List<String>> testItemCodeMap = new HashMap() {{
put("FREQ", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.FREQ.getCode())); 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("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("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("I", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.IRMS.getCode()));
put("IMBV", Arrays.asList(DetectionCodeEnum.REAL_PREFIX.getCode() + DetectionCodeEnum.V_UNBAN.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("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: case FORMAL_REAL:
this.formalDeal(param, socketDataMsg); this.formalDeal(param, socketDataMsg);
break; break;
// 启动录波
case RECORD_WAVE:
this.recordWave(param, socketDataMsg);
break;
//退出关闭 //退出关闭
case QUITE: case QUITE:
quitDeal(socketDataMsg, param); quitDeal(socketDataMsg, param);
@@ -819,6 +822,7 @@ public class SocketContrastResponseService {
*/ */
private void formalDeal(PreDetectionParam param, SocketDataMsg socketDataMsg) { private void formalDeal(PreDetectionParam param, SocketDataMsg socketDataMsg) {
String data = socketDataMsg.getData(); String data = socketDataMsg.getData();
String s = param.getUserPageId() + CnSocketUtil.CONTRAST_DEV_TAG;
DevData devData = JSON.parseObject(data, DevData.class); DevData devData = JSON.parseObject(data, DevData.class);
SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode()); SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode());
@@ -905,7 +909,6 @@ public class SocketContrastResponseService {
scheduledFuture.cancel(true); scheduledFuture.cancel(true);
scheduler.shutdown(); scheduler.shutdown();
String errorSysId = FormalTestManager.currentTestPlan.getErrorSysId(); String errorSysId = FormalTestManager.currentTestPlan.getErrorSysId();
String code = String.valueOf(FormalTestManager.currentTestPlan.getCode()); String code = String.valueOf(FormalTestManager.currentTestPlan.getCode());
@@ -936,13 +939,46 @@ public class SocketContrastResponseService {
this.clearData(); this.clearData();
// 最终将检测结果推送到前端 List<String> adTypes = FormalTestManager.testItemMap.keySet().stream().collect(Collectors.toList());
webSend.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode());//最终成功推送 // Map<String, Integer> result = detectionDataDealService.devResult(true, FormalTestManager.pairsIdMap.keySet().stream().collect(Collectors.toList()), adTypes, code);
webSend.setData(JSON.toJSONString(allResultList)); // // 若有不符合的
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend)); // if (result.values().stream().anyMatch(r -> r.equals(ResultEnum.NOT_QUALIFIED.getValue()))) {
// // 判断是否启用录波
// 修改设备状态 // String datasourceId = FormalTestManager.currentTestPlan.getDatasourceId();
pqDevService.updateResult(true, param.getDevIds(), FormalTestManager.testItemMap.keySet().stream().collect(Collectors.toList()), code, param.getUserId(), param.getTemperature(), param.getHumidity()); // if (datasourceId.contains(DataSourceEnum.WAVE_DATA.getValue())) {
// FormalTestManager.currentStep = SourceOperateCodeEnum.RECORD_WAVE;
// SocketMsg<String> socketMsg = new SocketMsg<>();
// socketMsg.setRequestId(SourceOperateCodeEnum.YJC_XYJY.getValue());
// socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_03.getValue());
// Map<String, List<PreDetection>> 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.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue());
webSend.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode()); webSend.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode());
List<AlignDataVO> data = new ArrayList<>(); List<AlignDataVO> data = new ArrayList<>();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(DatePattern.ISO8601_PATTERN);
// key为标准设备的ip, value为该ip下所有通道的设备数据 // key为标准设备的ip, value为该ip下所有通道的设备数据
Map<String, List<DevData>> ipDevDataMap = FormalTestManager.standardDevDataMap.values().stream().flatMap(List::stream).collect(Collectors.groupingBy(obj -> obj.getId().split(CnSocketUtil.SPLIT_TAG)[0])); Map<String, List<DevData>> 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.setUaStdDev(list1.getA());
rawData.setUbStdDev(list1.getB()); rawData.setUbStdDev(list1.getB());
rawData.setUcStdDev(list1.getC()); 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); DevData devData = devDataList.stream().filter(obj1 -> DetectionUtil.isAlignData(obj1, obj)).findFirst().orElse(null);
if (ObjectUtil.isNotNull(devData)) { if (ObjectUtil.isNotNull(devData)) {
@@ -1135,7 +1197,8 @@ public class SocketContrastResponseService {
rawData.setUaDev(list2.getA()); rawData.setUaDev(list2.getA());
rawData.setUbDev(list2.getB()); rawData.setUbDev(list2.getB());
rawData.setUcDev(list2.getC()); 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); devDataList.remove(devData);
} }
return rawData; return rawData;
@@ -1166,6 +1229,7 @@ public class SocketContrastResponseService {
*/ */
private void saveAlignData() { private void saveAlignData() {
List<Map<String, Object>> sheetsList = new ArrayList<>(); List<Map<String, Object>> sheetsList = new ArrayList<>();
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(DatePattern.ISO8601_PATTERN);
// key为被检设备的ip, value为该ip下所有通道的设备数据 // key为被检设备的ip, value为该ip下所有通道的设备数据
Map<String, List<DevData>> ipDevDataMap = FormalTestManager.standardDevDataMap.values().stream().flatMap(List::stream).collect(Collectors.groupingBy(obj -> obj.getId().split(CnSocketUtil.SPLIT_TAG)[0])); Map<String, List<DevData>> 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(); list1 = sqlDataDTO1.getList();
} }
AlignDataExcel alignDataExcel = new AlignDataExcel(); 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.setUaStdDev(list1.getA());
alignDataExcel.setUbStdDev(list1.getB()); alignDataExcel.setUbStdDev(list1.getB());
alignDataExcel.setUcStdDev(list1.getC()); alignDataExcel.setUcStdDev(list1.getC());
@@ -1221,7 +1286,8 @@ public class SocketContrastResponseService {
if (ObjectUtil.isNotNull(sqlDataDTO2)) { if (ObjectUtil.isNotNull(sqlDataDTO2)) {
list2 = sqlDataDTO2.getList(); 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.setUaDev(list2.getA());
alignDataExcel.setUbDev(list2.getB()); alignDataExcel.setUbDev(list2.getB());
alignDataExcel.setUcDev(list2.getC()); alignDataExcel.setUcDev(list2.getC());

View File

@@ -27,6 +27,7 @@ import com.njcn.gather.device.service.IPqDevService;
import com.njcn.gather.device.service.IPqDevSubService; import com.njcn.gather.device.service.IPqDevSubService;
import com.njcn.gather.plan.pojo.po.AdPlan; import com.njcn.gather.plan.pojo.po.AdPlan;
import com.njcn.gather.plan.service.IAdPlanService; 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.PqScriptCheckDataParam;
import com.njcn.gather.script.pojo.param.PqScriptIssueParam; import com.njcn.gather.script.pojo.param.PqScriptIssueParam;
import com.njcn.gather.script.pojo.po.SourceIssue; import com.njcn.gather.script.pojo.po.SourceIssue;
@@ -436,13 +437,19 @@ public class SocketDevResponseService {
Map<String, Long> sourceIssueMap = sourceIssues.stream().collect(Collectors.groupingBy(SourceIssue::getType, Collectors.counting())); Map<String, Long> sourceIssueMap = sourceIssues.stream().collect(Collectors.groupingBy(SourceIssue::getType, Collectors.counting()));
SocketManager.initMap(sourceIssueMap); 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<Object> webSocketVO = new WebSocketVO<>(); WebSocketVO<Object> 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); webSocketVO.setDesc(null);
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO)); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO));
} else { } else {
@@ -842,9 +849,9 @@ public class SocketDevResponseService {
boolean isContinue = true; boolean isContinue = true;
List<String> descList = icdCheckData.getResultData().stream().map( List<String> descList = icdCheckData.getResultData().stream().map(
obj -> { 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(); return DetectionCodeEnum.AVG_PREFIX.getCode() + obj.getDesc();
}else{ } else {
return DetectionCodeEnum.REAL_PREFIX.getCode() + obj.getDesc(); return DetectionCodeEnum.REAL_PREFIX.getCode() + obj.getDesc();
} }
} }
@@ -937,13 +944,20 @@ public class SocketDevResponseService {
Map<String, Long> sourceIssueMap = sourceIssues.stream().collect(Collectors.groupingBy(SourceIssue::getType, Collectors.counting())); Map<String, Long> sourceIssueMap = sourceIssues.stream().collect(Collectors.groupingBy(SourceIssue::getType, Collectors.counting()));
SocketManager.initMap(sourceIssueMap); 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<Object> webSocketVO = new WebSocketVO<>(); WebSocketVO<Object> 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); webSocketVO.setDesc(null);
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO)); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO));
} }
@@ -1187,14 +1201,20 @@ public class SocketDevResponseService {
Map<String, Long> sourceIssueMap = sourceIssues.stream().collect(Collectors.groupingBy(SourceIssue::getType, Collectors.counting())); Map<String, Long> sourceIssueMap = sourceIssues.stream().collect(Collectors.groupingBy(SourceIssue::getType, Collectors.counting()));
SocketManager.initMap(sourceIssueMap); SocketManager.initMap(sourceIssueMap);
//告诉前端当前项开始了
WebSocketVO<Object> 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.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()); socketMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue());
SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, JSON.toJSONString(socketMsg)); SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, JSON.toJSONString(socketMsg));
//告诉前端当前项开始了
WebSocketVO<Object> webSocketVO = new WebSocketVO<>();
webSocketVO.setRequestId(sourceIssues.get(0).getType() + CnSocketUtil.START_TAG);
webSocketVO.setDesc(null); webSocketVO.setDesc(null);
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO)); WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO));
} else { } else {
@@ -1281,8 +1301,14 @@ public class SocketDevResponseService {
System.out.println("当前小项结束进行删除============" + sourceIssue.getType() + CnSocketUtil.SPLIT_TAG + sourceIssue.getIndex()); System.out.println("当前小项结束进行删除============" + sourceIssue.getType() + CnSocketUtil.SPLIT_TAG + sourceIssue.getIndex());
//小项检测完后小项数减一并更新map //小项检测完后小项数减一并更新map
long residueCount = SocketManager.getSourceTarget(sourceIssue.getType()) - 1; long residueCount = 0;
SocketManager.addTargetMap(sourceIssue.getType(), residueCount); 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 + "个小项没有进行检测!!!!!!!!"); System.out.println("该大项还有" + residueCount + "个小项没有进行检测!!!!!!!!");
//当该大项中小项数量变为0则任务该大项检测结束 //当该大项中小项数量变为0则任务该大项检测结束
@@ -1326,12 +1352,17 @@ public class SocketDevResponseService {
if (residueCount == 0) { if (residueCount == 0) {
WebServiceManager.sendDetectionMessage(param.getUserPageId(), sourceIssues.getType() + CnSocketUtil.START_TAG, null, new ArrayList<>(), null); 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<String> xuMsg = new SocketMsg<>(); SocketMsg<String> xuMsg = new SocketMsg<>();
xuMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue()); xuMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue());
xuMsg.setData(JSON.toJSONString(sourceIssues)); 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)); SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, JSON.toJSONString(xuMsg));
} else { } else {
//TODO 是否最终检测完成需要推送给用户 //TODO 是否最终检测完成需要推送给用户
@@ -1836,6 +1867,9 @@ public class SocketDevResponseService {
if (nonHarmonicList.contains(sourceIssue.getType())) { if (nonHarmonicList.contains(sourceIssue.getType())) {
for (DevData.SqlDataDTO sqlDataDTO : data.getSqlData()) { for (DevData.SqlDataDTO sqlDataDTO : data.getSqlData()) {
if (sqlDataDTO.getDesc().equals("PF")) {
continue;
}
DevData.SqlDataDTO.ListDTO listDTO = sqlDataDTO.getList(); DevData.SqlDataDTO.ListDTO listDTO = sqlDataDTO.getList();
SimAndDigNonHarmonicResult adNonHarmonicResult = new SimAndDigNonHarmonicResult(); SimAndDigNonHarmonicResult adNonHarmonicResult = new SimAndDigNonHarmonicResult();
adNonHarmonicResult.setTimeId(localDateTime); adNonHarmonicResult.setTimeId(localDateTime);

View File

@@ -395,7 +395,7 @@ public class SocketSourceResponseService {
WebServiceManager.sendUnknownErrorMessage(param.getUserPageId()); WebServiceManager.sendUnknownErrorMessage(param.getUserPageId());
break; break;
} }
}else{ } else {
// todo... 这种情况是报文的状态码不一致,需要记录到日志表,以便问题追踪 // todo... 这种情况是报文的状态码不一致,需要记录到日志表,以便问题追踪
} }
} }
@@ -454,9 +454,9 @@ public class SocketSourceResponseService {
* 当程控源成功执行脚本后,根据检测项目类型向设备发送相应的数据请求: * 当程控源成功执行脚本后,根据检测项目类型向设备发送相应的数据请求:
* 1. 获取源脚本信息,确定检测类型和数据类型 * 1. 获取源脚本信息,确定检测类型和数据类型
* 2. 根据检测类型设置不同的读取参数: * 2. 根据检测类型设置不同的读取参数:
* - 闪变(F)忽略1次读取2次使用DEV_DATA_REQUEST_01 * - 闪变(F)忽略1次读取2次使用DEV_DATA_REQUEST_01
* - 暂态(VOLTAGE)忽略5次读取1次使用DEV_DATA_REQUEST_03 * - 暂态(VOLTAGE)忽略5次读取1次使用DEV_DATA_REQUEST_03
* - 其他类型忽略5次读取5次根据数据类型选择操作码 * - 其他类型忽略5次读取5次根据数据类型选择操作码
* 3. 构造设备数据请求并发送 * 3. 构造设备数据请求并发送
* 4. 向前端推送检测开始信息 * 4. 向前端推送检测开始信息
* </p> * </p>
@@ -491,7 +491,7 @@ public class SocketSourceResponseService {
log.debug("向设备下发检测参数,用户: {}, 数据类型: {}", param.getUserPageId(), comm); log.debug("向设备下发检测参数,用户: {}, 数据类型: {}", param.getUserPageId(), comm);
// 设置请求ID正式检测操作码 + 步骤标识 + 检测类型 // 设置请求ID正式检测操作码 + 步骤标识 + 检测类型
socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + sourceIssue.getType()); socketMsg.setRequestId(socketDataMsg.getRequestId());
// 根据检测类型设置不同的读取参数和操作码 // 根据检测类型设置不同的读取参数和操作码
int ignoreCount; int ignoreCount;
@@ -534,6 +534,9 @@ public class SocketSourceResponseService {
DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam(); DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam();
// 设置监测点ID列表 // 设置监测点ID列表
phaseSequenceParam.setMoniterIdList(monitorIdList); phaseSequenceParam.setMoniterIdList(monitorIdList);
if (socketDataMsg.getRequestId().equals(SourceOperateCodeEnum.FORMAL_REAL.getValue() + CnSocketUtil.STEP_TAG + "P")) {
comm.add("real$PF");
}
// 设置数据类型列表 // 设置数据类型列表
phaseSequenceParam.setDataType(comm); phaseSequenceParam.setDataType(comm);
// 设置读取次数 // 设置读取次数

View File

@@ -35,13 +35,19 @@ public enum DetectionCodeEnum {
V_UNBAN("V_UNBAN", "三相电压负序不平衡度"), V_UNBAN("V_UNBAN", "三相电压负序不平衡度"),
I_UNBAN("I_UNBAN", "三相电流负序不平衡度"), I_UNBAN("I_UNBAN", "三相电流负序不平衡度"),
PST("PST", "短时间闪变"), 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", "基波电流"), I1("I1", "基波电流"),
UNKNOWN_ERROR("-1", "未知异常"), UNKNOWN_ERROR("-1", "未知异常"),
STAR("Star","星型接线"), STAR("Star", "星型接线"),
DELTA("Delta","角型接线"), DELTA("Delta", "角型接线"),
REAL_PREFIX("real$", "实时数据前缀"), REAL_PREFIX("real$", "实时数据前缀"),
AVG_PREFIX("avg$", "统计数据前缀"); AVG_PREFIX("avg$", "统计数据前缀");
@@ -53,6 +59,7 @@ public enum DetectionCodeEnum {
this.code = code; this.code = code;
this.message = message; this.message = message;
} }
public static DetectionCodeEnum getDetectionCodeByCode(String code) { public static DetectionCodeEnum getDetectionCodeByCode(String code) {
for (DetectionCodeEnum detectionCodeEnum : DetectionCodeEnum.values()) { for (DetectionCodeEnum detectionCodeEnum : DetectionCodeEnum.values()) {
if (ObjectUtil.equals(code, detectionCodeEnum.getCode())) { if (ObjectUtil.equals(code, detectionCodeEnum.getCode())) {

View File

@@ -51,6 +51,7 @@ public enum SourceOperateCodeEnum {
YJC_ALIGN("yjc_align","实时数据对齐校验"), YJC_ALIGN("yjc_align","实时数据对齐校验"),
YJC_MXYZXJY("yjc_mxyzxjy", "模型一致性校验"), YJC_MXYZXJY("yjc_mxyzxjy", "模型一致性校验"),
FORMAL_REAL("formal_real","正式检测"), FORMAL_REAL("formal_real","正式检测"),
RECORD_WAVE("record_wave","启动录波"),
// SIMULATE_REAL("simulate_real","模拟检测"), // SIMULATE_REAL("simulate_real","模拟检测"),
Coefficient_Check("Coefficient_Check","系数校验"), Coefficient_Check("Coefficient_Check","系数校验"),
QUITE("quit","关闭设备通讯初始化"), QUITE("quit","关闭设备通讯初始化"),

View File

@@ -14,6 +14,7 @@ public enum SourceResponseCodeEnum {
UNPROCESSED_BUSINESS(10201, "立即响应,业务还未处理,类似肯定应答"), UNPROCESSED_BUSINESS(10201, "立即响应,业务还未处理,类似肯定应答"),
NORMAL_RESPONSE(10202, "正常响应中间状态码"), NORMAL_RESPONSE(10202, "正常响应中间状态码"),
ICD_NOT_FOUND(10500, "未找到对应ICD"), ICD_NOT_FOUND(10500, "未找到对应ICD"),
RECORD_WAVE_FAILED(10501, "录波失败"),
MESSAGE_PARSING_ERROR(10520, "报文解析有误"), MESSAGE_PARSING_ERROR(10520, "报文解析有误"),
CONTROLLED_SOURCE_ERROR(10521, "程控源参数有误"), CONTROLLED_SOURCE_ERROR(10521, "程控源参数有误"),
TEST_ITEM_PARSING_ERROR(10522, "测试项解析有误"), TEST_ITEM_PARSING_ERROR(10522, "测试项解析有误"),

View File

@@ -3,6 +3,8 @@ package com.njcn.gather.detection.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.gather.detection.pojo.po.AdPair; import com.njcn.gather.detection.pojo.po.AdPair;
import java.util.List;
/** /**
* @author caozehui * @author caozehui
* @data 2025-08-18 * @data 2025-08-18
@@ -16,4 +18,12 @@ public interface IAdPariService extends IService<AdPair> {
* @return * @return
*/ */
Integer getMaxNum(String devMonitorId); Integer getMaxNum(String devMonitorId);
/**
* 根据设备id查询配对关系
*
* @param devIds
* @return
*/
List<AdPair> listByDevIds(List<String> devIds);
} }

View File

@@ -1,6 +1,7 @@
package com.njcn.gather.detection.service.impl; package com.njcn.gather.detection.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.njcn.gather.detection.mapper.AdPairMapper; import com.njcn.gather.detection.mapper.AdPairMapper;
import com.njcn.gather.detection.pojo.po.AdPair; import com.njcn.gather.detection.pojo.po.AdPair;
@@ -29,4 +30,11 @@ public class AdPairServiceImpl extends ServiceImpl<AdPairMapper, AdPair> impleme
} }
return 1; return 1;
} }
@Override
public List<AdPair> listByDevIds(List<String> devIds) {
LambdaQueryChainWrapper<AdPair> wrapper = this.lambdaQuery();
devIds.forEach(devId -> wrapper.likeRight(AdPair::getDevMonitorId, devId));
return this.list(wrapper);
}
} }

View File

@@ -116,6 +116,9 @@ public class DetectionServiceImpl {
SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); SysTestConfig oneConfig = sysTestConfigService.getOneConfig();
List<ErrDtlsCheckDataVO> errDtlsCheckData = pqErrSysDtlsService.listByPqErrSysIdAndTypes(param); List<ErrDtlsCheckDataVO> errDtlsCheckData = pqErrSysDtlsService.listByPqErrSysIdAndTypes(param);
ResultUnitEnum resultUnitEnumByCode = ResultUnitEnum.getResultUnitEnumByCode(sourceIssue.getType()); ResultUnitEnum resultUnitEnumByCode = ResultUnitEnum.getResultUnitEnumByCode(sourceIssue.getType());
if (sourceIssue.getIsP()) {
resultUnitEnumByCode = ResultUnitEnum.P;
}
switch (resultUnitEnumByCode) { switch (resultUnitEnumByCode) {
/** /**
* 频率 * 频率
@@ -381,6 +384,9 @@ public class DetectionServiceImpl {
List<SimAndDigNonHarmonicResult> info = new ArrayList<>(); List<SimAndDigNonHarmonicResult> info = new ArrayList<>();
List<String> devValueTypeList = sourceIssue.getDevValueTypeList(); List<String> devValueTypeList = sourceIssue.getDevValueTypeList();
for (String s : devValueTypeList) { for (String s : devValueTypeList) {
if ((DetectionCodeEnum.REAL_PREFIX.getCode() + "PF").equals(s)) {
continue;
}
// 根据数据处理规则取值。key为相别value为值列表 // 根据数据处理规则取值。key为相别value为值列表
Map<String, List<Double>> map = devListMap(dev, dataRule, s.split("\\$")[1]); Map<String, List<Double>> map = devListMap(dev, dataRule, s.split("\\$")[1]);
Double fData = 1.0; Double fData = 1.0;
@@ -1184,7 +1190,13 @@ public class DetectionServiceImpl {
detectionData.setUnit(errSysDtl.getErrorUnit()); detectionData.setUnit(errSysDtl.getErrorUnit());
errSysDtl.setMaxErrorValue(maxErrorMultiply(errSysDtl, data, channelData, scale)); errSysDtl.setMaxErrorValue(maxErrorMultiply(errSysDtl, data, channelData, scale));
detectionData.setRadius(-errSysDtl.getMaxErrorValue() + "~" + errSysDtl.getMaxErrorValue()); 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; 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).setScale(scale, RoundingMode.HALF_UP).subtract(BigDecimal.valueOf(channelData));
BigDecimal subtract = BigDecimal.valueOf(devData).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()) { if (2 == error.getValueType()) {
switch (error.getErrorValueType()) { switch (error.getErrorValueType()) {
@@ -1573,9 +1588,12 @@ public class DetectionServiceImpl {
boolean isDelta = DetectionCodeEnum.DELTA.getCode().equals(pqMonitor.getConnection()); boolean isDelta = DetectionCodeEnum.DELTA.getCode().equals(pqMonitor.getConnection());
Double fUn = pqMonitorService.getRatedVoltage(devMonitorId); Double fUn = pqMonitorService.getRatedVoltage(devMonitorId);
boolean isExitDelta = this.isExitDeltaIndex(devIdMapComm.get(split1[0]), devDataList); 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(); 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 fIn = pqMonitorService.getRatedCurrent(devMonitorId);
Double fHz = 50.0; Double fHz = 50.0;
for (String testItemCode : testItemCodeList) { for (String testItemCode : testItemCodeList) {
@@ -1610,9 +1628,9 @@ public class DetectionServiceImpl {
case IRMS: case IRMS:
resultMap.put(PowerIndexEnum.I.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fIn, DetectionCodeEnum.IRMS.getCode(), dataRule, num, code, oneConfig.getScale())); resultMap.put(PowerIndexEnum.I.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fIn, DetectionCodeEnum.IRMS.getCode(), dataRule, num, code, oneConfig.getScale()));
break; break;
case P_FUND: // 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())); // resultMap.put(PowerIndexEnum.P.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fUn * fIn, DetectionCodeEnum.P_FUND.getCode(), dataRule, num, code, oneConfig.getScale()));
break; // break;
case V_UNBAN: case V_UNBAN:
resultMap.put(PowerIndexEnum.IMBV.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, false, fUn, DetectionCodeEnum.V_UNBAN.getCode(), dataRule, num, code, oneConfig.getScale())); resultMap.put(PowerIndexEnum.IMBV.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, false, fUn, DetectionCodeEnum.V_UNBAN.getCode(), dataRule, num, code, oneConfig.getScale()));
break; break;
@@ -1667,6 +1685,8 @@ public class DetectionServiceImpl {
if (descList.containsAll(deltaIndex)) { if (descList.containsAll(deltaIndex)) {
List<PreDetection> devInfo = pqDevService.getDevInfo(Collections.singletonList(devId)); List<PreDetection> devInfo = pqDevService.getDevInfo(Collections.singletonList(devId));
if (devInfo.get(0).getUsePhaseIndex() == 1) { if (devInfo.get(0).getUsePhaseIndex() == 1) {
return false;
} else {
return true; return true;
} }
} }

View File

@@ -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.pojo.po.AdPlanSource;
import com.njcn.gather.plan.service.IAdPlanService; import com.njcn.gather.plan.service.IAdPlanService;
import com.njcn.gather.plan.service.IAdPlanSourceService; 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.PqScriptCheckDataParam;
import com.njcn.gather.script.pojo.param.PqScriptIssueParam; import com.njcn.gather.script.pojo.param.PqScriptIssueParam;
import com.njcn.gather.script.pojo.po.SourceIssue; import com.njcn.gather.script.pojo.po.SourceIssue;
@@ -61,8 +62,6 @@ import java.util.stream.Collectors;
@Slf4j @Slf4j
public class PreDetectionServiceImpl implements PreDetectionService { public class PreDetectionServiceImpl implements PreDetectionService {
private final String stepTag = "&&";
private final IPqDevService iPqDevService; private final IPqDevService iPqDevService;
private final IDictDataService dictDataService; private final IDictDataService dictDataService;
private final IAdPlanService iAdPlanService; private final IAdPlanService iAdPlanService;
@@ -274,14 +273,14 @@ public class PreDetectionServiceImpl implements PreDetectionService {
@Override @Override
public void sendScript(SimulateDetectionParam param) { public void sendScript(SimulateDetectionParam param) {
Channel channel = SocketManager.getChannelByUserId(param.getUserPageId() + DetectionCommunicateConstant.SOURCE); Channel channel = SocketManager.getChannelByUserId(param.getUserPageId() + DetectionCommunicateConstant.SOURCE);
if (Objects.isNull(channel) || !channel.isActive()) { // if (Objects.isNull(channel) || !channel.isActive()) {
// 进行源通信连接 // // 进行源通信连接
PreDetectionParam preDetectionParam = new PreDetectionParam(); // PreDetectionParam preDetectionParam = new PreDetectionParam();
preDetectionParam.setSourceId(param.getSourceId()); // preDetectionParam.setSourceId(param.getSourceId());
preDetectionParam.setUserPageId(param.getUserPageId()); // preDetectionParam.setUserPageId(param.getUserPageId());
preDetectionParam.setSendWebMsg(false); // preDetectionParam.setSendWebMsg(false);
this.sendYtxSocketSimulate(preDetectionParam); // this.sendYtxSocketSimulate(preDetectionParam);
} // }
//组装源控制脚本 //组装源控制脚本
PqScriptIssueParam issueParam = new PqScriptIssueParam(); PqScriptIssueParam issueParam = new PqScriptIssueParam();
issueParam.setSourceId(param.getSourceId()); issueParam.setSourceId(param.getSourceId());
@@ -295,12 +294,18 @@ public class PreDetectionServiceImpl implements PreDetectionService {
.collect(Collectors.toList()); .collect(Collectors.toList());
SourceIssue sourceIssue = sourceIssues.get(0); SourceIssue sourceIssue = sourceIssues.get(0);
String type = sourceIssue.getType();
if (sourceIssue.getIsP()) {
sourceIssue.setType(ResultUnitEnum.V_ABSOLUTELY.getCode());
type = ResultUnitEnum.P.getCode();
}
List<String> comm = sourceIssue.getDevValueTypeList(); List<String> comm = sourceIssue.getDevValueTypeList();
System.out.println("向装置下发的参数ddd>>>>>>>>" + comm); System.out.println("向装置下发的参数ddd>>>>>>>>" + comm);
SocketMsg<String> socketMsg = new SocketMsg<>(); SocketMsg<String> socketMsg = new SocketMsg<>();
socketMsg.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue()); 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))); socketMsg.setData(JSON.toJSONString(sourceIssues.get(0)));
SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, JSON.toJSONString(socketMsg)); SocketManager.sendMsg(param.getUserPageId() + CnSocketUtil.SOURCE_TAG, JSON.toJSONString(socketMsg));
} }

View File

@@ -14,7 +14,7 @@ public enum DataSourceEnum {
MINUTE_STATISTICS_MIN("min", "分钟统计数据-最小"), MINUTE_STATISTICS_MIN("min", "分钟统计数据-最小"),
MINUTE_STATISTICS_AVG("avg", "分钟统计数据-平均"), MINUTE_STATISTICS_AVG("avg", "分钟统计数据-平均"),
MINUTE_STATISTICS_CP95("cp95", "分钟统计数据-CP95"), MINUTE_STATISTICS_CP95("cp95", "分钟统计数据-CP95"),
RECORDED_DATA("Recorded_data", "录播数据"); WAVE_DATA("wave_data", "录播数据");
private String value; private String value;
private String msg; private String msg;

View File

@@ -75,9 +75,7 @@ public class ResultParam {
@Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.PLAN_ID_FORMAT_ERROR) @Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.PLAN_ID_FORMAT_ERROR)
private String planId; private String planId;
@ApiModelProperty(value = "脚本Id", required = true) @ApiModelProperty(value = "脚本Id", required = false)
@NotBlank(message = DetectionValidMessage.SCRIPT_ID_NOT_BLANK)
@Pattern(regexp = PatternRegex.SYSTEM_ID, message = DetectionValidMessage.SCRIPT_ID_FORMAT_ERROR)
private String scriptId; private String scriptId;
@ApiModelProperty(value = "误差体系Id", required = true) @ApiModelProperty(value = "误差体系Id", required = true)
@@ -90,5 +88,8 @@ public class ResultParam {
private String deviceId; private String deviceId;
private String code; private String code;
@ApiModelProperty(value = "模式Id", required = true)
private String patternId;
} }
} }

View File

@@ -63,6 +63,7 @@ public interface IResultService {
* 更换误差体系 * 更换误差体系
* *
* @param param * @param param
*
*/ */
void changeErrorSystem(ResultParam.ChangeErrorSystemParam param); void changeErrorSystem(ResultParam.ChangeErrorSystemParam param);

View File

@@ -11,11 +11,15 @@ import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.github.yulichang.wrapper.MPJLambdaWrapper; 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.enums.common.DataStateEnum;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.utils.PubUtils; 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.enums.DetectionCodeEnum;
import com.njcn.gather.detection.pojo.param.PreDetectionParam; 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.po.DevData;
import com.njcn.gather.detection.pojo.vo.AlignDataVO; import com.njcn.gather.detection.pojo.vo.AlignDataVO;
import com.njcn.gather.detection.pojo.vo.DetectionData; 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.service.impl.DetectionServiceImpl;
import com.njcn.gather.detection.util.socket.CnSocketUtil; import com.njcn.gather.detection.util.socket.CnSocketUtil;
import com.njcn.gather.device.pojo.enums.CommonEnum; 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.pojo.po.PqDev;
import com.njcn.gather.device.service.IPqDevService; import com.njcn.gather.device.service.IPqDevService;
import com.njcn.gather.plan.pojo.po.AdPlan; import com.njcn.gather.plan.pojo.po.AdPlan;
@@ -72,6 +77,8 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
@@ -351,6 +358,29 @@ public class ResultServiceImpl implements IResultService {
List<PqScriptDtls> f = scriptDtlIndexList.stream().filter(x -> "Freq".equals(x.getValueType())).collect(Collectors.toList()); List<PqScriptDtls> f = scriptDtlIndexList.stream().filter(x -> "Freq".equals(x.getValueType())).collect(Collectors.toList());
dtlType.setScriptTypeName(dictTree.getName() + "=" + f.get(0).getValue() + ResultUnitEnum.FREQ.getUnit()); dtlType.setScriptTypeName(dictTree.getName() + "=" + f.get(0).getValue() + ResultUnitEnum.FREQ.getUnit());
break; 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<PqScriptDtls> v = scriptDtlIndexList.stream().filter(x -> "VOL".equals(x.getValueType())).collect(Collectors.toList());
List<PqScriptDtls> i = scriptDtlIndexList.stream().filter(x -> "CUR".equals(x.getValueType())).collect(Collectors.toList());
List<PqScriptDtls> aDtl1 = scriptDtlIndexList.stream().filter(x -> "A".equals(x.getPhase()) && "VOL".equals(x.getValueType())).collect(Collectors.toList());
List<PqScriptDtls> 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 @Override
@Transactional @Transactional
public void changeErrorSystem(ResultParam.ChangeErrorSystemParam param) { public void changeErrorSystem(ResultParam.ChangeErrorSystemParam param) {
this.createTempResultTable(param.getCode() + "_temp"); DictData dictData = dictDataService.getDictDataById(param.getPatternId());
this.calculateResult(param.getPlanId(), param.getScriptId(), param.getCode() + "_temp", param.getErrorSysId(), param.getDeviceId()); 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 @Override
@@ -940,7 +976,12 @@ public class ResultServiceImpl implements IResultService {
@Override @Override
public void reCalculate(ResultParam.ChangeErrorSystemParam param) { 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 code
* @param isContrast
*/ */
private void createTempResultTable(String code) { private void createTempResultTable(String code, boolean isContrast) {
this.dropTempResultTable(code); this.dropTempResultTable(code);
String oldCode = code.replace("_temp", ""); String oldCode = code.replace("_temp", "");
tableGenMapper.genNonHarmonicResultTable(code, false); tableGenMapper.genNonHarmonicResultTable(code, isContrast);
StringBuilder A = new StringBuilder(); StringBuilder A = new StringBuilder();
StringBuilder B = new StringBuilder(); StringBuilder B = new StringBuilder();
StringBuilder C = 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相谐波',"); 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" + String sql1 = "CREATE TABLE if not exists AD_Harmonic_Result_" + code + " (\n" +
" Time_Id DATETIME(3) NULL COMMENT '时间',\n" + " Dev_Monitor_Id CHAR(34) NOT NULL COMMENT '监测点Id',\n" +
" Script_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id字典表',\n" + " Time_Id DATETIME(3) NULL COMMENT '时间',\n" +
" Sort int(5) NOT NULL COMMENT '总检测脚本中的测试项序号',\n" +
" AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表',\n" + " AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表',\n" +
" Data_Type CHAR(32) NOT NULL COMMENT '数据指标只有数据源为分钟统计时候才会使用最大、最小、平均、CP95默认平均值字典表',\n" + " Data_Type CHAR(32) NOT NULL COMMENT '数据指标只有数据源为分钟统计时候才会使用最大、最小、平均、CP95默认平均值字典表',\n" +
" Result_Flag int(1) NOT NULL COMMENT '1合格 2不合格 4无法处理',\n" + " Result_Flag int(1) NOT NULL COMMENT '1合格 2不合格 4无法处理',\n" +
A + B + C + A + B + C +
" PRIMARY KEY (Monitor_Id, Script_Id, Sort, AD_Type)\n" + (isContrast ?
") COMMENT='监测数据表';"; "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); tableGenMapper.genAdHarmonicTable(sql1);
sql1 = "CREATE TABLE ad_non_harmonic_" + code + " LIKE ad_non_harmonic_" + oldCode; 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 planId
* @param code * @param code
* @param errorSysId * @param errorSysId
* @param devId * @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", ""); String oldCode = code.replace("_temp", "");
PreDetectionParam param = new PreDetectionParam(); PreDetectionParam param = new PreDetectionParam();
param.setCode(code); param.setCode(code);
@@ -1912,13 +1965,13 @@ public class ResultServiceImpl implements IResultService {
List<SimAndDigHarmonicResult> harmonicResults = harmonicMap.get(sourceIssue.getIndex()); List<SimAndDigHarmonicResult> harmonicResults = harmonicMap.get(sourceIssue.getIndex());
List<DevData> realDataXiList = new ArrayList<>(); List<DevData> realDataXiList = new ArrayList<>();
if (CollUtil.isNotEmpty(nonHarmonicResults)) { if (CollUtil.isNotEmpty(nonHarmonicResults)) {
realDataXiList.addAll(this.toList(nonHarmonicResults, null, true)); realDataXiList.addAll(this.simAndDigToList(nonHarmonicResults, null, true));
} }
if (CollUtil.isNotEmpty(harmonicResults)) { 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())) { 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 { } 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()); iPqDevService.updateResult(false, param.getDevIds(), valueType, param.getCode(), param.getUserId(), param.getTemperature(), param.getHumidity());
} }
private List<DevData> toList(List<SimAndDigNonHarmonicResult> nonHarm, List<SimAndDigHarmonicResult> 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<String, String> devIdMapComm = new HashMap<>();
PqDev dev = pqDevService.getById(deviceId);
devIdMapComm.put(dev.getIp(), deviceId);
AdPlan plan = adPlanService.getById(planId);
BiMap<String, String> testItemMap = HashBiMap.create();
List<String> testItemIds = Arrays.asList(plan.getTestItem().split(","));
List<DictTree> dictTreeList = dictTreeService.getDictTreeById(testItemIds);
List<String> fatherIdList = dictTreeList.stream().map(DictTree::getId).collect(Collectors.toList());
List<DictTree> childDictTreeList = dictTreeService.listByFatherIds(fatherIdList);
if (CollUtil.isNotEmpty(childDictTreeList)) {
List<String> 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<AdPair> adPairList = adPairService.listByDevIds(Arrays.asList(deviceId));
Map<Integer, List<AdPair>> numAdPairsMap = adPairList.stream().collect(Collectors.groupingBy(AdPair::getNum, Collectors.toList()));
numAdPairsMap.forEach((num, pairList) -> {
BiMap<String, String> parsIp = HashBiMap.create();
Map<String, Integer> numMap = new HashMap<>();
Map<String, List<AdPair>> 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<ContrastNonHarmonicResult> devNonHarmonicRawDataList = contrastNonHarmonicService.listAllRawData(oldCode, num, 0, deviceId, null);
List<ContrastNonHarmonicResult> stdDevNonHarmonicRawDataList = contrastNonHarmonicService.listAllRawData(oldCode, num, 1, deviceId, null);
List<ContrastHarmonicResult> devHarmonicRawDataList = contrastHarmonicService.listAllRawData(oldCode, num, 0, deviceId, null);
List<ContrastHarmonicResult> stdDevHarmonicRawDataList = contrastHarmonicService.listAllRawData(oldCode, num, 1, deviceId, null);
List<DevData> devData = contrastToList(devNonHarmonicRawDataList, devHarmonicRawDataList, testItemMap);
List<DevData> standardDevData = contrastToList(stdDevNonHarmonicRawDataList, stdDevHarmonicRawDataList, testItemMap);
detectionServiceImpl.processing(devData, standardDevData, parsIp, devIdMapComm, testItemMap.keySet().stream().collect(Collectors.toList()), errorSysId, dataRule, numMap, code);
});
}
private List<DevData> simAndDigToList(List<SimAndDigNonHarmonicResult> nonHarm, List<SimAndDigHarmonicResult> harm, boolean containBaseHarm) {
List<DevData> info = new ArrayList<>(); List<DevData> info = new ArrayList<>();
// if (CollUtil.isNotEmpty(nonHarm)) { // if (CollUtil.isNotEmpty(nonHarm)) {
if (CollUtil.isNotEmpty(nonHarm)) { if (CollUtil.isNotEmpty(nonHarm)) {
@@ -2018,12 +2136,107 @@ public class ResultServiceImpl implements IResultService {
return info; return info;
} }
private List<String> reflectHarmonicValue(String phase, SimAndDigHarmonicResult adHarmonicResult, boolean notContainBaseHarm) { private List<DevData> contrastToList(List<ContrastNonHarmonicResult> nonHarm, List<ContrastHarmonicResult> harm, BiMap<String, String> testItemMap) {
List<DevData> info = new ArrayList<>();
if (CollUtil.isNotEmpty(nonHarm)) {
Map<String, List<ContrastNonHarmonicResult>> 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<LocalDateTime, List<ContrastNonHarmonicResult>> timeListMap = value.stream().collect(Collectors.groupingBy(ContrastNonHarmonicResult::getTimeId, Collectors.toList()));
timeListMap.forEach((time, value1) -> {
List<DevData.SqlDataDTO> 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<String, List<ContrastHarmonicResult>> 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<LocalDateTime, List<ContrastHarmonicResult>> timeListMap = value.stream().collect(Collectors.groupingBy(ContrastHarmonicResult::getTimeId, Collectors.toList()));
timeListMap.forEach((time, value1) -> {
devData.setTime(time.format(DateTimeFormatter.ofPattern(DatePattern.ISO8601_PATTERN)));
List<DevData.SqlDataDTO> sqlData = new ArrayList<>();
List<DevData.SqlDataHarmDTO> 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 <T extends BaseResult> List<String> reflectHarmonicValue(String phase, T adHarmonicResult, boolean notContainBaseHarm) {
List<String> info = new ArrayList<>(); List<String> info = new ArrayList<>();
for (int i = notContainBaseHarm ? 2 : 1; i <= 50; i++) { for (int i = notContainBaseHarm ? 2 : 1; i <= 50; i++) {
String fieldName = phase + "Value" + i; String fieldName = phase + "Value" + i;
try { 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); idField.setAccessible(true);
String value = idField.get(adHarmonicResult) + ""; String value = idField.get(adHarmonicResult) + "";
info.add(value); info.add(value);

View File

@@ -64,6 +64,12 @@ public class SourceIssue {
@JSONField(name = "type", ordinal = 2) @JSONField(name = "type", ordinal = 2)
private String type; private String type;
/**
* 是否是功率
*/
@JSONField(serialize = false)
private Boolean isP;
/** /**
* 多量响量 * 多量响量
*/ */

View File

@@ -16,6 +16,7 @@ import com.njcn.gather.device.pojo.po.PqDev;
import com.njcn.gather.device.service.IPqDevService; import com.njcn.gather.device.service.IPqDevService;
import com.njcn.gather.plan.mapper.AdPlanMapper; import com.njcn.gather.plan.mapper.AdPlanMapper;
import com.njcn.gather.plan.pojo.po.AdPlan; 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.PqScriptCheckDataMapper;
import com.njcn.gather.script.mapper.PqScriptDtlsMapper; import com.njcn.gather.script.mapper.PqScriptDtlsMapper;
import com.njcn.gather.script.mapper.PqScriptMapper; import com.njcn.gather.script.mapper.PqScriptMapper;
@@ -246,6 +247,11 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
issueAdd(curList, dtlsIList, HARM_I, INHARM_I, freqDtls.getValue(), "I", channelListDTOS, checkDataParam, devFly, isValueType); issueAdd(curList, dtlsIList, HARM_I, INHARM_I, freqDtls.getValue(), "I", channelListDTOS, checkDataParam, devFly, isValueType);
issue.setChannelList(channelListDTOS); issue.setChannelList(channelListDTOS);
if (ResultUnitEnum.P.getCode().equals(issue.getType())) {
issue.setIsP(true);
} else {
issue.setIsP(false);
}
sourceIssues.add(issue); sourceIssues.add(issue);
} }
}); });
@@ -413,6 +419,8 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
@Override @Override
public List<PqScriptDtlsParam.CheckData> scriptDtlsCheckDataList(PqScriptDtlsParam sourceIssue) { public List<PqScriptDtlsParam.CheckData> scriptDtlsCheckDataList(PqScriptDtlsParam sourceIssue) {
Boolean valueType = pqScriptMapper.selectScriptIsValueType(sourceIssue.getScriptId());
List<PqScriptDtlsParam.CheckData> info = new ArrayList<>(); List<PqScriptDtlsParam.CheckData> info = new ArrayList<>();
//获取所有下拉值情况 //获取所有下拉值情况
List<PqScriptDtlsParam.CheckData> checkDataList = sourceIssue.getCheckDataList(); List<PqScriptDtlsParam.CheckData> checkDataList = sourceIssue.getCheckDataList();
@@ -526,7 +534,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
if (harmIMap.containsKey(harmModel.getHarm())) { if (harmIMap.containsKey(harmModel.getHarm())) {
PqScriptDtlsParam.ChannelListDTO.HarmModel i = harmIMap.get(harmModel.getHarm()); PqScriptDtlsParam.ChannelListDTO.HarmModel i = harmIMap.get(harmModel.getHarm());
//电压*电流*cos电压角度-电流角度) //电压*电流*cos电压角度-电流角度)
checkData.setValue(i.getFAmp() * harmModel.getFAmp() / 100 * Math.cos(harmModel.getFPhase() - i.getFPhase())); checkData.setValue(i.getFAmp() * harmModel.getFAmp() / 100 * Math.cos((harmModel.getFPhase() - i.getFPhase()) * Math.PI / 180));
} }
setCheck(info, checkData, channelListDTO, checkArchive, listDTO); setCheck(info, checkData, channelListDTO, checkArchive, listDTO);
} }
@@ -605,13 +613,13 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
break; break;
case I1: case I1:
break; break;
case P_FUND: case W:
channelU = channelList.stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList()); channelU = channelList.stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList());
if (CollUtil.isNotEmpty(channelU)) { if (CollUtil.isNotEmpty(channelU)) {
for (PqScriptDtlsParam.ChannelListDTO listDTO : channelU) { for (PqScriptDtlsParam.ChannelListDTO listDTO : channelU) {
//获取电流通道 //获取电流通道
channelI = channelList.stream() channelI = channelList.stream()
.filter(PqScriptDtlsParam.ChannelListDTO::getHarmFlag) // .filter(PqScriptDtlsParam.ChannelListDTO::getHarmFlag)
.filter(x -> x.getChannelType().contains("I" + listDTO.getChannelType().substring(1, 2))) .filter(x -> x.getChannelType().contains("I" + listDTO.getChannelType().substring(1, 2)))
.collect(Collectors.toList()); .collect(Collectors.toList());
if (CollUtil.isNotEmpty(channelI)) { if (CollUtil.isNotEmpty(channelI)) {
@@ -619,7 +627,56 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
checkData.setErrorFlag(channelListDTO.getErrorFlag()); checkData.setErrorFlag(channelListDTO.getErrorFlag());
checkData.setEnable(channelListDTO.getEnable()); checkData.setEnable(channelListDTO.getEnable());
//电压*电流*cos电压角度-电流角度) //电压*电流*cos电压角度-电流角度)
checkData.setValue(channelI.get(0).getFAmp() * listDTO.getFAmp() * Math.cos(listDTO.getFPhase() - channelI.get(0).getFPhase())); checkData.setValue(channelI.get(0).getFAmp() * listDTO.getFAmp() / 10000 * Math.cos((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 VARW:
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 * 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); setCheck(info, checkData, channelListDTO, checkArchive, listDTO);
} }
} }
@@ -1032,7 +1089,7 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
dipDataDTO.setFTransValue(dip.getTransValue()); dipDataDTO.setFTransValue(dip.getTransValue());
if (devFly) { if (devFly) {
// if (isValueType) { // if (isValueType) {
dipDataDTO.setFTransValue(dip.getTransValue()); dipDataDTO.setFTransValue(dip.getTransValue());
// } // }
// else { // else {
// dipDataDTO.setFTransValue(NumberUtil.round(dip.getTransValue() / dtls.getValue(), 4).doubleValue()); // dipDataDTO.setFTransValue(NumberUtil.round(dip.getTransValue() / dtls.getValue(), 4).doubleValue());

View File

@@ -75,6 +75,9 @@ public class StorageUtil {
* 功率 * 功率
*/ */
case "P": case "P":
case "W":
case "VARW":
case "VAW":
unit = "W"; unit = "W";
break; break;
/** /**