From 28487ceb63efcee01ab49d61cec424591a423789 Mon Sep 17 00:00:00 2001 From: hzj <826100833@qq.com> Date: Wed, 22 May 2024 14:54:17 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E7=9B=91=E6=B5=8B=E7=82=B9?= =?UTF-8?q?=E8=B6=85=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BpmSupervisionPlanStatusListener.java | 27 +++++ .../pojo/dto/RMpPartHarmonicDetailDTO.java | 13 ++- .../RMpPartHarmonicDetailDServiceImpl.java | 103 +++++++++++++++++- .../pojo/po/plan/SupervisionProblemPO.java | 4 +- .../pojo/vo/plan/SupervisionPlanVO.java | 16 ++- pqs-supervision/supervision-boot/pom.xml | 6 + .../leaflet/WarningLeafletController.java | 16 ++- .../SupervisionTempLineReportServiceImpl.java | 6 +- .../leaflet/IWarningLeafletService.java | 3 + .../impl/WarningLeafletServiceImpl.java | 46 ++++++++ .../impl/SupervisionPlanPOServiceImpl.java | 2 + .../impl/SupervisionProblemPOServiceImpl.java | 7 +- 12 files changed, 231 insertions(+), 18 deletions(-) create mode 100644 pqs-bpm/bpm-boot/src/main/java/com/njcn/bpm/listener/business/BpmSupervisionPlanStatusListener.java diff --git a/pqs-bpm/bpm-boot/src/main/java/com/njcn/bpm/listener/business/BpmSupervisionPlanStatusListener.java b/pqs-bpm/bpm-boot/src/main/java/com/njcn/bpm/listener/business/BpmSupervisionPlanStatusListener.java new file mode 100644 index 000000000..f9d007adf --- /dev/null +++ b/pqs-bpm/bpm-boot/src/main/java/com/njcn/bpm/listener/business/BpmSupervisionPlanStatusListener.java @@ -0,0 +1,27 @@ +package com.njcn.bpm.listener.business; + +import com.njcn.bpm.listener.BpmProcessInstanceStatusEvent; +import com.njcn.bpm.listener.BpmProcessInstanceStatusEventListener; +import com.njcn.supervision.api.SupervisionPlanFeignClient; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + + +@Component +public class BpmSupervisionPlanStatusListener extends BpmProcessInstanceStatusEventListener { + + @Resource + private SupervisionPlanFeignClient supervisionPlanFeignClient; + + @Override + protected String getProcessDefinitionKey() { + return "sup_plan_add"; + } + + @Override + protected void onEvent(BpmProcessInstanceStatusEvent event) { + supervisionPlanFeignClient.updateStatus(event.getBusinessKey(), event.getStatus()); + } + +} diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/dto/RMpPartHarmonicDetailDTO.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/dto/RMpPartHarmonicDetailDTO.java index fe2c1eb43..eacf91149 100644 --- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/dto/RMpPartHarmonicDetailDTO.java +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/dto/RMpPartHarmonicDetailDTO.java @@ -27,6 +27,9 @@ public class RMpPartHarmonicDetailDTO { //告警指标 private String harmonicType; + private List harmonicTypes; + + //母线id private String barId; @@ -45,8 +48,16 @@ public class RMpPartHarmonicDetailDTO { @ApiModelProperty(name = "voltageLevel",value = "电压等级") private String voltageLevel; - //超标天数 + //超标天数占比 private Double overLimitrate; + //超标天数 + private Integer overLimitDay; + //连续超标天数 + private Integer overLimitContinuous; + //预警标志 + private Integer warningFlag; + //告警标志 + private Integer alarmFlag; /*当月超标日期 diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/majornetwork/impl/RMpPartHarmonicDetailDServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/majornetwork/impl/RMpPartHarmonicDetailDServiceImpl.java index d5486b42a..1a05e30db 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/majornetwork/impl/RMpPartHarmonicDetailDServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/majornetwork/impl/RMpPartHarmonicDetailDServiceImpl.java @@ -18,13 +18,13 @@ import com.njcn.system.enums.DicDataEnum; import com.njcn.system.enums.DicDataTypeEnum; import com.njcn.system.pojo.po.DictData; import lombok.RequiredArgsConstructor; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import java.time.LocalDate; import java.time.YearMonth; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; +import java.time.temporal.ChronoUnit; +import java.util.*; import java.util.stream.Collectors; /** @@ -87,9 +87,41 @@ public class RMpPartHarmonicDetailDServiceImpl extends ServiceImpl result = rMpPartHarmonicDetailDTOS.stream(). filter(temp -> CollectionUtil.isEmpty(param.getHarmonicTypes()) ||param.getHarmonicTypes().contains(temp.getHarmonicType())). - filter(temp -> temp.getOverLimitrate() > param.getRate()).collect(Collectors.toList()); + collect(Collectors.toList()); - return result; + //合并指标天数计算连续超标天数,及总超标天数 + Map> map = result.stream().collect(Collectors.groupingBy(RMpPartHarmonicDetailDTO::getMeasurementPointId)); + List rMpPartHarmonicDetailDTOList = new ArrayList<>(); + //获取所有指标类型,如何前端为空则将所有子表类型塞入HarmonicTypes + List collect = steadyStatis.stream().map(DictData::getId).collect(Collectors.toList()); + map.forEach((k,v)->{ + RMpPartHarmonicDetailDTO rMpPartHarmonicDetailDTO = new RMpPartHarmonicDetailDTO(); + RMpPartHarmonicDetailDTO rMpPartHarmonicDetailDTO1 = v.get(0); + BeanUtils.copyProperties(rMpPartHarmonicDetailDTO1,rMpPartHarmonicDetailDTO); + rMpPartHarmonicDetailDTO.setHarmonicTypes( CollectionUtil.isEmpty(param.getHarmonicTypes())?collect:param.getHarmonicTypes()); + List> collect1 = v.stream().map(RMpPartHarmonicDetailDTO::getDateList).collect(Collectors.toList()); + List union = collect1.stream() + .flatMap(List::stream) + .distinct() + .collect(Collectors.toList()); + rMpPartHarmonicDetailDTO.setDateList(union); + rMpPartHarmonicDetailDTO.setOverLimitDay(union.size()); + rMpPartHarmonicDetailDTO.setOverLimitrate(Double.parseDouble(union.size()+"")/daysInMonth); + int i = maxConsecutiveDays(union); + rMpPartHarmonicDetailDTO.setOverLimitContinuous(i); + //监测点连续越限10天的为 + //预警测点,连续越限15天的为告警监测点 + if(i<10){ + return; + }else if(i>=10&&i<15) { + rMpPartHarmonicDetailDTO.setWarningFlag(1); + }else{ + rMpPartHarmonicDetailDTO.setAlarmFlag(1); + } + rMpPartHarmonicDetailDTOList.add(rMpPartHarmonicDetailDTO); + }); + + return rMpPartHarmonicDetailDTOList; } @@ -200,4 +232,65 @@ public class RMpPartHarmonicDetailDServiceImpl extends ServiceImpl 为超标天数,判断连续超标天数 + * @Param: + * @return: int + * @Author: clam + * @Date: 2024/5/21 + */ + public static int maxConsecutiveDays(List signInDays) { + + Collections.sort(signInDays); + int maxConsecutiveDays = 0; + int currentConsecutiveDays = 1; + + for (int i = 1; i < signInDays.size(); i++) { + long daysBetween = ChronoUnit.DAYS.between(signInDays.get(i - 1), signInDays.get(i)); + if (daysBetween == 1) { + currentConsecutiveDays++; + } else { + currentConsecutiveDays = 1; + } + maxConsecutiveDays = Math.max(maxConsecutiveDays, currentConsecutiveDays); + } + + return maxConsecutiveDays; + } + + public static void main(String[] args) { + List signInDays = new ArrayList<>(); + signInDays.add(LocalDate.of(2022, 1, 1)); + signInDays.add(LocalDate.of(2022, 1, 2)); + signInDays.add(LocalDate.of(2022, 1, 3)); + signInDays.add(LocalDate.of(2022, 1, 5)); + signInDays.add(LocalDate.of(2022, 1, 6)); + signInDays.add(LocalDate.of(2022, 1, 7)); + signInDays.add(LocalDate.of(2022, 1, 8)); + + signInDays.add(LocalDate.of(2022, 1, 9)); +// signInDays.add(LocalDate.of(2022, 1, 10)); +// signInDays.add(LocalDate.of(2022, 1, 11)); +// signInDays.add(LocalDate.of(2022, 1, 12)); +// signInDays.add(LocalDate.of(2022, 1, 14)); +// signInDays.add(LocalDate.of(2022, 1, 15)); +// signInDays.add(LocalDate.of(2022, 1, 16)); +// signInDays.add(LocalDate.of(2022, 1, 18)); +// signInDays.add(LocalDate.of(2022, 1, 19)); +// signInDays.add(LocalDate.of(2022, 1, 20)); +// signInDays.add(LocalDate.of(2022, 1, 21)); +// signInDays.add(LocalDate.of(2022, 1, 22)); +// signInDays.add(LocalDate.of(2022, 1, 23)); +// signInDays.add(LocalDate.of(2022, 1, 24)); +// signInDays.add(LocalDate.of(2022, 1, 25)); +// signInDays.add(LocalDate.of(2022, 1, 26)); +// signInDays.add(LocalDate.of(2022, 1, 27)); +// signInDays.add(LocalDate.of(2022, 1, 28)); +// signInDays.add(LocalDate.of(2022, 1, 29)); +// signInDays.add(LocalDate.of(2022, 1, 30)); +// signInDays.add(LocalDate.of(2022, 1, 31)); + int maxConsecutiveDays = maxConsecutiveDays(signInDays); + + System.out.println(maxConsecutiveDays); + } } diff --git a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/plan/SupervisionProblemPO.java b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/plan/SupervisionProblemPO.java index 06fff15ca..30d3fe544 100644 --- a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/plan/SupervisionProblemPO.java +++ b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/plan/SupervisionProblemPO.java @@ -72,7 +72,7 @@ public class SupervisionProblemPO extends BaseEntity { * 是否发布预告警 */ @TableField(value = "if_Release_Warning") - private Boolean ifReleaseWarning; + private String ifReleaseWarning; @TableField(value = "problem_Desc") private String problemDesc; @@ -138,7 +138,7 @@ public class SupervisionProblemPO extends BaseEntity { * 是否上送国网 0.未上送 1.上送 */ @TableField(value = "is_Upload_Head") - private Boolean isUploadHead; + private String isUploadHead; /** * 问题发现时间 diff --git a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/plan/SupervisionPlanVO.java b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/plan/SupervisionPlanVO.java index 129eba016..3aabd442a 100644 --- a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/plan/SupervisionPlanVO.java +++ b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/plan/SupervisionPlanVO.java @@ -66,8 +66,7 @@ public class SupervisionPlanVO { * 计划监督时间 */ @ApiModelProperty(value = "计划监督时间",required = true) - @JsonFormat(pattern = "yyyy-MM") - private String planSupvDate; + private LocalDateTime planSupvDate; /** * 监督对象名称 @@ -180,4 +179,17 @@ public class SupervisionPlanVO { @ApiModelProperty(value = "计划状态") private String planStatus; + + /** + * 1:审批中;2:审批通过;3:审批不通过;4:已取消 + */ + @ApiModelProperty(value = "审批状态") + private Integer status; + + /** + * 流程实例的编号 + */ + @ApiModelProperty(value = "流程实例的编号") + private String processInstanceId; + } diff --git a/pqs-supervision/supervision-boot/pom.xml b/pqs-supervision/supervision-boot/pom.xml index 7dc1f32bc..e550e05ad 100644 --- a/pqs-supervision/supervision-boot/pom.xml +++ b/pqs-supervision/supervision-boot/pom.xml @@ -52,6 +52,12 @@ common-web ${project.version} + + com.njcn + harmonic-api + 1.0.0 + compile + diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/leaflet/WarningLeafletController.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/leaflet/WarningLeafletController.java index bab303148..0c5b6ab4d 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/leaflet/WarningLeafletController.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/leaflet/WarningLeafletController.java @@ -7,9 +7,11 @@ 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.supervision.pojo.vo.leaflet.WarningLeafletVO; +import com.njcn.harmonic.pojo.dto.RMpPartHarmonicDetailDTO; import com.njcn.supervision.pojo.param.leaflet.WarningLeafletParam; +import com.njcn.supervision.pojo.vo.leaflet.WarningLeafletVO; import com.njcn.supervision.service.leaflet.IWarningLeafletService; +import com.njcn.web.controller.BaseController; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiOperation; @@ -19,9 +21,7 @@ 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; /** *

@@ -61,5 +61,15 @@ public class WarningLeafletController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, out, methodDescribe); } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/addLineOverLimitData") + @ApiOperation("监测点超标预警单/告警单新增") + @ApiImplicitParam(name = "rMpPartHarmonicDetailDTO", value = "参数", required = true) + public HttpResult addLineOverLimitData(@RequestBody @Validated RMpPartHarmonicDetailDTO rMpPartHarmonicDetailDTO) { + String methodDescribe = getMethodDescribe("addLineOverLimitData"); + String out = warningLeafletService.addLineOverLimitData(rMpPartHarmonicDetailDTO); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, out, methodDescribe); + } + } diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/SupervisionTempLineReportServiceImpl.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/SupervisionTempLineReportServiceImpl.java index a31c05d62..a9156c1d1 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/SupervisionTempLineReportServiceImpl.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/SupervisionTempLineReportServiceImpl.java @@ -20,6 +20,7 @@ import com.njcn.supervision.pojo.param.device.SupervisionTempLineReportParam; import com.njcn.supervision.pojo.po.device.SupervisionTempLineReport; import com.njcn.supervision.pojo.vo.device.SupervisionTempLineReportVO; import com.njcn.supervision.service.device.SupervisionTempLineReportService; +import com.njcn.system.api.DictTreeFeignClient; import com.njcn.user.api.DeptFeignClient; import com.njcn.user.api.UserFeignClient; import com.njcn.user.pojo.vo.UserVO; @@ -56,7 +57,7 @@ public class SupervisionTempLineReportServiceImpl extends ServiceImpl { Page alarmPageData(WarningLeafletParam.WarningLeafletQueryParam warningLeafletQueryParam); Page warningPageData(WarningLeafletParam.WarningLeafletQueryParam warningLeafletQueryParam); + + String addLineOverLimitData(RMpPartHarmonicDetailDTO rMpPartHarmonicDetailDTO); } diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/leaflet/impl/WarningLeafletServiceImpl.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/leaflet/impl/WarningLeafletServiceImpl.java index c35341573..b44dc2fb3 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/leaflet/impl/WarningLeafletServiceImpl.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/leaflet/impl/WarningLeafletServiceImpl.java @@ -1,25 +1,35 @@ package com.njcn.supervision.service.leaflet.impl; +import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.date.LocalDateTimeUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.njcn.common.pojo.enums.common.DataStateEnum; +import com.njcn.harmonic.pojo.dto.RMpPartHarmonicDetailDTO; import com.njcn.supervision.enums.FlowStatusEnum; import com.njcn.supervision.enums.LeafletTypeEnum; +import com.njcn.supervision.enums.ProblemTypeEnum; import com.njcn.supervision.mapper.leaflet.WarningLeafletMapper; import com.njcn.supervision.pojo.param.leaflet.WarningLeafletParam; import com.njcn.supervision.pojo.po.leaflet.WarningLeaflet; import com.njcn.supervision.pojo.vo.leaflet.WarningLeafletVO; import com.njcn.supervision.service.leaflet.IWarningLeafletService; +import com.njcn.system.api.DicDataFeignClient; +import com.njcn.system.enums.DicDataTypeEnum; +import com.njcn.system.pojo.po.DictData; import com.njcn.user.api.UserFeignClient; import com.njcn.web.factory.PageFactory; import com.njcn.web.utils.RequestUtil; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; +import java.time.LocalDate; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** *

