From 0677320a060f28e63c0c9d2fad65f3a0cd57d7ee Mon Sep 17 00:00:00 2001 From: xy <748613696@qq.com> Date: Tue, 25 Jun 2024 09:11:30 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E7=9B=91=E6=B5=8B=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=201.=E9=A2=84=E5=A4=84=E7=90=86=E7=94=9F=E6=88=90?= =?UTF-8?q?=E8=B6=85=E6=A0=87=E6=95=B0=E6=8D=AE=E5=92=8C=E6=97=A0=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=9B=91=E6=B5=8B=E7=82=B9=E6=95=B0=E6=8D=AE=202.?= =?UTF-8?q?=E5=88=86=E9=A1=B5=E6=9F=A5=E8=AF=A2=E6=95=B0=E6=8D=AE=203.?= =?UTF-8?q?=E7=94=9F=E6=88=90=E9=A2=84=E5=91=8A=E8=AD=A6=E5=8D=95(?= =?UTF-8?q?=E5=A4=84=E7=90=86=E4=B8=AD)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../device/pq/api/DeptLineFeignClient.java | 3 + .../njcn/device/pq/api/LineFeignClient.java | 10 ++ .../DeptLineFeignClientFallbackFactory.java | 6 + .../LineFeignClientFallbackFactory.java | 12 ++ .../njcn/device/pq/pojo/vo/LineDetailVO.java | 13 ++ .../device/pq/pojo/vo/ReportLineInfoVo.java | 53 ++++++ .../pq/controller/DeptLineController.java | 11 ++ .../device/pq/controller/LineController.java | 18 +++ .../com/njcn/device/pq/mapper/LineMapper.java | 4 + .../device/pq/mapper/mapping/LineMapper.xml | 53 ++++++ .../njcn/device/pq/service/LineService.java | 4 + .../pq/service/impl/LineServiceImpl.java | 13 ++ .../harmonic/api/RStatLimitRateDClient.java | 4 + ...tLimitRateDFeignClientFallbackFactory.java | 7 + .../pojo/param/RStatLimitQueryParam.java | 2 + .../harmonic/pojo/vo/RStatLimitTargetVO.java | 6 + .../majornetwork/RStatLimitController.java | 10 ++ .../mapping/RStatLimitTargetDMapper.xml | 75 ++++++++- .../majornetwork/RStatLimitService.java | 3 + .../impl/RStatLimitServiceImpl.java | 11 +- .../pojo/param/device/OnlineParam.java | 22 ++- .../pojo/po/device/LineWarning.java | 14 +- .../supervision/pojo/vo/device/OnlineVo.java | 26 ++- .../device/LineWarningController.java | 19 ++- .../mapper/device/LineWarningMapper.java | 1 - .../device/mapping/LineWarningMapper.xml | 1 - .../service/device/ILineWarningService.java | 9 +- .../device/impl/LineWarningServiceImpl.java | 153 +++++++++++++++--- .../main/resources/file/warningReport.docx | Bin 0 -> 18216 bytes 29 files changed, 519 insertions(+), 44 deletions(-) create mode 100644 pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/ReportLineInfoVo.java create mode 100644 pqs-supervision/supervision-boot/src/main/resources/file/warningReport.docx diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/DeptLineFeignClient.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/DeptLineFeignClient.java index 732fccd05..4480e7173 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/DeptLineFeignClient.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/DeptLineFeignClient.java @@ -47,4 +47,7 @@ public interface DeptLineFeignClient { */ @PostMapping("/getLineNodeByDeptId") HttpResult> getLineNodeByDeptId(@RequestParam("id") String id); + + @PostMapping("/getAllData") + HttpResult> getAllData(); } diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/LineFeignClient.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/LineFeignClient.java index e62ec0341..160ccc2b3 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/LineFeignClient.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/LineFeignClient.java @@ -1,7 +1,11 @@ package com.njcn.device.pq.api; +import com.njcn.common.pojo.annotation.OperateInfo; import com.njcn.common.pojo.constant.ServerInfo; +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.device.pq.api.fallback.LineFeignClientFallbackFactory; import com.njcn.device.pq.pojo.dto.*; import com.njcn.device.pq.pojo.param.DataParam; @@ -343,4 +347,10 @@ public interface LineFeignClient { @PostMapping("/getDeptDeviceDetailData") HttpResult> getDeptDeviceDetailData(@RequestBody DataParam param); + + @PostMapping("/getNoDataLine") + HttpResult> getNoDataLine(); + + @PostMapping("/getReportLineInfo") + HttpResult> getReportLineInfo(@RequestBody List ids); } diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/DeptLineFeignClientFallbackFactory.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/DeptLineFeignClientFallbackFactory.java index 7a807ce56..9e2679cc6 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/DeptLineFeignClientFallbackFactory.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/DeptLineFeignClientFallbackFactory.java @@ -68,6 +68,12 @@ public class DeptLineFeignClientFallbackFactory implements FallbackFactory> getAllData() { + log.error("{}异常,降级处理,异常为:{}", "获取部门监测点表所有数据", throwable.toString()); + throw new BusinessException(finalExceptionEnum); + } }; } } diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/LineFeignClientFallbackFactory.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/LineFeignClientFallbackFactory.java index 2f5b82edf..0ced88fac 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/LineFeignClientFallbackFactory.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/api/fallback/LineFeignClientFallbackFactory.java @@ -269,6 +269,18 @@ public class LineFeignClientFallbackFactory implements FallbackFactory> getNoDataLine() { + log.error("{}异常,降级处理,异常为:{}", "获取当日无数据的监测点: ", throwable.toString()); + throw new BusinessException(finalExceptionEnum); + } + + @Override + public HttpResult> getReportLineInfo(List ids) { + log.error("{}异常,降级处理,异常为:{}", "根据监测点id获取预告警单基础信息: ", throwable.toString()); + throw new BusinessException(finalExceptionEnum); + } }; } } diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/LineDetailVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/LineDetailVO.java index 74437f26a..f2c2cb7ac 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/LineDetailVO.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/LineDetailVO.java @@ -93,4 +93,17 @@ public class LineDetailVO implements Serializable { @ApiModelProperty("已用流量占比") private Float flowProportion; } + + @Data + public static class noDataLineInfo extends LineDetailVO implements Serializable{ + + @ApiModelProperty("监测点Id") + private String lineId; + + @ApiModelProperty("终端id") + private String devId; + + @ApiModelProperty("最新数据时间") + private LocalDateTime updateTime; + } } diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/ReportLineInfoVo.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/ReportLineInfoVo.java new file mode 100644 index 000000000..6ded74d9b --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/ReportLineInfoVo.java @@ -0,0 +1,53 @@ +package com.njcn.device.pq.pojo.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + * @author xy + */ +@Data +public class ReportLineInfoVo implements Serializable { + + @ApiModelProperty("供电公司名称") + private String gdName; + + @ApiModelProperty("监测点电压等级") + private String lineVoltage; + + @ApiModelProperty("监测点id") + private String lineId; + + @ApiModelProperty("监测点名称") + private String lineName; + + @ApiModelProperty("所属电站") + private String subName; + + @ApiModelProperty("监测对象名称") + private String objName; + + @ApiModelProperty("电网侧变电站") + private String subVName; + + @ApiModelProperty("最新数据时间") + private LocalDateTime updateTime; + + @ApiModelProperty("监测装置网络参数") + private String ip; + + @ApiModelProperty("最小短路容量") + private Double shortCapacity; + + @ApiModelProperty("供电设备容量") + private Double devCapacity; + + @ApiModelProperty("供电设备容量") + private Double standardCapacity; + + @ApiModelProperty("超标天数") + private Integer overDays; +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DeptLineController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DeptLineController.java index 1186fa3d2..a602b9cb5 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DeptLineController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/DeptLineController.java @@ -7,6 +7,7 @@ import com.njcn.common.pojo.enums.response.CommonResponseEnum; import com.njcn.common.pojo.response.HttpResult; import com.njcn.common.utils.HttpResultUtil; import com.njcn.common.utils.LogUtil; +import com.njcn.device.pq.mapper.DeptLineMapper; import com.njcn.device.pq.pojo.po.DeptLine; import com.njcn.device.pq.pojo.vo.LineDeviceStateVO; import com.njcn.device.pq.service.DeptLineService; @@ -37,6 +38,7 @@ import java.util.Map; public class DeptLineController extends BaseController { private final DeptLineService deptLineService; + private final DeptLineMapper deptLineMapper; /** * 部门绑定监测点 @@ -146,4 +148,13 @@ public class DeptLineController extends BaseController { List list = deptLineService.getLineNodeByDeptId(id); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); } + + @OperateInfo(info = LogEnum.SYSTEM_COMMON) + @PostMapping("/getAllData") + @ApiOperation("获取部门监测点表所有数据") + public HttpResult> getAllData() { + String methodDescribe = getMethodDescribe("getAllData"); + List list = deptLineMapper.selectList(null); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, list, methodDescribe); + } } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/LineController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/LineController.java index c25ee9798..57bacf498 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/LineController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/LineController.java @@ -516,4 +516,22 @@ public class LineController extends BaseController { List deptDeviceDetailData = lineService.getDeptDeviceDetailData(param); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, deptDeviceDetailData, methodDescribe); } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @ApiOperation("获取当日无数据的监测点") + @PostMapping("/getNoDataLine") + HttpResult> getNoDataLine(){ + String methodDescribe = getMethodDescribe("getNoDataLine"); + List result = lineService.getNoDataLine(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @ApiOperation("根据监测点id获取预告警单基础信息") + @PostMapping("/getReportLineInfo") + HttpResult> getReportLineInfo(@RequestBody List ids){ + String methodDescribe = getMethodDescribe("getReportLineInfo"); + List result = lineService.getReportLineInfo(ids); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/LineMapper.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/LineMapper.java index 3a6bbec05..0277cc13e 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/LineMapper.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/LineMapper.java @@ -551,4 +551,8 @@ public interface LineMapper extends BaseMapper { @Param("type")Integer type); LineDetailVO getLineInfoVO(@Param("id")String id); + + List getNoDataLine(@Param("time")String time); + + List getReportLineInfo(@Param("ids")List ids); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml index c21e6317b..735790c32 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/LineMapper.xml @@ -1668,4 +1668,57 @@ + + + diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/LineService.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/LineService.java index 3375786c9..9d49b10e7 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/LineService.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/LineService.java @@ -220,4 +220,8 @@ public interface LineService extends IService { List getLineAllDetailList(List ids); List getDeptDeviceDetailData(DataParam param); + + List getNoDataLine(); + + List getReportLineInfo(List ids); } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineServiceImpl.java index 575960092..9885e054d 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineServiceImpl.java @@ -3,6 +3,7 @@ package com.njcn.device.pq.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateTime; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; @@ -57,6 +58,7 @@ import org.springframework.util.CollectionUtils; import java.text.SimpleDateFormat; import java.time.Instant; +import java.time.LocalDateTime; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -681,6 +683,17 @@ public class LineServiceImpl extends ServiceImpl implements Li return new ArrayList<>(); } + @Override + public List getNoDataLine() { + String time = DateUtil.format(LocalDateTime.now(), DatePattern.NORM_DATE_PATTERN); + return this.baseMapper.getNoDataLine(time); + } + + @Override + public List getReportLineInfo(List ids) { + return this.baseMapper.getReportLineInfo(ids); + } + @Override public List getOverLimitByList(PollutionParamDTO pollutionParamDTO) { return overlimitMapper.selectBatchIds(pollutionParamDTO.getLineList()); diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/api/RStatLimitRateDClient.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/api/RStatLimitRateDClient.java index 896c30a50..eaffac459 100644 --- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/api/RStatLimitRateDClient.java +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/api/RStatLimitRateDClient.java @@ -9,6 +9,7 @@ import com.njcn.harmonic.pojo.param.RStatLimitQueryParam; import com.njcn.harmonic.pojo.param.StatSubstationBizBaseParam; import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO; import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO; +import com.njcn.harmonic.pojo.vo.RStatLimitTargetVO; import com.njcn.influx.pojo.dto.HarmHistoryDataDTO; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.PostMapping; @@ -31,4 +32,7 @@ public interface RStatLimitRateDClient { @PostMapping("/monitorIdsGetLimitTargetInfo") HttpResult> monitorIdsGetLimitTargetInfo(@RequestBody RStatLimitQueryParam rStatLimitQueryParam); + @PostMapping("/monitorOverLimitDays") + HttpResult> monitorOverLimitDays(@RequestBody RStatLimitQueryParam rStatLimitQueryParam); + } diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/api/fallback/RStatLimitRateDFeignClientFallbackFactory.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/api/fallback/RStatLimitRateDFeignClientFallbackFactory.java index 70e821ceb..363fc62f8 100644 --- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/api/fallback/RStatLimitRateDFeignClientFallbackFactory.java +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/api/fallback/RStatLimitRateDFeignClientFallbackFactory.java @@ -11,6 +11,7 @@ import com.njcn.harmonic.pojo.param.RStatLimitQueryParam; import com.njcn.harmonic.pojo.param.StatSubstationBizBaseParam; import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO; import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO; +import com.njcn.harmonic.pojo.vo.RStatLimitTargetVO; import com.njcn.influx.pojo.dto.HarmHistoryDataDTO; import feign.hystrix.FallbackFactory; import lombok.extern.slf4j.Slf4j; @@ -49,6 +50,12 @@ public class RStatLimitRateDFeignClientFallbackFactory implements FallbackFactor log.error("{}异常,降级处理,异常为:{}", "获取指定日期超标监测点详细信息", throwable.toString()); return new HttpResult<>(CommonResponseEnum.FAIL.getCode(),CommonResponseEnum.FAIL.getMessage()); } + + @Override + public HttpResult> monitorOverLimitDays(RStatLimitQueryParam rStatLimitQueryParam) { + log.error("{}异常,降级处理,异常为:{}", "按日期查询监测点各指标越限天数", throwable.toString()); + return new HttpResult<>(CommonResponseEnum.FAIL.getCode(),CommonResponseEnum.FAIL.getMessage()); + } }; } } diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/RStatLimitQueryParam.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/RStatLimitQueryParam.java index e257ef33a..abc41a435 100644 --- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/RStatLimitQueryParam.java +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/param/RStatLimitQueryParam.java @@ -22,4 +22,6 @@ public class RStatLimitQueryParam { private List ids; private String date; + + private String endDate; } diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/RStatLimitTargetVO.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/RStatLimitTargetVO.java index 6b8b0904c..11bb7cfdc 100644 --- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/RStatLimitTargetVO.java +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/RStatLimitTargetVO.java @@ -67,4 +67,10 @@ public class RStatLimitTargetVO { @ApiModelProperty("间谐波电压限值天数") private Integer inuharmOvertime = 0; + /** + * 所有指标越限天数 + */ + @ApiModelProperty("所有指标越限天数") + private Integer allOvertime = 0; + } \ No newline at end of file diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/majornetwork/RStatLimitController.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/majornetwork/RStatLimitController.java index 469ed6753..8c60fe0f8 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/majornetwork/RStatLimitController.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/majornetwork/RStatLimitController.java @@ -8,6 +8,7 @@ import com.njcn.common.utils.HttpResultUtil; import com.njcn.harmonic.pojo.param.RStatLimitQueryParam; import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO; import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO; +import com.njcn.harmonic.pojo.vo.RStatLimitTargetVO; import com.njcn.harmonic.service.majornetwork.RStatLimitService; import com.njcn.web.controller.BaseController; import io.swagger.annotations.Api; @@ -54,4 +55,13 @@ public class RStatLimitController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); } + @PostMapping("/monitorOverLimitDays") + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @ApiOperation("按日期查询监测点各指标越限天数") + public HttpResult> monitorOverLimitDays(@RequestBody RStatLimitQueryParam rStatLimitQueryParam) { + String methodDescribe = getMethodDescribe("monitorOverLimitDays"); + List result = rStatLimitService.monitorOverLimitDays(rStatLimitQueryParam.getDate(),rStatLimitQueryParam.getEndDate(),rStatLimitQueryParam.getIds()); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + } diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/RStatLimitTargetDMapper.xml b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/RStatLimitTargetDMapper.xml index eb116efc5..88045b35d 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/RStatLimitTargetDMapper.xml +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/RStatLimitTargetDMapper.xml @@ -360,7 +360,8 @@ SUM( ubalance_overtime ) AS ubalanceOvertime, SUM( uaberrance_overtime ) AS uaberranceOvertime, SUM( i_neg_overtime ) AS iNegOvertime, - sum(if((uharm_2_overtime+ + sum(if((uaberrance_overtime+ + uharm_2_overtime+ uharm_3_overtime+ uharm_4_overtime+ uharm_5_overtime+ @@ -423,7 +424,77 @@ inuharm_13_overtime+ inuharm_14_overtime+ inuharm_15_overtime+ - inuharm_16_overtime)>0,1,0)) as inuharmOvertime + 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 diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/majornetwork/RStatLimitService.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/majornetwork/RStatLimitService.java index 865ba0a2e..afe5d5a10 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/majornetwork/RStatLimitService.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/majornetwork/RStatLimitService.java @@ -4,6 +4,7 @@ import com.njcn.device.pq.pojo.param.DeviceInfoParam; import com.njcn.device.pq.pojo.vo.GridDiagramVO; import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO; import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO; +import com.njcn.harmonic.pojo.vo.RStatLimitTargetVO; import java.util.List; @@ -25,6 +26,8 @@ public interface RStatLimitService { List monitorIdsGetLimitTargetInfo(String date, List monitorIds); + List monitorOverLimitDays(String date, String endDate, List monitorIds); + List getGridDiagramLineData(DeviceInfoParam.BusinessParam deviceInfoParam); /** diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/majornetwork/impl/RStatLimitServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/majornetwork/impl/RStatLimitServiceImpl.java index 9b08aa67f..34f7788a2 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/majornetwork/impl/RStatLimitServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/majornetwork/impl/RStatLimitServiceImpl.java @@ -23,16 +23,14 @@ import com.njcn.harmonic.mapper.RStatLimitTargetDMapper; import com.njcn.harmonic.pojo.param.StatSubstationBizBaseParam; import com.njcn.harmonic.pojo.po.day.RStatLimitRateDPO; import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO; +import com.njcn.harmonic.pojo.vo.RStatLimitTargetVO; import com.njcn.harmonic.service.IRStatLimitTargetDService; import com.njcn.harmonic.service.majornetwork.RStatLimitService; import com.njcn.system.pojo.enums.StatisticsEnum; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.concurrent.atomic.AtomicLong; import java.util.function.Function; import java.util.stream.Collectors; @@ -68,6 +66,11 @@ public class RStatLimitServiceImpl implements RStatLimitService { .eq(RStatLimitTargetDPO::getTime,date).gt(RStatLimitTargetDPO::getAllTime,0)); } + @Override + public List monitorOverLimitDays(String date, String endDate, List monitorIds) { + return rStatLimitTargetDMapper.getSumTargetDetails(monitorIds,date,endDate); + } + @Override public List getGridDiagramLineData(DeviceInfoParam.BusinessParam deviceInfoParam) { List info=new ArrayList<>(); diff --git a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/param/device/OnlineParam.java b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/param/device/OnlineParam.java index 1d96a4ee0..1d3d86651 100644 --- a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/param/device/OnlineParam.java +++ b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/param/device/OnlineParam.java @@ -31,16 +31,26 @@ public class OnlineParam extends BaseParam implements Serializable { @ApiModelProperty(value = "部门id") private String deptId; - @ApiModelProperty(value = "指标") + @ApiModelProperty(value = "部门名称") + private String deptName; + + @ApiModelProperty(value = "指标id") private String targetId; + @ApiModelProperty(value = "指标集合") + private List targetList; + @ApiModelProperty(value = "预警阈值") private Integer alertThreshold; @ApiModelProperty(value = "告警阈值") private Integer alarmThreshold; + @ApiModelProperty(value = "数据类型") + private Integer dataType; + @Data + @EqualsAndHashCode(callSuper = true) public static class ReportParam extends OnlineParam { @ApiModelProperty(name = "type", value = "0:预警单 1:告警单") @@ -48,7 +58,15 @@ public class OnlineParam extends BaseParam implements Serializable { @ApiModelProperty(name = "issueDetail", value = "问题描述") private String issueDetail; + + @ApiModelProperty(name = "year", value = "年") + private String year; + + @ApiModelProperty(name = "number", value = "编号") + private String number; + + @ApiModelProperty(name = "idList", value = "问题id集合") + private List idList; } - } diff --git a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/device/LineWarning.java b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/device/LineWarning.java index 7a9ba60d1..5f3f36af2 100644 --- a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/device/LineWarning.java +++ b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/po/device/LineWarning.java @@ -1,6 +1,7 @@ package com.njcn.supervision.pojo.po.device; import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; import com.njcn.db.bo.BaseEntity; import java.io.Serializable; import java.time.LocalDate; @@ -31,16 +32,24 @@ public class LineWarning extends BaseEntity implements Serializable { /** * 告警时间 */ + @MppMultiId(value = "alarm_time") private LocalDate alarmTime; + /** + * 责任部门id + */ + private String deptId; + /** * 监测点id */ + @MppMultiId(value = "line_id") private String lineId; /** * 指标类型(字典id) */ + @MppMultiId(value = "target_type") private String targetType; /** @@ -73,9 +82,4 @@ public class LineWarning extends BaseEntity implements Serializable { */ private Integer thresholdResource; - /** - * 责任部门id - */ - private String deptId; - } diff --git a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/device/OnlineVo.java b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/device/OnlineVo.java index 8cbb389f8..077315e5c 100644 --- a/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/device/OnlineVo.java +++ b/pqs-supervision/supervision-api/src/main/java/com/njcn/supervision/pojo/vo/device/OnlineVo.java @@ -44,9 +44,33 @@ public class OnlineVo implements Serializable { @ApiModelProperty("指标id") private String targetType; - @ApiModelProperty("累计超标天数") + @ApiModelProperty("超标天数") private Integer overLimitDay; + @ApiModelProperty("频率偏差") + private Integer freq; + + @ApiModelProperty("电压偏差") + private Integer voltage; + + @ApiModelProperty("闪变") + private Integer flicker; + + @ApiModelProperty("三相电压不平衡度") + private Integer ubalance; + + @ApiModelProperty("负序电流") + private Integer iNeg; + + @ApiModelProperty("谐波电压") + private Integer harmonicV; + + @ApiModelProperty("谐波电流") + private Integer harmonicI; + + @ApiModelProperty("间谐波电压") + private Integer inuharmV; + @ApiModelProperty("数据来源 0:系统默认 1:自定义") private Integer dataResource; } diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/device/LineWarningController.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/device/LineWarningController.java index f36843c4a..60d786469 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/device/LineWarningController.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/controller/device/LineWarningController.java @@ -8,10 +8,8 @@ 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.param.device.OnlineParam; -import com.njcn.supervision.pojo.po.device.LineWarning; import com.njcn.supervision.pojo.vo.device.OnlineVo; import com.njcn.supervision.service.device.ILineWarningService; -import com.njcn.supervision.service.leaflet.IWarningLeafletService; import com.njcn.web.controller.BaseController; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; @@ -25,6 +23,8 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import springfox.documentation.annotations.ApiIgnore; +import javax.servlet.http.HttpServletResponse; + /** *

* 监测点每日稳态指标超标天数统计表 前端控制器 @@ -44,7 +44,7 @@ public class LineWarningController extends BaseController { @OperateInfo(info = LogEnum.BUSINESS_COMMON) @PostMapping("/add") - @ApiOperation("新增在线监测数据") + @ApiOperation("新增在线监测数据(连续超标天数)") @ApiIgnore public HttpResult add() { String methodDescribe = getMethodDescribe("add"); @@ -52,6 +52,15 @@ public class LineWarningController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/heBeiNorthAdd") + @ApiOperation("新增在线监测数据(冀北-按月统计累计超标天数)") + public HttpResult heBeiNorthAdd() { + String methodDescribe = getMethodDescribe("heBeiNorthAdd"); + lineWarningService.addHeBeiNorthLineWarning(); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) @PostMapping("/list") @ApiOperation("分页查询在线监测数据") @@ -66,9 +75,9 @@ public class LineWarningController extends BaseController { @PostMapping("/report") @ApiOperation("发起预告警单") @ApiImplicitParam(name = "param", value = "参数", required = true) - public HttpResult startReport(@RequestBody @Validated OnlineParam.ReportParam param) { + public HttpResult startReport(@RequestBody @Validated OnlineParam.ReportParam param, HttpServletResponse response) { String methodDescribe = getMethodDescribe("startReport"); - lineWarningService.startReport(param); + lineWarningService.startReport(param,response); return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, "success", methodDescribe); } diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/LineWarningMapper.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/LineWarningMapper.java index 39e079cc9..3d0bb793f 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/LineWarningMapper.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/LineWarningMapper.java @@ -18,5 +18,4 @@ import org.apache.ibatis.annotations.Param; public interface LineWarningMapper extends MppBaseMapper { Page page(@Param("page") Page page, @Param("ew") QueryWrapper queryWrapper); - } diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/mapping/LineWarningMapper.xml b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/mapping/LineWarningMapper.xml index 12f7ddbc8..fb8ebc78b 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/mapping/LineWarningMapper.xml +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/mapper/device/mapping/LineWarningMapper.xml @@ -29,5 +29,4 @@ and ${ew.sqlSegment} - diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/ILineWarningService.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/ILineWarningService.java index 7428212d9..67741eb57 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/ILineWarningService.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/ILineWarningService.java @@ -6,6 +6,8 @@ import com.njcn.supervision.pojo.param.device.OnlineParam; import com.njcn.supervision.pojo.po.device.LineWarning; import com.njcn.supervision.pojo.vo.device.OnlineVo; +import javax.servlet.http.HttpServletResponse; + /** *

* 监测点每日稳态指标超标天数统计表 服务类 @@ -21,6 +23,11 @@ public interface ILineWarningService extends IService { */ void addLineWarning(); + /** + * 每日统计当前月各监测点各指标累计超标天数 + */ + void addHeBeiNorthLineWarning(); + /** * 获取在线监测的数据列表 * @param param @@ -33,6 +40,6 @@ public interface ILineWarningService extends IService { * @param param * @return */ - void startReport(OnlineParam.ReportParam param); + void startReport(OnlineParam.ReportParam param, HttpServletResponse response); } diff --git a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/LineWarningServiceImpl.java b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/LineWarningServiceImpl.java index 5740b26c7..f18e4cbed 100644 --- a/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/LineWarningServiceImpl.java +++ b/pqs-supervision/supervision-boot/src/main/java/com/njcn/supervision/service/device/impl/LineWarningServiceImpl.java @@ -3,7 +3,7 @@ package com.njcn.supervision.service.device.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.IdUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; @@ -13,11 +13,14 @@ import com.njcn.device.biz.pojo.dto.DeptGetChildrenMoreDTO; import com.njcn.device.biz.pojo.dto.LineDevGetDTO; import com.njcn.device.biz.pojo.param.DeptGetLineParam; import com.njcn.device.pq.api.DeptLineFeignClient; +import com.njcn.device.pq.api.LineFeignClient; import com.njcn.device.pq.pojo.po.DeptLine; +import com.njcn.device.pq.pojo.vo.LineDetailVO; +import com.njcn.device.pq.pojo.vo.ReportLineInfoVo; import com.njcn.harmonic.api.RStatLimitRateDClient; import com.njcn.harmonic.pojo.param.RStatLimitQueryParam; import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO; -import com.njcn.supervision.enums.ProblemTypeEnum; +import com.njcn.harmonic.pojo.vo.RStatLimitTargetVO; import com.njcn.supervision.mapper.device.LineWarningMapper; import com.njcn.supervision.pojo.param.device.OnlineParam; import com.njcn.supervision.pojo.po.device.LineWarning; @@ -33,9 +36,11 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import javax.servlet.http.HttpServletResponse; import java.lang.reflect.Method; import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.temporal.TemporalAdjusters; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -57,6 +62,7 @@ public class LineWarningServiceImpl extends MppServiceImpl result = new ArrayList<>(); + //获取指标集合(10个指标,包含总指标) + List dataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.STEADY_STATIS.getCode()).getData(); + Map targetMap = dataList.stream().collect(Collectors.toMap(DictData::getCode, Function.identity())); + //获取监测点和部门表关系 + List deptLines = deptLineFeignClient.getAllData().getData(); + Map> deptLineMap = deptLines.stream().collect(Collectors.groupingBy(DeptLine::getLineId)); + //获取监测点按时间统计越限天数 + LocalDate firstDayOfMonth = LocalDate.now().minusDays(1).with(TemporalAdjusters.firstDayOfMonth()); + String date = DateUtil.format(firstDayOfMonth.atStartOfDay(), DatePattern.NORM_DATE_PATTERN); + String endDate = DateUtil.format(LocalDateTime.now().minusDays(1), DatePattern.NORM_DATE_PATTERN); + RStatLimitQueryParam rStatLimitQueryParam = new RStatLimitQueryParam(null,date,endDate); + List limitTarget = limitRateDClient.monitorOverLimitDays(rStatLimitQueryParam).getData(); + //按各指标统计越限天数 + if (CollUtil.isNotEmpty(limitTarget)) { + limitTarget.forEach(item->{ + String deptId = Objects.isNull(deptLineMap.get(item.getLineId()))?null:deptLineMap.get(item.getLineId()).get(0).getId(); + //频率偏差 + LineWarning l1 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.FREQUENCY_DEV.getCode()).getId(),item.getFreqDevOvertime()); + //电压偏差 + LineWarning l2 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.VOLTAGE_DEV.getCode()).getId(),item.getVoltageDevOvertime()); + //长时闪变 + LineWarning l3 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.FLICKER.getCode()).getId(),item.getFlickerOvertime()); + //谐波电压 + LineWarning l4 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.HARMONIC_VOLTAGE.getCode()).getId(),item.getUharmOvertime()); + //谐波电流 + LineWarning l5 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.HARMONIC_CURRENT.getCode()).getId(),item.getIharmOvertime()); + //间谐波电压 + LineWarning l6 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.INTERHARMONIC_VOLTAGE.getCode()).getId(),item.getInuharmOvertime()); + //负序电压不平衡度 + LineWarning l7 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.PHASE_VOLTAGE.getCode()).getId(),item.getUbalanceOvertime()); + //负序电流 + LineWarning l8 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.NEG_CURRENT.getCode()).getId(),item.getINegOvertime()); + //电压总谐波畸变率 + LineWarning l9 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.THD_V.getCode()).getId(),item.getUaberranceOvertime()); + //总稳态指标 + LineWarning l10 = overData(firstDayOfMonth,item.getLineId(),deptId,targetMap.get(DicDataEnum.TOTAL_INDICATOR.getCode()).getId(),item.getAllOvertime()); + result.addAll(Arrays.asList(l1,l2,l3,l4,l5,l6,l7,l8,l9,l10)); + }); + } + //将装置无数据的统计入库 按运维要求,判断装置的最新数据不是当天,则认为装置无数据 + List noDataLineInfo = lineFeignClient.getNoDataLine().getData(); + if (CollUtil.isNotEmpty(noDataLineInfo)) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(LineWarning::getTargetType,"0").eq(LineWarning::getAlarmTime,LocalDate.now().minusDays(1)); + this.baseMapper.delete(lambdaQueryWrapper); + noDataLineInfo.forEach(item->{ + String deptId = Objects.isNull(deptLineMap.get(item.getLineId()))?null:deptLineMap.get(item.getLineId()).get(0).getId(); + LineWarning lineWarning = new LineWarning(); + lineWarning.setAlarmTime(firstDayOfMonth); + lineWarning.setDeptId(deptId); + lineWarning.setLineId(item.getLineId()); + lineWarning.setTargetType("0"); + result.add(lineWarning); + }); + } + this.saveOrUpdateBatchByMultiId(result); + } + @Override public Page getLineWarningList(OnlineParam param) { DeptGetLineParam deptGetLineParam = new DeptGetLineParam(); @@ -129,35 +197,66 @@ public class LineWarningServiceImpl extends MppServiceImpl queryWrapper = new QueryWrapper<>(); queryWrapper.between("A.alarm_time", param.getSearchBeginTime(),param.getSearchEndTime()); - queryWrapper.ge("A.over_limit_day", param.getAlertThreshold()); - if (CollUtil.isNotEmpty(lineList)) { - queryWrapper.in("A.line_id",lineList); + //查询无数据的监测点 + if (Objects.equals(param.getDataType(),0)){ + queryWrapper.eq("A.target_type", "0"); } - if (!Objects.isNull(param.getTargetId())) { - queryWrapper.eq("A.target_type", param.getTargetId()); + //查询指标超标的监测点 + else { + queryWrapper.ge("A.over_limit_day", param.getAlertThreshold()); + if (CollUtil.isNotEmpty(lineList)) { + queryWrapper.in("A.line_id",lineList); + } + if (CollUtil.isNotEmpty(param.getTargetList())) { + queryWrapper.in("A.target_type", param.getTargetList()); + } } + queryWrapper.orderBy(true, true, "D.Name","p4.Name","p3.Name"); return this.baseMapper.page(new Page<>(PageFactory.getPageNum(param), PageFactory.getPageSize(param)), queryWrapper); } @Override @Transactional(rollbackFor = Exception.class) - public void startReport(OnlineParam.ReportParam param) { - String dept = this.baseMapper.selectById(param.getId()).getDeptId(); - //下发预告警单 - warningLeafletService.createLeaflet(ProblemTypeEnum.ONLINE.getName(), dept,IdUtil.fastSimpleUUID(), param.getId(), ProblemTypeEnum.ONLINE.getCode(),param.getType(),param.getIssueDetail(),""); - //更新supervision_line_warning表字段信 - LineWarning lineWarning = this.baseMapper.selectById(param.getId()); - if (lineWarning.getThresholdResource() == 0) { - lineWarning.setInitiateWarningFlag(1); - lineWarning.setAlertThreshold(10); - lineWarning.setAlarmThreshold(15); + public void startReport(OnlineParam.ReportParam param,HttpServletResponse response) { + //获取无数据监测点集合 + List list1 = getReportLineInfo(true,param.getIdList(),null,param.getSearchBeginTime(),param.getSearchEndTime(),param.getDeptId()); + //获取谐波电压超标监测点集合 + String vCode = dicDataFeignClient.getDicDataByCode(DicDataEnum.HARMONIC_VOLTAGE.getCode()).getData().getId(); + List list2 = getReportLineInfo(false,param.getIdList(),vCode,param.getSearchBeginTime(),param.getSearchEndTime(),null); + //获取谐波电流超标监测点集合 + String iCode = dicDataFeignClient.getDicDataByCode(DicDataEnum.HARMONIC_CURRENT.getCode()).getData().getId(); + List list3 = getReportLineInfo(false,param.getIdList(),iCode,param.getSearchBeginTime(),param.getSearchEndTime(),null); + + } + + public List getReportLineInfo(boolean type, List idList, String codeId, String startTime, String endTime, String deptId) { + List list = new ArrayList<>(); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + if (type) { + lambdaQueryWrapper.eq(LineWarning::getTargetType,"0") + .eq(LineWarning::getDeptId,deptId) + .between(LineWarning::getAlarmTime,startTime,endTime); } else { - lineWarning.setInitiateWarningFlag(1); - lineWarning.setThresholdResource(1); - lineWarning.setAlertThreshold(param.getAlertThreshold()); - lineWarning.setAlarmThreshold(param.getAlarmThreshold()); + lambdaQueryWrapper.eq(LineWarning::getTargetType,codeId) + .in(LineWarning::getId,idList) + .between(LineWarning::getAlarmTime,startTime,endTime); } - this.baseMapper.updateById(lineWarning); + List warnings = this.baseMapper.selectList(lambdaQueryWrapper); + if (CollUtil.isNotEmpty(warnings)) { + List lineList = warnings.stream().map(LineWarning::getLineId).collect(Collectors.toList()); + list = lineFeignClient.getReportLineInfo(lineList).getData(); + if (!type){ + Map lineIdOverLimitDayMap = warnings.stream().collect(Collectors.toMap(LineWarning::getLineId, LineWarning::getOverLimitDay)); + list.forEach(item1 -> { + String lineId = item1.getLineId(); + Integer overLimitDay = lineIdOverLimitDayMap.getOrDefault(lineId, null); + if (overLimitDay != null) { + item1.setOverDays(overLimitDay); + } + }); + } + } + return list; } /** @@ -179,6 +278,16 @@ public class LineWarningServiceImpl extends MppServiceImpl2qW@hFwGkc6<=CS?zyLaF2yDxSl{)(vT zj%;OB=8-x}DIFx0frGNkdA^mqTLk9s)rLTbY;6Nm)s>o{EZN1hFF&NvpRMW5k z44Wyp>XTh}i;a+;Keju#bNAVZ?Y@NJd+;?EEn4B0IU&H*mDzguEBng6gsFym-3qZ- z&4aEUBA7dO)r9pe8wHQNodJLp?eN^^lQ1Rd(^`Pa+1zopw?cF-tGFW0P`VLz*OsX+FpVf)FeKbWi8mWrD8m)_D zyJU(^G-{nlW&$)@fZ5bRHr^4AtFJyBamMj}Im~VTCj3u5b^f3pDEijZ+P9vN|GS=y z?VU{jQIv0zyfqpV*61~O-%!H4P11TxjiDP1HLoV6OUVHpxqaI}=5)fa-7~od&4WS| zWP?%#k=`((s@rD#g3O7$I+`Ip!`%Jn9ZzxzceyEYZa_oTFJ%#NFwp{0veZ1;g$p0{ z9kE1L9ceukoH7ewj4Km)HYLR$ir8!Hs_>&!^@$XgQzE>gW3$U}#x!w-M{Y;>8`0va zR2}!lnfqDM&pr?w#3rced+kSYhY(n+pvbNgR1hW~18BfR;9($A^Rq@=MK22%{V7lR zu!5S-X_ItTyOq&hvuQ=>kk6H>!H#_S@h68!L%+*kW_GHB6P`Cqx@zY2u1s6Fp)DP;ftt=$QU)A_2no$xm3%}Up?)F>fB<>oknn^ZT&S6A=4>off6_0`wQ+5UQK;Q7MiYV}H9>yNa`vlJ69 zH-uZvw`cMO`cH)>r=Rpue=8LETcN1`p-@+67kk@(R9c!SD?KED6m}i-MSRJ-9`CYf zBdK%;eJ~Kzq7I!ci!0$K?50e2;O{P7b1)E15bo}Al9_4o!Syh!DATFT46!EMkDOFp zmi&&zV@tyh7RT0NbFL?e9GpCFkh`@bk}Vl)#GE@HCn|v-9L#hGBQ%3(RMBE?Y?-Vk zD{O1Sc~xk&85b>d>xuMBAV>k|^=B;3)-5a~efRRhU-WfKzt+XBE6e6i$p>hD&MSjX zatM3yndl&r^Q5F>dNB^?%(*mr7-SOc37WLD>wfIH88D7Ug3I&gctniN=`9oIRd#MB z&4-1bZ?~e^RKyV|n5c6*^FzR-v_ZRuV08#z&9`-I?yrBwUTA*~)|-G!C-!O3S2e>a zNlgJ6qm%%T%&mRNLgm%DzM9?v{{!v+edz=LhSuHQ$>e`5dv?3brMcfdLM?%S5dTZW z*~Qbw)cGIedvs^qHrvs6o^yIZn6=yPogivBgcBwaZpc#r`xKI!|1#`5p z5-~>k)30qK)P`)4NV0UU3C;*5wDcAk)e+v=qY+$%+l~;Aoj#jiO~K)9Kk&28aBM$t z#^}(^)lD=rR6B-lfxg&-?1V~sicuJZr+PR=aa%%W-~+=;5V~PrW&D|~6_LoBp34(QhsJw!tyGz1Y^D=k`N! zC9PF|m%|nkauTYV8b^V2F&z1@@pFX&g+N~q7zkZ;WyO{Q-#w^6J{Ob5p0N=N(q<6N zc~H_xpxUeKoi9HZZK+LQmf5j;{A>~QB)?!0%{Y;0RE|p+VflDoc@$kin*D1ySmhc7 zE8wYyaWo0XaUR|Trb+ty6j#DYEx5?0l75t$?CjHvWT&NvsUeAf5XZd>=RAaaEE66y z^ABtKM_j)NciV-Yrmm47yeNwg!UJvPg@FRKQTzt#zoOy>a_}ZW{BGL$r|ILnsgx0j zQ84i6S2-mjxU>QuOj-d88m*uqrAAPrLOqyhp#ij%&;SZrNDvuicq8eNZ_t!j4x&G& zmPFxLhCCsNa|;!CLTL)a zThY-La)}qv-UXn)9SdBe=Q+{AV_8;GN27cy|FnRMwur)sjfc(6>M+ld8}*$X|JY766s?6^P>u)_;f7euibniU|0Z3RMYTLHbX zT&NCLyT2pjy2sFUUC$)Ca@%dLHtmc9oYhcI8BP>dXXwE!necIO_d%(2+N>1&(R{Cv zvKfnGs1zyUM5fUeT#(!iL7@=I>Va(xvup3D&`cU)J|u$KH1#{AoKf!9^yRzfkV378 zK{=Mv@tum>LnwsFD-xM>TBMCfxNZhE^A4+Yn0Oz&;S;1HhVNQ%C0U{QHOo_{URK~6 z|KH)?{&+j=>F%rQJKR`Pk@=+5E>*W0w(lwmI@Hn@*ho5|tSnn_5m;d-fC0)z@|QsV zIkMnP<>2@x>lbY-g5~=FCpl3jV?`my!-}gu&|Ce1HOi5jX7ZQBQX$?ui${L34gJ*7ntwgmM1{0?~s?6c=+sp)8uDWa^jYhyZ42R3JSZGi?zEscRB>!9yZBkvpO}Pq~ z3-ZdT$^P=GNyGOUxP02INS2|$JdPb?sRr*7w5~?hNf2h2-@RQOyevR5;tvai?3HeB32QG4*^18_$3-ze~{_$IdbC)Hfig27JB_6_29vp3K*_vkhN> zL@4yxPf37~2I7)E8LG8Pb{JR62+AVJ>p|QzL~}c#1Rb_{>cs<-v*Z+X=|5+nfSYFQ z%BM9NW97orqOE^eNqvd164i=0>+|Dzs?-5LO+PZ+^v_HhFM(w4xvHI-k1K1x=gEUa zO=nY3wHyV?-!%}w8Bj%$RO|W{SFc8H@Ww$oecx;${kTN@VPy^1Eo_iOve@{RuglGs zw^0yle%hJOv=1CY>pnfKjl`l+ejGw7C-c_FLd<%lt)cYQ%o?|g{XD%p2eazEtRit# z8&RFZXC&zCcl~h+p7c9IM;I+?n+D2Am&`|#hR|Y@g^7*i5sVaB)2j=1%*d;$mZp^_ zvJFj_ca*E2y}prdY5Tn*+!v1WMcW}A43V2@?Qv|T!fai>C&?P=4SJd7iAMsTH%Xm>P7%x_0gIHTE<#$~%3 z0Bouiu6DxR4LWSL6&+azv1E-C!m>+f_JD;ypqR_9h@Rmshfrer7}^1?BeD^A_B2@19S!>bHKMd} z&F%(~+3!Jo&jyf~?O`m*co2KsXenG%Df>O>^`k;^tElgR>vkt58{m!LP8q?@w|W?B z+AN%**wbQ)eNW?m^`=eyZ&Q{aVZR+sGWZ6=bTLdzIs3oOGO^2p^fwk)6nokTM!~kamW7z?4RK!ir9Vk9*AI1`^LYejO`m!lWzr7Q0-(v=~?ai@b`E{cJ07} zoRA*Z7dbOaRi$54P)XgidOgzn-M@K$49UNNKc4fnR z5A(YEnYmK&rQc`T%k@~0Lj}pOygCY)R=@TQZ+mAju%+r|{}SM5RIL*ZK{W3yTMnNK z-C!4Rth_JOgaB%VQ{XuJvP=eY*j=q66F;dGdUCC5rI?Saj0=@vmm)m8-T9E|aPPq$ zSUui(5W~-k24bT(INQ0*wM@4|YL@r*=hpi~0XeBQZFg`J@1E>I&$yqXD)rH9-%Ub>X7_!2w3c-lf=u4263GyZ5iKX`=m%T%#pJQ!T z*j!f=WdM~XQn+_~${rE18O`2@Kb_MiYQfj9s=U?eg$?LNYcb=lnAr)^eWk^-`?!Cm zvfmk^OXjcU6^x>pMYytVl^YpIhtlGkGPYWKS*`z5HRxV$>4c?n^$b>bxU7`H58Tu} zQ@Ccwb8ypoFgzlk7KBAK9-rx6IWg06a4^u2{`yR)!r7YQaIUT>x^olY%~Y_zjdv;5 z)l-Z9!?}88npdB?jeka12UocVrkC6(vR5P3wL4yR^}k*>`#$Z;X6yh(oSmxM++;@K zm-3oW*=ta#0%r0V=Mia*VQ$%}f}0!g2-7 zXV=-(#l_Oj{9nFosiv*-CI`Z&-;ZZP=Fhya>lB{sKM_T1W!WX$T(;#O_gx0WZ5I)xpX28*^0wH z1)kd7d*a=^UboEpY?ePdv4I>)M#^H_Y}M1*u6|K?c5VMzwp;AgQuQW_>lS;(PC$@p zN_JxHYp*^h*Tn#u!$)sg4VcMy)y=y+!QK7YzYSy~YG%$mkS?81N3c1YUR&GghNUw| zP7G$_tLq+ZySTJT?R}w)1&WPGW#c**E9>IA-II}V75G#Ld{706Epdk~GC27RjYgr^VvRM7J64 z0~*1T^y6+j2$+U(F}%!u{sF?q^U0*_3#XL#_qyTT_<8juk@?r1&h-6&HDP)W@a)v5aZqp}Th_bids2A0wTK z?4q;DXCNWtK!+}m#vp!O80GG|5&A-Q*k@#$?GiK7-%s{EzHWDRRREEUAaACVZ*RR2 zZl`x^Ba-v}{HlDE+;CIOE>E@e@%nPqenCFlTXgBfWx`bE&1jLDhGcbk$``7?oS6@7xp^e-$fFwgm8tF(M%+nc;oqPDzX$&JeE=x> zPXkc7$~MW@SuwRYq}pU5C0zSoNSwb?!1|A6{)i)&Cys}?@&nQe5MQ5e{w-?((CSCo z)p#h1Ke$fv=^+Z8`dN?4<}4SVkO&Fmb+uL$&buBaSU+!dKdxjQ{cn3_`_iDl%=k~P z?R#tb{N{T7Km2m_`(Bg%=@`b}vnBMledud$qa7M9DPdy8jDanUcmwzr17K%7BW@k= zn-mOjpirpGnFx>pT43*gKW*?0L5p-^PRnA*8EjlGbBnyj7Aj&HS0s-NNLNwRX2(u92Os^*u0fhkrry>3&f^;fj@Jj?u68~!I ztpUE`CYz}vrNKJ$@MJ$6{s2d{!t*j)C zOv)Jo9;ax?Bqc!!Io{XI3Tr$f8Bq|0jSu@U<5Ru9!MzbXYPlrh%Yeo%Jd}Ty&4Gnze1$sSJMvvj-s~- z8M*~C8*xS=Mc*;92uT7?JW6t+ILvY>VZd-Ux3WYiG(PrMMwggvazg|rP$J|#g@g;C zlXN{u3YV;>SLDEcVaJS-$xr|%jezYZNrZ_M6TvtXAlHCH%MiXWATwZTY#O`@FqSuy zLm~8o%1A{op%j9M4}xini#DWa*gRt?B>Y9%29c|bMDBt{wHjw!lZ!=_F^a%sDv4Ae zZpCmk;82W^4~2&g<`-eNCMAJxRTjr?Ln{XeF$121i0Uf^RuWSzv6V!uCuAgwz>>+q zmK(&Fe};fa;EP^Dm=6SmBFi~CM2%8Xp8)y~R3HFlg+nf|l?#c2^`xZ04H2eJmXv$E z{ZGc&cvK`QAg@Hw2|1LgR2@eW7|94xk;67MP@#s3Qcx9S5S*ek?fR4uyvzG)zBz{bYkMXkxu~fzC|7_o))LY)w6g49kt`Zw zO2DDg2w~LdLVgV>$rxnN#~Scz4hTWf$S98qlz6eiGS-+6ZqdlN91`eELzgEgH0a`# zoeZ&JBx?%}2ui2xjq>6_;SxDkW+_U@NxCf3d!NDEl<(RYWE#_!9277d(cN2>7)-%k z*g>FlhQbihoOGZAML-QLX^~;~L`we6QhVgaOaw#?P*cTP;aZ{<@F0IAf^vmjL~N_X4hKUTOTnH_@Q!-T@;$W>f7x01YIYxPM4~( zQ;JL&bxwKe^W(JTw{BfJGCJr!7#t+F)t4W_i?BT08RqQQd)B|^@4I9WeeLyg{j?rz zsr&3*^XB|&H~8^JUsy&Fjc+PVb0`puop6%FnOI{7#_G3y;Cn{P#;d(8 zD&*onUTk&I9%s$%%Lne)qYD?HglTSzw9q%FK?MpBSM^k)5%@+PG5CD?y+8g(EWV{P ztL*DLbn5~E1cdTm!9z29dlx%fqn?6&HnEJ%=pUZ%4z~g6qlnd(2+0oe znLU)KtY67Yj7ZUS^*y2`=y9d)ufoWY&)|5U|A4<65~z-6x#ip__R7;JY}qZO?eW%y zv)u*Hc>GkBWz9dbc%RpTbP~qTZQprcv&Q|w3YV1pXQ~!ehYKQ6qVca|dH=j^@Q#lg z>gy#N47|_^#SqP12e-wRVMkdQ7b6&dWFwJfn|%1pTRAj)HPz5g|0CTPc8DMcov$3t zn4_7?Tr5g6{wH&}*An3@*RTh3DH`{z={Z%R@J{Gx^`vQj@azZ7pzN*N~U^ zaNA>zP0d&_96c8Gh3-S0yaCiSkqXiP0H@ZDUsAj#J{a%iC`BTne-insyT3{(Y2-W}b>%bJ>&M0B0gdEO<4z-13&o`5`Xjsh*ToG?A$6RbdPxBbZI2@|PL6Q! z(lo*lBR16}-1>TFDo9bowqzXz#Im9(+PMu1mj2Kd;vL>aaWlzyWoMj%dEym>7^B%T zgC`ZH`>j2a`9#iFfc2SNVD2^o7Nw-I%L1%cOi+>Z0`$3kaCoMvBeC7@4)7hyLS5WM z97Ra@f-Av;lu>U>;*lYuGY`7R;wnh)_*W|odzn{O-Zh*PVH)y1IQK#<)!!xOwFnJ; z%If+k`k;T)86D7*z0jU|MdqYZcc)WyYL*&5wC8}=TWTNr)TT|AVhl_8n2C1bSvVGs z#w-xuJWWO>{DK=VpG=wNd!ZS#KgK|XnI;9jcQqibrtok(cHWnYWjp?0POLv1>sxSS z=bzRIFNhS-#Cr@jp4GGb{2PBTJ=g~&HjORi)YHjfaJ@6a+6 zh>_;3GOt*7z;rcwzpf7x{d5#KHIo%jpS2fo7vI-rv8eli=mA6oyD70>33=i{1-Jk0 zi|oQWiJB+!)p*bD`+sLDVE@ZBTr5m&P5(!}VxjhW_~kp70l)?VLjO;}e~B~wleM_g zl(olYN9w^m_1C!UX)w7UWhQ}a=(Q(mkSsh}QD$ zSek5iXd(d|0G<7L<@a1X)k^`80uj*+%Kk)y{W@O>C)5$lW*%gE>gPkwt~e7{D$BOE zHi8A_7zJuyQ%tUzt2i}udg}i-bEKt6uMdfr>{GxPW||( zHZo|f5LQRGe^GknR%-VxRRq9hD3o5_5VLOG0AV(AS%tP&q1k@(`r{K9WJOseEz4vS zsiSJm)H&vX2?QgN2#BO8ry?jMPH}`)WZoOzq%Z_5vsj>#9(uB|ph*i`iOIupN}4Wy z0YvMWPV{zrU(T+g&3A5te~%&h@%p{oybLg8l1^D+k`-D$o`f@edER9{KQ~?P@Vsrr zVv>K(<@5W$j;Y%b*%Wc+s_*iAT)Zx-$M<=B9Fju%WETfQUngV1UUTu?*)?EclocEO z7z6#Z!}x$gUNqu{2A4|68rkn7C583%jiPkgbF0T6;Kmaf2JdF;Fh~9)>O&Gabf|}> z-48l?if}kfd0E*J!}v@gd776aFSA7#f}rc%reJj3_Cr#TH*(69W)Nd08;uMllw;tR z^4uDh@!0tv6r+*H060!m8$eIj@TTA}b`l@9#xe{01{u?l={X71Ypap7!`PCt2mzoR=WQ?;*$3ZM9ADMZP((q#sKV$z*$=oOk>;<(yA zpTk36Wn$-KxWn8HGsFwsPBBkA2J+~j+8I|iDI1Gz*eTkJVfK1t{cAV+zUss0Gl@st z5Xr(7YdUW8?FPS&$2%UXl$W#AL;v)!Eno-L#ZY1WESiG;kC7!9;j&y9G_B5fV(TqO zay|<7BT35OLeC`)Md7$^_@H!V08KH0+nbsPS0tiFf-dKjscX;lurLuPA%kkPV>|sg zoNo18onol>4BOJ`Ha4*7J3Sy~!UhEw0p)SM04AwdM|d6&@GvH*9uXV5KIH%i6(e|3{%OD1Y1B6?VgqkGiyZT z@K!Ov?#=2|6vv{7Rm7R5E|^G1!wEhiHChZI$&La$Ud)4XrWu!%`q#R;!ix+|j(p4O z`oLt8EYWrkCC43v%b-0mWrJ1EPY^65;A{6uO%_m)Ishzj_Uf*X@ucah4@HGFC9XJ2 ztiq0>4Ab16)+8*~n>I4&p?0qsR0VQUH!_0IvcXJ&)^_tL4t98|?z0IgI;SwpZ{9^E z^kvpg4szndt*mW z)DQ3?#j|yf=PFP!2hJDN`2Q>W{eKue?8|Jk9vDDCSd75`$KCj5|G3(k+PVDeHKBXq zjH;gY)vNl>->%}r+G;W(QM;yWKp?Ctq{t-6Cu3WxRnxj$xV*i*-N>lYD&ryCUoSie zmSMA&5SY1*)rhLc1n`&HO8Oh=Z#df#?ovwN*YCv3$Ci4A?M?AaAU#7WW=4Mm%t*dUWO_imHRR@-S@TWomv@0 zoGu;pCq@9hlUJ4L_)KKMak{dBNt>RUY+^@S$#kkd*3-PsCS^3{)l*e%lsZfmOFEWf zY=V7}*<_@3-?u5LmvS9iO}DaxZAit%W3}5b6)?7AtpRIHHo>LICSK^K?6lNfRXK~Y z#LG8P%~XbJDxGfxkMoEV5-+m=(SZ0Fvb+=>@%)Pdu@RZb9d2#7(3A!g_n?n?ap@_|IGf~x`$h^?!iomWX_$GkY!y#=Tgz7b zFfRFVvdwkIJqREOSTpkfBU-2fM>R(#&-*eKJB+wbt3 zwb-fq=M(~!BOL0kAPkOG(qtTyxm2Um4N}K)AD>w5y_KM?Pst5-%x?I(&;n-_=D2Pv zeI`W=Y1$-xp-_Rdhg|Tg90jwc!QY32A?COYC#fWSE};C0ZZGWi9-{>%NHMFvGWt^! zSOej-bQ^G*k~S<;NQNE#B@b}Uw_s7oEiSmj;2|v)S4cgo^;tjd)OzA1y6XB~_7%ID zzSkcZXwMgJ6#={W-I8Id;{=7m!e4V6NB1R0XWhg$c2|qt1|*`{X8C!K)5qozy=z7;Z@KbEVfmfz*Ap6!-D-#)zOsmvk1P+CZtTT->3Fn99^EU zbi3mkU0+%Cb5^hO^*R!;BFPkj_|33)BcBrL$Tp&t`J9>3CVd6v4BO^9))iQy z=l#*rb$4)e(M5c|hgYk7vO|ALz+f#&;A+;L+RdF0lzId}eh2Tu4anCDu)fB4H7 ziwoUe={ZMJ32<>A20V^CDyb6m8*f5rLY1yy4@Tdm63pjnk#rPTl239StM3_U-|s$e7OF8>M(W=*ED zUhDg~FBly3NPtg;7Z1f8B$5@8Nj3gZ6tqm>7c1+MKsTN6Bou9%QAa}{_Uq7|bi4}(e>yt@(>!Ctf#X4i z(2iotf5Nbu{{1Qx_s9{a=YWS1ITI)!BHwnz$5lI6hPqm|*f2nzhSDVbl>TQpH6!-H z%}zfyI%Rr0Rr}ABbD{3lwiP+kJLu7{=L#Ga&dRP1Vhgq(1T`s(IHwjspA=WR?j@_% zDg_dexl5=OpLt5o%{tB2KJ7u>B7-@Cd_GceN&6zC(7h=6z^SmiLpZZ}h^?&AWinVy zTMI+0?|ElwXUmC!zDs`xcxJ7~tIq3da+IBY8}{pWZTFUs?%`b-NIa7FxQe{o<46pO&`0Nd$Vnhe{M%}$3Aw=>_NEFC>?BLAEg*$x7@o2`O?@2h=yW0 zrcaQTVs}&PH5E=u8&3*&i_&e%-$j?a8=BwQ4up1{%L+1PnHW#QYrfX}@e?|l z+(evs-c@}r1}9X6Iqx^Px6^HS&X*?AB?Wqh3Z+>FN)zho>@h8dq?BHZt$>x^ZsCEyRa)ajO`7FfyL+tTF+C}ZB}Y6;ROV#HdExM6+=?Vf{7I&k3`3s5XlvP!3GPlmBn+Qgvx^|2E65f4%09sz>=i>#rm;XFa6-$||_wl^j%Zr@BU z5`B$yEM;;$Tud^k-XY#p>~D|{b5Vx05(SYuaE6mKbqFls0aHbY^AoDDsMXtC!ri>n zxW{h?6Cs!8Lt=AB?8qX_P93)FI6;GsmoBQl%}r&)qc_j+5pZO*3F4x*w@ahc1s zUf&PX?$TczP(Cd##1bwvRP(kZ8$;Okk%)^AL2S*R7o=QmEev|VPL6Zf+x^2(`E`AN zA=9>A^=ks=Yd)t1)MHG_>s~^Wt{4mMwPyQ3{?|98` z=7qIKVy{!p-v=ZXb>0E{XT-cd?w?&JD;O-~$kx_-zC=Q2#B)#=6ZbUwNq+kAKFOOAm>$o0NTQX5SaMe3A577-F& zD_sI)$^~F$4QYI_Lg)Uaxd5HJK!+WBc=L3C&h>_EuGR6S#j~>oV&~3~WgYCD;lQhv zOkH~H=`B~Zd+-u54Sd(vgWxjd&j!PzDpKuWC3q2At}QdNqa$3VltdIE3^F7nJ>QxM zWf)MXerJ`ClgyYCgFcatCGs5?hu8;E837KDBe}J;zni^Y?Y77H&ezCC9fNOWE~RM; zWcA~6c%BRVS^A1U_wQ}xK4^j@`|7Vg2%j>qL&D{{-2gDXk2|Ty+57X!nMZvBwZ69w zulLk0C*MQ+bl}&&?@rzeZIQ60&!XB@$?sa(RjkKBsalQbs3S8I)BOLO2cNq$7}E{6!`Z24fO4f#hsiIAd_r)a zjppVTr=u&1Q{@5WD0_%HPlFwr7WK66tVqa|Y~%2Ep#~cF1i5_V#~1ECQZV%IL7rM< z@g|&*X!yI%^mvkjj*2{wAYR!2QNRAXr`Ns5*K;a~Bl8!kB-W+QFPbQBIh?o<{XK{Y z*hbW?g3W+_+E7n!IwyJBklMU{q5pZ}5-j?e4U-5M zQO!0(Aunvp*Fi7_*&!2L5rV$bbm$Aa2Jl%YDjGCRy%=c|hGlaC585~=P*i|7G18{s zHcl2_q-zkVQJ^IOXG1ei#y@}ffhjLJ-T_`D+IjmU>7*O#S8w&;Am0EpG~ASjMg^j z+=c^<9ucqS%P)7{XP{+nA+UElT;k)xSH>e?CvzEezSEeY^p(gi<}(>0!sK;wQb)ZD zMnfg(DFCfaR!6jfZYS$#SY_*Gxvq(G*(;2`oM})~{jf4(PCQVflVq`LQ%v(NuB@@^yO5PEJmy zyfPgIot&%~sk1bhD`UB^n{8C8v_Nhh9=^PR&NBc(AX}1btj&IiT91i+AoPwc0<1(0 z=gR}D#Kap;L;ZwG+9mkrX)S0YSnJYW4Qxj#9-U~2#^5;5QnhjEot~VxTGTMAi^YgR zK<8~FS!M{P+Zlp&ah3o@rqtLl1*L(UU0;D@zhE5vcxAzGs5V!`3T>g^VFRd@vf4RP zKvXFeK(%=~B`HSYVt8tDo|+4r(jvK&>sQBK0}oyb(0lBNhVD2pc++Z0LWH2HaF1nF z9b525rVn&##0Yi=hhmbuzTX19JT@~yqaphVx+pNHm^;*qcDi^I3x2Orx-1LdM#kkA zmSoyi1{DppHyE7m5;29}FGY<#TUGUjR?<~AW*s)ScDE6Z(W91eQXWE*enH?7_4iw; zt8{T<*?c>D5s|_ik|cekWno4*Jlp}scH#D204uSI3sk|b2nQ?^-1EufMsazA26zT3 zST)kmqWn~@0qWLS>MHfL?fl-6{;RJKa)f+=_mVx-AbGIYkodVnwOj)bd%afpw7i9m z55-Y}0nFA}%!*mTrnHfCl6hI;_TW7P!9PT3ar?{-sG-4ts6YWR_hW`zQ|Jdh7(3$j z&^-(SFsoBMr*XQf=k#iQ{!+ymv}SDadjW;uJ&Yi2C_ARDtspCs$7_bAou5LjAsZXM z5}jbv#?EEOC`jduJemSI-9v`FL=^q=&8?{D7w5koAB?08+HD|F3*(jpOlrVpA}_%iB}dlT8G zA-f#j?G*d@bFrqReX>--%OYw9-NrsaSqB=3U=MPa4oJS9*PxAW`rn&Hr!NDuargLa zk=Ea(mr;b=`EX_{NI&K4`2u-c2hF>kq{LA$f7aP+=qu9)yznq4Z-*z-4EGJlYfujJ z6MtU8_#0{b_5PO|y9Vc=PoEH~I36GbfyP{r0Nm!nC}h91Yev!WesfJ?4%+Z`J!qT{ z@v4EdKT!-R-Y`TFlu%UobQJk=yN$}Pr!c)XKszW*=Fr$BR41BXu1?YEaDQnq5)a!J zU0^Oa=Nsz1Yh;t|7)eo@f8q-ui` zxCSvJX=~7P^cgn`62^^7y2K@nFy;mR_RiMJsqcT|VKm(2t)8D-!{4Xy@ki-#3;g+@ z=?WSFR8R~oe4ucd1+!QMW55ta*17hm$M3bEv z6Lld~Mru6zB)A7#IHiDJ>39>vj!7|AOcSX}OEMjn+YhnMkSb$3akjgOX_O`hUB3+k zV0)UW`g6{Tu>&x<%A48%aoA!AIHU{9Fby(CgNe!QUxWVV0uMB5cR_5nE=eL7bqa&5 zODxxBFb{!jSVpr{|0}T)-J~BMs&;!6s_E7xMN;)hmFgIMDr_B|ocdMf1iZ0`J4$pF zngFj!Um5cO1x;*wezX=bzS*4|y0mS7n!t%FWk=VOanVgI!&He1*-#n}+SfNLbI(8M ztDz?&$6dz4t&Kn?{BPa*;tu^FTwW9(h+KU?eh{i-8Tp-ij2}yQa6hC8SA%e6bm!>H zb3A6q=_bRqsPSf)B+3?Wfc8cd(~dNniIWL$XjnbfMwF zUys`kpKHXS5)!T&=*iYew7;o=*_qM8_NV!M*dZ1fy{lU`>aY@KR9;QbW_bACT8tos z-HFohA;2Mf=@2Id=LepoZ(_T7yb!&jXh)NSLV928BL}jSUqFh zZDIfkToA}&w3;v+knzoy&+T|7e&CIq8G?Bet zFkVlZh}u5zjm~wkoE~sk7&m`^2a-D#gKOQW#I(}mvt3k#Y|V`@dc-X z(%vJ|u8Isfo06y|suroo;tMPg)rXzZzW+-D&2&MQ9edmNa2?>Lit|6b{KMA{0koT4 zV~x74=+&S>W*Ja_$BV7)Crbh}MBOrexEUh&h6S+8k~<$BogS0;*i;QdoesPsb%o!`R;Vi^a!%St}+2c`@aVn1kIYpB;$Od|DU|ovbk&!te5{|3;#)b5Sug zviVm<*5AoM7C}}Qu?^;_6kWH4Y%$(C=or91XLvM zjv-G!i$^AWL)+e(oc{{B?i3qRq*e>XQ{=}n_pWd1dCc6ppZ1 zVg)d6m1OHJ*ZQcCTey;l3f0<=cw0U>4QAQHSLsNO=n{pZbh{xloh}mf@}M&U=01=CRcW+ZRusRMq${?}FG>2*_DHlC2Y7W4xKLH@5h&Y;)(0)b)XO5n# z2>yCAa5LqulS_qzRB6G5jiqASF3u4xPoc;x6&j1Ei33l*Pk)uDn6p6>^+?R8gump1 zfGqUF2#1e*nN z{F;G*53_#{7!IoST2`*>4IGR51R~)}j`1|q>Zdv59#Q>NTmQ5H&?nA~lVJcY4m1NO zgu#5|V*^ZBx`3E&2sLJ8lq};{ZZy~+n-8MI>7yJpQ->o)CNUFsa?T~K?}S87 zG>918Ua0ots*VH0I_DtX|5!6MiQ1X%Lm|g z#R`;;+J+9PfHj783Kx#GI@{AcM#}--a-=$kxv6_XgMzxeW{3452n3XJ@p+4WVaA>i z`~)VS%9;63t-fXbdsmbDjZC}KxLy!XnYxC|IvwAam;0$MIK=HRT6f*n?VGQtpE!&T z3R5B~myN?==bd(;`|{hS&T4Z_@qbAP2n(6vA@3 zHr1D6L3*tNq`A3YjUe`rDTbD+FWk{U>zy?cRn3#k^d{%fes~27-<0f$V6)8}kGw@f95JVO<2F&!^U<7U9_FTKJ|8iv6DKj`vH`+%CYL56 zyyEdERCRa99~MEg63f?cz%8w71ux|qY(6)+n`@R`2pnEGeZ7vaFQj$9ejPmSpU6-epCPd%_{o0 z;D1l{{TtupIjbQ?xY6t2p5O&v$6vOlFTxo6j(14O+lXM-p zU5dYF;U3$I}l0w^N|2~PAlRd7Bg_J|Ax-5S(3Qy~x#4-PWd*9g~ZTF~h} z+Yfr7Xm=1+iJz+0`KxQ1gpToO)MQ<=QVF%cdS?1;LcK7@ysy%*6ZA~0oDKVPqj@WA zPKAGeHFeNtV-OR$M16zb9s#(P=S)qQHd z!T#rq$0f$F-t(J|h4*c!{}f(p3)|bde5XeBRXiO`opt}okhY{u*$pxxi9V;kAttt| z8l4tZQG-PDrP0B@0oU>dR@@5b1rF}Iqd>tHfJLo|NL_Y3zswE?FZ@!Q03k`+IWEe7 z6akU*R_?T<=cBMcE0#z|`B8O;;M4$uR=j^TW6%im%^ByO9*Lpkk&N_$P%}IM<cyUco}*oU7Ikj~`O>j@G8YQ`3la5E^`rQa+jh-( zO)4K~|4d2{&5!guV<0dr+b#4%>(~xVOLa8^!p4RBD)L$@VW!Fd_Wx_-40RBOfiS!g zcmaYT1VVzqBPI|KP$UTOcoe({jyIT@MDqZ6cm;4MBniQA*Xw%izh$8UwXfIG_R?kl z{flID%66~!gG5hptrh9FY+Nf^t|*TB^xK}5uAFpGUJA~MNg5kn>?e5&!l0O_n314I z$CzVP6^t!6q;W8Ao&iTVNwnbLhb7+7$E+a-juwp}l)lj>cR_QT2*lBbK=G6ki{j3d zplZ@wY%h%`{jIywd!BIlqHvCr#>jaZBr+T<<~#=FpSp)&Ap>GhD3Z{gJ_9=hzYoMw z(y92NV{u>Li8$VU6;H<&-%?U?H(}&afUNw6^npfS8px56$C@$apL829RFEN#<_U`T tXa@-HtP}+PXYsSHg>wO9cuY_NsZp;XsDjA#vSAK=lin~^v>PvThJK;$1Q!4R literal 0 HcmV?d00001