代码调整
This commit is contained in:
@@ -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());
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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<>();
|
||||
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -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","小电压校准结束"),
|
||||
|
||||
/**
|
||||
* 检测类型
|
||||
|
||||
@@ -13,7 +13,7 @@ import java.util.List;
|
||||
public class PreDetectionParam {
|
||||
|
||||
/**
|
||||
* 操作类型 0.预检测 1.正式检测
|
||||
* 操作类型 0.预检测 1.正式检测 2.系数校验
|
||||
*/
|
||||
private String operateType = "0";
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@@ -20,6 +20,9 @@ public interface PreDetectionService {
|
||||
void sourceCommunicationCheck(PreDetectionParam param);
|
||||
|
||||
|
||||
void coefficientCheck(PreDetectionParam param);
|
||||
|
||||
|
||||
boolean startTest(PreDetectionParam param);
|
||||
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
<result column="Series" property="devCode" />
|
||||
<result column="Dev_Key" property="devKey" />
|
||||
<result column="icdType" property="icdType" />
|
||||
<result column="Dev_Volt" property="devVolt" />
|
||||
<result column="Dev_Curr" property="devCurr" />
|
||||
|
||||
<collection
|
||||
property="monitorList"
|
||||
@@ -31,6 +33,8 @@
|
||||
d.Dev_Chns as devChns,
|
||||
d.Series,
|
||||
d.Dev_Key,
|
||||
d.Dev_Volt,
|
||||
d.Dev_Curr,
|
||||
p.name icdType
|
||||
FROM
|
||||
pq_dev d
|
||||
|
||||
@@ -69,6 +69,10 @@ public class PreDetection {
|
||||
|
||||
@JSONField(serialize = false)
|
||||
private Integer devChns;
|
||||
|
||||
private Double devVolt;
|
||||
|
||||
private Double devCurr;
|
||||
/**
|
||||
* 监测点信息
|
||||
*/
|
||||
|
||||
@@ -12,6 +12,13 @@ public enum CommonEnum {
|
||||
|
||||
NO("0", "否"),
|
||||
YES("1", "是"),
|
||||
|
||||
|
||||
COEFFICIENT_TEST("0","系数校验"),
|
||||
PRE_TEST("1","预检测"),
|
||||
FORMAL_TEST("2","正式检测"),
|
||||
TIME_TEST("3","守时检测"),
|
||||
PHASE_TEST("4","相序检测"),
|
||||
;
|
||||
|
||||
private String value;
|
||||
|
||||
@@ -23,8 +23,8 @@ public class PqScriptIssueParam {
|
||||
@ApiModelProperty("终端id集合")
|
||||
private List<String> devIds;
|
||||
|
||||
@ApiModelProperty("是否是相序校验")
|
||||
private Boolean isPhaseSequence;
|
||||
@ApiModelProperty()
|
||||
private String isPhaseSequence;
|
||||
|
||||
@ApiModelProperty("源id")
|
||||
private String sourceId;
|
||||
|
||||
@@ -3,8 +3,11 @@ package com.njcn.gather.device.script.service;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.njcn.gather.device.script.pojo.param.PqScriptCheckDataParam;
|
||||
import com.njcn.gather.device.script.pojo.po.PqScriptCheckData;
|
||||
import com.njcn.gather.device.script.pojo.vo.PqScriptCheckDataVO;
|
||||
import com.njcn.gather.system.dictionary.pojo.po.DictTree;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
|
||||
/**
|
||||
@@ -22,4 +25,7 @@ public interface IPqScriptCheckDataService extends IService<PqScriptCheckData> {
|
||||
*/
|
||||
List<String> getValueType(PqScriptCheckDataParam param);
|
||||
|
||||
|
||||
Map<String,String> getValueTypeMap(String scriptId);
|
||||
|
||||
}
|
||||
|
||||
@@ -1,20 +1,26 @@
|
||||
package com.njcn.gather.device.script.service.impl;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.github.yulichang.toolkit.JoinWrappers;
|
||||
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.njcn.common.pojo.enums.common.DataStateEnum;
|
||||
import com.njcn.gather.device.script.mapper.PqScriptCheckDataMapper;
|
||||
import com.njcn.gather.device.script.pojo.param.PqScriptCheckDataParam;
|
||||
import com.njcn.gather.device.script.pojo.po.PqScriptCheckData;
|
||||
import com.njcn.gather.device.script.pojo.vo.PqScriptCheckDataVO;
|
||||
import com.njcn.gather.device.script.service.IPqScriptCheckDataService;
|
||||
import com.njcn.gather.system.dictionary.mapper.DictTreeMapper;
|
||||
import com.njcn.gather.system.dictionary.pojo.po.DictTree;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
@@ -31,6 +37,8 @@ public class PqScriptCheckDataServiceImpl extends ServiceImpl<PqScriptCheckDataM
|
||||
private final String V="real$V2-50";
|
||||
private final String SV="real$SV_1-49";
|
||||
|
||||
private final DictTreeMapper dictTreeMapper;
|
||||
|
||||
@Override
|
||||
public List<String> getValueType(PqScriptCheckDataParam param) {
|
||||
MPJLambdaWrapper<PqScriptCheckData> queryWrapper = new MPJLambdaWrapper<>();
|
||||
@@ -56,4 +64,21 @@ public class PqScriptCheckDataServiceImpl extends ServiceImpl<PqScriptCheckDataM
|
||||
}
|
||||
return new ArrayList<>();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String,String> getValueTypeMap(String scriptId) {
|
||||
LambdaQueryWrapper<PqScriptCheckData> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.select(PqScriptCheckData::getValueType)
|
||||
.eq(PqScriptCheckData::getScriptId, scriptId)
|
||||
.eq(PqScriptCheckData::getEnable, DataStateEnum.ENABLE.getCode());
|
||||
List<PqScriptCheckData> pqScriptCheckData = this.baseMapper.selectList(queryWrapper);
|
||||
|
||||
LambdaQueryWrapper<DictTree> dictTreeLambdaQueryWrapper = new LambdaQueryWrapper<>();
|
||||
dictTreeLambdaQueryWrapper.in(DictTree::getId,pqScriptCheckData.stream().map(PqScriptCheckData::getValueType).distinct().collect(Collectors.toList()));
|
||||
List<DictTree> dictTreeList = dictTreeMapper.selectList(dictTreeLambdaQueryWrapper);
|
||||
Map<String,String> map = dictTreeList.stream().collect(Collectors.toMap(DictTree::getCode,DictTree::getId));
|
||||
return map;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
||||
import com.njcn.common.pojo.enums.common.DataStateEnum;
|
||||
import com.njcn.gather.device.device.pojo.po.PqDev;
|
||||
import com.njcn.gather.device.device.service.IPqDevService;
|
||||
import com.njcn.gather.device.pojo.enums.CommonEnum;
|
||||
import com.njcn.gather.device.script.mapper.PqScriptDtlsMapper;
|
||||
import com.njcn.gather.device.script.mapper.PqScriptMapper;
|
||||
import com.njcn.gather.device.script.pojo.param.PqScriptCheckDataParam;
|
||||
@@ -28,6 +29,7 @@ import org.springframework.transaction.annotation.Transactional;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* @author caozehui
|
||||
@@ -207,17 +209,23 @@ public class PqScriptDtlsServiceImpl extends ServiceImpl<PqScriptDtlsMapper, PqS
|
||||
return this.getBaseMapper().selectJoinList(PqScriptDtls.class, wrapper).stream().map(PqScriptDtls::getIndex).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
private List<PqScriptDtls> pqScriptDtls(String scriptId, Boolean isPhaseSequence, Double volt, Double curr) {
|
||||
private List<PqScriptDtls> pqScriptDtls(String scriptId, String isPhaseSequence, Double volt, Double curr) {
|
||||
List<PqScriptDtls> pqScriptDtls;
|
||||
MPJLambdaWrapper<PqScriptDtls> queryWrapper = new MPJLambdaWrapper<>();
|
||||
queryWrapper.selectAll(PqScriptDtls.class)
|
||||
.selectAs(DictTree::getCode, PqScriptDtls::getScriptCode)
|
||||
.leftJoin(DictTree.class, DictTree::getId, PqScriptDtls::getScriptType)
|
||||
.eq(PqScriptDtls::getEnable, 1);;
|
||||
if (isPhaseSequence) {
|
||||
if (isPhaseSequence.equals(CommonEnum.PHASE_TEST.getValue())) {
|
||||
//相序
|
||||
queryWrapper.eq(PqScriptDtls::getIndex, -1)
|
||||
.eq(PqScriptDtls::getEnable, 1);
|
||||
pqScriptDtls = this.list(queryWrapper);
|
||||
}else if(isPhaseSequence.equals(CommonEnum.COEFFICIENT_TEST.getValue())){
|
||||
//系数
|
||||
queryWrapper.in(PqScriptDtls::getIndex, Stream.of(-2,-3).collect(Collectors.toList()))
|
||||
.eq(PqScriptDtls::getEnable, 1);
|
||||
pqScriptDtls = this.list(queryWrapper);
|
||||
} else {
|
||||
//先获取检测脚本类型是否相对值 true相对值 false绝对值(相对值要乘额定值,绝对值不需要处理)
|
||||
Boolean isValueType = pqScriptMapper.selectScriptIsValueType(scriptId);
|
||||
|
||||
@@ -33,10 +33,10 @@
|
||||
AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表',
|
||||
Data_Type CHAR(32) NOT NULL COMMENT '数据指标,只有数据源为分钟统计时候才会使用(最大、最小、平均、CP95,默认平均值),字典表',
|
||||
Result_Flag int(1) NOT NULL COMMENT '0.不合格 1.合格',
|
||||
A_Value varchar(30) NULL COMMENT 'A相值',
|
||||
B_Value varchar(30) NULL COMMENT 'B相值',
|
||||
C_Value varchar(30) NULL COMMENT 'C相值',
|
||||
T_Value varchar(30) NULL COMMENT 'T相值(没有相别的则存这里)',
|
||||
A_Value json NULL COMMENT 'A相值',
|
||||
B_Value json NULL COMMENT 'B相值',
|
||||
C_Value json NULL COMMENT 'C相值',
|
||||
T_Value json NULL COMMENT 'T相值(没有相别的则存这里)',
|
||||
PRIMARY KEY (Monitor_Id, Script_Id, Sort, Data_Type)
|
||||
) COMMENT='监测数据表';
|
||||
</update>
|
||||
|
||||
@@ -25,13 +25,13 @@ public class TableGenServiceImpl implements TableGenService {
|
||||
StringBuilder C = new StringBuilder();
|
||||
for(int i=1;i<=50;i++){
|
||||
if(i == 1){
|
||||
A.append("A_Value_").append(i).append(" varchar(30) NULL COMMENT 'A相基波',");
|
||||
B.append("B_Value_").append(i).append(" varchar(30) NULL COMMENT 'B相基波',");
|
||||
C.append("C_Value_").append(i).append(" varchar(30) NULL COMMENT 'C相基波',");
|
||||
A.append("A_Value_").append(i).append(" json NULL COMMENT 'A相基波',");
|
||||
B.append("B_Value_").append(i).append(" json NULL COMMENT 'B相基波',");
|
||||
C.append("C_Value_").append(i).append(" json NULL COMMENT 'C相基波',");
|
||||
}else {
|
||||
A.append("A_Value_").append(i).append(" varchar(30) NULL COMMENT '").append(i).append("次A相谐波',");
|
||||
B.append("B_Value_").append(i).append(" varchar(30) NULL COMMENT '").append(i).append("次B相谐波',");
|
||||
C.append("C_Value_").append(i).append(" varchar(30) NULL COMMENT '").append(i).append("次C相谐波',");
|
||||
A.append("A_Value_").append(i).append(" json NULL COMMENT '").append(i).append("次A相谐波',");
|
||||
B.append("B_Value_").append(i).append(" json NULL COMMENT '").append(i).append("次B相谐波',");
|
||||
C.append("C_Value_").append(i).append(" json NULL COMMENT '").append(i).append("次C相谐波',");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user