diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/RStatLimitTargetMapper.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/RStatLimitTargetMapper.java index a950f6c9b..869b7a00e 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/RStatLimitTargetMapper.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/RStatLimitTargetMapper.java @@ -12,7 +12,7 @@ import java.util.List; public interface RStatLimitTargetMapper extends BaseMapper { - Page getSumLimitTargetPage(Page p, + Page getSumLimitTargetPage(Pagep, @Param("ids") List lineIndexes, @Param("startTime") DateTime startTime, @Param("endTime") DateTime endTime); } diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/AnalyzeServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/AnalyzeServiceImpl.java index 066568122..e4156ac12 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/AnalyzeServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/AnalyzeServiceImpl.java @@ -295,13 +295,10 @@ public class AnalyzeServiceImpl implements IAnalyzeService { lineList.addAll(item.getLineIndexes()); }); } - Page p = new Page<>(); - p.setSize(param.getPageSize()); - p.setCurrent(param.getPageNum()); if (CollectionUtil.isNotEmpty(lineList)) { - Page sumLimitRatePage = targetMapper.getSumLimitTargetPage(p, lineList, DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime())), + page = targetMapper.getSumLimitTargetPage(page, lineList, DateUtil.beginOfDay(DateUtil.parse(param.getSearchBeginTime())), DateUtil.endOfDay(DateUtil.parse(param.getSearchEndTime()))); - List pageRecords = sumLimitRatePage.getRecords(); + List pageRecords = page.getRecords(); if (CollectionUtils.isEmpty(pageRecords)) { return page; } @@ -360,9 +357,8 @@ public class AnalyzeServiceImpl implements IAnalyzeService { } if (!CollectionUtils.isEmpty(result)){ - List recordList = new ArrayList<>(); //默认 根据在线监测点个数 倒叙排序 - recordList = result.stream().sorted(Comparator.comparing(MonitorOverLimitVO::getOverDay).reversed()).collect(Collectors.toList()); + List recordList = result.stream().sorted(Comparator.comparing(MonitorOverLimitVO::getOverDay).reversed()).collect(Collectors.toList()); page.setRecords(recordList); return page; } 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 61beea383..3d2fdb823 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 @@ -50,5 +50,9 @@ public class Communicate { @Column(name = "description") private String remark; + private Integer duration; + + private String desc; + } 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 18ee7d1c4..1ba38c3e2 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 @@ -1,5 +1,6 @@ package com.njcn.prepare.harmonic.pojo.mysql.po.line; +import cn.hutool.core.date.DateTime; import com.fasterxml.jackson.annotation.JsonFormat; import com.njcn.db.bo.BaseEntity; import io.swagger.annotations.ApiModelProperty; @@ -46,8 +47,7 @@ public class AlarmPO implements Serializable { */ private Integer alarmCount; - @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone ="GMT+8") - private LocalDateTime updateTime; + private String updateTime; /** * 1.装置 2.监测点 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 322139be5..1d7cee1d1 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 @@ -1,6 +1,7 @@ package com.njcn.prepare.harmonic.pojo.mysql.po.line; import com.njcn.db.bo.BaseEntity; +import com.njcn.prepare.harmonic.pojo.influxdb.po.Communicate; import lombok.Data; import lombok.EqualsAndHashCode; @@ -31,11 +32,10 @@ public class TopMsgPO extends BaseEntity { */ private Integer comOutCount; + /** * 通信中断时间段描述 */ - private List comOutDesc; - private String comOutDescription; /** @@ -74,10 +74,10 @@ public class TopMsgPO extends BaseEntity { private float onlineRateValue; - private Integer offtimeValue; - private Integer offtimeFlag; + private List communicates; + /** * 状态 0.删除 1.正常 */ 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 30cad716b..ebaf682d8 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 @@ -40,7 +40,7 @@ SELECT line.Id AS id, device.Id AS deviceId, sdd.Algo_Describe AS level, - device.Update_Time AS updateTime + DATE_FORMAT(pd.Update_Time, "%Y-%m-%d %H:%i:%s") 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 @@ -101,16 +101,17 @@ FROM ( SELECT - cmf.Dev_Id deviceId, + device.id deviceId, IFNULL(d.flow, (select flow from cld_flow_meal where type = 0 and flag = 1)) + IFNULL(d1.flow, 0) flowMeal, - IFNULL(cmf.Actual_Value,0) actualValue, - rsod.online_min/1440 onlineRate - FROM cld_month_flow cmf + IFNULL(cmf.Actual_Value/1024/1024,0) actualValue, + rsod.online_min/(rsod.online_min+rsod.offline_min) onlineRate + FROM pq_line device + LEFT JOIN cld_month_flow cmf ON cmf.Dev_Id = device.id LEFT JOIN cld_dev_meal c ON cmf.Dev_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 - LEFT JOIN r_stat_onlinerate_d rsod ON rsod.dev_index = cmf.Dev_Id - WHERE cmf.Dev_Id IN + LEFT JOIN r_stat_onlinerate_d rsod ON rsod.dev_index = device.id + WHERE device.id IN #{item} 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 09a81f9f1..7bc889f92 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 @@ -22,6 +22,7 @@ import java.math.RoundingMode; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.*; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -48,6 +49,9 @@ public class DeviceAbnormaStatisticsServiceImpl implements DeviceAbnormalStatist List monotorIds = lines.stream().map(AlarmPO::getId).collect(Collectors.toList()); // 装置id集合 List devIds = new ArrayList<>(devMap.keySet()); + // 获取异常告警策略 + List alarmStrategyVOS = deviceAbnormaStatisticsMapper.selectAlarmStrategy(); + Map> levMap = alarmStrategyVOS.stream().collect(Collectors.groupingBy(AlarmStrategyVO::getAlgoDesc)); // 获取监测点数据完整性 List lineIntegritys = deviceAbnormaStatisticsMapper.getIntegrityByLineIds( monotorIds, @@ -68,41 +72,45 @@ public class DeviceAbnormaStatisticsServiceImpl implements DeviceAbnormalStatist if (CollectionUtil.isNotEmpty(deviceFlowAndOnlineRate)) { deviceFlowAndOnlineRateMap = deviceFlowAndOnlineRate.stream().collect(Collectors.groupingBy(AlarmPO::getDeviceId)); } + // 获取通信中断信息 // List list = Arrays.asList("025fa0e4c91f72ad7f1c1bd29026f20a"); - List comMsgs = getCommunicate(devIds, param.getTime(), param.getTime()); + List comMsgs = getCommunicate(devIds, param.getTime()); if (CollectionUtil.isNotEmpty(comMsgs)) { comMap = comMsgs.stream().collect(Collectors.groupingBy(TopMsgPO::getDevId)); } - // 比对告警策略并落表 - List alarmStrategyVOS = deviceAbnormaStatisticsMapper.selectAlarmStrategy(); - 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())) { + for (Map.Entry> devEntry : devMap.entrySet()) { + if (!lineIntegrityMap.containsKey(devEntry.getKey()) && !lineAlarmsMap.containsKey(devEntry.getKey()) + && !deviceFlowAndOnlineRateMap.containsKey(devEntry.getKey()) && !comMap.containsKey(devEntry.getKey())) { continue; } TopMsgPO topMsg = new TopMsgPO(); - topMsg.setDevId(alarmEntry.getKey()); - int deviceLevel = alarmEntry.getValue().stream().mapToInt(AlarmPO::getLevel).min().orElse(-1); + topMsg.setDevId(devEntry.getKey()); + topMsg.setIntegrityFlag(1); + topMsg.setOfftimeFlag(1); + topMsg.setFlowFlag(1); + topMsg.setOnlineRateFlag(1); + topMsg.setAlarmCountFlag(1); + int deviceLevel = devEntry.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(); + if (lineIntegrityMap.containsKey(devEntry.getKey())) { + Integer due = lineIntegrityMap.get(devEntry.getKey()).get(0).getDue(); + Integer real = lineIntegrityMap.get(devEntry.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()); + if (lineAlarmsMap.containsKey(devEntry.getKey())) { + List lineAlarmPOS = lineAlarmsMap.get(devEntry.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); @@ -112,8 +120,8 @@ public class DeviceAbnormaStatisticsServiceImpl implements DeviceAbnormalStatist topMsg.setAlarmCount(0); } // 流量和在线率 - if (deviceFlowAndOnlineRateMap.containsKey(alarmEntry.getKey())) { - AlarmPO alarmPO = deviceFlowAndOnlineRateMap.get(alarmEntry.getKey()).get(0); + if (deviceFlowAndOnlineRateMap.containsKey(devEntry.getKey())) { + AlarmPO alarmPO = deviceFlowAndOnlineRateMap.get(devEntry.getKey()).get(0); topMsg.setFlowFlag(alarmPO.getActualValue() > alarmPO.getFlowMeal() ? 0 : 1); topMsg.setOnlineRateFlag(alarmPO.getOnlineRate() *100 < alarmStrategyVO.getOnlineValue() ? 0 : 1); topMsg.setFlowValue(alarmPO.getFlowProportion()); @@ -123,29 +131,34 @@ public class DeviceAbnormaStatisticsServiceImpl implements DeviceAbnormalStatist 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())); + if (comMap.containsKey(devEntry.getKey())) { + TopMsgPO comOutPO = comMap.get(devEntry.getKey()).get(0); + List abnormals = comOutPO.getCommunicates().stream().filter(t -> t.getDuration() > alarmStrategyVO.getOffTimeValue()).collect(Collectors.toList()); + topMsg.setOfftimeFlag(abnormals.size() > 0 ? 0 :1); + topMsg.setComOutCount(abnormals.size()); + List abnormalDesc = abnormals.stream().map(Communicate::getDesc).collect(Collectors.toList()); + topMsg.setComOutDescription(String.join(",",abnormalDesc)); } else { - topMsg.setOfftimeFlag(0); - String updateTime = localDateTimeFormat(alarmEntry.getValue().get(0).getUpdateTime()); - long time = DateUtil.endOfDay(DateUtil.parse(param.getTime())).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.getTime()))); + try { + if (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(devEntry.getValue().get(0).getUpdateTime()).after(DateUtil.endOfDay(DateUtil.parse(param.getTime())))) { + topMsg.setOfftimeFlag(0); + topMsg.setComOutCount(1); + topMsg.setComOutDescription(DateUtil.beginOfDay(DateUtil.parse(param.getTime()))+"至"+devEntry.getValue().get(0).getUpdateTime()); + } else if (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(devEntry.getValue().get(0).getUpdateTime()).before(DateUtil.beginOfDay(DateUtil.parse(param.getTime())))) { + topMsg.setOfftimeFlag(1); + topMsg.setComOutCount(0); + } + } catch (ParseException e) { + log.error("ParseException "+e); + } } - if (topMsg.getFlowFlag() != 1 || topMsg.getIntegrityFlag() != 1 || topMsg.getOfftimeFlag() != 0 - || topMsg.getAlarmCountFlag() != 1 || topMsg.getOnlineRateFlag() != 1) { + if (topMsg.getFlowFlag() !=1 || topMsg.getIntegrityFlag() !=1 || topMsg.getOfftimeFlag() != 1 + || topMsg.getAlarmCountFlag() !=1 || topMsg.getOnlineRateFlag() !=1) { topMsgPOS.add(topMsg); } } - return deviceAbnormaStatisticsMapper.insertTopMsg(topMsgPOS); - } public String localDateTimeFormat(LocalDateTime localDateTime) { @@ -156,12 +169,10 @@ public class DeviceAbnormaStatisticsServiceImpl implements DeviceAbnormalStatist String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(instant.toEpochMilli()); return format; } - public List getCommunicate(List devs, String startTime, String endTime) { -// startTime ="2023-04-02"; -// endTime = "2023-04-02"; - //组装sql语句 + public List getCommunicate(List devs, String time) { + // 组装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 "); + stringBuilder.append("time >= '").append(DateUtil.beginOfDay(DateUtil.parse(time))).append("' and ").append("time <= '").append(DateUtil.endOfDay(DateUtil.parse(time))).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 "); @@ -170,7 +181,7 @@ public class DeviceAbnormaStatisticsServiceImpl implements DeviceAbnormalStatist } } String sql = "select * from " + InfluxDBPublicParam.PQS_COMMUNICATE + " where " + stringBuilder.toString() + InfluxDBPublicParam.TIME_ZONE; - //获取暂降事件 + // 获取暂降事件 QueryResult result = influxDbUtils.query(sql); InfluxDBResultMapper influxDBResultMapper = new InfluxDBResultMapper(); List communicates = influxDBResultMapper.toPOJO(result, Communicate.class); @@ -180,34 +191,39 @@ public class DeviceAbnormaStatisticsServiceImpl implements DeviceAbnormalStatist } 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()); + for (Map.Entry> entry : comMap.entrySet()) { + String key = entry.getKey(); + List value = entry.getValue(); + TopMsgPO topMsgPO = new TopMsgPO(); + List comOuts = new ArrayList<>(); + topMsgPO.setDevId(key); // 根据日期排序 - List sortedList = comEntry.getValue().stream().sorted(Comparator.comparing(Communicate::getUpdateTime)).collect(Collectors.toList()); - Long mills = 0l; + List sortedList = value.stream().sorted(Comparator.comparing(Communicate::getUpdateTime)).collect(Collectors.toList()); if (sortedList.get(0).getType() == 1) { - long time = Date.from(sortedList.get(0).getUpdateTime()).getTime() - DateUtil.beginOfDay(DateUtil.parse(startTime)).getTime(); - mills += time; - comOutDesc.add((DateUtil.beginOfDay(DateUtil.parse(startTime)))+"至"+formatter.format(Date.from(sortedList.get(0).getUpdateTime()))); + Communicate communicate = new Communicate(); + int durationTime = (int) (Date.from(sortedList.get(0).getUpdateTime()).getTime() - DateUtil.beginOfDay(DateUtil.parse(time)).getTime())/1000/60; + communicate.setDuration(durationTime); + communicate.setDesc((DateUtil.beginOfDay(DateUtil.parse(time))) + "至" + formatter.format(Date.from(sortedList.get(0).getUpdateTime()))); + comOuts.add(communicate); } - for (int i = 0; i @@ -81,7 +83,9 @@ public class ConfigServiceImpl extends ServiceImpl impleme @Override public List getList() { - return this.baseMapper.getList(); + List list = this.baseMapper.getList(); + List filterList = list.stream().filter(t -> t.getLogTime() > 0 && t.getLogSize().compareTo(new BigDecimal(0))==1).collect(Collectors.toList()); + return filterList; }