From c43d58051b6b536c1cf4b78eecd85c1a59fff5a4 Mon Sep 17 00:00:00 2001 From: zhuxinyu <1799009482@qq.com> Date: Tue, 28 Mar 2023 11:34:18 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=88=E7=AB=AF=E5=BC=82=E5=B8=B8=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E6=8E=A5=E5=8F=A3=E5=BC=80=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/njcn/device/pq/pojo/po/TopMsgPO.java | 78 +++++++++ .../controller/OperationContrController.java | 21 +++ .../njcn/device/pq/mapper/TopMsgMapper.java | 19 +++ .../device/pq/mapper/mapping/TopMagMapper.xml | 54 +++++++ .../njcn/device/pq/service/LineService.java | 9 +- .../pq/service/impl/LineServiceImpl.java | 32 ++-- .../harmonic/pojo/mysql/po/line/AlarmPO.java | 82 ++++++++++ .../pojo/mysql/po/line/AlarmStrategyVO.java | 59 +++++++ .../harmonic/pojo/mysql/po/line/LinePO.java | 113 +++++++++++++ .../harmonic/pojo/mysql/po/line/TopMsgPO.java | 65 ++++++++ .../param/DeviceAbnormaStatisticsParam.java | 16 ++ .../device/DeviceAbnormalController.java | 46 ++++++ .../device/DeviceAbnormaStatisticsMapper.java | 25 +++ .../mapping/DeviceAbnormaStatisticsMapper.xml | 150 ++++++++++++++++++ .../DeviceAbnormaStatisticsServiceImpl.java | 133 ++++++++++++++++ .../DeviceAbnormalStatisticsService.java | 7 + 16 files changed, 889 insertions(+), 20 deletions(-) create mode 100644 pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/TopMsgPO.java create mode 100644 pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/TopMsgMapper.java create mode 100644 pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/TopMagMapper.xml create mode 100644 pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/AlarmPO.java create mode 100644 pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/AlarmStrategyVO.java create mode 100644 pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/LinePO.java create mode 100644 pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/TopMsgPO.java create mode 100644 pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/param/DeviceAbnormaStatisticsParam.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/device/DeviceAbnormalController.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/device/DeviceAbnormaStatisticsMapper.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/device/mapping/DeviceAbnormaStatisticsMapper.xml create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/device/DeviceAbnormaStatisticsServiceImpl.java create mode 100644 pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/device/DeviceAbnormalStatisticsService.java diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/TopMsgPO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/TopMsgPO.java new file mode 100644 index 000000000..9def5ce2f --- /dev/null +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/TopMsgPO.java @@ -0,0 +1,78 @@ +package com.njcn.device.pq.pojo.po; + +import com.njcn.db.bo.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class TopMsgPO extends BaseEntity { + + private String cityName; + + private String subName; + + private String deviceName; + + /** + * 终端异常设备数量 + */ + private Integer deviceAbnormalNum; + + private String lineGrade; + + /** + * 日期 + */ + private String time; + + /** + * 装置id + */ + private String devId; + + /** + * 通信中断次数 + */ + private Integer comOutCount; + + /** + * 通信中断时间段描述 + */ + private String comOutDesc; + + /** + * 数据完整性标识 0.不达标 1.达标 + */ + private String integrityFlag; + + /** + * 数据完整性 + */ + private Integer integrityValue; + + /** + * 告警次数 + */ + private Integer alarmCount; + + /** + * 告警描述 + */ + private String alarmDesc; + + /** + * 流量超标标识 0.不达标 1.达标 + */ + private Integer flowFlag; + + /** + * 流量使用百分比 + */ + private float flowValue; + + /** + * 状态 0.删除 1.正常 + */ + private String state; +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/OperationContrController.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/OperationContrController.java index ae31d2f7e..8b5451802 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/OperationContrController.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/controller/OperationContrController.java @@ -9,6 +9,7 @@ import com.njcn.common.utils.HttpResultUtil; import com.njcn.common.utils.LogUtil; import com.njcn.device.pq.pojo.param.DeviceInfoParam; import com.njcn.device.pq.pojo.param.PqsParam; +import com.njcn.device.pq.pojo.po.TopMsgPO; import com.njcn.device.pq.pojo.vo.*; import com.njcn.device.pq.service.LineService; import com.njcn.web.controller.BaseController; @@ -142,4 +143,24 @@ public class OperationContrController extends BaseController { return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); } + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getDailyDeviceAbnormalStatistics") + @ApiOperation("获取终端异常统计") + @ApiImplicitParam(name = "conditionBusinessParam", value = "实体", required = true) + public HttpResult> dailyDeviceAbnormalStatistics(@RequestBody PqsParam param) { + String methodDescribe = getMethodDescribe("dailyDeviceAbnormalStatistics"); + Page result = lineService.dailyDeviceAbnormalStatistics(param); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, result, methodDescribe); + } + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/getDailyDeviceAbnormal") + @ApiOperation("获取终端异常") + @ApiImplicitParam(name = "conditionBusinessParam", value = "实体", required = true) + public HttpResult> dailyDeviceAbnormal(@RequestBody DeviceInfoParam.BusinessParam conditionBusinessParam) { + String methodDescribe = getMethodDescribe("dailyDeviceAbnormal"); + List result = lineService.dailyDeviceAbnormal(conditionBusinessParam); + 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/TopMsgMapper.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/TopMsgMapper.java new file mode 100644 index 000000000..72894ae91 --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/TopMsgMapper.java @@ -0,0 +1,19 @@ +package com.njcn.device.pq.mapper; + + +import cn.hutool.core.date.DateTime; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.njcn.device.pq.pojo.po.TopMsgPO; +import com.njcn.device.pq.pojo.vo.LineFlowMealDetailVO; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +public interface TopMsgMapper { + + Page getTopMsg(Page page,@Param("lineGrade") String lineGrade, @Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime); + List getTopMsgDetail(@Param("lineGrade") String lineGrade,@Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime); + + + +} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/TopMagMapper.xml b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/TopMagMapper.xml new file mode 100644 index 000000000..f25d347ba --- /dev/null +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/TopMagMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + \ No newline at end of file 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 8eee7590a..6453fa6de 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 @@ -1,6 +1,5 @@ package com.njcn.device.pq.service; -import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.njcn.device.pq.pojo.dto.PollutionLineDTO; import com.njcn.device.pq.pojo.dto.PollutionParamDTO; @@ -8,11 +7,9 @@ import com.njcn.device.pq.pojo.dto.PollutionSubstationDTO; import com.njcn.device.pq.pojo.param.DeviceInfoParam; import com.njcn.device.pq.pojo.param.PqsParam; import com.njcn.device.pq.pojo.po.Line; -import com.njcn.device.pq.pojo.po.LineDetail; import com.njcn.device.pq.pojo.po.Overlimit; +import com.njcn.device.pq.pojo.po.TopMsgPO; import com.njcn.device.pq.pojo.vo.*; -import org.springframework.web.bind.annotation.RequestBody; - import java.util.List; import java.util.Map; @@ -207,4 +204,8 @@ public interface LineService { Integer getLineCountBySubstation(String subIndex); PagegetNewDeviceRunStatistics(PqsParam deviceInfoParam); + + Page dailyDeviceAbnormalStatistics(PqsParam param); + + List dailyDeviceAbnormal(DeviceInfoParam.BusinessParam conditionBusinessParam); } 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 976d908ff..a30f92fc7 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 @@ -25,20 +25,15 @@ import com.njcn.device.pq.pojo.param.PqsParam; import com.njcn.device.pq.pojo.po.*; import com.njcn.device.pq.pojo.vo.*; import com.njcn.device.pq.mapper.*; -import com.njcn.device.pq.service.DeptLineService; import com.njcn.device.pq.service.LineService; -import com.njcn.device.pq.service.TerminalBaseService; import com.njcn.device.pq.utils.PublicDateUtil; import com.njcn.influxdb.param.InfluxDBPublicParam; import com.njcn.influxdb.utils.InfluxDbUtils; import com.njcn.system.api.AreaFeignClient; import com.njcn.system.api.DicDataFeignClient; -import com.njcn.user.api.DeptFeignClient; -import com.njcn.user.pojo.dto.DeptDTO; import com.njcn.web.pojo.vo.LineDataVO; import com.njcn.web.utils.GeneralUtil; import com.njcn.web.utils.RequestUtil; -import com.njcn.web.utils.WebUtil; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; @@ -87,16 +82,7 @@ public class LineServiceImpl extends ServiceImpl implements Li private final InfluxDbUtils influxDbUtils; - private final DeptFeignClient deptFeignClient; - - private final DeptLineService deptLineService; - - private final TerminalBaseService terminalBaseService; - - private final OnlineRateMapper onlineRateMapper; - - private final PqsMonthFlowMapper pqsMonthFlowMapper; - + private final TopMsgMapper topMsgMapper; @Override @@ -400,10 +386,24 @@ public class LineServiceImpl extends ServiceImpl implements Li new Page(deviceInfoParam.getPageNum(), deviceInfoParam.getPageSize()), deviceIndexes, DateUtil.beginOfDay(DateUtil.parse(deviceInfoParam.getSearchBeginTime())), - DateUtil.beginOfDay(DateUtil.parse(deviceInfoParam.getSearchEndTime()))); + DateUtil.endOfDay(DateUtil.parse(deviceInfoParam.getSearchEndTime()))); return page; } + @Override + public Page dailyDeviceAbnormalStatistics(PqsParam param) { + Page topMsg = topMsgMapper.getTopMsg(new Page(param.getPageNum(), param.getPageSize()), param.getLineGrade(), DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime())), + DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime()))); + return topMsg; + } + + @Override + public List dailyDeviceAbnormal(DeviceInfoParam.BusinessParam param) { + List topMsgDetails = topMsgMapper.getTopMsgDetail(param.getLineGrade(), DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime())), + DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime()))); + return topMsgDetails; + } + @Override public List getDeviceRunStatistics(DeviceInfoParam.BusinessParam deviceInfoParam) { ArrayList lineFlowMealDetailList = new ArrayList<>(); diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/AlarmPO.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/AlarmPO.java new file mode 100644 index 000000000..d2c799b6c --- /dev/null +++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/AlarmPO.java @@ -0,0 +1,82 @@ +package com.njcn.prepare.harmonic.pojo.mysql.po.line; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.njcn.db.bo.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +@EqualsAndHashCode(callSuper = true) +public class AlarmPO extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 监测点Id + */ + private String id; + + private String deviceId; + + + /** + * 告警描述 + */ + private String alarmDesc; + + /** + * 监测点告警次数 + */ + private Integer alarmCount = 0; + + /** + * 装置下属监测点等级 : 0-极重要 1-重要 2-普通 3-不重要 + * */ + private Integer level; + + + /** + * 1.装置 2.监测点 + */ + private Integer alarmDevLineType; + + /** + * 理论数据量 + */ + private BigDecimal due; + + /** + * 实际数据量 + */ + private BigDecimal real; + + /** + * 数据完整性 + */ + private BigDecimal integrity; + + + private Float flowMeal; + + + private Float statisValue; + + + private Float flowProportion; + + /** + * 通讯终端次数 + */ + private Integer comOutNum = 0; + + /** + * 中断时间段描述 + */ + private String comOutDesc; + + +} diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/AlarmStrategyVO.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/AlarmStrategyVO.java new file mode 100644 index 000000000..f3605ab2b --- /dev/null +++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/AlarmStrategyVO.java @@ -0,0 +1,59 @@ +package com.njcn.prepare.harmonic.pojo.mysql.po.line; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + + +@Data +public class AlarmStrategyVO implements Serializable { + + private static final long serialVersionUID = 1L; + /** + * id + */ + @ApiModelProperty("id") + private String id; + /** + * 等级 + */ + @ApiModelProperty("等级") + private String name; + + @ApiModelProperty("告警等级code:与高级算法内部Id描述对应") + private Integer algoDesc; + /** + * 数据完整性标准 + */ + @ApiModelProperty("数据完整性标准") + private Integer integrityValue; + /** + * 在线率标准 + */ + @ApiModelProperty("在线率标准") + private Integer onlineValue; + /** + * 离线持续时间 + */ + @ApiModelProperty("离线持续时间") + private Integer offTimeValue; + /** + * 告警次数 + */ + @ApiModelProperty("告警次数") + private Integer warnValue; + /** + * 更新日期 + */ + @ApiModelProperty("更新日期") + private LocalDateTime updateTime; + /** + * 更新用户 + */ + @ApiModelProperty("更新用户") + private String updateBy; + + +} diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/LinePO.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/LinePO.java new file mode 100644 index 000000000..0e702b365 --- /dev/null +++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/LinePO.java @@ -0,0 +1,113 @@ +package com.njcn.prepare.harmonic.pojo.mysql.po.line; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.njcn.db.bo.BaseEntity; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = true) +// @TableName("pq_line") +public class LinePO extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * 监测点Id + */ + private String id; + + /** + * 所属装置id + */ + private String deviceId; + + /** + * 父节点(0为根节点) + */ + private String pid; + + /** + * 上层所有节点 + */ + private String pids; + + /** + * 名称 + */ + private String name; + + /** + * 等级:0-项目名称;1- 工程名称;2-单位;3-部门;4-终端;5-母线;6-监测点 + */ + private Integer level; + + /** + * 排序(默认为0,有特殊排序需要时候人为输入) + */ + private Integer sort; + + /** + * 备注 + */ + private String remark; + + /** + * 状态 0-删除;1-正常;默认正常 + */ + private Integer state; + + /** + * 监测点等级 + */ + private String lineGrade; + + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private LocalDateTime updateTime; + + /** + * 告警描述 + */ + private String alarmDesc; + + /** + * 监测点告警次数 + */ + private Integer alarmCount; + + + /** + * 1.装置 2.监测点 + */ + private Integer alarmDevLineType; + + /** + * 在线率 + */ + private Float onlineRate; + + @ApiModelProperty("数据完整性") + private Float integrity; + + @ApiModelProperty("理论数据量") + private Integer due; + + @ApiModelProperty("实际数据量") + private Integer real; + + @ApiModelProperty("套餐流量") + private Float flowMeal; + + @ApiModelProperty("已用流量") + private Float statisValue; + + @ApiModelProperty("流量占比") + private Float flowProportion; + +} diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/TopMsgPO.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/TopMsgPO.java new file mode 100644 index 000000000..465cba037 --- /dev/null +++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/TopMsgPO.java @@ -0,0 +1,65 @@ +package com.njcn.prepare.harmonic.pojo.mysql.po.line; + +import com.njcn.db.bo.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +public class TopMsgPO extends BaseEntity { + + /** + * 日期 + */ + private String time; + + /** + * 装置id + */ + private String devId; + + /** + * 通信中断次数 + */ + private Integer comOutCount; + + /** + * 通信中断时间段描述 + */ + private String comOutDesc; + + /** + * 数据完整性标识 0.不达标 1.达标 + */ + private String integrityFlag; + + /** + * 数据完成性百分比 + */ + private Integer integrityValue; + + /** + * 告警次数 + */ + private Integer alarmCount; + + /** + * 告警描述 + */ + private String alarmDesc; + + /** + * 流量超标标识 0.不达标 1.达标 + */ + private Integer flowFlag; + + /** + * 流量使用百分比 + */ + private float flowValue; + + /** + * 状态 0.删除 1.正常 + */ + private String state; +} diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/param/DeviceAbnormaStatisticsParam.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/param/DeviceAbnormaStatisticsParam.java new file mode 100644 index 000000000..6b9397726 --- /dev/null +++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/param/DeviceAbnormaStatisticsParam.java @@ -0,0 +1,16 @@ +package com.njcn.prepare.harmonic.pojo.param; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; + +@Data +public class DeviceAbnormaStatisticsParam implements Serializable { + + @ApiModelProperty("开始时间") + private String beginTime; + + @ApiModelProperty("结束时间") + private String endTime; +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/device/DeviceAbnormalController.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/device/DeviceAbnormalController.java new file mode 100644 index 000000000..8b7911b4c --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/controller/device/DeviceAbnormalController.java @@ -0,0 +1,46 @@ +package com.njcn.prepare.harmonic.controller.device; + +import com.njcn.common.pojo.annotation.OperateInfo; +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.DeviceAbnormaStatisticsParam; +import com.njcn.prepare.harmonic.service.mysql.device.DeviceAbnormalStatisticsService; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.*; + +@Slf4j +@Api(tags = "终端异常") +@RestController +@RequestMapping("/deviceAbnormal") +@RequiredArgsConstructor +public class DeviceAbnormalController extends BaseController { + + private final DeviceAbnormalStatisticsService deviceAbnormaStatisticsService; + + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @PostMapping("/statistics") + @ApiOperation("终端异常统计") + @ApiImplicitParam(name = "param", value = "参数", required = true) + public HttpResult dailyDeviceAbnormaStatistics(@RequestBody DeviceAbnormaStatisticsParam param){ + String methodDescribe = getMethodDescribe("dailyDeviceAbnormaStatistics"); + boolean res = deviceAbnormaStatisticsService.dailyDeviceAbnormaStatistics(param); + if(res){ + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + }else { + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); + } + } + + + + + + +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/device/DeviceAbnormaStatisticsMapper.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/device/DeviceAbnormaStatisticsMapper.java new file mode 100644 index 000000000..197b52cbb --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/device/DeviceAbnormaStatisticsMapper.java @@ -0,0 +1,25 @@ +package com.njcn.prepare.harmonic.mapper.mysql.device; + +import cn.hutool.core.date.DateTime; +import com.njcn.prepare.harmonic.pojo.mysql.po.line.AlarmPO; +import com.njcn.prepare.harmonic.pojo.mysql.po.line.AlarmStrategyVO; +import com.njcn.prepare.harmonic.pojo.mysql.po.line.LinePO; +import com.njcn.prepare.harmonic.pojo.mysql.po.line.TopMsgPO; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +@Mapper +public interface DeviceAbnormaStatisticsMapper { + + List getLines(); + + List getAlarmByDevice(@Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime); + + List getAlarmByLines(@Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime); + + Boolean insertTopMsg(@Param("list") List topMsgPOS); + + List selectAlarmStrategy(); +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/device/mapping/DeviceAbnormaStatisticsMapper.xml b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/device/mapping/DeviceAbnormaStatisticsMapper.xml new file mode 100644 index 000000000..f388986b7 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/mapper/mysql/device/mapping/DeviceAbnormaStatisticsMapper.xml @@ -0,0 +1,150 @@ + + + + + INSERT INTO pqs_top_msg( + `Time_Id`, + `Dev_Id`, + `Comout_Count`, + `Comout_Desc`, + `Integrity_Flag`, + `Integrity_Value`, + `Alarm_Count`, + `Alarm_Desc`, + `Flow_Flag`, + `Flow_Value`, + `State` + ) VALUES + + ( + now(), + #{item.devId}, + #{item.comOutCount}, + #{item.comOutDesc}, + #{item.integrityFlag}, + #{item.integrityValue}, + IFNULL(#{item.alarmCount},0), + #{item.alarmDesc}, + #{item.flowFlag}, + #{item.flowValue}, + 1 + ) + + + + + + + + + + \ No newline at end of file diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/device/DeviceAbnormaStatisticsServiceImpl.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/device/DeviceAbnormaStatisticsServiceImpl.java new file mode 100644 index 000000000..483e932e9 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/Impl/device/DeviceAbnormaStatisticsServiceImpl.java @@ -0,0 +1,133 @@ +package com.njcn.prepare.harmonic.service.mysql.Impl.device; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.date.DateUtil; +import com.njcn.device.pq.pojo.po.Communicate; +import com.njcn.influxdb.param.InfluxDBPublicParam; +import com.njcn.influxdb.utils.InfluxDbUtils; +import com.njcn.prepare.harmonic.mapper.mysql.device.DeviceAbnormaStatisticsMapper; +import com.njcn.prepare.harmonic.pojo.dto.GeneralDeviceDTO; +import com.njcn.prepare.harmonic.pojo.mysql.po.line.AlarmPO; +import com.njcn.prepare.harmonic.pojo.mysql.po.line.AlarmStrategyVO; +import com.njcn.prepare.harmonic.pojo.mysql.po.line.LinePO; +import com.njcn.prepare.harmonic.pojo.mysql.po.line.TopMsgPO; +import com.njcn.prepare.harmonic.pojo.param.DeviceAbnormaStatisticsParam; +import com.njcn.prepare.harmonic.service.mysql.device.DeviceAbnormalStatisticsService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang.StringUtils; +import org.influxdb.dto.QueryResult; +import org.influxdb.impl.InfluxDBResultMapper; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.math.BigDecimal; +import java.util.*; +import java.util.stream.Collectors; + +/** + * + */ +@Service +@RequiredArgsConstructor +@Slf4j +public class DeviceAbnormaStatisticsServiceImpl implements DeviceAbnormalStatisticsService { + + private final DeviceAbnormaStatisticsMapper deviceAbnormaStatisticsMapper; + + private final InfluxDbUtils influxDbUtils; + @Override + public boolean dailyDeviceAbnormaStatistics(DeviceAbnormaStatisticsParam param) { + // 获取监测点告警 + List lineAlarms = deviceAbnormaStatisticsMapper.getAlarmByLines( + DateUtil.beginOfDay(DateUtil.parse(param.getBeginTime())), + DateUtil.beginOfDay(DateUtil.parse(param.getEndTime()))); + Map> lineMap = new HashMap<>(); + if (CollectionUtil.isNotEmpty(lineAlarms)){ + // 根据装置分组 + lineMap = lineAlarms.stream().collect(Collectors.groupingBy(AlarmPO::getDeviceId)); + } + + // 获取设备流量 + List deviceAlarms = deviceAbnormaStatisticsMapper.getAlarmByDevice( + DateUtil.beginOfDay(DateUtil.parse(param.getBeginTime())), + DateUtil.beginOfDay(DateUtil.parse(param.getEndTime()))); + List devs = deviceAlarms.stream().map(AlarmPO::getId).collect(Collectors.toList()); + devs.add("6469e77fda42db12c7ca6620a092f03c"); + Map> comMap = new HashMap<>(); + // 获取通信中断信息 + List communicate = getCommunicate(devs, param.getBeginTime(), param.getEndTime()); + if (CollectionUtil.isNotEmpty(communicate)){ + comMap = communicate.stream().collect(Collectors.groupingBy(Communicate::getId)); + } + for (AlarmPO deviceAlarm : deviceAlarms) { + if (!lineMap.containsKey(deviceAlarm.getId())) { + continue; + } + AlarmPO lineAlarm = lineMap.get(deviceAlarm.getId()).get(0); + deviceAlarm.setAlarmCount(deviceAlarm.getAlarmCount() + lineAlarm.getAlarmCount()); + if (lineAlarm.getDue().compareTo(BigDecimal.ZERO) == 0) { + deviceAlarm.setIntegrity(BigDecimal.ZERO); + } else { + deviceAlarm.setIntegrity(lineAlarm.getReal().divide(lineAlarm.getDue(), 2, BigDecimal.ROUND_HALF_UP)); + } + if (lineAlarm.getLevel() != null) { + deviceAlarm.setLevel(lineAlarm.getLevel()); + } + if (CollectionUtil.isNotEmpty(comMap)) { + List communicates = comMap.get(deviceAlarm.getId()); + int comOut = communicates.stream().filter(t -> t.getType() == 0).collect(Collectors.toList()).size(); + deviceAlarm.setComOutNum(comOut); + } + } + Map> levelMap = deviceAlarms.stream().collect(Collectors.groupingBy(AlarmPO::getLevel)); + List alarmStrategyVOS = deviceAbnormaStatisticsMapper.selectAlarmStrategy(); + List alarmExceptions = new ArrayList<>(); + for (AlarmStrategyVO strategyVO : alarmStrategyVOS) { + if (!levelMap.containsKey(strategyVO.getAlgoDesc())){ + continue; + } + List alarmPOS = levelMap.get(strategyVO.getAlgoDesc()); + for (AlarmPO alarmPO : alarmPOS) { + TopMsgPO topMsg = new TopMsgPO(); + topMsg.setDevId(alarmPO.getId()); + topMsg.setFlowFlag(1); + topMsg.setComOutCount(alarmPO.getComOutNum() == 0 ? 0 : alarmPO.getComOutNum()); + if (alarmPO.getIntegrity().intValue()strategyVO.getWarnValue()){ + topMsg.setAlarmCount(alarmPO.getAlarmCount()); + topMsg.setAlarmDesc(alarmPO.getAlarmDesc()); + } + if (alarmPO.getStatisValue()>alarmPO.getFlowMeal()) { + topMsg.setFlowFlag(0); + topMsg.setFlowValue(alarmPO.getFlowProportion()); + } + alarmExceptions.add(topMsg); + } + } + return deviceAbnormaStatisticsMapper.insertTopMsg(alarmExceptions); + } + + + public List getCommunicate(List devs, String startTime, String endTime) { + //组装sql语句 + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append("time >= '").append(DateUtil.beginOfDay(DateUtil.parse(startTime))).append("' and ").append("time <= '").append(DateUtil.endOfDay(DateUtil.parse(endTime))).append("' and "); + for (int i = 0; i < devs.size(); i++) { + if (devs.size() - i != 1) { + stringBuilder.append("dev_id ='").append(devs.get(i)).append("' or "); + } else { + stringBuilder.append("dev_id ='").append(devs.get(i)).append("' "); + } + } + String sql = "select * from " + InfluxDBPublicParam.PQS_COMMUNICATE + " where " + stringBuilder.toString() + InfluxDBPublicParam.TIME_ZONE; + //获取暂降事件 + QueryResult result = influxDbUtils.query(sql); + InfluxDBResultMapper influxDBResultMapper = new InfluxDBResultMapper(); + List communicateList = influxDBResultMapper.toPOJO(result, Communicate.class); + return communicateList; + } +} diff --git a/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/device/DeviceAbnormalStatisticsService.java b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/device/DeviceAbnormalStatisticsService.java new file mode 100644 index 000000000..97c855109 --- /dev/null +++ b/pqs-prepare/prepare-boot/src/main/java/com/njcn/prepare/harmonic/service/mysql/device/DeviceAbnormalStatisticsService.java @@ -0,0 +1,7 @@ +package com.njcn.prepare.harmonic.service.mysql.device; + +import com.njcn.prepare.harmonic.pojo.param.DeviceAbnormaStatisticsParam; + +public interface DeviceAbnormalStatisticsService { + boolean dailyDeviceAbnormaStatistics(DeviceAbnormaStatisticsParam param); +}