1.修改全景稳态告警数据不一致问题 2.初步修改在线监测功能

This commit is contained in:
xy
2025-12-10 16:25:38 +08:00
parent c03a516931
commit 2117e16b61
26 changed files with 551 additions and 55 deletions

View File

@@ -66,6 +66,10 @@ public interface RStatLimitTargetDMapper extends BaseMapper<RStatLimitTargetDPO>
@Param("startTime") String startTime,
@Param("endTime") String endTime);
List<RStatLimitTargetVO> getSumTargetDetails2(@Param("ids") List<String> ids,
@Param("startTime") String startTime,
@Param("endTime") String endTime);
List<RStatLimitTargetCountVO> getSumTargetCountDayes(@Param("ids") List<String> ids,
@Param("startTime") String startTime,
@Param("endTime") String endTime);

View File

@@ -491,6 +491,149 @@
GROUP BY time_id,my_index) A
GROUP BY A.lineId
</select>
<select id="getSumTargetDetails2" resultType="com.njcn.harmonic.pojo.vo.RStatLimitTargetVO">
SELECT
A.lineId,
SUM(
CASE
WHEN A.freqDevOvertime > 0
THEN 1
ELSE 0
END
) freqDevOvertime,
SUM(
CASE
WHEN A.flickerOvertime > 0
THEN 1
ELSE 0
END
) flickerOvertime,
SUM(
CASE
WHEN A.voltageDevOvertime > 0
THEN 1
ELSE 0
END
) voltageDevOvertime,
SUM(
CASE
WHEN A.ubalanceOvertime > 0
THEN 1
ELSE 0
END
) ubalanceOvertime,
SUM(
CASE
WHEN A.uaberranceOvertime > 0
THEN 1
ELSE 0
END
) uaberranceOvertime,
SUM(
CASE
WHEN A.iNegOvertime > 0
THEN 1
ELSE 0
END
) iNegOvertime,
SUM(
CASE
WHEN A.uharmOvertime > 0
THEN 1
ELSE 0
END
) uharmOvertime,
SUM(
CASE
WHEN A.iharmOvertime > 0
THEN 1
ELSE 0
END
) iharmOvertime,
SUM(
CASE
WHEN A.inuharmOvertime > 0
THEN 1
ELSE 0
END
) inuharmOvertime,
SUM(
CASE
WHEN A.allOvertime > 0
THEN 1
ELSE 0
END
) allOvertime,
SUM(
CASE
WHEN A.flickerAllTime > 0
THEN 1
ELSE 0
END
) flickerAllTime
FROM
(SELECT
DISTINCT my_index AS lineId,
SUM(freq_dev_overtime) AS freqDevOvertime,
SUM(flicker_overtime) AS flickerOvertime,
SUM(voltage_dev_overtime) AS voltageDevOvertime,
SUM(ubalance_overtime) AS ubalanceOvertime,
SUM(uaberrance_overtime) AS uaberranceOvertime,
SUM(i_neg_overtime) AS iNegOvertime,
SUM(flicker_all_time) AS flickerAllTime,
SUM(
IF(
(
uaberrance_overtime + uharm_2_overtime + uharm_3_overtime + uharm_4_overtime + uharm_5_overtime + uharm_6_overtime + uharm_7_overtime + uharm_8_overtime + uharm_9_overtime + uharm_10_overtime + uharm_11_overtime + uharm_12_overtime + uharm_13_overtime + uharm_14_overtime + uharm_15_overtime + uharm_16_overtime + uharm_17_overtime + uharm_18_overtime + uharm_19_overtime + uharm_20_overtime + uharm_21_overtime + uharm_22_overtime + uharm_23_overtime + uharm_24_overtime + uharm_25_overtime
) > 0,
1,
0
)
) AS uharmOvertime,
SUM(
IF(
(
iharm_2_overtime + iharm_3_overtime + iharm_4_overtime + iharm_5_overtime + iharm_6_overtime + iharm_7_overtime + iharm_8_overtime + iharm_9_overtime + iharm_10_overtime + iharm_11_overtime + iharm_12_overtime + iharm_13_overtime + iharm_14_overtime + iharm_15_overtime + iharm_16_overtime + iharm_17_overtime + iharm_18_overtime + iharm_19_overtime + iharm_20_overtime + iharm_21_overtime + iharm_22_overtime + iharm_23_overtime + iharm_24_overtime + iharm_25_overtime
) > 0,
1,
0
)
) AS iharmOvertime,
SUM(
IF(
(
inuharm_1_overtime + inuharm_2_overtime + inuharm_3_overtime + inuharm_4_overtime + inuharm_5_overtime + inuharm_6_overtime + inuharm_7_overtime + inuharm_8_overtime + inuharm_9_overtime + inuharm_10_overtime + inuharm_11_overtime + inuharm_12_overtime + inuharm_13_overtime + inuharm_14_overtime + inuharm_15_overtime + inuharm_16_overtime
) > 0,
1,
0
)
) AS inuharmOvertime,
SUM(
IF(
(
freq_dev_overtime + flicker_overtime + voltage_dev_overtime + ubalance_overtime + uaberrance_overtime + i_neg_overtime + uharm_2_overtime + uharm_3_overtime + uharm_4_overtime + uharm_5_overtime + uharm_6_overtime + uharm_7_overtime + uharm_8_overtime + uharm_9_overtime + uharm_10_overtime + uharm_11_overtime + uharm_12_overtime + uharm_13_overtime + uharm_14_overtime + uharm_15_overtime + uharm_16_overtime + uharm_17_overtime + uharm_18_overtime + uharm_19_overtime + uharm_20_overtime + uharm_21_overtime + uharm_22_overtime + uharm_23_overtime + uharm_24_overtime + uharm_25_overtime + iharm_2_overtime + iharm_3_overtime + iharm_4_overtime + iharm_5_overtime + iharm_6_overtime + iharm_7_overtime + iharm_8_overtime + iharm_9_overtime + iharm_10_overtime + iharm_11_overtime + iharm_12_overtime + iharm_13_overtime + iharm_14_overtime + iharm_15_overtime + iharm_16_overtime + iharm_17_overtime + iharm_18_overtime + iharm_19_overtime + iharm_20_overtime + iharm_21_overtime + iharm_22_overtime + iharm_23_overtime + iharm_24_overtime + iharm_25_overtime + inuharm_1_overtime + inuharm_2_overtime + inuharm_3_overtime + inuharm_4_overtime + inuharm_5_overtime + inuharm_6_overtime + inuharm_7_overtime + inuharm_8_overtime + inuharm_9_overtime + inuharm_10_overtime + inuharm_11_overtime + inuharm_12_overtime + inuharm_13_overtime + inuharm_14_overtime + inuharm_15_overtime + inuharm_16_overtime
) > 0,
1,
0
)
) AS allOvertime
FROM
r_stat_limit_target_d
<where>
and time_id between #{startTime} and #{endTime}
<if test=" ids != null and ids.size > 0">
AND my_index IN
<foreach collection='ids' item='item' index="index" open='(' separator=',' close=')'>
#{item}
</foreach>
</if>
</where>
GROUP BY my_index) A
GROUP BY A.lineId
</select>
<select id="getSumTargetCountDayes" resultType="com.njcn.harmonic.pojo.vo.RStatLimitTargetCountVO">
SELECT
A.lineId,

