区域暂态列表优化

This commit is contained in:
zhuxinyu
2023-04-27 17:07:10 +08:00
parent f292b3101e
commit 2f98232cfa
6 changed files with 217 additions and 83 deletions

View File

@@ -31,16 +31,19 @@ public class TransientParam extends DeviceInfoParam.BusinessParam {
@ApiModelProperty("暂态幅值最大值") @ApiModelProperty("暂态幅值最大值")
private BigDecimal eventValueMax; private BigDecimal eventValueMax;
@ApiModelProperty("暂态幅值最小值") @ApiModelProperty("暂态幅值最小值")
private BigDecimal eventValueMin; private BigDecimal eventValueMin;
@ApiModelProperty("持续时间最大值") @ApiModelProperty("持续时间最大值")
private Integer persistMax; private Integer persistMax;
@ApiModelProperty("持续时间最小值") @ApiModelProperty("持续时间最小值")
private Integer persistMin; private Integer persistMin;
@ApiModelProperty("严重度最大值") @ApiModelProperty("严重度最大值")
private BigDecimal severityMax; private BigDecimal severityMax;
@ApiModelProperty("严重度最小值") @ApiModelProperty("严重度最小值")
private BigDecimal severityMin; private BigDecimal severityMin;
@@ -55,5 +58,8 @@ public class TransientParam extends DeviceInfoParam.BusinessParam {
@ApiModelProperty("波形文件") @ApiModelProperty("波形文件")
private Integer fileFlag; private Integer fileFlag;
@ApiModelProperty("搜索值")
private String searchValue;
} }

View File

