2 Commits

Author SHA1 Message Date
wr
4d48b42c98 完善全景详情监测点超标信息 2025-12-14 16:43:17 +08:00
wr
f5e1fac55d 微调 2025-12-14 15:42:55 +08:00
2 changed files with 179 additions and 82 deletions

View File

@@ -92,49 +92,6 @@ public class DetailAbnormalVO {
private Double freqData = 3.14159;
@ApiModelProperty("频率偏差限值")
private Float freqLimit = 3.14159F;
@ApiModelProperty("频率偏差信息")
private List<DetailLimitInnerVO> freqDataList;
/**
* 电压偏差上
*/
@ApiModelProperty("电压上偏差")
private Double vDevData = 3.14159;
@ApiModelProperty("电压上偏差限值")
private Float vDevLimit = 3.14159F;
@ApiModelProperty("频率偏差信息")
private List<DetailLimitInnerVO> vDevDataList;
/**
* 电压偏差下
*/
@ApiModelProperty("电压下偏差")
private Double uDevData = 3.14159;
@ApiModelProperty("电压下偏差限值")
private Float uDevLimit = 3.14159F;
@ApiModelProperty("频率偏差信息")
private List<DetailLimitInnerVO> uDevDataList;
/**
* 总谐波畸变率
*/
@ApiModelProperty("总谐波畸变率")
private Double uaberranceData = 3.14159;
@ApiModelProperty("总谐波畸变率限值")
private Float uaberranceLimit = 3.14159F;
@ApiModelProperty("频率偏差信息")
private List<DetailLimitInnerVO> uaberranceDataList;
/**
* 三相电压不平衡度
*/
@ApiModelProperty("三相电压不平衡度")
private Double unbalanceData = 3.14159;
@ApiModelProperty("三相电压不平衡度限值")
private Float unbalanceLimit = 3.14159F;
@ApiModelProperty("频率偏差信息")
private List<DetailLimitInnerVO> unbalanceDataList;
/**
* 电压闪变
@@ -143,8 +100,76 @@ public class DetailAbnormalVO {
private Double flickerData = 3.14159;
@ApiModelProperty("电压闪变限值")
private Float flickerLimit = 3.14159F;
@ApiModelProperty("频率偏差信息")
private List<DetailLimitInnerVO> flickerDataList;
/**
* 电压偏差上
*/
@ApiModelProperty("电压上偏差")
private Double vDevData = 3.14159;
@ApiModelProperty("电压上偏差限值")
private Float vDevLimit = 3.14159F;
/**
* 电压偏差下
*/
@ApiModelProperty("电压下偏差")
private Double uDevData = 3.14159;
@ApiModelProperty("电压下偏差限值")
private Float uDevLimit = 3.14159F;
/**
* 三相电压不平衡度
*/
@ApiModelProperty("三相电压不平衡度")
private Double unbalanceData = 3.14159;
@ApiModelProperty("三相电压不平衡度限值")
private Float unbalanceLimit = 3.14159F;
/**
* 总谐波畸变率
*/
@ApiModelProperty("总谐波畸变率")
private Double uaberranceData = 3.14159;
@ApiModelProperty("总谐波畸变率限值")
private Float uaberranceLimit = 3.14159F;
/**
* 负序电流限值天数
*/
@ApiModelProperty("负序电流")
private Double iNegData= 3.14159;
@ApiModelProperty("负序电流限值")
private Float iNegLimit= 3.14159F;
/**
* 谐波电压越限天数
*/
@ApiModelProperty("谐波电压")
private Double uharmData = 3.14159;
@ApiModelProperty("谐波电压限值")
private Float uharmLimit= 3.14159F;
/**
* 谐波电流越限天数
*/
@ApiModelProperty("谐波电流")
private Double iharmData = 3.14159;
@ApiModelProperty("谐波电流限值")
private Float iharmLimit= 3.14159F;
/**
* 间谐波限值天数
*/
@ApiModelProperty("间谐波电压")
private Double inuharmData = 3.14159;
@ApiModelProperty("间谐波电压限值")
private Float inuharmLimit= 3.14159F;
}

View File