View File

@@ -349,31 +349,51 @@ public class GridServiceImpl implements IGridService {
List<RStatDataPltDPO> list4 = getList4(lineList, param.getStartTime(), param.getEndTime());
List<RStatDataVD> list5 = getList5(lineList, param.getStartTime(), param.getEndTime());
if (CollUtil.isNotEmpty(list1)) {
List<Double> d = list1.stream().map(o -> o.getFreqDev().doubleValue()).collect(Collectors.toList());
//List<Double> d = list1.stream().map(o -> o.getFreqDev().doubleValue()).collect(Collectors.toList());
List<Double> d = list1.stream()
.map(o -> o.getFreqDev().doubleValue())
.filter(value -> value >= -7.5 && value <= 7.5)
.collect(Collectors.toList());
double avg = d.stream().collect(Collectors.averagingDouble(x -> x));
vo1.setAvg(PubUtils.doubleRound(2, avg));
vo1.setSd(targetSd(d, avg));
}
if (CollUtil.isNotEmpty(list2)) {
List<Double> d = list2.stream().map(o -> o.getVuDev().doubleValue()).collect(Collectors.toList());
//List<Double> d = list2.stream().map(o -> o.getVuDev().doubleValue()).collect(Collectors.toList());
List<Double> d = list2.stream()
.map(o -> o.getVuDev().doubleValue())
.filter(value -> value >= -90 && value <= 50)
.collect(Collectors.toList());
double avg = d.stream().collect(Collectors.averagingDouble(x -> x));
vo2.setAvg(PubUtils.doubleRound(2, avg));
vo2.setSd(targetSd(d, avg));
}
if (CollUtil.isNotEmpty(list3)) {
List<Double> d = list3.stream().map(o -> o.getVThd().doubleValue()).collect(Collectors.toList());
//List<Double> d = list3.stream().map(o -> o.getVThd().doubleValue()).collect(Collectors.toList());
List<Double> d = list3.stream()
.map(o -> o.getVThd().doubleValue())
.filter(value -> value >= 0 && value <= 50)
.collect(Collectors.toList());
double avg = d.stream().collect(Collectors.averagingDouble(x -> x));
vo3.setAvg(PubUtils.doubleRound(2, avg));
vo3.setSd(targetSd(d, avg));
}
if (CollUtil.isNotEmpty(list5)) {
List<Double> d = list1.stream().map(o -> o.getVUnbalance().doubleValue()).collect(Collectors.toList());
//List<Double> d = list5.stream().map(o -> o.getVUnbalance().doubleValue()).collect(Collectors.toList());
List<Double> d = list5.stream()
.map(o -> o.getVUnbalance().doubleValue())
.filter(value -> value >= 0 && value <= 40)
.collect(Collectors.toList());
double avg = d.stream().collect(Collectors.averagingDouble(x -> x));
vo4.setAvg(PubUtils.doubleRound(2, avg));
vo4.setSd(targetSd(d, avg));
}
if (CollUtil.isNotEmpty(list4)) {
List<Double> d = list4.stream().map(RStatDataPltDPO::getPlt).collect(Collectors.toList());
//List<Double> d = list4.stream().map(RStatDataPltDPO::getPlt).collect(Collectors.toList());
List<Double> d = list4.stream()
.map(RStatDataPltDPO::getPlt)
.filter(value -> value >= 0 && value <= 20)
.collect(Collectors.toList());
double avg = d.stream().collect(Collectors.averagingDouble(x -> x));
vo5.setAvg(PubUtils.doubleRound(2, avg));
vo5.setSd(targetSd(d, avg));
@@ -481,20 +501,25 @@ public class GridServiceImpl implements IGridService {
List<EvaluationLevelVo.EvaluationDetail> result = new ArrayList<>();
DeptGetLineParam deptGetLineParam = new DeptGetLineParam();
deptGetLineParam.setDeptId(param.getDeptIndex());
deptGetLineParam.setLineRunFlag(0);
List<DeptGetChildrenMoreDTO> list = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData();
List<DeptGetChildrenMoreDTO> list = commTerminalGeneralClient.deptGetAllLine(deptGetLineParam).getData();
//获取监测点集合
Map<String, List<String>> lineMap = this.getLineMap(list, param.getIsUpToGrid(), null);
List<String> lineList = lineMap.values().stream()
.flatMap(List::stream)
.distinct()
.collect(Collectors.toList());
Map<String, List<String>> lineMap2 = this.getLineMap(list, param.getIsUpToGrid(), null,0);
List<String> lineList2 = lineMap2.values().stream()
.flatMap(List::stream)
.distinct()
.collect(Collectors.toList());
List<RStatLimitTargetVO> overLimitList = new ArrayList<>();
if (CollUtil.isNotEmpty(lineList)) {
//获取监测点越限集合
overLimitList .addAll(rStatLimitTargetDMapper.getSumTargetDetails(lineList,
overLimitList.addAll(rStatLimitTargetDMapper.getSumTargetDetails2(lineList,
param.getStartTime(),
param.getEndTime())) ;
param.getEndTime()));
}
//获取部门
List<DeptDTO> deptList = deptFeignClient.getDepSonDetailByDeptId(param.getDeptIndex()).getData();
@@ -541,12 +566,13 @@ public class GridServiceImpl implements IGridService {
if (lineMap.containsKey(item.getId())) {
if (CollUtil.isNotEmpty(lineMap.get(item.getId()))) {
List<String> ll = lineMap.get(item.getId());
detail.setOnlineNum(ll.size());
List<String> lll = lineMap2.get(item.getId());
detail.setOnlineNum(lll.size());
//筛选当前部门下监测点的超标数据
List<RStatLimitTargetVO> list2 = overLimitList.stream().filter(it -> ll.contains(it.getLineId())).collect(Collectors.toList());
if (CollUtil.isNotEmpty(list2)) {
//筛选出9项指标(电压偏差、频率偏差、电压总谐波畸变率、电压闪变、三相电压不平衡度、负序电流、谐波电流、间谐波电压、谐波电压)超标监测点
long allNum = list2.stream().filter(o -> o.getAllOvertime() > 0 || o.getFlickerAllTime() > 0).count();
long allNum = list2.stream().filter(o -> o.getAllOvertime() > 0 || o.getFlickerAllTime() > 0 ).count();
detail.setOverNum((int) allNum);
detail.setOverRatio(PubUtils.doubleRound(2, detail.getOverNum() * 100.0 / detail.getOnlineNum()));
//筛选出电压偏差超标监测点
@@ -599,6 +625,9 @@ public class GridServiceImpl implements IGridService {
Integer day9 = list2.stream().max(Comparator.comparingInt(RStatLimitTargetVO::getInuharmOvertime)).get().getInuharmOvertime();
detail9.setOverNum((int) num9);
detail9.setOverDay(day9);
} else {
detail.setOverNum(0);
detail.setOverRatio(0.0);
}
}
}
@@ -1043,4 +1072,35 @@ public class GridServiceImpl implements IGridService {
return map;
}
public Map<String, List<String>> getLineMap(List<DeptGetChildrenMoreDTO> list, Integer type, String voltage, Integer runFlag) {
Map<String, List<String>> map = new HashMap<>();
list.forEach(it -> {
// 默认不过滤
Predicate<LineDevGetDTO> uploadFilter = item -> true;
if (Objects.equals(type, 1)) {
uploadFilter = item -> Objects.equals(item.getIsUpToGrid(), 1);
}
Predicate<LineDevGetDTO> voltageFilter = item -> true;
if (!Objects.isNull(voltage) && !Objects.equals(voltage, "")) {
voltageFilter = item -> Objects.equals(item.getVoltageLevel(), voltage);
}
Predicate<LineDevGetDTO> runFlagFilter = item -> true;
if (!Objects.isNull(runFlag)) {
voltageFilter = item -> Objects.equals(item.getLineRunFlag(), runFlag);
}
// 组合两个过滤条件
Predicate<LineDevGetDTO> combinedFilter = uploadFilter.and(voltageFilter);
Predicate<LineDevGetDTO> combinedFilter2 = combinedFilter.and(runFlagFilter);
map.put(it.getUnitId(), it.getLineBaseList().stream()
.filter(combinedFilter2)
.map(LineDevGetDTO::getPointId)
.distinct()
.collect(Collectors.toList()));
});
return map;
}
}

View File

@@ -47,7 +47,10 @@ import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Function;
import java.util.stream.Collectors;