From 7896e8237ae73671f7b6b6bbe6cfb2a3e0b9ed93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=A8=E6=9C=A8c?= <857448963@qq.com> Date: Tue, 14 Feb 2023 08:48:04 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pq/pojo/vo/TerminalOnlineRateDataVO.java | 9 +- .../mapper/TerminalOnlineRateDataMapper.java | 12 +- .../mapping/TerminalOnlineRateDataMapper.xml | 19 --- .../impl/LineIntegrityDataServiceImpl.java | 3 - .../TerminalOnlineRateDataServiceImpl.java | 130 ++++++++++++++---- .../device/pq/utils/DataStatisticsUtil.java | 30 +--- 6 files changed, 111 insertions(+), 92 deletions(-) diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/TerminalOnlineRateDataVO.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/TerminalOnlineRateDataVO.java index e332e3646..c51b5b953 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/TerminalOnlineRateDataVO.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/vo/TerminalOnlineRateDataVO.java @@ -2,6 +2,7 @@ package com.njcn.device.pq.pojo.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; +import io.swagger.models.auth.In; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -100,12 +101,10 @@ public class TerminalOnlineRateDataVO implements Serializable { @ApiModelProperty(name = "lineGrade",value = "终端等级") private String lineGrade; -/* - // 终端在线率合格率 - @ApiModelProperty(name = "devicePassRate",value = "终端在线率合格率 0:不合格 1:合格") - private Double devicePassRate; -*/ + @ApiModelProperty(name = "devicePassRate",value = "终端在线率合格率 0:不合格 1:合格") + private Integer valueOver; + /** * 字段表监测点等级 */ diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/TerminalOnlineRateDataMapper.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/TerminalOnlineRateDataMapper.java index be1852276..3b980cc76 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/TerminalOnlineRateDataMapper.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/TerminalOnlineRateDataMapper.java @@ -33,27 +33,21 @@ public interface TerminalOnlineRateDataMapper extends BaseMapper getProvinceList(@Param("gdIndex")List gdIndexes, - @Param("searchBeginTime") String searchBeginTime, - @Param("searchEndTime") String searchEndTime); + List getProvinceList(@Param("gdIndex")List gdIndexes); /** * 获取出供电公司的信息 * @param gdIndexes 供电公司索引 * @return 供电公司信息 */ - List getGdList(@Param("gdIndex")List gdIndexes, - @Param("searchBeginTime") String searchBeginTime, - @Param("searchEndTime") String searchEndTime); + List getGdList(@Param("gdIndex")List gdIndexes); /** * 获取出变电站的信息 * @param subIndexes 变电站索引 * @return 变电站信息 */ - List getSubList(@Param("subIndex")List subIndexes, - @Param("searchBeginTime") String searchBeginTime, - @Param("searchEndTime") String searchEndTime); + List getSubList(@Param("subIndex")List subIndexes); /** * 根据监测点索引集合获取监测点详细参数 diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/TerminalOnlineRateDataMapper.xml b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/TerminalOnlineRateDataMapper.xml index e0b19ea76..24cd3d6b5 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/TerminalOnlineRateDataMapper.xml +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/mapper/mapping/TerminalOnlineRateDataMapper.xml @@ -88,12 +88,6 @@ #{item} - - and date_format(pro.update_Time,'%y%m%d') >= date_format(#{searchBeginTime},'%y%m%d') - - - and date_format(pro.update_Time,'%y%m%d') <= date_format(#{searchEndTime},'%y%m%d') - @@ -109,12 +103,6 @@ #{item} - - and date_format(gd.update_Time,'%y%m%d') >= date_format(#{searchBeginTime},'%y%m%d') - - - and date_format(gd.update_Time,'%y%m%d') <= date_format(#{searchEndTime},'%y%m%d') - @@ -135,13 +123,6 @@ #{item} - - and date_format(sub.update_Time,'%y%m%d') >= date_format(#{searchBeginTime},'%y%m%d') - - - and date_format(sub.update_Time,'%y%m%d') <= date_format(#{searchEndTime},'%y%m%d') - - diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineIntegrityDataServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineIntegrityDataServiceImpl.java index fdcb2f4b5..8258411fc 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineIntegrityDataServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/LineIntegrityDataServiceImpl.java @@ -60,9 +60,6 @@ public class LineIntegrityDataServiceImpl extends ServiceImpl getIntegrityDataOfLine(LineIntegrityDataParam lineIntegrityDataParam) { - // TODO 获取部门id -// lineIntegrityDataParam.setDeptIndex(RequestUtil.getDeptIndex()); - // 获取所有数据 List generalDeviceDTOList = generalDeviceService.getDeviceInfo(lineIntegrityDataParam, Stream.of(0).collect(Collectors.toList()), Stream.of(1).collect(Collectors.toList())); diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalOnlineRateDataServiceImpl.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalOnlineRateDataServiceImpl.java index 1e07f00bf..b03c551d1 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalOnlineRateDataServiceImpl.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/service/impl/TerminalOnlineRateDataServiceImpl.java @@ -1,6 +1,7 @@ package com.njcn.device.pq.service.impl; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; import com.njcn.common.pojo.exception.BusinessException; import com.njcn.device.pq.api.AlarmClient; import com.njcn.device.pq.enums.DeviceResponseEnum; @@ -16,7 +17,11 @@ import com.njcn.device.pq.utils.DataStatisticsUtil; import com.njcn.influxdb.param.InfluxDBPublicParam; import com.njcn.influxdb.utils.InfluxDBCommUtils; import com.njcn.influxdb.utils.InfluxDbUtils; +import com.njcn.system.api.DicDataFeignClient; +import com.njcn.system.enums.DicDataEnum; +import com.njcn.system.enums.DicDataTypeEnum; import com.njcn.system.pojo.enums.StatisticsEnum; +import com.njcn.system.pojo.po.DictData; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.influxdb.dto.QueryResult; @@ -24,10 +29,8 @@ import org.influxdb.impl.InfluxDBResultMapper; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -50,6 +53,8 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData private final AlarmClient alarmClient; + private final DicDataFeignClient dicDataFeignClient; + /** * 终端在线率列表 * @@ -59,7 +64,6 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData @Override public List getOnlineRateData(TerminalOnlineRateDataParam terminalOnlineRateDataParam) { - // 获取所有数据 List generalDeviceDTOList = generalDeviceService.getDeviceInfo(terminalOnlineRateDataParam, Stream.of(0).collect(Collectors.toList()), Stream.of(1).collect(Collectors.toList())); @@ -89,9 +93,9 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData // 通过部分终端等级信息查询终端信息 - List deviceList = terminalOnlineRateDataMapper.getDevice(generalDeviceDTO.getDeviceIndexes(),terminalOnlineRateDataParam.getLineGrade()); + List deviceList = terminalOnlineRateDataMapper.getDevice(generalDeviceDTO.getDeviceIndexes(), terminalOnlineRateDataParam.getLineGrade()); - if(CollectionUtil.isEmpty(deviceList)){ + if (CollectionUtil.isEmpty(deviceList)) { continue; } @@ -103,23 +107,18 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData List terminalOnlineRateData = getPercentageOfOnlineRate(terminalOnlineRateDataParam.getSearchBeginTime(), terminalOnlineRateDataParam.getSearchEndTime(), devForInfluxdb); // 处理终端在线率 - DataStatisticsUtil.getTerminalOnlineRateData(terminalOnlineRateData,deviceList); - - - List subIds = deviceList.stream().map(TerminalOnlineRateDataVO::getPid).collect(Collectors.toList()); - + DataStatisticsUtil.getTerminalOnlineRateData(terminalOnlineRateData, deviceList); // 通过供电站索引查询供电站信息 - List subList = terminalOnlineRateDataMapper.getSubList(subIds,terminalOnlineRateDataParam.getSearchBeginTime(), terminalOnlineRateDataParam.getSearchEndTime()); + List subIds = deviceList.stream().map(TerminalOnlineRateDataVO::getPid).distinct().collect(Collectors.toList()); + List subList = terminalOnlineRateDataMapper.getSubList(subIds); - List gdIds = subList.stream().map(TerminalOnlineRateDataVO::getPid).collect(Collectors.toList()); // 通过供电公司索引查询供电公司信息 - List gdList = terminalOnlineRateDataMapper.getGdList(gdIds,terminalOnlineRateDataParam.getSearchBeginTime(), terminalOnlineRateDataParam.getSearchEndTime()); - - List proIds = gdList.stream().map(TerminalOnlineRateDataVO::getPid).collect(Collectors.toList()); + List gdIds = subList.stream().map(TerminalOnlineRateDataVO::getPid).distinct().collect(Collectors.toList()); + List gdList = terminalOnlineRateDataMapper.getGdList(gdIds); // 通过供电公司索引查询省会 - List proList = terminalOnlineRateDataMapper.getProvinceList(proIds,terminalOnlineRateDataParam.getSearchBeginTime(), terminalOnlineRateDataParam.getSearchEndTime()); + List proList = terminalOnlineRateDataMapper.getProvinceList(gdIds); //处理变电站 @@ -127,6 +126,12 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData //处理供电公司 dealChildrenData(gdList, subList, false); + + // 数据封装 + terminalOnlineRateDataVO.setId(generalDeviceDTO.getIndex()); + terminalOnlineRateDataVO.setName(generalDeviceDTO.getName()); + terminalOnlineRateDataVO.setLevel(0); + if (terminalOnlineRateDataParam.getStatisticalType().getCode().equalsIgnoreCase(StatisticsEnum.POWER_NETWORK.getCode())) { terminalOnlineRateDataVO.setChildren(gdList); } else { @@ -134,18 +139,10 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData dealChildrenData(proList, gdList, false); terminalOnlineRateDataVO.setChildren(proList); } - - // 处理区域终端在线率 - double areaOnlineRateData = DataStatisticsUtil.getAreaOnlineRateData(terminalOnlineRateData); - - // 数据封装 - terminalOnlineRateDataVO.setId(generalDeviceDTO.getIndex()); - terminalOnlineRateDataVO.setName(generalDeviceDTO.getName()); - terminalOnlineRateDataVO.setLevel(0); - terminalOnlineRateDataVO.setOnlineRate(areaOnlineRateData); pro.add(terminalOnlineRateDataVO); } + getAreaOnlineRateData(pro, alarmStrategyVos, terminalOnlineRateDataParam.getLineGrade()); return pro; } else { return new ArrayList<>(); @@ -218,4 +215,83 @@ public class TerminalOnlineRateDataServiceImpl implements TerminalOnlineRateData // 返回结果 return resultMapper.toPOJO(results, TerminalOnlineRateData.class); } + + + /** + * 获取区域终端在线率 + * + * @param terminalOnlineRateData + */ + public void getAreaOnlineRateData(List terminalOnlineRateData, List alarmStrategyVos, String lineGrade) { + + Map mapAlarm = new HashMap<>(); + Map map = alarmStrategyVos.stream().collect(Collectors.toMap(AlarmStrategyVO::getId, Function.identity())); + + if (StrUtil.isNotBlank(lineGrade)) { + DictData dictData = dicDataFeignClient.getDicDataById(lineGrade).getData(); + if (map.containsKey(dictData.getId())) { + mapAlarm.put(dictData.getAlgoDescribe(), map.get(dictData.getId()).getOnlineValue()); + } else { + throw new BusinessException(DeviceResponseEnum.QUERY_ALARMSTRATEGY_DATA_EMPTY); + } + } else { + List dictDataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_LEVEL.getCode()).getData(); + dictDataList.forEach(it -> { + if (map.containsKey(it.getId())) { + mapAlarm.put(it.getAlgoDescribe(), map.get(it.getId()).getOnlineValue()); + } else { + throw new BusinessException(DeviceResponseEnum.QUERY_ALARMSTRATEGY_DATA_EMPTY); + } + }); + } + + terminalOnlineRateData.forEach(proItem -> { + List gd = proItem.getChildren(); + if (CollectionUtil.isNotEmpty(gd)) { + gd.forEach(gdItem -> { + List sub = gdItem.getChildren(); + if (CollectionUtil.isNotEmpty(sub)) { + sub.forEach(subItem -> { + List dev = subItem.getChildren(); + if (CollectionUtil.isNotEmpty(dev)) { + dev.forEach(devItem -> { + List tem = devItem.getChildren(); + if (CollectionUtil.isNotEmpty(tem)) { + Double temAvg = tem.stream().filter(item -> item.getOnlineRate() != 3.14159).collect(Collectors.averagingDouble(TerminalOnlineRateDataVO::getOnlineRate)); + devItem.setOnlineRate(temAvg); + + if (Objects.nonNull(devItem.getAlgoDescribe())) { + if (mapAlarm.containsKey(devItem.getAlgoDescribe())) { + if (devItem.getOnlineRate() != 3.14159 && devItem.getOnlineRate() > mapAlarm.get(devItem.getAlgoDescribe())) { + devItem.setValueOver(1); + } else { + devItem.setValueOver(0); + } + } + } + + } else { + subItem.setOnlineRate(3.14159); + } + }); + Double devAvg = dev.stream().filter(item -> item.getOnlineRate() != 3.14159).collect(Collectors.averagingDouble(TerminalOnlineRateDataVO::getOnlineRate)); + subItem.setOnlineRate(devAvg); + } else { + subItem.setOnlineRate(3.14159); + } + }); + Double subAvg = sub.stream().filter(item -> item.getOnlineRate() != 3.14159).collect(Collectors.averagingDouble(TerminalOnlineRateDataVO::getOnlineRate)); + gdItem.setOnlineRate(subAvg); + } else { + gdItem.setOnlineRate(3.14159); + } + }); + Double gdAvg = gd.stream().filter(item -> item.getOnlineRate() != 3.14159).collect(Collectors.averagingDouble(TerminalOnlineRateDataVO::getOnlineRate)); + proItem.setOnlineRate(gdAvg); + } else { + proItem.setOnlineRate(3.14159); + } + }); + } + } diff --git a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/utils/DataStatisticsUtil.java b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/utils/DataStatisticsUtil.java index 85a89ad79..3bf741353 100644 --- a/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/utils/DataStatisticsUtil.java +++ b/pqs-device/pq-device/pq-device-boot/src/main/java/com/njcn/device/pq/utils/DataStatisticsUtil.java @@ -131,7 +131,7 @@ public class DataStatisticsUtil { break; } } - if(!flag){ + if (!flag) { onlineRateDataVO.setOnlineRate(3.14159); } }).collect(Collectors.toList()); @@ -140,36 +140,8 @@ public class DataStatisticsUtil { } } - /** - * 获取区域终端在线率 - * - * @param terminalOnlineRateData - */ - public static double getAreaOnlineRateData(List terminalOnlineRateData) { - double data = 0.0; - // 将influxdb数据用时间进行分组 - Map> groupByTime = terminalOnlineRateData.stream().collect(Collectors.groupingBy(TerminalOnlineRateData::getTime)); - if (CollectionUtil.isNotEmpty(groupByTime)) { - Set times = groupByTime.keySet(); - for (String time : times) { - List onlineRateDatas = groupByTime.get(time); - double onlineRateData = 0.0; - int size = onlineRateDatas.size(); - - for (TerminalOnlineRateData devDate : onlineRateDatas) { - onlineRateData += devDate.getOnlineRate(); - } - Double devOnlineRateDouble = (onlineRateData / size); - String devOnlineRateString = String.format("%.2f", devOnlineRateDouble); - data = Double.parseDouble(devOnlineRateString); - } - } else { - data = 3.14159; - } - return data; - } } From 6e840fa6505a6459150c32296c7536149310ce93 Mon Sep 17 00:00:00 2001 From: hanyong <1334742946@qq.com> Date: Tue, 14 Feb 2023 10:45:37 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=9E=9A=E4=B8=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/njcn/system/enums/DicDataEnum.java | 51 ++++++++++++++++++- .../njcn/system/enums/DicDataTypeEnum.java | 10 +++- 2 files changed, 58 insertions(+), 3 deletions(-) diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataEnum.java b/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataEnum.java index becade39d..65a82b580 100644 --- a/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataEnum.java +++ b/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataEnum.java @@ -200,14 +200,61 @@ public enum DicDataEnum { */ PHOTOVOLT("光伏台区","Photovolt"), FEEDER_TENKV("10kV馈线","Feeder_TenkV"), - MAIN_CHANGE("主变","Main _Change"), + MAIN_CHANGE("主变","Main_Change"), /** * 工单状态 */ PEND_DISPATCH("待派单","Pend_Dispatch"), DISPATCHED("已派单","Dispatched"), - CLOSED("已关闭","Closed"); + CLOSED("已关闭","Closed"), + + /** + * 问题类型 + */ + VOLTAGE_LIMIT("谐波电压越限","Voltage_Limit"), + CURRENT_LIMIT("谐波电流越限","Current_Limit"), + + /** + * 审核状态 + */ + REVIEW("待审核","Review"), + AUDITED("已审核","Audited"), + APPROVED("审核通过","Approved"), + NOT_APPROVED("审核通过","Not_Approved"), + + /** + * 审核处理 + */ + GENERATE("生成工单","Generate"), + NO_REQUIRED("无需处理","No_Required"), + + /** + * 工单流程 + */ + GENERATED("生成工单","Generated"), + DISPATCH("派单","Dispatch"), + FEEDBACK("反馈","Feedback"), + AUDITING("审核","Auditing"), + RECTIFICATION("整改","Rectification"), + ASSESS("评估","Assess"), + PIGEONHOLE("归档","Pigeonhole"), + + /** + * 评估结果 + */ + PASS("评估合格","Pass"), + NOT_PASS("评估不合格","Not_Pass"), + + /** + * 工单类型 + */ + RECT_ORDER("整改单","Rect_Order"), + + /** + * 一级业务类型 + */ + TRANS_BUSINESS("运检业务","Trans_Business"); private final String name; diff --git a/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataTypeEnum.java b/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataTypeEnum.java index 2ceec8242..14104d878 100644 --- a/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataTypeEnum.java +++ b/pqs-system/system-api/src/main/java/com/njcn/system/enums/DicDataTypeEnum.java @@ -56,7 +56,15 @@ public enum DicDataTypeEnum { PLAN_TAKE("计划采取实施","Plan_Take"), MONITOR_OBJ("监测对象","Monitor_Obj"), CONNET_GROUP_WAY("牵引站变压器接线方式","Connet_Group_Way"), - WORK_ORDER_STATUS("工单状态","Work_Order_Status"); + WORK_ORDER_STATUS("工单状态","Work_Order_Status"), + PROBLEM_TYPE("问题类型","Problem_Type"), + CHECK_STATUS("审核状态","Check_Status"), + CHECK_RESULT("审核处理","Check_Result"), + WORK_ORDER_PROCESS("工单流程","Work_Order_Process"), + ASSESS_RESULT("评估结果","Assess_Result"), + WORK_ORDER_TYPE("工单类型","Work_Order_Type"), + PRIMARY_TYPE("一级业务类型","Primary_Type"); + private final String name;