@@ -4,6 +4,7 @@ package com.njcn.device.pq.service.impl;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.*;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
@@ -34,6 +35,7 @@ import com.njcn.device.pq.pojo.vo.LineDetailDataVO;
import com.njcn.device.pq.pojo.vo.dataClean.*;
import com.njcn.device.pq.service.CommTerminalService;
import com.njcn.device.pq.service.IDataVerifyService;
import com.njcn.harmonic.pojo.po.RStatDataVD;
import com.njcn.supervision.api.UserLedgerFeignClient;
import com.njcn.supervision.pojo.vo.user.NewUserReportVO;
import com.njcn.system.api.DicDataFeignClient;
@@ -48,6 +50,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -403,7 +406,7 @@ public class DataVerifyServiceImpl extends ServiceImpl<DataVerifyMapper, DataVer
LineCountEvaluateParam lineCountEvaluateParam = new LineCountEvaluateParam();
lineCountEvaluateParam.setLineId(Collections.singletonList(monitorBaseParam.getMonitorIds().get(0)));
lineCountEvaluateParam.setStartTime(monitorBaseParam.getSearchBeginTime());
lineCountEvaluateParam.setEndTime(monitorBaseParam.getSearchBeginTime());
lineCountEvaluateParam.setEndTime(monitorBaseParam.getSearchEndTime());
List<DataLimitRateDetailDto> dtoList = dataLimitRateDetailFeignClient.getRawData(lineCountEvaluateParam).getData();
Overlimit overLimitDataById = overLimitService.getOverLimitDataById(monitorBaseParam.getMonitorIds().get(0));
@@ -412,69 +415,131 @@ public class DataVerifyServiceImpl extends ServiceImpl<DataVerifyMapper, DataVer
List<DetailAbnormalVO.DetailLimitInnerVO> uaberrance = new ArrayList<>();
List<DetailAbnormalVO.DetailLimitInnerVO> ubalance = new ArrayList<>();
List<DetailAbnormalVO.DetailLimitInnerVO> flicker = new ArrayList<>();
List<DetailAbnormalVO.DetailLimitInnerVO> iNeg = new ArrayList<>();
List<DetailAbnormalVO.DetailLimitInnerVO> uharm = new ArrayList<>();
List<DetailAbnormalVO.DetailLimitInnerVO> iharm = new ArrayList<>();
List<DetailAbnormalVO.DetailLimitInnerVO> inuharm = new ArrayList<>();
for (DataLimitRateDetailDto dto : dtoList) {
dealJsonArr(new JSONArray(dto.getFreqDevOvertime()), freq, DicDataEnum.FREQUENCY_DEV.getCode(), null);
dealJsonArr(new JSONArray(dto.getVoltageDevOvertime()), voltage, DicDataEnum.VOLTAGE_DEV.getCode(), null);
dealJsonArr(new JSONArray(dto.getUaberranceOvertime()), uaberrance, DicDataEnum.THD_V.getCode(), null);
dealJsonArr(new JSONArray(dto.getUbalanceOvertime()), ubalance, DicDataEnum.phase_Voltage.getCode(), null);
dealJsonArr(new JSONArray(dto.getFlickerOvertime()), flicker, DicDataEnum.FLICKER.getCode(), null);
dealJsonArr(new JSONArray(dto.getFreqDevOvertime()), freq, DicDataEnum.FREQUENCY_DEV.getName(), null);
dealJsonArr(new JSONArray(dto.getVoltageDevOvertime()), voltage, DicDataEnum.VOLTAGE_DEV.getName(), null);
dealJsonArr(new JSONArray(dto.getUaberranceOvertime()), uaberrance, DicDataEnum.THD_V.getName(), null);
dealJsonArr(new JSONArray(dto.getUbalanceOvertime()), ubalance, DicDataEnum.phase_Voltage.getName(), null);
dealJsonArr(new JSONArray(dto.getFlickerOvertime()), flicker, DicDataEnum.FLICKER.getName(), null);
dealJsonArr(new JSONArray(dto.getINegOvertime()), iNeg, DicDataEnum.NEG_CURRENT.getName(), null);
// 处理谐波类指标
processHarmonicTargetHarm(dto, DicDataEnum.HARMONIC_VOLTAGE.getName(), "uharm", 2, 25, uharm);
processHarmonicTargetHarm(dto, DicDataEnum.HARMONIC_CURRENT.getName(), "iharm", 2, 25, iharm);
processHarmonicTargetHarm(dto, DicDataEnum.INTERHARMONIC_VOLTAGE.getName(), "inuharm", 1, 16, inuharm);
}
assess.setFreqLimit(overLimitDataById.getFreqDev());
assess.setVDevLimit(overLimitDataById.getVoltageDev());
assess.setUDevLimit(overLimitDataById.getUvoltageDev());
assess.setUaberranceLimit(overLimitDataById.getUaberrance());
assess.setUnbalanceLimit(overLimitDataById.getUbalance());
assess.setFlickerLimit(overLimitDataById.getFlicker());
assess.setINegLimit(overLimitDataById.getINeg());
//谐波电压
//谐波电流
//简谐波电压
//频率偏差
if (CollUtil.isNotEmpty(freq)) {
List<DetailAbnormalVO.DetailLimitInnerVO> collect = freq.stream().sorted(Comparator.comparing(DetailAbnormalVO.DetailLimitInnerVO::getVal).reversed()).collect(Collectors.toList());
DetailAbnormalVO.DetailLimitInnerVO val = collect.get(0);
assess.setFreqData(Double.valueOf(val.getVal()));
assess.setFreqLimit(val.getOverLimitValue());
assess.setFreqDataList(collect);
} else {
assess.setFreqLimit(overLimitDataById.getFreqDev());
assess.setFreqData(NumberUtil.round(val.getVal(),2).doubleValue());
}
//电压偏差
if (CollUtil.isNotEmpty(voltage)) {
List<DetailAbnormalVO.DetailLimitInnerVO> collect = voltage.stream().filter(x->Double.valueOf(x.getVal()) > 0).sorted(Comparator.comparing(DetailAbnormalVO.DetailLimitInnerVO::getVal).reversed()).collect(Collectors.toList());
if(CollUtil.isNotEmpty(collect)){
DetailAbnormalVO.DetailLimitInnerVO val = collect.get(0);
assess.setVDevData(Double.valueOf(val.getVal()));
assess.setVDevLimit(val.getOverLimitValue());
assess.setVDevDataList(collect);
assess.setVDevData(NumberUtil.round(val.getVal(),2).doubleValue());
}
List<DetailAbnormalVO.DetailLimitInnerVO> collect2 = voltage.stream().filter(x->Double.valueOf(x.getVal()) < 0).sorted(Comparator.comparing(DetailAbnormalVO.DetailLimitInnerVO::getVal)).collect(Collectors.toList());
if(CollUtil.isNotEmpty(collect2)){
DetailAbnormalVO.DetailLimitInnerVO val2 = collect2.get(0);
assess.setUDevData(Double.valueOf(val2.getVal()));
assess.setUDevLimit(val2.getOverLimitValue());
assess.setUDevDataList(collect2);
assess.setUDevData(NumberUtil.round(val2.getVal(),2).doubleValue());
}
}else{
assess.setVDevLimit(overLimitDataById.getVoltageDev());
assess.setUDevLimit(overLimitDataById.getUvoltageDev());
}
//负序电流
if (CollUtil.isNotEmpty(iNeg)) {
List<DetailAbnormalVO.DetailLimitInnerVO> collect = iNeg.stream().sorted(Comparator.comparing(DetailAbnormalVO.DetailLimitInnerVO::getVal).reversed()).collect(Collectors.toList());
DetailAbnormalVO.DetailLimitInnerVO val = collect.get(0);
assess.setINegData(NumberUtil.round(val.getVal(),2).doubleValue());
}
//电压总谐波
if (CollUtil.isNotEmpty(uaberrance)) {
List<DetailAbnormalVO.DetailLimitInnerVO> collect = uaberrance.stream().sorted(Comparator.comparing(DetailAbnormalVO.DetailLimitInnerVO::getVal).reversed()).collect(Collectors.toList());
DetailAbnormalVO.DetailLimitInnerVO val = collect.get(0);
assess.setUaberranceData(Double.valueOf(val.getVal()));
assess.setUaberranceLimit(val.getOverLimitValue());
assess.setUaberranceDataList(collect);
}else {
assess.setUaberranceLimit(overLimitDataById.getUaberrance());
assess.setUaberranceData(NumberUtil.round(val.getVal(),2).doubleValue());
}
//三相不平衡度
if (CollUtil.isNotEmpty(ubalance)) {
List<DetailAbnormalVO.DetailLimitInnerVO> collect = ubalance.stream().sorted(Comparator.comparing(DetailAbnormalVO.DetailLimitInnerVO::getVal).reversed()).collect(Collectors.toList());
DetailAbnormalVO.DetailLimitInnerVO val = collect.get(0);
assess.setUnbalanceData(Double.valueOf(val.getVal()));
assess.setUnbalanceLimit(val.getOverLimitValue());
assess.setUnbalanceDataList(collect);
}else{
assess.setUnbalanceLimit(overLimitDataById.getUbalance());
assess.setUnbalanceData(NumberUtil.round(val.getVal(),2).doubleValue());
}
//闪变
if (CollUtil.isNotEmpty(flicker)) {
List<DetailAbnormalVO.DetailLimitInnerVO> collect = flicker.stream().sorted(Comparator.comparing(DetailAbnormalVO.DetailLimitInnerVO::getVal).reversed()).collect(Collectors.toList());
DetailAbnormalVO.DetailLimitInnerVO val = collect.get(0);
assess.setFlickerData(Double.valueOf(val.getVal()));
assess.setFlickerLimit(val.getOverLimitValue());
assess.setFlickerDataList(collect);
}else {
assess.setFlickerLimit(overLimitDataById.getFlicker());
assess.setFlickerData(NumberUtil.round(val.getVal(),2).doubleValue());
}
//谐波电压
if (CollUtil.isNotEmpty(uharm)) {
List<DetailAbnormalVO.DetailLimitInnerVO> collect = uharm.stream().sorted(Comparator.comparing(DetailAbnormalVO.DetailLimitInnerVO::getVal).reversed()).collect(Collectors.toList());
DetailAbnormalVO.DetailLimitInnerVO val = collect.get(0);
assess.setUharmData(NumberUtil.round(val.getVal(),2).doubleValue());
String[] split = val.getTargetName().split("");
try {
Class<?> clazz = overLimitDataById.getClass();
String methodName = "getUharm" + split[0];
Method method = clazz.getMethod(methodName);
Float value = (Float) method.invoke(overLimitDataById);
assess.setUharmLimit(value);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
//谐波电流
if (CollUtil.isNotEmpty(iharm)) {
List<DetailAbnormalVO.DetailLimitInnerVO> collect = iharm.stream().sorted(Comparator.comparing(DetailAbnormalVO.DetailLimitInnerVO::getVal).reversed()).collect(Collectors.toList());
DetailAbnormalVO.DetailLimitInnerVO val = collect.get(0);
assess.setIharmData(NumberUtil.round(val.getVal(),2).doubleValue());
String[] split = val.getTargetName().split("");
try {
Class<?> clazz = overLimitDataById.getClass();
String methodName = "getIharm" + split[0];
Method method = clazz.getMethod(methodName);
Float value = (Float) method.invoke(overLimitDataById);
assess.setIharmLimit(value);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
//间谐波电压
if (CollUtil.isNotEmpty(inuharm)) {
List<DetailAbnormalVO.DetailLimitInnerVO> collect = inuharm.stream().sorted(Comparator.comparing(DetailAbnormalVO.DetailLimitInnerVO::getVal).reversed()).collect(Collectors.toList());
DetailAbnormalVO.DetailLimitInnerVO val = collect.get(0);
assess.setInuharmData(NumberUtil.round(val.getVal(),2).doubleValue());
String[] split = val.getTargetName().split("");
try {
Class<?> clazz = overLimitDataById.getClass();
String methodName = "getInuharm" + split[0];
Method method = clazz.getMethod(methodName);
Float value = (Float) method.invoke(overLimitDataById);
assess.setInuharmLimit(value);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
return assess;
}
@@ -566,6 +631,13 @@ public class DataVerifyServiceImpl extends ServiceImpl<DataVerifyMapper, DataVer
processSpecialTargets(tempList, result, targetName);
}
private void processHarmonicTargetHarm(DataLimitRateDetailDto dto, String targetCode, String prefix, int start, int end,
List<DetailAbnormalVO.DetailLimitInnerVO> result) {
List<String> tempList = new ArrayList<>();
collectHarmonicData(dto, prefix, start, end, tempList);
processSpecialTargets(tempList, result, targetCode);
}
private void processSpecialTargets(List<String> specialTargetList, List<DetailAbnormalVO.DetailLimitInnerVO> result, String targetName) {
for (String strJson : specialTargetList) {
String[] temStr = strJson.split(SEPARATOR);