diff --git a/pqs-common/common-db/src/main/java/com/njcn/db/config/MybatisConfig.java b/pqs-common/common-db/src/main/java/com/njcn/db/config/MybatisConfig.java index 358e1ad5d..f0958ad51 100644 --- a/pqs-common/common-db/src/main/java/com/njcn/db/config/MybatisConfig.java +++ b/pqs-common/common-db/src/main/java/com/njcn/db/config/MybatisConfig.java @@ -6,9 +6,13 @@ import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.njcn.db.handler.AutoFillValueHandler; import com.njcn.db.handler.BatchInjector; +import org.apache.ibatis.mapping.DatabaseIdProvider; +import org.apache.ibatis.mapping.VendorDatabaseIdProvider; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import java.util.Properties; + /** * @author hongawen * @version 1.0.0 @@ -48,5 +52,14 @@ public class MybatisConfig { return new BatchInjector(); } - + @Bean + public DatabaseIdProvider databaseIdProvider() { + VendorDatabaseIdProvider provider = new VendorDatabaseIdProvider(); + Properties properties = new Properties(); + properties.setProperty("MySQL", "mysql"); // MySQL 驱动返回的数据库产品名 + properties.setProperty("DM", "dm"); // 达梦驱动返回的数据库产品名 + properties.setProperty("ORACLE", "oracle"); + provider.setProperties(properties); + return provider; + } } 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 07437e576..eee7f0bbf 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 @@ -60,7 +60,9 @@ import org.springframework.util.CollectionUtils; import java.text.SimpleDateFormat; import java.time.Instant; +import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -194,26 +196,38 @@ public class LineServiceImpl extends ServiceImpl implements Li @Override public CommunicateVO getComFlagInfoData(String id, String searchBeginTime, String searchEndTime) { + CommunicateVO communicateVOList = new CommunicateVO(); String devId = lineMapper.getDevIndex(id); Device device = deviceMapper.selectById(devId); - SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - List communicateList = getCommunicate(devId, searchBeginTime, searchEndTime); - CommunicateVO communicateVOList = new CommunicateVO(); + DateTime begin = DateUtil.beginOfDay(DateUtil.parse(searchBeginTime)); + DateTime end = DateUtil.endOfDay(DateUtil.parse(searchEndTime)); + DateTime login = DateUtil.parse(device.getLoginTime().format(DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN))); + if (end.isBefore(login)) { + //结束时间比终端投运时间前,则直接返回空 + return communicateVOList; + } + if(begin.isBefore(login)){ + //开始时间大于投运时间,取投运时间 + begin = login; + } + + List communicateList = getCommunicate(devId, begin, end); List updateTime = new ArrayList<>(); List comType = new ArrayList<>(); //开始时间 - Boolean beginFly = false; + boolean beginFly = false; if (CollUtil.isNotEmpty(communicateList)) { - if (!communicateList.get(0).getTime().equals(DateUtil.beginOfDay(DateUtil.parse(searchBeginTime)).toInstant())) { + if (!communicateList.get(0).getTime().equals(begin.toInstant())) { beginFly = true; } } else { beginFly = true; } - + SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); if (beginFly) { - Instant instant = DateUtil.beginOfDay(DateUtil.parse(searchBeginTime)).toInstant(); + Instant instant = begin.toInstant(); Long time = instant.toEpochMilli(); + String timeText = df.format(time); updateTime.add(timeText); //取反(正常来时,有变动才会有数据) @@ -242,7 +256,7 @@ public class LineServiceImpl extends ServiceImpl implements Li String format = times.format(date); Instant endTime = DateUtil.parse(searchEndTime + " " + format).toInstant(); - Boolean endFly = false; + boolean endFly = false; if (CollUtil.isNotEmpty(communicateList)) { if (!communicateList.get(communicateList.size() - 1).getTime().equals(endTime)) { endFly = true; @@ -751,7 +765,7 @@ public class LineServiceImpl extends ServiceImpl implements Li List ids = result.stream().map(LineDetail::getId).distinct().collect(Collectors.toList()); List lineList = lineMapper.selectList(new LambdaQueryWrapper().in(Line::getId, ids).eq(Line::getState, DataStateEnum.ENABLE.getCode())); Map lineMap = lineList.stream().collect(Collectors.toMap(Line::getId, Function.identity())); - result.forEach(item->item.setMonitorName(lineMap.getOrDefault(item.getId(),new Line()).getName())); + result.forEach(item -> item.setMonitorName(lineMap.getOrDefault(item.getId(), new Line()).getName())); } return result; } @@ -760,17 +774,17 @@ public class LineServiceImpl extends ServiceImpl implements Li public List getPowerStationByMonitorIds(List ids) { List result = new ArrayList<>(); List lineDetailList = lineDetailMapper.selectList(new LambdaQueryWrapper().in(LineDetail::getId, ids)); - List userLedgerList = lineDetailList.stream().filter(it->StrUtil.isNotBlank(it.getObjId())).collect(Collectors.toList()); - List powerLedgerList = lineDetailList.stream().filter(it->StrUtil.isBlank(it.getObjId())).collect(Collectors.toList()); + List userLedgerList = lineDetailList.stream().filter(it -> StrUtil.isNotBlank(it.getObjId())).collect(Collectors.toList()); + List powerLedgerList = lineDetailList.stream().filter(it -> StrUtil.isBlank(it.getObjId())).collect(Collectors.toList()); - if(CollUtil.isNotEmpty(userLedgerList)){ - List objIds = userLedgerList.stream().map(LineDetail::getObjId).distinct().collect(Collectors.toList()); + if (CollUtil.isNotEmpty(userLedgerList)) { + List objIds = userLedgerList.stream().map(LineDetail::getObjId).distinct().collect(Collectors.toList()); List newUserReportVOList = userLedgerFeignClient.getUserReportByIds(objIds).getData(); - Map map = newUserReportVOList.stream().collect(Collectors.toMap(NewUserReportVO::getId,Function.identity())); + Map map = newUserReportVOList.stream().collect(Collectors.toMap(NewUserReportVO::getId, Function.identity())); List dictDataList = dicDataFeignClient.getDicDataByTypeCode(DicDataTypeEnum.DEV_VOLTAGE_STAND.getCode()).getData(); - Map dictDataMap = dictDataList.stream().collect(Collectors.toMap(DictData::getId,Function.identity())); - map.forEach((objId,item)->{ + Map dictDataMap = dictDataList.stream().collect(Collectors.toMap(DictData::getId, Function.identity())); + map.forEach((objId, item) -> { PollutionSubstationDTO pollutionSubstationDTO = new PollutionSubstationDTO(); pollutionSubstationDTO.setPowerFlag(PowerFlagEnum.NO_GRID_SIDE.getCode()); pollutionSubstationDTO.setId(objId); @@ -782,11 +796,11 @@ public class LineServiceImpl extends ServiceImpl implements Li }); } - if(CollUtil.isNotEmpty(powerLedgerList)){ + if (CollUtil.isNotEmpty(powerLedgerList)) { List lineList = lineMapper.selectList(new LambdaQueryWrapper().in(Line::getId, powerLedgerList.stream().map(LineDetail::getId).distinct().collect(Collectors.toList())).eq(Line::getState, DataStateEnum.ENABLE.getCode())); - List stationIds = lineList.stream().map(it->it.getPids().split(StrUtil.COMMA)[LineBaseEnum.SUB_LEVEL.getCode()]).collect(Collectors.toList()); + List stationIds = lineList.stream().map(it -> it.getPids().split(StrUtil.COMMA)[LineBaseEnum.SUB_LEVEL.getCode()]).collect(Collectors.toList()); List stationList = substationMapper.getSubstationById(stationIds); - stationList.forEach(item->{ + stationList.forEach(item -> { PollutionSubstationDTO pollutionSubstationDTO = new PollutionSubstationDTO(); pollutionSubstationDTO.setPowerFlag(PowerFlagEnum.GRID_SIDE.getCode()); pollutionSubstationDTO.setId(item.getId()); @@ -881,10 +895,9 @@ public class LineServiceImpl extends ServiceImpl implements Li return child.stream().filter(allItem -> allItem.getPid().equals(item.getId())).collect(Collectors.toList()); } - public List getCommunicate(String devId, String startTime, String endTime) { + public List getCommunicate(String devId, DateTime startTime, DateTime endTime) { InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(PqsCommunicate.class); - influxQueryWrapper.between(InfluxDbSqlConstant.TIME, DateUtil.beginOfDay(DateUtil.parse(startTime)).toString(), DateUtil.endOfDay(DateUtil.parse(endTime)).toString()) - .eq(PqsCommunicate::getDevId, devId); + influxQueryWrapper.eq(PqsCommunicate::getDevId, devId).between(InfluxDbSqlConstant.TIME, startTime.toString(), endTime.toString()); return pqsCommunicateMapper.selectByQueryWrapper(influxQueryWrapper); } @@ -901,8 +914,8 @@ public class LineServiceImpl extends ServiceImpl implements Li } NewUserReportVO newUserReportVO; for (AreaLineInfoVO areaLineInfoVO : resList) { - if(StrUtil.isNotBlank(areaLineInfoVO.getObjId())){ - if(userReportVOMap.containsKey(areaLineInfoVO.getObjId())){ + if (StrUtil.isNotBlank(areaLineInfoVO.getObjId())) { + if (userReportVOMap.containsKey(areaLineInfoVO.getObjId())) { newUserReportVO = userReportVOMap.get(areaLineInfoVO.getObjId()); areaLineInfoVO.setSubId(newUserReportVO.getId()); areaLineInfoVO.setSubName(newUserReportVO.getProjectName()); diff --git a/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/EventAnalysisServiceImpl.java b/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/EventAnalysisServiceImpl.java index 2b97bc3d5..04ed9d52f 100644 --- a/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/EventAnalysisServiceImpl.java +++ b/pqs-event/event-boot/src/main/java/com/njcn/event/service/majornetwork/Impl/EventAnalysisServiceImpl.java @@ -55,6 +55,14 @@ import java.util.zip.ZipOutputStream; @RequiredArgsConstructor public class EventAnalysisServiceImpl implements EventAnalysisService { + // 定义阈值常量(单位:百分比) + final double[] EVENT_VALUE_THRESHOLDS = {90, 85, 70, 40, 10}; + // 定义持续时间阈值(单位:毫秒) + final double[] DURATION_THRESHOLDS = {0.02, 0.1, 0.5, 1, 3, 20, 60, 180}; + + String[] labels = {"90%", "85%", "70%", "40%", "10%"}; + + private final InfluxDbUtils influxDbUtils; private final LineFeignClient lineFeignClient; @@ -66,76 +74,6 @@ public class EventAnalysisServiceImpl implements EventAnalysisService { private final DicDataFeignClient dicDataFeignClient; - /*@Override - public Page getEventAnalyse(EventBaseParam eventBaseParam) { - - //查询sql语句 - StringBuilder stringResult = new StringBuilder(Param.SELECT).append(Param.EVENT_DETAIL).append(Param.WHERE). - append("time >= '").append(DateUtil.beginOfDay(DateUtil.parse(eventBaseParam.getSearchBeginTime()))).append("' and ").append("time <= '").append(DateUtil.endOfDay(DateUtil.parse(eventBaseParam.getSearchEndTime()))).append("' and ") - .append("line_id= '").append(eventBaseParam.getLineId()).append("'"); - - int i = (eventBaseParam.getPageNum() - 1) * eventBaseParam.getPageSize(); - stringResult.append("LIMIT ").append(eventBaseParam.getPageSize()).append(" OFFSET ").append(i).append(" tz('Asia/Shanghai')"); - - //查询sql语句总条数 - StringBuilder stringTotal = new StringBuilder("SELECT COUNT(num) as aa FROM ").append(Param.EVENT_DETAIL).append(" WHERE ").append("time >= '").append(DateUtil.beginOfDay(DateUtil.parse(eventBaseParam.getSearchBeginTime()))).append("' and ") - .append("time <= '").append(DateUtil.endOfDay(DateUtil.parse(eventBaseParam.getSearchEndTime()))).append("' and "); - stringTotal.append("line_id= '").append(eventBaseParam.getLineId()).append("' tz('Asia/Shanghai')"); - - //结果集 - QueryResult result = influxDbUtils.query(stringResult.toString()); - - //总条数 - QueryResult resultTotal = influxDbUtils.query(stringTotal.toString()); - //结果集映射到对象中 - InfluxDBResultMapper influxDBResultMapper = new InfluxDBResultMapper(); - List eventDetailList = influxDBResultMapper.toPOJO(result, EventDetail.class); - - Page page = new Page<>(); - long total = new BigDecimal(resultTotal.getResults().get(0).getSeries().get(0).getValues().get(0).get(1).toString()).longValue(); - page.setTotal(total); - page.setRecords(eventDetailList); - page.setCurrent(eventBaseParam.getPageNum()); - page.setSize(eventBaseParam.getPageSize()); - return page; - }*/ - - /** - * 时间无ID全查询 - * - * @param startTime - * @param endTime - * @return - * @author xxy - */ - public QueryResult TimeQuery(String startTime, String endTime) { - //构建sql语句 - String stringResult = Param.SELECT + Param.EVENT_DETAIL + Param.WHERE + "time >= '" + - DateUtil.beginOfDay(DateUtil.parse(startTime)) + - "' and " + "time <= '" + - DateUtil.endOfDay(DateUtil.parse(endTime)) + "'" + Param.TZ_ASIA_SHANGHAI; - //结果集映射到对象中 - return influxDbUtils.query(stringResult); - } - - /** - * @return - * @author xxy - * 时间区间查询监测点抽取 - */ - public QueryResult MonitorQuery(StatisticsParam statisticsParam) { - //构建sql语句 - String stringResult = Param.SELECT + Param.EVENT_DETAIL + Param.WHERE + "" + "time >= '" + - DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime().toString())) + - "' and " + "time <= '" + - DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getEndTime().toString())) + - "' and " + "line_id= '" + - statisticsParam.getLineIndex() + "' " + - Param.TZ_ASIA_SHANGHAI; - //结果集映射到对象中 - return influxDbUtils.query(stringResult); - } - /** * 获取电压暂态表及密度坐标图 * @@ -377,139 +315,76 @@ public class EventAnalysisServiceImpl implements EventAnalysisService { @Override public List eventDisdip(StatisticsParam statisticsParam) { - List result = new ArrayList<>(); + // 初始化结果数组(默认值为0) + int[][] arr = new int[5][8]; - /*List info = new ArrayList<>(); - QueryResult query = MonitorQuery(statisticsParam); - InfluxDBResultMapper influxDBResultMapper = new InfluxDBResultMapper(); - info = influxDBResultMapper.toPOJO(query, EventDetail.class);*/ - - //查询监测点未处理暂态事件 - List info = eventDetailService.list(new LambdaQueryWrapper() - .eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex()) - .ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), RmpEventDetailPO::getStartTime,DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime()))) - .le(StringUtils.isNotBlank(statisticsParam.getEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime()))) + // 查询事件数据 + List events = eventDetailService.list( + new LambdaQueryWrapper() + .eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex()) + .ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), + RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime()))) + .le(StringUtils.isNotBlank(statisticsParam.getEndTime()), + RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime()))) ); - int[][] arr = new int[5][8]; - for (int i = 0; i < 5; i++) { - for (int j = 0; j < 8; j++) { - arr[i][j] = 0; + // 分类统计事件 + for (RmpEventDetailPO event : events) { + double eventValue = event.getFeatureAmplitude() * 100; // 转换为百分比 + double duration = event.getDuration(); + + // 确定事件等级(0=90%, 1=85%, ..., 4=10%) + int level = getEventLevel(eventValue, EVENT_VALUE_THRESHOLDS); + // 确定持续时间区间索引 + int durationIndex = getDurationIndex(duration, DURATION_THRESHOLDS); + + if (level != -1 && durationIndex != -1) { + arr[level][durationIndex]++; } } - for (int i = 0; i < info.size(); i++) { - Double eventvalue = info.get(i).getFeatureAmplitude(); - double persisttime = info.get(i).getDuration(); - if (eventvalue * 100 < 10) { - if (persisttime < 20) { - arr[4][0]++; - } else if (persisttime < 100) { - arr[4][1]++; - } else if (persisttime < 500) { - arr[4][2]++; - } else if (persisttime < 1000) { - arr[4][3]++; - } else if (persisttime < 3000) { - arr[4][4]++; - } else if (persisttime < 20000) { - arr[4][5]++; - } else if (persisttime < 60000) { - arr[4][6]++; - } else if (persisttime < 180000) { - arr[4][7]++; - } - } else if (eventvalue * 100 < 40) { - if (persisttime < 20) { - arr[3][0]++; - } else if (persisttime < 100) { - arr[3][1]++; - } else if (persisttime < 500) { - arr[3][2]++; - } else if (persisttime < 1000) { - arr[3][3]++; - } else if (persisttime < 3000) { - arr[3][4]++; - } else if (persisttime < 20000) { - arr[3][5]++; - } else if (persisttime < 60000) { - arr[3][6]++; - } else if (persisttime < 180000) { - arr[3][7]++; - } - } else if (eventvalue * 100 < 70) { - if (persisttime < 20) { - arr[2][0]++; - } else if (persisttime < 100) { - arr[2][1]++; - } else if (persisttime < 500) { - arr[2][2]++; - } else if (persisttime < 1000) { - arr[2][3]++; - } else if (persisttime < 3000) { - arr[2][4]++; - } else if (persisttime < 20000) { - arr[2][5]++; - } else if (persisttime < 60000) { - arr[2][6]++; - } else if (persisttime < 180000) { - arr[2][7]++; - } - } else if (eventvalue * 100 < 85) { - if (persisttime < 20) { - arr[1][0]++; - } else if (persisttime < 100) { - arr[1][1]++; - } else if (persisttime < 500) { - arr[1][2]++; - } else if (persisttime < 1000) { - arr[1][3]++; - } else if (persisttime < 3000) { - arr[1][4]++; - } else if (persisttime < 20000) { - arr[1][5]++; - } else if (persisttime < 60000) { - arr[1][6]++; - } else if (persisttime < 180000) { - arr[1][7]++; - } - } else if (eventvalue * 100 <= 90) { - if (persisttime < 20) { - arr[0][0]++; - } else if (persisttime < 100) { - arr[0][1]++; - } else if (persisttime < 500) { - arr[0][2]++; - } else if (persisttime < 1000) { - arr[0][3]++; - } else if (persisttime < 3000) { - arr[0][4]++; - } else if (persisttime < 20000) { - arr[0][5]++; - } else if (persisttime < 60000) { - arr[0][6]++; - } else if (persisttime < 180000) { - arr[0][7]++; - } - } + + // 构建结果列表 + List result = new ArrayList<>(); + for (int i = 0; i < labels.length; i++) { + result.add(new DISDIPVO( + labels[i], + String.valueOf(arr[i][0]), String.valueOf(arr[i][1]), String.valueOf(arr[i][2]), String.valueOf(arr[i][3]), + String.valueOf(arr[i][4]), String.valueOf(arr[i][5]), String.valueOf(arr[i][6]), String.valueOf(arr[i][7]) + )); } - result.add(new DISDIPVO("90%", String.valueOf(arr[0][0]), String.valueOf(arr[0][1]), String.valueOf(arr[0][2]), String.valueOf(arr[0][3]), String.valueOf(arr[0][4]), String.valueOf(arr[0][5]), String.valueOf(arr[0][6]), String.valueOf(arr[0][7]))); - result.add(new DISDIPVO("85%", String.valueOf(arr[1][0]), String.valueOf(arr[1][1]), String.valueOf(arr[1][2]), String.valueOf(arr[1][3]), String.valueOf(arr[1][4]), String.valueOf(arr[1][5]), String.valueOf(arr[1][6]), String.valueOf(arr[1][7]))); - result.add(new DISDIPVO("70%", String.valueOf(arr[2][0]), String.valueOf(arr[2][1]), String.valueOf(arr[2][2]), String.valueOf(arr[2][3]), String.valueOf(arr[2][4]), String.valueOf(arr[2][5]), String.valueOf(arr[2][6]), String.valueOf(arr[2][7]))); - result.add(new DISDIPVO("40%", String.valueOf(arr[3][0]), String.valueOf(arr[3][1]), String.valueOf(arr[3][2]), String.valueOf(arr[3][3]), String.valueOf(arr[3][4]), String.valueOf(arr[3][5]), String.valueOf(arr[3][6]), String.valueOf(arr[3][7]))); - result.add(new DISDIPVO("10%", String.valueOf(arr[4][0]), String.valueOf(arr[4][1]), String.valueOf(arr[4][2]), String.valueOf(arr[4][3]), String.valueOf(arr[4][4]), String.valueOf(arr[4][5]), String.valueOf(arr[4][6]), String.valueOf(arr[4][7]))); + return result; } + /** + * 根据事件值获取等级索引(从高到低匹配) + */ + private int getEventLevel(double eventValue, double[] thresholds) { + for (int i = 0; i < thresholds.length; i++) { + if (eventValue >= thresholds[i]) { + return i; // 返回匹配的等级索引 + } + } + return thresholds.length - 1; // 默认最低等级 + } + + /** + * 根据持续时间获取区间索引 + */ + private int getDurationIndex(double duration, double[] thresholds) { + for (int i = 0; i < thresholds.length; i++) { + if (duration < thresholds[i]) { + return i; + } + } + return thresholds.length - 1; // 超过最大阈值时返回最后一个区间 + } + @Override public List IEC411(StatisticsParam statisticsParam) { List result = new ArrayList<>(); -// List info = new ArrayList<>(); -// QueryResult query = MonitorQuery(statisticsParam); -// InfluxDBResultMapper influxDBResultMapper = new InfluxDBResultMapper(); -// info = influxDBResultMapper.toPOJO(query, EventDetail.class); - //查询监测点未处理暂态事件 - List info = eventDetailService.list(new LambdaQueryWrapper() + List events = eventDetailService.list(new LambdaQueryWrapper() .eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex()) .ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime()))) .le(StringUtils.isNotBlank(statisticsParam.getEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime()))) @@ -520,51 +395,18 @@ public class EventAnalysisServiceImpl implements EventAnalysisService { arr[i][j] = 0; } } - for (int i = 0; i < info.size(); i++) { - Double eventvalue = info.get(i).getFeatureAmplitude(); - double persisttime = info.get(i).getDuration(); - if (eventvalue * 100 < 1) { - if (persisttime < 20 && persisttime >= 10) { - arr[2][0]++; - } else if (persisttime < 100) { - arr[2][1]++; - } else if (persisttime < 200) { - arr[2][2]++; - } else if (persisttime < 400) { - arr[2][3]++; - } else if (persisttime < 1000) { - arr[2][4]++; - } else { - arr[2][5]++; - } - } else if (eventvalue * 100 < 40) { - if (persisttime < 20 && persisttime >= 10) { - arr[1][0]++; - } else if (persisttime < 100) { - arr[1][1]++; - } else if (persisttime < 200) { - arr[1][2]++; - } else if (persisttime < 400) { - arr[1][3]++; - } else if (persisttime < 1000) { - arr[1][4]++; - } else { - arr[1][5]++; - } - } else if (eventvalue * 100 <= 70) { - if (persisttime < 20 && persisttime >= 10) { - arr[0][0]++; - } else if (persisttime < 100) { - arr[0][1]++; - } else if (persisttime < 200) { - arr[0][2]++; - } else if (persisttime < 400) { - arr[0][3]++; - } else if (persisttime < 1000) { - arr[0][4]++; - } else { - arr[0][5]++; - } + // 分类统计事件 + for (RmpEventDetailPO event : events) { + double eventValue = event.getFeatureAmplitude(); // 转换为百分比 + double duration = event.getDuration(); + + // 确定事件等级(0=90%, 1=85%, ..., 4=10%) + int level = getIEC411_EventLevel(eventValue); + // 确定持续时间区间索引 + int durationIndex = getDurationIndex(duration, DURATION_THRESHOLDS); + + if (level != -1 && durationIndex != -1) { + arr[level][durationIndex]++; } } result.add(new IEC411VO("40~70%", String.valueOf(arr[0][0]), String.valueOf(arr[0][1]), String.valueOf(arr[0][2]), String.valueOf(arr[0][3]), String.valueOf(arr[0][4]), String.valueOf(arr[0][5]))); @@ -573,15 +415,25 @@ public class EventAnalysisServiceImpl implements EventAnalysisService { return result; } + + /** + * 根据事件值获取等级索引(从高到低匹配) + */ + private int getIEC411_EventLevel(double eventValue) { + if (eventValue >= 0.1 && eventValue < 0.4) { + return 1; + } else if (eventValue >= 0.4 && eventValue < 0.7) { + return 0; + } else if (eventValue >= 0.7 && eventValue < 1) { + return 2; + } + return -1; + } + @Override public List IEC28(StatisticsParam statisticsParam) { List result = new ArrayList<>(); - - /*QueryResult query = MonitorQuery(statisticsParam); - InfluxDBResultMapper influxDBResultMapper = new InfluxDBResultMapper(); - List info = influxDBResultMapper.toPOJO(query, EventDetail.class);*/ - //查询监测点未处理暂态事件 List info = eventDetailService.list(new LambdaQueryWrapper() .eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex()) @@ -951,7 +803,7 @@ public class EventAnalysisServiceImpl implements EventAnalysisService { Integer endMonth = Integer.parseInt(endTime.substring(5, 7)); Integer startYear = Integer.parseInt(startTime.substring(0, 4)); Integer endYear = Integer.parseInt(endTime.substring(0, 4)); - if (statisticsParam.getFlag()==0) { + if (statisticsParam.getFlag() == 0) { while (startYear != endYear && startMonth != endMonth) { builder1.delete(0, builder1.length()); builder2.delete(0, builder2.length()); @@ -968,7 +820,7 @@ public class EventAnalysisServiceImpl implements EventAnalysisService { // long count = eventDetailList.stream().filter(x -> x.getWaveType() == 1).count(); List eventDetailList = eventDetailService.list(new LambdaQueryWrapper() .eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex()) - .eq(StringUtils.isNotBlank(dataDto.getId()),RmpEventDetailPO::getEventType, dataDto.getId()) + .eq(StringUtils.isNotBlank(dataDto.getId()), RmpEventDetailPO::getEventType, dataDto.getId()) .ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime()))) .le(StringUtils.isNotBlank(statisticsParam.getEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime()))) ); @@ -994,7 +846,7 @@ public class EventAnalysisServiceImpl implements EventAnalysisService { // long count1 = eventDetailList.stream().filter(x -> x.getWaveType() == 1).count(); List eventDetailList = eventDetailService.list(new LambdaQueryWrapper() .eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex()) - .eq(StringUtils.isNotBlank(dataDto.getId()),RmpEventDetailPO::getEventType, dataDto.getId()) + .eq(StringUtils.isNotBlank(dataDto.getId()), RmpEventDetailPO::getEventType, dataDto.getId()) .ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime()))) .le(StringUtils.isNotBlank(statisticsParam.getEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime()))) ); @@ -1013,18 +865,18 @@ public class EventAnalysisServiceImpl implements EventAnalysisService { List eventDetailList = eventDetailService.list(new LambdaQueryWrapper() .eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex()) - .eq(StringUtils.isNotBlank(dataDto.getId()),RmpEventDetailPO::getEventType, dataDto.getId()) + .eq(StringUtils.isNotBlank(dataDto.getId()), RmpEventDetailPO::getEventType, dataDto.getId()) .ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime()))) .le(StringUtils.isNotBlank(statisticsParam.getEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime()))) ); Map> map = eventDetailList.stream().filter(x -> dataDto.getId().equals(x.getEventType())) - .peek(t ->t.setFormatTime(t.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))) + .peek(t -> t.setFormatTime(t.getStartTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))) .collect(Collectors.groupingBy(RmpEventDetailPO::getFormatTime)); Set keySet = map.keySet(); LocalDate parse1 = LocalDate.parse(startTime); LocalDate parse2 = LocalDate.parse(endTime); - while (!parse1.equals(parse2.plus(1, ChronoUnit.DAYS))){ + while (!parse1.equals(parse2.plus(1, ChronoUnit.DAYS))) { if (keySet.contains(parse1.toString())) { // List eventDetailNews = map.get(parse1.toString()); List eventDetailNews = map.get(parse1.toString()); @@ -1067,21 +919,17 @@ public class EventAnalysisServiceImpl implements EventAnalysisService { } @Override - public StatisticVO getStatistic (StatisticsParam statisticsParam) { + public StatisticVO getStatistic(StatisticsParam statisticsParam) { StatisticVO result = new StatisticVO(); List list = new ArrayList<>(); List reasonsVOS = new ArrayList<>(); List typesVOS = new ArrayList<>(); -// List info = new ArrayList<>(); -// QueryResult query = MonitorQuery(statisticsParam); -// InfluxDBResultMapper influxDBResultMapper = new InfluxDBResultMapper(); -// info = influxDBResultMapper.toPOJO(query, EventDetail.class); //获取暂降字典信息 DictData dataDto = dicDataFeignClient.getDicDataByCode(DicDataEnum.VOLTAGE_DIP.getCode()).getData(); //数据暂降查询 List info = eventDetailService.list(new LambdaQueryWrapper() .eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex()) - .eq(StringUtils.isNotBlank(dataDto.getId()),RmpEventDetailPO::getEventType, dataDto.getId()) + .eq(StringUtils.isNotBlank(dataDto.getId()), RmpEventDetailPO::getEventType, dataDto.getId()) .ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime()))) .le(StringUtils.isNotBlank(statisticsParam.getEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime()))) ); @@ -1155,9 +1003,6 @@ public class EventAnalysisServiceImpl implements EventAnalysisService { ProbabilityVO result = new ProbabilityVO(); List info = new ArrayList<>(); -// QueryResult query = MonitorQuery(statisticsParam); -// InfluxDBResultMapper influxDBResultMapper = new InfluxDBResultMapper(); -// List info2 = influxDBResultMapper.toPOJO(query, EventDetail.class); //数据暂降查询 List infos = eventDetailService.list(new LambdaQueryWrapper() .eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex()) @@ -1265,7 +1110,7 @@ public class EventAnalysisServiceImpl implements EventAnalysisService { for (String s : subsectionSet) { if (strings1.get(i).equals(s)) { if (subsectionMap.get(s) == 0) { - pereventvalue.add(".00"); + pereventvalue.add("0.00"); break; } if (subsectionMap.get(s) / count.doubleValue() == 1.0) { @@ -1296,7 +1141,7 @@ public class EventAnalysisServiceImpl implements EventAnalysisService { for (String s : countSet) { if (strings.get(i).equals(s)) { if (countMap.get(s) == 0) { - eventvalue.add(".00"); + eventvalue.add("0.00"); break; } if (countMap.get(s) / count.floatValue() == 1.0) { @@ -1357,7 +1202,7 @@ public class EventAnalysisServiceImpl implements EventAnalysisService { for (String s : timeSet) { if (strings2.get(i).equals(s)) { if (timeMap.get(s) == 0) { - persisttime.add(".00"); + persisttime.add("0.00"); break; } if (timeMap.get(s) / count.floatValue() == 1.0) { @@ -1414,7 +1259,7 @@ public class EventAnalysisServiceImpl implements EventAnalysisService { for (String s : time2Set) { if (strings2.get(i).equals(s)) { if (timeMap2.get(s) == 0) { - sisttime.add(".00"); + sisttime.add("0.00"); break; } if (timeMap2.get(s) / count.floatValue() == 1.0) { @@ -1464,7 +1309,7 @@ public class EventAnalysisServiceImpl implements EventAnalysisService { //查询监测点未处理暂态事件 List eventDetails = eventDetailService.list(new LambdaQueryWrapper() .eq(RmpEventDetailPO::getMeasurementPointId, statisticsParam.getLineIndex()) - .eq(StrUtil.isNotBlank(data.getId()),RmpEventDetailPO::getEventType, data.getId()) + .eq(StrUtil.isNotBlank(data.getId()), RmpEventDetailPO::getEventType, data.getId()) .ge(StringUtils.isNotBlank(statisticsParam.getStartTime()), RmpEventDetailPO::getStartTime, DateUtil.beginOfDay(DateUtil.parse(statisticsParam.getStartTime()))) .le(StringUtils.isNotBlank(statisticsParam.getEndTime()), RmpEventDetailPO::getStartTime, DateUtil.endOfDay(DateUtil.parse(statisticsParam.getEndTime()))) ); @@ -1524,7 +1369,7 @@ public class EventAnalysisServiceImpl implements EventAnalysisService { voltageToleranceCurve.setLineId(dto.getLineId()); voltageToleranceCurve.setEventId(dto.getEventId()); voltageToleranceCurve.setPersistTime(dto.getDuration()); - voltageToleranceCurve.setEventValue(dto.getFeatureAmplitude()*100); + voltageToleranceCurve.setEventValue(dto.getFeatureAmplitude() * 100); voltageToleranceCurve.setTime(dto.getStartTime()); voltageToleranceCurve.setGdName(info.getGdName()); voltageToleranceCurve.setSubName(info.getSubName()); diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/report/QualifiedReport.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/report/QualifiedReportController.java similarity index 95% rename from pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/report/QualifiedReport.java rename to pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/report/QualifiedReportController.java index b59a3db03..de5817a8e 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/report/QualifiedReport.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/controller/report/QualifiedReportController.java @@ -39,7 +39,7 @@ import java.util.regex.Pattern; @RequestMapping("/qualifiedReport") @Api(tags = "报告-合格率报告") @RequiredArgsConstructor -public class QualifiedReport extends BaseController { +public class QualifiedReportController extends BaseController { private final QualifiedReportService qualifiedReportService; @@ -56,7 +56,7 @@ public class QualifiedReport extends BaseController { TimeInterval timeInterval = new TimeInterval(); String searchValue = qualifiedReportParam.getSearchValue(); Pattern pattern = Pattern.compile(PatternRegex.SPECIAL_REGEX); - if(pattern.matcher(searchValue).find()){ + if(!pattern.matcher(searchValue).find()){ throw new BusinessException(ValidMessage.SPECIAL_REGEX); } String methodDescribe = getMethodDescribe("pageTable"); diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/RStatLimitRateDMapper.xml b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/RStatLimitRateDMapper.xml index 71b24fb46..8ca6c5648 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/RStatLimitRateDMapper.xml +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/mapper/mapping/RStatLimitRateDMapper.xml @@ -185,34 +185,78 @@ diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/HarmInHarmServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/HarmInHarmServiceImpl.java index b213f47c8..2df942ee1 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/HarmInHarmServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/HarmInHarmServiceImpl.java @@ -78,29 +78,37 @@ public class HarmInHarmServiceImpl implements HarmInHarmService { if (StrUtil.isNotBlank(lineId)) { if (harmState == 0) { InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataHarmRateV.class); - influxQueryWrapper.meanSamePrefixAndSuffix("v_","", HarmonicTimesUtil.harmonicTimesList(2,50,1)) - .between(DataHarmRateV::getTime,startTime,endTime) - .eq(DataHarmRateV::getLineId,lineId) + influxQueryWrapper.meanSamePrefixAndSuffix("v_", "", HarmonicTimesUtil.harmonicTimesList(2, 50, 1)) + .between(DataHarmRateV::getTime, startTime, endTime) + .eq(DataHarmRateV::getLineId, lineId) .eq(DataHarmRateV::getValueType, InfluxDBTableConstant.CP95) - .ne(DataHarmRateV::getPhaseType,InfluxDBTableConstant.PHASE_TYPE_T); + .ne(DataHarmRateV::getPhaseType, InfluxDBTableConstant.PHASE_TYPE_T); DataHarmRateV dataHarmRateV = dataHarmRateVService.getMeanAllTimesData(influxQueryWrapper); - if(Objects.nonNull(dataHarmRateV)){ + if (Objects.nonNull(dataHarmRateV)) { for (int i = 2; i < 51; i++) { floatList.add(PubUtils.getValueByMethodDouble(dataHarmRateV, "getV", i).floatValue()); } + }else { + for (int i = 2; i < 51; i++) { + floatList.add(null); + } } } else { InfluxQueryWrapper influxQueryWrapper = new InfluxQueryWrapper(DataI.class); - influxQueryWrapper.meanSamePrefixAndSuffix("i_","", HarmonicTimesUtil.harmonicTimesList(2,50,1)) - .between(DataHarmRateV::getTime,startTime,endTime) - .eq(DataHarmRateV::getLineId,lineId) + influxQueryWrapper.meanSamePrefixAndSuffix("i_", "", HarmonicTimesUtil.harmonicTimesList(2, 50, 1)) + .between(DataHarmRateV::getTime, startTime, endTime) + .eq(DataHarmRateV::getLineId, lineId) .eq(DataHarmRateV::getValueType, InfluxDBTableConstant.CP95) - .ne(DataHarmRateV::getPhaseType,InfluxDBTableConstant.PHASE_TYPE_T); + .ne(DataHarmRateV::getPhaseType, InfluxDBTableConstant.PHASE_TYPE_T); DataI dataI = dataIService.getMeanAllTimesData(influxQueryWrapper); - if(Objects.nonNull(dataI)){ + if (Objects.nonNull(dataI)) { for (int i = 2; i < 51; i++) { floatList.add(PubUtils.getValueByMethodDouble(dataI, "getI", i).floatValue()); } + }else { + for (int i = 2; i < 51; i++) { + floatList.add(null); + } } } } diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/HarmonicServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/HarmonicServiceImpl.java index 40d7061b3..795ce767d 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/HarmonicServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/HarmonicServiceImpl.java @@ -72,7 +72,6 @@ public class HarmonicServiceImpl implements IHarmonicService { public List getDeptSubstationRelations(HarmonicPublicParam harmonicPublicParam) { harmonicPublicParam.setServerName(generalInfo.getMicroServiceName()); List list = new ArrayList<>(); - List lineList = new ArrayList<>(); if (StringUtils.isBlank(RequestUtil.getDeptIndex())) { return list; } @@ -83,25 +82,23 @@ public class HarmonicServiceImpl implements IHarmonicService { } else { userLedgerVOMap = new HashMap<>(); } - List deptList = generalDeviceInfoClient.getPracticalRunDeviceInfo(harmonicPublicParam).getData(); - deptList.forEach(dept -> lineList.addAll(dept.getLineIndexes())); - //获取所有的数据信息 - List limitTargetNew = getLimitTargetNew(lineList, harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime()); - //聚合查询 - List finalAllData; - if (Objects.equals(harmonicPublicParam.getStatisticalType().getCode(), DicDataEnum.XBDY_ENUM.getCode())) { - finalAllData = getAllDataV(lineList, harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime()); - } else if (Objects.equals(harmonicPublicParam.getStatisticalType().getCode(), DicDataEnum.XBDL_ENUM.getCode())) { - finalAllData = getAllDataI(lineList, harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime()); - } else { - finalAllData = new ArrayList<>(); - } - for (GeneralDeviceDTO dept : deptList) { if (CollUtil.isEmpty(dept.getLineIndexes())) { continue; } + //获取所有的数据信息 + List limitTargetNew = getLimitTargetNew(dept.getLineIndexes(), harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime()); + //聚合查询 + List finalAllData; + if (Objects.equals(harmonicPublicParam.getStatisticalType().getCode(), DicDataEnum.XBDY_ENUM.getCode())) { + finalAllData = getAllDataV(dept.getLineIndexes(), harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime()); + } else if (Objects.equals(harmonicPublicParam.getStatisticalType().getCode(), DicDataEnum.XBDL_ENUM.getCode())) { + finalAllData = getAllDataI(dept.getLineIndexes(), harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime()); + } else { + finalAllData = new ArrayList<>(); + } + PollutionParamDTO paramDTO = new PollutionParamDTO(); paramDTO.setLineList(dept.getLineIndexes()); List pollutionLineDTOList = lineFeignClient.getLineInfo(paramDTO).getData(); @@ -127,10 +124,7 @@ public class HarmonicServiceImpl implements IHarmonicService { children.setPowerFlag(PowerFlagEnum.GRID_SIDE.getCode()); children.setName(monitList.get(0).getSubstation()); //监测点id - List lineIds = monitList.stream().map(PollutionLineDTO::getId).collect(Collectors.toList()); - List collect = limitTargetNew.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList()); - List sumList = finalAllData.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList()); - children.setData(handleDataNew(collect, sumList, harmonicPublicParam.getStatisticalType().getCode()).getRatio()); + children.setData(handleDataNew(limitTargetNew, finalAllData, harmonicPublicParam.getStatisticalType().getCode()).getRatio()); childrenList.add(children); }); @@ -144,10 +138,7 @@ public class HarmonicServiceImpl implements IHarmonicService { children.setName(StrUtil.isNotBlank(userLedgerVO.getProjectName()) ? userLedgerVO.getProjectName() : "异常数据"); children.setPowerFlag(PowerFlagEnum.NO_GRID_SIDE.getCode()); //监测点id - List lineIds = mList.stream().map(PollutionLineDTO::getId).collect(Collectors.toList()); - List collect = limitTargetNew.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList()); - List sumList = finalAllData.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList()); - children.setData(handleDataNew(collect, sumList, harmonicPublicParam.getStatisticalType().getCode()).getRatio()); + children.setData(handleDataNew(limitTargetNew, finalAllData, harmonicPublicParam.getStatisticalType().getCode()).getRatio()); childrenList.add(children); }); } @@ -173,33 +164,26 @@ public class HarmonicServiceImpl implements IHarmonicService { param.setServerName(generalInfo.getMicroServiceName()); List list = new ArrayList<>(); List deptList = generalDeviceInfoClient.getPracticalRunDeviceInfo(param).getData(); - - //获取所有监测点 - List lineIds = deptList.stream().flatMap(dto -> dto.getLineIndexes().stream()).collect(Collectors.toList()); - //获取所有的数据信息 - List limitTargetNew = getLimitTargetNew(lineIds, param.getSearchBeginTime(), param.getSearchEndTime()); - //聚合查询 - List allData = new ArrayList<>(); - if (Objects.equals(param.getStatisticalType().getCode(), DicDataEnum.XBDY_ENUM.getCode())) { - allData = getAllDataV(lineIds, param.getSearchBeginTime(), param.getSearchEndTime()); - } else if (Objects.equals(param.getStatisticalType().getCode(), DicDataEnum.XBDL_ENUM.getCode())) { - allData = getAllDataI(lineIds, param.getSearchBeginTime(), param.getSearchEndTime()); - - } - List finalAllData = allData; - deptList.forEach(item -> { - List lineList = item.getLineIndexes(); - if (!CollectionUtils.isEmpty(lineList)) { + for(GeneralDeviceDTO dept : deptList){ + if (!CollectionUtils.isEmpty(dept.getLineIndexes())) { HarmonicDeptVO harmonicDeptVO = new HarmonicDeptVO(); - List collect = limitTargetNew.stream().filter(x -> lineList.contains(x.getLineId())).collect(Collectors.toList()); - List sumList = finalAllData.stream().filter(x -> lineList.contains(x.getLineId())).collect(Collectors.toList()); - AreaDTO areaDTO = handleDataNew(collect, sumList, param.getStatisticalType().getCode()); + harmonicDeptVO.setId(dept.getIndex()); + harmonicDeptVO.setName(dept.getName()); + //获取所有的数据信息 + List limitTargetNew = getLimitTargetNew(dept.getLineIndexes(), param.getSearchBeginTime(), param.getSearchEndTime()); + //聚合查询 + List allData = new ArrayList<>(); + if (Objects.equals(param.getStatisticalType().getCode(), DicDataEnum.XBDY_ENUM.getCode())) { + allData = getAllDataV(dept.getLineIndexes(), param.getSearchBeginTime(), param.getSearchEndTime()); + } else if (Objects.equals(param.getStatisticalType().getCode(), DicDataEnum.XBDL_ENUM.getCode())) { + allData = getAllDataI(dept.getLineIndexes(), param.getSearchBeginTime(), param.getSearchEndTime()); + } + AreaDTO areaDTO = handleDataNew(limitTargetNew, allData, param.getStatisticalType().getCode()); BeanUtil.copyProperties(areaDTO, harmonicDeptVO); - harmonicDeptVO.setId(item.getIndex()); - harmonicDeptVO.setName(item.getName()); list.add(harmonicDeptVO); } - }); + } + if (!CollectionUtils.isEmpty(list)) { List collect = list.stream().filter(x -> x.getRatio() != 3.14159 && x.getOnlineCount() != 0 && x.getOverLineCount() != 0) .sorted(Comparator.comparing(HarmonicDeptVO::getRatio).reversed().thenComparing(HarmonicDeptVO::getOnlineCount).thenComparing(HarmonicDeptVO::getOverLineCount)).collect(Collectors.toList()); @@ -352,26 +336,31 @@ public class HarmonicServiceImpl implements IHarmonicService { } } } - } - Map> map = list.stream().collect(Collectors.groupingBy(RStatLimitTargetDPO::getTime)); - for (LocalDate key : map.keySet()) { - int overDay = 0; - List l = map.get(key); - for (RStatLimitTargetDPO pojo : l) { - if (Objects.equals(type, DicDataEnum.XBDY_ENUM.getCode())) { - if (pojo.getUaberranceOvertime() > 0 || pojo.getUharm20Overtime() > 0 || pojo.getUharm3Overtime() > 0 || pojo.getUharm4Overtime() > 0 || pojo.getUharm5Overtime() > 0 || pojo.getUharm6Overtime() > 0 || pojo.getUharm7Overtime() > 0 || pojo.getUharm8Overtime() > 0 || pojo.getUharm9Overtime() > 0 || pojo.getUharm10Overtime() > 0 || pojo.getUharm11Overtime() > 0 || pojo.getUharm12Overtime() > 0 || pojo.getUharm13Overtime() > 0 || pojo.getUharm14Overtime() > 0 || pojo.getUharm15Overtime() > 0 || pojo.getUharm16Overtime() > 0 || pojo.getUharm17Overtime() > 0 || pojo.getUharm18Overtime() > 0 || pojo.getUharm19Overtime() > 0 || pojo.getUharm20Overtime() > 0 || pojo.getUharm21Overtime() > 0 || pojo.getUharm22Overtime() > 0 || pojo.getUharm23Overtime() > 0 || pojo.getUharm24Overtime() > 0 || pojo.getUharm25Overtime() > 0) { - overCountByDay = overCountByDay + 1; - overDay = overDay + 1; - } - } else if (Objects.equals(type, DicDataEnum.XBDL_ENUM.getCode())) { - if (pojo.getIharm2Overtime() > 0 || pojo.getIharm3Overtime() > 0 || pojo.getIharm4Overtime() > 0 || pojo.getIharm5Overtime() > 0 || pojo.getIharm6Overtime() > 0 || pojo.getIharm7Overtime() > 0 || pojo.getIharm8Overtime() > 0 || pojo.getIharm9Overtime() > 0 || pojo.getIharm10Overtime() > 0 || pojo.getIharm11Overtime() > 0 || pojo.getIharm12Overtime() > 0 || pojo.getIharm13Overtime() > 0 || pojo.getIharm14Overtime() > 0 || pojo.getIharm15Overtime() > 0 || pojo.getIharm16Overtime() > 0 || pojo.getIharm17Overtime() > 0 || pojo.getIharm18Overtime() > 0 || pojo.getIharm19Overtime() > 0 || pojo.getIharm20Overtime() > 0 || pojo.getIharm21Overtime() > 0 || pojo.getIharm22Overtime() > 0 || pojo.getIharm23Overtime() > 0 || pojo.getIharm24Overtime() > 0 || pojo.getIharm25Overtime() > 0) { - overCountByDay = overCountByDay + 1; - overDay = overDay + 1; + + Map> map = list.stream().collect(Collectors.groupingBy(RStatLimitTargetDPO::getTime)); + for (LocalDate key : map.keySet()) { + int overDay = 0; + List l = map.get(key); + for (RStatLimitTargetDPO pojo : l) { + if (Objects.equals(type, DicDataEnum.XBDY_ENUM.getCode())) { + if (pojo.getUaberranceOvertime() > 0 || pojo.getUharm20Overtime() > 0 || pojo.getUharm3Overtime() > 0 || pojo.getUharm4Overtime() > 0 || pojo.getUharm5Overtime() > 0 || pojo.getUharm6Overtime() > 0 || pojo.getUharm7Overtime() > 0 || pojo.getUharm8Overtime() > 0 || pojo.getUharm9Overtime() > 0 || pojo.getUharm10Overtime() > 0 || pojo.getUharm11Overtime() > 0 || pojo.getUharm12Overtime() > 0 || pojo.getUharm13Overtime() > 0 || pojo.getUharm14Overtime() > 0 || pojo.getUharm15Overtime() > 0 || pojo.getUharm16Overtime() > 0 || pojo.getUharm17Overtime() > 0 || pojo.getUharm18Overtime() > 0 || pojo.getUharm19Overtime() > 0 || pojo.getUharm20Overtime() > 0 || pojo.getUharm21Overtime() > 0 || pojo.getUharm22Overtime() > 0 || pojo.getUharm23Overtime() > 0 || pojo.getUharm24Overtime() > 0 || pojo.getUharm25Overtime() > 0) { + overCountByDay = overCountByDay + 1; + overDay = overDay + 1; + } + } else if (Objects.equals(type, DicDataEnum.XBDL_ENUM.getCode())) { + if (pojo.getIharm2Overtime() > 0 || pojo.getIharm3Overtime() > 0 || pojo.getIharm4Overtime() > 0 || pojo.getIharm5Overtime() > 0 || pojo.getIharm6Overtime() > 0 || pojo.getIharm7Overtime() > 0 || pojo.getIharm8Overtime() > 0 || pojo.getIharm9Overtime() > 0 || pojo.getIharm10Overtime() > 0 || pojo.getIharm11Overtime() > 0 || pojo.getIharm12Overtime() > 0 || pojo.getIharm13Overtime() > 0 || pojo.getIharm14Overtime() > 0 || pojo.getIharm15Overtime() > 0 || pojo.getIharm16Overtime() > 0 || pojo.getIharm17Overtime() > 0 || pojo.getIharm18Overtime() > 0 || pojo.getIharm19Overtime() > 0 || pojo.getIharm20Overtime() > 0 || pojo.getIharm21Overtime() > 0 || pojo.getIharm22Overtime() > 0 || pojo.getIharm23Overtime() > 0 || pojo.getIharm24Overtime() > 0 || pojo.getIharm25Overtime() > 0) { + overCountByDay = overCountByDay + 1; + overDay = overDay + 1; + } } } + ratio = ratio + overDay * 1.0 / l.size(); } - ratio = ratio + overDay * 1.0 / l.size(); + ratio = map.isEmpty() ? 0 : BigDecimal.valueOf(ratio * 100.0 / map.size()).setScale(2, RoundingMode.HALF_UP).doubleValue(); + }else { + ratio = 3.14159; } + //平均超标天数 if (CollectionUtils.isEmpty(list)) { avgOverDay = 0; @@ -379,7 +368,6 @@ public class HarmonicServiceImpl implements IHarmonicService { avgOverDay = overLineCount == 0 ? 0.0 : BigDecimal.valueOf(overCountByDay * 1.0 / overLineCount).setScale(2, RoundingMode.HALF_UP).doubleValue(); } //月监测点符合性超标占比 - ratio = map.size() == 0 ? 0 : BigDecimal.valueOf(ratio * 100.0 / map.size()).setScale(2, RoundingMode.HALF_UP).doubleValue(); areaDTO.setOnlineCount(onlineCount); areaDTO.setOverLineCount(overLineCount); //平均超标天数 diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/PollutionSubstationServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/PollutionSubstationServiceImpl.java index 53ae76c92..eaf58f501 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/PollutionSubstationServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/PollutionSubstationServiceImpl.java @@ -282,7 +282,6 @@ public class PollutionSubstationServiceImpl extends ServiceImpl subPollutionVO = new ArrayList<>(); - List lineDetailList = lineFeignClient.getLineDetail(temp.getLineIndexes()).getData(); if (CollUtil.isNotEmpty(lineDetailList)) { List userLedgerList = lineDetailList.stream().filter(it -> StrUtil.isNotBlank(it.getObjId())).collect(Collectors.toList()); @@ -323,6 +322,8 @@ public class PollutionSubstationServiceImpl extends ServiceImplit != 3.14159).max().orElse(3.14159); + pollutionVO.setData(exe); pollutionVO.setChildren(subPollutionVO); list.add(pollutionVO); } diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/SteadyExceedRateServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/SteadyExceedRateServiceImpl.java index 29d768641..c20cef593 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/SteadyExceedRateServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/SteadyExceedRateServiceImpl.java @@ -80,8 +80,12 @@ public class SteadyExceedRateServiceImpl implements SteadyExceedRateService { //组装子集数据树 List treeList = getTreeData(lineIndexes, steadyExceedParam,userLedgerVOMap,steadyExceedParam.getPowerFlag()); //父级数据 - steadyExceedRateVO.setSteadyExceedRate(PubUtils.dataLimits(NumberUtil.round(treeList.stream().mapToDouble(SteadyExceedRateVO::getSteadyExceedRate).average().orElse(0), 2).doubleValue())); - + double parentRate = treeList.stream().mapToDouble(SteadyExceedRateVO::getSteadyExceedRate).average().orElse(0); + if(parentRate == 3.14159){ + steadyExceedRateVO.setSteadyExceedRate(parentRate); + }else { + steadyExceedRateVO.setSteadyExceedRate(PubUtils.dataLimits(NumberUtil.round(parentRate, 2).doubleValue())); + } steadyExceedRateVO.setChildren(treeList); steadyExceedRateVOS.add(steadyExceedRateVO); } diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/TerminalServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/TerminalServiceImpl.java index 1f1969d17..0725ed65f 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/TerminalServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/TerminalServiceImpl.java @@ -44,7 +44,7 @@ public class TerminalServiceImpl implements TerminalService { public List getTerminalData(DeviceInfoParam.BusinessParam terminalParam) { List terminalList = new ArrayList<>(); //按照条件获取所有终端综合信息 - List deviceDataList = generalDeviceInfoClient.getPracticalRunDeviceInfo(new DeviceInfoParam(terminalParam.getStatisticalType(), terminalParam.getDeptIndex(), generalInfo.getMicroServiceName(), null, terminalParam.getManufacturer(), null)).getData(); + List deviceDataList = generalDeviceInfoClient.getPracticalAllDeviceInfo(new DeviceInfoParam(terminalParam.getStatisticalType(), terminalParam.getDeptIndex(), generalInfo.getMicroServiceName(), null, terminalParam.getManufacturer(), null)).getData(); //组装终端Top层集合 for (GeneralDeviceDTO generalDeviceDTO : deviceDataList) { List deviceIndexes = generalDeviceDTO.getDeviceIndexes(); @@ -85,7 +85,7 @@ public class TerminalServiceImpl implements TerminalService { if (CollectionUtils.isEmpty(generalDeviceDTO.getDeviceIndexes())) { continue; } - type.add(generalDeviceDTO.getName()+"\n("+generalDeviceDTO.getLineIndexes().size()+")"); + type.add(generalDeviceDTO.getName()+"\n("+generalDeviceDTO.getDeviceIndexes().size()+"台)"); List deviceIndexes = generalDeviceDTO.getDeviceIndexes(); //根据终端查询在线率 List condition = getCondition(deviceIndexes, terminalCensusParam.getSearchBeginTime(), terminalCensusParam.getSearchEndTime());