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 a15ad1cd..1cddf38d 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
@@ -97,7 +97,7 @@ public class SocketContrastResponseService {
private boolean alignCheckResult = false;
/**
- * 成功的配对
+ * 成功的配对 key:被检设备ip_通道号,value:配对设备ip_通道号
*/
private Map successPair = HashBiMap.create();
@@ -125,7 +125,6 @@ public class SocketContrastResponseService {
put("I", Arrays.asList("real$IRMS"));
put("IMBV", Arrays.asList("real$V_UNBAN"));
put("IMBA", Arrays.asList("real$I_UNBAN"));
- put("F", Arrays.asList("avg$PST"));
put("P", Arrays.asList("real$P_FUND"));
}};
@@ -143,12 +142,14 @@ public class SocketContrastResponseService {
* @param param
*/
public void init(ContrastDetectionParam param) {
+ SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L);
SocketManager.contrastClockMap.clear();
successComm.clear();
failComm.clear();
+ successPair.clear();
+ FormalTestManager.isRemoveSocket = true;
- FormalTestManager.pairsMap.clear();
- FormalTestManager.pairsMap.putAll(param.getPairs());
+ HashBiMap hashBiMap = HashBiMap.create(param.getPairs());
FormalTestManager.currentTestPlan = adPlanService.getById(param.getPlanId());
DictData pattern = dictDataService.getById(FormalTestManager.currentTestPlan.getPattern());
@@ -160,7 +161,7 @@ public class SocketContrastResponseService {
pqDevList.forEach(x -> {
List monitorList = x.getMonitorList();
//移除不做检测的监测点
- monitorList.removeIf(y -> !FormalTestManager.pairsMap.containsKey(x.getDevId() + CnSocketUtil.SPLIT_TAG + y.getLine()));
+ monitorList.removeIf(y -> !hashBiMap.containsKey(x.getDevId() + CnSocketUtil.SPLIT_TAG + y.getLine()));
monitorList.forEach(y -> {
devMonitorMap.put(x.getDevId() + CnSocketUtil.SPLIT_TAG + y.getLine(), y);
});
@@ -170,7 +171,7 @@ public class SocketContrastResponseService {
// key为标准设备id,value为标准设备下的监测点列表(Id_通道号)
Map> pairsMap = new HashMap<>();
- FormalTestManager.pairsMap.forEach((key, value) -> {
+ hashBiMap.forEach((key, value) -> {
String[] split = value.split(CnSocketUtil.SPLIT_TAG);
List monitorIdList = pairsMap.getOrDefault(split[0], new ArrayList<>());
monitorIdList.add(value);
@@ -178,9 +179,10 @@ public class SocketContrastResponseService {
});
FormalTestManager.standardDevList.clear();
- List standardDevIds = FormalTestManager.pairsMap.values().stream().map(key -> key.split(CnSocketUtil.SPLIT_TAG)[0]).distinct().collect(Collectors.toList());
+ List standardDevIds = hashBiMap.values().stream().map(key -> key.split(CnSocketUtil.SPLIT_TAG)[0]).distinct().collect(Collectors.toList());
FormalTestManager.standardDevList.addAll(pqStandardDevService.listStandardDevPreDetection(standardDevIds));
+ FormalTestManager.pairsMap.clear();
// 标准设备根据配对关系设置监测点
FormalTestManager.standardDevList.stream().forEach(x -> {
List monitorList = new ArrayList<>();
@@ -191,12 +193,13 @@ public class SocketContrastResponseService {
monitorListDTO.setLineId(x.getDevIP() + CnSocketUtil.SPLIT_TAG + split[1]);
monitorListDTO.setLine(Integer.valueOf(split[1]));
- PreDetection.MonitorListDTO monitorListDTO1 = devMonitorMap.get(FormalTestManager.pairsMap.inverse().get(y));
+ PreDetection.MonitorListDTO monitorListDTO1 = devMonitorMap.get(hashBiMap.inverse().get(y));
monitorListDTO.setConnection(monitorListDTO1.getConnection());
monitorListDTO.setPtStr(monitorListDTO1.getPtStr());
monitorListDTO.setCtStr(monitorListDTO1.getCtStr());
monitorListDTO.setStatInterval(monitorListDTO1.getStatInterval());
+ FormalTestManager.pairsMap.put(monitorListDTO1.getLineId(), monitorListDTO.getLineId());
monitorList.add(monitorListDTO);
});
x.setMonitorList(monitorList);
@@ -239,6 +242,7 @@ public class SocketContrastResponseService {
FormalTestManager.devIdMapComm.putAll(FormalTestManager.devList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevId)));
FormalTestManager.devIdMapComm.putAll(FormalTestManager.standardDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevId)));
+
FormalTestManager.currentStep = SourceOperateCodeEnum.YJC_SBTXJY;
}
@@ -298,7 +302,7 @@ public class SocketContrastResponseService {
// 通知前端整个装置通讯检测过程成功
SocketDataMsg temMsg = new SocketDataMsg();
temMsg.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode());
- temMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_01.getValue());
+ temMsg.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue());
temMsg.setRequestId(SourceOperateCodeEnum.YJC_SBTXJY.getValue());
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(temMsg));
@@ -311,7 +315,7 @@ public class SocketContrastResponseService {
phaseSequenceParam.setMoniterIdList(Arrays.asList(FormalTestManager.monitorMap.keySet().toArray(new String[FormalTestManager.monitorMap.size()])));
phaseSequenceParam.setDataType(FormalTestManager.testItemCodeList);
phaseSequenceParam.setReadCount(1);
- phaseSequenceParam.setIgnoreCount(0);
+ phaseSequenceParam.setIgnoreCount(1); // 刚一开始实时数据申请后,第一组数据为空数据,忽略掉
socketMsg.setData(JSON.toJSONString(phaseSequenceParam));
FormalTestManager.currentStep = SourceOperateCodeEnum.YJC_MXYZXJY;
@@ -336,10 +340,10 @@ public class SocketContrastResponseService {
break;
case RE_OPERATE:
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
- CnSocketUtil.contrastSendquit(param.getUserPageId());
+ CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
break;
case NO_INIT_DEV:
- CnSocketUtil.contrastSendquit(param.getUserPageId());
+ CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
break;
default:
WebServiceManager.sendUnknownErrorMessage(param.getUserPageId());
@@ -348,82 +352,6 @@ public class SocketContrastResponseService {
}
}
- /**
- * 协议检测
- */
-// private void protocolDeal(SocketDataMsg socketDataMsg, PreDetectionParam param) {
-// SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode());
-// SocketMsg socketMsg = new SocketMsg<>();
-// String s = param.getUserPageId() + CnSocketUtil.CONTRAST_DEV_TAG;
-// switch (Objects.requireNonNull(dictDataEnumByCode)) {
-// case SUCCESS:
-// if (socketDataMsg.getOperateCode().equals(SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue())) {
-// successComm.add(socketDataMsg.getData());
-// // 推送前端单个测点协议校验成功
-// WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1));
-// if (successComm.size() == FormalTestManager.monitorMap.size()) {
-// for (String string : successComm) {
-// //模拟统计协议校验,通讯校验已经校验过,模拟直接推送
-// SocketDataMsg webSend = new SocketDataMsg();
-// webSend.setRequestId(SourceOperateCodeEnum.YJC_XYJY.getValue());
-// webSend.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue());
-// webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode());
-// webSend.setData(string);
-// WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(webSend, FormalTestManager.devNameMapComm, 1));
-// }
-//
-// this.clearData(FormalTestManager.devDataMap, FormalTestManager.standardDevDataMap);
-//
-// SocketDataMsg webSend = new SocketDataMsg();
-// webSend.setRequestId(SourceOperateCodeEnum.YJC_XYJY.getValue());
-// webSend.setOperateCode(SourceOperateCodeEnum.DEV_INIT_GATHER_02.getValue());
-// webSend.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode());
-// WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend));
-//
-// System.out.println("协议校验成功!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》开始模型一致性校验》》》》》》》》》》》》》》》》");
-// socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue());
-// socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue());
-// DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam();
-// phaseSequenceParam.setMoniterIdList(Arrays.asList(FormalTestManager.monitorMap.keySet().toArray(new String[FormalTestManager.monitorMap.size()])));
-// phaseSequenceParam.setDataType(FormalTestManager.testItemCodeList);
-// phaseSequenceParam.setReadCount(this.getMaxReadCount(1));
-// phaseSequenceParam.setIgnoreCount(0);
-// socketMsg.setData(JSON.toJSONString(phaseSequenceParam));
-//
-// FormalTestManager.currentStep = SourceOperateCodeEnum.YJC_MXYZXJY;
-// SocketManager.sendMsg(s, JSON.toJSONString(socketMsg));
-// // 实时数据开始计时
-// SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L);
-// }
-// }
-// completeJudgment(param);
-// break;
-// case UNPROCESSED_BUSINESS:
-// WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
-// break;
-// case DEV_ERROR:
-// failComm.addAll(FormalTestManager.devMapMonitorNum.get(socketDataMsg.getData()));
-// WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0));
-// completeJudgment(param);
-// break;
-// case DEV_TARGET:
-// failComm.add(socketDataMsg.getData());
-// WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1));
-// completeJudgment(param);
-// break;
-// case RE_OPERATE:
-// WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
-// CnSocketUtil.contrastSendquit(param.getUserPageId());
-// break;
-// case ICD_NOT_FOUND:
-// WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
-// CnSocketUtil.contrastSendquit(param.getUserPageId());
-// break;
-// default:
-// break;
-// }
-// }
-
/**
* 模型一致性校验
*/
@@ -432,6 +360,7 @@ public class SocketContrastResponseService {
String s = param.getUserPageId() + CnSocketUtil.CONTRAST_DEV_TAG;
SocketMsg socketMsg = new SocketMsg<>();
DevData devData = JSON.parseObject(socketDataMsg.getData(), DevData.class);
+ socketDataMsg.setRequestId(SourceOperateCodeEnum.YJC_MXYZXJY.getValue());
if (ObjectUtil.isNotNull(dictDataEnumByCode)) {
switch (dictDataEnumByCode) {
@@ -453,8 +382,10 @@ public class SocketContrastResponseService {
if (successComm.size() == FormalTestManager.monitorMap.size()) {
boolean modelCheckResult = this.modelCheck(param, FormalTestManager.devDataMap);
- modelCheckResult = modelCheckResult && this.modelCheck(param, FormalTestManager.standardDevDataMap);
+ modelCheckResult = this.modelCheck(param, FormalTestManager.standardDevDataMap) && modelCheckResult;
if (!modelCheckResult) {
+ this.clearData(FormalTestManager.devDataMap, FormalTestManager.standardDevDataMap);
+
SocketDataMsg webSend = new SocketDataMsg();
webSend.setRequestId(SourceOperateCodeEnum.YJC_MXYZXJY.getValue());
webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue());
@@ -462,7 +393,7 @@ public class SocketContrastResponseService {
WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(webSend, FormalTestManager.devNameMapComm, 0));
System.out.println("模型一致性校验失败!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》");
- CnSocketUtil.contrastSendquit(param.getUserPageId());
+ CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
return;
} else {
this.clearData(FormalTestManager.devDataMap, FormalTestManager.standardDevDataMap);
@@ -489,29 +420,27 @@ public class SocketContrastResponseService {
SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L);
}
}
- completeJudgment(param);
break;
case UNPROCESSED_BUSINESS:
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
break;
+ case NORMAL_RESPONSE:
+ WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
+ break;
case DEV_ERROR:
- failComm.addAll(FormalTestManager.devMapMonitorNum.get(socketDataMsg.getData()));
WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0));
- CnSocketUtil.contrastSendquit(param.getUserPageId());
- completeJudgment(param);
+ CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
break;
case DEV_TARGET:
- failComm.add(socketDataMsg.getData());
WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1));
- CnSocketUtil.contrastSendquit(param.getUserPageId());
- completeJudgment(param);
+ CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
break;
case RE_OPERATE:
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
- CnSocketUtil.contrastSendquit(param.getUserPageId());
+ CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
break;
case NO_INIT_DEV:
- CnSocketUtil.contrastSendquit(param.getUserPageId());
+ CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
break;
default:
WebServiceManager.sendUnknownErrorMessage(param.getUserPageId());
@@ -531,6 +460,7 @@ public class SocketContrastResponseService {
String s = param.getUserPageId() + CnSocketUtil.CONTRAST_DEV_TAG;
SocketMsg socketMsg = new SocketMsg<>();
DevData devData = JSON.parseObject(socketDataMsg.getData(), DevData.class);
+ socketDataMsg.setRequestId(SourceOperateCodeEnum.YJC_ALIGN.getValue());
if (ObjectUtil.isNotNull(dictDataEnumByCode)) {
switch (dictDataEnumByCode) {
@@ -545,10 +475,8 @@ public class SocketContrastResponseService {
if (!alignCheckResult) {
System.out.println("1minute内实时数据对齐校验失败!");
- // 向通讯模块发送不再接收数据
- this.sendNotReceiveData(s);
+ CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
- successPair.clear();
this.clearData(FormalTestManager.devDataMap, FormalTestManager.standardDevDataMap);
Collection disjunction = CollectionUtil.disjunction(FormalTestManager.pairsMap.keySet(), successPair.keySet());
@@ -568,7 +496,9 @@ public class SocketContrastResponseService {
webSend.setCode(SourceResponseCodeEnum.ALL_FAIL.getCode());//最终错误推送
WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(webSend, FormalTestManager.devNameMapComm, 0));
- CnSocketUtil.contrastSendquit(param.getUserPageId());
+ // 将数据推送给前端
+ this.sendAlignDataToWeb(param.getUserPageId());
+
return;
}
scheduler.shutdown();
@@ -611,10 +541,6 @@ public class SocketContrastResponseService {
// 将数据推送给前端
this.sendAlignDataToWeb(param.getUserPageId());
- // 向通讯模块发送不再接收数据
- this.sendNotReceiveData(s);
-
- successPair.clear();
this.clearData(FormalTestManager.devDataMap, FormalTestManager.standardDevDataMap);
SocketDataMsg webSend1 = new SocketDataMsg();
@@ -646,23 +572,19 @@ public class SocketContrastResponseService {
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
break;
case DEV_ERROR:
- //failComm.addAll(FormalTestManager.devMapMonitorNum.get(socketDataMsg.getData()));
WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0));
- CnSocketUtil.contrastSendquit(param.getUserPageId());
- //completeJudgment(param);
+ CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
break;
case DEV_TARGET:
- //failComm.add(socketDataMsg.getData());
WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1));
- CnSocketUtil.contrastSendquit(param.getUserPageId());
- //completeJudgment(param);
+ CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
break;
case RE_OPERATE:
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
- CnSocketUtil.contrastSendquit(param.getUserPageId());
+ CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
break;
case NO_INIT_DEV:
- CnSocketUtil.contrastSendquit(param.getUserPageId());
+ CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
break;
default:
WebServiceManager.sendUnknownErrorMessage(param.getUserPageId());
@@ -680,6 +602,7 @@ public class SocketContrastResponseService {
String s = param.getUserPageId() + CnSocketUtil.CONTRAST_DEV_TAG;
SocketMsg socketMsg = new SocketMsg<>();
DevData devData = JSON.parseObject(socketDataMsg.getData(), DevData.class);
+ socketDataMsg.setRequestId(SourceOperateCodeEnum.YJC_XUJY.getValue());
if (ObjectUtil.isNotNull(dictDataEnumByCode)) {
switch (dictDataEnumByCode) {
@@ -705,7 +628,7 @@ public class SocketContrastResponseService {
// 进行单个监测点的相序校验
if (!successPair.containsKey(devMonitorId)) {
- if (FormalTestManager.devDataMap.get(devMonitorId).size() > 1 + 5 && FormalTestManager.standardDevDataMap.get(standardDevMonitorId).size() > 1 + 5) { // 电压、电流误差校验至少需要1组数据。加5是为了避免数据在传输过程中因为网络波动导致的数据延时接收。
+ if (FormalTestManager.devDataMap.get(devMonitorId).size() > 1 && FormalTestManager.standardDevDataMap.get(standardDevMonitorId).size() > 1) {
successComm.add(standardDevMonitorId);
successComm.add(devMonitorId);
// successComm.add(monitorId1);
@@ -714,9 +637,7 @@ public class SocketContrastResponseService {
successPair.put(devMonitorId, standardDevMonitorId);
// 若成功的配对项等于总的配对项,则判定为成功
if (successPair.keySet().containsAll(FormalTestManager.pairsMap.keySet())) {
- successPair.clear();
- successComm.clear();
- failComm.clear();
+
this.clearData(FormalTestManager.devDataMap, FormalTestManager.standardDevDataMap);
SocketDataMsg webSend = new SocketDataMsg();
@@ -725,26 +646,29 @@ public class SocketContrastResponseService {
webSend.setCode(SourceResponseCodeEnum.ALL_SUCCESS.getCode());//最终成功推送
WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(webSend, FormalTestManager.devNameMapComm, 0));
- System.out.println("相序校验成功!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》开始正式检测》》》》》》》》》》》》》》》》");
- socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue());
- socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue());
- DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam();
- phaseSequenceParam.setMoniterIdList(Arrays.asList(FormalTestManager.monitorMap.keySet().toArray(new String[FormalTestManager.monitorMap.size()])));
- phaseSequenceParam.setDataType(FormalTestManager.testItemCodeList);
- //phaseSequenceParam.setReadCount(this.getMaxReadCount(6 + 5));
- phaseSequenceParam.setIgnoreCount(0);
- socketMsg.setData(JSON.toJSONString(phaseSequenceParam));
+ // 后续做正式检测
+ if (param.getTestItemList().get(2)) {
+ System.out.println("相序校验成功!》》》》》》》》》》》》》》》》》》》》》》》》》》》》》开始正式检测》》》》》》》》》》》》》》》》");
+ socketMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue());
+ socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue());
+ DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam();
+ phaseSequenceParam.setMoniterIdList(Arrays.asList(FormalTestManager.monitorMap.keySet().toArray(new String[FormalTestManager.monitorMap.size()])));
+ phaseSequenceParam.setDataType(FormalTestManager.testItemCodeList);
+ //phaseSequenceParam.setReadCount(this.getMaxReadCount(6 + 5));
+ phaseSequenceParam.setIgnoreCount(0);
+ socketMsg.setData(JSON.toJSONString(phaseSequenceParam));
- FormalTestManager.currentStep = SourceOperateCodeEnum.FORMAL_REAL;
- //SocketManager.sendMsg(s, JSON.toJSONString(socketMsg));
- // 实时数据开始计时
- //SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L);
+ FormalTestManager.currentStep = SourceOperateCodeEnum.FORMAL_REAL;
+ //SocketManager.sendMsg(s, JSON.toJSONString(socketMsg));
+ // 实时数据开始计时
+ //SocketManager.contrastClockMap.put(DataSourceEnum.REAL_DATA, 0L);
+ } else {
+ // 断开与设备的连接,但是不要将Socket移除
+ CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
+ }
}
} else if (successComm.size() == FormalTestManager.monitorMap.size()) {
this.clearData(FormalTestManager.devDataMap, FormalTestManager.standardDevDataMap);
- successComm.clear();
- failComm.clear();
- successPair.clear();
// 相序校验失败,最终向前端发送失败消息
WebSocketVO webSend = new WebSocketVO<>();
@@ -753,7 +677,7 @@ public class SocketContrastResponseService {
webSend.setCode(SourceResponseCodeEnum.ALL_FAIL.getCode()); //最终错误推送
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSend));
- CnSocketUtil.contrastSendquit(param.getUserPageId());
+ CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
return;
}
}
@@ -763,17 +687,13 @@ public class SocketContrastResponseService {
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
break;
case DEV_ERROR:
- failComm.addAll(FormalTestManager.devMapMonitorNum.get(socketDataMsg.getData()));
WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 0));
- completeJudgment(param);
break;
case DEV_TARGET:
- failComm.addAll(FormalTestManager.devMapMonitorNum.get(socketDataMsg.getData()));
WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(socketDataMsg, FormalTestManager.devNameMapComm, 1));
- completeJudgment(param);
break;
case RE_OPERATE:
- CnSocketUtil.contrastSendquit(param.getUserPageId());
+ CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
break;
default:
WebServiceManager.sendUnknownErrorMessage(param.getUserPageId());
@@ -898,7 +818,7 @@ public class SocketContrastResponseService {
// List valueType = iPqScriptCheckDataService.getValueType(checkDataParam);
//
// iPqDevService.updateResult(param.getDevIds(), valueType, param.getCode(), param.getUserId(), param.getTemperature(), param.getHumidity());
-// CnSocketUtil.contrastSendquit(param.getUserPageId());
+// CnSocketUtil.contrastSendquit(param.getUserPageId(),false);
// }
// successComm.clear();
// FormalTestManager.realDataXiList.clear();
@@ -950,7 +870,9 @@ public class SocketContrastResponseService {
case SUCCESS:
switch (Objects.requireNonNull(operateCodeEnum)) {
case QUIT_INIT_02:
- SocketManager.removeUser(s);
+ if (FormalTestManager.isRemoveSocket) {
+ SocketManager.removeUser(s);
+ }
break;
default:
}
@@ -960,7 +882,9 @@ public class SocketContrastResponseService {
case NO_INIT_DEV:
switch (operateCodeEnum) {
case QUIT_INIT_02:
- SocketManager.removeUser(s);
+ if (FormalTestManager.isRemoveSocket) {
+ SocketManager.removeUser(s);
+ }
break;
}
break;
@@ -976,7 +900,7 @@ public class SocketContrastResponseService {
if (successComm.size() + failComm.size() == FormalTestManager.monitorMap.size()) {
//全部装置返回
if (!failComm.isEmpty()) {
- CnSocketUtil.contrastSendquit(param.getUserPageId());
+ CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
WebSocketVO webSocketVO = new WebSocketVO<>();
webSocketVO.setRequestId(SourceOperateCodeEnum.ERROR_FLOW_END.getValue());
WebServiceManager.sendMsg(param.getUserPageId(), JSON.toJSONString(webSocketVO));
@@ -994,6 +918,9 @@ public class SocketContrastResponseService {
* @param standardDevDataMap
*/
private void clearData(Map> devDataMap, Map> standardDevDataMap) {
+ successPair.clear();
+ successComm.clear();
+ failComm.clear();
standardDevDataMap.forEach((k, v) -> {
v.clear();
});
@@ -1050,7 +977,7 @@ public class SocketContrastResponseService {
List channelDataList = new ArrayList<>();
channelDataMap.forEach((channel, channelDevDataList) -> {
- String standardDevMonitorId = FormalTestManager.pairsMap.get(ip + channel);
+ String standardDevMonitorId = FormalTestManager.pairsMap.get(ip + CnSocketUtil.SPLIT_TAG + channel);
List standarDevDataList = BeanUtil.copyToList(FormalTestManager.standardDevDataMap.get(standardDevMonitorId), DevData.class);
channelDevDataList.sort(Comparator.comparing(obj -> DetectionUtil.getMillis(obj.getTime())));
@@ -1115,7 +1042,8 @@ public class SocketContrastResponseService {
webSend.setRequestId(SourceOperateCodeEnum.YJC_MXYZXJY.getValue());
webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue());
webSend.setData(k);
- if (CollUtil.isNotEmpty(descList) && descList.containsAll(FormalTestManager.testItemCodeList)) {
+ List collect = FormalTestManager.testItemCodeList.stream().map(obj -> obj.split("\\$")[1]).collect(Collectors.toList());
+ if (CollUtil.isNotEmpty(descList) && descList.containsAll(collect)) {
// 成功信息
webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode());
} else {
@@ -1127,25 +1055,6 @@ public class SocketContrastResponseService {
});
});
-// devDataMap.forEach((k, v) -> {
-// v.stream().forEach(devData1 -> {
-// List descList = devData1.getSqlData().stream().map(DevData.SqlDataDTO::getDesc).collect(Collectors.toList());
-// descList.addAll(devData1.getSqlDataHarm().stream().map(DevData.SqlDataHarmDTO::getDesc).collect(Collectors.toList()));
-// SocketDataMsg webSend = new SocketDataMsg();
-// webSend.setRequestId(SourceOperateCodeEnum.YJC_MXYZXJY.getValue());
-// webSend.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue());
-// webSend.setData(k);
-// if (FormalTestManager.testItemCodeList.containsAll(descList)) {
-// // 成功信息
-// webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode());
-// } else {
-// // 错误信息
-// webSend.setCode(SourceResponseCodeEnum.FAIL.getCode());
-// flag.set(false);
-// }
-// WebServiceManager.sendMsg(param.getUserPageId(), MsgUtil.msgToWebData(webSend, FormalTestManager.devNameMapComm, 1));
-// });
-// });
return flag.get();
}
@@ -1188,7 +1097,7 @@ public class SocketContrastResponseService {
* @return true:对齐成功;false:对齐失败
*/
private boolean singleMonitorAlignCheck(List devDataList, List standardDevDataList) {
- if (standardDevDataList.size() >= 5 + 5 && devDataList.size() >= 5 + 5) { //实时数据对齐需要至少对齐5组。为了防止网络波动,导致数据延迟接收,这里设置为5+5=10后再进行对齐
+ if (standardDevDataList.size() >= 5 && devDataList.size() >= 5) {
int count = 0;
int jStart = 0;
@@ -1225,7 +1134,6 @@ public class SocketContrastResponseService {
* @return
*/
private boolean singleMonitorXuCheck(String devMonitorId, String standardDevMonitorId, List devData, List stdData, Map devNameMapComm, String userId) {
- // 首先确保,至少有6组数据
Boolean flag = true;
if (devData.size() < 1 || stdData.size() < 1) {
return false;
@@ -1253,6 +1161,7 @@ public class SocketContrastResponseService {
webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode());
webSend.setData(pairStr + ":电压校验成功!被检设备:Ua=" + uDevList.getA() + ",Ub=" + uDevList.getB() + ",Uc=" + uDevList.getC() + ",标准设备:Ua=" + uStdList.getA() + ",Ub=" + uStdList.getB() + ",Uc=" + uStdList.getC());
}
+ WebServiceManager.sendMsg(userId, JSON.toJSONString(webSend));
if (!voltageOrCurrentCheck(iDevList.getA(), iDevList.getB(), iDevList.getC(), iStdList.getA(), iStdList.getB(), iStdList.getC(), false)) {
// 单个检测点电流校验失败,推送失败消息
webSend.setCode(SourceResponseCodeEnum.FAIL.getCode());
@@ -1277,22 +1186,22 @@ public class SocketContrastResponseService {
DevData.SqlDataDTO.ListDTO iUnblanceDevList = iUnblanceDev.get(0).getList();
DevData.SqlDataDTO.ListDTO iUnblanceStdList = iUnblanceStd.get(0).getList();
- if (!unbalanceCheck(uUnblanceDevList.getT(), uUnblanceStdList.getT(), true)) {
+ if (!unbalanceCheck(uUnblanceDevList.getB(), uUnblanceStdList.getB(), true)) {
// 单个检测点三项电压不平衡校验失败,推送失败消息
webSend.setCode(SourceResponseCodeEnum.FAIL.getCode());
- webSend.setData(pairStr + ":三项电压不平衡校验失败!被检设备:IMBV=" + uUnblanceDevList.getT() + ",标准设备:IMBV=" + uUnblanceStdList.getT());
+ webSend.setData(pairStr + ":三项电压不平衡校验失败!被检设备:IMBV=" + uUnblanceDevList.getB() + ",标准设备:IMBV=" + uUnblanceStdList.getB());
flag = false;
} else {
webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode());
- webSend.setData(pairStr + ":三项电压不平衡校验成功!被检设备:IMBV=" + uUnblanceDevList.getT() + ",标准设备:IMBV=" + uUnblanceStdList.getT());
+ webSend.setData(pairStr + ":三项电压不平衡校验成功!被检设备:IMBV=" + uUnblanceDevList.getB() + ",标准设备:IMBV=" + uUnblanceStdList.getB());
}
- if (!unbalanceCheck(iUnblanceDevList.getT(), iUnblanceStdList.getT(), false)) {
+ if (!unbalanceCheck(iUnblanceDevList.getB(), iUnblanceStdList.getB(), false)) {
webSend.setCode(SourceResponseCodeEnum.FAIL.getCode());
- webSend.setData(pairStr + ":三项电流不平衡校验失败!被检设备:IMBA=" + iUnblanceDevList.getT() + ",标准设备:IMBA=" + iUnblanceStdList.getT());
+ webSend.setData(pairStr + ":三项电流不平衡校验失败!被检设备:IMBA=" + iUnblanceDevList.getB() + ",标准设备:IMBA=" + iUnblanceStdList.getB());
flag = false;
} else {
webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode());
- webSend.setData(pairStr + ":三项电流不平衡校验成功!被检设备:IMBA=" + iUnblanceDevList.getT() + ",标准设备:IMBA=" + iUnblanceStdList.getT());
+ webSend.setData(pairStr + ":三项电流不平衡校验成功!被检设备:IMBA=" + iUnblanceDevList.getB() + ",标准设备:IMBA=" + iUnblanceStdList.getB());
}
WebServiceManager.sendMsg(userId, JSON.toJSONString(webSend));
}
@@ -1316,11 +1225,11 @@ public class SocketContrastResponseService {
if (!phaseCheck(vaUnblanceDevList, iaUnblanceDevList, vaUnblanceStdList, iaUnblanceStdList)) {
// 单个检测点相角校验失败,推送失败消息
webSend.setCode(SourceResponseCodeEnum.FAIL.getCode());
- webSend.setData(pairStr + "相角校验失败!被检设备:a=" + vaUnblanceDevList.getA() + "°,b=" + vaUnblanceDevList.getB() + "°,c=" + vaUnblanceDevList.getC() + ",标准设备:a=" + vaUnblanceStdList.getA() + "°,b=" + vaUnblanceStdList.getB() + "°,c=" + vaUnblanceStdList.getC());
+ webSend.setData(pairStr + ":相角校验失败!被检设备:a=" + vaUnblanceDevList.getA() + "°,b=" + vaUnblanceDevList.getB() + "°,c=" + vaUnblanceDevList.getC() + ",标准设备:a=" + vaUnblanceStdList.getA() + "°,b=" + vaUnblanceStdList.getB() + "°,c=" + vaUnblanceStdList.getC());
flag = false;
} else {
webSend.setCode(SourceResponseCodeEnum.SUCCESS.getCode());
- webSend.setData(pairStr + "相角校验成功!被检设备:a=" + vaUnblanceDevList.getA() + "°,b=" + vaUnblanceDevList.getB() + "°,c=" + vaUnblanceDevList.getC() + ",标准设备:a=" + vaUnblanceStdList.getA() + "°,b=" + vaUnblanceStdList.getB() + "°,c=" + vaUnblanceStdList.getC());
+ webSend.setData(pairStr + ":相角校验成功!被检设备:a=" + vaUnblanceDevList.getA() + "°,b=" + vaUnblanceDevList.getB() + "°,c=" + vaUnblanceDevList.getC() + ",标准设备:a=" + vaUnblanceStdList.getA() + "°,b=" + vaUnblanceStdList.getB() + "°,c=" + vaUnblanceStdList.getC());
}
WebServiceManager.sendMsg(userId, JSON.toJSONString(webSend));
}
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 38ec4156..3605f2c5 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
@@ -1692,7 +1692,8 @@ public class SocketDevResponseService {
FormalTestManager.monitorIdListComm = pqDevList.stream().flatMap(x -> x.getMonitorList().stream()).map(PreDetection.MonitorListDTO::getLineId).collect(Collectors.toList());
FormalTestManager.devNameMapComm = pqDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevName));
- FormalTestManager.devIdMapComm = pqDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevId));
+ FormalTestManager.devIdMapComm.clear();
+ FormalTestManager.devIdMapComm.putAll(pqDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevId)));
//初始化有效数据数
//Map sysRegResMap = iSysRegResService.listRegRes();
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 f988737a..e1df41f8 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
@@ -40,8 +40,7 @@ public enum SourceResponseCodeEnum {
ALL_SUCCESS(25001,"校验成功"),
FAIL(25002,"失败"),
ALL_FAIL(25003,"校验失败"),
- ALIGN_CHECK_FAIL(25007,"实时数据对齐校验未通过"),
-
+ RECEIVE_DATA_TIME_OUT(25004,"接收数据超时")
diff --git a/detection/src/main/java/com/njcn/gather/detection/pojo/param/ContrastDetectionParam.java b/detection/src/main/java/com/njcn/gather/detection/pojo/param/ContrastDetectionParam.java
index 7102ae2d..4f895af8 100644
--- a/detection/src/main/java/com/njcn/gather/detection/pojo/param/ContrastDetectionParam.java
+++ b/detection/src/main/java/com/njcn/gather/detection/pojo/param/ContrastDetectionParam.java
@@ -36,7 +36,7 @@ public class ContrastDetectionParam {
*/
@ApiModelProperty("配对关系")
@NotEmpty(message = DetectionValidMessage.PAIRS_NOT_EMPTY)
- private Map pairs;
+ private Map pairs;
/**
* 检测项列表。第一个元素为预检测、第二个元素为系数校准、第三个元素为正式检测
*/
diff --git a/detection/src/main/java/com/njcn/gather/detection/service/impl/DetectionServiceImpl.java b/detection/src/main/java/com/njcn/gather/detection/service/impl/DetectionServiceImpl.java
index 747f7051..7cec2dfd 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
@@ -104,6 +104,7 @@ public class DetectionServiceImpl {
param.setErrorSysId(errorSysId);
param.setUn(sourceIssue.getFUn());
param.setIn(sourceIssue.getFIn());
+ SysTestConfig oneConfig = sysTestConfigService.getOneConfig();
List errDtlsCheckData = pqErrSysDtlsService.listByPqErrSysIdAndTypes(param);
ResultUnitEnum resultUnitEnumByCode = ResultUnitEnum.getResultUnitEnumByCode(sourceIssue.getType());
switch (resultUnitEnumByCode) {
@@ -111,40 +112,40 @@ public class DetectionServiceImpl {
* 频率
*/
case FREQ:
- return isQualified(dev, devIdMapComm, errDtlsCheckData, F, sourceIssue, dataRule, code);
+ return isQualified(dev, devIdMapComm, errDtlsCheckData, F, sourceIssue, dataRule, code, oneConfig.getScale());
/**
* 电压
*/
case V_RELATIVE:
case V_ABSOLUTELY:
- return isQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, code);
+ return isQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, code, oneConfig.getScale());
/**
* 电流
*/
case I_RELATIVE:
case I_ABSOLUTELY:
- return isQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, code);
+ return isQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, code, oneConfig.getScale());
/**
* 谐波
*/
case HV:
case HI:
- SimAndDigHarmonicResult harmV = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, HARMONIC_FLAG);
- SimAndDigHarmonicResult harmI = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, HARMONIC_FLAG);
+ SimAndDigHarmonicResult harmV = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, HARMONIC_FLAG, oneConfig.getScale());
+ SimAndDigHarmonicResult harmI = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, HARMONIC_FLAG, oneConfig.getScale());
return resultFlag(harmV, harmI, code);
/**
* 间谐波
*/
case HSV:
case HSI:
- SimAndDigHarmonicResult harmInV = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, INHARMONIC_FLAG);
- SimAndDigHarmonicResult harmInI = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, INHARMONIC_FLAG);
+ SimAndDigHarmonicResult harmInV = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, INHARMONIC_FLAG, oneConfig.getScale());
+ SimAndDigHarmonicResult harmInI = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, INHARMONIC_FLAG, oneConfig.getScale());
return resultFlag(harmInV, harmInI, code);
/**
* 三相电压不平衡度
*/
case IMBV:
- SimAndDigNonHarmonicResult vUnban = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, "V_UNBAN");
+ SimAndDigNonHarmonicResult vUnban = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, U, sourceIssue, dataRule, "V_UNBAN", oneConfig.getScale());
if (ObjectUtil.isNotNull(vUnban)) {
detectionDataDealService.acceptNonHarmonicResult(Arrays.asList(vUnban), code);
return vUnban.getResultFlag();
@@ -154,7 +155,7 @@ public class DetectionServiceImpl {
* 三相电流不平衡度
*/
case IMBA:
- SimAndDigNonHarmonicResult iUnban = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, "I_UNBAN");
+ SimAndDigNonHarmonicResult iUnban = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, I, sourceIssue, dataRule, "I_UNBAN", oneConfig.getScale());
if (ObjectUtil.isNotNull(iUnban)) {
detectionDataDealService.acceptNonHarmonicResult(Arrays.asList(iUnban), code);
return iUnban.getResultFlag();
@@ -164,7 +165,7 @@ public class DetectionServiceImpl {
* 谐波有功功率
*/
case HP:
- SimAndDigHarmonicResult harmP = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, HP, sourceIssue, dataRule, 2);
+ SimAndDigHarmonicResult harmP = isHarmQualified(dev, devIdMapComm, errDtlsCheckData, HP, sourceIssue, dataRule, 2, oneConfig.getScale());
if (ObjectUtil.isNotNull(harmP)) {
detectionDataDealService.acceptHarmonicResult(Arrays.asList(harmP), code);
return harmP.getResultFlag();
@@ -174,7 +175,7 @@ public class DetectionServiceImpl {
* 闪变
*/
case F:
- SimAndDigNonHarmonicResult pst = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, null, sourceIssue, dataRule, "PST");
+ SimAndDigNonHarmonicResult pst = isUnBalanceOrFlickerQualified(dev, devIdMapComm, errDtlsCheckData, null, sourceIssue, dataRule, "PST", oneConfig.getScale());
if (ObjectUtil.isNotNull(pst)) {
detectionDataDealService.acceptNonHarmonicResult(Arrays.asList(pst), code);
return pst.getResultFlag();
@@ -185,11 +186,11 @@ public class DetectionServiceImpl {
*/
case VOLTAGE_MAG:
case VOLTAGE_DUR:
- return isVoltageQualified(dev, devIdMapComm, errDtlsCheckData, sourceIssue, dataRule, code);
+ return isVoltageQualified(dev, devIdMapComm, errDtlsCheckData, sourceIssue, dataRule, code, oneConfig.getScale());
case P:
- return isQualified(dev, devIdMapComm, errDtlsCheckData, P, sourceIssue, dataRule, code);
+ return isQualified(dev, devIdMapComm, errDtlsCheckData, P, sourceIssue, dataRule, code, oneConfig.getScale());
default:
- return isUnknownQualified(dev, devIdMapComm, errDtlsCheckData, sourceIssue, dataRule, code);
+ return isUnknownQualified(dev, devIdMapComm, errDtlsCheckData, sourceIssue, dataRule, code, oneConfig.getScale());
}
}
@@ -213,7 +214,7 @@ public class DetectionServiceImpl {
List errDtlsCheckData,
SourceIssue sourceIssue,
DictDataEnum dataRule,
- String code) {
+ String code, Integer scale) {
List info = new ArrayList<>();
List harmonicResultList = new ArrayList<>();
List devValueTypeList = sourceIssue.getDevValueTypeList();
@@ -247,9 +248,9 @@ public class DetectionServiceImpl {
if (CollUtil.isNotEmpty(checkData)) {
DetectionData detectionData;
if (DUR.equals(devIndex)) {
- detectionData = rangeDURComparisonList(value, isQualified, new ArrayList<>(), sourceIssue.getFFreq(), checkData.get(0).getValue(), dataRule);
+ detectionData = rangeDURComparisonList(value, isQualified, new ArrayList<>(), sourceIssue.getFFreq(), checkData.get(0).getValue(), dataRule, scale);
} else {
- detectionData = rangeComparisonList(value, isQualified, new ArrayList<>(), null, checkData.get(0).getValue(), dataRule);
+ detectionData = rangeComparisonList(value, isQualified, new ArrayList<>(), null, checkData.get(0).getValue(), dataRule, scale);
}
if (key.equals(TYPE_T)) {
result.setTValue(JSON.toJSONString(detectionData));
@@ -322,9 +323,9 @@ public class DetectionServiceImpl {
isQualified = 4;
}
//电压下百分比给百分比直接算 电流是是下百分比给的是幅值要转换算
- List integerBooleanA = harmRangeComparison(isQualified, new ArrayList<>(), type, TYPE_A, sourceIssue, dataRule, devHarmMap.get(TYPE_A), fData, num);
- List integerBooleanB = harmRangeComparison(isQualified, new ArrayList<>(), type, TYPE_B, sourceIssue, dataRule, devHarmMap.get(TYPE_B), fData, num);
- List integerBooleanC = harmRangeComparison(isQualified, new ArrayList<>(), type, TYPE_C, sourceIssue, dataRule, devHarmMap.get(TYPE_C), fData, num);
+ List integerBooleanA = harmRangeComparison(isQualified, new ArrayList<>(), type, TYPE_A, sourceIssue, dataRule, devHarmMap.get(TYPE_A), fData, num, scale);
+ List integerBooleanB = harmRangeComparison(isQualified, new ArrayList<>(), type, TYPE_B, sourceIssue, dataRule, devHarmMap.get(TYPE_B), fData, num, scale);
+ List integerBooleanC = harmRangeComparison(isQualified, new ArrayList<>(), type, TYPE_C, sourceIssue, dataRule, devHarmMap.get(TYPE_C), fData, num, scale);
harmonicResult.setDataType(sourceIssue.getDataType());
reflectHarmonic("a", integerBooleanA, harmonicResult, num);
reflectHarmonic("b", integerBooleanB, harmonicResult, num);
@@ -367,7 +368,7 @@ public class DetectionServiceImpl {
String type,
SourceIssue sourceIssue,
DictDataEnum dataRule,
- String code) {
+ String code, Integer scale) {
List info = new ArrayList<>();
List devValueTypeList = sourceIssue.getDevValueTypeList();
for (String s : devValueTypeList) {
@@ -407,7 +408,7 @@ public class DetectionServiceImpl {
if (map.containsKey(TYPE_T)) {
List checkDataT = dtlsCheckData.stream().filter(x -> TYPE_T.equals(x.getPhase())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(checkDataT)) {
- DetectionData t = rangeComparisonList(map.get(TYPE_T), isQualified, pqErrSysDtls, fData, checkDataT.get(0).getValue(), dataRule);
+ DetectionData t = rangeComparisonList(map.get(TYPE_T), isQualified, pqErrSysDtls, fData, checkDataT.get(0).getValue(), dataRule, scale);
result.setTValue(JSON.toJSONString(t));
result.setResultFlag(t.getIsData());
}
@@ -426,7 +427,7 @@ public class DetectionServiceImpl {
if (CollUtil.isNotEmpty(checkData)) {
List phaseValue = map.get(phase);
// 注意:如果map中不存在该phase的键,phaseValue可能为null,需确保map包含该键
- DetectionData detectionData = rangeComparisonList(phaseValue, isQualified, pqErrSysDtls, fData, checkData.get(0).getValue(), dataRule);
+ DetectionData detectionData = rangeComparisonList(phaseValue, isQualified, pqErrSysDtls, fData, checkData.get(0).getValue(), dataRule, scale);
resultFlag.add(detectionData);
BiConsumer setter = setters.get(phase);
if (setter != null) {
@@ -467,7 +468,7 @@ public class DetectionServiceImpl {
String type,
SourceIssue sourceIssue,
DictDataEnum dataRule,
- Integer num) {
+ Integer num, Integer scale) {
Double fData = 1.0;
String fundCode = "";
String harmCode = "";
@@ -516,9 +517,9 @@ public class DetectionServiceImpl {
pqErrSysDtls = adDtlsCheckData.get(0).getErrSysDtls();
}
}
- List integerBooleanA = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_A, sourceIssue, dataRule, devMap.get(TYPE_A), fData, num);
- List integerBooleanB = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_B, sourceIssue, dataRule, devMap.get(TYPE_B), fData, num);
- List integerBooleanC = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_C, sourceIssue, dataRule, devMap.get(TYPE_C), fData, num);
+ List integerBooleanA = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_A, sourceIssue, dataRule, devMap.get(TYPE_A), fData, num, scale);
+ List integerBooleanB = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_B, sourceIssue, dataRule, devMap.get(TYPE_B), fData, num, scale);
+ List integerBooleanC = harmRangeComparison(isQualified, pqErrSysDtls, type, TYPE_C, sourceIssue, dataRule, devMap.get(TYPE_C), fData, num, scale);
harmonicResult.setDataType(sourceIssue.getDataType());
reflectHarmonic("a", integerBooleanA, harmonicResult, num);
reflectHarmonic("b", integerBooleanB, harmonicResult, num);
@@ -549,7 +550,7 @@ public class DetectionServiceImpl {
String type,
SourceIssue sourceIssue,
DictDataEnum dataRule,
- String code) {
+ String code, Integer scale) {
List checkData = pqScriptCheckDataService.list(new MPJLambdaWrapper()
.eq(PqScriptCheckData::getScriptIndex, sourceIssue.getIndex())
.eq(PqScriptCheckData::getScriptId, sourceIssue.getScriptId())
@@ -584,19 +585,19 @@ public class DetectionServiceImpl {
List channelTypeAList = checkData.stream()
.filter(x -> TYPE_A.equals(x.getPhase()))
.collect(Collectors.toList());
- DetectionData a = rangeComparisonList(map.get(TYPE_A), isQualified, pqErrSysDtls, fData, channelTypeAList.get(0).getValue(), dataRule);
+ DetectionData a = rangeComparisonList(map.get(TYPE_A), isQualified, pqErrSysDtls, fData, channelTypeAList.get(0).getValue(), dataRule, scale);
result.setAValue(JSON.toJSONString(a));
List channelTypeBList = checkData.stream()
.filter(x -> TYPE_B.equals(x.getPhase()))
.collect(Collectors.toList());
- DetectionData b = rangeComparisonList(map.get(TYPE_B), isQualified, pqErrSysDtls, fData, channelTypeBList.get(0).getValue(), dataRule);
+ DetectionData b = rangeComparisonList(map.get(TYPE_B), isQualified, pqErrSysDtls, fData, channelTypeBList.get(0).getValue(), dataRule, scale);
result.setBValue(JSON.toJSONString(b));
List channelTypeCList = checkData.stream()
.filter(x -> TYPE_C.equals(x.getPhase()))
.collect(Collectors.toList());
- DetectionData c = rangeComparisonList(map.get(TYPE_C), isQualified, pqErrSysDtls, fData, channelTypeCList.get(0).getValue(), dataRule);
+ DetectionData c = rangeComparisonList(map.get(TYPE_C), isQualified, pqErrSysDtls, fData, channelTypeCList.get(0).getValue(), dataRule, scale);
result.setCValue(JSON.toJSONString(c));
result.setResultFlag(setResultFlag(Arrays.asList(a, b, c)));
@@ -604,7 +605,7 @@ public class DetectionServiceImpl {
List channelTypeBList = checkData.stream()
.filter(x -> TYPE_T.equals(x.getPhase()))
.collect(Collectors.toList());
- DetectionData t = rangeComparisonList(map.get(TYPE_B), isQualified, pqErrSysDtls, fData, channelTypeBList.get(0).getValue(), dataRule);
+ DetectionData t = rangeComparisonList(map.get(TYPE_B), isQualified, pqErrSysDtls, fData, channelTypeBList.get(0).getValue(), dataRule, scale);
result.setTValue(JSON.toJSONString(t));
result.setResultFlag(setResultFlag(Arrays.asList(t)));
}
@@ -637,7 +638,8 @@ public class DetectionServiceImpl {
List errDtlsCheckData,
SourceIssue sourceIssue,
DictDataEnum dataRule,
- String code
+ String code,
+ Integer scale
) {
//电压幅值处理数据
Map> mag = devListMap(dev, dataRule, MAG);
@@ -647,8 +649,8 @@ public class DetectionServiceImpl {
//暂态电压下多少就是多少
List magErrList = errDtlsCheckData.stream().filter(x -> MAG.equals(x.getValueTypeCode())).collect(Collectors.toList());
List durErrList = errDtlsCheckData.stream().filter(x -> DUR.equals(x.getValueTypeCode())).collect(Collectors.toList());
- SimAndDigNonHarmonicResult magResult = voltageResult(dev.get(0).getId(), devIdMapComm, sourceIssue, dataRule, mag, magErrList, sourceIssue.getFUn(), MAG);
- SimAndDigNonHarmonicResult durResult = voltageResult(dev.get(0).getId(), devIdMapComm, sourceIssue, dataRule, dur, durErrList, sourceIssue.getFFreq(), DUR);
+ SimAndDigNonHarmonicResult magResult = voltageResult(dev.get(0).getId(), devIdMapComm, sourceIssue, dataRule, mag, magErrList, sourceIssue.getFUn(), MAG, scale);
+ SimAndDigNonHarmonicResult durResult = voltageResult(dev.get(0).getId(), devIdMapComm, sourceIssue, dataRule, dur, durErrList, sourceIssue.getFFreq(), DUR, scale);
if (CollUtil.isNotEmpty(mag.get(TYPE_B)) && CollUtil.isNotEmpty(mag.get(TYPE_C))) {
conclusion(magResult, durResult);
}
@@ -741,7 +743,8 @@ public class DetectionServiceImpl {
Map> mag,
List errDtlsCheckData,
Double fData,
- String dur
+ String dur,
+ Integer scale
) {
SimAndDigNonHarmonicResult result = new SimAndDigNonHarmonicResult();
String[] split = devId.split("_");
@@ -763,13 +766,13 @@ public class DetectionServiceImpl {
.filter(x -> ("Ub").equals(x.getChannelType()))
.collect(Collectors.toList());
- DetectionData b = setDetectionData(isQualified, dataRule, mag, fData, dur, magErrList, channelTypeBList, TYPE_B);
+ DetectionData b = setDetectionData(isQualified, dataRule, mag, fData, dur, magErrList, channelTypeBList, TYPE_B, scale);
result.setBValue(JSON.toJSONString(b));
List channelTypeCList = sourceIssue.getChannelList().stream()
.filter(x -> ("Uc").equals(x.getChannelType()))
.collect(Collectors.toList());
- DetectionData c = setDetectionData(isQualified, dataRule, mag, fData, dur, magErrList, channelTypeCList, TYPE_C);
+ DetectionData c = setDetectionData(isQualified, dataRule, mag, fData, dur, magErrList, channelTypeCList, TYPE_C, scale);
result.setCValue(JSON.toJSONString(c));
if (CollUtil.isNotEmpty(mag.get(TYPE_B)) && CollUtil.isNotEmpty(mag.get(TYPE_C))) {
@@ -777,7 +780,7 @@ public class DetectionServiceImpl {
List channelTypeAList = sourceIssue.getChannelList().stream()
.filter(x -> ("Ua").equals(x.getChannelType()))
.collect(Collectors.toList());
- DetectionData a = setDetectionData(isQualified, dataRule, mag, fData, dur, magErrList, channelTypeAList, TYPE_A);
+ DetectionData a = setDetectionData(isQualified, dataRule, mag, fData, dur, magErrList, channelTypeAList, TYPE_A, scale);
result.setAValue(JSON.toJSONString(a));
result.setResultFlag(setResultFlag(Arrays.asList(a, b, c)));
} else {
@@ -789,7 +792,7 @@ public class DetectionServiceImpl {
.orElse(Double.NaN)
))
.collect(Collectors.toList());
- DetectionData a = setDetectionData(isQualified, dataRule, mag, fData, dur, magErrList, channelTypeAList, TYPE_A);
+ DetectionData a = setDetectionData(isQualified, dataRule, mag, fData, dur, magErrList, channelTypeAList, TYPE_A, scale);
result.setAValue(JSON.toJSONString(a));
result.setTValue(JSON.toJSONString(a));
result.setResultFlag(a.getIsData());
@@ -804,12 +807,12 @@ public class DetectionServiceImpl {
String dur,
List magErrList,
List channelTypeCList,
- String type) {
+ String type, Integer scale) {
DetectionData data;
if (DUR.equals(dur)) {
- data = rangeDURComparisonList(mag.get(type), isQualified, magErrList, fData, channelTypeCList.get(0).getDipData().getRetainTime(), dataRule);
+ data = rangeDURComparisonList(mag.get(type), isQualified, magErrList, fData, channelTypeCList.get(0).getDipData().getRetainTime(), dataRule, scale);
} else {
- data = rangeComparisonList(mag.get(type), isQualified, magErrList, fData, channelTypeCList.get(0).getDipData().getFTransValue(), dataRule);
+ data = rangeComparisonList(mag.get(type), isQualified, magErrList, fData, channelTypeCList.get(0).getDipData().getFTransValue(), dataRule, scale);
}
return data;
}
@@ -910,7 +913,7 @@ public class DetectionServiceImpl {
try {
// 设置 id 字段;
Field idField = SimAndDigHarmonicResult.class.getDeclaredField(phase + "Value" + (num == 1 ? (int) (key + 0.5) : key.intValue()));
- if(harmonicResult instanceof ContrastNonHarmonicResult){
+ if (harmonicResult instanceof ContrastNonHarmonicResult) {
idField = ContrastNonHarmonicResult.class.getDeclaredField(phase + "Value" + (num == 1 ? (int) (key + 0.5) : key.intValue()));
}
idField.setAccessible(true);
@@ -937,6 +940,7 @@ public class DetectionServiceImpl {
* @param devMap
* @param fData 额定值
* @param harmonicFlag 1:间谐波,2:谐波
+ * @param scale 小数点位数
* @return
*/
public List harmRangeComparison(Integer isQualified,
@@ -946,7 +950,7 @@ public class DetectionServiceImpl {
SourceIssue sourceIssue,
DictDataEnum dataRule,
Map> devMap,
- Double fData, Integer harmonicFlag) {
+ Double fData, Integer harmonicFlag, Integer scale) {
List info = new ArrayList<>();
//根据谐波几次相值/额定值
Map issueHarmMap;
@@ -981,9 +985,9 @@ public class DetectionServiceImpl {
Map errSysDtlMap = new LinkedHashMap<>();
issueHarmMap.forEach((key, value) -> {
//获得误差体系
- List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), fData, value, x.getConditionType()),
+ List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), fData, value, x.getConditionType(), scale),
x.getStartFlag(),
- startRadiusEnd(x.getEndValue(), fData, value, x.getConditionType()),
+ startRadiusEnd(x.getEndValue(), fData, value, x.getConditionType(), scale),
x.getEndFlag(),
value)).collect(Collectors.toList());
if (CollUtil.isNotEmpty(errSysDtls)) {
@@ -998,20 +1002,20 @@ public class DetectionServiceImpl {
DetectionData data = new DetectionData();
data.setIsData(isQualified);
data.setNum(harm);
- SysTestConfig oneConfig = sysTestConfigService.getOneConfig();
+
if (CollUtil.isNotEmpty(harmDataList)) {
BigDecimal bd = BigDecimal.valueOf(harmDataList.get(0));
- bd = bd.setScale(oneConfig.getScale(), RoundingMode.HALF_UP);
+ bd = bd.setScale(scale, RoundingMode.HALF_UP);
data.setData(bd.doubleValue());
}
Double channelData = issueHarmMap.get(harm);
data.setResultData(channelData);
if (ObjectUtil.isNotNull(errSysDtl)) {
PqErrSysDtls errSys = BeanUtil.copyProperties(errSysDtl, PqErrSysDtls.class);
- errSys.setMaxErrorValue(maxErrorMultiply(errSys, fData, issueHarmMap.get(harm), oneConfig.getScale()));
+ errSys.setMaxErrorValue(maxErrorMultiply(errSys, fData, issueHarmMap.get(harm), scale));
data.setUnit(errSysDtl.getErrorUnit());
data.setRadius(-errSys.getMaxErrorValue() + "~" + errSys.getMaxErrorValue());
- setDetection(dataRule, harmDataList, errSys, data, channelData, fData, oneConfig.getScale());
+ setDetection(dataRule, harmDataList, errSys, data, channelData, fData, scale);
}
info.add(data);
});
@@ -1019,11 +1023,10 @@ public class DetectionServiceImpl {
return info;
}
- private void isData(DictDataEnum dataRule, List harmDataList, DetectionData data, List qualifiedList) {
+ private void isData(DictDataEnum dataRule, List harmDataList, DetectionData data, List qualifiedList, Integer scale) {
if (CollUtil.isNotEmpty(qualifiedList)) {
- SysTestConfig oneConfig = sysTestConfigService.getOneConfig();
BigDecimal bd = BigDecimal.valueOf(qualifiedList.get(0));
- bd = bd.setScale(oneConfig.getScale(), RoundingMode.HALF_UP);
+ bd = bd.setScale(scale, RoundingMode.HALF_UP);
data.setData(bd.doubleValue());
switch (dataRule) {
case AT_WILL_VALUE:
@@ -1042,7 +1045,7 @@ public class DetectionServiceImpl {
} else {
List subtract = CollectionUtils.subtract(harmDataList, qualifiedList).stream().collect(Collectors.toList());
bd = BigDecimal.valueOf(subtract.get(0));
- bd = bd.setScale(oneConfig.getScale(), RoundingMode.HALF_UP);
+ bd = bd.setScale(scale, RoundingMode.HALF_UP);
data.setData(bd.doubleValue());
data.setIsData(2);
}
@@ -1154,48 +1157,46 @@ public class DetectionServiceImpl {
* @param dataRule 数据处理原则
* @returnd
*/
- public DetectionData rangeComparisonList(List list, Integer isQualified, List pqErrSysDtls, Double data, Double channelData, DictDataEnum dataRule) {
+ public DetectionData rangeComparisonList(List list, Integer isQualified, List pqErrSysDtls, Double data, Double channelData, DictDataEnum dataRule, Integer scale) {
DetectionData detectionData = new DetectionData();
detectionData.setIsData(isQualified);
if (CollUtil.isNotEmpty(list)) {
- SysTestConfig oneConfig = sysTestConfigService.getOneConfig();
BigDecimal bd = BigDecimal.valueOf(list.get(0));
- bd = bd.setScale(oneConfig.getScale(), RoundingMode.HALF_UP);
+ bd = bd.setScale(scale, RoundingMode.HALF_UP);
detectionData.setData(bd.doubleValue());
detectionData.setResultData(channelData);
//先根据源所下发的数据,是否在误差体系范围内在则可以进行误差体系判断
//获得误差体系
- List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), data, channelData, x.getConditionType()),
+ List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), data, channelData, x.getConditionType(), scale),
x.getStartFlag(),
- startRadiusEnd(x.getEndValue(), data, channelData, x.getConditionType()),
+ startRadiusEnd(x.getEndValue(), data, channelData, x.getConditionType(), scale),
x.getEndFlag(),
channelData)).collect(Collectors.toList());
if (CollUtil.isNotEmpty(errSysDtls)) {
PqErrSysDtls errSysDtl = BeanUtil.copyProperties(errSysDtls.get(0), PqErrSysDtls.class);
detectionData.setUnit(errSysDtl.getErrorUnit());
- errSysDtl.setMaxErrorValue(maxErrorMultiply(errSysDtl, data, channelData, oneConfig.getScale()));
+ errSysDtl.setMaxErrorValue(maxErrorMultiply(errSysDtl, data, channelData, scale));
detectionData.setRadius(-errSysDtl.getMaxErrorValue() + "~" + errSysDtl.getMaxErrorValue());
- setDetection(dataRule, list, errSysDtl, detectionData, channelData, data, oneConfig.getScale());
+ setDetection(dataRule, list, errSysDtl, detectionData, channelData, data, scale);
}
}
return detectionData;
}
- public DetectionData rangeDURComparisonList(List list, Integer isQualified, List pqErrSysDtls, Double data, Double channelData, DictDataEnum dataRule) {
+ public DetectionData rangeDURComparisonList(List list, Integer isQualified, List pqErrSysDtls, Double data, Double channelData, DictDataEnum dataRule, Integer scale) {
DetectionData detectionData = new DetectionData();
detectionData.setIsData(isQualified);
if (CollUtil.isNotEmpty(list)) {
- SysTestConfig oneConfig = sysTestConfigService.getOneConfig();
BigDecimal bd = BigDecimal.valueOf(list.get(0));
- bd = bd.setScale(oneConfig.getScale(), RoundingMode.HALF_UP);
+ bd = bd.setScale(scale, RoundingMode.HALF_UP);
detectionData.setData(bd.doubleValue());
detectionData.setResultData(BigDecimal.valueOf(1.0 / data).doubleValue() * channelData);
//先根据源所下发的数据,是否在误差体系范围内在则可以进行误差体系判断
//获得误差体系
- List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), data, channelData, x.getConditionType()),
+ List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), data, channelData, x.getConditionType(), scale),
x.getStartFlag(),
- startRadiusEnd(x.getEndValue(), data, channelData, x.getConditionType()),
+ startRadiusEnd(x.getEndValue(), data, channelData, x.getConditionType(), scale),
x.getEndFlag(),
channelData)).collect(Collectors.toList());
if (CollUtil.isNotEmpty(errSysDtls)) {
@@ -1213,14 +1214,14 @@ public class DetectionServiceImpl {
).collect(Collectors.toList());
if (CollUtil.isNotEmpty(qualifiedList)) {
BigDecimal subtract = BigDecimal.valueOf(qualifiedList.get(0))
- .subtract(BigDecimal.valueOf(1.0 / data * (channelData))).setScale(oneConfig.getScale(), RoundingMode.HALF_UP);
+ .subtract(BigDecimal.valueOf(1.0 / data * (channelData))).setScale(scale, RoundingMode.HALF_UP);
detectionData.setErrorData(subtract);
} else {
BigDecimal subtract = BigDecimal.valueOf(list.get(0))
- .subtract(BigDecimal.valueOf(1.0 / data * (channelData))).setScale(oneConfig.getScale(), RoundingMode.HALF_UP);
+ .subtract(BigDecimal.valueOf(1.0 / data * (channelData))).setScale(scale, RoundingMode.HALF_UP);
detectionData.setErrorData(subtract);
}
- isData(dataRule, list, detectionData, qualifiedList);
+ isData(dataRule, list, detectionData, qualifiedList, scale);
}
}
return detectionData;
@@ -1306,16 +1307,15 @@ public class DetectionServiceImpl {
* @param type 误差值类型
* @return
*/
- public Double startRadiusEnd(Double value, Double ratedData, Double harmData, Integer type) {
- SysTestConfig oneConfig = sysTestConfigService.getOneConfig();
+ public Double startRadiusEnd(Double value, Double ratedData, Double harmData, Integer type, Integer scale) {
if (ObjectUtil.isNotNull(value)) {
switch (type) {
case 0:
return BigDecimal.valueOf(value).multiply(BigDecimal.valueOf(ratedData))
- .setScale(oneConfig.getScale(), RoundingMode.HALF_UP).doubleValue();
- case 1: //无用
+ .setScale(scale, RoundingMode.HALF_UP).doubleValue();
+ case 1:
return BigDecimal.valueOf(value).multiply(BigDecimal.valueOf(harmData))
- .setScale(oneConfig.getScale(), RoundingMode.HALF_UP).doubleValue();
+ .setScale(scale, RoundingMode.HALF_UP).doubleValue();
default:
return value;
}
@@ -1406,7 +1406,7 @@ public class DetectionServiceImpl {
}
}
} else {
- Map> integerListMap = new LinkedHashMap<>(5);
+ Map> integerListMap = new LinkedHashMap<>(50);
for (Double i : harmNum) {
List integerList = new ArrayList<>();
if (i.equals(1.0) && num != 1) {
@@ -1443,20 +1443,22 @@ public class DetectionServiceImpl {
*
* @param devDataList 被检设备数据
* @param standardDevDataList 与之对齐的标准设备数据
- * @param pars 配对关系
+ * @param pars 配对关系 key为被检设备ip_通道号,value为标准设备ip_通道号
* @param devIdMapComm 设备id映射关系 key为被检设备ip,value为被检设备id
* @param monitorMap 监测器映射关系 key为被检设备ip_通道号,value为监测器信息
+ * @param testItemCodeList 检测项code列表
+ * @param errorSysId 误差体系id
* @param dataRule 数据处理原则
* @param num 第几次检测
* @param code 结果表code
- * @return key为被检设备id、value为是否合格(1合格 2不合格 4无法处理)
+ * @return key为被检设备ip_通道号、value为是否合格(1合格 2不合格 4无法处理)
*/
- public Map processing(List devDataList, List standardDevDataList, Map pars, Map devIdMapComm, Map monitorMap, List testItemCodeList, List dtlsCheckData, String errorSysId, DictDataEnum dataRule, Integer num, String code) {
+ public Map processing(List devDataList, List standardDevDataList, Map pars, Map devIdMapComm, Map monitorMap, List testItemCodeList, String errorSysId, DictDataEnum dataRule, Integer num, String code) {
Map> devDataMap = devDataList.stream().collect(Collectors.groupingBy(DevData::getId));
Map> standardDevDataMap = standardDevDataList.stream().collect(Collectors.groupingBy(DevData::getId));
Map resultMap = new LinkedHashMap<>();
- pars.forEach((standardDevMoniterId, devMoniterId) -> {
+ pars.forEach((devMoniterId, standardDevMoniterId) -> {
resultMap.put(devMoniterId, dataProcessing(devDataMap.get(devMoniterId), standardDevDataMap.get(standardDevMoniterId), devIdMapComm, testItemCodeList, monitorMap.get(devMoniterId), errorSysId, dataRule, num, code));
});
@@ -1466,8 +1468,12 @@ public class DetectionServiceImpl {
private Integer dataProcessing(List devDataList, List standardDevDataList, Map devIdMapComm, List testItemCodeList, PreDetection.MonitorListDTO monitorDto, String errorSysId, DictDataEnum dataRule, Integer num, String code) {
if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList)) {
for (String testItemCode : testItemCodeList) {
+ if ("real$U1".equals(testItemCode) || "real$I1".equals(testItemCode)) {
+ continue;
+ }
String[] split = testItemCode.split("\\$");
+ SysTestConfig oneConfig = sysTestConfigService.getOneConfig();
List pqErrSysDtls = pqErrSysDtlsService.listPqErrSysDtlsByPqErrSysIdAndScriptType(errorSysId, split[1]);
DetectionCodeEnum anEnum = DetectionCodeEnum.getDetectionCodeByCode(split[1]);
Double fUn = Double.valueOf(monitorDto.getPtStr().split(":")[1]);
@@ -1475,27 +1481,27 @@ public class DetectionServiceImpl {
Double fHz = 50.0;
switch (anEnum) {
case FREQ:
- return isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fHz, DetectionCodeEnum.FREQ.getCode(), dataRule, num, code);
+ return isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fHz, DetectionCodeEnum.FREQ.getCode(), dataRule, num, code, oneConfig.getScale());
case VRMS:
- return isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fUn, DetectionCodeEnum.VRMS.getCode(), dataRule, num, code);
+ return isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fUn, DetectionCodeEnum.VRMS.getCode(), dataRule, num, code, oneConfig.getScale());
case IRMS:
- return isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fIn, DetectionCodeEnum.IRMS.getCode(), dataRule, num, code);
+ return isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fIn, DetectionCodeEnum.IRMS.getCode(), dataRule, num, code, oneConfig.getScale());
case V_UNBAN:
- return isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fUn, DetectionCodeEnum.V_UNBAN.getCode(), dataRule, num, code);
+ break;
case I_UNBAN:
- return isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fIn, DetectionCodeEnum.I_UNBAN.getCode(), dataRule, num, code);
- //case U1:
+ break;
case V2_50:
- ContrastHarmonicResult harmV = isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fUn, fIn, DetectionCodeEnum.V2_50.getCode(), dataRule, num, HARMONIC_FLAG);
+ ContrastHarmonicResult harmV = isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fUn, fIn, U, dataRule, num, HARMONIC_FLAG, oneConfig.getScale());
return resultFlag(harmV, null, code);
- //case I1:
case I2_50:
- ContrastHarmonicResult harmI = isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fUn, fIn, DetectionCodeEnum.V2_50.getCode(), dataRule, num, HARMONIC_FLAG);
+ ContrastHarmonicResult harmI = isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fUn, fIn, I, dataRule, num, HARMONIC_FLAG, oneConfig.getScale());
return resultFlag(null, harmI, code);
- case MAG:
- break;
- case DUR:
- break;
+ case SV_1_49:
+ ContrastHarmonicResult harmSV = isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fUn, fIn, U, dataRule, num, INHARMONIC_FLAG, oneConfig.getScale());
+ return resultFlag(harmSV, null, code);
+ case SI_1_49:
+ ContrastHarmonicResult harmSI = isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, fUn, fIn, I, dataRule, num, INHARMONIC_FLAG, oneConfig.getScale());
+ return resultFlag(null, harmSI, code);
case UNKNOWN_ERROR:
break;
}
@@ -1527,7 +1533,7 @@ public class DetectionServiceImpl {
String desc,
DictDataEnum dataRule,
Integer num,
- String code) {
+ String code, Integer scale) {
List info = new ArrayList<>();
if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList) && CollUtil.isNotEmpty(errSysDtls)) {
@@ -1543,7 +1549,7 @@ public class DetectionServiceImpl {
Integer isQualified = 4;
if (map.containsKey(TYPE_T)) {
- DetectionData t = rangeComparisonList(map.get(TYPE_T).get(0), isQualified, errSysDtls, fData, map.get(TYPE_T).get(1).get(0), dataRule);
+ DetectionData t = rangeComparisonList(map.get(TYPE_T).get(0), isQualified, errSysDtls, fData, map.get(TYPE_T).get(1).get(0), dataRule, scale);
result.setTValue(JSON.toJSONString(t));
result.setResultFlag(t.getIsData());
} else {
@@ -1556,7 +1562,7 @@ public class DetectionServiceImpl {
List phases = Arrays.asList(TYPE_A, TYPE_B, TYPE_C);
for (String phase : phases) {
List phaseValue = map.get(phase).get(0);
- DetectionData detectionData = rangeComparisonList(phaseValue, isQualified, errSysDtls, fData, map.get(phase).get(1).get(0), dataRule);
+ DetectionData detectionData = rangeComparisonList(phaseValue, isQualified, errSysDtls, fData, map.get(phase).get(1).get(0), dataRule, scale);
resultFlag.add(detectionData);
BiConsumer setter = setters.get(phase);
setter.accept(result, detectionData);
@@ -1600,7 +1606,7 @@ public class DetectionServiceImpl {
String type,
DictDataEnum dataRule,
Integer num,
- Integer harmonicFlag) {
+ Integer harmonicFlag, Integer scale) {
Double fData = 1.0;
String fundCode = "";
String harmCode = "";
@@ -1637,12 +1643,12 @@ public class DetectionServiceImpl {
harmonicResult.setAdType(errSysDtls.get(0).getScriptType());
harmonicResult.setNum(num);
harmonicResult.setDataType(DataSourceEnum.REAL_DATA.getValue());
- List pqErrSysDtls = new ArrayList<>();
+// List pqErrSysDtls = new ArrayList<>();
Integer isQualified = 4;
- List integerBooleanA = harmRangeComparison(isQualified, pqErrSysDtls, dataRule, devMap.get(TYPE_A).get(0), devMap.get(TYPE_A).get(1), fData);
- List integerBooleanB = harmRangeComparison(isQualified, pqErrSysDtls, dataRule, devMap.get(TYPE_B).get(0), devMap.get(TYPE_A).get(1), fData);
- List integerBooleanC = harmRangeComparison(isQualified, pqErrSysDtls, dataRule, devMap.get(TYPE_C).get(0), devMap.get(TYPE_A).get(1), fData);
+ List integerBooleanA = harmRangeComparison(isQualified, errSysDtls, dataRule, devMap.get(TYPE_A).get(0), devMap.get(TYPE_A).get(1), fData, scale);
+ List integerBooleanB = harmRangeComparison(isQualified, errSysDtls, dataRule, devMap.get(TYPE_B).get(0), devMap.get(TYPE_A).get(1), fData, scale);
+ List integerBooleanC = harmRangeComparison(isQualified, errSysDtls, dataRule, devMap.get(TYPE_C).get(0), devMap.get(TYPE_A).get(1), fData, scale);
harmonicResult.setDataType(DataSourceEnum.REAL_DATA.getValue());
reflectHarmonic("a", integerBooleanA, harmonicResult, harmonicFlag);
reflectHarmonic("b", integerBooleanB, harmonicResult, harmonicFlag);
@@ -1681,7 +1687,7 @@ public class DetectionServiceImpl {
List aDev = devList.stream().filter(x -> ObjectUtil.isNotNull(x.getA()))
.map(x -> x.getA().doubleValue())
.collect(Collectors.toList());
- List aIdxs = DetectionUtil.sort(aDev);
+ List aIdxs = DetectionUtil.sort(aDev, false);
List aStandardDev = standardDevList.stream().filter(x -> ObjectUtil.isNotNull(x.getA()))
.map(x -> x.getA().doubleValue())
.collect(Collectors.toList());
@@ -1689,7 +1695,7 @@ public class DetectionServiceImpl {
List bDev = devList.stream().filter(x -> ObjectUtil.isNotNull(x.getB()))
.map(x -> x.getB().doubleValue())
.collect(Collectors.toList());
- List bIdxs = DetectionUtil.sort(bDev);
+ List bIdxs = DetectionUtil.sort(bDev, false);
List bStandardDev = standardDevList.stream().filter(x -> ObjectUtil.isNotNull(x.getB()))
.map(x -> x.getB().doubleValue())
.collect(Collectors.toList());
@@ -1697,7 +1703,7 @@ public class DetectionServiceImpl {
List cDev = devList.stream().filter(x -> ObjectUtil.isNotNull(x.getC()))
.map(x -> x.getC().doubleValue())
.collect(Collectors.toList());
- List cIdxs = DetectionUtil.sort(cDev);
+ List cIdxs = DetectionUtil.sort(cDev, false);
List cStandardDev = standardDevList.stream().filter(x -> ObjectUtil.isNotNull(x.getC()))
.map(x -> x.getC().doubleValue())
.collect(Collectors.toList());
@@ -1705,7 +1711,7 @@ public class DetectionServiceImpl {
List tDev = devList.stream().filter(x -> ObjectUtil.isNotNull(x.getT()))
.map(x -> x.getT().doubleValue())
.collect(Collectors.toList());
- List tIdxs = DetectionUtil.sort(tDev);
+ List tIdxs = DetectionUtil.sort(tDev, false);
List tStandardDev = standardDevList.stream().filter(x -> ObjectUtil.isNotNull(x.getT()))
.map(x -> x.getT().doubleValue())
.collect(Collectors.toList());
@@ -1799,6 +1805,7 @@ public class DetectionServiceImpl {
DictDataEnum dataRule) {
Map>>> resultMap = new HashMap<>(3);
+ // key为相别、value{key为谐波次数,value为按数据处理原则处理后的数据}
Map>> devMap = new HashMap<>(3);
Map>> standardDevMap = new HashMap<>(3);
@@ -1849,9 +1856,8 @@ public class DetectionServiceImpl {
}
devMap.forEach((typeKey, typeValue) -> {
typeValue.forEach((key, value) -> {
- value.sort(Comparator.comparing(Double::doubleValue).reversed());
if (CollUtil.isNotEmpty(value)) {
- List idx = DetectionUtil.sort(value);
+ List idx = DetectionUtil.sort(value, false);
switch (dataRule) {
case SECTION_VALUE:
if (value.size() > 2) {
@@ -1863,16 +1869,15 @@ public class DetectionServiceImpl {
break;
case CP95_VALUE:
int cp95Idx = DetectionUtil.getCP95Idx(value);
- value = Collections.singletonList(value.get(cp95Idx));
+ value.clear();
+ value.addAll(Collections.singletonList(value.get(cp95Idx)));
Double standardCP95Data = standardDevMap.get(typeKey).get(key).get(cp95Idx);
standardDevMap.get(typeKey).get(key).clear();
standardDevMap.get(typeKey).get(key).add(standardCP95Data);
break;
case AVG_VALUE:
-// double average = value.stream().mapToDouble(Double::doubleValue).average().orElse(0.0);
-// value.clear(); // 清空列表
-// value.add(average); // 添加平均值
- value = DetectionUtil.getAvgDoubles(value);
+ value.clear();
+ value.addAll(DetectionUtil.getAvgDoubles(value));
List standardAvgData = DetectionUtil.getAvgDoubles(standardDevMap.get(typeKey).get(key));
standardDevMap.get(typeKey).get(key).clear();
standardDevMap.get(typeKey).get(key).addAll(standardAvgData);
@@ -1902,17 +1907,17 @@ public class DetectionServiceImpl {
DictDataEnum dataRule,
Map> devMap,
Map> standardDevMap,
- Double fData) {
+ Double fData, Integer scale) {
List info = new ArrayList<>();
- //根据谐波几次相值/额定值
+ //key为(间)谐波次数,value为标准设备数据
Map issueHarmMap = standardDevMap.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, x -> x.getValue().get(0)));
Map errSysDtlMap = new LinkedHashMap<>();
issueHarmMap.forEach((key, value) -> {
//获得误差体系
- List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), fData, value, x.getConditionType()),
+ List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), fData, value, x.getConditionType(), scale),
x.getStartFlag(),
- startRadiusEnd(x.getEndValue(), fData, value, x.getConditionType()),
+ startRadiusEnd(x.getEndValue(), fData, value, x.getConditionType(), scale),
x.getEndFlag(),
value)).collect(Collectors.toList());
if (CollUtil.isNotEmpty(errSysDtls)) {
@@ -1927,20 +1932,19 @@ public class DetectionServiceImpl {
DetectionData data = new DetectionData();
data.setIsData(isQualified);
data.setNum(harm);
- SysTestConfig oneConfig = sysTestConfigService.getOneConfig();
if (CollUtil.isNotEmpty(harmDataList)) {
BigDecimal bd = BigDecimal.valueOf(harmDataList.get(0));
- bd = bd.setScale(oneConfig.getScale(), RoundingMode.HALF_UP);
+ bd = bd.setScale(scale, RoundingMode.HALF_UP);
data.setData(bd.doubleValue());
}
Double channelData = issueHarmMap.get(harm);
data.setResultData(channelData);
if (ObjectUtil.isNotNull(errSysDtl)) {
PqErrSysDtls errSys = BeanUtil.copyProperties(errSysDtl, PqErrSysDtls.class);
- errSys.setMaxErrorValue(maxErrorMultiply(errSys, fData, issueHarmMap.get(harm), oneConfig.getScale()));
+ errSys.setMaxErrorValue(maxErrorMultiply(errSys, fData, issueHarmMap.get(harm), scale));
data.setUnit(errSysDtl.getErrorUnit());
data.setRadius(-errSys.getMaxErrorValue() + "~" + errSys.getMaxErrorValue());
- setDetection(dataRule, harmDataList, errSys, data, channelData, fData, oneConfig.getScale());
+ setDetection(dataRule, harmDataList, errSys, data, channelData, fData, scale);
}
info.add(data);
});
@@ -1960,14 +1964,13 @@ public class DetectionServiceImpl {
* @param dataRule
* @return
*/
- public DetectionData rangeComparisonList(List devData, List standardDevData, Integer isQualified, List pqErrSysDtls, Double fData, DictDataEnum dataRule) {
+ public DetectionData rangeComparisonList(List devData, List standardDevData, Integer isQualified, List pqErrSysDtls, Double fData, DictDataEnum dataRule, Integer scale) {
DetectionData detectionData = new DetectionData();
detectionData.setIsData(isQualified);
if (CollUtil.isNotEmpty(devData)) {
- SysTestConfig oneConfig = sysTestConfigService.getOneConfig();
BigDecimal bd = BigDecimal.valueOf(devData.get(0));
- bd = bd.setScale(oneConfig.getScale(), RoundingMode.HALF_UP);
+ bd = bd.setScale(scale, RoundingMode.HALF_UP);
detectionData.setData(bd.doubleValue());
detectionData.setResultData(standardDevData.get(0));
@@ -1976,9 +1979,9 @@ public class DetectionServiceImpl {
for (int i = 0; i < devData.size(); i++) {
int finalI = i;
- List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), fData, standardDevData.get(finalI), x.getConditionType()),
+ List errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(startRadiusEnd(x.getStartValue(), fData, standardDevData.get(finalI), x.getConditionType(), scale),
x.getStartFlag(),
- startRadiusEnd(x.getEndValue(), fData, standardDevData.get(finalI), x.getConditionType()),
+ startRadiusEnd(x.getEndValue(), fData, standardDevData.get(finalI), x.getConditionType(), scale),
x.getEndFlag(),
devData.get(finalI))).collect(Collectors.toList());
@@ -2061,7 +2064,7 @@ public class DetectionServiceImpl {
} else {
data.setErrorData(devSubtractChannelData(harmDataList.get(0), channelData, ratedValue, errSysDtl, scale));
}
- isData(dataRule, harmDataList, data, qualifiedList);
+ isData(dataRule, harmDataList, data, qualifiedList,scale);
}
}
}
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 9661371d..919cf63a 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
@@ -316,7 +316,7 @@ public class PreDetectionServiceImpl implements PreDetectionService {
checkDevIp(param.getDevIds());
socketContrastResponseService.init(param);
//用于处理异常导致的socket通道未关闭,socket交互异常
- DetectionCommunicateUtil.checkContrastCommunicateChannel(param.getLoginName());
+ //DetectionCommunicateUtil.checkContrastCommunicateChannel(param.getLoginName());
// 和通信模块进行连接
this.sendContrastSocket(param);
diff --git a/detection/src/main/java/com/njcn/gather/detection/util/DetectionUtil.java b/detection/src/main/java/com/njcn/gather/detection/util/DetectionUtil.java
index 1a6bdd41..03cd5165 100644
--- a/detection/src/main/java/com/njcn/gather/detection/util/DetectionUtil.java
+++ b/detection/src/main/java/com/njcn/gather/detection/util/DetectionUtil.java
@@ -195,18 +195,25 @@ public class DetectionUtil {
}
/**
- * 对list进行从大到小排序,并返回排序后的索引序列
+ * 对list进行排序,并返回排序后的索引序列
*
* @param list
+ * @param isAsc 是否升序
* @return
*/
- public static List sort(List list) {
+ public static List sort(List list, Boolean isAsc) {
List indexList = Stream.iterate(0, i -> i + 1).limit(list.size()).collect(Collectors.toList());
for (int i = 0; i < list.size(); i++) {
int maxIdx = i;
for (int j = i + 1; j < list.size(); j++) {
- if (list.get(j) > list.get(maxIdx)) {
- maxIdx = j;
+ if (isAsc) {
+ if (list.get(j) < list.get(maxIdx)) {
+ maxIdx = j;
+ }
+ } else {
+ if (list.get(j) > list.get(maxIdx)) {
+ maxIdx = j;
+ }
}
}
if (maxIdx != i) {
diff --git a/detection/src/main/java/com/njcn/gather/detection/util/business/DetectionCommunicateUtil.java b/detection/src/main/java/com/njcn/gather/detection/util/business/DetectionCommunicateUtil.java
index 8a415a96..5c24fcfa 100644
--- a/detection/src/main/java/com/njcn/gather/detection/util/business/DetectionCommunicateUtil.java
+++ b/detection/src/main/java/com/njcn/gather/detection/util/business/DetectionCommunicateUtil.java
@@ -62,18 +62,18 @@ public class DetectionCommunicateUtil {
*
* @param loginName
*/
- public static void checkContrastCommunicateChannel(String loginName) {
- Channel channel = SocketManager.getChannelByUserId(loginName + CnSocketUtil.CONTRAST_DEV_TAG);
-
- if (Objects.nonNull(channel) && channel.isActive()) {
- System.out.println("存在已有的Socket通道,强行关闭。。。。。。。。");
- CnSocketUtil.contrastSendquit(loginName);
- SocketManager.removeUser(loginName + CnSocketUtil.CONTRAST_DEV_TAG);
- try {
- Thread.sleep(4000);
- } catch (InterruptedException e) {
- log.error(e.getMessage());
- }
- }
- }
+// public static void checkContrastCommunicateChannel(String loginName) {
+// Channel channel = SocketManager.getChannelByUserId(loginName + CnSocketUtil.CONTRAST_DEV_TAG);
+//
+// if (Objects.nonNull(channel) && channel.isActive()) {
+// System.out.println("存在已有的Socket通道,强行关闭。。。。。。。。");
+// CnSocketUtil.contrastSendquit(loginName);
+// SocketManager.removeUser(loginName + CnSocketUtil.CONTRAST_DEV_TAG);
+// try {
+// Thread.sleep(4000);
+// } catch (InterruptedException e) {
+// log.error(e.getMessage());
+// }
+// }
+// }
}
diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/CnSocketUtil.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/CnSocketUtil.java
index 2dc913d9..52830f3a 100644
--- a/detection/src/main/java/com/njcn/gather/detection/util/socket/CnSocketUtil.java
+++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/CnSocketUtil.java
@@ -5,7 +5,6 @@ import com.alibaba.fastjson.JSONObject;
import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum;
import com.njcn.gather.detection.pojo.param.PreDetectionParam;
import com.njcn.gather.detection.pojo.vo.SocketMsg;
-import com.njcn.gather.detection.pojo.vo.WebSocketVO;
import com.njcn.gather.detection.util.socket.websocket.WebServiceManager;
/**
@@ -58,13 +57,14 @@ public class CnSocketUtil {
/**
* 比对式-退出检测
*/
- public static void contrastSendquit(String loginName) {
+ public static void contrastSendquit(String loginName,boolean isRemoveSocket) {
System.out.println("比对式-发送关闭备通讯模块指令。。。。。。。。");
SocketMsg socketMsg = new SocketMsg<>();
socketMsg.setRequestId(SourceOperateCodeEnum.QUITE.getValue());
socketMsg.setOperateCode(SourceOperateCodeEnum.QUIT_INIT_02.getValue());
SocketManager.sendMsg(loginName + CONTRAST_DEV_TAG, JSON.toJSONString(socketMsg));
- WebServiceManager.removePreDetectionParam(loginName);
- FormalTestManager.currentStep=SourceOperateCodeEnum.QUITE;
+// WebServiceManager.removePreDetectionParam();
+ FormalTestManager.isRemoveSocket = isRemoveSocket;
+ FormalTestManager.currentStep = SourceOperateCodeEnum.QUITE;
}
}
diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/FormalTestManager.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/FormalTestManager.java
index 729abcb0..7bc525ad 100644
--- a/detection/src/main/java/com/njcn/gather/detection/util/socket/FormalTestManager.java
+++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/FormalTestManager.java
@@ -62,7 +62,7 @@ public class FormalTestManager {
/**
* key:设备ip,value:装置id
*/
- public static Map devIdMapComm = HashBiMap.create();
+ public static HashBiMap devIdMapComm = HashBiMap.create();
/**
* 停止触发标识
@@ -105,7 +105,7 @@ public class FormalTestManager {
public static DictDataEnum dataRule;
/**
- * 所有参与比对式检测的被检设备、标准设备配对关系。key:被检设备id_通道号,value:标准设备id_通道号
+ * 所有参与比对式检测的被检设备、标准设备配对关系。key:被检设备ip_通道号,value:标准设备ip_通道号
*/
public static HashBiMap pairsMap = HashBiMap.create();
@@ -118,4 +118,9 @@ public class FormalTestManager {
* 标准设备的数据。key:设备ip_通道号,value:DevData数据集合
*/
public static Map> standardDevDataMap = new HashMap<>();
+
+ /**
+ * 是否要移除和通信模块的socket连接
+ */
+ public static Boolean isRemoveSocket = true;
}
diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/MsgUtil.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/MsgUtil.java
index bb473a54..287979f4 100644
--- a/detection/src/main/java/com/njcn/gather/detection/util/socket/MsgUtil.java
+++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/MsgUtil.java
@@ -71,7 +71,7 @@ public class MsgUtil {
*
* @param devMonitorId
* @param standardDevId
- * @param devMap
+ * @param devMap key为设备ip,value为设备名称
* @return
*/
public static String getPairStr(String devMonitorId, String standardDevId, Map devMap) {
@@ -80,7 +80,7 @@ public class MsgUtil {
} else {
String[] split1 = devMonitorId.split("_");
String[] split2 = standardDevId.split("_");
- return "被检设备" + devMap.get(split1[0]) + CnSocketUtil.SPLIT_TAG + split1[1] + "路" + " -> 标准设备" + devMap.get(split2[0]) + CnSocketUtil.SPLIT_TAG + split2[1] + "路";
+ return "被检设备\"" + devMap.get(split1[0]) + CnSocketUtil.SPLIT_TAG + split1[1] + "路\"" + " -> 标准设备\"" + devMap.get(split2[0]) + CnSocketUtil.SPLIT_TAG + split2[1] + "路\"";
}
}
}
diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/SocketManager.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/SocketManager.java
index 0a0dcb1d..8bd10557 100644
--- a/detection/src/main/java/com/njcn/gather/detection/util/socket/SocketManager.java
+++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/SocketManager.java
@@ -246,7 +246,7 @@ public class SocketManager {
* @param userId 用户ID
* @return boolean true:连接活跃, false:连接不存在或不活跃
*/
- private static boolean isChannelActive(String userId) {
+ public static boolean isChannelActive(String userId) {
Channel channel = getChannelByUserId(userId);
return ObjectUtil.isNotNull(channel) && channel.isActive();
}
diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyClient.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyClient.java
index 9954f6f1..b648b76e 100644
--- a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyClient.java
+++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyClient.java
@@ -126,6 +126,7 @@ public class NettyClient {
private void connectToContrast(String ip, Integer port, ContrastDetectionParam param, String msg) {
PreDetectionParam preDetectionParam = new PreDetectionParam();
preDetectionParam.setUserPageId(param.getLoginName());
+ preDetectionParam.setTestItemList(param.getTestItemList());
NettyContrastClientHandler handler = new NettyContrastClientHandler(preDetectionParam, socketContrastResponseService);
executeSocketConnection(ip, port, preDetectionParam, msg, handler);
}
@@ -468,8 +469,6 @@ public class NettyClient {
if (handler instanceof NettyDevClientHandler) {
// 被检设备异常时,发送程控源退出指令
CnSocketUtil.quitSendSource(param);
- } else if (handler instanceof NettyContrastClientHandler) {
- CnSocketUtil.contrastSendquit(param.getUserPageId());
}
// 程控源处理器异常时无需额外操作
}
diff --git a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyContrastClientHandler.java b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyContrastClientHandler.java
index 07d5c9e7..9f4788c2 100644
--- a/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyContrastClientHandler.java
+++ b/detection/src/main/java/com/njcn/gather/detection/util/socket/cilent/NettyContrastClientHandler.java
@@ -1,9 +1,16 @@
package com.njcn.gather.detection.util.socket.cilent;
+import com.alibaba.fastjson.JSON;
import com.njcn.gather.detection.handler.SocketContrastResponseService;
import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum;
+import com.njcn.gather.detection.pojo.enums.SourceResponseCodeEnum;
import com.njcn.gather.detection.pojo.param.PreDetectionParam;
+import com.njcn.gather.detection.pojo.vo.DevLineTestResult;
+import com.njcn.gather.detection.pojo.vo.SocketDataMsg;
+import com.njcn.gather.detection.pojo.vo.WebSocketVO;
import com.njcn.gather.detection.util.socket.CnSocketUtil;
+import com.njcn.gather.detection.util.socket.FormalTestManager;
+import com.njcn.gather.detection.util.socket.MsgUtil;
import com.njcn.gather.detection.util.socket.SocketManager;
import com.njcn.gather.detection.util.socket.websocket.WebServiceManager;
import com.njcn.gather.plan.pojo.enums.DataSourceEnum;
@@ -14,17 +21,21 @@ import io.netty.handler.timeout.IdleState;
import io.netty.handler.timeout.IdleStateEvent;
import io.netty.handler.timeout.TimeoutException;
import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
import java.io.IOException;
import java.net.ConnectException;
import java.net.ProtocolException;
import java.time.LocalDateTime;
+import java.util.List;
import java.util.Objects;
+import java.util.stream.Collectors;
/**
* @author caozehui
* @data 2025-07-25
*/
+@Slf4j
@RequiredArgsConstructor
public class NettyContrastClientHandler extends SimpleChannelInboundHandler {
@@ -48,12 +59,12 @@ public class NettyContrastClientHandler extends SimpleChannelInboundHandler>>>>>" + msg);
+ log.info("contrastdevhandler接收server端数据: {}", msg);
try {
socketContrastResponseService.deal(param, msg);
} catch (Exception e) {
- e.printStackTrace();
- CnSocketUtil.contrastSendquit(param.getUserPageId());
+ log.error("处理服务端消息异常", e);
+ CnSocketUtil.contrastSendquit(param.getUserPageId(), true);
}
}
@@ -77,12 +88,15 @@ public class NettyContrastClientHandler extends SimpleChannelInboundHandler= 60) {
- CnSocketUtil.contrastSendquit(param.getUserPageId());
- System.out.println("超时处理-----》" + "实时数据已超时----------------关闭");
- timeoutSend();
+ if (FormalTestManager.isRemoveSocket) {
+ //实时数据
+ if (SocketManager.contrastClockMap.get(DataSourceEnum.REAL_DATA) >= 60) {
+ CnSocketUtil.contrastSendquit(param.getUserPageId(), false);
+ System.out.println("超时处理-----》" + "实时数据已超时----------------关闭");
+ timeoutSend();
+ }
}
+
}
}
}
@@ -112,7 +126,7 @@ public class NettyContrastClientHandler extends SimpleChannelInboundHandler负责处理电能质量检测系统中的WebSocket连接和消息通信,主要功能包括:
*
* - WebSocket连接的建立、维护和断开
@@ -32,34 +33,33 @@ import static com.njcn.gather.detection.util.socket.websocket.WebSocketConstants
* - 检测状态和结果的实时推送
* - 异常处理和资源清理
*
- *
+ *
* 通信协议:
*
* 连接URL: ws://host:port/path?name=userId
* 心跳消息: "alive" -> "over"
* 业务消息: JSON格式的检测数据和状态信息
*
- *
+ *
* 安全策略:
*
* - 连接时必须提供有效的userId参数,否则拒绝连接
* - 支持心跳超时检测,超时3次自动断开连接
* - 连接断开时自动清理相关Socket资源
*
- *
+ *
* 使用场景:
* 主要用于前端实时接收检测进度、检测结果、设备状态等信息的推送,
* 配合detection模块的ResponseService类实现完整的实时通信链路。
- *
+ *
* @author wr
- * @date 2024/12/10 13:56
* @version 1.0
- * @since 检测系统 v2.3.12
- *
+ * @date 2024/12/10 13:56
* @see WebServiceManager 会话管理器
* @see WebSocketConstants 常量定义
* @see com.njcn.gather.detection.handler.SocketDevResponseService 设备响应处理
* @see com.njcn.gather.detection.handler.SocketSourceResponseService 源响应处理
+ * @since 检测系统 v2.3.12
*/
@@ -67,19 +67,19 @@ import static com.njcn.gather.detection.util.socket.websocket.WebSocketConstants
public class WebSocketHandler extends SimpleChannelInboundHandler {
// ================================ 字段定义 ================================
-
+
/**
* 心跳超时计数器
*/
private int times;
-
+
/**
* 当前WebSocket连接对应的用户ID
* 在首次HTTP握手时从URL参数中提取并存储
* 用于后续的Socket连接管理和资源清理
*/
private String userId;
-
+
/**
* 心跳响应内容常量
* 注意:不能预创建TextWebSocketFrame对象,因为ByteBuf状态会改变
@@ -120,7 +120,7 @@ public class WebSocketHandler extends SimpleChannelInboundHandlervalueOf("userId")).get();
-
- log.info("WebSocket协议升级完成,userId: {}, channelId: {}, requestUri: {}",
+
+ log.info("WebSocket协议升级完成,userId: {}, channelId: {}, requestUri: {}",
this.userId, ctx.channel().id(), handshakeComplete.requestUri());
-
+
// 握手完成后建立用户会话
if (this.userId != null) {
WebServiceManager.addUser(this.userId, ctx.channel());
log.info("WebSocket用户会话已建立,userId: {}, channelId: {}", this.userId, ctx.channel().id());
}
-
+
// 发送连接成功消息给前端
sendConnectionSuccessMessage(ctx);
return;
}
-
+
// 处理心跳超时事件
if (evt instanceof IdleStateEvent) {
IdleStateEvent event = (IdleStateEvent) evt;
@@ -184,7 +184,7 @@ public class WebSocketHandler extends SimpleChannelInboundHandler