diff --git a/pqs-common/common-web/src/main/java/com/njcn/web/pojo/vo/BaseVO.java b/pqs-common/common-web/src/main/java/com/njcn/web/pojo/vo/BaseVO.java index c5f7e2e90..297fc11a6 100644 --- a/pqs-common/common-web/src/main/java/com/njcn/web/pojo/vo/BaseVO.java +++ b/pqs-common/common-web/src/main/java/com/njcn/web/pojo/vo/BaseVO.java @@ -26,6 +26,9 @@ public class BaseVO implements Serializable { @ApiModelProperty("父节点id") private String pid; + @ApiModelProperty("父节点集合") + private String pids; + private Integer sort; } diff --git a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/LineDetail.java b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/LineDetail.java index 8235690fe..99cce797f 100644 --- a/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/LineDetail.java +++ b/pqs-device/pq-device/pq-device-api/src/main/java/com/njcn/device/pq/pojo/po/LineDetail.java @@ -170,4 +170,9 @@ public class LineDetail{ */ private Integer ptPhaseType; + /** + * 监测点实际安装位置 + */ + private String actualArea; + } diff --git a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/hebeinorth/EvaluationLevelVo.java b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/hebeinorth/EvaluationLevelVo.java index e84e73e8f..a028a39e0 100644 --- a/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/hebeinorth/EvaluationLevelVo.java +++ b/pqs-harmonic/harmonic-api/src/main/java/com/njcn/harmonic/pojo/vo/hebeinorth/EvaluationLevelVo.java @@ -76,12 +76,15 @@ public class EvaluationLevelVo { @Data public static class QualifiedDetail { - @ApiModelProperty("监测点名称") - private String lineName; + @ApiModelProperty("区域名称") + private String areaName; @ApiModelProperty("变电站名称") private String substationName; + @ApiModelProperty("监测点名称") + private String lineName; + @ApiModelProperty("频率偏差合格率") private Double freqDev = 3.14159; diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/hebeinorth/IGridService.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/hebeinorth/IGridService.java index 0fdc7b00a..923aea34d 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/hebeinorth/IGridService.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/hebeinorth/IGridService.java @@ -22,6 +22,7 @@ public interface IGridService { * 综合评估概览界面 * 业务逻辑:1.根据当前传入的部门,省级部门获取市级综合指标;市级部门获取各指标指标评估 * 2.注意监测点类型,区分所有监测点和上报国网监测点 + * 3.针对超高压和风光储监测点应划分到具体地市中计算,而不是跟着部门来统计(领导要求) * 涉及指标:电压偏差、频率偏差、谐波含量(只有电压总谐波畸变率)、电压闪变、三相电压不平衡度 * @author xuyang * @param param diff --git a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/GridServiceImpl.java b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/GridServiceImpl.java index 9d2b357cb..dc5b251f9 100644 --- a/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/GridServiceImpl.java +++ b/pqs-harmonic/harmonic-boot/src/main/java/com/njcn/harmonic/service/impl/GridServiceImpl.java @@ -27,6 +27,8 @@ import com.njcn.harmonic.pojo.vo.hebeinorth.EvaluationVo; import com.njcn.harmonic.service.hebeinorth.IGridService; import com.njcn.harmonic.util.ComAssesUtil; import com.njcn.system.enums.DicDataEnum; +import com.njcn.user.api.DeptFeignClient; +import com.njcn.user.pojo.dto.DeptDTO; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; @@ -34,6 +36,8 @@ import java.time.LocalDate; import java.time.YearMonth; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.function.Function; +import java.util.function.Predicate; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -58,6 +62,7 @@ public class GridServiceImpl implements IGridService { private final RStatDataPltDMapper statDataPltDMapper; private final RStatLimitTargetDMapper rStatLimitTargetDMapper; private final GeneralDeviceInfoClient generalDeviceInfoClient; + private final DeptFeignClient deptFeignClient; @Override public List getAssessOverview(AssessParam param) { @@ -66,38 +71,43 @@ public class GridServiceImpl implements IGridService { deptGetLineParam.setDeptId(param.getDeptIndex()); deptGetLineParam.setServerName("harmonic-boot"); List list = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData(); - //获取所有监测点 - List lineList = list.stream() - .flatMap(item -> item.getLineBaseList().stream()) - .map(LineDevGetDTO::getPointId) - .distinct() - .collect(Collectors.toList()); - //上报国网监测点 - if (Objects.equals(param.getIsUpToGrid(), 1)){ - List lineDetails = lineFeignClient.getLineDetail(lineList).getData(); - lineList = lineDetails.stream().filter(o-> Objects.equals(o.getMonitorFlag(), 1)).map(LineDetail::getId).collect(Collectors.toList()); - } - //获取综合评估 - List list2 = rStatComassesDMapper.getAvgCount(lineList,param.getStartTime(),param.getEndTime()); - list.forEach(item->{ - if (Objects.equals(item.getDeptLevel(), 3)) { - AssessVo assessVo = new AssessVo(); - assessVo.setName(item.getUnitName()); - if (CollUtil.isNotEmpty(item.getLineBaseList())) { - List ll = item.getLineBaseList().stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); - if (CollUtil.isNotEmpty(list2)) { - List list22 = list2.stream().filter(it->ll.contains(it.getLineId())).collect(Collectors.toList()); - List communicateList = BeanUtil.copyToList(list22,PqsComasses.class); - if (CollUtil.isNotEmpty(communicateList)){ - float synData = comAssesUtil.getAllComAss(communicateList); - assessVo.setScore(PubUtils.floatRound(2,synData)); - assessVo.setLevel(getLevel(synData)); - } + //获取监测点集合 + List lineList = this.getLineList(list,param.getIsUpToGrid(),null); + if (CollUtil.isNotEmpty(lineList)) { + List comasses = new ArrayList<>(); + //获取监测点详细信息 + List lineDetailList = lineFeignClient.getLineDetail(lineList).getData(); + Map> lineDetailMap = lineDetailList.stream().collect(Collectors.groupingBy(LineDetail::getActualArea)); + //获取综合评估 + List assesList = rStatComassesDMapper.getAvgCount(lineList,param.getStartTime(),param.getEndTime()); + //获取部门 + List deptList = deptFeignClient.getDepSonDetailByDeptId(param.getDeptIndex()).getData(); + deptList.forEach(item->{ + if (lineDetailMap.containsKey(item.getArea())) { + AssessVo assessVo = new AssessVo(); + assessVo.setName(item.getName()); + List ll = lineDetailMap.get(item.getArea()).stream().map(LineDetail::getId).collect(Collectors.toList()); + List deptAssessList = assesList.stream().filter(it->ll.contains(it.getLineId())).collect(Collectors.toList()); + List communicateList = BeanUtil.copyToList(deptAssessList,PqsComasses.class); + if (CollUtil.isNotEmpty(communicateList)){ + float synData = comAssesUtil.getAllComAss(communicateList); + assessVo.setScore(PubUtils.floatRound(2,synData)); + assessVo.setLevel(getLevel(synData)); + comasses.addAll(communicateList); } + result.add(assessVo); } - result.add(assessVo); + }); + //计算冀北整体 + AssessVo assessVo = new AssessVo(); + assessVo.setName("冀北"); + if (CollUtil.isNotEmpty(comasses)) { + float synData = comAssesUtil.getAllComAss(comasses); + assessVo.setScore(PubUtils.floatRound(2,synData)); + assessVo.setLevel(getLevel(synData)); } - }); + result.add(assessVo); + } return result; } @@ -109,18 +119,14 @@ public class GridServiceImpl implements IGridService { deptGetLineParam.setDeptId(param.getDeptIndex()); deptGetLineParam.setServerName("harmonic-boot"); List list = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData(); - //获取所有监测点 - List lineList = list.stream() - .flatMap(item -> item.getLineBaseList().stream()) - .map(LineDevGetDTO::getPointId) - .distinct() - .collect(Collectors.toList()); - //上报国网监测点 - if (Objects.equals(param.getIsUpToGrid(), 1)){ - List lineDetails = lineFeignClient.getLineDetail(lineList).getData(); - lineList = lineDetails.stream().filter(o-> Objects.equals(o.getMonitorFlag(), 1)).map(LineDetail::getId).collect(Collectors.toList()); - } + //获取监测点集合 + List lineList = this.getLineList(list, param.getIsUpToGrid(),null); if (CollUtil.isNotEmpty(lineList)){ + //获取监测点详细信息 + List lineDetailList = lineFeignClient.getLineDetail(lineList).getData(); + Map> lineDetailMap = lineDetailList.stream().collect(Collectors.groupingBy(LineDetail::getActualArea)); + //获取部门 + List deptList = deptFeignClient.getDepSonDetailByDeptId(param.getDeptIndex()).getData(); //获取所有监测点r_stat_asses_d数据 List list1 = rStatAssesDMapper.getData(param.getStartTime(),param.getEndTime(),lineList); //获取所有监测点r_stat_comasses_d数据 @@ -128,10 +134,12 @@ public class GridServiceImpl implements IGridService { //获取所有监测点r_stat_limit_rate_d数据 List list3 = rStatLimitRateDMapper.getAssessTargetRate(lineList,param.getStartTime(),param.getEndTime()); //数据处理 - list.forEach(item->{ - if (Objects.equals(item.getDeptLevel(), 3)) { - List ll = item.getLineBaseList().stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); - AssessDetailVo comAssess = getAssessData(item.getUnitId(),item.getUnitName(), ll, list1, list2, list3); + deptList.forEach(item->{ + if (lineDetailMap.containsKey(item.getArea())) { + AssessVo assessVo = new AssessVo(); + assessVo.setName(item.getName()); + List ll = lineDetailMap.get(item.getArea()).stream().map(LineDetail::getId).collect(Collectors.toList()); + AssessDetailVo comAssess = getAssessData(item.getId(),item.getName(), ll, list1, list2, list3); result.add(comAssess); } }); @@ -148,38 +156,34 @@ public class GridServiceImpl implements IGridService { deptGetLineParam.setDeptId(param.getDeptIndex()); deptGetLineParam.setServerName("harmonic-boot"); List list = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData(); - //获取所有监测点 - List lineList = list.stream() - .flatMap(item -> item.getLineBaseList().stream()) - .map(LineDevGetDTO::getPointId) - .distinct() - .collect(Collectors.toList()); - //上报国网监测点 - if (Objects.equals(param.getIsUpToGrid(), 1)){ - List lineDetails = lineFeignClient.getLineDetail(lineList).getData(); - lineList = lineDetails.stream().filter(o-> Objects.equals(o.getMonitorFlag(), 1)).map(LineDetail::getId).collect(Collectors.toList()); - } + //获取监测点集合 + List lineList = this.getLineList(list, param.getIsUpToGrid(),null); if (CollUtil.isNotEmpty(lineList)){ + //获取监测点详细信息 + List lineDetailList = lineFeignClient.getLineDetail(lineList).getData(); + Map> lineDetailMap = lineDetailList.stream().collect(Collectors.groupingBy(LineDetail::getActualArea)); + //获取部门 + List deptList = deptFeignClient.getDepSonDetailByDeptId(param.getDeptIndex()).getData(); //根据传入的参数,获取返回的月份 List monthList = this.getLastThreeMonth(3); - List finalLineList = lineList; monthList.forEach(month->{ String firstDayOfMonth = month.atDay(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); String lastDayOfMonth = month.atEndOfMonth().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); - List comAssesList = rStatComassesDMapper.getAvgCount(finalLineList,firstDayOfMonth,lastDayOfMonth); + List comAssesList = rStatComassesDMapper.getAvgCount(lineList,firstDayOfMonth,lastDayOfMonth); map.put(month.toString(),comAssesList); }); - list.forEach(item->{ - if (Objects.equals(item.getDeptLevel(), 3)) { + //数据处理 + deptList.forEach(item->{ + if (lineDetailMap.containsKey(item.getArea())) { AssessVo.AssessTrendVo vo = new AssessVo.AssessTrendVo(); - vo.setDeptId(item.getUnitId()); - vo.setDeptName(item.getUnitName()); + vo.setDeptId(item.getId()); + vo.setDeptName(item.getName()); List children = new ArrayList<>(); - List ll = item.getLineBaseList().stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); - map.forEach((k,v)->{ + List ll = lineDetailMap.get(item.getArea()).stream().map(LineDetail::getId).collect(Collectors.toList()); + map.forEach((k1,v1)->{ AssessVo assessVo = new AssessVo(); - assessVo.setDataTime(k); - List poList = v.stream().filter(it->ll.contains(it.getLineId())).collect(Collectors.toList()); + assessVo.setDataTime(k1); + List poList = v1.stream().filter(it->ll.contains(it.getLineId())).collect(Collectors.toList()); if (CollUtil.isNotEmpty(poList)){ List communicateList = BeanUtil.copyToList(poList,PqsComasses.class); float synData = comAssesUtil.getAllComAss(communicateList); @@ -196,71 +200,47 @@ public class GridServiceImpl implements IGridService { return result; } - /** - * 根据传入的月份数获取时间集合 - * @param month - * @return - */ - public List getLastThreeMonth(int month) { - //按月获取时间集合 - LocalDate currentDate = LocalDate.now(); - int currentYear = currentDate.getYear(); - LocalDate beginDay = LocalDate.of(currentYear, 1, 1); - List monthList = getMonthsBetween(beginDay,currentDate); - if (monthList.size() > month) { - monthList = monthList.subList(monthList.size() - month,monthList.size()); - } - return monthList; - } - @Override public EvaluationVo getEvaluationOverview(AssessParam param) { EvaluationVo result = new EvaluationVo(); List childrenList = new ArrayList<>(); - DeptGetLineParam deptGetLineParam = new DeptGetLineParam(); deptGetLineParam.setDeptId(param.getDeptIndex()); deptGetLineParam.setServerName("harmonic-boot"); List list = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData(); - //获取所有监测点 - List lineList = list.stream() - .flatMap(item -> item.getLineBaseList().stream()) - .map(LineDevGetDTO::getPointId) - .distinct() - .collect(Collectors.toList()); - //上报国网监测点 - if (Objects.equals(param.getIsUpToGrid(), 1)){ - //获取国网监测点 - List lineDetails = lineFeignClient.getLineDetail(lineList).getData(); - lineList = lineDetails.stream().filter(o-> Objects.equals(o.getMonitorFlag(), 1)).map(LineDetail::getId).collect(Collectors.toList()); - } - //获取监测点所有指标数据 - List limitRateList = rStatLimitRateDMapper.getAssessTargetRate(lineList,param.getStartTime(),param.getEndTime()); - list.forEach(item->{ - if (Objects.equals(item.getDeptLevel(), 3)) { - EvaluationVo.Children children = new EvaluationVo.Children(); - children.setDeptId(item.getUnitId()); - children.setDeptName(item.getUnitName()); - if (CollUtil.isNotEmpty(item.getLineBaseList())) { - List ll = item.getLineBaseList().stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); + //获取监测点集合 + List lineList = this.getLineList(list, param.getIsUpToGrid(),null); + if (CollUtil.isNotEmpty(lineList)) { + //获取监测点所有指标数据 + List limitRateList = rStatLimitRateDMapper.getAssessTargetRate(lineList,param.getStartTime(),param.getEndTime()); + //获取部门 + List deptList = deptFeignClient.getDepSonDetailByDeptId(param.getDeptIndex()).getData(); + Map deptLineMap = list.stream().collect(Collectors.toMap(DeptGetChildrenMoreDTO::getUnitId, Function.identity())); + deptList.forEach(item->{ + if (deptLineMap.containsKey(item.getId())) { + EvaluationVo.Children children = new EvaluationVo.Children(); + children.setDeptId(item.getId()); + children.setDeptName(item.getName()); + List ll = deptLineMap.get(item.getId()).getLineBaseList().stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); if (CollUtil.isNotEmpty(limitRateList)) { List l1 = limitRateList.stream().filter(it->ll.contains(it.getLineId())).collect(Collectors.toList()); if (CollUtil.isNotEmpty(l1)){ this.getDataByTarget(param.getHarmonicType(),l1,children); } } + childrenList.add(children); + } + }); + result.setChildrenList(childrenList); + if (CollUtil.isNotEmpty(childrenList)) { + OptionalDouble optionalAvg = childrenList.stream() + .filter(child -> child.getRatio() != null && !child.getRatio().equals(3.14159)) + .mapToDouble(EvaluationVo.Children::getRatio) + .average(); + if (optionalAvg.isPresent()) { + double avg = optionalAvg.getAsDouble(); + result.setLineRatio(PubUtils.doubleRound(2, avg)); } - childrenList.add(children); - } - }); - result.setChildrenList(childrenList); - if (CollUtil.isNotEmpty(childrenList)) { - List newList = childrenList.stream() - .filter(child -> !Objects.isNull(child.getRatio()) && !Objects.equals(child.getRatio(), 3.14159)) - .collect(Collectors.toList()); - if (CollUtil.isNotEmpty(newList)) { - double avg = newList.stream().mapToDouble(EvaluationVo.Children::getRatio).average().orElse(0.0); - result.setLineRatio(PubUtils.doubleRound(2,avg)); } } return result; @@ -273,20 +253,8 @@ public class GridServiceImpl implements IGridService { deptGetLineParam.setDeptId(param.getDeptIndex()); deptGetLineParam.setServerName("harmonic-boot"); List list = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData(); - //获取符合电压等级的监测点 - Set lineList = list.stream() - .flatMap(item -> item.getLineBaseList().stream()) - .filter(line -> Objects.equals(line.getVoltageLevel(), param.getVoltageLevel())) - .collect(Collectors.toSet()); - //监测点处理 - List line = new ArrayList<>(); - if (CollUtil.isNotEmpty(lineList)) { - if (Objects.equals(param.getIsUpToGrid(), 1)) { - line = lineList.stream().filter(o->Objects.equals(o.getIsUpToGrid(), 1)).map(LineDevGetDTO::getPointId).collect(Collectors.toList()); - } else { - line = lineList.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); - } - } + //获取监测点集合 + List line = this.getLineList(list,param.getIsUpToGrid(),param.getVoltageLevel()); //获取数据 EvaluationLevelVo vo1 = new EvaluationLevelVo(); vo1.setTargetName(DicDataEnum.FREQUENCY_DEV.getName()); @@ -345,19 +313,8 @@ public class GridServiceImpl implements IGridService { deptGetLineParam.setDeptId(param.getDeptIndex()); deptGetLineParam.setServerName("harmonic-boot"); List list = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData(); - //获取所有监测点数据 - Set lineList = list.stream() - .flatMap(item -> item.getLineBaseList().stream()) - .collect(Collectors.toSet()); - //筛选监测点 - List line = new ArrayList<>(); - if (CollUtil.isNotEmpty(lineList)) { - if (Objects.equals(param.getIsUpToGrid(), 1)) { - line = lineList.stream().filter(o->Objects.equals(o.getIsUpToGrid(), 1)).map(LineDevGetDTO::getPointId).collect(Collectors.toList()); - } else { - line = lineList.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); - } - } + //获取监测点集合 + List line = this.getLineList(list, param.getIsUpToGrid(),null); //按月获取时间集合 LocalDate currentDate = LocalDate.now(); // 获取当前年份 @@ -396,88 +353,81 @@ public class GridServiceImpl implements IGridService { deptGetLineParam.setDeptId(param.getDeptIndex()); deptGetLineParam.setServerName("harmonic-boot"); List list = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData(); - //获取所有监测点数据 - Set lineList = list.stream() - .flatMap(item -> item.getLineBaseList().stream()) - .collect(Collectors.toSet()); - //筛选监测点 - List line = new ArrayList<>(); - if (CollUtil.isNotEmpty(lineList)) { - if (Objects.equals(param.getIsUpToGrid(), 1)) { - line = lineList.stream().filter(o->Objects.equals(o.getIsUpToGrid(), 1)).map(LineDevGetDTO::getPointId).collect(Collectors.toList()); - } else { - line = lineList.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); - } - } - //获取监测点越限集合 - List overLimitList = rStatLimitTargetDMapper.getSumTarget(line,param.getStartTime(),param.getEndTime()); - list.forEach(item->{ - if (Objects.equals(item.getDeptLevel(), 3)) { - EvaluationLevelVo.EvaluationDetail detail = new EvaluationLevelVo.EvaluationDetail(); - detail.setDeptId(item.getUnitId()); - detail.setDeptName(item.getUnitName()); - if (CollUtil.isNotEmpty(item.getLineBaseList())) { - //获取当前部门下监测点 - List list1 = item.getLineBaseList().stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); - detail.setOnlineNum(list1.size()); - //筛选当前部门下监测点的超标数据 - List list2 = overLimitList.stream().filter(it->list1.contains(it.getLineId())).collect(Collectors.toList()); - EvaluationLevelVo.TargetDetail detail1 = new EvaluationLevelVo.TargetDetail(); - detail1.setTargetName(DicDataEnum.FREQUENCY_DEV.getName()); - EvaluationLevelVo.TargetDetail detail2 = new EvaluationLevelVo.TargetDetail(); - detail2.setTargetName(DicDataEnum.VOLTAGE_DEV.getName()); - EvaluationLevelVo.TargetDetail detail3 = new EvaluationLevelVo.TargetDetail(); - detail3.setTargetName(DicDataEnum.THD_V.getName()); - EvaluationLevelVo.TargetDetail detail4 = new EvaluationLevelVo.TargetDetail(); - detail4.setTargetName(DicDataEnum.FLICKER.getName()); - EvaluationLevelVo.TargetDetail detail5 = new EvaluationLevelVo.TargetDetail(); - detail5.setTargetName(DicDataEnum.phase_Voltage.getName()); + //获取监测点集合 + List line = this.getLineList(list, param.getIsUpToGrid(),null); + if (CollUtil.isNotEmpty(line)) { + //获取监测点越限集合 + List overLimitList = rStatLimitTargetDMapper.getSumTarget(line,param.getStartTime(),param.getEndTime()); + //获取部门 + List deptList = deptFeignClient.getDepSonDetailByDeptId(param.getDeptIndex()).getData(); + Map deptLineMap = list.stream().collect(Collectors.toMap(DeptGetChildrenMoreDTO::getUnitId, Function.identity())); + deptList.forEach(item->{ + if (deptLineMap.containsKey(item.getId())) { + EvaluationLevelVo.EvaluationDetail detail = new EvaluationLevelVo.EvaluationDetail(); + detail.setDeptId(item.getId()); + detail.setDeptName(item.getName()); + if (CollUtil.isNotEmpty(deptLineMap.get(item.getId()).getLineBaseList())) { + List ll = deptLineMap.get(item.getId()).getLineBaseList().stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); + detail.setOnlineNum(ll.size()); + //筛选当前部门下监测点的超标数据 + List list2 = overLimitList.stream().filter(it->ll.contains(it.getLineId())).collect(Collectors.toList()); + EvaluationLevelVo.TargetDetail detail1 = new EvaluationLevelVo.TargetDetail(); + detail1.setTargetName(DicDataEnum.FREQUENCY_DEV.getName()); + EvaluationLevelVo.TargetDetail detail2 = new EvaluationLevelVo.TargetDetail(); + detail2.setTargetName(DicDataEnum.VOLTAGE_DEV.getName()); + EvaluationLevelVo.TargetDetail detail3 = new EvaluationLevelVo.TargetDetail(); + detail3.setTargetName(DicDataEnum.THD_V.getName()); + EvaluationLevelVo.TargetDetail detail4 = new EvaluationLevelVo.TargetDetail(); + detail4.setTargetName(DicDataEnum.FLICKER.getName()); + EvaluationLevelVo.TargetDetail detail5 = new EvaluationLevelVo.TargetDetail(); + detail5.setTargetName(DicDataEnum.phase_Voltage.getName()); - if (CollUtil.isNotEmpty(list2)) { - //筛选出五项指标(电压偏差、频率偏差、电压总谐波畸变率、电压闪变、三相电压不平衡度)超标监测点 - long allNum = list2.stream().filter(o->o.getFreqDevOvertime() > 0 - || o.getVoltageDevOvertime() > 0 - || o.getFlickerOvertime() > 0 - || o.getUaberranceOvertime() > 0 - || o.getUbalanceOvertime() > 0).count(); - detail.setOverNum((int) allNum); - detail.setOverRatio(PubUtils.doubleRound(2,detail.getOverNum()*100.0/detail.getOnlineNum())); - //筛选出电压偏差超标监测点 - long num1 = list2.stream().filter(o->o.getFreqDevOvertime() > 0).count(); - Integer day1 = list2.stream().max(Comparator.comparingInt(RStatLimitTargetDPO::getFreqDevOvertime)).get().getFreqDevOvertime(); - detail1.setOverNum((int) num1); - detail1.setOverDay(day1); + if (CollUtil.isNotEmpty(list2)) { + //筛选出五项指标(电压偏差、频率偏差、电压总谐波畸变率、电压闪变、三相电压不平衡度)超标监测点 + long allNum = list2.stream().filter(o->o.getFreqDevOvertime() > 0 + || o.getVoltageDevOvertime() > 0 + || o.getFlickerOvertime() > 0 + || o.getUaberranceOvertime() > 0 + || o.getUbalanceOvertime() > 0).count(); + detail.setOverNum((int) allNum); + detail.setOverRatio(PubUtils.doubleRound(2,detail.getOverNum()*100.0/detail.getOnlineNum())); + //筛选出电压偏差超标监测点 + long num1 = list2.stream().filter(o->o.getFreqDevOvertime() > 0).count(); + Integer day1 = list2.stream().max(Comparator.comparingInt(RStatLimitTargetDPO::getFreqDevOvertime)).get().getFreqDevOvertime(); + detail1.setOverNum((int) num1); + detail1.setOverDay(day1); - //筛选出频率偏差超标监测点 - long num2 = list2.stream().filter(o->o.getVoltageDevOvertime() > 0).count(); - Integer day2 = list2.stream().max(Comparator.comparingInt(RStatLimitTargetDPO::getVoltageDevOvertime)).get().getVoltageDevOvertime(); - detail2.setOverNum((int) num2); - detail2.setOverDay(day2); + //筛选出频率偏差超标监测点 + long num2 = list2.stream().filter(o->o.getVoltageDevOvertime() > 0).count(); + Integer day2 = list2.stream().max(Comparator.comparingInt(RStatLimitTargetDPO::getVoltageDevOvertime)).get().getVoltageDevOvertime(); + detail2.setOverNum((int) num2); + detail2.setOverDay(day2); - //筛选出电压总谐波畸变率超标监测点 - long num3 = list2.stream().filter(o->o.getUaberranceOvertime() > 0).count(); - Integer day3 = list2.stream().max(Comparator.comparingInt(RStatLimitTargetDPO::getUaberranceOvertime)).get().getUaberranceOvertime(); - detail3.setOverNum((int) num3); - detail3.setOverDay(day3); + //筛选出电压总谐波畸变率超标监测点 + long num3 = list2.stream().filter(o->o.getUaberranceOvertime() > 0).count(); + Integer day3 = list2.stream().max(Comparator.comparingInt(RStatLimitTargetDPO::getUaberranceOvertime)).get().getUaberranceOvertime(); + detail3.setOverNum((int) num3); + detail3.setOverDay(day3); - //筛选出电压闪变超标监测点 - long num4 = list2.stream().filter(o->o.getFlickerOvertime() > 0).count(); - Integer day4 = list2.stream().max(Comparator.comparingInt(RStatLimitTargetDPO::getFlickerOvertime)).get().getFlickerOvertime(); - detail4.setOverNum((int) num4); - detail4.setOverDay(day4); + //筛选出电压闪变超标监测点 + long num4 = list2.stream().filter(o->o.getFlickerOvertime() > 0).count(); + Integer day4 = list2.stream().max(Comparator.comparingInt(RStatLimitTargetDPO::getFlickerOvertime)).get().getFlickerOvertime(); + detail4.setOverNum((int) num4); + detail4.setOverDay(day4); - //筛选出三相电压不平衡度超标监测点 - long num5 = list2.stream().filter(o->o.getUbalanceOvertime() > 0).count(); - Integer day5 = list2.stream().max(Comparator.comparingInt(RStatLimitTargetDPO::getUbalanceOvertime)).get().getUbalanceOvertime(); - detail5.setOverNum((int) num5); - detail5.setOverDay(day5); + //筛选出三相电压不平衡度超标监测点 + long num5 = list2.stream().filter(o->o.getUbalanceOvertime() > 0).count(); + Integer day5 = list2.stream().max(Comparator.comparingInt(RStatLimitTargetDPO::getUbalanceOvertime)).get().getUbalanceOvertime(); + detail5.setOverNum((int) num5); + detail5.setOverDay(day5); + } + List details = Arrays.asList(detail1, detail2, detail3, detail4, detail5); + detail.setList(details); } - List details = Arrays.asList(detail1, detail2, detail3, detail4, detail5); - detail.setList(details); + result.add(detail); } - result.add(detail); - } - }); + }); + } return result; } @@ -488,30 +438,20 @@ public class GridServiceImpl implements IGridService { deptGetLineParam.setDeptId(param.getDeptIndex()); deptGetLineParam.setServerName("harmonic-boot"); List list = commTerminalGeneralClient.deptGetLine(deptGetLineParam).getData(); - //获取所有监测点数据 - Set lineList = list.stream() - .flatMap(item -> item.getLineBaseList().stream()) - .collect(Collectors.toSet()); - //筛选监测点 - List line = new ArrayList<>(); - if (CollUtil.isNotEmpty(lineList)) { - if (Objects.equals(param.getIsUpToGrid(), 1)) { - line = lineList.stream().filter(o->Objects.equals(o.getIsUpToGrid(), 1)).map(LineDevGetDTO::getPointId).collect(Collectors.toList()); - } else { - line = lineList.stream().map(LineDevGetDTO::getPointId).collect(Collectors.toList()); - } - } + //获取监测点集合 + List line = this.getLineList(list, param.getIsUpToGrid(),null); //获取基础台账信息 List baseLineInfos = generalDeviceInfoClient.getBaseLineInfo(line).getData(); //获取越限详情 List overLimitList = rStatLimitRateDMapper.getAssessTargetRate(line,param.getStartTime(),param.getEndTime()); - Map> map = overLimitList.stream().collect(Collectors.groupingBy(RStatLimitRateDPO::getLineId)); + Map map = overLimitList.stream().collect(Collectors.toMap(RStatLimitRateDPO::getLineId,Function.identity())); baseLineInfos.forEach(item->{ EvaluationLevelVo.QualifiedDetail qualifiedDetail = new EvaluationLevelVo.QualifiedDetail(); + qualifiedDetail.setAreaName(item.getGdName()); qualifiedDetail.setLineName(item.getLineName()); qualifiedDetail.setSubstationName(item.getSubName()); - if(CollUtil.isNotEmpty(map.get(item.getId()))) { - RStatLimitRateDPO item2 = map.get(item.getId()).get(0); + if (map.containsKey(item.getId())) { + RStatLimitRateDPO item2 = map.get(item.getId()); if (!Objects.isNull(item2) && item2.getAllTime() > 0) { qualifiedDetail.setFreqDev(PubUtils.doubleRound(2,100.0-(item2.getFreqDevOvertime()*100.0/item2.getAllTime()))); qualifiedDetail.setVDev(PubUtils.doubleRound(2,100.0-(item2.getVoltageDevOvertime()*100.0/item2.getAllTime()))); @@ -522,6 +462,11 @@ public class GridServiceImpl implements IGridService { } result.add(qualifiedDetail); }); + if (CollUtil.isNotEmpty(result)) { + return result.stream().sorted(Comparator.comparing(EvaluationLevelVo.QualifiedDetail::getAreaName) + .thenComparing(EvaluationLevelVo.QualifiedDetail::getSubstationName)) + .collect(Collectors.toList()); + } return result; } @@ -615,7 +560,6 @@ public class GridServiceImpl implements IGridService { } } - public AssessDetailVo getAssessData(String deptId, String deptName, List lineList, List list1, List list2, List list3) { AssessDetailVo comAssess = new AssessDetailVo(); comAssess.setDeptId(deptId); @@ -764,4 +708,49 @@ public class GridServiceImpl implements IGridService { } return months; } + + /** + * 过滤监测点 + * @param list + * @param type + * @return + */ + public List getLineList(List list, Integer type, String voltage) { + // 默认不过滤 + Predicate uploadFilter = item -> true; + if (Objects.equals(type, 1)) { + uploadFilter = item -> Objects.equals(item.getIsUpToGrid(), 1); + } + + Predicate voltageFilter = item -> true; + if (!Objects.isNull(voltage) && !Objects.equals(voltage,"")) { + voltageFilter = item -> Objects.equals(item.getVoltageLevel(), voltage); + } + // 组合两个过滤条件 + Predicate combinedFilter = uploadFilter.and(voltageFilter); + return list.stream() + .flatMap(item -> item.getLineBaseList().stream()) + .filter(combinedFilter) + .map(LineDevGetDTO::getPointId) + .distinct() + .collect(Collectors.toList()); + } + + /** + * 根据传入的月份数获取时间集合 + * @param month + * @return + */ + public List getLastThreeMonth(int month) { + //按月获取时间集合 + LocalDate currentDate = LocalDate.now(); + int currentYear = currentDate.getYear(); + LocalDate beginDay = LocalDate.of(currentYear, 1, 1); + List monthList = getMonthsBetween(beginDay,currentDate); + if (monthList.size() > month) { + monthList = monthList.subList(monthList.size() - month,monthList.size()); + } + return monthList; + } + } diff --git a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/DeptTreeVO.java b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/DeptTreeVO.java index 7c58c0665..8f00f0d93 100644 --- a/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/DeptTreeVO.java +++ b/pqs-user/user-api/src/main/java/com/njcn/user/pojo/vo/DeptTreeVO.java @@ -38,6 +38,7 @@ public class DeptTreeVO extends BaseVO { @ApiModelProperty("排序") private Integer sort; + @ApiModelProperty("部门等级 0:全国 1:省 2:市 3:县") private Integer level; @ApiModelProperty("子节点详细信息") diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserController.java b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserController.java index 44bf99bd4..165435c33 100644 --- a/pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserController.java +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/controller/UserController.java @@ -522,7 +522,7 @@ public class UserController extends BaseController { @OperateInfo(info = LogEnum.SYSTEM_SERIOUS) @GetMapping("/getUserByRoleType") @ApiOperation("根据角色类型获取用户") - @ApiImplicitParam(name = "roleCode", value = "角色类型", required = true) + @ApiImplicitParam(name = "roleType", value = "角色类型", required = true) public HttpResult> getUserByRoleType(@RequestParam("roleType") Integer roleType) { String methodDescribe = getMethodDescribe("getUserByRoleType"); List users = userService.getUserByRoleType(roleType); diff --git a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/DeptServiceImpl.java b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/DeptServiceImpl.java index dc45debda..6fc4425d1 100644 --- a/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/DeptServiceImpl.java +++ b/pqs-user/user-boot/src/main/java/com/njcn/user/service/impl/DeptServiceImpl.java @@ -170,6 +170,9 @@ public class DeptServiceImpl extends ServiceImpl implements ID return deptList.stream() .filter(deptVO -> deptVO.getId().equals(deptIndex)) .peek(deptFirst -> { + if (!Objects.isNull(deptFirst.getPid())){ + deptFirst.setLevel(deptFirst.getPids().split(",").length - 1); + } deptFirst.setChildren(getChildren(deptFirst, deptList)); }) .collect(Collectors.toList()); @@ -369,6 +372,9 @@ public class DeptServiceImpl extends ServiceImpl implements ID private List getChildren(DeptTreeVO deptFirst, List allDept) { return allDept.stream().filter(dept -> dept.getPid().equals(deptFirst.getId())) .peek(deptVo -> { + if (!Objects.isNull(deptVo.getPids())) { + deptVo.setLevel(deptVo.getPids().split(",").length - 1); + } deptVo.setChildren(getChildren(deptVo, allDept)); if (deptVo.getType() == 0) { deptVo.setName(deptVo.getAreaName());