This commit is contained in:
wr
2024-12-27 16:43:22 +08:00
parent 68381da345
commit 1d8ceb15df
6 changed files with 87 additions and 59 deletions

View File

@@ -70,6 +70,10 @@ public class SocketDevResponseService {
* 装置名称
*/
Map<String, String> devNameMapComm = new HashMap<>();
/**
* 装置id
*/
Map<String, String> devIdMapComm = new HashMap<>();
/**
* 成功结束的装置
*/
@@ -426,7 +430,7 @@ public class SocketDevResponseService {
if (successComm.size() == monitorIdListComm.size()) {
SourceIssue sourceIssue = SocketManager.getSourceTarget(socketDataMsg.getRequestId());
System.out.println("获取sourceIssue"+sourceIssue);
Map<String, Integer> flag = detectionServiceImpl.text(devDataList, sourceIssue, DictDataEnum.AT_WILL_VALUE);
Map<String, Integer> flag = detectionServiceImpl.text(devDataList,devIdMapComm ,sourceIssue, DictDataEnum.AT_WILL_VALUE);
System.out.println(flag);
WebSocketVO<List<DevLineTestResult>> webSocketVO = new WebSocketVO<>();
@@ -676,6 +680,7 @@ public class SocketDevResponseService {
.map(PreDetection.MonitorListDTO::getLineId)
.collect(Collectors.toList());
this.devNameMapComm = pqDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevName));
this.devIdMapComm = pqDevList.stream().collect(Collectors.toMap(PreDetection::getDevIP, PreDetection::getDevId));
}

View File

@@ -5,10 +5,12 @@ import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil;
import com.njcn.gather.detection.pojo.po.DevData;
import com.njcn.gather.detection.pojo.vo.DetectionData;
import com.njcn.gather.device.err.pojo.param.PqErrSysParam;
import com.njcn.gather.device.err.pojo.po.PqErrSysDtls;
import com.njcn.gather.device.err.service.IPqErrSysDtlsService;
import com.njcn.gather.device.script.pojo.po.SourceIssue;
import com.njcn.gather.storage.pojo.po.AdNonHarmonicResult;
import com.njcn.gather.system.dictionary.pojo.enums.DictDataEnum;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
@@ -41,22 +43,11 @@ public class DetectionServiceImpl {
* 开始处理指标类型
* 一共20组数据开始处理格式
*/
public Map<String, Integer> text(List<DevData> dev, SourceIssue issue, DictDataEnum dataRule) {
public Map<String, Integer> text(List<DevData> dev,Map<String, String> devIdMapComm, SourceIssue issue, DictDataEnum dataRule) {
Map<String, List<DevData>> devDataMap = dev.stream().collect(Collectors.groupingBy(DevData::getId));
Map<String, Integer> stringBooleanMap = new LinkedHashMap<>();
devDataMap.forEach(((key, value) -> {
Integer num;
Boolean b = DetectionIndexProcessing(value, dataRule, issue);
if (ObjectUtil.isNotNull(b)) {
if (b) {
num = 1;
} else {
num = 2;
}
} else {
num = 4;
}
stringBooleanMap.put(key, num);
stringBooleanMap.put(key, DetectionIndexProcessing(value,devIdMapComm, dataRule, issue));
}));
return stringBooleanMap;
}
@@ -71,7 +62,7 @@ public class DetectionServiceImpl {
* @param sourceIssue 源下发的参数
* @return
*/
public Boolean DetectionIndexProcessing(List<DevData> dev, DictDataEnum dataRule, SourceIssue sourceIssue) {
public Integer DetectionIndexProcessing(List<DevData> dev,Map<String, String> devIdMapComm, DictDataEnum dataRule, SourceIssue sourceIssue) {
PqErrSysParam.DetectionParam param = new PqErrSysParam.DetectionParam();
List<PqErrSysDtls> pqErrSysDtls = pqErrSysDtlsService.listPqErrSysDtlsByPqErrSysIdAndTypes(param);
switch ("V") {
@@ -79,22 +70,23 @@ public class DetectionServiceImpl {
* 频率
*/
case "FREQ":
return isQualified(dev, pqErrSysDtls, F, sourceIssue, dataRule, "FREQ");
return isQualified(dev,devIdMapComm, pqErrSysDtls, F, sourceIssue, dataRule, "FREQ").getResultFlag();
/**
* 电压
*/
case "V":
return isQualified(dev, pqErrSysDtls, U, sourceIssue, dataRule, "VRMS");
System.out.println(isQualified(dev,devIdMapComm, pqErrSysDtls, F, sourceIssue, dataRule, "FREQ"));
return isQualified(dev,devIdMapComm, pqErrSysDtls, U, sourceIssue, dataRule, "VRMS").getResultFlag();
/**
* 电流
*/
case "I":
return isQualified(dev, pqErrSysDtls, I, sourceIssue, dataRule, "IRMS");
return isQualified(dev,devIdMapComm, pqErrSysDtls, I, sourceIssue, dataRule, "IRMS").getResultFlag();
/**
* 谐波类
*/
case "H":
return isHarmQualified(dev, pqErrSysDtls, U, sourceIssue, dataRule, 2);
break;
/**
* 功率
*/
@@ -104,8 +96,8 @@ public class DetectionServiceImpl {
* 闪变
*/
case "F":
/**
break;
/**
* 暂态
*/
case "VOLTAGE":
@@ -191,7 +183,7 @@ public class DetectionServiceImpl {
* @param dataRule 数据处理原则
* @return
*/
public Boolean isQualified(List<DevData> dev, List<PqErrSysDtls> pqErrSysDtls, String type, SourceIssue sourceIssue, DictDataEnum dataRule, String code) {
public AdNonHarmonicResult isQualified(List<DevData> dev,Map<String, String> devIdMapComm, List<PqErrSysDtls> pqErrSysDtls, String type, SourceIssue sourceIssue, DictDataEnum dataRule, String code) {
Map<String, List<Double>> map = devListMap(dev, dataRule, code);
Double fData = 1.0;
if (U.equals(type)) {
@@ -203,31 +195,49 @@ public class DetectionServiceImpl {
if (F.equals(type)) {
fData = sourceIssue.getFFreq();
}
AdNonHarmonicResult result=new AdNonHarmonicResult();
String[] split = dev.get(0).getId().split("_");
String devID = devIdMapComm.get(split);
result.setMonitorId(devID+"_"+split[1]);
result.setScriptId(sourceIssue.getScriptId());
result.setIndex(sourceIssue.getIndex());
result.setDataType("avg");
if (map.containsKey(TYPE_T)) {
return rangeComparisonList(map.get(TYPE_T), pqErrSysDtls, fData, 1.0, dataRule);
DetectionData t = rangeComparisonList(map.get(TYPE_T), pqErrSysDtls, fData, 1.0, dataRule);
result.setTValue(t.getData()+"_"+t.getIsData());
result.setResultFlag(t.getIsData());
} else {
//取出源所对应的相别信息
List<SourceIssue.ChannelListDTO> channelTypeAList = sourceIssue.getChannelList().stream()
.filter(x -> (type + "a").equals(x.getChannelType()))
.collect(Collectors.toList());
Boolean a = rangeComparisonList(map.get(TYPE_A), pqErrSysDtls, fData, channelTypeAList.get(0).getFAmp(), dataRule);
DetectionData a = rangeComparisonList(map.get(TYPE_A), pqErrSysDtls, fData, channelTypeAList.get(0).getFAmp(), dataRule);
result.setAValue(a.getData()+"_"+a.getIsData());
List<SourceIssue.ChannelListDTO> channelTypeBList = sourceIssue.getChannelList().stream()
.filter(x -> (type + "b").equals(x.getChannelType()))
.collect(Collectors.toList());
Boolean b = rangeComparisonList(map.get(TYPE_B), pqErrSysDtls, fData, channelTypeBList.get(0).getFAmp(), dataRule);
DetectionData b = rangeComparisonList(map.get(TYPE_B), pqErrSysDtls, fData, channelTypeBList.get(0).getFAmp(), dataRule);
result.setBValue(b.getData()+"_"+b.getIsData());
List<SourceIssue.ChannelListDTO> channelTypeCList = sourceIssue.getChannelList().stream()
.filter(x -> (type + "c").equals(x.getChannelType()))
.collect(Collectors.toList());
Boolean c = rangeComparisonList(map.get(TYPE_C), pqErrSysDtls, fData, channelTypeCList.get(0).getFAmp(), dataRule);
if (ObjectUtil.isAllNotEmpty(a, b, c)) {
return a && b && c;
DetectionData c = rangeComparisonList(map.get(TYPE_C), pqErrSysDtls, fData, channelTypeCList.get(0).getFAmp(), dataRule);
result.setCValue(c.getData()+"_"+c.getIsData());
List<Integer> numbers = Arrays.asList(a.getIsData(), b.getIsData(), a.getIsData());
if(numbers.stream().allMatch(n -> n == 1)){
result.setResultFlag(1);
}
if (ObjectUtil.isAllEmpty(a, b, c)) {
return null;
if(numbers.stream().allMatch(n -> n == 2)){
result.setResultFlag(1);
}
if(numbers.stream().allMatch(n -> n == 3)){
result.setResultFlag(1);
}
}
return null;
return result;
}
/**
@@ -430,7 +440,10 @@ public class DetectionServiceImpl {
* @param dataRule 数据处理原则
* @returnd
*/
public Boolean rangeComparisonList(List<Double> listT, List<PqErrSysDtls> pqErrSysDtls, Double data, Double channelData, DictDataEnum dataRule) {
public DetectionData rangeComparisonList(List<Double> listT, List<PqErrSysDtls> pqErrSysDtls, Double data, Double channelData, DictDataEnum dataRule) {
DetectionData detectionData=new DetectionData();
detectionData.setIsData(4);
detectionData.setData(listT.get(0));
//先根据源所下发的数据,是否在误差体系范围内在则可以进行误差体系判断
//获得误差体系
List<PqErrSysDtls> errSysDtls = pqErrSysDtls.stream().filter(x -> rangeComparison(multiply(x.getStartValue(), data, x.getConditionType()),
@@ -446,24 +459,32 @@ public class DetectionServiceImpl {
List<Double> qualifiedList = listT.stream().filter(x -> NumberUtil.isIn(devSubtractChannelData(x, channelData, errSysDtl.getErrorValueType()),
BigDecimal.valueOf(-errSysDtl.getMaxErrorValue()),
BigDecimal.valueOf(errSysDtl.getMaxErrorValue()))).collect(Collectors.toList());
switch (dataRule) {
case AT_WILL_VALUE:
case CP95_VALUE:
case AVG_VALUE:
if (qualifiedList.size() > 0) {
return true;
}
break;
case SECTION_VALUE:
case Own_value:
if (qualifiedList.size() == listT.size()) {
return true;
}
break;
if(CollUtil.isNotEmpty(qualifiedList)){
detectionData.setData(qualifiedList.get(0));
switch (dataRule) {
case AT_WILL_VALUE:
case CP95_VALUE:
case AVG_VALUE:
if (qualifiedList.size() > 0) {
detectionData.setIsData(1);
}else{
detectionData.setIsData(2);
}
break;
case SECTION_VALUE:
case Own_value:
if (qualifiedList.size() == listT.size()) {
detectionData.setIsData(1);
}else{
detectionData.setIsData(2);
}
break;
}
}else{
detectionData.setIsData(2);
}
return false;
}
return null;
return detectionData;
}
/**

View File

@@ -6,14 +6,15 @@
CREATE TABLE ad_non_harmonic_${code} (
Monitor_Id CHAR(32) NOT NULL COMMENT '监测点Id',
Time_Id DATETIME NOT NULL COMMENT '时间',
Script_Dtls_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id字典表',
Script_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id字典表',
index int(4) NOT NULL COMMENT '总检测脚本中的测试项序号',
AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表',
Data_Type CHAR(32) NOT NULL COMMENT '数据指标只有数据源为分钟统计时候才会使用最大、最小、平均、CP95默认平均值字典表',
A_Value varchar(30) NOT NULL COMMENT 'A相值',
B_Value varchar(30) NOT NULL COMMENT 'B相值',
C_Value varchar(30) NOT NULL COMMENT 'C相值',
T_Value varchar(30) NOT NULL COMMENT 'T相值(没有相别的则存这里)',
PRIMARY KEY (Monitor_Id, Time_Id, Script_Dtls_Id, AD_Type, Data_Type)
PRIMARY KEY (Monitor_Id, Time_Id, Script_Id, index, Data_Type)
) COMMENT='监测数据表';
</update>
@@ -27,7 +28,8 @@
CREATE TABLE ad_non_harmonic_result_${code} (
Monitor_Id CHAR(32) NOT NULL COMMENT '监测点Id',
Time_Id DATETIME NOT NULL COMMENT '时间',
Script_Dtls_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id字典表',
Script_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id字典表',
index int(4) NOT NULL COMMENT '总检测脚本中的测试项序号',
AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表',
Data_Type CHAR(32) NOT NULL COMMENT '数据指标只有数据源为分钟统计时候才会使用最大、最小、平均、CP95默认平均值字典表',
Result_Flag int(1) NOT NULL COMMENT '0.不合格 1.合格',
@@ -35,7 +37,7 @@
B_Value varchar(30) NOT NULL COMMENT 'B相值',
C_Value varchar(30) NOT NULL COMMENT 'C相值',
T_Value varchar(30) NOT NULL COMMENT 'T相值(没有相别的则存这里)',
PRIMARY KEY (Monitor_Id, Time_Id, Script_Dtls_Id, AD_Type, Data_Type)
PRIMARY KEY (Monitor_Id, Time_Id, Script_Id, index, Data_Type)
) COMMENT='监测数据表';
</update>

View File

@@ -34,7 +34,7 @@ public class AdHarmonicResult {
/**
* 检测脚本子表Id字典表
*/
private String scriptDtlsId;
private String scriptId;
private Integer index;

View File

@@ -34,7 +34,7 @@ public class AdNonHarmonicResult {
/**
* 检测脚本子表Id字典表
*/
private String scriptDtlsId;
private String scriptId;
private Integer index;

View File

@@ -38,25 +38,25 @@ public class TableGenServiceImpl implements TableGenService {
String sql = "CREATE TABLE AD_Harmonic_"+code+" (\n" +
" Monitor_Id CHAR(32) NOT NULL COMMENT '监测点Id',\n" +
" Time_Id DATETIME NOT NULL COMMENT '时间',\n" +
" Script_Dtls_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id字典表',\n" +
" Script_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id字典表',\n" +
" index int(5) NOT NULL COMMENT '总检测脚本中的测试项序号',\n" +
" AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表',\n" +
" Data_Type CHAR(32) NOT NULL COMMENT '数据指标只有数据源为分钟统计时候才会使用最大、最小、平均、CP95默认平均值字典表',\n" +
A+B+C+
" PRIMARY KEY (Monitor_Id, Time_Id, Script_Dtls_Id, AD_Type, Data_Type)\n" +
" PRIMARY KEY (Monitor_Id, Time_Id, Scripts_Id, index, Data_Type)\n" +
") COMMENT='监测数据表';";
tableGenMapper.genAdHarmonicTable(sql);
String sql2 = "CREATE TABLE AD_Harmonic_Result_"+code+" (\n" +
" Monitor_Id CHAR(32) NOT NULL COMMENT '监测点Id',\n" +
" Time_Id DATETIME NOT NULL COMMENT '时间',\n" +
" Script_Dtls_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id字典表',\n" +
" Script_Id CHAR(32) NOT NULL COMMENT '检测脚本子表Id字典表',\n" +
" index int(5) NOT NULL COMMENT '总检测脚本中的测试项序号',\n" +
" AD_Type CHAR(32) NOT NULL COMMENT '检测指标,字典表',\n" +
" Data_Type CHAR(32) NOT NULL COMMENT '数据指标只有数据源为分钟统计时候才会使用最大、最小、平均、CP95默认平均值字典表',\n" +
" Result_Flag int(1) NOT NULL COMMENT '0.不合格 1.合格',\n" +
A+B+C+
" PRIMARY KEY (Monitor_Id, Time_Id, Script_Dtls_Id, AD_Type, Data_Type)\n" +
" PRIMARY KEY (Monitor_Id, Time_Id, Script_Dtls_Id, index, Data_Type)\n" +
") COMMENT='监测数据表';";
tableGenMapper.genAdHarmonicTable(sql2);
}