diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/RMpTargetDiffDPO.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/RMpTargetDiffDPO.java new file mode 100644 index 000000000..7fc5b1840 --- /dev/null +++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/RMpTargetDiffDPO.java @@ -0,0 +1,50 @@ +package com.njcn.prepare.harmonic.pojo.mysql.po.line; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/5/8 9:53 + */ +@Data +@TableName(value = "r_mp_target_diff_d") +public class RMpTargetDiffDPO implements Serializable { + + @MppMultiId(value = "time") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date time; + + @MppMultiId(value = "line_id") + private String lineId; + + @TableField(value = "vl_dev") + private Double vlDev; + + @TableField(value = "freq_dev") + private Double freqDev; + + @TableField(value = "v_unbalance") + private Double vUnbalance; + + @TableField(value = "v_harmonic") + private Double vHarmonic; + + @TableField(value = "plt") + private Double plt; + + @TableField(value = "sag_times") + private Integer sagTimes; + + @TableField(value = "interrupt_times") + private Integer 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 906fa0b72..c6c2f6f6e 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 @@ -6,6 +6,9 @@ import com.njcn.device.pq.constant.Param; import com.njcn.system.pojo.po.DictData; import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; public class PublicUtil { @@ -144,6 +147,14 @@ public class PublicUtil { return sp.format(d); } + /** + * 根据指定的时间获取昨日时间 + */ + public static String getYesterday(String time) { + LocalDate localDate = LocalDate.parse(time).minusDays(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/AlarmDetailController.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/line/AlarmDetailController.java index 3f4aea155..6462abea1 100644 --- a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/line/AlarmDetailController.java +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/line/AlarmDetailController.java @@ -48,4 +48,17 @@ public class AlarmDetailController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); } } + + /** + * @author xuyang + */ + @OperateInfo(info = LogEnum.BUSINESS_COMMON,operateType = OperateType.ADD) + @PostMapping("/targetDiff") + @ApiOperation("监测点稳态指标差值日统计") + @ApiImplicitParam(name = "lineParam", value = "算法通用查询参数", required = true) + public HttpResult targetDiff(@RequestBody @Validated LineParam lineParam) { + String methodDescribe = getMethodDescribe("targetDiff"); + alarmDetailService.targetDiff(lineParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } } 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 new file mode 100644 index 000000000..1e0601c29 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/line/AlarmMapper.java @@ -0,0 +1,22 @@ +package com.njcn.prepare.harmonic.mapper.mysql.line; + +import com.github.jeffreyning.mybatisplus.base.MppBaseMapper; +import com.njcn.prepare.harmonic.pojo.mysql.po.line.RMpTargetDiffDPO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * @author xuyang + * @date 2023/05/08 + */ +public interface AlarmMapper extends MppBaseMapper { + + /** + * 获取监测点每日指标数据 + * @param time 时间 + * @return 集合 + */ + List getDayData(@Param("time") String time); + +} 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 new file mode 100644 index 000000000..a47f9cf11 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/line/mapping/AlarmMapper.xml @@ -0,0 +1,80 @@ + + + + + + + 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 d36e8f48a..a371ab6c0 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 @@ -3,6 +3,7 @@ package com.njcn.prepare.harmonic.service.mysql.Impl.line; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.njcn.device.pms.api.DistributionMonitorClient; import com.njcn.device.pms.api.MonitorClient; import com.njcn.device.pms.pojo.po.DistributionMonitor; @@ -10,17 +11,25 @@ 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.line.*; +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.utils.PublicUtil; import com.njcn.system.api.DicDataFeignClient; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; 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; /** * 数据是否异常 @@ -32,7 +41,7 @@ import java.util.Objects; @Service @RequiredArgsConstructor @Slf4j -public class AlarmDetailServiceImpl implements AlarmDetailService { +public class AlarmDetailServiceImpl extends MppServiceImpl implements AlarmDetailService { private final DistributionMonitorClient distributionMonitorClient; @@ -104,6 +113,55 @@ public class AlarmDetailServiceImpl implements AlarmDetailService { return true; } + @Override + @Transactional(rollbackFor = {Exception.class}) + @Async("asyncExecutor") + public void targetDiff(LineParam lineParam) { + String startTime,endTime; + //月处理 + if (lineParam.getType() == 3){ + int year = Integer.parseInt(lineParam.getDataDate().split("-")[0]); + int month = Integer.parseInt(lineParam.getDataDate().split("-")[1]); + List dayList = PublicUtil.getDayByMonth(year,month); + for (String item : dayList) { + log.info(item+"-->开始执行"); + startTime = item + " 00:00:00"; + endTime = PublicUtil.getYesterday(item) + " 00:00:00"; + diffData(startTime,endTime); + } + } + //日处理 + else { + startTime = lineParam.getDataDate() + " 00:00:00"; + endTime = PublicUtil.getYesterday(lineParam.getDataDate()) + " 00:00:00"; + diffData(startTime,endTime); + } + } + + /** + * 生成指标差值日统计 + */ + public void diffData(String startTime, String endTime) { + List localData = this.baseMapper.getDayData(startTime); + List yesterdayData = this.baseMapper.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->{ + map.setVlDev(Math.abs(map.getVlDev()-m.getVlDev())); + map.setFreqDev(Math.abs(map.getFreqDev()-m.getFreqDev())); + map.setVUnbalance(Math.abs(map.getVUnbalance()-m.getVUnbalance())); + map.setVHarmonic(Math.abs(map.getVHarmonic()-m.getVHarmonic())); + map.setPlt(Math.abs(map.getPlt()-m.getPlt())); + map.setSagTimes(Math.abs(map.getSagTimes()-m.getSagTimes())); + map.setInterruptTimes(Math.abs(map.getInterruptTimes()-m.getInterruptTimes())); + return map; + }).orElse(null)).filter(Objects::nonNull).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(intersectionList)){ + this.saveOrUpdateBatchByMultiId(intersectionList,50); + } + } + } + /** * 处理数据(电压偏差告警日统计) * @author qijian 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 f279f5b38..cdb9d19d0 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 @@ -18,4 +18,6 @@ public interface AlarmDetailService { * @return */ boolean alarmDetailAlarm(LineParam lineParam); + + void targetDiff(LineParam lineParam); }