代码调整

This commit is contained in:
2025-01-06 21:02:37 +08:00
parent a5e4baeb16
commit ed69e53d69
22 changed files with 1008 additions and 162 deletions

View File

@@ -74,6 +74,19 @@ public class PreDetectionController extends BaseController {
}
/**
* 系数校验
*/
@PostMapping("/coefficientCheck")
@OperateInfo
@ApiOperation("系数校验")
@ApiImplicitParam(name = "param", value = "查询参数", required = true)
public HttpResult<String> coefficientCheck(@RequestBody PreDetectionParam param){
String methodDescribe = getMethodDescribe("coefficientCheck");
preDetectionService.coefficientCheck(param);
return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe);
}
/**
@@ -113,7 +126,7 @@ public class PreDetectionController extends BaseController {
issueParam.setSourceId(param.getSourceId());
issueParam.setDevIds(param.getDevIds());
issueParam.setScriptId("a303b2224845fcc6f60198b8ca23dca9");
issueParam.setIsPhaseSequence(false);
//issueParam.setIsPhaseSequence(false);
SourceIssue sourceIssues = pqScriptDtlsService.listSourceIssue(issueParam).get(0);
List<PreDetection> pqDevList = iPqDevService.getDevInfo(param.getDevIds());

View File

@@ -5,15 +5,14 @@ import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.njcn.gather.detection.pojo.dto.DevXiNumData;
import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum;
import com.njcn.gather.detection.pojo.enums.SourceResponseCodeEnum;
import com.njcn.gather.detection.pojo.param.DevPhaseSequenceParam;
import com.njcn.gather.detection.pojo.param.PreDetectionParam;
import com.njcn.gather.detection.pojo.po.DevData;
import com.njcn.gather.detection.pojo.po.SourceCompareDev;
import com.njcn.gather.detection.pojo.vo.DevLineTestResult;
import com.njcn.gather.detection.pojo.vo.SocketDataMsg;
import com.njcn.gather.detection.pojo.vo.SocketMsg;
import com.njcn.gather.detection.pojo.vo.WebSocketVO;
import com.njcn.gather.detection.pojo.vo.*;
import com.njcn.gather.detection.service.impl.DetectionServiceImpl;
import com.njcn.gather.detection.util.socket.MsgUtil;
import com.njcn.gather.detection.util.socket.SocketManager;
@@ -21,7 +20,9 @@ import com.njcn.gather.detection.util.socket.web.WebSocketHandler;
import com.njcn.gather.device.device.pojo.vo.PreDetection;
import com.njcn.gather.device.device.service.IPqDevService;
import com.njcn.gather.device.script.pojo.param.PqScriptIssueParam;
import com.njcn.gather.device.script.pojo.po.PqScriptCheckData;
import com.njcn.gather.device.script.pojo.po.SourceIssue;
import com.njcn.gather.device.script.service.IPqScriptCheckDataService;
import com.njcn.gather.device.script.service.IPqScriptDtlsService;
import com.njcn.gather.storage.pojo.po.AdHarmonicResult;
import com.njcn.gather.storage.pojo.po.AdNonHarmonicResult;
@@ -32,10 +33,12 @@ import com.njcn.gather.system.reg.pojo.po.SysRegRes;
import com.njcn.gather.system.reg.pojo.vo.SysRegResVO;
import com.njcn.gather.system.reg.service.ISysRegResService;
import lombok.RequiredArgsConstructor;
import org.apache.poi.ss.formula.functions.T;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
@@ -58,11 +61,10 @@ public class SocketDevResponseService {
private final String handlerSourceStr = "_Source";
// ISO 8601格式
private final DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME;
private final Integer[] resCount = {0,20,5,1};
private final List<String> nonHarmonicList = Stream.of(DicDataEnum.FREQ.getCode(),DicDataEnum.V.getCode(),DicDataEnum.I.getCode(),DicDataEnum.IMBV.getCode(),DicDataEnum.IMBA.getCode()).collect(Collectors.toList());
private final List<String> harmonicList = Stream.of(DicDataEnum.HV.getCode(),DicDataEnum.HI.getCode(),DicDataEnum.HP.getCode(),DicDataEnum.HSV.getCode(),DicDataEnum.HSI.getCode()).collect(Collectors.toList());
private final List<String> nonHarmonicList = Stream.of(DicDataEnum.FREQ.getCode(), DicDataEnum.V.getCode(), DicDataEnum.I.getCode(), DicDataEnum.IMBV.getCode(), DicDataEnum.IMBA.getCode()).collect(Collectors.toList());
private final List<String> harmonicList = Stream.of(DicDataEnum.HV.getCode(), DicDataEnum.HI.getCode(), DicDataEnum.HP.getCode(), DicDataEnum.HSV.getCode(), DicDataEnum.HSI.getCode()).collect(Collectors.toList());
private final WebSocketHandler webSocketHandler;
private final IPqDevService iPqDevService;
@@ -71,6 +73,7 @@ public class SocketDevResponseService {
private final DetectionServiceImpl detectionServiceImpl;
private final DetectionDataDealService detectionDataDealService;
private final ISysRegResService iSysRegResService;
private final IPqScriptCheckDataService iPqScriptCheckDataService;
private final ExecutorService executorPool = Executors.newFixedThreadPool(5);
@@ -110,10 +113,13 @@ public class SocketDevResponseService {
List<String> successXieyi = new ArrayList<>();
List<String> successXieyi3 = new ArrayList<>();
// List<AdNonHarmonicResult> adNonHarmonicResultList = new ArrayList<>();
// List<AdNonHarmonicResult> adNonHarmonicResultList = new ArrayList<>();
public void deal(PreDetectionParam param, String msg) throws Exception{
//标识当前检测小项是否结束
private Integer dtlsFlag = null;
public void deal(PreDetectionParam param, String msg) throws Exception {
SocketDataMsg socketDataMsg = MsgUtil.socketDataMsg(msg);
String[] tem = socketDataMsg.getRequestId().split("&&");
@@ -135,6 +141,10 @@ public class SocketDevResponseService {
case FORMAL_REAL:
realDeal(param, socketDataMsg);
break;
//系数校验
case Coefficient_Check:
coefficient(param, socketDataMsg);
break;
//退出关闭
case QUITE:
quitDeal(socketDataMsg, param, msg);
@@ -145,6 +155,358 @@ public class SocketDevResponseService {
}
private void xiDi(List<DevData> devDataList, SourceIssue sourceIssue) {
}
//用于存储所有测点的试试数据
private final List<DevData> realDataXiList = new ArrayList<>();
/**
* 系数校验
*/
private void coefficient(PreDetectionParam param, SocketDataMsg socketDataMsg) {
SourceOperateCodeEnum sourceOperateCodeEnum = SourceOperateCodeEnum.getDictDataEnumByCode(socketDataMsg.getOperateCode());
SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode());
SocketMsg<String> xiSocket = new SocketMsg<>();
switch (sourceOperateCodeEnum) {
case DATA_CHNFACTOR$01:
//获取系数
break;
case DATA_CHNFACTOR$02:
//系数下发后的回调
switch (dictDataEnumByCode) {
case SUCCESS:
xiSocket.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue());
if (CollUtil.isNotEmpty(XiNumberManager.devXiList)) {
//单台装置系数下发后,需要删除集合中存在的当前装置
String devIp = XiNumberManager.devXiList.get(0);
XiNumberManager.devXiList.removeIf(it -> it.equals(devIp));
//继续下发每台装置系数,只到集合为空
if (CollUtil.isNotEmpty(XiNumberManager.devXiList)) {
xiSocket.setOperateCode(SourceOperateCodeEnum.DATA_CHNFACTOR$02.getValue());
xiSocket.setData(JSON.toJSONString(XiNumberManager.devXiNumDataMap.get(XiNumberManager.devXiList.get(0))));
SocketManager.sendMsg(param.getUserPageId() + handlerStr, JSON.toJSONString(xiSocket));
} else {
if (XiNumberManager.stepNumber == 0) {
//为空则认为所有装置都已经下发,开始进行小电压的申请,步骤进行+1
XiNumberManager.stepNumber = 1;
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.big_end.getValue(), XiNumberManager.devParameterList.get(0));
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.small_start.getValue(), XiNumberManager.devParameterList.get(1));
System.out.println("开始配置小电压电流参数下发给源----------------------");
xiSocket.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue());
xiSocket.setData(JSON.toJSONString(XiNumberManager.xiSourceIssueList.get(1)));
SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xiSocket));
} else if (XiNumberManager.stepNumber == 1) {
//小电流系数下发完毕;开始重新测试一次大电压
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.small_end.getValue(), XiNumberManager.devParameterList.get(0));
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.big_comp_start.getValue(), XiNumberManager.devParameterList.get(0));
xiSocket.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue());
xiSocket.setData(JSON.toJSONString(XiNumberManager.xiSourceIssueList.get(0)));
SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xiSocket));
XiNumberManager.stepNumber = 2;
}
realDataXiList.clear();
successComm.clear();
XiNumberManager.devXiList.clear();
}
} else {
System.out.println("应该不会出现的--------------------------------");
}
break;
case UNPROCESSED_BUSINESS:
break;
case NORMAL_RESPONSE:
break;
case DATA_RESOLVE:
//quitSend(param);
break;
default:
}
break;
case DEV_DATA_REQUEST_02:
//实时采集申请
String data = socketDataMsg.getData();
DevData devData = JSON.parseObject(data, DevData.class);
if (ObjectUtil.isNotNull(dictDataEnumByCode)) {
SocketMsg<String> socketMsg = new SocketMsg<>();
switch (dictDataEnumByCode) {
case SUCCESS:
realDataXiList.add(devData);
successComm.add(devData.getId());
System.out.println(successComm.size() + " ==" + monitorIdListComm.size() + "realDataXiList:" + realDataXiList.size() + "当前步骤" + XiNumberManager.stepNumber);
if (successComm.size() == monitorIdListComm.size()) {
System.out.println("从装置中已经完成获取原始数据,准备开始计算----------------------");
//获取数据流程结束,先把所有数据存到内存中
Map<String, List<DevData>> realDataXiMap = realDataXiList.stream().collect(Collectors.groupingBy(it -> it.getId().split("_")[0]));
realDataXiMap.forEach((devIp, dataList) -> {
XiNumberManager.devXiList.add(devIp);
Map<String, List<DevData>> monitorMap = dataList.stream().collect(Collectors.groupingBy(DevData::getId));
List<DevXiNumData.GF> gf = new ArrayList<>();
monitorMap.forEach((monitorId, list) -> {
DevXiNumData.F F = new DevXiNumData.F();
CoefficientVO.DevParameter devParameter;
CoefficientVO coefficientVO = new CoefficientVO();
if (XiNumberManager.stepNumber == 0 || XiNumberManager.stepNumber == 2) {
devParameter = XiNumberManager.devParameterList.get(0);
coefficientVO.setType("big");
} else {
devParameter = XiNumberManager.devParameterList.get(1);
coefficientVO.setType("small");
}
String[] splitStr = monitorId.split("_");
coefficientVO.setMonitorNum(splitStr[1]);
coefficientVO.setDevName(devNameMapComm.get(splitStr[0]));
coefficientVO.setDesc((XiNumberManager.stepNumber == 0 || XiNumberManager.stepNumber == 1) ? "系数下装" : "系数校准");
assemblyEntity(list, F, coefficientVO, devParameter);
DevXiNumData.GF gfItem = new DevXiNumData.GF();
gfItem.setUMonitorPoint(Integer.parseInt(splitStr[1]) - 1);
gfItem.setF(F);
gf.add(gfItem);
//表格数据
WebSocketVO<CoefficientVO> webSocketVO = new WebSocketVO<>();
webSocketVO.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue());
webSocketVO.setOperateCode(SourceOperateCodeEnum.DATA_CHNFACTOR$02.getValue());
webSocketVO.setData(coefficientVO);
webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(webSocketVO));
});
DevXiNumData devXiNumData = new DevXiNumData();
devXiNumData.setChnNum(0);
devXiNumData.setDevIP(devIp);
devXiNumData.setGf(gf);
if (XiNumberManager.stepNumber == 0) {
XiNumberManager.devXiNumDataMap.put(devIp, devXiNumData);
} else if (XiNumberManager.stepNumber == 1) {
XiNumberManager.smallDevXiNumDataMap.put(devIp, devXiNumData);
}
});
if (XiNumberManager.stepNumber == 1) {
//判断小电压是否系数超过大电压10%
double limit = 0.1;
XiNumberManager.smallDevXiNumDataMap.forEach((devIp, devXiNumDataBig) -> {
//定义一个标识: false:表示小电流系数和大电流系数
boolean flag = true;
DevXiNumData devXiNumDataSmall = XiNumberManager.devXiNumDataMap.get(devIp);
Map<Integer, DevXiNumData.GF> gfMap = devXiNumDataSmall.getGf().stream().collect(Collectors.toMap(DevXiNumData.GF::getUMonitorPoint, Function.identity()));
for (DevXiNumData.GF bigGf : devXiNumDataBig.getGf()) {
DevXiNumData.F smallF = gfMap.get(bigGf.getUMonitorPoint()).getF();
DevXiNumData.F bigF = bigGf.getF();
boolean ia = isWithinTenPercent(smallF.getIa_gain(), bigF.getIa_gain(), limit);
boolean ib = isWithinTenPercent(smallF.getIb_gain(), bigF.getIb_gain(), limit);
boolean ic = isWithinTenPercent(smallF.getIc_gain(), bigF.getIc_gain(), limit);
boolean va = isWithinTenPercent(smallF.getUa_gain(), bigF.getUa_gain(), limit);
boolean vb = isWithinTenPercent(smallF.getUb_gain(), bigF.getUb_gain(), limit);
boolean vc = isWithinTenPercent(smallF.getUc_gain(), bigF.getUc_gain(), limit);
if (ia && ib && ic && va && vb && vc) {
} else {
flag = false;
//继续下发一轮
if (!ia) {
Integer newIa = (smallF.getIa_gain() + bigF.getIa_gain()) / 2;
bigF.setIa_gain(newIa);
}
if (!ib) {
Integer newIb = (smallF.getIb_gain() + bigF.getIb_gain()) / 2;
bigF.setIb_gain(newIb);
}
if (!ic) {
Integer newIc = (smallF.getIc_gain() + bigF.getIc_gain()) / 2;
bigF.setIc_gain(newIc);
}
if (!va) {
Integer newVa = (smallF.getUa_gain() + bigF.getUa_gain()) / 2;
bigF.setUa_gain(newVa);
}
if (!vb) {
Integer newUb = (smallF.getUb_gain() + bigF.getUb_gain()) / 2;
bigF.setUb_gain(newUb);
}
if (!vc) {
Integer newUc = (smallF.getUc_gain() + bigF.getUc_gain()) / 2;
bigF.setUc_gain(newUc);
}
}
}
if (flag) {
//如果系数没问题则不需要
XiNumberManager.devXiList.removeIf(it -> it.equals(devIp));
}
});
//如果差距超过10%则再次下发系数
if (CollUtil.isNotEmpty(XiNumberManager.devXiList)) {
socketMsg.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue());
socketMsg.setOperateCode(SourceOperateCodeEnum.DATA_CHNFACTOR$02.getValue());
socketMsg.setData(JSON.toJSONString(XiNumberManager.devXiNumDataMap.get(XiNumberManager.devXiList.get(0))));
SocketManager.sendMsg(param.getUserPageId() + handlerStr, JSON.toJSONString(socketMsg));
} else {
//存在小电压系数在误差范围内情况,直接结束。
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.small_end.getValue(), XiNumberManager.devParameterList.get(1));
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.big_comp_start.getValue(), XiNumberManager.devParameterList.get(0));
//小电流系数下发完毕;开始重新测试一次大电压
xiSocket.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue());
xiSocket.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue());
xiSocket.setData(JSON.toJSONString(XiNumberManager.xiSourceIssueList.get(0)));
SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xiSocket));
XiNumberManager.stepNumber = 2;
realDataXiList.clear();
successComm.clear();
}
} else if (XiNumberManager.stepNumber == 2) {
//大电压处理
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.big_comp_end.getValue(), XiNumberManager.devParameterList.get(0));
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.small_comp_start.getValue(), XiNumberManager.devParameterList.get(1));
xiSocket.setOperateCode(SourceOperateCodeEnum.OPER_GATHER.getValue());
xiSocket.setData(JSON.toJSONString(XiNumberManager.xiSourceIssueList.get(1)));
SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xiSocket));
XiNumberManager.stepNumber = 3;
realDataXiList.clear();
successComm.clear();
} else if (XiNumberManager.stepNumber == 3) {
sendWebSocket(param.getUserPageId(), SourceOperateCodeEnum.Coefficient_Check.getValue(), SourceOperateCodeEnum.small_comp_end.getValue(), XiNumberManager.devParameterList.get(1));
System.out.println("-------------------------已经全部结束----------------------");
quitSend(param);
}
}
break;
case UNPROCESSED_BUSINESS:
webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
break;
case NORMAL_RESPONSE:
realDataXiList.add(devData);
break;
default:
socketMsg.setRequestId(socketDataMsg.getRequestId());
socketMsg.setOperateCode(socketDataMsg.getOperateCode());
socketMsg.setData(dictDataEnumByCode.getMessage());
webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(socketMsg));
break;
}
}
break;
default:
}
}
/**
* 比较两个数的差值,是否再limit范围内
*/
private boolean isWithinTenPercent(double num1, double num2, double limit) {
double diff = Math.abs(num1 - num2);
double larger = Math.max(num1, num2);
double percentage = diff / larger;
return percentage <= limit;
}
private void assemblyEntity(List<DevData> deList, DevXiNumData.F F, CoefficientVO coefficientVO, CoefficientVO.DevParameter devParameter) {
//表示接收完成,必须保证10个数
if (deList.size() >= 10) {
List<Double> aList = deList.stream().map(it -> it.getSqlData().get(0).getList().getA()).sorted().collect(Collectors.toList());
List<Double> bList = deList.stream().map(it -> it.getSqlData().get(0).getList().getB()).sorted().collect(Collectors.toList());
List<Double> cList = deList.stream().map(it -> it.getSqlData().get(0).getList().getC()).sorted().collect(Collectors.toList());
Double optionalA = reduceList(aList);
Double optionalB = reduceList(bList);
Double optionalC = reduceList(cList);
List<Double> aIList = deList.stream().map(it -> it.getSqlData().get(1).getList().getA()).sorted().collect(Collectors.toList());
List<Double> bIList = deList.stream().map(it -> it.getSqlData().get(1).getList().getB()).sorted().collect(Collectors.toList());
List<Double> cIList = deList.stream().map(it -> it.getSqlData().get(1).getList().getC()).sorted().collect(Collectors.toList());
Double optionalIA = reduceList(aIList);
Double optionalIB = reduceList(bIList);
Double optionalIC = reduceList(cIList);
coefficientVO.setAVuData(String.valueOf(optionalA));
coefficientVO.setBVuData(String.valueOf(optionalB));
coefficientVO.setCVuData(String.valueOf(optionalC));
coefficientVO.setAIeData(String.valueOf(optionalIA));
coefficientVO.setBIeData(String.valueOf(optionalIB));
coefficientVO.setCIeData(String.valueOf(optionalIC));
if (XiNumberManager.stepNumber == 0 || XiNumberManager.stepNumber == 1) {
Integer aXi = (int) ((optionalA / devParameter.getDevCurr()) * 10000);
Integer bXi = (int) ((optionalB / devParameter.getDevCurr()) * 10000);
Integer cXi = (int) ((optionalC / devParameter.getDevCurr()) * 10000);
Integer aIXi = (int) ((optionalIA / devParameter.getDevCurr()) * 10000);
Integer bIXi = (int) ((optionalIB / devParameter.getDevCurr()) * 10000);
Integer cIXi = (int) ((optionalIC / devParameter.getDevCurr()) * 10000);
coefficientVO.setAVuXi(aXi.toString());
coefficientVO.setBVuXi(bXi.toString());
coefficientVO.setCVuXi(cXi.toString());
coefficientVO.setAIeXi(aIXi.toString());
coefficientVO.setBIeXi(bIXi.toString());
coefficientVO.setCIeXi(cIXi.toString());
F.setUa_gain(aXi);
F.setUb_gain(bXi);
F.setUc_gain(cXi);
F.setIa_gain(aIXi);
F.setIb_gain(bIXi);
F.setIc_gain(cIXi);
} else {
double vLimit = 0.1 * devParameter.getDevVolt() / 100;
double iLimit = 0.005;
coefficientVO.setAVuXi(isWithinTenPercent(optionalA, devParameter.getDevVolt(), vLimit) ? "合格" : "不合格");
coefficientVO.setBVuXi(isWithinTenPercent(optionalB, devParameter.getDevVolt(), vLimit) ? "合格" : "不合格");
coefficientVO.setCVuXi(isWithinTenPercent(optionalC, devParameter.getDevVolt(), vLimit) ? "合格" : "不合格");
coefficientVO.setAIeXi(isWithinTenPercent(optionalIA, devParameter.getDevCurr(), iLimit) ? "合格" : "不合格");
coefficientVO.setBIeXi(isWithinTenPercent(optionalIB, devParameter.getDevCurr(), iLimit) ? "合格" : "不合格");
coefficientVO.setCIeXi(isWithinTenPercent(optionalIC, devParameter.getDevCurr(), iLimit) ? "合格" : "不合格");
}
}
}
/**
* 删除集合中前五个数以及最后两个数
*/
private Double reduceList(List<Double> valList) {
valList.subList(0, 5).clear();
valList.subList(valList.size() - 3, valList.size() - 1).clear();
return valList.stream().mapToDouble(Double::doubleValue).average().getAsDouble();
}
/**
* 装置通讯检测
*/
@@ -221,7 +583,7 @@ public class SocketDevResponseService {
*/
private void devXieyi(SocketDataMsg socketDataMsg, PreDetectionParam param, String msg) {
SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode());
SocketMsg socketMsg = new SocketMsg();
SocketMsg<String> socketMsg = new SocketMsg<>();
String s = param.getUserPageId() + handlerStr;
switch (Objects.requireNonNull(dictDataEnumByCode)) {
@@ -281,7 +643,7 @@ public class SocketDevResponseService {
List<SourceIssue> sourceIssues;
if (SourceOperateCodeEnum.FORMAL_TEST.getValue().equals(param.getOperateType())) {
//正式检测
issueParam.setIsPhaseSequence(false);
issueParam.setIsPhaseSequence(SourceOperateCodeEnum.FORMAL_TEST.getValue());
sourceIssues = pqScriptDtlsService.listSourceIssue(issueParam);
sourceIssues = sourceIssues.stream().sorted(Comparator.comparing(SourceIssue::getIndex)).collect(Collectors.toList());
SocketManager.addSourceList(sourceIssues);
@@ -293,11 +655,38 @@ public class SocketDevResponseService {
} else if (SourceOperateCodeEnum.PRE_TEST.getValue().equals(param.getOperateType())) {
//预检测的相序检测
issueParam.setIsPhaseSequence(true);
issueParam.setIsPhaseSequence(SourceOperateCodeEnum.PHASE_TEST.getValue());
xuMsg.setRequestId(SourceOperateCodeEnum.YJC_XUJY.getValue());
sourceIssues = pqScriptDtlsService.listSourceIssue(issueParam);
xuMsg.setData(JSON.toJSONString(sourceIssues.get(0)));
SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xuMsg));
} else if (SourceOperateCodeEnum.COEFFICIENT_TEST.getValue().equals(param.getOperateType())) {
//系数校验
/* issueParam.setIsPhaseSequence(SourceOperateCodeEnum.PHASE_TEST.getValue());
xuMsg.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue());
sourceIssues = pqScriptDtlsService.listSourceIssue(issueParam);
xuMsg.setData(JSON.toJSONString(sourceIssues.get(0)));
SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xuMsg));*/
WebSocketVO<Object> webSocketVO = new WebSocketVO<>();
webSocketVO.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue());
webSocketVO.setOperateCode(SourceOperateCodeEnum.big_start.getValue());
webSocketVO.setData(XiNumberManager.devParameterList.get(0));
webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(webSocketVO));
xuMsg.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue());
xuMsg.setData(JSON.toJSONString(XiNumberManager.xiSourceIssueList.get(0)));
SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xuMsg));
XiNumberManager.stepNumber = 0;
XiNumberManager.devXiList.clear();
XiNumberManager.devXiNumDataMap.clear();
XiNumberManager.smallDevXiNumDataMap.clear();
//系数校验只支持单个装置修改系数
// SocketManager.monitorXiList = new ArrayList<>(monitorIdListComm);
}
successComm.clear();
}
@@ -351,7 +740,7 @@ public class SocketDevResponseService {
PqScriptIssueParam sourceParam = new PqScriptIssueParam();
sourceParam.setPlanId(param.getPlanId());
sourceParam.setDevIds(param.getDevIds());
sourceParam.setIsPhaseSequence(true);
sourceParam.setIsPhaseSequence(SourceOperateCodeEnum.PHASE_TEST.getValue());
sourceParam.setSourceId(param.getSourceId());
List<SourceIssue> sourceIssues = scriptDtlsService.listSourceIssue(sourceParam);
List<SourceCompareDev> info = new ArrayList<>();
@@ -373,18 +762,17 @@ public class SocketDevResponseService {
}
String userSource = param.getUserPageId() + handlerSourceStr;
SocketMsg msg = new SocketMsg();
SocketMsg<String> msg = new SocketMsg<>();
msg.setRequestId(SourceOperateCodeEnum.QUITE_SOURCE.getValue());
/* msg.setRequestId(SourceOperateCodeEnum.QUITE_SOURCE.getValue());
msg.setOperateCode(SourceOperateCodeEnum.CLOSE_GATHER.getValue());
Map<String, String> map = new HashMap<>(1);
map.put("sourceId", sourceIssues.get(0).getSourceId());
msg.setData(JSON.toJSONString(map));
SocketManager.sendMsg(userSource, MsgUtil.toJsonWithNewLinePlain(msg));
SocketManager.sendMsg(userSource, MsgUtil.toJsonWithNewLinePlain(msg));*/
//同时关闭设备三个步骤
SocketMsg quitDevMsg = new SocketMsg();
quitSend(param);
//向前端推送消息
@@ -394,12 +782,6 @@ public class SocketDevResponseService {
temMsg.setRequestId(SourceOperateCodeEnum.YJC_XUJY.getValue());
webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(temMsg));
//如果是正式校验需要继续校验
if (SourceOperateCodeEnum.FORMAL_TEST.getValue().equals(param.getOperateType())) {
}
}
break;
case UNPROCESSED_BUSINESS:
@@ -436,18 +818,24 @@ public class SocketDevResponseService {
/**
* 实时数据
*/
private final List<DevData> devDataList = new ArrayList();
public void realDeal(PreDetectionParam param, SocketDataMsg socketDataMsg) {
String data = socketDataMsg.getData();
DevData devData = JSON.parseObject(data, DevData.class);
SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode());
SourceIssue sourceIssue = SocketManager.getSourceList().get(0);
if (Objects.nonNull(dtlsFlag)) {
if (!sourceIssue.getIndex().equals(dtlsFlag)) {
}
}
dtlsFlag = sourceIssue.getIndex();
realDonging(devData, dictDataEnumByCode, sourceIssue, socketDataMsg, param);
}
public void realDonging(DevData devData, SourceResponseCodeEnum dictDataEnumByCode, SourceIssue sourceIssue, SocketDataMsg socketDataMsg, PreDetectionParam param) {
@@ -456,28 +844,22 @@ public class SocketDevResponseService {
switch (dictDataEnumByCode) {
case SUCCESS:
//List<DevData.SqlDataDTO> sqlDataDTOList = devData.getSqlData();
devDataList.add(devData);
realDataXiList.add(devData);
successComm.add(socketDataMsg.getRequestId());
System.out.println("获取devData数量............." + devDataList.size());
if (successComm.size() == monitorIdListComm.size()) {
//TODO 理论上遇到返回code10200的数量与监测点数量一致则认为数据返回结束但是会存在缺失数据情况,例如有部分装置是没有暂降功能的
System.out.println(sourceIssue.getType() +"_"+ sourceIssue.getIndex() + "当前测试小项读取数据已经全部结束。。。。。。。。。");
//原始数据入库
baseDataInsert(devDataList,sourceIssue,param);
System.out.println(JSON.toJSONString(sourceIssue));
System.out.println(sourceIssue.getType() + "_" + sourceIssue.getIndex() + "当前测试小项读取数据已经全部结束。。。。。。。。。");
//开启线程进行入库原始数据操作
Map<String, Integer> flag = detectionServiceImpl.text(devDataList, param.getErrorSysId(), devIdMapComm, sourceIssue, DictDataEnum.AT_WILL_VALUE);
baseDataInsert(realDataXiList, sourceIssue, param, SocketManager.valueTypeMap);
Map<String, Integer> flag = detectionServiceImpl.text(realDataXiList, param.getErrorSysId(), devIdMapComm, sourceIssue, DictDataEnum.AT_WILL_VALUE);
System.out.println(flag);
long tem = SocketManager.getSourceTarget(sourceIssue.getType()) - 1;
SocketManager.addTargetMap(sourceIssue.getType(), tem);
System.out.println("该大项还有"+tem+"个小项没有进行检测!!!!!!!!");
System.out.println("该大项还有" + tem + "个小项没有进行检测!!!!!!!!");
if (tem == 0) {
System.out.println(sourceIssue.getType() + sourceIssue.getIndex() + "当前测试大项已经全部结束》》》》》》》》");
@@ -492,21 +874,19 @@ public class SocketDevResponseService {
devLineTestResult.setDeviceId(dev.getDevId());
devLineTestResult.setDeviceName(dev.getDevName());
List<Integer> tt = new ArrayList<>();
List<Integer> resultFlagList = new ArrayList<>();
List<PreDetection.MonitorListDTO> monitorListDTOList = dev.getMonitorList();
for (PreDetection.MonitorListDTO point : monitorListDTOList) {
Integer resultFlag = flag.get(dev.getDevIP() + "_" + point.getLine());
tt.add(resultFlag);
resultFlagList.add(resultFlag);
}
devLineTestResult.setChnResult(tt.toArray(new Integer[monitorListDTOList.size()]));
devLineTestResult.setChnResult(resultFlagList.toArray(new Integer[monitorListDTOList.size()]));
devListRes.add(devLineTestResult);
});
webSocketVO.setData(devListRes);
webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(webSocketVO));
}
System.out.println("当前小项结束进行删除============"+sourceIssue.getType()+"_"+sourceIssue.getIndex());
System.out.println("当前小项结束进行删除============" + sourceIssue.getType() + "_" + sourceIssue.getIndex());
//当小项结束后需要删除集合中的小项
SocketManager.delSource(sourceIssue.getIndex());
@@ -521,13 +901,13 @@ public class SocketDevResponseService {
xuMsg.setData(JSON.toJSONString(sourceIssues));
xuMsg.setRequestId(SourceOperateCodeEnum.FORMAL_REAL.getValue() + "&&" + sourceIssues.getType());
SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, MsgUtil.toJsonWithNewLinePlain(xuMsg));
}else {
} else {
//TODO 是否最终检测完成需要推送给用户
quitSend(param);
}
successComm.clear();
devDataList.clear();
realDataXiList.clear();
}
break;
@@ -536,7 +916,7 @@ public class SocketDevResponseService {
break;
case NORMAL_RESPONSE:
devDataList.add(devData);
realDataXiList.add(devData);
break;
case DEV_ERROR:
@@ -622,9 +1002,10 @@ public class SocketDevResponseService {
* 退出检测
*/
private void quitSend(PreDetectionParam param) {
SocketMsg socketMsg = new SocketMsg();
SocketMsg<String> socketMsg = new SocketMsg<>();
socketMsg.setRequestId(SourceOperateCodeEnum.QUITE.getValue());
socketMsg.setOperateCode(SourceOperateCodeEnum.QUIT_INIT_03.getValue());
SocketManager.sendMsg(param.getUserPageId() + handlerStr, JSON.toJSONString(socketMsg));
}
@@ -650,15 +1031,15 @@ public class SocketDevResponseService {
List<SourceIssue.ChannelListDTO> channelList = issue.getChannelList();
List<DevData.SqlDataDTO> sqlData = dev.getSqlData();
List<DevData.SqlDataDTO> dataV = sqlData.stream().filter(x -> "电压有效值".equals(x.getDesc())).collect(Collectors.toList());
List<DevData.SqlDataDTO> dataI = sqlData.stream().filter(x -> "电流有效值".equals(x.getDesc())).collect(Collectors.toList());
List<DevData.SqlDataDTO> dataV = sqlData.stream().filter(x -> "VRMS".equals(x.getDesc())).collect(Collectors.toList());
List<DevData.SqlDataDTO> dataI = sqlData.stream().filter(x -> "IRMS".equals(x.getDesc())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(dataV)) {
SourceCompareDev compareDev = getSourceCompareDev(split, dataV, "电压有效值", "U", channelList);
SourceCompareDev compareDev = getSourceCompareDev(split, dataV, "VRMS", "U", channelList);
compareDev.setDevName(devName);
info.add(compareDev);
}
if (CollUtil.isNotEmpty(dataI)) {
SourceCompareDev compareDev = getSourceCompareDev(split, dataI, "电流有效值", "I", channelList);
SourceCompareDev compareDev = getSourceCompareDev(split, dataI, "IRMS", "I", channelList);
compareDev.setDevName(devName);
info.add(compareDev);
}
@@ -742,7 +1123,7 @@ public class SocketDevResponseService {
this.success = new ArrayList<>();
this.devDataMap = new HashMap<>();
this.devDataList.clear();
this.realDataXiList.clear();
this.devList.clear();
List<PreDetection> pqDevList = iPqDevService.getDevInfo(param.getDevIds());
@@ -756,123 +1137,184 @@ public class SocketDevResponseService {
//初始化有效数据数
Map<String, SysRegResVO> sysRegResMap = iSysRegResService.listRegRes();
SocketManager.temXiDevList = new ArrayList<>(devList);
//字典树
SocketManager.valueTypeMap.clear();
SocketManager.valueTypeMap = iPqScriptCheckDataService.getValueTypeMap(param.getScriptId());
initXiManager(param);
}
//初始化
private void initXiManager(PreDetectionParam param) {
Double v = devList.get(0).getDevVolt();
Double i = devList.get(0).getDevCurr();
CoefficientVO.DevParameter devParameterBig = new CoefficientVO.DevParameter();
devParameterBig.setDevVolt(BigDecimal.valueOf(v * 1.2).setScale(2, RoundingMode.HALF_UP).doubleValue());
devParameterBig.setDevCurr(BigDecimal.valueOf(i * 1.5).setScale(2, RoundingMode.HALF_UP).doubleValue());
CoefficientVO.DevParameter devParameterSmall = new CoefficientVO.DevParameter();
devParameterSmall.setDevVolt(BigDecimal.valueOf(v * 0.2).setScale(2, RoundingMode.HALF_UP).doubleValue());
devParameterSmall.setDevCurr(BigDecimal.valueOf(i * 0.2).setScale(2, RoundingMode.HALF_UP).doubleValue());
XiNumberManager.devParameterList.clear();
XiNumberManager.devParameterList.add(devParameterBig);
XiNumberManager.devParameterList.add(devParameterSmall);
PqScriptIssueParam issueParam = new PqScriptIssueParam();
issueParam.setPlanId(param.getPlanId());
issueParam.setSourceId(param.getSourceId());
issueParam.setDevIds(param.getDevIds());
issueParam.setScriptId("a303b2224845fcc6f60198b8ca23dca9");
issueParam.setIsPhaseSequence(SourceOperateCodeEnum.COEFFICIENT_TEST.getValue());
List<SourceIssue> sourceIssues = pqScriptDtlsService.listSourceIssue(issueParam);
for (int j = 0; j < sourceIssues.size(); j++) {
if (i == 0) {
sourceIssues.get(j).getChannelList().forEach(it -> {
if (it.getChannelType().contains("U")) {
it.setFAmp(XiNumberManager.devParameterList.get(0).getDevVolt());
} else if (it.getChannelType().contains("I")) {
it.setFAmp(XiNumberManager.devParameterList.get(0).getDevCurr());
}
});
} else {
sourceIssues.get(j).getChannelList().forEach(it -> {
if (it.getChannelType().contains("U")) {
it.setFAmp(XiNumberManager.devParameterList.get(1).getDevVolt());
} else if (it.getChannelType().contains("I")) {
it.setFAmp(XiNumberManager.devParameterList.get(1).getDevCurr());
}
});
}
}
XiNumberManager.xiSourceIssueList = sourceIssues;
}
/**
* 原始数据入库
*
* @author cdf
* @date 2024/12/29
*/
private void baseDataInsert(List<DevData> devDataList,SourceIssue sourceIssue,PreDetectionParam param){
private void baseDataInsert(List<DevData> devDataList, SourceIssue sourceIssue, PreDetectionParam param, Map<String, String> checkDataMap) {
Runnable runnable = () -> {
System.out.println("原始数据插入数据库开始执行=========================================");
List<AdNonHarmonicResult> adNonHarmonicResultList = new ArrayList<>();
List<AdHarmonicResult> adHarmonicResultList = new ArrayList<>();
for(DevData data : devDataList){
LocalDateTime localDateTime = timeFormat(data.getTime(),formatter);
if(Objects.nonNull(localDateTime)){
for (DevData data : devDataList) {
LocalDateTime localDateTime = timeFormat(data.getTime(), formatter);
if (Objects.nonNull(localDateTime)) {
String[] splitArr = data.getId().split("_");
String temId = devDataMap.get(splitArr[0]).getId()+"_"+splitArr[1];
if(nonHarmonicList.contains(sourceIssue.getType())){
AdNonHarmonicResult adNonHarmonicResult = new AdNonHarmonicResult();
adNonHarmonicResult.setTimeId(localDateTime);
adNonHarmonicResult.setMonitorId(temId);
adNonHarmonicResult.setScriptId(param.getScriptId());
adNonHarmonicResult.setSort(sourceIssue.getIndex());
adNonHarmonicResult.setAdType(sourceIssue.getId());
adNonHarmonicResult.setDataType("avg");
DevData.SqlDataDTO.ListDTO tem = data.getSqlData().get(0).getList();
String temId = devIdMapComm.get(splitArr[0]) + "_" + splitArr[1];
Double a = tem.getA();
Double b = tem.getB();
Double c = tem.getC();
Double d = tem.getT();
if(Objects.nonNull(a)){
adNonHarmonicResult.setAValue(String.format("%.7f", a));
}
if(Objects.nonNull(b)){
adNonHarmonicResult.setBValue(String.format("%.7f", b));
}
if(Objects.nonNull(c)){
adNonHarmonicResult.setCValue(String.format("%.7f", c));
}
if(Objects.nonNull(d)){
adNonHarmonicResult.setTValue(String.format("%.7f", d));
}
adNonHarmonicResultList.add(adNonHarmonicResult);
}else {
AdHarmonicResult adHarmonicResult = new AdHarmonicResult();
adHarmonicResult.setTimeId(localDateTime);
if (nonHarmonicList.contains(sourceIssue.getType())) {
for (DevData.SqlDataDTO sqlDataDTO : data.getSqlData()) {
DevData.SqlDataDTO.ListDTO listDTO = sqlDataDTO.getList();
AdNonHarmonicResult adNonHarmonicResult = new AdNonHarmonicResult();
adNonHarmonicResult.setTimeId(localDateTime);
adNonHarmonicResult.setMonitorId(temId);
adNonHarmonicResult.setScriptId(param.getScriptId());
adNonHarmonicResult.setSort(sourceIssue.getIndex());
adNonHarmonicResult.setAdType(checkDataMap.get(sqlDataDTO.getDesc()));
adNonHarmonicResult.setDataType("avg");
adHarmonicResult.setMonitorId(temId);
adHarmonicResult.setScriptId(param.getScriptId());
adHarmonicResult.setSort(sourceIssue.getIndex());
adHarmonicResult.setAdType(sourceIssue.getId());
adHarmonicResult.setDataType("avg");
if(DicDataEnum.HI.getCode().equals(sourceIssue.getType())||DicDataEnum.HSI.getCode().equals(sourceIssue.getType())){
DevData.SqlDataDTO.ListDTO vvv = data.getSqlData().get(0).getList();
Double aV = vvv.getA();
Double bV = vvv.getB();
Double cV = vvv.getC();
if (Objects.nonNull(aV)) {
adHarmonicResult.setAValue1(String.format("%.7f", aV));
Double a = listDTO.getA();
Double b = listDTO.getB();
Double c = listDTO.getC();
Double d = listDTO.getT();
if (Objects.nonNull(a)) {
adNonHarmonicResult.setAValue(String.format("%.7f", a));
}
if (Objects.nonNull(bV)) {
adHarmonicResult.setBValue1(String.format("%.7f", bV));
if (Objects.nonNull(b)) {
adNonHarmonicResult.setBValue(String.format("%.7f", b));
}
if (Objects.nonNull(cV)) {
adHarmonicResult.setCValue1(String.format("%.7f", cV));
if (Objects.nonNull(c)) {
adNonHarmonicResult.setCValue(String.format("%.7f", c));
}
if (Objects.nonNull(d)) {
adNonHarmonicResult.setTValue(String.format("%.7f", d));
}
adNonHarmonicResultList.add(adNonHarmonicResult);
}
} else {
for (DevData.SqlDataHarmDTO sqlDataDTO : data.getSqlDataHarm()) {
AdHarmonicResult adHarmonicResult = new AdHarmonicResult();
adHarmonicResult.setTimeId(localDateTime);
adHarmonicResult.setMonitorId(temId);
adHarmonicResult.setScriptId(param.getScriptId());
adHarmonicResult.setSort(sourceIssue.getIndex());
adHarmonicResult.setAdType(checkDataMap.get(sqlDataDTO.getDesc()));
adHarmonicResult.setDataType("avg");
if (!DicDataEnum.HI.getCode().equals(sourceIssue.getType()) && !DicDataEnum.HSI.getCode().equals(sourceIssue.getType()) && !DicDataEnum.HP.getCode().equals(sourceIssue.getType())) {
DevData.SqlDataDTO.ListDTO vvv = data.getSqlData().get(0).getList();
Double aV = vvv.getA();
Double bV = vvv.getB();
Double cV = vvv.getC();
if (Objects.nonNull(aV)) {
adHarmonicResult.setAValue1(String.format("%.7f", aV));
}
if (Objects.nonNull(bV)) {
adHarmonicResult.setBValue1(String.format("%.7f", bV));
}
if (Objects.nonNull(cV)) {
adHarmonicResult.setCValue1(String.format("%.7f", cV));
}
}
DevData.SqlDataHarmDTO.ListDTO tem = sqlDataDTO.getList();
List<String> a = tem.getA();
List<String> b = tem.getB();
List<String> c = tem.getC();
Class<AdHarmonicResult> example = (Class<AdHarmonicResult>) adHarmonicResult.getClass();
for (int i = 2; i <= 50; i++) {
// 通过反射设置name字段的值
try {
// 假设这些字段已经以正确的方式定义在AdHarmonicResult类中
Field aField = example.getDeclaredField("aValue" + i);
Field bField = example.getDeclaredField("bValue" + i);
Field cField = example.getDeclaredField("cValue" + i);
aField.setAccessible(true);
aField.set(adHarmonicResult, a.get(i - 2));
bField.setAccessible(true);
bField.set(adHarmonicResult, b.get(i - 2));
cField.setAccessible(true);
cField.set(adHarmonicResult, c.get(i - 2));
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
}
adHarmonicResultList.add(adHarmonicResult);
}
DevData.SqlDataHarmDTO.ListDTO tem = data.getSqlDataHarm().get(0).getList();
List<String> a = tem.getA();
List<String> b = tem.getB();
List<String> c = tem.getC();
Class<AdHarmonicResult> example = (Class<AdHarmonicResult>) adHarmonicResult.getClass();
for(int i = 2;i<=50;i++){
// 通过反射设置name字段的值
try {
// 假设这些字段已经以正确的方式定义在AdHarmonicResult类中
Field aField = example.getDeclaredField("aValue" + i);
Field bField = example.getDeclaredField("bValue" + i);
Field cField = example.getDeclaredField("cValue" + i);
aField.setAccessible(true);
aField.set(adHarmonicResult,a.get(i - 2));
bField.setAccessible(true);
bField.set(adHarmonicResult,b.get(i - 2));
cField.setAccessible(true);
cField.set(adHarmonicResult,c.get(i - 2));
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
}
adHarmonicResultList.add(adHarmonicResult);
}
}
}
if(CollUtil.isNotEmpty(adNonHarmonicResultList)){
detectionDataDealService.acceptAdNon(adNonHarmonicResultList,"1");
if (CollUtil.isNotEmpty(adNonHarmonicResultList)) {
detectionDataDealService.acceptAdNon(adNonHarmonicResultList, "1");
}
if(CollUtil.isNotEmpty(adHarmonicResultList)){
detectionDataDealService.acceptAd(adHarmonicResultList,"1");
if (CollUtil.isNotEmpty(adHarmonicResultList)) {
detectionDataDealService.acceptAd(adHarmonicResultList, "1");
}
System.out.println("原始数据插入数据库执行成功=========================================");
};
executorPool.submit(runnable);
}
private LocalDateTime timeFormat(String dateTimeStr, DateTimeFormatter formatter){
//DateTimeFormatter formatter = DateTimeFormatter.ISO_DATE_TIME; // ISO 8601格式
private LocalDateTime timeFormat(String dateTimeStr, DateTimeFormatter formatter) {
try {
// 假设输入是UTC时间将其解析为ZonedDateTime
ZonedDateTime zonedDateTime = ZonedDateTime.parse(dateTimeStr, formatter.withZone(ZoneId.of("UTC")));
@@ -888,4 +1330,21 @@ public class SocketDevResponseService {
}
/**
* 向前端推送消息
*
* @param userId 前端用户信息
* @param requestId
* @param operatorType
* @param devParameter
*/
private void sendWebSocket(String userId, String requestId, String operatorType, CoefficientVO.DevParameter devParameter) {
WebSocketVO<CoefficientVO.DevParameter> webSocketVO = new WebSocketVO<>();
webSocketVO.setRequestId(requestId);
webSocketVO.setOperateCode(operatorType);
webSocketVO.setData(devParameter);
webSocketHandler.sendMsgToUser(userId, JSON.toJSONString(webSocketVO));
}
}

View File

@@ -1,5 +1,6 @@
package com.njcn.gather.detection.handler;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum;
@@ -48,6 +49,7 @@ public class SocketSourceResponseService {
private Integer port;
private List<PreDetection> devList = new ArrayList<>();
private List<String> monitorIdList = new ArrayList<>();
@@ -69,6 +71,10 @@ public class SocketSourceResponseService {
case FORMAL_REAL:
senParamToDev(param, socketDataMsg);
break;
//系数校验
case Coefficient_Check:
coefficient(param, socketDataMsg);
break;
case QUITE_SOURCE:
quitDeal(socketDataMsg,param);
// System.out.println("关闭源回调:"+msg);
@@ -82,6 +88,47 @@ public class SocketSourceResponseService {
}
/**
* 系数校验源数据返回处理
*/
private void coefficient(PreDetectionParam param, SocketDataMsg socketDataMsg) {
SourceResponseCodeEnum dictDataEnumByCode = SourceResponseCodeEnum.getDictDataEnumByCode(socketDataMsg.getCode());
if (ObjectUtil.isNotNull(dictDataEnumByCode)) {
SocketMsg<String> socketMsg = new SocketMsg<>();
switch (dictDataEnumByCode) {
case SUCCESS:
//向前端推送信息
webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
String s = param.getUserPageId() + DEV;
socketMsg.setRequestId(SourceOperateCodeEnum.Coefficient_Check.getValue());
socketMsg.setOperateCode(SourceOperateCodeEnum.DEV_DATA_REQUEST_02.getValue());
DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam();
phaseSequenceParam.setMoniterIdList(monitorIdList);
phaseSequenceParam.setDataType(Arrays.asList("real$VRMS","real$IRMS"));
phaseSequenceParam.setReadCount(10);
phaseSequenceParam.setIgnoreCount(2);
socketMsg.setData(JSON.toJSONString(phaseSequenceParam));
SocketManager.sendMsg(s, JSON.toJSONString(socketMsg));
break;
case UNPROCESSED_BUSINESS:
webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(socketDataMsg));
break;
default:
socketMsg.setRequestId(socketDataMsg.getRequestId());
socketMsg.setOperateCode(socketDataMsg.getOperateCode());
socketMsg.setData(dictDataEnumByCode.getMessage());
webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(socketMsg));
break;
}
}
}
/**
* 装置检测(当源初始化成功后,直接向装置通道向装置服务器发送,装置检测)
*
@@ -147,9 +194,10 @@ public class SocketSourceResponseService {
List<String> moniterIdList = pqDevList.stream().flatMap(x -> x.getMonitorList().stream())
.map(PreDetection.MonitorListDTO::getLineId)
.collect(Collectors.toList());
DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam();
phaseSequenceParam.setMoniterIdList(moniterIdList);
phaseSequenceParam.setDataType(Arrays.asList("实时数据/电压有效值", "实时数据/电流有效值"));
phaseSequenceParam.setDataType(Arrays.asList("real$VRMS", "real$IRMS"));
phaseSequenceParam.setReadCount(1);
phaseSequenceParam.setIgnoreCount(10);
socketMsg.setData(JSON.toJSONString(phaseSequenceParam));
@@ -266,7 +314,11 @@ public class SocketSourceResponseService {
public void initList(PreDetectionParam param){
devList.clear();
monitorIdList.clear();
this.devList = iPqDevService.getDevInfo(param.getDevIds());
this.monitorIdList = devList.stream().flatMap(x -> x.getMonitorList().stream())
.map(PreDetection.MonitorListDTO::getLineId)
.collect(Collectors.toList());
}
}

View File

@@ -0,0 +1,39 @@
package com.njcn.gather.detection.handler;
import com.njcn.gather.detection.pojo.dto.DevXiNumData;
import com.njcn.gather.detection.pojo.vo.CoefficientVO;
import com.njcn.gather.device.script.pojo.po.SourceIssue;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* @Author: cdf
* @CreateTime: 2025-01-05
* @Description: 系数管理器
*/
public class XiNumberManager {
public static List<SourceIssue> xiSourceIssueList = new ArrayList<>();
public static List<String> devXiList = new ArrayList<>();
public static Map<String, DevXiNumData> devXiNumDataMap = new ConcurrentHashMap<>();
public static Map<String, DevXiNumData> smallDevXiNumDataMap = new ConcurrentHashMap<>();
//系数校验步数计数器 0.大电压 1.小电压 2.小电压 3.大电压
public static Integer stepNumber = 0;
public static List<CoefficientVO.DevParameter> devParameterList = new ArrayList<>();
public static List<CoefficientVO.DevParameter> rateDevParameterList = new ArrayList<>();
}

View File

@@ -0,0 +1,62 @@
package com.njcn.gather.detection.pojo.dto;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import java.util.List;
/**
* @Author: cdf
* @CreateTime: 2025-01-04
* @Description: 给装置下发的系数
*/
@Data
public class DevXiNumData {
private String devIP;
private Integer chnNum;
private List<GF> gf;
@Data
public static class GF{
private Integer uMonitorPoint;
private F f;
}
@Data
public static class F{
private Integer count;
@JSONField(name = "Ua_gain", ordinal = 1)
private Integer Ua_gain;
@JSONField(name = "Ub_gain", ordinal = 2)
private Integer Ub_gain;
@JSONField(name = "Uc_gain", ordinal = 3)
private Integer Uc_gain;
@JSONField(name = "U0_gain", ordinal = 4)
private Integer U0_gain;
@JSONField(name = "Ia_gain", ordinal = 5)
private Integer Ia_gain;
@JSONField(name = "Ib_gain", ordinal = 6)
private Integer Ib_gain;
@JSONField(name = "Ic_gain", ordinal = 7)
private Integer Ic_gain;
@JSONField(name = "I0_gain", ordinal = 8)
private Integer I0_gain;
@JSONField(name = "Uab_gain", ordinal = 9)
private Integer Uab_gain;
@JSONField(name = "Ubc_gain", ordinal = 10)
private Integer Ubc_gain;
@JSONField(name = "Uca_gain", ordinal = 11)
private Integer Uca_gain;
}
}

View File

@@ -35,13 +35,17 @@ public enum SourceOperateCodeEnum {
QUIT_INIT_03("QUIT_FUNEND$03", "关闭暂态申请"),
DATA_CHNFACTOR$01("DATA_CHNFACTOR$01","校验系数获取"),
DATA_CHNFACTOR$02("DATA_CHNFACTOR$02","校验系数下发"),
/**
* 请求操作类型对应实体中 requestId
*/
YJC_YTXJY("yjc_ytxjy", "预检测_源通讯检测"),
YJC_SBTXJY("yjc_sbtxjy", "预检测_设备通讯检测"),
YJC_XYJY("yjc_xyjy", "预检测_协议校验"),
YJC_XUJY("YJC_xujy", "预检测_相序校验"),
YJC_XUJY("YJC_xujy", "相序校验"),
FORMAL_REAL("formal_real","正式检测_获取实时数据"),
FORMAL_STATISTIC("formal_statistic","正式检测_获取统计数据"),
@@ -51,11 +55,30 @@ public enum SourceOperateCodeEnum {
QUITE_SOURCE("close_source","预监测_关闭源通讯"),
Coefficient_Check("Coefficient_Check","系数校验"),
PRE_TEST("0","预检测"),
FORMAL_TEST("1","正式检测"),
TIME_TEST("2","守时检测"),
/**
*
*/
COEFFICIENT_TEST("0","系数校验"),
PRE_TEST("1","预检测"),
FORMAL_TEST("2","正式检测"),
TIME_TEST("3","守时检测"),
PHASE_TEST("4","相序检测"),
/**
* 系数校验步骤
*/
big_start("big_start","大电压系数下装开始"),
big_end("big_end","大电压系数下装结束"),
small_start("small_start","小电压系数下装开始"),
small_end("small_end","小电压系数下装结束"),
big_comp_start("big_comp_start","大电压校准开始"),
big_comp_end("big_comp_end","大电压校准结束"),
small_comp_start("small_comp_start","小电压校准开始"),
small_comp_end("small_comp_end","小电压校准结束"),
/**
* 检测类型

View File

@@ -13,7 +13,7 @@ import java.util.List;
public class PreDetectionParam {
/**
* 操作类型 0.预检测 1.正式检测
* 操作类型 0.预检测 1.正式检测 2.系数校验
*/
private String operateType = "0";

View File

@@ -0,0 +1,76 @@
package com.njcn.gather.detection.pojo.vo;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import java.util.List;
/**
* @Author: cdf
* @CreateTime: 2025-01-04
* @Description: 系数校准前端返回实体
*/
@Data
public class CoefficientVO {
@JSONField(name = "type", ordinal = 0)
private String type;
@JSONField(name = "devName", ordinal = 1)
private String devName;
@JSONField(name = "monitorNum", ordinal = 2)
private String monitorNum;
@JSONField(name = "desc", ordinal = 3)
private String desc;
@JSONField(name = "aVuData", ordinal = 4)
private String aVuData;
@JSONField(name = "aVuXi", ordinal = 5)
private String aVuXi;
@JSONField(name = "bVuData", ordinal = 6)
private String bVuData;
@JSONField(name = "bVuXi", ordinal = 7)
private String bVuXi;
@JSONField(name = "cVuData", ordinal = 8)
private String cVuData;
@JSONField(name = "cVuXi", ordinal = 9)
private String cVuXi;
@JSONField(name = "aIeData", ordinal = 10)
private String aIeData;
@JSONField(name = "aIeXi", ordinal = 11)
private String aIeXi;
@JSONField(name = "bIeData", ordinal = 12)
private String bIeData;
@JSONField(name = "bIeXi", ordinal = 13)
private String bIeXi;
@JSONField(name = "cIeData", ordinal = 14)
private String cIeData;
@JSONField(name = "cIeXi", ordinal = 15)
private String cIeXi;
@Data
public static class DevParameter{
private Double devVolt;
private Double devCurr;
}
}

View File

@@ -20,6 +20,9 @@ public interface PreDetectionService {
void sourceCommunicationCheck(PreDetectionParam param);
void coefficientCheck(PreDetectionParam param);
boolean startTest(PreDetectionParam param);

View File

@@ -665,7 +665,7 @@ public class DetectionServiceImpl {
*/
private void setDetection(DictDataEnum dataRule, List<Double> harmDataList, PqErrSysDtls errSysDtl, DetectionData data, Double v) {
List<Double> qualifiedList = harmDataList.stream()
.filter(x -> NumberUtil.isIn(devSubtractChannelData(x, v, errSysDtl.getErrorValueType()),
.filter(x -> x>0 && NumberUtil.isIn(devSubtractChannelData(x, v, errSysDtl.getErrorValueType()),
BigDecimal.valueOf(-errSysDtl.getMaxErrorValue()),
BigDecimal.valueOf(errSysDtl.getMaxErrorValue()))).collect(Collectors.toList());
data.setRadius(-errSysDtl.getMaxErrorValue() + "~" + errSysDtl.getMaxErrorValue());

View File

@@ -14,6 +14,7 @@ import com.njcn.gather.detection.pojo.vo.SocketDataMsg;
import com.njcn.gather.detection.pojo.vo.SocketMsg;
import com.njcn.gather.detection.service.PreDetectionService;
import com.njcn.gather.detection.util.socket.CnSocketUtil;
import com.njcn.gather.detection.util.socket.MsgUtil;
import com.njcn.gather.detection.util.socket.SocketManager;
import com.njcn.gather.detection.util.socket.cilent.NettyClient;
@@ -75,10 +76,7 @@ public class PreDetectionServiceImpl implements PreDetectionService {
if (Objects.nonNull(channel) && channel.isActive()) {
System.out.println("进入关闭源。。//////");
SocketDataMsg socketDataMsg = new SocketDataMsg();
socketDataMsg.setOperateCode(SourceOperateCodeEnum.CLOSE_GATHER.getValue());
socketDataMsg.setRequestId(SourceOperateCodeEnum.QUITE_SOURCE.getValue());
SocketManager.sendMsg(param.getUserPageId()+source,JSON.toJSONString(socketDataMsg));
CnSocketUtil.quitSendSource(param);
try {
Thread.sleep(2000);
@@ -105,6 +103,7 @@ public class PreDetectionServiceImpl implements PreDetectionService {
*/
AdPlan plan = iAdPlanService.getById(param.getPlanId());
PqSource pqSource = pqSourceService.getById(plan.getDatasourceId());
param.setSourceId(plan.getDatasourceId());
if (ObjectUtil.isNotNull(plan)) {
plan.setErrorSysId(plan.getId());
String code = dictDataService.getDictDataById(plan.getPattern()).getCode();
@@ -122,6 +121,58 @@ public class PreDetectionServiceImpl implements PreDetectionService {
}
}
@Override
public void coefficientCheck(PreDetectionParam param) {
System.out.println("进来了啊啊啊啊啊啊啊啊啊啊啊啊啊----------------------------------------------------------------");
Channel channel = SocketManager.getChannelByUserId(param.getUserPageId() + source);
System.out.println("存活的源=========================="+channel);
if (Objects.nonNull(channel) && channel.isActive()) {
System.out.println("进入关闭源。。//////");
CnSocketUtil.quitSendSource(param);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
SocketManager.removeUser(param.getUserPageId() + source);
SocketManager.removeUser(param.getUserPageId() + dev);
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
AdPlanSource planSource = adPlanSourceService.getOne(new LambdaQueryWrapper<AdPlanSource>()
.eq(AdPlanSource::getPlanId, param.getPlanId())
);
if (ObjectUtil.isNotNull(planSource)) {
SourceInitialize sourceParam = pqSourceService.getSourceInitializeParam(planSource.getSourceId());
if (ObjectUtil.isNotNull(sourceParam)) {
//开始组装socket报文请求头
socketDevResponseService.initList(param);
socketSourceResponseService.initList(param);
SocketMsg<String> msg = new SocketMsg<>();
msg.setRequestId(SourceOperateCodeEnum.YJC_YTXJY.getValue());
msg.setOperateCode(SourceOperateCodeEnum.INIT_GATHER.getValue());
msg.setData(JSON.toJSONString(sourceParam));
param.setSourceId(sourceParam.getSourceId());
NettyClient.socketClient(ip, port, param.getUserPageId(), MsgUtil.toJsonWithNewLinePlain(msg), new NettySourceClientHandler(param, sourceResponseService));
} else {
throw new BusinessException(DetectionResponseEnum.SOURCE_INFO_NOT);
}
} else {
throw new BusinessException(DetectionResponseEnum.PLAN_AND_SOURCE_NOT);
}
}
}
private void sendYtxSocket(PreDetectionParam param) {
@@ -134,7 +185,7 @@ public class PreDetectionServiceImpl implements PreDetectionService {
//开始组装socket报文请求头
socketDevResponseService.initList(param);
socketSourceResponseService.initList(param);
SocketMsg msg = new SocketMsg();
SocketMsg<String> msg = new SocketMsg<>();
msg.setRequestId(SourceOperateCodeEnum.YJC_YTXJY.getValue());
msg.setOperateCode(SourceOperateCodeEnum.INIT_GATHER.getValue());
msg.setData(JSON.toJSONString(sourceParam));

View File

@@ -1,6 +1,7 @@
package com.njcn.gather.detection.util.socket;
import com.alibaba.fastjson.JSON;
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;
@@ -32,6 +33,9 @@ public class CnSocketUtil {
SocketMsg<String> socketMsg = new SocketMsg<>();
socketMsg.setRequestId(SourceOperateCodeEnum.QUITE_SOURCE.getValue());
socketMsg.setOperateCode(SourceOperateCodeEnum.CLOSE_GATHER.getValue());
JSONObject jsonObject = new JSONObject();
jsonObject.put("sourceId",param.getSourceId());
socketMsg.setData(jsonObject.toJSONString());
SocketManager.sendMsg(param.getUserPageId() + handlerSourceStr, JSON.toJSONString(socketMsg));
}

View File

@@ -1,10 +1,14 @@
package com.njcn.gather.detection.util.socket;
import cn.hutool.core.util.ObjectUtil;
import com.njcn.gather.detection.pojo.dto.DevXiNumData;
import com.njcn.gather.device.device.pojo.vo.PreDetection;
import com.njcn.gather.device.script.pojo.po.SourceIssue;
import io.netty.channel.Channel;
import io.netty.channel.nio.NioEventLoopGroup;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -75,10 +79,16 @@ public class SocketManager {
*/
private static List<SourceIssue> sourceIssueList = new CopyOnWriteArrayList<>();
//用于存储pq_script_checkdata表里Value_Type与树字典表code
public static Map<String, String> valueTypeMap = new HashMap<>();
public static List<PreDetection> temXiDevList = new ArrayList<>();
private static volatile Boolean paused = false;
public static void addSourceList(List<SourceIssue> sList) {
sourceIssueList = sList;
// System.out.println(sList);