From 22a374751f5f687a7d469b71eb4d7529b10dd727 Mon Sep 17 00:00:00 2001 From: wurui Date: Thu, 30 Mar 2023 10:44:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B1=A1=E5=8C=BA=E5=9B=BE=E5=89=8D10=EF=BC=8C?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E5=8C=BA=E5=88=86(pq=20pms)=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/PollutionSubstationServiceImpl.java | 165 +++++++++++++----- 1 file changed, 125 insertions(+), 40 deletions(-) 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 995aa2856..1a901f4da 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 @@ -22,22 +22,27 @@ import com.njcn.device.pq.api.SubstationFeignClient; import com.njcn.device.pq.pojo.dto.*; import com.njcn.harmonic.constant.Param; import com.njcn.harmonic.mapper.*; +import com.njcn.harmonic.pojo.dto.PublicDTO; import com.njcn.harmonic.pojo.param.HarmonicPublicParam; import com.njcn.harmonic.pojo.param.PollutionSubstationQuryParam; import com.njcn.harmonic.pojo.po.*; import com.njcn.harmonic.pojo.vo.PollutionSubstationVO; import com.njcn.harmonic.pojo.vo.PollutionVO; import com.njcn.harmonic.service.PollutionSubstationService; +import com.njcn.influxdb.utils.InfluxDbUtils; +import com.njcn.system.enums.DicDataEnum; import com.njcn.user.api.DeptFeignClient; import com.njcn.user.pojo.po.Dept; import com.njcn.web.utils.RequestUtil; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.influxdb.dto.QueryResult; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import java.math.BigDecimal; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -83,6 +88,8 @@ public class PollutionSubstationServiceImpl extends ServiceImpl deviceList = pmsGeneralDeviceInfoClient.getPmsDeviceInfoWithInOrg(pmsDeviceInfoParam).getData(); - List monitorIdList=new ArrayList<>(); - deviceList.forEach(dept -> { - monitorIdList.addAll(dept.getMonitorIdList()); - }); - - if(CollectionUtil.isNotEmpty(monitorIdList)){ - //获取监测点数据 - List lineData = rMpPollutionDPOMapper.selectMaxList ( monitorIdList,pollutionType,searchBeginTime); - - if(CollectionUtil.isEmpty(lineData)){ + if(param.getType()==0){ + param.setServerName(generalInfo.getMicroServiceName()); + List lineList = new ArrayList<>(); + PollutionParamDTO paramDTO = new PollutionParamDTO(); + if (StringUtils.isBlank(RequestUtil.getDeptIndex())) { return list; } - - //获取主网监测点信息 - List data = monitorClient.getMonitorList(monitorIdList).getData(); - Map monitorMap = data.stream().collect(Collectors.toMap(Monitor::getId, Function.identity(), (key1, kye2) -> key1)); - lineData.sort((item1, item2) -> item2.getValue().compareTo(item1.getValue())); - if (lineData.size() > Param.UP_LIMIT) { - lineData = lineData.subList(Param.DOWN_LIMIT, Param.UP_LIMIT); - } - - PollutionLineDTO dto; - for (RMpPollutionDPO lineDatum : lineData) { - if(monitorMap.containsKey(lineDatum.getLineId())){ - Monitor monitor = monitorMap.get(lineDatum.getLineId()); - dto=new PollutionLineDTO(); - dto.setId(monitor.getId()); - dto.setName(monitor.getName()); - dto.setPowerCompany(monitor.getOrgName()); - dto.setSubstation(monitor.getPowerrId()); - dto.setSubstationId(monitor.getPowerrName()); - dto.setBusBar(monitor.getLineName()); - dto.setData(lineDatum.getValue()); - list.add(dto); + List deviceList = generalDeviceInfoClient.getPracticalRunDeviceInfo(param).getData(); + deviceList.forEach(item -> { + if (!CollectionUtils.isEmpty(item.getLineIndexes())) { + lineList.addAll(item.getLineIndexes()); + } + }); + if (!CollectionUtils.isEmpty(lineList)) { + paramDTO.setLineList(lineList); + list = lineFeignClient.getLineInfo(paramDTO).getData(); + List result = getLineDate(lineList, param.getSearchBeginTime(), param.getSearchEndTime(), param.getStatisticalType().getCode()); + if (!CollectionUtils.isEmpty(result)) { + list.stream().map(list1 -> result.stream().filter(list2 -> Objects.equals(list1.getId(), list2.getId())).findAny().map(m -> { + list1.setData(m.getData()); + return list1; + })).collect(Collectors.toList()); } } + list.sort((item1, item2) -> item2.getData().compareTo(item1.getData())); + if (list.size() > Param.UP_LIMIT) { + return list.subList(Param.DOWN_LIMIT, Param.UP_LIMIT); + } + return list; } - return list; + PmsDeviceInfoParam pmsDeviceInfoParam = new PmsDeviceInfoParam(); + pmsDeviceInfoParam.setDeptIndex(param.getDeptIndex()); + //获取统计类型 + pmsDeviceInfoParam.setStatisticalType(param.getStatisticalType()); + //获取主网台账信息 + List deviceList = pmsGeneralDeviceInfoClient.getPmsDeviceInfoWithInOrg(pmsDeviceInfoParam).getData(); + List monitorIdList=new ArrayList<>(); + deviceList.forEach(dept -> { + monitorIdList.addAll(dept.getMonitorIdList()); + }); + + if(CollectionUtil.isNotEmpty(monitorIdList)){ + //获取监测点数据 + List lineData = rMpPollutionDPOMapper.selectMaxList ( monitorIdList,pollutionType,searchBeginTime); + + if(CollectionUtil.isEmpty(lineData)){ + return list; + } + + //获取主网监测点信息 + List data = monitorClient.getMonitorList(monitorIdList).getData(); + Map monitorMap = data.stream().collect(Collectors.toMap(Monitor::getId, Function.identity(), (key1, kye2) -> key1)); + lineData.sort((item1, item2) -> item2.getValue().compareTo(item1.getValue())); + if (lineData.size() > Param.UP_LIMIT) { + lineData = lineData.subList(Param.DOWN_LIMIT, Param.UP_LIMIT); + } + + PollutionLineDTO dto; + for (RMpPollutionDPO lineDatum : lineData) { + if(monitorMap.containsKey(lineDatum.getLineId())){ + Monitor monitor = monitorMap.get(lineDatum.getLineId()); + dto=new PollutionLineDTO(); + dto.setId(monitor.getId()); + dto.setName(monitor.getName()); + dto.setPowerCompany(monitor.getOrgName()); + dto.setSubstation(monitor.getPowerrId()); + dto.setSubstationId(monitor.getPowerrName()); + dto.setBusBar(monitor.getLineName()); + dto.setData(lineDatum.getValue()); + list.add(dto); + } + } + } + return list; } - + /** + * 功能描述:根据监测点id查询influxDB污染指数 + * + * @param line 监测点集合 + * startTime 开始时间 + * endTime 结束时间 + * type 指标参数 + * @return + * @author xy + * @date 2022/2/21 20:08 + */ + private List getLineDate(List line, String startTime, String endTime, String type) { + List result = new ArrayList<>(); + String quota = ""; + if (Objects.equals(type, DicDataEnum.XBDY_ENUM.getCode())) { + quota = "harmonic_v"; + } else if (Objects.equals(type, DicDataEnum.XBDL_ENUM.getCode())) { + quota = "harmonic_i"; + } + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append(Param.TIME).append(" >= '").append(startTime).append(Param.START_TIME).append("' and ").append(Param.TIME).append(" <= '").append(endTime).append(Param.END_TIME).append("' and ("); + for (int i = 0; i < line.size(); i++) { + if (line.size() - i != 1) { + stringBuilder.append(Param.LINE_ID).append("='").append(line.get(i)).append("' or "); + } else { + stringBuilder.append(Param.LINE_ID).append("='").append(line.get(i)).append("')"); + } + } + stringBuilder.append(" group by line_id order by time desc limit 1 tz('Asia/Shanghai')"); + String sql = "SELECT line_id," + quota + " FROM harmonic_pollution where " + stringBuilder; + QueryResult sqlResult = influxDbUtils.query(sql); + List list = sqlResult.getResults().get(0).getSeries(); + if (!CollectionUtils.isEmpty(list)) { + list.forEach(po -> { + String index = po.getTags().get(Param.LINE_ID); + List> valueList = po.getValues(); + if (!CollectionUtils.isEmpty(valueList)) { + for (List value : valueList) { + PublicDTO publicDTO = new PublicDTO(); + Double data = value.get(2) == null ? 0.0 : BigDecimal.valueOf(Double.parseDouble(value.get(2).toString())).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + publicDTO.setId(index); + publicDTO.setData(data); + result.add(publicDTO); + } + } + }); + } + return result; + } }