辽宁功能调整
This commit is contained in:
@@ -193,7 +193,7 @@
|
||||
FROM
|
||||
r_stat_limit_rate_d
|
||||
<where>
|
||||
phasic_type = "T"
|
||||
phasic_type = 'T'
|
||||
<if test=" ids != null and ids.size > 0">
|
||||
AND my_index IN
|
||||
<foreach collection='ids' item='item' index="index" open='(' separator=',' close=')'>
|
||||
|
||||
@@ -10,9 +10,14 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.njcn.common.config.GeneralInfo;
|
||||
import com.njcn.device.pq.api.GeneralDeviceInfoClient;
|
||||
import com.njcn.device.pq.api.LineFeignClient;
|
||||
import com.njcn.device.pq.api.SubstationFeignClient;
|
||||
import com.njcn.device.pq.enums.LineBaseEnum;
|
||||
import com.njcn.device.pq.enums.PowerFlagEnum;
|
||||
import com.njcn.device.pq.pojo.dto.GeneralDeviceDTO;
|
||||
import com.njcn.device.biz.pojo.dto.PollutionLineDTO;
|
||||
import com.njcn.device.pq.pojo.dto.PollutionParamDTO;
|
||||
import com.njcn.device.pq.pojo.po.Line;
|
||||
import com.njcn.device.pq.pojo.po.LineDetail;
|
||||
import com.njcn.device.pq.pojo.vo.LineDeviceStateVO;
|
||||
import com.njcn.harmonic.constant.Param;
|
||||
import com.njcn.harmonic.mapper.RStatLimitTargetDMapper;
|
||||
@@ -20,11 +25,11 @@ import com.njcn.harmonic.pojo.dto.AreaDTO;
|
||||
import com.njcn.harmonic.pojo.param.HarmonicPublicParam;
|
||||
import com.njcn.harmonic.pojo.po.LimitTarget;
|
||||
import com.njcn.harmonic.pojo.po.day.RStatLimitTargetDPO;
|
||||
import com.njcn.harmonic.pojo.vo.HarmonicDeptVO;
|
||||
import com.njcn.harmonic.pojo.vo.HarmonicLineVO;
|
||||
import com.njcn.harmonic.pojo.vo.HarmonicSubstationVO;
|
||||
import com.njcn.harmonic.pojo.vo.PollutionVO;
|
||||
import com.njcn.harmonic.pojo.vo.*;
|
||||
import com.njcn.harmonic.service.IHarmonicService;
|
||||
import com.njcn.supervision.api.UserLedgerFeignClient;
|
||||
import com.njcn.supervision.pojo.param.user.UserReportParam;
|
||||
import com.njcn.supervision.pojo.vo.user.UserLedgerVO;
|
||||
import com.njcn.system.enums.DicDataEnum;
|
||||
import com.njcn.web.utils.RequestUtil;
|
||||
import lombok.AllArgsConstructor;
|
||||
@@ -36,6 +41,7 @@ import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.time.*;
|
||||
import java.util.*;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
@@ -58,57 +64,96 @@ public class HarmonicServiceImpl implements IHarmonicService {
|
||||
|
||||
private final RStatLimitTargetDMapper targetDMapper;
|
||||
|
||||
private final UserLedgerFeignClient userLedgerFeignClient;
|
||||
|
||||
private final SubstationFeignClient substationFeignClient;
|
||||
|
||||
@Override
|
||||
public List<PollutionVO> getDeptSubstationRelations(HarmonicPublicParam harmonicPublicParam) {
|
||||
harmonicPublicParam.setServerName(generalInfo.getMicroServiceName());
|
||||
List<PollutionVO> list = new ArrayList<>();
|
||||
List<String> lineList = new ArrayList<>();
|
||||
List<PollutionLineDTO> lineInfo = new ArrayList<>();
|
||||
PollutionParamDTO paramDTO = new PollutionParamDTO();
|
||||
if (StringUtils.isBlank(RequestUtil.getDeptIndex())) {
|
||||
return list;
|
||||
}
|
||||
List<GeneralDeviceDTO> deptList = generalDeviceInfoClient.getPracticalRunDeviceInfo(harmonicPublicParam).getData();
|
||||
deptList.forEach(dept -> {
|
||||
lineList.addAll(dept.getLineIndexes());
|
||||
});
|
||||
if (!CollectionUtils.isEmpty(lineList)) {
|
||||
paramDTO.setLineList(lineList);
|
||||
lineInfo = lineFeignClient.getLineInfo(paramDTO).getData();
|
||||
|
||||
Map<String, UserLedgerVO> userLedgerVOMap;
|
||||
if (Objects.isNull(harmonicPublicParam.getPowerFlag()) || !PowerFlagEnum.GRID_SIDE.getCode().equals(harmonicPublicParam.getPowerFlag())) {
|
||||
List<UserLedgerVO> userLedgerVOList = userLedgerFeignClient.selectUserList(new UserReportParam()).getData();
|
||||
userLedgerVOMap = userLedgerVOList.stream().collect(Collectors.toMap(UserLedgerVO::getId, Function.identity()));
|
||||
} else {
|
||||
userLedgerVOMap = new HashMap<>();
|
||||
}
|
||||
Map<String, List<PollutionLineDTO>> map = lineInfo.stream().collect(Collectors.groupingBy(PollutionLineDTO::getSubstationId));
|
||||
|
||||
|
||||
List<GeneralDeviceDTO> deptList = generalDeviceInfoClient.getPracticalRunDeviceInfo(harmonicPublicParam).getData();
|
||||
deptList.forEach(dept -> lineList.addAll(dept.getLineIndexes()));
|
||||
//获取所有的数据信息
|
||||
List<RStatLimitTargetDPO> limitTargetNew = getLimitTargetNew(lineList, harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime());
|
||||
//聚合查询
|
||||
List<RStatLimitTargetDPO> allData = new ArrayList<>();
|
||||
List<RStatLimitTargetDPO> finalAllData;
|
||||
if (Objects.equals(harmonicPublicParam.getStatisticalType().getCode(), DicDataEnum.XBDY_ENUM.getCode())) {
|
||||
allData = getAllDataV(lineList, harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime());
|
||||
finalAllData = getAllDataV(lineList, harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime());
|
||||
} else if (Objects.equals(harmonicPublicParam.getStatisticalType().getCode(), DicDataEnum.XBDL_ENUM.getCode())) {
|
||||
allData = getAllDataI(lineList, harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime());
|
||||
|
||||
finalAllData = getAllDataI(lineList, harmonicPublicParam.getSearchBeginTime(), harmonicPublicParam.getSearchEndTime());
|
||||
} else {
|
||||
finalAllData = new ArrayList<>();
|
||||
}
|
||||
|
||||
List<RStatLimitTargetDPO> finalAllData = allData;
|
||||
deptList.forEach(dept -> {
|
||||
for (GeneralDeviceDTO dept : deptList) {
|
||||
if (CollUtil.isEmpty(dept.getLineIndexes())) {
|
||||
continue;
|
||||
}
|
||||
PollutionParamDTO paramDTO = new PollutionParamDTO();
|
||||
paramDTO.setLineList(dept.getLineIndexes());
|
||||
List<PollutionLineDTO> pollutionLineDTOList = lineFeignClient.getLineInfo(paramDTO).getData();
|
||||
List<PollutionLineDTO> userLedgerList = pollutionLineDTOList.stream().filter(item -> StrUtil.isNotBlank(item.getObjId())).collect(Collectors.toList());
|
||||
List<PollutionLineDTO> powerLedgerList = pollutionLineDTOList.stream().filter(item -> StrUtil.isBlank(item.getObjId())).collect(Collectors.toList());
|
||||
|
||||
List<PollutionVO> childrenList = new ArrayList<>();
|
||||
Map<String, List<PollutionLineDTO>> powerSubMap;
|
||||
if (CollUtil.isNotEmpty(powerLedgerList)) {
|
||||
powerSubMap = powerLedgerList.stream().collect(Collectors.groupingBy(it -> it.getPids().split(StrUtil.COMMA)[LineBaseEnum.SUB_LEVEL.getCode()]));
|
||||
} else {
|
||||
powerSubMap = new HashMap<>();
|
||||
}
|
||||
|
||||
if (!CollectionUtils.isEmpty(dept.getSubIndexes())) {
|
||||
List<PollutionVO> childrenList = new ArrayList<>();
|
||||
PollutionVO pollutionVO = new PollutionVO();
|
||||
pollutionVO.setId(dept.getIndex());
|
||||
pollutionVO.setName(dept.getName() + "\n(" + dept.getLineIndexes().size() + ")");
|
||||
dept.getSubIndexes().forEach(sub -> {
|
||||
List<PollutionLineDTO> l1 = map.get(sub);
|
||||
powerSubMap.forEach((sub, monitList) -> {
|
||||
PollutionVO children = new PollutionVO();
|
||||
children.setId(sub);
|
||||
children.setPid(dept.getIndex());
|
||||
children.setName(l1.get(0).getSubstation());
|
||||
children.setPowerFlag(PowerFlagEnum.GRID_SIDE.getCode());
|
||||
children.setName(monitList.get(0).getSubstation());
|
||||
//监测点id
|
||||
List<String> lineIds = l1.stream().map(PollutionLineDTO::getId).collect(Collectors.toList());
|
||||
List<String> lineIds = monitList.stream().map(PollutionLineDTO::getId).collect(Collectors.toList());
|
||||
List<RStatLimitTargetDPO> collect = limitTargetNew.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
|
||||
List<RStatLimitTargetDPO> sumList = finalAllData.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
|
||||
children.setData(handleDataNew(collect, sumList, harmonicPublicParam.getStatisticalType().getCode()).getRatio());
|
||||
childrenList.add(children);
|
||||
});
|
||||
|
||||
if (CollUtil.isNotEmpty(userLedgerList)) {
|
||||
Map<String, List<PollutionLineDTO>> objMap = userLedgerList.stream().collect(Collectors.groupingBy(PollutionLineDTO::getObjId));
|
||||
objMap.forEach((obj, mList) -> {
|
||||
UserLedgerVO userLedgerVO = userLedgerVOMap.getOrDefault(obj, new UserLedgerVO());
|
||||
PollutionVO children = new PollutionVO();
|
||||
children.setId(obj);
|
||||
children.setPid(userLedgerVO.getStationId());
|
||||
children.setName(StrUtil.isNotBlank(userLedgerVO.getProjectName()) ? userLedgerVO.getProjectName() : "异常数据");
|
||||
children.setPowerFlag(PowerFlagEnum.NO_GRID_SIDE.getCode());
|
||||
//监测点id
|
||||
List<String> lineIds = mList.stream().map(PollutionLineDTO::getId).collect(Collectors.toList());
|
||||
List<RStatLimitTargetDPO> collect = limitTargetNew.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
|
||||
List<RStatLimitTargetDPO> sumList = finalAllData.stream().filter(x -> lineIds.contains(x.getLineId())).collect(Collectors.toList());
|
||||
children.setData(handleDataNew(collect, sumList, harmonicPublicParam.getStatisticalType().getCode()).getRatio());
|
||||
childrenList.add(children);
|
||||
});
|
||||
}
|
||||
|
||||
if (!CollectionUtils.isEmpty(childrenList)) {
|
||||
pollutionVO.setChildren(childrenList.stream().sorted(Comparator.comparing(PollutionVO::getData).reversed().thenComparing(PollutionVO::getName)).collect(Collectors.toList()));
|
||||
}
|
||||
@@ -118,7 +163,7 @@ public class HarmonicServiceImpl implements IHarmonicService {
|
||||
}
|
||||
list.add(pollutionVO);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(list)) {
|
||||
return list.stream().sorted(Comparator.comparing(PollutionVO::getData).reversed().thenComparing(PollutionVO::getName)).collect(Collectors.toList());
|
||||
}
|
||||
@@ -158,11 +203,11 @@ public class HarmonicServiceImpl implements IHarmonicService {
|
||||
}
|
||||
});
|
||||
if (!CollectionUtils.isEmpty(list)) {
|
||||
List<HarmonicDeptVO> collect = list.stream().filter(x->x.getRatio()!=3.14159&&x.getOnlineCount()!=0&&x.getOverLineCount()!=0)
|
||||
List<HarmonicDeptVO> 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());
|
||||
List<String> ids = collect.stream().map(HarmonicDeptVO::getId).collect(Collectors.toList());
|
||||
collect.addAll(list.stream().filter(x->!ids.contains(x.getId()))
|
||||
.collect(Collectors.toList()));
|
||||
collect.addAll(list.stream().filter(x -> !ids.contains(x.getId()))
|
||||
.collect(Collectors.toList()));
|
||||
return collect;
|
||||
}
|
||||
return list;
|
||||
@@ -206,37 +251,25 @@ public class HarmonicServiceImpl implements IHarmonicService {
|
||||
|
||||
@Override
|
||||
public List<HarmonicLineVO> getLineInfoById(HarmonicPublicParam param) {
|
||||
param.setServerName(generalInfo.getMicroServiceName());
|
||||
|
||||
List<HarmonicLineVO> list = new ArrayList<>();
|
||||
List<String> line = new ArrayList<>();
|
||||
if (StringUtils.isBlank(RequestUtil.getDeptIndex())) {
|
||||
return list;
|
||||
List<LineDetail> lineDetailList = new ArrayList<>();
|
||||
if(PowerFlagEnum.GRID_SIDE.getCode().equals(param.getPowerFlag())){
|
||||
lineDetailList = substationFeignClient.getMonitorByStationId(param.getId(),PowerFlagEnum.GRID_SIDE.getCode()).getData();
|
||||
}else if(PowerFlagEnum.NO_GRID_SIDE.getCode().equals(param.getPowerFlag())){
|
||||
lineDetailList = lineFeignClient.getMonitorByObjId(param.getId()).getData();
|
||||
}
|
||||
List<GeneralDeviceDTO> sub = generalDeviceInfoClient.getPracticalRunDeviceInfoAsSubstation(param).getData();
|
||||
sub.forEach(item -> {
|
||||
if (Objects.equals(param.getId(), item.getIndex())) {
|
||||
if (!CollectionUtils.isEmpty(item.getLineIndexes())) {
|
||||
line.addAll(item.getLineIndexes());
|
||||
}
|
||||
}
|
||||
});
|
||||
if (!CollectionUtils.isEmpty(line)) {
|
||||
List<LimitTarget> limitTargetList = getLineOverDays(line, param.getSearchBeginTime(), param.getSearchEndTime(), param.getStatisticalType().getCode());
|
||||
List<String> lineIds = lineDetailList.stream().map(LineDetail::getId).collect(Collectors.toList());
|
||||
Map<String,LineDetail> map = lineDetailList.stream().collect(Collectors.toMap(LineDetail::getId,Function.identity()));
|
||||
if (!CollectionUtils.isEmpty(lineIds)) {
|
||||
List<LimitTarget> limitTargetList = getLineOverDays(lineIds, param.getSearchBeginTime(), param.getSearchEndTime(), param.getStatisticalType().getCode());
|
||||
if (!CollectionUtils.isEmpty(limitTargetList)) {
|
||||
buildData(list, limitTargetList, param.getStatisticalType().getCode());
|
||||
}
|
||||
}
|
||||
//获取监测点名称
|
||||
if (!CollectionUtils.isEmpty(list)) {
|
||||
List<String> lineList = list.stream().map(HarmonicLineVO::getId).collect(Collectors.toList());
|
||||
List<LineDeviceStateVO> lineDeviceStateVOList = lineFeignClient.getAllLine(lineList).getData();
|
||||
list.stream().map(item1 -> lineDeviceStateVOList.stream().filter(item2 -> Objects.equals(item1.getId(), item2.getId())).findAny().map(item3 -> {
|
||||
item1.setName(item3.getName());
|
||||
return list;
|
||||
})).collect(Collectors.toList());
|
||||
}
|
||||
if (!CollectionUtils.isEmpty(list)) {
|
||||
return list.stream().sorted(Comparator.comparing(HarmonicLineVO::getOverDays).reversed()).collect(Collectors.toList());
|
||||
list.stream().sorted(Comparator.comparing(HarmonicLineVO::getOverDays).reversed()).forEach(item -> item.setName(map.getOrDefault(item.getId(),new LineDetail()).getMonitorName()));
|
||||
}
|
||||
return list;
|
||||
}
|
||||
@@ -400,18 +433,18 @@ public class HarmonicServiceImpl implements IHarmonicService {
|
||||
|
||||
}
|
||||
|
||||
public AreaDTO handleDataNew(List<RStatLimitTargetDPO> list, List<RStatLimitTargetDPO> sumList,String type) {
|
||||
int onlineCount = 0,overLineCount = 0,overCountByDay = 0;
|
||||
double avgOverDay = 0.0,ratio = 0.0;
|
||||
public AreaDTO handleDataNew(List<RStatLimitTargetDPO> list, List<RStatLimitTargetDPO> sumList, String type) {
|
||||
int onlineCount = 0, overLineCount = 0, overCountByDay = 0;
|
||||
double avgOverDay = 0.0, ratio = 0.0;
|
||||
AreaDTO areaDTO = new AreaDTO();
|
||||
if (!CollectionUtils.isEmpty(list)){
|
||||
List<RStatLimitTargetDPO> data=sumList;
|
||||
if (!CollectionUtils.isEmpty(list)) {
|
||||
List<RStatLimitTargetDPO> data = sumList;
|
||||
if (!CollectionUtils.isEmpty(sumList)) {
|
||||
onlineCount = data.size();
|
||||
//在线监测点个数
|
||||
areaDTO.setOnlineCount(onlineCount);
|
||||
for (RStatLimitTargetDPO pojo : data) {
|
||||
if (pojo.getAllTime()>0){
|
||||
if (pojo.getAllTime() > 0) {
|
||||
overLineCount = overLineCount + 1;
|
||||
}
|
||||
}
|
||||
@@ -437,21 +470,21 @@ public class HarmonicServiceImpl implements IHarmonicService {
|
||||
ratio = ratio + overDay * 1.0 / l.size();
|
||||
}
|
||||
//平均超标天数
|
||||
if (CollectionUtils.isEmpty(list)){
|
||||
if (CollectionUtils.isEmpty(list)) {
|
||||
avgOverDay = 0;
|
||||
} else {
|
||||
avgOverDay = overLineCount == 0?0.0:BigDecimal.valueOf(overCountByDay*1.0/overLineCount).setScale(2, RoundingMode.HALF_UP).doubleValue();
|
||||
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();
|
||||
ratio = map.size() == 0 ? 0 : BigDecimal.valueOf(ratio * 100.0 / map.size()).setScale(2, RoundingMode.HALF_UP).doubleValue();
|
||||
areaDTO.setOnlineCount(onlineCount);
|
||||
areaDTO.setOverLineCount(overLineCount);
|
||||
//平均超标天数
|
||||
areaDTO.setAverageOverDay(avgOverDay);
|
||||
areaDTO.setRatio(Math.min(ratio,100.0));
|
||||
areaDTO.setRatio(Math.min(ratio, 100.0));
|
||||
//月监测点超标占比
|
||||
double lineRatio = onlineCount==0?0:BigDecimal.valueOf(overLineCount*100.0/onlineCount).setScale(2, RoundingMode.HALF_UP).doubleValue();
|
||||
areaDTO.setLineRatio(Math.min(lineRatio,100.0));
|
||||
double lineRatio = onlineCount == 0 ? 0 : BigDecimal.valueOf(overLineCount * 100.0 / onlineCount).setScale(2, RoundingMode.HALF_UP).doubleValue();
|
||||
areaDTO.setLineRatio(Math.min(lineRatio, 100.0));
|
||||
return areaDTO;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user