From 07a905ae8df2e1d34e064e3ae93f22a97e2ebdf9 Mon Sep 17 00:00:00 2001 From: zhuxinyu <1799009482@qq.com> Date: Sat, 1 Apr 2023 21:42:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=88=E6=B5=81=E9=87=8F=E8=A1=A8=E3=80=81?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=AE=8C=E6=95=B4=E6=80=A7=E8=A1=A8=E5=88=87?= =?UTF-8?q?=E6=8D=A2&&=E5=BC=82=E5=B8=B8=E7=BB=9F=E8=AE=A1=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../njcn/device/pq/pojo/po/PqsMonthFlow.java | 21 -- .../device/pq/mapper/PqsMonthFlowMapper.java | 12 - .../device/pq/mapper/mapping/LineMapper.xml | 6 +- .../pq/mapper/mapping/PqsMonthFlowMapper.xml | 13 -- .../pojo/influxdb/po/Communicate.java | 5 + .../harmonic/pojo/mysql/po/line/AlarmPO.java | 48 ++-- .../harmonic/pojo/mysql/po/line/LinePO.java | 113 --------- .../harmonic/pojo/mysql/po/line/TopMsgPO.java | 22 +- .../device/DeviceAbnormalController.java | 4 +- .../device/DeviceAbnormaStatisticsMapper.java | 15 +- .../mapping/DeviceAbnormaStatisticsMapper.xml | 174 ++++++++------ .../DeviceAbnormaStatisticsServiceImpl.java | 217 +++++++++++------- .../DeviceAbnormalStatisticsService.java | 4 +- 13 files changed, 306 insertions(+), 348 deletions(-) delete mode 100644 pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/PqsMonthFlow.java delete mode 100644 pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/PqsMonthFlowMapper.java delete mode 100644 pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/PqsMonthFlowMapper.xml delete mode 100644 pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/LinePO.java diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/PqsMonthFlow.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/PqsMonthFlow.java deleted file mode 100644 index 5702c826a..000000000 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/PqsMonthFlow.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.njcn.device.pq.pojo.po; - -import com.baomidou.mybatisplus.annotation.TableName; -import com.njcn.db.bo.BaseEntity; -import lombok.Data; -import lombok.EqualsAndHashCode; - -@Data -@EqualsAndHashCode(callSuper = true) -@TableName("pqs_month_flow") -public class PqsMonthFlow extends BaseEntity { - private static final long serialVersionUID = 1L; - - private String id; - - private String time; - - private String actualValue; - - private String devId; -} diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/PqsMonthFlowMapper.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/PqsMonthFlowMapper.java deleted file mode 100644 index 9cc4cb5b6..000000000 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/PqsMonthFlowMapper.java +++ /dev/null @@ -1,12 +0,0 @@ -package com.njcn.device.pq.mapper; - -import cn.hutool.core.date.DateTime; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; -import com.njcn.device.pq.pojo.param.DeviceInfoParam; -import com.njcn.device.pq.pojo.po.PqsMonthFlow; -import org.apache.ibatis.annotations.Param; - -public interface PqsMonthFlowMapper extends BaseMapper { - - float getStatisValueFlow(@Param("devId")String id, @Param("startTime") DateTime startTime, @Param("endTime") DateTime endTimem); -} 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 504cbf416..953029575 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 @@ -788,7 +788,7 @@ INNER JOIN pq_device b ON vol.pid = b.id INNER JOIN pq_line sub ON dev.pid = sub.id INNER JOIN pq_line elc ON sub.pid = elc.id - LEFT JOIN pqs_month_flow m ON b.id = m.Dev_Id + LEFT JOIN cld_month_flow m ON b.id = m.Dev_Id LEFT JOIN cld_dev_meal c ON b.id = c.line_id LEFT JOIN cld_flow_meal d ON c.Base_Meal_Id = d.id LEFT JOIN cld_flow_meal d1 ON c.Ream_Meal_Id = d1.id @@ -826,7 +826,7 @@ INNER JOIN pq_device b ON vol.pid = b.id INNER JOIN pq_line sub ON dev.pid = sub.id INNER JOIN pq_line elc ON sub.pid = elc.id - LEFT JOIN pqs_month_flow m ON b.id = m.Dev_Id + LEFT JOIN cld_month_flow m ON b.id = m.Dev_Id LEFT JOIN cld_dev_meal c ON b.id = c.line_id LEFT JOIN cld_flow_meal d ON c.Base_Meal_Id = d.id LEFT JOIN cld_flow_meal d1 ON c.Ream_Meal_Id = d1.id @@ -855,7 +855,7 @@ ifnull(m.Actual_Value,0) statisValue FROM pq_line a INNER JOIN pq_device b ON a.id = b.id - LEFT JOIN pqs_month_flow m ON b.id = m.Dev_Id + LEFT JOIN cld_month_flow m ON b.id = m.Dev_Id LEFT JOIN cld_dev_meal c ON b.id = c.line_id LEFT JOIN cld_flow_meal d ON c.Base_Meal_Id = d.id LEFT JOIN cld_flow_meal d1 ON c.Ream_Meal_Id = d1.id diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/PqsMonthFlowMapper.xml b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/PqsMonthFlowMapper.xml deleted file mode 100644 index 4e07d4473..000000000 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/PqsMonthFlowMapper.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/influxdb/po/Communicate.java b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/influxdb/po/Communicate.java index 87cef7e43..61beea383 100644 --- a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/influxdb/po/Communicate.java +++ b/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/influxdb/po/Communicate.java @@ -5,6 +5,8 @@ import org.influxdb.annotation.Column; import org.influxdb.annotation.Measurement; import java.time.Instant; +import java.time.LocalDateTime; +import java.util.Date; /** *

@@ -29,6 +31,9 @@ public class Communicate { @Column(name = "time") private Instant updateTime; +// @Column(name = "time") +// private String updateTime; + @Column(name = "dev_id") private String devId; 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 index 580b31513..18ee7d1c4 100644 --- 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 @@ -6,23 +6,35 @@ import io.swagger.annotations.ApiModelProperty; import io.swagger.models.auth.In; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; +import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; @Data -@EqualsAndHashCode(callSuper = true) -public class AlarmPO extends BaseEntity { +public class AlarmPO implements Serializable { private static final long serialVersionUID = 1L; /** - * 监测点Id + * 监测点id */ private String id; + /** + * 监测点等级 : 0-极重要 1-重要 2-普通 3-不重要 + */ + private Integer level; + + /** + * 装置id + */ private String deviceId; - private LocalDateTime updateTime; + /** + * 装置等级 : 0-极重要 1-重要 2-普通 3-不重要 + */ + private Integer deviceLevel; /** * 告警描述 @@ -32,13 +44,10 @@ public class AlarmPO extends BaseEntity { /** * 监测点告警次数 */ - private Integer alarmCount = 0; - - /** - * 装置下属监测点等级 : 0-极重要 1-重要 2-普通 3-不重要 - * */ - private Integer level; + private Integer alarmCount; + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone ="GMT+8") + private LocalDateTime updateTime; /** * 1.装置 2.监测点 @@ -48,23 +57,23 @@ public class AlarmPO extends BaseEntity { /** * 理论数据量 */ - private BigDecimal due; + private Integer due; /** * 实际数据量 */ - private BigDecimal real; + private Integer real; /** * 数据完整性 */ - private BigDecimal integrity; + private Float integrity; private Float flowMeal; - private Float statisValue; + private Float actualValue; private Float flowProportion; @@ -79,5 +88,16 @@ public class AlarmPO extends BaseEntity { */ private String comOutDesc; + /** + * 在线时间 + */ + private Integer online_min; + /** + * 离线时间 + */ + private Integer offline_min; + + private float onlineRate; + } 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 deleted file mode 100644 index 0e702b365..000000000 --- a/pqs-prepare/prepare-api/src/main/java/com/njcn/prepare/harmonic/pojo/mysql/po/line/LinePO.java +++ /dev/null @@ -1,113 +0,0 @@ -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 index 9d3ab46ea..322139be5 100644 --- 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 @@ -4,6 +4,7 @@ import com.njcn.db.bo.BaseEntity; import lombok.Data; import lombok.EqualsAndHashCode; +import java.math.BigDecimal; import java.util.List; @Data @@ -20,6 +21,11 @@ public class TopMsgPO extends BaseEntity { */ private String devId; + /** + * 装置等级 : 0-极重要 1-重要 2-普通 3-不重要 + */ + private Integer deviceLevel; + /** * 通信中断次数 */ @@ -30,15 +36,17 @@ public class TopMsgPO extends BaseEntity { */ private List comOutDesc; + private String comOutDescription; + /** * 数据完整性标识 0.不达标 1.达标 */ - private String integrityFlag; + private Integer integrityFlag; /** * 数据完成性百分比 */ - private Integer integrityValue; + private Float integrityValue; /** * 告警次数 @@ -50,6 +58,8 @@ public class TopMsgPO extends BaseEntity { */ private String alarmDesc; + private Integer alarmCountFlag; + /** * 流量超标标识 0.不达标 1.达标 */ @@ -60,6 +70,14 @@ public class TopMsgPO extends BaseEntity { */ private float flowValue; + private Integer onlineRateFlag; + + private float onlineRateValue; + + private Integer offtimeValue; + + private Integer offtimeFlag; + /** * 状态 0.删除 1.正常 */ 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 index 8b7911b4c..2237b68f5 100644 --- 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 @@ -15,6 +15,8 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; +import java.text.ParseException; + @Slf4j @Api(tags = "终端异常") @RestController @@ -28,7 +30,7 @@ public class DeviceAbnormalController extends BaseController { @PostMapping("/statistics") @ApiOperation("终端异常统计") @ApiImplicitParam(name = "param", value = "参数", required = true) - public HttpResult dailyDeviceAbnormaStatistics(@RequestBody DeviceAbnormaStatisticsParam param){ + public HttpResult dailyDeviceAbnormaStatistics(@RequestBody DeviceAbnormaStatisticsParam param) throws ParseException { String methodDescribe = getMethodDescribe("dailyDeviceAbnormaStatistics"); boolean res = deviceAbnormaStatisticsService.dailyDeviceAbnormaStatistics(param); if(res){ 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 index 197b52cbb..6e0e3ebc2 100644 --- 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 @@ -3,7 +3,6 @@ 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; @@ -13,11 +12,19 @@ import java.util.List; @Mapper public interface DeviceAbnormaStatisticsMapper { - List getLines(); + /** + * 获取所有有等级监测点以及对应设备 + * @return List + */ + List getLines(); - List getAlarmByDevice(@Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime); + List getFlowAndOnlineRateByDevice(@Param("list") List list,@Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime); - List getAlarmByLines(@Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime); + List getIntegrityByLines(@Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime); + + List getIntegrityByLineIds(@Param("list") List list,@Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime); + + List getAlarmByLines(@Param("monitorIds") List monitorIds,@Param("devIds") List devIds,@Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime); Boolean insertTopMsg(@Param("list") List topMsgPOS); 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 index d8dbfa1e4..c7f193626 100644 --- 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 @@ -13,6 +13,8 @@ `Alarm_Desc`, `Flow_Flag`, `Flow_Value`, + `OnlineRate_Flag`, + `OnlineRate_Value`, `State` ) VALUES @@ -20,118 +22,138 @@ now(), #{item.devId}, #{item.comOutCount}, - #{item.comOutDesc}, + #{item.comOutDescription}, #{item.integrityFlag}, #{item.integrityValue}, IFNULL(#{item.alarmCount},0), #{item.alarmDesc}, #{item.flowFlag}, #{item.flowValue}, + #{item.onlineRateFlag}, + #{item.onlineRateValue}, 1 ) - + SELECT line.Id AS id, + device.Id AS deviceId, + sdd.Algo_Describe AS level, + device.Update_Time AS updateTime FROM pq_line line INNER JOIN pq_line vol ON line.pid=vol.id INNER JOIN pq_line device ON vol.pid=device.id LEFT JOIN pq_device pd ON device.id=pd.id LEFT JOIN pq_line_detail pld ON pld.id=line.id - LEFT JOIN cld_alarm ca ON ca.Line_Id=line.id + LEFT JOIN sys_dict_data sdd ON sdd.Id = pld.Line_Grade WHERE - pd.Dev_Model=1 + pd.Dev_Model=1 AND - pd.Run_Flag=0 + pd.Run_Flag=0 AND - pld.Line_Grade is NOT NULL - GROUP BY deviceId) - UNION ALL - (SELECT device.Id AS Id, - device.id AS deviceId, - COUNT(ca.Id) AS alarmCount, - GROUP_CONCAT(ca.Remark) AS alarmDesc - FROM pq_line line - INNER JOIN pq_line vol ON line.pid=vol.id - INNER JOIN pq_line device ON vol.pid=device.id - LEFT JOIN pq_device pd ON device.id=pd.id - LEFT JOIN pq_line_detail pld ON pld.id=line.id - LEFT JOIN cld_alarm ca ON ca.Line_Id=device.id - WHERE - pd.Dev_Model=1 - AND - pd.Run_Flag=0 - AND - pld.Line_Grade is NOT NULL - GROUP BY deviceId) + pld.Line_Grade is NOT NULL - + SELECT line.Id AS Id, + device.id AS deviceId, + IFNULL(SUM(integrity.due_time),0) AS due, + IFNULL(SUM(integrity.real_time),0) AS `real` + FROM pq_line line + INNER JOIN pq_line vol ON line.pid=vol.id + INNER JOIN pq_line device ON vol.pid=device.id + LEFT JOIN pq_device pd ON device.id=pd.id + LEFT JOIN pq_line_detail pld ON pld.id=line.id + LEFT JOIN r_stat_integrity_d integrity ON integrity.line_index = line.id + WHERE + pd.Dev_Model=1 + AND + pd.Run_Flag=0 + AND + pld.Line_Grade is NOT NULL + AND + integrity.time_id BETWEEN #{startTime} AND #{endTime} + GROUP BY device.Id + + + + + + + \ 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 index 488beef46..d381ca39b 100644 --- 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 @@ -18,6 +18,10 @@ import org.influxdb.impl.InfluxDBResultMapper; import org.springframework.stereotype.Service; import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.time.*; import java.util.*; import java.util.stream.Collectors; @@ -33,79 +37,128 @@ public class DeviceAbnormaStatisticsServiceImpl implements DeviceAbnormalStatist private final InfluxDbUtils influxDbUtils; @Override - public boolean dailyDeviceAbnormaStatistics(DeviceAbnormaStatisticsParam param) { + public boolean dailyDeviceAbnormaStatistics(DeviceAbnormaStatisticsParam param) throws ParseException { Map> comMap = new HashMap<>();Map> devLineMap = new HashMap<>(); - // 获取监测点告警 + Map> deviceFlowAndOnlineRateMap = new HashMap<>(); + // 获取所有装置以及下属监测点 + List lines = deviceAbnormaStatisticsMapper.getLines(); + // 根据装置id分组 + Map> devMap = lines.stream().collect(Collectors.groupingBy(AlarmPO::getDeviceId)); + // 监测点集合 + List monotorIds = lines.stream().map(AlarmPO::getId).collect(Collectors.toList()); + // 装置id集合 + List devIds = new ArrayList<>(devMap.keySet()); + // 获取监测点数据完整性 + List lineIntegritys = deviceAbnormaStatisticsMapper.getIntegrityByLineIds( + monotorIds, + DateUtil.beginOfDay(DateUtil.parse(param.getBeginTime())), + DateUtil.endOfDay(DateUtil.parse(param.getEndTime()))); + Map> lineIntegrityMap = lineIntegritys.stream().collect(Collectors.groupingBy(AlarmPO::getDeviceId)); List lineAlarms = deviceAbnormaStatisticsMapper.getAlarmByLines( + monotorIds, + devIds, DateUtil.beginOfDay(DateUtil.parse(param.getBeginTime())), DateUtil.endOfDay(DateUtil.parse(param.getEndTime()))); - if (CollectionUtil.isNotEmpty(lineAlarms)){ - // 根据装置分组 - devLineMap = lineAlarms.stream().collect(Collectors.groupingBy(AlarmPO::getDeviceId)); - } + Map> lineAlarmsMap = lineAlarms.stream().collect(Collectors.groupingBy(AlarmPO::getDeviceId)); // 获取设备流量 - List deviceAlarms = deviceAbnormaStatisticsMapper.getAlarmByDevice( + List deviceFlowAndOnlineRate = deviceAbnormaStatisticsMapper.getFlowAndOnlineRateByDevice( + devIds, DateUtil.beginOfDay(DateUtil.parse(param.getBeginTime())), DateUtil.endOfDay(DateUtil.parse(param.getEndTime()))); - List devs = deviceAlarms.stream().map(AlarmPO::getId).collect(Collectors.toList()); - // 获取通信中断信息 - List comMsgs = getCommunicate(devs, param.getBeginTime(), param.getEndTime()); - if (CollectionUtil.isNotEmpty(comMsgs)){ - comMap = comMsgs.stream().collect(Collectors.groupingBy(TopMsgPO::getDevId)); + if (CollectionUtil.isNotEmpty(deviceFlowAndOnlineRate)) { + deviceFlowAndOnlineRateMap = deviceFlowAndOnlineRate.stream().collect(Collectors.groupingBy(AlarmPO::getDeviceId)); } - // 整合监测点告警信息、数据完整性以及监测点等级为设备信息 - for (AlarmPO deviceAlarm : deviceAlarms) { - if (!devLineMap.containsKey(deviceAlarm.getId())) { - continue; - } - AlarmPO lineAlarm = devLineMap.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()); - } - TopMsgPO topMsgPO = comMap.get(deviceAlarm.getId()).get(0); - deviceAlarm.setComOutNum(topMsgPO.getComOutCount()); - deviceAlarm.setComOutDesc(String.join(",",topMsgPO.getComOutDesc())); + // 获取通信中断信息 + // List list = Arrays.asList("025fa0e4c91f72ad7f1c1bd29026f20a"); + List comMsgs = getCommunicate(devIds, param.getBeginTime(), param.getEndTime()); + if (CollectionUtil.isNotEmpty(comMsgs)) { + comMap = comMsgs.stream().collect(Collectors.groupingBy(TopMsgPO::getDevId)); } // 比对告警策略并落表 List alarmStrategyVOS = deviceAbnormaStatisticsMapper.selectAlarmStrategy(); - List alarmExceptions = new ArrayList<>(); - Map> levelMap = deviceAlarms.stream().collect(Collectors.groupingBy(AlarmPO::getLevel)); - for (AlarmStrategyVO strategyVO : alarmStrategyVOS) { - if (!levelMap.containsKey(strategyVO.getAlgoDesc())){ + Map> levMap = alarmStrategyVOS.stream().collect(Collectors.groupingBy(AlarmStrategyVO::getAlgoDesc)); + + // 整合装置信息 + List topMsgPOS = new ArrayList<>(); + for (Map.Entry> alarmEntry : devMap.entrySet()) { + if (!lineIntegrityMap.containsKey(alarmEntry.getKey()) && !lineAlarmsMap.containsKey(alarmEntry.getKey()) + && !deviceFlowAndOnlineRateMap.containsKey(alarmEntry.getKey()) && !comMap.containsKey(alarmEntry.getKey())) { 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() == null ? 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); + TopMsgPO topMsg = new TopMsgPO(); + topMsg.setDevId(alarmEntry.getKey()); + int deviceLevel = alarmEntry.getValue().stream().mapToInt(AlarmPO::getLevel).min().orElse(-1); + topMsg.setDeviceLevel(deviceLevel); + AlarmStrategyVO alarmStrategyVO = levMap.get(deviceLevel).get(0); + // 数据完整性 + if (lineIntegrityMap.containsKey(alarmEntry.getKey())) { + Integer due = lineIntegrityMap.get(alarmEntry.getKey()).get(0).getDue(); + Integer real = lineIntegrityMap.get(alarmEntry.getKey()).get(0).getReal(); + float integrity = BigDecimal.valueOf((float) real *100 / due).setScale(2, RoundingMode.HALF_UP).floatValue(); + topMsg.setIntegrityFlag(integrity < alarmStrategyVO.getIntegrityValue() ? 0 : 1); + topMsg.setIntegrityValue(integrity); + } else { + topMsg.setIntegrityFlag(-1); } + // 装置告警 + if (lineAlarmsMap.containsKey(alarmEntry.getKey())) { + List lineAlarmPOS = lineAlarmsMap.get(alarmEntry.getKey()); + int alarmCount = lineAlarmPOS.stream().mapToInt(AlarmPO::getAlarmCount).sum(); + String alarmDesc = String.join(",", lineAlarmPOS.stream().map(AlarmPO::getAlarmDesc).collect(Collectors.toList())); + topMsg.setAlarmCountFlag(alarmCount > alarmStrategyVO.getWarnValue() ? 0 : 1); + topMsg.setAlarmCount(alarmCount); + topMsg.setAlarmDesc(alarmDesc); + } else { + topMsg.setAlarmCount(0); + } + // 流量和在线率 + if (deviceFlowAndOnlineRateMap.containsKey(alarmEntry.getKey())) { + AlarmPO alarmPO = deviceFlowAndOnlineRateMap.get(alarmEntry.getKey()).get(0); + topMsg.setFlowFlag(alarmPO.getActualValue() > alarmPO.getFlowMeal() ? 0 : 1); + topMsg.setOnlineRateFlag(alarmPO.getOnlineRate() *100 < alarmStrategyVO.getOnlineValue() ? 0 : 1); + topMsg.setFlowValue(alarmPO.getFlowProportion()); + topMsg.setOnlineRateValue(alarmPO.getOnlineRate() *100); + } else { + topMsg.setFlowFlag(-1); + topMsg.setOnlineRateFlag(-1); + } + + if (comMap.containsKey(alarmEntry.getKey())) { + TopMsgPO comOutPO = comMap.get(alarmEntry.getKey()).get(0); + topMsg.setOfftimeFlag(comOutPO.getOfftimeValue() > alarmStrategyVO.getOffTimeValue() ? 0 :1); + topMsg.setComOutCount(comOutPO.getComOutCount()); + topMsg.setComOutDescription(String.join(",",comOutPO.getComOutDesc())); + } else { + topMsg.setOfftimeFlag(0); + String updateTime = localDateTimeFormat(alarmEntry.getValue().get(0).getUpdateTime()); + long time = DateUtil.endOfDay(DateUtil.parse(param.getEndTime())).getTime() - + alarmEntry.getValue().get(0).getUpdateTime().toInstant(ZoneOffset.ofHours(8)).toEpochMilli(); + topMsg.setOfftimeValue((int)(time/1000/60)); + topMsg.setComOutCount(1); + topMsg.setComOutDescription(updateTime+"至"+DateUtil.endOfDay(DateUtil.parse(param.getEndTime()))); + } + if (topMsg.getFlowFlag() != 1 || topMsg.getIntegrityFlag() != 1 || topMsg.getOfftimeFlag() != 0 + || topMsg.getAlarmCountFlag() != 1 || topMsg.getOnlineRateFlag() != 1) { + topMsgPOS.add(topMsg); + } + } - return deviceAbnormaStatisticsMapper.insertTopMsg(alarmExceptions); + + return deviceAbnormaStatisticsMapper.insertTopMsg(topMsgPOS); + } - - public List getCommunicate(List devs, String startTime, String endTime) { + public String localDateTimeFormat(LocalDateTime localDateTime) { + // 通过LocalDateTime.atZone方法,使用系统默认时区ZonId.systemDefault()获取Instant实例 + ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault()); + Instant instant = zonedDateTime.toInstant(); + // 日期格式化 + String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(instant.toEpochMilli()); + return format; + } + public List getCommunicate(List devs, String startTime, String endTime) throws ParseException { +// startTime ="2023-04-02"; +// endTime = "2023-04-02"; //组装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 "); @@ -125,48 +178,36 @@ public class DeviceAbnormaStatisticsServiceImpl implements DeviceAbnormalStatist if (CollectionUtil.isEmpty(communicates)) { return comMsgs; } + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); Map> comMap = communicates.stream().collect(Collectors.groupingBy(Communicate::getDevId)); for (Map.Entry> comEntry : comMap.entrySet()) { TopMsgPO topMsgPO = new TopMsgPO(); List comOutDesc = new ArrayList<>(); topMsgPO.setDevId(comEntry.getKey()); // 根据日期排序 List sortedList = comEntry.getValue().stream().sorted(Comparator.comparing(Communicate::getUpdateTime)).collect(Collectors.toList()); - if (sortedList.size() == 1) { - if (sortedList.get(0).getType() == 0) { - comOutDesc.add(sortedList.get(0).getUpdateTime()+"至"+DateUtil.endOfDay(DateUtil.parse(endTime))); - } else { - comOutDesc.add((DateUtil.beginOfDay(DateUtil.parse(startTime)))+"至"+sortedList.get(0).getUpdateTime()); - } - } else { - switch (sortedList.get(0).getType()) { - case 0: - for (int i = 0; i a.getType() == 0).collect(Collectors.toList()).size()); + topMsgPO.setComOutCount(comOutDesc.size()); comMsgs.add(topMsgPO); } return comMsgs; 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 index 97c855109..a4a764ab3 100644 --- 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 @@ -2,6 +2,8 @@ package com.njcn.prepare.harmonic.service.mysql.device; import com.njcn.prepare.harmonic.pojo.param.DeviceAbnormaStatisticsParam; +import java.text.ParseException; + public interface DeviceAbnormalStatisticsService { - boolean dailyDeviceAbnormaStatistics(DeviceAbnormaStatisticsParam param); + boolean dailyDeviceAbnormaStatistics(DeviceAbnormaStatisticsParam param) throws ParseException; }