@@ -77,7 +77,7 @@ public class ReportController extends BaseController {
@OperateInfo(info = LogEnum.BUSINESS_COMMON) @OperateInfo(info = LogEnum.BUSINESS_COMMON)
@PostMapping("/getReason") @PostMapping("/getReason")
@ApiOperation("暂态原因统计表") @ApiOperation("暂态原因统计表")
@ApiImplicitParam(name = "businessParam", value = "暂态严重度参数", required = true) @ApiImplicitParam(name = "businessParam", value = "暂态原因统计表参数", required = true)
public HttpResult<List<ReasonsVO>> getReason(@RequestBody @Validated DeviceInfoParam.BusinessParam businessParam) { public HttpResult<List<ReasonsVO>> getReason(@RequestBody @Validated DeviceInfoParam.BusinessParam businessParam) {
String methodDescribe = getMethodDescribe("getSeverity"); String methodDescribe = getMethodDescribe("getSeverity");
List<ReasonsVO> page = reportService.getReason(businessParam); List<ReasonsVO> page = reportService.getReason(businessParam);

View File

@@ -1,10 +1,14 @@
package com.njcn.event.mapper.distribution; package com.njcn.event.mapper.distribution;
import cn.hutool.core.date.DateTime;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.njcn.event.pojo.param.UniversalFrontEndParam; import com.njcn.event.pojo.param.UniversalFrontEndParam;
import com.njcn.event.pojo.po.EventDetailNew;
import com.njcn.event.pojo.po.RmpEventDetailPO; import com.njcn.event.pojo.po.RmpEventDetailPO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
/** /**
@@ -56,4 +60,19 @@ public interface PwRmpEventDetailMapper extends BaseMapper<RmpEventDetailPO> {
@Param("startTime") String startTime, @Param("startTime") String startTime,
@Param("endTime") String endTime); @Param("endTime") String endTime);
Page<EventDetailNew> selectByIdAndValue(Page<EventDetailNew> page,
@Param("list") List<String> lineList,
@Param("beginTime") DateTime beginOfDay,
@Param("endTime") DateTime endOfDay,
@Param("waveType") List<String> waveType,
@Param("eventReason") List<String> eventReason,
@Param("eventType") List<String> eventType,
@Param("eventValueMin") BigDecimal eventValueMin,
@Param("eventValueMax") BigDecimal eventValueMax,
@Param("persistMin") Integer persistMin,
@Param("persistMax") Integer persistMax,
@Param("severityMin") BigDecimal severityMin,
@Param("severityMax") BigDecimal severityMax,
@Param("fileFlag") Integer fileFlag,
@Param("searchValue") String searchValue);
} }

View File

@@ -94,4 +94,92 @@
AND DATE_FORMAT(start_time, '%Y-%m') &lt;= #{endTime} AND DATE_FORMAT(start_time, '%Y-%m') &lt;= #{endTime}
</if> </if>
</select> </select>
<select id="selectByIdAndValue" resultType="com.njcn.event.pojo.po.EventDetailNew">
SELECT
rmed.measurement_point_id AS lineId,
rmed.start_time AS startTime,
line.`Name` AS lineName,
gd.`Name` AS gdName,
substation.id AS subId,
substation.`Name` AS subName,
pqdevice.IP AS ip,
scale.`Name` AS scale,
typeDict.name AS advanceType,
reasonDict.name AS advanceReason,
rmed.event_type AS eventType,
rmed.feature_amplitude AS featureAmplitude,
rmed.duration AS duration,
rmed.severity AS severity
FROM r_mp_event_detail rmed
INNER JOIN pq_line line ON line.id = rmed.measurement_point_id
INNER JOIN pq_line voltage ON voltage.id = line.pid
INNER JOIN pq_voltage pqvoltage ON voltage.id = pqvoltage.id
INNER JOIN sys_dict_data scale ON pqvoltage.Scale = scale.id
INNER JOIN pq_line device ON device.id = voltage.pid
INNER JOIN pq_device pqdevice ON pqdevice.id = device.id
INNER JOIN pq_line substation ON substation.id = device.pid
INNER JOIN pq_line gd ON substation.pid = gd.id
INNER JOIN sys_dict_data reasonDict ON reasonDict.id = rmed.advance_reason
INNER JOIN sys_dict_data typeDict ON typeDict.id = rmed.advance_type
WHERE
rmed.measurement_point_id IN
<foreach collection="list" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
<if test="beginTime != null">
AND DATE_FORMAT(rmed.start_time, '%Y-%m-%d') &gt;= DATE_FORMAT(#{beginTime}, '%Y-%m-%d')
</if>
<if test="endTime != null">
AND DATE_FORMAT(rmed.start_time, '%Y-%m-%d') &lt;= DATE_FORMAT(#{endTime}, '%Y-%m-%d')
</if>
<if test="waveType!=null and waveType.size()>0">
AND rmed.event_type IN
<foreach collection="waveType" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test="eventReason!=null and eventReason.size()>0">
AND rmed.advance_reason IN
<foreach collection="eventReason" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test="eventType!=null and eventType.size()>0">
AND rmed.advance_type IN
<foreach collection="eventType" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test="eventValueMin != null and eventValueMin != ''">
AND rmed.feature_amplitude <![CDATA[>=]]> #{eventValueMin}
</if>
<if test="eventValueMax != null and eventValueMax != ''">
AND rmed.feature_amplitude <![CDATA[<=]]> #{eventValueMax}
</if>
<if test="persistMin != null and persistMin != ''">
AND rmed.duration <![CDATA[>=]]> #{persistMin}
</if>
<if test="persistMax != null and persistMax != ''">
AND rmed.duration <![CDATA[<=]]> #{persistMax}
</if>
<if test="severityMin != null and severityMin != ''">
AND rmed.severity <![CDATA[>=]]> #{severityMin}
</if>
<if test="severityMax != null and severityMax != ''">
AND rmed.severity <![CDATA[<=]]> #{severityMax}
</if>
<if test="fileFlag != null and fileFlag != ''">
AND rmed.file_flag = #{fileFlag}
</if>
<if test="searchValue!=null and searchValue!=''">
and (
line.name like CONCAT('%', #{searchValue},'%')
or voltage.name like CONCAT('%', #{searchValue},'%')
or substation.name like CONCAT('%', #{searchValue},'%')
or gd.name like CONCAT('%', #{searchValue},'%')
or pqdevice.IP like CONCAT('%', #{searchValue},'%')
)
</if>
ORDER BY rmed.start_time DESC
</select>
</mapper> </mapper>

View File

@@ -420,8 +420,9 @@ public class ReportServiceImpl implements ReportService {
if (count.get(s) == info.size()) { if (count.get(s) == info.size()) {
result.add(new ReasonsVO(s, info.size(), "100")); result.add(new ReasonsVO(s, info.size(), "100"));
} else { } else {
String s1 = String.format("%.4f", (count.get(s).doubleValue() / info.size())); String s2 = BigDecimal.valueOf((double) count.get(s) * 100 / info.size()).setScale(2, RoundingMode.HALF_UP).toString();
result.add(new ReasonsVO(s, count.get(s), s1.substring(2, 4) + "." + s1.substring(4, 6))); // String s1 = String.format("%.4f", (count.get(s).doubleValue() / info.size()));
result.add(new ReasonsVO(s, count.get(s), s2));
} }
} }
} }

View File

@@ -53,6 +53,7 @@ import org.springframework.util.CollectionUtils;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.*; import java.io.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.time.Instant; import java.time.Instant;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -249,7 +250,6 @@ public class TransientServiceImpl implements TransientService {
waveDataDTO.setPt(monitorVO.getPt1() / monitorVO.getPt2()); waveDataDTO.setPt(monitorVO.getPt1() / monitorVO.getPt2());
waveDataDTO.setCt(monitorVO.getCt1() / monitorVO.getCt2()); waveDataDTO.setCt(monitorVO.getCt1() / monitorVO.getCt2());
return waveDataDTO; return waveDataDTO;
} }
@@ -293,90 +293,110 @@ public class TransientServiceImpl implements TransientService {
Page<EventDetailNew> page = new Page<>(); Page<EventDetailNew> page = new Page<>();
page.setSize(transientParam.getPageSize()); page.setSize(transientParam.getPageSize());
page.setCurrent(transientParam.getPageNum()); page.setCurrent(transientParam.getPageNum());
// 按部门分类的实际运行终端综合信息
//按部门分类的实际运行终端综合信息
List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceInfoClient.getPracticalRunDeviceInfo(transientParam).getData(); List<GeneralDeviceDTO> generalDeviceDTOList = generalDeviceInfoClient.getPracticalRunDeviceInfo(transientParam).getData();
if (!CollectionUtils.isEmpty(generalDeviceDTOList)) { if (!CollectionUtils.isEmpty(generalDeviceDTOList)) {
//获取按终端分类的监测点索引集合
List<String> lineList = generalDeviceDTOList.stream().flatMap(dto -> dto.getLineIndexes().stream()).collect(Collectors.toList());
if(CollUtil.isNotEmpty(lineList)){
LambdaQueryWrapper<RmpEventDetailPO> wrapper = new LambdaQueryWrapper<RmpEventDetailPO>()
.in(RmpEventDetailPO::getMeasurementPointId, lineList)
.ge(StringUtils.isNotBlank(transientParam.getSearchBeginTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(transientParam.getSearchBeginTime())))
.le(StringUtils.isNotBlank(transientParam.getSearchEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(transientParam.getSearchEndTime())))
//事件
.in(CollUtil.isNotEmpty(transientParam.getWaveType()), RmpEventDetailPO::getEventType, transientParam.getWaveType())
.in(CollUtil.isNotEmpty(transientParam.getEventReason()), RmpEventDetailPO::getAdvanceReason, transientParam.getEventReason())
.in(CollUtil.isNotEmpty(transientParam.getEventType()), RmpEventDetailPO::getAdvanceType, transientParam.getEventType())
.orderByDesc(RmpEventDetailPO::getStartTime);
//暂态幅值
if (Objects.nonNull(transientParam.getEventValueMin())) { if (Objects.nonNull(transientParam.getEventValueMin())) {
wrapper.ge(RmpEventDetailPO::getFeatureAmplitude, transientParam.getEventValueMin().divide(new BigDecimal(100), 2, BigDecimal.ROUND_UP)); transientParam.setEventValueMin(transientParam.getEventValueMin().divide(new BigDecimal(100), 2, BigDecimal.ROUND_UP));
} }
if (Objects.nonNull(transientParam.getEventValueMax())) { if (Objects.nonNull(transientParam.getEventValueMax())) {
wrapper.le(RmpEventDetailPO::getFeatureAmplitude, transientParam.getEventValueMax().divide(new BigDecimal(100), 2, BigDecimal.ROUND_UP)); transientParam.setEventValueMax(transientParam.getEventValueMax().divide(new BigDecimal(100), 2, BigDecimal.ROUND_UP));
} }
if (Objects.nonNull(transientParam.getPersistMin()) && Objects.nonNull(transientParam.getSeverityMax())) { // 获取按终端分类的监测点索引集合
wrapper.ge(RmpEventDetailPO::getDuration, transientParam.getPersistMin()).le(RmpEventDetailPO::getDuration, transientParam.getPersistMax()); List<String> lineList = generalDeviceDTOList.stream().flatMap(dto -> dto.getLineIndexes().stream()).collect(Collectors.toList());
} if (CollUtil.isNotEmpty(lineList)) {
//严重度 page = pwRmpEventDetailMapper.selectByIdAndValue(
if (Objects.nonNull(transientParam.getSeverityMin()) && Objects.nonNull(transientParam.getSeverityMax())) { page,
wrapper.ge(RmpEventDetailPO::getSeverity, transientParam.getSeverityMin()).le(Objects.nonNull(transientParam.getSeverityMax()), RmpEventDetailPO::getSeverity, transientParam.getSeverityMax()); lineList,
} DateUtil.beginOfDay(DateUtil.parse(transientParam.getSearchBeginTime())),
//波形文件 DateUtil.endOfDay(DateUtil.parse(transientParam.getSearchEndTime())),
if (Objects.nonNull(transientParam.getFileFlag())) { transientParam.getWaveType(),
wrapper.eq(Objects.nonNull(transientParam.getFileFlag()), RmpEventDetailPO::getFileFlag, transientParam.getFileFlag()); transientParam.getEventReason(),
} transientParam.getEventType(),
// Page<RmpEventDetailPO> pageInfo = eventDetailService.page(new Page<>(transientParam.getPageNum(), transientParam.getPageSize()),wrapper); transientParam.getEventValueMin(),
Page<RmpEventDetailPO> pageInfo = pwRmpEventDetailMapper.selectPage(new Page<>(transientParam.getPageNum(), transientParam.getPageSize()), wrapper); transientParam.getEventValueMax(),
transientParam.getPersistMin(),
transientParam.getPersistMax(),
transientParam.getSeverityMin(),
transientParam.getSeverityMax(),
transientParam.getFileFlag(),
transientParam.getSearchValue()
);
List<EventDetailNew> eventDetailData=BeanUtil.copyToList(pageInfo.getRecords(),EventDetailNew.class); // LambdaQueryWrapper<RmpEventDetailPO> wrapper = new LambdaQueryWrapper<RmpEventDetailPO>()
page= BeanUtil.copyProperties(pageInfo,Page.class); // .in(RmpEventDetailPO::getMeasurementPointId, lineList)
// .ge(StringUtils.isNotBlank(transientParam.getSearchBeginTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(transientParam.getSearchBeginTime())))
if (CollUtil.isNotEmpty(eventDetailData)) { // .le(StringUtils.isNotBlank(transientParam.getSearchEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(transientParam.getSearchEndTime())))
List<String> lineIds = eventDetailData.stream().map(EventDetailNew::getLineId).distinct().collect(Collectors.toList()); // // 事件
List<AreaLineInfoVO> r = lineFeignClient.getBaseLineAreaInfo(lineIds).getData(); // .in(CollUtil.isNotEmpty(transientParam.getWaveType()), RmpEventDetailPO::getEventType, transientParam.getWaveType())
List<DictData> reasonList = dicDataFeignClient.getDicDataByTypeName(DicDataTypeEnum.EVENT_REASON.getName()).getData(); // .in(CollUtil.isNotEmpty(transientParam.getEventReason()), RmpEventDetailPO::getAdvanceReason, transientParam.getEventReason())
List<DictData> typeList = dicDataFeignClient.getDicDataByTypeName(DicDataTypeEnum.EVENT_TYPE.getName()).getData(); // .in(CollUtil.isNotEmpty(transientParam.getEventType()), RmpEventDetailPO::getAdvanceType, transientParam.getEventType())
// .orderByDesc(RmpEventDetailPO::getStartTime);
for (EventDetailNew eventDetail : eventDetailData) { // //暂态幅值
for (AreaLineInfoVO areaLineInfoVO : r) { // if (Objects.nonNull(transientParam.getEventValueMin())) {
if (eventDetail.getLineId().equals(areaLineInfoVO.getLineId())) { // wrapper.ge(RmpEventDetailPO::getFeatureAmplitude, transientParam.getEventValueMin().divide(new BigDecimal(100), 2, BigDecimal.ROUND_UP));
eventDetail.setLineId(areaLineInfoVO.getLineId()); // }
eventDetail.setLineName(areaLineInfoVO.getLineName()); // if (Objects.nonNull(transientParam.getEventValueMax())) {
eventDetail.setGdName(areaLineInfoVO.getGdName()); // wrapper.le(RmpEventDetailPO::getFeatureAmplitude, transientParam.getEventValueMax().divide(new BigDecimal(100), 2, BigDecimal.ROUND_UP));
eventDetail.setSubName(areaLineInfoVO.getSubName()); // }
eventDetail.setIp(areaLineInfoVO.getIp()); // if (Objects.nonNull(transientParam.getPersistMin()) && Objects.nonNull(transientParam.getSeverityMax())) {
eventDetail.setScale(areaLineInfoVO.getVoltageScale()); // wrapper.ge(RmpEventDetailPO::getDuration, transientParam.getPersistMin()).le(RmpEventDetailPO::getDuration, transientParam.getPersistMax());
eventDetail.setIp(areaLineInfoVO.getIp()); // }
break; // //严重度
} // if (Objects.nonNull(transientParam.getSeverityMin()) && Objects.nonNull(transientParam.getSeverityMax())) {
} // wrapper.ge(RmpEventDetailPO::getSeverity, transientParam.getSeverityMin()).le(Objects.nonNull(transientParam.getSeverityMax()), RmpEventDetailPO::getSeverity, transientParam.getSeverityMax());
// }
if(StrUtil.isNotBlank(eventDetail.getAdvanceReason())) { // //波形文件
for (DictData dictData : reasonList) { // if (Objects.nonNull(transientParam.getFileFlag())) {
if (eventDetail.getAdvanceReason().equals(dictData.getId())) { // wrapper.eq(Objects.nonNull(transientParam.getFileFlag()), RmpEventDetailPO::getFileFlag, transientParam.getFileFlag());
eventDetail.setAdvanceReason(dictData.getName()); // }
break; // // Page<RmpEventDetailPO> pageInfo = eventDetailService.page(new Page<>(transientParam.getPageNum(), transientParam.getPageSize()),wrapper);
} // Page<RmpEventDetailPO> pageInfo = pwRmpEventDetailMapper.selectPage(new Page<>(transientParam.getPageNum(), transientParam.getPageSize()), wrapper);
} // List<EventDetailNew> eventDetailData=BeanUtil.copyToList(pageInfo.getRecords(),EventDetailNew.class);
} // page= BeanUtil.copyProperties(pageInfo,Page.class);
// if (CollUtil.isNotEmpty(eventDetailData)) {
if(StrUtil.isNotBlank(eventDetail.getAdvanceType())) { // List<String> lineIds = eventDetailData.stream().map(EventDetailNew::getLineId).distinct().collect(Collectors.toList());
for (DictData dictData : typeList) { // List<AreaLineInfoVO> r = lineFeignClient.getBaseLineAreaInfo(lineIds).getData();
if (eventDetail.getAdvanceType().equals(dictData.getId())) { // List<DictData> reasonList = dicDataFeignClient.getDicDataByTypeName(DicDataTypeEnum.EVENT_REASON.getName()).getData();
eventDetail.setAdvanceType(dictData.getName()); // List<DictData> typeList = dicDataFeignClient.getDicDataByTypeName(DicDataTypeEnum.EVENT_TYPE.getName()).getData();
break; // for (EventDetailNew eventDetail : eventDetailData) {
} // DecimalFormat df = new DecimalFormat("#0.000");
} // eventDetail.setSeverity(Double.parseDouble(df.format(eventDetail.getSeverity())));
} // for (AreaLineInfoVO areaLineInfoVO : r) {
} // if (eventDetail.getLineId().equals(areaLineInfoVO.getLineId())) {
// eventDetail.setLineId(areaLineInfoVO.getLineId());
// eventDetail.setLineName(areaLineInfoVO.getLineName());
//当前页数据 // eventDetail.setGdName(areaLineInfoVO.getGdName());
page.setRecords(eventDetailData); // eventDetail.setSubName(areaLineInfoVO.getSubName());
} // eventDetail.setIp(areaLineInfoVO.getIp());
// eventDetail.setScale(areaLineInfoVO.getVoltageScale());
// eventDetail.setIp(areaLineInfoVO.getIp());
// break;
// }
// }
//
// if(StrUtil.isNotBlank(eventDetail.getAdvanceReason())) {
// for (DictData dictData : reasonList) {
// if (eventDetail.getAdvanceReason().equals(dictData.getId())) {
// eventDetail.setAdvanceReason(dictData.getName());
// break;
// }
// }
// }
//
// if(StrUtil.isNotBlank(eventDetail.getAdvanceType())) {
// for (DictData dictData : typeList) {
// if (eventDetail.getAdvanceType().equals(dictData.getId())) {
// eventDetail.setAdvanceType(dictData.getName());
// break;
// }
// }
// }
// }
// //当前页数据
// page.setRecords(eventDetailData);
// }
} }