@@ -34,6 +44,7 @@ import java.util.Objects; public class WarningLeafletServiceImpl extends ServiceImpl implements IWarningLeafletService { private final UserFeignClient userFeignClient; + private final DicDataFeignClient dicDataFeignClient; /** * 不创建工作流,只是创建一个告警单,需要待用户反馈后才会进入流程 @@ -88,4 +99,39 @@ public class WarningLeafletServiceImpl extends ServiceImpl(PageFactory.getPageNum(warningLeafletQueryParam), PageFactory.getPageSize(warningLeafletQueryParam)), warningLeafletVOQueryWrapper); } + + @Override + public String addLineOverLimitData(RMpPartHarmonicDetailDTO rMpPartHarmonicDetailDTO) { + //组装预警告警信息 + String info = assembleOverLimitInfo(rMpPartHarmonicDetailDTO); +// checkInfo(info); + this.createLeaflet( + rMpPartHarmonicDetailDTO.getMeasurementPointName(), + IdWorker.get32UUID(), + rMpPartHarmonicDetailDTO.getMeasurementPointId(), + ProblemTypeEnum.ONLINE.getCode(), + Objects.equals(rMpPartHarmonicDetailDTO.getAlarmFlag(),1) ? LeafletTypeEnum.ALARM.getCode(): LeafletTypeEnum.WARNING.getCode(), + assembleOverLimitInfo(rMpPartHarmonicDetailDTO) + ); + + return null; + } + + private String assembleOverLimitInfo(RMpPartHarmonicDetailDTO rMpPartHarmonicDetailDTO) { + String info =""; + String leafletType = Objects.equals(rMpPartHarmonicDetailDTO.getAlarmFlag(),1) ? "告警单" : "预警单"; + /*获取稳态统计指标*/ + List steadyStatis = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.INDICATOR_TYPE.getCode()).getData(); + List harmonicTypes = steadyStatis.stream().filter(temp -> rMpPartHarmonicDetailDTO.getHarmonicTypes().contains(temp.getId())).map(DictData::getName).collect(Collectors.toList()); + + info= "预警/告警单类型:"+ "监测点超标"+leafletType+" "+ + "预警/告警单生成时间:"+ LocalDateTimeUtil.format(LocalDate.now(), DatePattern.CHINESE_DATE_PATTERN)+"\n"+ + "超标电站名称:" +rMpPartHarmonicDetailDTO.getSustationName()+" "+"超标母线名称:" +rMpPartHarmonicDetailDTO.getBarName()+" "+"超标监测点名称:" +rMpPartHarmonicDetailDTO.getMeasurementPointName()+"\n"+ + "统计超标指标:" +String.join(",",harmonicTypes)+"\n"+ + "当月累计超标天数:" +rMpPartHarmonicDetailDTO.getOverLimitDay()+"天"+" "+ "当月累计连续天数:" +rMpPartHarmonicDetailDTO.getOverLimitContinuous()+"天"+"\n"+ + "超标天数详情:"+rMpPartHarmonicDetailDTO.getDateList(); + log.warn(info); + + return info; + } } diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/plan/impl/SupervisionPlanPOServiceImpl.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/plan/impl/SupervisionPlanPOServiceImpl.java index c0142d681..74e3355ad 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/plan/impl/SupervisionPlanPOServiceImpl.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/plan/impl/SupervisionPlanPOServiceImpl.java @@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.njcn.bpm.api.BpmProcessFeignClient; +import com.njcn.bpm.enums.BpmTaskStatusEnum; import com.njcn.bpm.pojo.dto.BpmProcessInstanceCreateReqDTO; import com.njcn.common.pojo.enums.common.DataStateEnum; import com.njcn.common.pojo.exception.BusinessException; @@ -101,6 +102,7 @@ public class SupervisionPlanPOServiceImpl extends ServiceImpl