1.调整相序校验返回信息

This commit is contained in:
wr
2025-01-15 17:52:34 +08:00
parent f3a0bb75ee
commit c571f870d8
2 changed files with 106 additions and 141 deletions

View File

@@ -829,9 +829,8 @@ public class SocketDevResponseService {
List<SourceIssue> sourceIssues = scriptDtlsService.listSourceIssue(sourceParam);
List<SourceCompareDev> info = new ArrayList<>();
if (CollUtil.isNotEmpty(sourceIssues)) {
for (DevData dev : devInfo) {
info.addAll(devIsSource(dev, sourceIssues.get(0)));
}
devInfo.stream().sorted(Comparator.comparing(DevData::getId));
info.addAll(devIsSource(devInfo, sourceIssues.get(0)));
}
if (CollUtil.isNotEmpty(info)) {
SocketDataMsg dataMsg = new SocketDataMsg();
@@ -840,18 +839,7 @@ public class SocketDevResponseService {
dataMsg.setCode(SourceResponseCodeEnum.SUCCESS.getCode());
for (SourceCompareDev sourceCompareDev : info) {
String temStr = "未知指标";
if ("VRMS".equals(sourceCompareDev.getDesc())) {
temStr = "电压";
} else if ("IRMS".equals(sourceCompareDev.getDesc())) {
temStr = "电流";
} else if ("VA".equals(sourceCompareDev.getDesc())) {
temStr = "电压相角";
} else if ("IA".equals(sourceCompareDev.getDesc())) {
temStr = "电流相角";
}
dataMsg.setData(sourceCompareDev.getDevName() + splitTag + sourceCompareDev.getLineNum() + temStr + "校验结果:" + (sourceCompareDev.getIsQualified() ? "合格" : "不合格"));
dataMsg.setData(sourceCompareDev.getDevName() + splitTag + sourceCompareDev.getLineNum() + "校验结果:" + sourceCompareDev.getDesc());
webSocketHandler.sendMsgToUser(param.getUserPageId(), JSON.toJSONString(dataMsg));
}
@@ -1173,149 +1161,126 @@ public class SocketDevResponseService {
}
private Map<String, String> sourceMessage(SourceIssue issue) {
//Ua=59.0V,相角=0.0° Ub=59.0V,相角=0.0° Uc=59.0V,相角=0.0°)
Map<String, String> map = new HashMap<>();
List<SourceIssue.ChannelListDTO> v = issue.getChannelList().stream().filter(x -> x.getChannelType().contains("U")).collect(Collectors.toList());
List<SourceIssue.ChannelListDTO> i = issue.getChannelList().stream().filter(x -> x.getChannelType().contains("I")).collect(Collectors.toList());
map.put("V", sourceBuffer(v));
map.put("I", sourceBuffer(i));
return map;
}
private List<SourceCompareDev> devIsSource(DevData dev, SourceIssue issue) {
private String sourceBuffer(List<SourceIssue.ChannelListDTO> v) {
StringBuffer str = new StringBuffer();
str.append("源(");
for (SourceIssue.ChannelListDTO dto : v) {
str.append(dto.getChannelType() + "=" + dto.getFAmp() + ",相角=" + dto.getFPhase() + "° ");
}
str.append(")");
return str.toString();
}
private String devMessage(String type,
List<DevData.SqlDataDTO> data,
List<DevData.SqlDataDTO> dataPhase) {
StringBuffer str = new StringBuffer();
if (data.size() == dataPhase.size()) {
DevData.SqlDataDTO.ListDTO dto = data.get(0).getList();
DevData.SqlDataDTO.ListDTO phase = dataPhase.get(0).getList();
str.append("装置(" + type + "a=" + String.format("%.4f", dto.getA()) + ",相角=" + String.format("%.4f", phase.getA()) + "° " +
type + "b=" + String.format("%.4f", dto.getB()) + ",相角=" + String.format("%.4f", phase.getB()) + "° " +
type + "c=" + String.format("%.4f", dto.getC()) + ",相角=" + String.format("%.4f", phase.getC()) + "° ");
str.append(")");
}
return str.toString();
}
private List<SourceCompareDev> devIsSource(List<DevData> dev, SourceIssue issue) {
List<SourceCompareDev> info = new ArrayList<>();
String[] split = dev.getId().split(splitTag);
//相序校验信息个
LinkedHashMap<String, List<DevData>> devMap = dev.stream()
.sorted(Comparator.comparing(DevData::getId))
.collect(Collectors.groupingBy(DevData::getId, LinkedHashMap::new, Collectors.toList()));
//电压
List<SourceIssue.ChannelListDTO> sourceV = issue.getChannelList().stream().filter(x -> x.getChannelType().contains("U"))
.sorted(Comparator.comparing(SourceIssue.ChannelListDTO::getChannelType))
.collect(Collectors.toList());
//电流
List<SourceIssue.ChannelListDTO> sourceI = issue.getChannelList().stream().filter(x -> x.getChannelType().contains("I"))
.sorted(Comparator.comparing(SourceIssue.ChannelListDTO::getChannelType))
.collect(Collectors.toList());
Map<String, String> sourceMessageMap = sourceMessage(issue);
List<String> v = Arrays.asList("VRMS", "VA", "U", "V");
List<String> i = Arrays.asList("IRMS", "IA", "I", "I");
devMap.forEach((key, value) -> {
List<DevData.SqlDataDTO> sqlData = value.stream().flatMap(x -> x.getSqlData().stream()).collect(Collectors.toList());
getResult(key, sqlData, sourceMessageMap, sourceV, info, v);
getResult(key, sqlData, sourceMessageMap, sourceI, info, i);
});
return info;
}
private void getResult(String key,
List<DevData.SqlDataDTO> sqlData,
Map<String, String> sourceMessageMap,
List<SourceIssue.ChannelListDTO> sourceV,
List<SourceCompareDev> info,
List<String> type
) {
List<DevData.SqlDataDTO> dataV = sqlData.stream().filter(x -> type.get(0).equals(x.getDesc())).collect(Collectors.toList());
List<DevData.SqlDataDTO> dataVPhase = sqlData.stream().filter(x -> type.get(1).equals(x.getDesc())).collect(Collectors.toList());
SourceCompareDev compareDev = new SourceCompareDev();
String[] split = key.split(splitTag);
String devName = null;
if (FormalTestManager.devNameMapComm.containsKey(split[0])) {
devName = FormalTestManager.devNameMapComm.get(split[0]);
}
List<SourceIssue.ChannelListDTO> channelList = issue.getChannelList();
List<DevData.SqlDataDTO> sqlData = dev.getSqlData();
List<DevData.SqlDataDTO> dataV = sqlData.stream().filter(x -> "VRMS".equals(x.getDesc())).collect(Collectors.toList());
List<DevData.SqlDataDTO> dataVA = sqlData.stream().filter(x -> "VA".equals(x.getDesc())).collect(Collectors.toList());
List<DevData.SqlDataDTO> dataI = sqlData.stream().filter(x -> "IRMS".equals(x.getDesc())).collect(Collectors.toList());
List<DevData.SqlDataDTO> dataIA = sqlData.stream().filter(x -> "IA".equals(x.getDesc())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(dataV)) {
SourceCompareDev compareDev = getSourceCompareDev(split, dataV, "VRMS", "U", channelList, false);
compareDev.setDevName(devName);
info.add(compareDev);
}
if (CollUtil.isNotEmpty(dataVA)) {
SourceCompareDev compareDev = getSourceCompareDev(split, dataVA, "VA", "U", channelList, true);
compareDev.setDevName(devName);
info.add(compareDev);
}
if (CollUtil.isNotEmpty(dataI)) {
SourceCompareDev compareDev = getSourceCompareDev(split, dataI, "IRMS", "I", channelList, false);
compareDev.setDevName(devName);
info.add(compareDev);
}
if (CollUtil.isNotEmpty(dataVA)) {
SourceCompareDev compareDev = getSourceCompareDev(split, dataVA, "IA", "I", channelList, true);
compareDev.setDevName(devName);
compareDev.setLineNum(split[1]);
getSourceCompareDev(type.get(2), dataV, dataVPhase, compareDev, sourceMessageMap.get(type.get(3)), sourceV);
info.add(compareDev);
}
return info;
}
/**
* 计算是否合格
*
* @param split
* @param data
* @param name 指标名称
* @param type U,I
* @param channelList
* @param data 装置返回信息
* @param compareDev 返回信息
* @param channelList 源通道信息
* @return
*/
private static SourceCompareDev getSourceCompareDev(String[] split,
private SourceCompareDev getSourceCompareDev(String type,
List<DevData.SqlDataDTO> data,
String name,
String type,
List<SourceIssue.ChannelListDTO> channelList,
Boolean isPhase
List<DevData.SqlDataDTO> dataPhase,
SourceCompareDev compareDev,
String desc,
List<SourceIssue.ChannelListDTO> channelList
) {
SourceCompareDev compareDev = new SourceCompareDev();
compareDev.setIp(split[0]);
compareDev.setLineNum(split[1]);
compareDev.setDesc(name);
//装置数据
DevData.SqlDataDTO.ListDTO devData = data.get(0).getList();
List<SourceIssue.ChannelListDTO> sourceList = channelList.stream().filter(x -> (type + "a").equals(x.getChannelType()) ||
(type + "b").equals(x.getChannelType()) ||
(type + "c").equals(x.getChannelType())
).collect(Collectors.toList());
Map<String, Double> sourceMap = sourceList.stream()
.collect(Collectors.toMap(x -> x.getChannelType().toUpperCase().replace(type, "")
, isPhase ? SourceIssue.ChannelListDTO::getFPhase : SourceIssue.ChannelListDTO::getFAmp));
Map<String, Double> devMap = new HashMap<>(3);
devMap.put("A", devData.getA());
devMap.put("B", devData.getB());
devMap.put("C", devData.getC());
Boolean is = true;
for (SourceIssue.ChannelListDTO channelListDTO : sourceList) {
if (!is) {
break;
}
if (channelListDTO.getChannelType().equals((type + "a"))) {
if (isPhase) {
if (channelListDTO.getFPhase() == 0.0) {
is = NumberUtil.isIn(BigDecimal.valueOf(devData.getA()),
BigDecimal.valueOf(-0.05),
BigDecimal.valueOf(0.05));
} else {
is = NumberUtil.isIn(BigDecimal.valueOf(devData.getA()),
BigDecimal.valueOf(channelListDTO.getFPhase() * 0.95),
BigDecimal.valueOf(channelListDTO.getFPhase() * 1.05));
}
} else {
is = NumberUtil.isIn(BigDecimal.valueOf(devData.getA()),
BigDecimal.valueOf(channelListDTO.getFAmp() * 0.95),
BigDecimal.valueOf(channelListDTO.getFAmp() * 1.05));
}
}
if (channelListDTO.getChannelType().equals((type + "b"))) {
if (isPhase) {
if (channelListDTO.getFPhase() == 0.0) {
is = NumberUtil.isIn(BigDecimal.valueOf(devData.getB()),
BigDecimal.valueOf(-0.05),
BigDecimal.valueOf(0.05));
} else {
is = NumberUtil.isIn(BigDecimal.valueOf(devData.getB()),
BigDecimal.valueOf(channelListDTO.getFPhase() * 0.95),
BigDecimal.valueOf(channelListDTO.getFPhase() * 1.05));
}
} else {
is = NumberUtil.isIn(BigDecimal.valueOf(devData.getB()),
BigDecimal.valueOf(channelListDTO.getFAmp() * 0.95),
BigDecimal.valueOf(channelListDTO.getFAmp() * 1.05));
}
}
if (channelListDTO.getChannelType().equals((type + "c"))) {
if (isPhase) {
if (channelListDTO.getFPhase() == 0.0) {
is = NumberUtil.isIn(BigDecimal.valueOf(devData.getC()),
BigDecimal.valueOf(-0.05),
BigDecimal.valueOf(0.05));
} else {
is = NumberUtil.isIn(BigDecimal.valueOf(devData.getC()),
BigDecimal.valueOf(channelListDTO.getFPhase() * 0.95),
BigDecimal.valueOf(channelListDTO.getFPhase() * 1.05));
}
} else {
is = NumberUtil.isIn(BigDecimal.valueOf(devData.getC()),
BigDecimal.valueOf(channelListDTO.getFAmp() * 0.95),
BigDecimal.valueOf(channelListDTO.getFAmp() * 1.05));
}
}
}
compareDev.setIsQualified(is);
compareDev.setSourceData(sourceMap);
compareDev.setDevData(devMap);
//源信息
Map<String, SourceIssue.ChannelListDTO> sourceMap = channelList.stream()
.collect(Collectors.toMap(x -> x.getChannelType(), Function.identity()));
compareDev.setIsQualified(getaBoolean(sourceMap.get(type + "a"), data.get(0).getList().getA(), dataPhase.get(0).getList().getA()));
compareDev.setIsQualified(getaBoolean(sourceMap.get(type + "b"), data.get(0).getList().getB(), dataPhase.get(0).getList().getB()));
compareDev.setIsQualified(getaBoolean(sourceMap.get(type + "c"), data.get(0).getList().getC(), dataPhase.get(0).getList().getC()));
compareDev.setDesc((compareDev.getIsQualified() ? "合格->" : "不合格->") + desc + "<br/>" + devMessage(type, data, dataPhase));
return compareDev;
}
private static Boolean getaBoolean(SourceIssue.ChannelListDTO channelListDTO, Double devData, Double devPhase) {
return NumberUtil.isIn(BigDecimal.valueOf(devData),
BigDecimal.valueOf(channelListDTO.getFAmp() * 0.95),
BigDecimal.valueOf(channelListDTO.getFAmp() * 1.05))
&&
NumberUtil.isIn(BigDecimal.valueOf(devPhase),
BigDecimal.valueOf(channelListDTO.getFPhase() - 1),
BigDecimal.valueOf(channelListDTO.getFPhase() + 1));
}
/**
* 暂停后的重新检测

View File

@@ -233,7 +233,7 @@ public class SocketSourceResponseService {
DevPhaseSequenceParam phaseSequenceParam = new DevPhaseSequenceParam();
phaseSequenceParam.setMoniterIdList(moniterIdList);
phaseSequenceParam.setDataType(Arrays.asList("real$VRMS", "real$VA", "real$IRMS", "real$IA"));
phaseSequenceParam.setReadCount(5);
phaseSequenceParam.setReadCount(1);
phaseSequenceParam.setIgnoreCount(10);
socketMsg.setData(JSON.toJSONString(phaseSequenceParam));
SocketManager.sendMsg(s, JSON.toJSONString(socketMsg));