From fb593ae053bc733bfe125867126e2981874978f0 Mon Sep 17 00:00:00 2001 From: xuyang <748613696@qq.com> Date: Mon, 8 May 2023 20:38:23 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=B0=83=E6=95=B4;=E7=9B=91?= =?UTF-8?q?=E6=B5=8B=E7=82=B9=E6=8C=87=E6=A0=87=E5=91=8A=E8=AD=A6=E6=97=A5?= =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E9=83=A8=E5=88=86=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../harmonic/pojo/dto/AlarmDetailDayDTO.java | 30 ++++ .../prepare/harmonic/utils/PublicUtil.java | 9 + .../line/RMpTargetWarnDController.java | 57 +++++++ .../mapper/mysql/day/RStatDataVDMapper.java | 18 ++ .../mysql/day/mapping/RStatDataVDMapper.xml | 158 ++++++++++++++++++ .../mapper/mysql/line/AlarmMapper.java | 8 +- .../mapper/mysql/line/mapping/AlarmMapper.xml | 84 ++-------- .../Impl/line/AlarmDetailServiceImpl.java | 19 ++- .../Impl/line/RMpTargetWarnDServiceImpl.java | 76 +++++++++ .../mysql/line/AlarmDetailService.java | 5 + .../mysql/line/IRMpTargetWarnDService.java | 19 +++ 11 files changed, 400 insertions(+), 83 deletions(-) create mode 100644 pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/dto/AlarmDetailDayDTO.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/line/RMpTargetWarnDController.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/RMpTargetWarnDServiceImpl.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/line/IRMpTargetWarnDService.java diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/dto/AlarmDetailDayDTO.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/dto/AlarmDetailDayDTO.java new file mode 100644 index 000000000..76eaa7703 --- /dev/null +++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/dto/AlarmDetailDayDTO.java @@ -0,0 +1,30 @@ +package com.njcn.prepare.harmonic.pojo.dto; + +import lombok.Data; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/5/8 18:36 + */ +@Data +public class AlarmDetailDayDTO { + + private String lineId; + + private Double vlDev; + + private Double freqDev; + + private Double vUnbalance; + + private Double vHarmonic; + + private Double plt; + + private Double sagTimes; + + private Double interruptTimes; +} diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/utils/PublicUtil.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/utils/PublicUtil.java index c6c2f6f6e..570fe9670 100644 --- a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/utils/PublicUtil.java +++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/utils/PublicUtil.java @@ -155,6 +155,15 @@ public class PublicUtil { return localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); } + /** + * 获取去年今日 + */ + public static String getLastYearDay(String time) { + LocalDate localDate = LocalDate.parse(time).minusYears(1); + return localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); + } + + /** * @Description: 根据电压字典获取电压等级 * @Param: [id, dictDataList] diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/line/RMpTargetWarnDController.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/line/RMpTargetWarnDController.java new file mode 100644 index 000000000..f396ad81e --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/line/RMpTargetWarnDController.java @@ -0,0 +1,57 @@ +package com.njcn.prepare.harmonic.controller.line; + + +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.constant.OperateType; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.prepare.harmonic.pojo.param.LineParam; +import com.njcn.prepare.harmonic.service.mysql.line.IRMpTargetWarnDService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; +import com.njcn.web.controller.BaseController; + +/** + *

+ * 前端控制器 + *

+ * + * @author xuyang + * @since 2023-05-08 + */ +@Validated +@Slf4j +@RestController +@RequestMapping("/alarmDetailData") +@Api(tags = "监测点指标告警明细") +@AllArgsConstructor +public class RMpTargetWarnDController extends BaseController { + + private final IRMpTargetWarnDService irMpTargetWarnDService; + + /** + * @author xuyang + */ + @OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.ADD) + @PostMapping("/alarmDay") + @ApiOperation("监测点指标告警日统计") + @ApiImplicitParam(name = "lineParam", value = "算法通用查询参数", required = true) + public HttpResult alarmDay(@RequestBody @Validated LineParam lineParam) { + String methodDescribe = getMethodDescribe("alarmDay"); + irMpTargetWarnDService.alarmDay(lineParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } + +} + diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/RStatDataVDMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/RStatDataVDMapper.java index 380587d8e..8815fb3a2 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/RStatDataVDMapper.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/RStatDataVDMapper.java @@ -2,6 +2,24 @@ package com.njcn.prepare.harmonic.mapper.mysql.day; import com.github.jeffreyning.mybatisplus.base.MppBaseMapper; import com.njcn.harmonic.pojo.po.day.RStatDataVDPO; +import com.njcn.prepare.harmonic.pojo.dto.AlarmDetailDayDTO; +import com.njcn.prepare.harmonic.pojo.mysql.po.line.RMpTargetDiffDPO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; public interface RStatDataVDMapper extends MppBaseMapper { + + /** + * 获取本年的所有(监测点日报表)稳态指标最大值(有的取最大值,有的取95概率大值) + * @param time 时间 + * @return 集合 + */ + List getDayData(@Param("time") String time); + + /** + * 获取本年的所有(监测点日报表)稳态指标最大值(有的取最大值,有的取95概率大值)求一个平均值 + */ + List getAvgDayData(@Param("startTime") String time, @Param("endTime") String endTime); + } diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/mapping/RStatDataVDMapper.xml b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/mapping/RStatDataVDMapper.xml index 2a953176c..a78448396 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/mapping/RStatDataVDMapper.xml +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/day/mapping/RStatDataVDMapper.xml @@ -2,4 +2,162 @@ + + + \ No newline at end of file diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/line/AlarmMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/line/AlarmMapper.java index 1e0601c29..2676c693b 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/line/AlarmMapper.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/line/AlarmMapper.java @@ -1,6 +1,7 @@ package com.njcn.prepare.harmonic.mapper.mysql.line; import com.github.jeffreyning.mybatisplus.base.MppBaseMapper; +import com.njcn.prepare.harmonic.pojo.dto.AlarmDetailDayDTO; import com.njcn.prepare.harmonic.pojo.mysql.po.line.RMpTargetDiffDPO; import org.apache.ibatis.annotations.Param; @@ -12,11 +13,6 @@ import java.util.List; */ public interface AlarmMapper extends MppBaseMapper { - /** - * 获取监测点每日指标数据 - * @param time 时间 - * @return 集合 - */ - List getDayData(@Param("time") String time); + List getAvgDiffData(@Param("startTime") String startTime, @Param("endTime") String endTime); } diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/line/mapping/AlarmMapper.xml b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/line/mapping/AlarmMapper.xml index a47f9cf11..77b3bdfb6 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/line/mapping/AlarmMapper.xml +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/line/mapping/AlarmMapper.xml @@ -2,79 +2,19 @@ - select - A.time, - A.lineId, - coalesce(A.vUnbalance, 0) vUnbalance, - coalesce(A.v, 0) vHarmonic, - coalesce(B.vlDev, 0) vlDev, - coalesce(B.freqDev, 0) freqDev, - coalesce(C.plt, 0) plt, - coalesce(D.sagTimes, 0) sagTimes, - coalesce(D.interruptTimes, 0) interruptTimes + line_id lineId, + avg(vl_dev) vlDev, + avg(freq_dev) freqDev, + avg(v_unbalance) vUnbalance, + avg(v_harmonic) vHarmonic, + avg(plt) plt, + avg(sag_times) sagTimes, + avg(interrupt_times) interruptTimes from - ( - select - `time`, - line_id lineId, - max(abs(v_unbalance)) vUnbalance, - max(greatest(abs(v_thd), v_1, v_2, v_3, v_4, v_5, v_6, v_7, v_8, v_9, v_10, v_11, v_12, v_13, v_14, v_15, v_16, v_17, v_18, v_19, v_20, v_21, v_22, v_23, v_24, v_25, v_26, v_27, v_28, v_29, v_30, v_31, v_32, v_33, v_34, v_35, v_36, v_37, v_38, v_39, v_40, v_41, v_42, v_43, v_44, v_45, v_46, v_47, v_48, v_49, v_50)) v - from - r_stat_data_v_d t0 - where - `time` = #{time} - and value_type = 'CP95' - group by - `time`, - line_id - ) A - left join - ( - select - `time`, - line_id lineId, - max(abs(vl_dev)) vlDev, - max(abs(freq_dev)) freqDev - from - r_stat_data_v_d t0 - where - `time` = #{time} - and value_type = 'MAX' - group by - `time`, - line_id - ) B - on A.time = B.time and A.lineId = B.lineId - left join - ( - select - `time` , - line_id lineId, - max(plt) plt - from - r_stat_data_plt_d - where - `time` = #{time} - and value_type = 'MAX' - group by - `time`, - line_id - ) C - on A.time = C.time and A.lineId = C.lineId - left join - ( - select - measurement_point_id lineId, - data_date dataDate, - sag_times sagTimes, - interrupt_times interruptTimes - from - r_mp_event_detail_d - where - data_date = #{time} - ) D - on A.time = D.dataDate and A.lineId = D.lineId + r_mp_target_diff_d + where `time` between #{startTime} and #{endTime} + group by line_id - diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/AlarmDetailServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/AlarmDetailServiceImpl.java index a371ab6c0..8f254e23a 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/AlarmDetailServiceImpl.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/AlarmDetailServiceImpl.java @@ -10,7 +10,9 @@ import com.njcn.device.pms.pojo.po.DistributionMonitor; import com.njcn.device.pms.pojo.po.Monitor; import com.njcn.harmonic.pojo.po.RMpTargetWarnDPO; import com.njcn.prepare.harmonic.mapper.mysql.area.RMpTargetWarnDMapper; +import com.njcn.prepare.harmonic.mapper.mysql.day.RStatDataVDMapper; import com.njcn.prepare.harmonic.mapper.mysql.line.*; +import com.njcn.prepare.harmonic.pojo.dto.AlarmDetailDayDTO; import com.njcn.prepare.harmonic.pojo.mysql.po.line.RMpTargetDiffDPO; import com.njcn.prepare.harmonic.pojo.param.LineParam; import com.njcn.prepare.harmonic.service.mysql.line.AlarmDetailService; @@ -23,10 +25,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; -import java.lang.reflect.Array; import java.time.LocalDate; -import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @@ -61,6 +60,8 @@ public class AlarmDetailServiceImpl extends MppServiceImpl getAvgDiffData(LineParam lineParam) { + String startTime = lineParam.getDataDate(); + String endTime = PublicUtil.getLastYearDay(startTime); + //计算本年的rm值 + return this.baseMapper.getAvgDiffData(startTime,endTime); + } + /** * 生成指标差值日统计 */ public void diffData(String startTime, String endTime) { - List localData = this.baseMapper.getDayData(startTime); - List yesterdayData = this.baseMapper.getDayData(endTime); + List localData = rStatDataVDMapper.getDayData(startTime); + List yesterdayData = rStatDataVDMapper.getDayData(endTime); if (!CollectionUtils.isEmpty(localData) && !CollectionUtils.isEmpty(yesterdayData)){ //取两个集合的交集,做算法处理取绝对值 List intersectionList = localData.stream().map(map->yesterdayData.stream().filter(m->Objects.equals(m.getLineId(),map.getLineId())).findFirst().map(m->{ diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/RMpTargetWarnDServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/RMpTargetWarnDServiceImpl.java new file mode 100644 index 000000000..45fb1ba5c --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/line/RMpTargetWarnDServiceImpl.java @@ -0,0 +1,76 @@ +package com.njcn.prepare.harmonic.service.mysql.Impl.line; + +import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; +import com.njcn.harmonic.pojo.po.RMpTargetWarnDPO; +import com.njcn.prepare.harmonic.mapper.mysql.area.RMpTargetWarnDMapper; +import com.njcn.prepare.harmonic.mapper.mysql.day.RStatDataVDMapper; +import com.njcn.prepare.harmonic.pojo.dto.AlarmDetailDayDTO; +import com.njcn.prepare.harmonic.pojo.mysql.po.line.RMpTargetDiffDPO; +import com.njcn.prepare.harmonic.pojo.param.LineParam; +import com.njcn.prepare.harmonic.service.mysql.line.AlarmDetailService; +import com.njcn.prepare.harmonic.service.mysql.line.IRMpTargetWarnDService; +import com.njcn.prepare.harmonic.utils.PublicUtil; +import lombok.AllArgsConstructor; +import org.checkerframework.checker.units.qual.A; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +/** + *

+ * 服务实现类 + *

+ * + * @author xuyang + * @since 2023-05-08 + */ +@Service +@AllArgsConstructor +public class RMpTargetWarnDServiceImpl extends MppServiceImpl implements IRMpTargetWarnDService { + + private final AlarmDetailService alarmDetailService; + + private final RStatDataVDMapper rStatDataVDMapper; + + @Override + public void alarmDay(LineParam lineParam) { + //本年的rm值 + List rmList = alarmDetailService.getAvgDiffData(lineParam); + //本年的CL值 + List clList = rStatDataVDMapper.getAvgDayData(lineParam.getDataDate(), PublicUtil.getLastYearDay(lineParam.getDataDate())); + //本年的RL值 + List rlList = rmList.stream().map(item->{ + AlarmDetailDayDTO alarmDetailDayDTO = new AlarmDetailDayDTO(); + alarmDetailDayDTO.setLineId(item.getLineId()); + alarmDetailDayDTO.setVlDev(item.getVlDev()*3.3); + alarmDetailDayDTO.setFreqDev(item.getFreqDev()*3.3); + alarmDetailDayDTO.setVUnbalance(item.getVUnbalance()*3.3); + alarmDetailDayDTO.setVHarmonic(item.getVHarmonic()*3.3); + alarmDetailDayDTO.setSagTimes(item.getSagTimes()*3.3); + alarmDetailDayDTO.setInterruptTimes(item.getInterruptTimes()*3.3); + return alarmDetailDayDTO; + }).collect(Collectors.toList()); + //本年的UCL值 + List uclList = rmList.stream().map(map->clList.stream().filter(m-> Objects.equals(m.getLineId(),map.getLineId())).findFirst().map(m->{ + AlarmDetailDayDTO alarmDetailDayDTO = new AlarmDetailDayDTO(); + alarmDetailDayDTO.setLineId(map.getLineId()); + alarmDetailDayDTO.setVlDev(m.getVlDev()+map.getVlDev()*3); + alarmDetailDayDTO.setFreqDev(m.getFreqDev()+map.getFreqDev()*3); + alarmDetailDayDTO.setVUnbalance(m.getVUnbalance()+map.getVUnbalance()*3); + alarmDetailDayDTO.setVHarmonic(m.getVHarmonic()+map.getVHarmonic()*3); + alarmDetailDayDTO.setSagTimes(m.getSagTimes()+map.getSagTimes()*3); + alarmDetailDayDTO.setInterruptTimes(m.getInterruptTimes()+map.getInterruptTimes()*3); + return alarmDetailDayDTO; + }).orElse(null)).filter(Objects::nonNull).collect(Collectors.toList()); + + + + } + + @Override + public void alarmMonth(LineParam lineParam) { + + } +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/line/AlarmDetailService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/line/AlarmDetailService.java index cdb9d19d0..cafc269fa 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/line/AlarmDetailService.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/line/AlarmDetailService.java @@ -1,7 +1,10 @@ package com.njcn.prepare.harmonic.service.mysql.line; +import com.njcn.prepare.harmonic.pojo.dto.AlarmDetailDayDTO; import com.njcn.prepare.harmonic.pojo.param.LineParam; +import java.util.List; + /** * 监测点指标告警明细 * @@ -20,4 +23,6 @@ public interface AlarmDetailService { boolean alarmDetailAlarm(LineParam lineParam); void targetDiff(LineParam lineParam); + + List getAvgDiffData(LineParam lineParam); } diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/line/IRMpTargetWarnDService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/line/IRMpTargetWarnDService.java new file mode 100644 index 000000000..ae5b4b080 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/line/IRMpTargetWarnDService.java @@ -0,0 +1,19 @@ +package com.njcn.prepare.harmonic.service.mysql.line; + +import com.njcn.prepare.harmonic.pojo.param.LineParam; + +/** + *

+ * 服务类 + *

+ * + * @author xuyang + * @since 2023-05-08 + */ +public interface IRMpTargetWarnDService { + + void alarmDay(LineParam lineParam); + + void alarmMonth(LineParam lineParam); + +}