发送录波指令、调用录波算法、解析录波数据

This commit is contained in:
caozehui
2025-09-05 15:26:46 +08:00
parent e11107eb8f
commit ecafa996a3
29 changed files with 924 additions and 196 deletions

View File

@@ -0,0 +1,18 @@
package com.njcn.gather.detection.pojo.dto;
import lombok.Data;
/**
* @author caozehui
* @data 2025-09-01
*/
@Data
public class WaveCommandDTO {
private String ip;
private Integer port;
private String oper;
private Integer line;
}

View File

@@ -0,0 +1,14 @@
package com.njcn.gather.detection.pojo.dto;
import lombok.Data;
/**
* @author caozehui
* @data 2025-09-01
*/
@Data
public class WaveResultDTO {
private String id;
private String path;
}

View File

@@ -51,7 +51,8 @@ public enum SourceOperateCodeEnum {
YJC_ALIGN("yjc_align","实时数据对齐校验"), YJC_ALIGN("yjc_align","实时数据对齐校验"),
YJC_MXYZXJY("yjc_mxyzxjy", "模型一致性校验"), YJC_MXYZXJY("yjc_mxyzxjy", "模型一致性校验"),
FORMAL_REAL("formal_real","正式检测"), FORMAL_REAL("formal_real","正式检测"),
RECORD_WAVE("record_wave","启动录波"), RECORD_WAVE_STEP1("record_wave_step1","启动录波_step1"),
RECORD_WAVE_STEP2("record_wave_step2","启动录波_step2"),
// SIMULATE_REAL("simulate_real","模拟检测"), // SIMULATE_REAL("simulate_real","模拟检测"),
Coefficient_Check("Coefficient_Check","系数校验"), Coefficient_Check("Coefficient_Check","系数校验"),
QUITE("quit","关闭设备通讯初始化"), QUITE("quit","关闭设备通讯初始化"),
@@ -101,7 +102,8 @@ public enum SourceOperateCodeEnum {
/** /**
* ftp文件传送指令 * ftp文件传送指令
*/ */
FTP_SEND_01("FTP_SEND$01", "发送文件"),; FTP_SEND_01("FTP_SEND$01", "发送文件"),
RDRE$01("RDRE$01", "启动录波");
private final String value; private final String value;
private final String msg; private final String msg;

View File

@@ -41,7 +41,8 @@ public enum SourceResponseCodeEnum {
ALL_SUCCESS(25001,"校验成功"), ALL_SUCCESS(25001,"校验成功"),
FAIL(25002,"失败"), FAIL(25002,"失败"),
ALL_FAIL(25003,"校验失败"), ALL_FAIL(25003,"校验失败"),
RECEIVE_DATA_TIME_OUT(25004,"接收数据超时") RECEIVE_DATA_TIME_OUT(25004,"接收数据超时"),
REAL_DATA_CHECK_FAIL(25005,"实时数据校验失败")

View File

@@ -838,7 +838,7 @@ public class DetectionServiceImpl {
return getInteger(isData); return getInteger(isData);
} }
private static Integer getInteger(List<Integer> isData) { public Integer getInteger(List<Integer> isData) {
if (CollUtil.isNotEmpty(isData)) { if (CollUtil.isNotEmpty(isData)) {
List<Integer> isQualified = isData.stream().filter(x -> ResultEnum.QUALIFIED.getValue() == x || ResultEnum.NOT_QUALIFIED.getValue() == x).collect(Collectors.toList()); List<Integer> isQualified = isData.stream().filter(x -> ResultEnum.QUALIFIED.getValue() == x || ResultEnum.NOT_QUALIFIED.getValue() == x).collect(Collectors.toList());
if (CollUtil.isNotEmpty(isQualified)) { if (CollUtil.isNotEmpty(isQualified)) {
@@ -1524,9 +1524,10 @@ public class DetectionServiceImpl {
* @param dataRule 数据处理原则 * @param dataRule 数据处理原则
* @param numMap 第几次检测 key为设备id_通道号value为第几次检测 * @param numMap 第几次检测 key为设备id_通道号value为第几次检测
* @param code 结果表code * @param code 结果表code
* @param waveNum 第几次录波
* @return key为被检设备ip_通道号、value为是否合格1合格 2不合格 4无法处理 * @return key为被检设备ip_通道号、value为是否合格1合格 2不合格 4无法处理
*/ */
public List<DevLineTestResult> processing(List<DevData> devDataList, List<DevData> standardDevDataList, Map<String, String> parsIp, Map<String, String> devIdMapComm, List<String> testItemCodeList, String errorSysId, DictDataEnum dataRule, Map<String, Integer> numMap, String code) { public List<DevLineTestResult> processing(List<DevData> devDataList, List<DevData> standardDevDataList, Map<String, String> parsIp, Map<String, String> devIdMapComm, List<String> testItemCodeList, String errorSysId, DictDataEnum dataRule, Map<String, Integer> numMap, String code, Integer waveNum) {
Map<String, List<DevData>> devDataMap = devDataList.stream().collect(Collectors.groupingBy(obj -> obj.getId().split("_")[0])); Map<String, List<DevData>> devDataMap = devDataList.stream().collect(Collectors.groupingBy(obj -> obj.getId().split("_")[0]));
Map<String, List<DevData>> standardDevDataMap = standardDevDataList.stream().collect(Collectors.groupingBy(DevData::getId)); Map<String, List<DevData>> standardDevDataMap = standardDevDataList.stream().collect(Collectors.groupingBy(DevData::getId));
@@ -1541,7 +1542,7 @@ public class DetectionServiceImpl {
Map<String, List<Integer>> chnResultMap = new HashMap<>(); Map<String, List<Integer>> chnResultMap = new HashMap<>();
devMonitorMap.forEach((devMoniterId, devData) -> { devMonitorMap.forEach((devMoniterId, devData) -> {
String[] split = devMoniterId.split(CnSocketUtil.SPLIT_TAG); String[] split = devMoniterId.split(CnSocketUtil.SPLIT_TAG);
Map<String, Integer> map = singleMonitorProcessing(devData, standardDevDataMap.get(parsIp.get(devMoniterId)), devIdMapComm, testItemCodeList, errorSysId, dataRule, numMap.get(devId + CnSocketUtil.SPLIT_TAG + split[1]), code); Map<String, Integer> map = singleMonitorProcessing(devData, standardDevDataMap.get(parsIp.get(devMoniterId)), devIdMapComm, testItemCodeList, errorSysId, dataRule, numMap.get(devId + CnSocketUtil.SPLIT_TAG + split[1]), code, waveNum);
map.forEach((key, value) -> { map.forEach((key, value) -> {
DevLineTestResult devLineTestResult = new DevLineTestResult(); DevLineTestResult devLineTestResult = new DevLineTestResult();
devLineTestResult.setDeviceId(devId); devLineTestResult.setDeviceId(devId);
@@ -1575,9 +1576,10 @@ public class DetectionServiceImpl {
* @param dataRule 数据处理原则 * @param dataRule 数据处理原则
* @param num 第几次检测 * @param num 第几次检测
* @param code 结果表code * @param code 结果表code
* @param waveNum 第几次录波
* @return * @return
*/ */
private Map<String, Integer> singleMonitorProcessing(List<DevData> devDataList, List<DevData> standardDevDataList, Map<String, String> devIdMapComm, List<String> testItemCodeList, String errorSysId, DictDataEnum dataRule, Integer num, String code) { private Map<String, Integer> singleMonitorProcessing(List<DevData> devDataList, List<DevData> standardDevDataList, Map<String, String> devIdMapComm, List<String> testItemCodeList, String errorSysId, DictDataEnum dataRule, Integer num, String code, Integer waveNum) {
Map<String, Integer> resultMap = new HashMap<>(); Map<String, Integer> resultMap = new HashMap<>();
if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList) && CollUtil.isNotEmpty(testItemCodeList)) { if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList) && CollUtil.isNotEmpty(testItemCodeList)) {
SysTestConfig oneConfig = sysTestConfigService.getOneConfig(); SysTestConfig oneConfig = sysTestConfigService.getOneConfig();
@@ -1618,41 +1620,38 @@ public class DetectionServiceImpl {
switch (anEnum) { switch (anEnum) {
case FREQ: case FREQ:
resultMap.put(PowerIndexEnum.FREQ.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fHz, DetectionCodeEnum.FREQ.getCode(), dataRule, num, code, oneConfig.getScale())); resultMap.put(PowerIndexEnum.FREQ.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fHz, DetectionCodeEnum.FREQ.getCode(), dataRule, num, code, oneConfig.getScale(), waveNum));
break; break;
case VRMS: case VRMS:
case PVRMS: case PVRMS:
// 如果是角型接法且存在角型接法的一些指标,则不进行使用角型接线的指标。反之,则使用相别的指标。 // 如果是角型接法且存在角型接法的一些指标,则不进行使用角型接线的指标。反之,则使用相别的指标。
resultMap.put(PowerIndexEnum.V.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fUn, (isDelta && isExitDelta ? DetectionCodeEnum.PVRMS.getCode() : DetectionCodeEnum.VRMS.getCode()), dataRule, num, code, oneConfig.getScale())); resultMap.put(PowerIndexEnum.V.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fUn, (isDelta && isExitDelta ? DetectionCodeEnum.PVRMS.getCode() : DetectionCodeEnum.VRMS.getCode()), dataRule, num, code, oneConfig.getScale(), waveNum));
break; break;
case IRMS: case IRMS:
resultMap.put(PowerIndexEnum.I.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fIn, DetectionCodeEnum.IRMS.getCode(), dataRule, num, code, oneConfig.getScale())); resultMap.put(PowerIndexEnum.I.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fIn, DetectionCodeEnum.IRMS.getCode(), dataRule, num, code, oneConfig.getScale(), waveNum));
break; break;
// case P_FUND:
// resultMap.put(PowerIndexEnum.P.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, true, fUn * fIn, DetectionCodeEnum.P_FUND.getCode(), dataRule, num, code, oneConfig.getScale()));
// break;
case V_UNBAN: case V_UNBAN:
resultMap.put(PowerIndexEnum.IMBV.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, false, fUn, DetectionCodeEnum.V_UNBAN.getCode(), dataRule, num, code, oneConfig.getScale())); resultMap.put(PowerIndexEnum.IMBV.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, false, fUn, DetectionCodeEnum.V_UNBAN.getCode(), dataRule, num, code, oneConfig.getScale(), waveNum));
break; break;
case I_UNBAN: case I_UNBAN:
resultMap.put(PowerIndexEnum.IMBA.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, false, fIn, DetectionCodeEnum.I_UNBAN.getCode(), dataRule, num, code, oneConfig.getScale())); resultMap.put(PowerIndexEnum.IMBA.getKey(), isQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, false, fIn, DetectionCodeEnum.I_UNBAN.getCode(), dataRule, num, code, oneConfig.getScale(), waveNum));
break; break;
case V2_50: case V2_50:
case PV2_50: case PV2_50:
resultMap.put(PowerIndexEnum.HV.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn, HARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale())); resultMap.put(PowerIndexEnum.HV.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn, HARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum));
break; break;
case I2_50: case I2_50:
resultMap.put(PowerIndexEnum.HI.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, I, fIn, HARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale())); resultMap.put(PowerIndexEnum.HI.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, I, fIn, HARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum));
break; break;
case P2_50: case P2_50:
resultMap.put(PowerIndexEnum.HP.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, HP, fUn * fIn, HARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale())); resultMap.put(PowerIndexEnum.HP.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, HP, fUn * fIn, HARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum));
break; break;
case SV_1_49: case SV_1_49:
case PSV_1_49: case PSV_1_49:
resultMap.put(PowerIndexEnum.HSV.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn, INHARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale())); resultMap.put(PowerIndexEnum.HSV.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, U, fUn, INHARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum));
break; break;
case SI_1_49: case SI_1_49:
resultMap.put(PowerIndexEnum.HSI.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, I, fIn, INHARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale())); resultMap.put(PowerIndexEnum.HSI.getKey(), isHarmQualified(devDataList, standardDevDataList, devIdMapComm, pqErrSysDtls, I, fIn, INHARMONIC_FLAG, isDelta && isExitDelta, dataRule, num, code, oneConfig.getScale(), waveNum));
break; break;
case UNKNOWN_ERROR: case UNKNOWN_ERROR:
break; break;
@@ -1669,7 +1668,7 @@ public class DetectionServiceImpl {
* @param devDataList 监测点数据 * @param devDataList 监测点数据
* @return * @return
*/ */
private boolean isExitDeltaIndex(String devId, List<DevData> devDataList) { public boolean isExitDeltaIndex(String devId, List<DevData> devDataList) {
if (CollUtil.isNotEmpty(devDataList)) { if (CollUtil.isNotEmpty(devDataList)) {
List<String> deltaIndex = Arrays.asList(DetectionCodeEnum.PVRMS.getCode(), List<String> deltaIndex = Arrays.asList(DetectionCodeEnum.PVRMS.getCode(),
DetectionCodeEnum.PV2_50.getCode(), DetectionCodeEnum.PV2_50.getCode(),
@@ -1710,6 +1709,7 @@ public class DetectionServiceImpl {
* @param num 第几次检测 * @param num 第几次检测
* @param code 结果表code * @param code 结果表code
* @param scale 小数点位数 * @param scale 小数点位数
* @param waveNum 第几次录波
* @return * @return
*/ */
private Integer isQualified(List<DevData> devDataList, private Integer isQualified(List<DevData> devDataList,
@@ -1722,12 +1722,14 @@ public class DetectionServiceImpl {
DictDataEnum dataRule, DictDataEnum dataRule,
Integer num, Integer num,
String code, String code,
Integer scale) { Integer scale,
Integer waveNum) {
List<ContrastNonHarmonicResult> info = new ArrayList<>(); List<ContrastNonHarmonicResult> info = new ArrayList<>();
if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList) && CollUtil.isNotEmpty(errSysDtls)) { if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList) && CollUtil.isNotEmpty(errSysDtls)) {
Map<String, List<List<Double>>> map = devListMap(devDataList, standardDevDataList, desc, dataRule); Map<String, List<List<Double>>> map = devListMap(devDataList, standardDevDataList, desc, dataRule);
ContrastNonHarmonicResult result = new ContrastNonHarmonicResult(); ContrastNonHarmonicResult result = new ContrastNonHarmonicResult();
result.setWaveNum(waveNum);
String[] split1 = devDataList.get(0).getId().split(CnSocketUtil.SPLIT_TAG); String[] split1 = devDataList.get(0).getId().split(CnSocketUtil.SPLIT_TAG);
String[] split2 = standardDevDataList.get(0).getId().split(CnSocketUtil.SPLIT_TAG); String[] split2 = standardDevDataList.get(0).getId().split(CnSocketUtil.SPLIT_TAG);
@@ -1738,7 +1740,7 @@ public class DetectionServiceImpl {
result.setDataType(DataSourceEnum.REAL_DATA.getValue()); result.setDataType(DataSourceEnum.REAL_DATA.getValue());
if (map.containsKey(TYPE_T)) { if (map.containsKey(TYPE_T)) {
List<DetectionData> tList = rangeComparisonList(map.get(TYPE_T).get(0), map.get(TYPE_T).get(1), errSysDtls, fData, scale); List<DetectionData> tList = rangeComparisonList(map.get(TYPE_T).get(0), map.get(TYPE_T).get(1), errSysDtls, fData, scale, dataRule);
result.setTValue(JSON.toJSONString(tList)); result.setTValue(JSON.toJSONString(tList));
result.setResultFlag(setResultFlag(tList)); result.setResultFlag(setResultFlag(tList));
} else { } else {
@@ -1755,7 +1757,7 @@ public class DetectionServiceImpl {
phases.add(TYPE_B); phases.add(TYPE_B);
for (String phase : phases) { for (String phase : phases) {
List<DetectionData> phaseList = rangeComparisonList(map.get(phase).get(0), map.get(phase).get(1), errSysDtls, fData, scale); List<DetectionData> phaseList = rangeComparisonList(map.get(phase).get(0), map.get(phase).get(1), errSysDtls, fData, scale, dataRule);
resultFlag.addAll(phaseList); resultFlag.addAll(phaseList);
BiConsumer<ContrastNonHarmonicResult, List<DetectionData>> setter = setters.get(phase); BiConsumer<ContrastNonHarmonicResult, List<DetectionData>> setter = setters.get(phase);
setter.accept(result, phaseList); setter.accept(result, phaseList);
@@ -1786,6 +1788,7 @@ public class DetectionServiceImpl {
* @param num 第几次检测 * @param num 第几次检测
* @param code 结果表code * @param code 结果表code
* @param scale 小数点位数 * @param scale 小数点位数
* @param waveNum 第几次录波
* @return * @return
*/ */
public Integer isHarmQualified(List<DevData> devDataList, public Integer isHarmQualified(List<DevData> devDataList,
@@ -1799,7 +1802,8 @@ public class DetectionServiceImpl {
DictDataEnum dataRule, DictDataEnum dataRule,
Integer num, Integer num,
String code, String code,
Integer scale) { Integer scale,
Integer waveNum) {
List<ContrastHarmonicResult> info = new ArrayList<>(); List<ContrastHarmonicResult> info = new ArrayList<>();
if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList) && CollUtil.isNotEmpty(errSysDtls)) { if (CollUtil.isNotEmpty(devDataList) && CollUtil.isNotEmpty(standardDevDataList) && CollUtil.isNotEmpty(errSysDtls)) {
String fundCode = ""; String fundCode = "";
@@ -1836,6 +1840,7 @@ public class DetectionServiceImpl {
Map<String, List<Map<Double, List<Double>>>> devMap = devHarmListMap(devDataList, standardDevDataList, fundCode, harmCode, harmonicFlag, dataRule); Map<String, List<Map<Double, List<Double>>>> devMap = devHarmListMap(devDataList, standardDevDataList, fundCode, harmCode, harmonicFlag, dataRule);
ContrastHarmonicResult result = new ContrastHarmonicResult(); ContrastHarmonicResult result = new ContrastHarmonicResult();
result.setWaveNum(waveNum);
String[] split1 = devDataList.get(0).getId().split("_"); String[] split1 = devDataList.get(0).getId().split("_");
String[] split2 = standardDevDataList.get(0).getId().split("_"); String[] split2 = standardDevDataList.get(0).getId().split("_");
@@ -1845,9 +1850,9 @@ public class DetectionServiceImpl {
result.setAdType(errSysDtls.get(0).getScriptType()); result.setAdType(errSysDtls.get(0).getScriptType());
result.setDataType(DataSourceEnum.REAL_DATA.getValue()); result.setDataType(DataSourceEnum.REAL_DATA.getValue());
List<DetectionData> integerBooleanA = harmRangeComparison(devMap.get(TYPE_A).get(0), devMap.get(TYPE_A).get(1), errSysDtls, type, fData, scale); List<DetectionData> integerBooleanA = harmRangeComparison(devMap.get(TYPE_A).get(0), devMap.get(TYPE_A).get(1), errSysDtls, type, fData, scale, dataRule);
List<DetectionData> integerBooleanB = harmRangeComparison(devMap.get(TYPE_B).get(0), devMap.get(TYPE_A).get(1), errSysDtls, type, fData, scale); List<DetectionData> integerBooleanB = harmRangeComparison(devMap.get(TYPE_B).get(0), devMap.get(TYPE_A).get(1), errSysDtls, type, fData, scale, dataRule);
List<DetectionData> integerBooleanC = harmRangeComparison(devMap.get(TYPE_C).get(0), devMap.get(TYPE_A).get(1), errSysDtls, type, fData, scale); List<DetectionData> integerBooleanC = harmRangeComparison(devMap.get(TYPE_C).get(0), devMap.get(TYPE_A).get(1), errSysDtls, type, fData, scale, dataRule);
reflectHarmonic(true, "a", integerBooleanA, result, harmonicFlag); reflectHarmonic(true, "a", integerBooleanA, result, harmonicFlag);
reflectHarmonic(true, "b", integerBooleanB, result, harmonicFlag); reflectHarmonic(true, "b", integerBooleanB, result, harmonicFlag);
reflectHarmonic(true, "c", integerBooleanC, result, harmonicFlag); reflectHarmonic(true, "c", integerBooleanC, result, harmonicFlag);
@@ -1963,21 +1968,29 @@ public class DetectionServiceImpl {
} }
break; break;
case CP95_VALUE: case CP95_VALUE:
if (CollUtil.isNotEmpty(aDev)) {
int cp95Idx = DetectionUtil.getCP95Idx(aDev); int cp95Idx = DetectionUtil.getCP95Idx(aDev);
aDev = Collections.singletonList(aDev.get(cp95Idx)); aDev = Collections.singletonList(aDev.get(cp95Idx));
aStandardDev = Collections.singletonList(aStandardDev.get(cp95Idx)); aStandardDev = Collections.singletonList(aStandardDev.get(cp95Idx));
}
cp95Idx = DetectionUtil.getCP95Idx(bDev); if (CollUtil.isNotEmpty(bDev)) {
int cp95Idx = DetectionUtil.getCP95Idx(bDev);
bDev = Collections.singletonList(bDev.get(cp95Idx)); bDev = Collections.singletonList(bDev.get(cp95Idx));
bStandardDev = Collections.singletonList(bStandardDev.get(cp95Idx)); bStandardDev = Collections.singletonList(bStandardDev.get(cp95Idx));
}
cp95Idx = DetectionUtil.getCP95Idx(cDev); if (CollUtil.isNotEmpty(cDev)) {
int cp95Idx = DetectionUtil.getCP95Idx(cDev);
cDev = Collections.singletonList(cDev.get(cp95Idx)); cDev = Collections.singletonList(cDev.get(cp95Idx));
cStandardDev = Collections.singletonList(cStandardDev.get(cp95Idx)); cStandardDev = Collections.singletonList(cStandardDev.get(cp95Idx));
}
cp95Idx = DetectionUtil.getCP95Idx(tDev); if (CollUtil.isNotEmpty(tDev)) {
int cp95Idx = DetectionUtil.getCP95Idx(tDev);
tDev = Collections.singletonList(tDev.get(cp95Idx)); tDev = Collections.singletonList(tDev.get(cp95Idx));
tStandardDev = Collections.singletonList(tStandardDev.get(cp95Idx)); tStandardDev = Collections.singletonList(tStandardDev.get(cp95Idx));
}
break; break;
case AVG_VALUE: case AVG_VALUE:
aDev = DetectionUtil.getAvgDoubles(aDev); aDev = DetectionUtil.getAvgDoubles(aDev);
@@ -2129,12 +2142,15 @@ public class DetectionServiceImpl {
} }
break; break;
case CP95_VALUE: case CP95_VALUE:
if (CollUtil.isNotEmpty(value)) {
int cp95Idx = DetectionUtil.getCP95Idx(value); int cp95Idx = DetectionUtil.getCP95Idx(value);
List<Double> newValue = Collections.singletonList(value.get(cp95Idx));
value.clear(); value.clear();
value.addAll(Collections.singletonList(value.get(cp95Idx))); value.addAll(newValue);
Double standardCP95Data = standardDevMap.get(typeKey).get(key).get(cp95Idx); Double standardCP95Data = standardDevMap.get(typeKey).get(key).get(cp95Idx);
standardDevMap.get(typeKey).get(key).clear(); standardDevMap.get(typeKey).get(key).clear();
standardDevMap.get(typeKey).get(key).add(standardCP95Data); standardDevMap.get(typeKey).get(key).add(standardCP95Data);
}
break; break;
case AVG_VALUE: case AVG_VALUE:
List<Double> avgDoubles = DetectionUtil.getAvgDoubles(value); List<Double> avgDoubles = DetectionUtil.getAvgDoubles(value);
@@ -2163,14 +2179,16 @@ public class DetectionServiceImpl {
* @param pqErrSysDtls 误差体系 * @param pqErrSysDtls 误差体系
* @param fData 额定值 * @param fData 额定值
* @param scale 小数点精度 * @param scale 小数点精度
* @param dataRule 数据处理原则
* @return * @return
*/ */
public List<DetectionData> rangeComparisonList(List<Double> devDataList, public List<DetectionData> rangeComparisonList(List<Double> devDataList,
List<Double> standardDevDataList, List<Double> standardDevDataList,
List<PqErrSysDtls> pqErrSysDtls, List<PqErrSysDtls> pqErrSysDtls,
Double fData, Double fData,
Integer scale) { Integer scale,
return this.getDetectionDataList(devDataList, standardDevDataList, null, pqErrSysDtls, fData, null, scale); DictDataEnum dataRule) {
return this.getDetectionDataList(devDataList, standardDevDataList, null, pqErrSysDtls, fData, null, scale, dataRule);
} }
/** /**
@@ -2182,6 +2200,7 @@ public class DetectionServiceImpl {
* @param type U或者I或者HP * @param type U或者I或者HP
* @param fData 额定值 * @param fData 额定值
* @param scale 小数点精度 * @param scale 小数点精度
* @param dataRule 数据处理原则
* @return * @return
*/ */
public List<DetectionData> harmRangeComparison(Map<Double, List<Double>> devMap, public List<DetectionData> harmRangeComparison(Map<Double, List<Double>> devMap,
@@ -2189,7 +2208,8 @@ public class DetectionServiceImpl {
List<PqErrSysDtls> pqErrSysDtls, List<PqErrSysDtls> pqErrSysDtls,
String type, String type,
Double fData, Double fData,
Integer scale) { Integer scale,
DictDataEnum dataRule) {
List<DetectionData> detectionDataList = new ArrayList<>(); List<DetectionData> detectionDataList = new ArrayList<>();
List<Double> U1List = new ArrayList<>(); List<Double> U1List = new ArrayList<>();
if (U.equals(type)) { if (U.equals(type)) {
@@ -2197,7 +2217,7 @@ public class DetectionServiceImpl {
} }
standardDevMap.forEach((harmonicNum, stdDataList) -> { standardDevMap.forEach((harmonicNum, stdDataList) -> {
if (harmonicNum != 0.0) { if (harmonicNum != 0.0) {
detectionDataList.addAll(this.getDetectionDataList(devMap.get(harmonicNum), stdDataList, U1List, pqErrSysDtls, fData, harmonicNum, scale)); detectionDataList.addAll(this.getDetectionDataList(devMap.get(harmonicNum), stdDataList, U1List, pqErrSysDtls, fData, harmonicNum, scale, dataRule));
} }
}); });
return detectionDataList; return detectionDataList;
@@ -2213,10 +2233,12 @@ public class DetectionServiceImpl {
* @param fData 额定值 * @param fData 额定值
* @param harmonicNum (间)谐波次数 * @param harmonicNum (间)谐波次数
* @param scale 小数点精度 * @param scale 小数点精度
* @param dataRule 数据处理原则
* @return * @return
*/ */
private List<DetectionData> getDetectionDataList(List<Double> devDataList, List<Double> standardDevDataList, List<Double> U1List, List<PqErrSysDtls> pqErrSysDtls, Double fData, Double harmonicNum, Integer scale) { private List<DetectionData> getDetectionDataList(List<Double> devDataList, List<Double> standardDevDataList, List<Double> U1List, List<PqErrSysDtls> pqErrSysDtls, Double fData, Double harmonicNum, Integer scale, DictDataEnum dataRule) {
List<DetectionData> detectionDataList = new ArrayList<>(); List<DetectionData> detectionDataList = new ArrayList<>();
boolean flag = false;
for (int i = 0; i < standardDevDataList.size(); i++) { for (int i = 0; i < standardDevDataList.size(); i++) {
Double U1 = CollUtil.isNotEmpty(U1List) ? U1List.get(i) : null; Double U1 = CollUtil.isNotEmpty(U1List) ? U1List.get(i) : null;
Double stdDevData = BigDecimal.valueOf(standardDevDataList.get(i)).setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue(); Double stdDevData = BigDecimal.valueOf(standardDevDataList.get(i)).setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
@@ -2249,12 +2271,22 @@ public class DetectionServiceImpl {
if (in) { if (in) {
detectionData.setIsData(ResultEnum.QUALIFIED.getValue()); detectionData.setIsData(ResultEnum.QUALIFIED.getValue());
if (dataRule == DictDataEnum.AT_WILL_VALUE) {
flag = true;
}
} else { } else {
detectionData.setIsData(ResultEnum.NOT_QUALIFIED.getValue()); detectionData.setIsData(ResultEnum.NOT_QUALIFIED.getValue());
} }
} }
detectionDataList.add(detectionData); if (dataRule == DictDataEnum.AT_WILL_VALUE) {
detectionDataList.clear();
} }
detectionDataList.add(detectionData);
if (flag) {
break;
}
}
return detectionDataList; return detectionDataList;
} }
} }

View File

@@ -5,6 +5,7 @@ import cn.hutool.core.util.ObjectUtil;
import com.njcn.gather.detection.pojo.po.DevData; import com.njcn.gather.detection.pojo.po.DevData;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.io.File;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -407,4 +408,18 @@ public class DetectionUtil {
} }
return null; return null;
} }
/**
* 检查文件是否存在
*/
public static void checkFileExists(String filePath, String description) {
File file = new File(filePath);
if (!file.exists()) {
System.err.println("警告: " + description + " 不存在: " + filePath);
System.err.println("请确保文件路径正确,或修改测试中的文件路径");
} else {
System.out.println(description + " 存在: " + filePath);
System.out.println(" 文件大小: " + file.length() + " bytes");
}
}
} }

View File

@@ -57,11 +57,11 @@ public class CnSocketUtil {
/** /**
* 比对式-退出检测 * 比对式-退出检测
*/ */
public static void contrastSendquit(String loginName,boolean isRemoveSocket) { public static void contrastSendquit(String loginName, SourceOperateCodeEnum operateCode, boolean isRemoveSocket) {
System.out.println("比对式-发送关闭备通讯模块指令。。。。。。。。"); System.out.println("比对式-发送关闭备通讯模块指令。。。。。。。。");
SocketMsg<String> socketMsg = new SocketMsg<>(); SocketMsg<String> socketMsg = new SocketMsg<>();
socketMsg.setRequestId(SourceOperateCodeEnum.QUITE.getValue()); socketMsg.setRequestId(SourceOperateCodeEnum.QUITE.getValue());
socketMsg.setOperateCode(SourceOperateCodeEnum.QUIT_INIT_02.getValue()); socketMsg.setOperateCode(operateCode.getValue());
SocketManager.sendMsg(loginName + CONTRAST_DEV_TAG, JSON.toJSONString(socketMsg)); SocketManager.sendMsg(loginName + CONTRAST_DEV_TAG, JSON.toJSONString(socketMsg));
// WebServiceManager.removePreDetectionParam(); // WebServiceManager.removePreDetectionParam();
FormalTestManager.isRemoveSocket = isRemoveSocket; FormalTestManager.isRemoveSocket = isRemoveSocket;

View File

@@ -1,11 +1,14 @@
package com.njcn.gather.detection.util.socket; package com.njcn.gather.detection.util.socket;
import com.google.common.collect.HashBiMap; import com.google.common.collect.HashBiMap;
import com.njcn.gather.detection.pojo.dto.WaveResultDTO;
import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum; import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum;
import com.njcn.gather.detection.pojo.po.DevData; import com.njcn.gather.detection.pojo.po.DevData;
import com.njcn.gather.detection.pojo.vo.DevLineTestResult;
import com.njcn.gather.device.pojo.enums.PatternEnum; import com.njcn.gather.device.pojo.enums.PatternEnum;
import com.njcn.gather.device.pojo.vo.PreDetection; import com.njcn.gather.device.pojo.vo.PreDetection;
import com.njcn.gather.plan.pojo.po.AdPlan; import com.njcn.gather.plan.pojo.po.AdPlan;
import com.njcn.gather.plan.pojo.po.AdPlanTestConfig;
import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum; import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum;
import java.util.ArrayList; import java.util.ArrayList;
@@ -45,7 +48,7 @@ public class FormalTestManager {
public static List<String> monitorIdListComm = new ArrayList<>(); public static List<String> monitorIdListComm = new ArrayList<>();
/** /**
* 所有参与检测的监测点。key:监测点idip_通道号,value:检测点实体 * 所有参与检测的监测点。key:监测点ip_通道号,value:检测点实体
*/ */
public static Map<String, PreDetection.MonitorListDTO> monitorMap = new HashMap<>(); public static Map<String, PreDetection.MonitorListDTO> monitorMap = new HashMap<>();
@@ -84,6 +87,8 @@ public class FormalTestManager {
*/ */
public static AdPlan currentTestPlan; public static AdPlan currentTestPlan;
public static AdPlanTestConfig curretntTestPlanConfig;
/** /**
* 当前正在检测的模式 * 当前正在检测的模式
*/ */
@@ -128,4 +133,19 @@ public class FormalTestManager {
* 第几次监测 key为设备监测点id,value为第几次监测 * 第几次监测 key为设备监测点id,value为第几次监测
*/ */
public static Map<String, Integer> numMap = new HashMap<>(); public static Map<String, Integer> numMap = new HashMap<>();
/**
* 存放录波相关数据。key:设备ip_通道号,value:WaveResultDTO数据
*/
public static Map<String, WaveResultDTO> waveResultDTOMap = new HashMap<>();
/**
* 录波组数
*/
public static Integer waveNum;
/**
* 每次录波检测结果
*/
public static List<DevLineTestResult> preNumTestResultList = new ArrayList<>();
} }

View File

@@ -6,6 +6,7 @@ import com.njcn.gather.detection.pojo.param.PreDetectionParam;
import com.njcn.gather.detection.pojo.vo.SocketDataMsg; import com.njcn.gather.detection.pojo.vo.SocketDataMsg;
import com.njcn.gather.detection.pojo.vo.SocketMsg; import com.njcn.gather.detection.pojo.vo.SocketMsg;
import com.njcn.gather.detection.util.socket.CnSocketUtil; import com.njcn.gather.detection.util.socket.CnSocketUtil;
import com.njcn.gather.detection.util.socket.FormalTestManager;
import com.njcn.gather.detection.util.socket.MsgUtil; import com.njcn.gather.detection.util.socket.MsgUtil;
import com.njcn.gather.detection.util.socket.SocketManager; import com.njcn.gather.detection.util.socket.SocketManager;
import io.netty.channel.ChannelHandlerContext; import io.netty.channel.ChannelHandlerContext;
@@ -192,7 +193,11 @@ public class HeartbeatHandler extends SimpleChannelInboundHandler<String> {
} else if (CnSocketUtil.SOURCE_TAG.equals(handlerType)) { } else if (CnSocketUtil.SOURCE_TAG.equals(handlerType)) {
CnSocketUtil.quitSendSource(param); CnSocketUtil.quitSendSource(param);
} else { } else {
CnSocketUtil.contrastSendquit(param.getUserPageId(), true); if(FormalTestManager.currentStep==SourceOperateCodeEnum.RECORD_WAVE_STEP1 || FormalTestManager.currentStep==SourceOperateCodeEnum.RECORD_WAVE_STEP2){
CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, true);
}else{
CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, true);
}
} }
log.debug("退出指令已发送等待3秒后清理连接 - 设备类型: {}", handlerType); log.debug("退出指令已发送等待3秒后清理连接 - 设备类型: {}", handlerType);
} catch (Exception e) { } catch (Exception e) {

View File

@@ -264,8 +264,8 @@ public class NettyClient {
private static void setupPipeline(ChannelPipeline pipeline, private static void setupPipeline(ChannelPipeline pipeline,
PreDetectionParam param, SimpleChannelInboundHandler<String> handler) { PreDetectionParam param, SimpleChannelInboundHandler<String> handler) {
// 基础编解码器:处理数据格式转换和粘包拆包 // 基础编解码器:处理数据格式转换和粘包拆包
// 按行分割,最大10KB // 按行分割,最大20KB
pipeline.addLast(new LineBasedFrameDecoder(10240)) pipeline.addLast(new LineBasedFrameDecoder(10240*2))
// 字节转字符串 // 字节转字符串
.addLast(new StringDecoder(CharsetUtil.UTF_8)) .addLast(new StringDecoder(CharsetUtil.UTF_8))
// 字符串转字节 // 字符串转字节

View File

@@ -5,9 +5,7 @@ import com.njcn.gather.detection.handler.SocketContrastResponseService;
import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum; import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum;
import com.njcn.gather.detection.pojo.enums.SourceResponseCodeEnum; import com.njcn.gather.detection.pojo.enums.SourceResponseCodeEnum;
import com.njcn.gather.detection.pojo.param.PreDetectionParam; import com.njcn.gather.detection.pojo.param.PreDetectionParam;
import com.njcn.gather.detection.pojo.vo.DevLineTestResult;
import com.njcn.gather.detection.pojo.vo.SocketDataMsg; import com.njcn.gather.detection.pojo.vo.SocketDataMsg;
import com.njcn.gather.detection.pojo.vo.WebSocketVO;
import com.njcn.gather.detection.util.socket.CnSocketUtil; import com.njcn.gather.detection.util.socket.CnSocketUtil;
import com.njcn.gather.detection.util.socket.FormalTestManager; import com.njcn.gather.detection.util.socket.FormalTestManager;
import com.njcn.gather.detection.util.socket.MsgUtil; import com.njcn.gather.detection.util.socket.MsgUtil;
@@ -27,9 +25,7 @@ import java.io.IOException;
import java.net.ConnectException; import java.net.ConnectException;
import java.net.ProtocolException; import java.net.ProtocolException;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.stream.Collectors;
/** /**
* @author caozehui * @author caozehui
@@ -64,7 +60,11 @@ public class NettyContrastClientHandler extends SimpleChannelInboundHandler<Stri
socketContrastResponseService.deal(param, msg); socketContrastResponseService.deal(param, msg);
} catch (Exception e) { } catch (Exception e) {
log.error("处理服务端消息异常", e); log.error("处理服务端消息异常", e);
CnSocketUtil.contrastSendquit(param.getUserPageId(), true); if (FormalTestManager.currentStep == SourceOperateCodeEnum.RECORD_WAVE_STEP1 || FormalTestManager.currentStep == SourceOperateCodeEnum.RECORD_WAVE_STEP2) {
CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_03, true);
} else {
CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, true);
}
} }
} }
@@ -91,7 +91,7 @@ public class NettyContrastClientHandler extends SimpleChannelInboundHandler<Stri
if (FormalTestManager.isRemoveSocket) { if (FormalTestManager.isRemoveSocket) {
//实时数据 //实时数据
if (SocketManager.contrastClockMap.get(DataSourceEnum.REAL_DATA) >= 60) { if (SocketManager.contrastClockMap.get(DataSourceEnum.REAL_DATA) >= 60) {
CnSocketUtil.contrastSendquit(param.getUserPageId(), false); CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, false);
System.out.println("超时处理-----》" + "实时数据已超时----------------关闭"); System.out.println("超时处理-----》" + "实时数据已超时----------------关闭");
timeoutSend(); timeoutSend();
} }
@@ -126,7 +126,7 @@ public class NettyContrastClientHandler extends SimpleChannelInboundHandler<Stri
System.out.println("Unknown exception caught: " + cause.getMessage()); System.out.println("Unknown exception caught: " + cause.getMessage());
WebServiceManager.sendDetectionErrorMessage(param.getUserPageId(), SourceOperateCodeEnum.DEVICE_ERROR); WebServiceManager.sendDetectionErrorMessage(param.getUserPageId(), SourceOperateCodeEnum.DEVICE_ERROR);
} }
CnSocketUtil.contrastSendquit(param.getUserPageId(),true); CnSocketUtil.contrastSendquit(param.getUserPageId(), SourceOperateCodeEnum.QUIT_INIT_02, true);
// socketContrastResponseService.backCheckState(param); // socketContrastResponseService.backCheckState(param);
ctx.close(); ctx.close();
} }

View File

@@ -60,7 +60,7 @@ public class NettyServer {
ch.pipeline() ch.pipeline()
//空闲状态的handler //空闲状态的handler
// 添加LineBasedFrameDecoder来按行分割数据 // 添加LineBasedFrameDecoder来按行分割数据
.addLast(new LineBasedFrameDecoder(10240)) .addLast(new LineBasedFrameDecoder(10240*2))
.addLast(new StringDecoder(CharsetUtil.UTF_8)) .addLast(new StringDecoder(CharsetUtil.UTF_8))
.addLast(new StringEncoder(CharsetUtil.UTF_8)) .addLast(new StringEncoder(CharsetUtil.UTF_8))
.addLast(new DevNettyServerHandler()); .addLast(new DevNettyServerHandler());
@@ -107,7 +107,7 @@ public class NettyServer {
ch.pipeline() ch.pipeline()
//空闲状态的handler //空闲状态的handler
// 添加LineBasedFrameDecoder来按行分割数据 // 添加LineBasedFrameDecoder来按行分割数据
.addLast(new LineBasedFrameDecoder(10240)) .addLast(new LineBasedFrameDecoder(10240*2))
.addLast(new StringDecoder(CharsetUtil.UTF_8)) .addLast(new StringDecoder(CharsetUtil.UTF_8))
.addLast(new StringEncoder(CharsetUtil.UTF_8)) .addLast(new StringEncoder(CharsetUtil.UTF_8))
.addLast(new SourceNettyServerHandler()); .addLast(new SourceNettyServerHandler());

View File

@@ -1,6 +1,7 @@
package com.njcn.gather.detection.util.socket.websocket; package com.njcn.gather.detection.util.socket.websocket;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.njcn.gather.detection.pojo.enums.SourceOperateCodeEnum;
import com.njcn.gather.detection.pojo.param.PreDetectionParam; import com.njcn.gather.detection.pojo.param.PreDetectionParam;
import com.njcn.gather.detection.util.socket.CnSocketUtil; import com.njcn.gather.detection.util.socket.CnSocketUtil;
import com.njcn.gather.detection.util.socket.FormalTestManager; import com.njcn.gather.detection.util.socket.FormalTestManager;
@@ -371,8 +372,12 @@ public class WebSocketHandler extends SimpleChannelInboundHandler<TextWebSocketF
// 使用该用户的检测参数关闭Socket连接 // 使用该用户的检测参数关闭Socket连接
log.info("使用用户检测参数关闭Socket连接userId: {}", userId); log.info("使用用户检测参数关闭Socket连接userId: {}", userId);
if (FormalTestManager.patternEnum.equals(PatternEnum.CONTRAST)) { if (FormalTestManager.patternEnum.equals(PatternEnum.CONTRAST)) {
if (FormalTestManager.isRemoveSocket) { if (!FormalTestManager.isRemoveSocket) {
CnSocketUtil.contrastSendquit(preDetectionParam.getUserPageId(), true); if (FormalTestManager.currentStep == SourceOperateCodeEnum.RECORD_WAVE_STEP1 || FormalTestManager.currentStep == SourceOperateCodeEnum.RECORD_WAVE_STEP2) {
CnSocketUtil.contrastSendquit(preDetectionParam.getUserPageId(), SourceOperateCodeEnum.DEV_INIT_GATHER_03, true);
} else if (FormalTestManager.currentStep != SourceOperateCodeEnum.QUITE) {
CnSocketUtil.contrastSendquit(preDetectionParam.getUserPageId(), SourceOperateCodeEnum.DEV_INIT_GATHER_02, true);
}
} else { } else {
boolean channelActive = SocketManager.isChannelActive(preDetectionParam.getUserPageId() + CnSocketUtil.CONTRAST_DEV_TAG); boolean channelActive = SocketManager.isChannelActive(preDetectionParam.getUserPageId() + CnSocketUtil.CONTRAST_DEV_TAG);
if (channelActive) { if (channelActive) {

View File

@@ -57,13 +57,13 @@ public class PreDetection {
/** /**
* 是否支持相角。0不支持1支持 * 是否支持相角。0不支持1支持
*/ */
@JSONField(name = "angle") @JSONField(serialize = false)
private Integer angle; private Integer angle;
/** /**
* 角型接线时是否使用相别的指标来进行检测0表示否1表示是 * 角型接线时是否使用相别的指标来进行检测0表示否1表示是
*/ */
@JSONField(name = "usePhaseIndex") @JSONField(serialize = false)
private Integer usePhaseIndex; private Integer usePhaseIndex;
/** /**

View File

@@ -7,7 +7,6 @@ import com.njcn.gather.device.pojo.enums.TimeCheckResultEnum;
import com.njcn.gather.device.pojo.param.PqDevParam; import com.njcn.gather.device.pojo.param.PqDevParam;
import com.njcn.gather.device.pojo.po.PqDev; import com.njcn.gather.device.pojo.po.PqDev;
import com.njcn.gather.device.pojo.vo.*; import com.njcn.gather.device.pojo.vo.*;
import com.njcn.gather.monitor.pojo.po.PqMonitor;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@@ -118,7 +117,7 @@ public interface IPqDevService extends IService<PqDev> {
* @param humidity * @param humidity
* @return * @return
*/ */
boolean updateResult(boolean isContrast,List<String> ids, List<String> adType, String code,String userId, Float temperature, Float humidity); boolean updateResult(boolean isContrast, List<String> ids, List<String> adType, String code, String userId, Float temperature, Float humidity);
void updatePqDevReportState(String devId, int i); void updatePqDevReportState(String devId, int i);

View File

@@ -21,7 +21,6 @@ import com.njcn.common.pojo.enums.common.DataStateEnum;
import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.exception.BusinessException;
import com.njcn.common.pojo.poi.PullDown; import com.njcn.common.pojo.poi.PullDown;
import com.njcn.common.utils.EncryptionUtil; import com.njcn.common.utils.EncryptionUtil;
import com.njcn.common.utils.JwtUtil;
import com.njcn.db.mybatisplus.constant.DbConstant; import com.njcn.db.mybatisplus.constant.DbConstant;
import com.njcn.gather.device.mapper.PqDevMapper; import com.njcn.gather.device.mapper.PqDevMapper;
import com.njcn.gather.device.pojo.enums.*; import com.njcn.gather.device.pojo.enums.*;
@@ -49,7 +48,6 @@ import com.njcn.gather.user.user.service.ISysUserService;
import com.njcn.web.factory.PageFactory; import com.njcn.web.factory.PageFactory;
import com.njcn.web.utils.ExcelUtil; import com.njcn.web.utils.ExcelUtil;
import com.njcn.web.utils.PoiUtil; import com.njcn.web.utils.PoiUtil;
import com.njcn.web.utils.RequestUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.ObjectUtils;
@@ -436,7 +434,7 @@ public class PqDevServiceImpl extends ServiceImpl<PqDevMapper, PqDev> implements
@Override @Override
public boolean updateResult(boolean isContrast, List<String> ids, List<String> adType, String code,String userId, Float temperature, Float humidity) { public boolean updateResult(boolean isContrast, List<String> ids, List<String> adType, String code, String userId, Float temperature, Float humidity) {
if (CollUtil.isNotEmpty(ids)) { if (CollUtil.isNotEmpty(ids)) {
SysTestConfig config = sysTestConfigService.getOneConfig(); SysTestConfig config = sysTestConfigService.getOneConfig();

View File

@@ -13,6 +13,7 @@
</foreach> </foreach>
</where> </where>
</if> </if>
and State = 1
</select> </select>
</mapper> </mapper>

View File

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

View File

@@ -8,5 +8,12 @@ import com.njcn.gather.plan.pojo.po.AdPlanTestConfig;
* @date 2025-08-25 * @date 2025-08-25
*/ */
public interface IAdPlanTestConfigService extends IService<AdPlanTestConfig> { public interface IAdPlanTestConfigService extends IService<AdPlanTestConfig> {
/**
* 根据计划id获取测试配置
*
* @param planId 计划id
* @return
*/
AdPlanTestConfig getByPlanId(String planId);
} }

View File

@@ -574,6 +574,14 @@ public class AdPlanServiceImpl extends ServiceImpl<AdPlanMapper, AdPlan> impleme
map.put("scriptName", dictTree.getName()); map.put("scriptName", dictTree.getName());
result.add(map); result.add(map);
} }
if (adPlan.getDatasourceId().contains(DataSourceEnum.WAVE_DATA.getValue())) {
Map<String, String> map = new HashMap<>();
map.put("id", "wave_data");
map.put("code", DataSourceEnum.WAVE_DATA.getValue());
map.put("scriptName", DataSourceEnum.WAVE_DATA.getMsg());
result.add(map);
}
} else { } else {
String scriptId = adPlan.getScriptId(); String scriptId = adPlan.getScriptId();
List<PqScriptDtls> scriptDtlsList = pqScriptDtlsService.listPqScriptDtlByScriptId(scriptId); List<PqScriptDtls> scriptDtlsList = pqScriptDtlsService.listPqScriptDtlByScriptId(scriptId);

View File

@@ -14,6 +14,10 @@ import org.springframework.stereotype.Service;
public class AdPlanTestConfigServiceImpl extends ServiceImpl<AdPlanTestConfigMapper, AdPlanTestConfig> public class AdPlanTestConfigServiceImpl extends ServiceImpl<AdPlanTestConfigMapper, AdPlanTestConfig>
implements IAdPlanTestConfigService { implements IAdPlanTestConfigService {
@Override
public AdPlanTestConfig getByPlanId(String planId) {
return this.lambdaQuery().eq(AdPlanTestConfig::getPlanId, planId).last("LIMIT 1").one();
}
} }

View File

@@ -2046,7 +2046,7 @@ public class ResultServiceImpl implements IResultService {
List<DevData> devData = contrastToList(devNonHarmonicRawDataList, devHarmonicRawDataList, testItemMap); List<DevData> devData = contrastToList(devNonHarmonicRawDataList, devHarmonicRawDataList, testItemMap);
List<DevData> standardDevData = contrastToList(stdDevNonHarmonicRawDataList, stdDevHarmonicRawDataList, testItemMap); List<DevData> standardDevData = contrastToList(stdDevNonHarmonicRawDataList, stdDevHarmonicRawDataList, testItemMap);
detectionServiceImpl.processing(devData, standardDevData, parsIp, devIdMapComm, testItemMap.keySet().stream().collect(Collectors.toList()), errorSysId, dataRule, numMap, code); detectionServiceImpl.processing(devData, standardDevData, parsIp, devIdMapComm, testItemMap.keySet().stream().collect(Collectors.toList()), errorSysId, dataRule, numMap, code, null);
}); });
} }

View File

@@ -22,6 +22,7 @@
A_Value_0 float NULL COMMENT 'A相基波有效值', A_Value_0 float NULL COMMENT 'A相基波有效值',
B_Value_0 float NULL COMMENT 'B相基波有效值', B_Value_0 float NULL COMMENT 'B相基波有效值',
C_Value_0 float NULL COMMENT 'B相基波有效值', C_Value_0 float NULL COMMENT 'B相基波有效值',
Wave_Num tinyint(1) unsigned DEFAULT null COMMENT '录波数据第几组',
PRIMARY KEY (Id) PRIMARY KEY (Id)
</when> </when>
<otherwise> <otherwise>
@@ -59,6 +60,7 @@
A_Value_0 json NULL COMMENT 'A相基波有效值', A_Value_0 json NULL COMMENT 'A相基波有效值',
B_Value_0 json NULL COMMENT 'B相基波有效值', B_Value_0 json NULL COMMENT 'B相基波有效值',
C_Value_0 json NULL COMMENT 'B相基波有效值', C_Value_0 json NULL COMMENT 'B相基波有效值',
Wave_Num tinyint(1) unsigned DEFAULT null COMMENT '录波数据第几组',
PRIMARY KEY (Id) PRIMARY KEY (Id)
</when> </when>
<otherwise> <otherwise>

View File

@@ -1,5 +1,6 @@
package com.njcn.gather.storage.pojo.po; package com.njcn.gather.storage.pojo.po;
import io.swagger.models.auth.In;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@@ -26,4 +27,9 @@ public class ContrastBaseResult extends BaseResult {
* 0表示被检设备数据1表示标准设备数据 * 0表示被检设备数据1表示标准设备数据
*/ */
private Integer flag; private Integer flag;
/**
* 录波数据第几组
*/
private Integer waveNum;
} }

View File

@@ -12,10 +12,7 @@ import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -157,7 +154,13 @@ public class DetectionDataServiceImpl extends ReplenishMybatisServiceImpl<Detect
for (String id : ids) { for (String id : ids) {
wrapper1.like(ContrastNonHarmonicResult::getDevMonitorId, id); wrapper1.like(ContrastNonHarmonicResult::getDevMonitorId, id);
} }
noHarm.addAll(contrastNonHarmonicService.list(wrapper1)); List<ContrastNonHarmonicResult> nonHarmonicResultList = contrastNonHarmonicService.list(wrapper1);
Map<String, List<ContrastNonHarmonicResult>> chnMap1 = nonHarmonicResultList.stream().collect(Collectors.groupingBy(x -> x.getDevMonitorId().split("_")[1], Collectors.toList()));
chnMap1.forEach((chn, vList) -> {
ContrastNonHarmonicResult contrastNonHarmonicResult = vList.stream().max(Comparator.comparing(ContrastNonHarmonicResult::getNum)).get();
List<ContrastNonHarmonicResult> maxList = vList.stream().filter(x -> x.getNum() == contrastNonHarmonicResult.getNum()).collect(Collectors.toList());
noHarm.addAll(maxList);
});
DynamicTableNameHandler.remove(); DynamicTableNameHandler.remove();
DynamicTableNameHandler.setTableName("ad_harmonic_result_" + code); DynamicTableNameHandler.setTableName("ad_harmonic_result_" + code);
@@ -166,7 +169,13 @@ public class DetectionDataServiceImpl extends ReplenishMybatisServiceImpl<Detect
for (String id : ids) { for (String id : ids) {
wrapper2.like(ContrastHarmonicResult::getDevMonitorId, id); wrapper2.like(ContrastHarmonicResult::getDevMonitorId, id);
} }
harm.addAll(contrastHarmonicService.list(wrapper2)); List<ContrastHarmonicResult> harmonicResultList = contrastHarmonicService.list(wrapper2);
Map<String, List<ContrastHarmonicResult>> chnMap2 = harmonicResultList.stream().collect(Collectors.groupingBy(x -> x.getDevMonitorId().split("_")[1], Collectors.toList()));
chnMap2.forEach((chn, vList) -> {
ContrastHarmonicResult contrastHarmonicResult = vList.stream().max(Comparator.comparing(ContrastHarmonicResult::getNum)).get();
List<ContrastHarmonicResult> maxList = vList.stream().filter(x -> x.getNum() == contrastHarmonicResult.getNum()).collect(Collectors.toList());
harm.addAll(maxList);
});
DynamicTableNameHandler.remove(); DynamicTableNameHandler.remove();
} else { } else {
List<Integer> disabledScriptDtlIndexs = detectionDataDealMapper.listDisabledScriptDtlIndexs(ids.get(0)); List<Integer> disabledScriptDtlIndexs = detectionDataDealMapper.listDisabledScriptDtlIndexs(ids.get(0));

View File

@@ -49,6 +49,7 @@ public class TableGenServiceImpl implements TableGenService {
"A_Value_0 float NULL COMMENT 'A相基波有效值',\n" + "A_Value_0 float NULL COMMENT 'A相基波有效值',\n" +
"C_Value_0 float NULL COMMENT 'B相基波有效值',\n" + "C_Value_0 float NULL COMMENT 'B相基波有效值',\n" +
"B_Value_0 float NULL COMMENT 'B相基波有效值',\n" + "B_Value_0 float NULL COMMENT 'B相基波有效值',\n" +
"Wave_Num tinyint(1) unsigned DEFAULT null COMMENT '录波数据第几组',\n" +
"PRIMARY KEY (Id)\n" "PRIMARY KEY (Id)\n"
: :
" Script_Id CHAR(32) NOT NULL COMMENT '检测脚本表Id',\n" + " Script_Id CHAR(32) NOT NULL COMMENT '检测脚本表Id',\n" +
@@ -75,6 +76,7 @@ public class TableGenServiceImpl implements TableGenService {
"A_Value_0 json NULL COMMENT 'A相基波有效值',\n" + "A_Value_0 json NULL COMMENT 'A相基波有效值',\n" +
"B_Value_0 json NULL COMMENT 'B相基波有效值',\n" + "B_Value_0 json NULL COMMENT 'B相基波有效值',\n" +
"C_Value_0 json NULL COMMENT 'B相基波有效值',\n" + "C_Value_0 json NULL COMMENT 'B相基波有效值',\n" +
"Wave_Num tinyint(1) unsigned DEFAULT null COMMENT '录波数据第几组',\n" +
"PRIMARY KEY (Id)\n" "PRIMARY KEY (Id)\n"
: :
" Script_Id CHAR(32) NOT NULL COMMENT '检测脚本表Id',\n" + " Script_Id CHAR(32) NOT NULL COMMENT '检测脚本表Id',\n" +

View File

@@ -26,8 +26,8 @@ public class ClockStruct {
* 格式化时间字符串 * 格式化时间字符串
*/ */
public String format() { public String format() {
return String.format("%04d-%02d-%02d %02d:%02d:%02d.%06d", return String.format("%04d-%02d-%02dT%02d:%02d:%02d.%03d",
year, month, day, hour, minute, second, microSecond); year, month, day, hour, minute, second, microSecond/1000);
} }
/** /**

View File

@@ -1,5 +1,6 @@
package com.njcn.gather.tools.comtrade.comparewave.service.impl; package com.njcn.gather.tools.comtrade.comparewave.service.impl;
import com.alibaba.fastjson.JSON;
import com.njcn.gather.tools.comtrade.comparewave.config.PowerQualityConfig; import com.njcn.gather.tools.comtrade.comparewave.config.PowerQualityConfig;
import com.njcn.gather.tools.comtrade.comparewave.core.algorithm.PowerQualityCalculator; import com.njcn.gather.tools.comtrade.comparewave.core.algorithm.PowerQualityCalculator;
import com.njcn.gather.tools.comtrade.comparewave.core.algorithm.WaveformAligner; import com.njcn.gather.tools.comtrade.comparewave.core.algorithm.WaveformAligner;