瀏覽代碼

效率总览信息代码逻辑

wangchenghong 3 年之前
父節點
當前提交
da8813d857
共有 15 個文件被更改,包括 425 次插入9 次删除
  1. 24 0
      src/main/java/com/persagy/apm/energy/report/centermiddleware/client/CenterMiddlewareWebClient.java
  2. 21 0
      src/main/java/com/persagy/apm/energy/report/centermiddleware/model/dto/BatchQueryPeriodDataDTO.java
  3. 14 0
      src/main/java/com/persagy/apm/energy/report/centermiddleware/model/dto/Criteria.java
  4. 22 0
      src/main/java/com/persagy/apm/energy/report/centermiddleware/model/dto/CriteriasObjDTO.java
  5. 19 0
      src/main/java/com/persagy/apm/energy/report/centermiddleware/model/dto/QueryObjectInfoDTO.java
  6. 14 0
      src/main/java/com/persagy/apm/energy/report/centermiddleware/model/vo/ObjectInfoVO.java
  7. 14 0
      src/main/java/com/persagy/apm/energy/report/centermiddleware/model/vo/PeriodDataInfoVO.java
  8. 30 0
      src/main/java/com/persagy/apm/energy/report/centermiddleware/model/vo/ProjectEERDataVo.java
  9. 12 0
      src/main/java/com/persagy/apm/energy/report/centermiddleware/service/ICenterMiddlewareWebService.java
  10. 190 4
      src/main/java/com/persagy/apm/energy/report/centermiddleware/service/impl/ICenterMiddlewareWebServiceImp.java
  11. 2 1
      src/main/java/com/persagy/apm/energy/report/common/service/CommonService.java
  12. 49 1
      src/main/java/com/persagy/apm/energy/report/common/service/impl/CommonServiceImpl.java
  13. 9 0
      src/main/java/com/persagy/apm/energy/report/common/utils/DateUtils.java
  14. 2 2
      src/main/java/com/persagy/apm/energy/report/monthly/detail/hotel/project/model/vo/HotelProjectChillerPlantEfficiency.java
  15. 3 1
      src/main/java/com/persagy/apm/energy/report/monthly/outline/service/builder/hotel/impl/HotelProjectReportBuilder.java

+ 24 - 0
src/main/java/com/persagy/apm/energy/report/centermiddleware/client/CenterMiddlewareWebClient.java

@@ -2,10 +2,14 @@ package com.persagy.apm.energy.report.centermiddleware.client;
 
 import com.persagy.apm.common.response.PoemsFeignResponse;
 import com.persagy.apm.energy.report.centermiddleware.client.fallback.CenterMiddlewareWebClientFallbackFactory;
+import com.persagy.apm.energy.report.centermiddleware.model.dto.BatchQueryPeriodDataDTO;
 import com.persagy.apm.energy.report.centermiddleware.model.dto.QueryEnergyDataDTO;
 import com.persagy.apm.energy.report.centermiddleware.model.dto.QueryItemInfoDTO;
+import com.persagy.apm.energy.report.centermiddleware.model.dto.QueryObjectInfoDTO;
 import com.persagy.apm.energy.report.centermiddleware.model.vo.EnergyDataInfoVO;
 import com.persagy.apm.energy.report.centermiddleware.model.vo.EnergyItemInfoVO;
+import com.persagy.apm.energy.report.centermiddleware.model.vo.ObjectInfoVO;
+import com.persagy.apm.energy.report.centermiddleware.model.vo.PeriodDataInfoVO;
 import com.persagy.apm.energy.report.common.FeignClientNameConstants;
 import com.persagy.apm.energy.report.common.FeignConfig;
 import feign.Headers;
@@ -43,4 +47,24 @@ public interface CenterMiddlewareWebClient {
     @Headers({"Content-Type: application/json"})
     PoemsFeignResponse<EnergyItemInfoVO> getItemNameInfo(QueryItemInfoDTO queryItemInfoDTO);
 
+    /**
+     * 查询中台对应对象信息
+     *
+     * @param queryObjectInfoDTO 查询条件
+     * @return
+     */
+    @PostMapping("/object/query")
+    @Headers({"Content-Type: application/json"})
+    PoemsFeignResponse<ObjectInfoVO> getObjectInfo(QueryObjectInfoDTO queryObjectInfoDTO);
+
+    /**
+     * 批量查询分精度数据
+     *
+     * @param batchQueryPeriodDataDTO 查询条件
+     * @return
+     */
+    @PostMapping("/hisdata/batchQueryPeriodData")
+    @Headers({"Content-Type: application/json"})
+    PoemsFeignResponse<PoemsFeignResponse<PeriodDataInfoVO>> getPeriodDataInfo(BatchQueryPeriodDataDTO batchQueryPeriodDataDTO);
+
 }

+ 21 - 0
src/main/java/com/persagy/apm/energy/report/centermiddleware/model/dto/BatchQueryPeriodDataDTO.java

@@ -0,0 +1,21 @@
+package com.persagy.apm.energy.report.centermiddleware.model.dto;
+
+import com.persagy.apm.common.model.dto.PoemsFeignBaseDTO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel
+public class BatchQueryPeriodDataDTO extends PoemsFeignBaseDTO {
+    @ApiModelProperty("项目id")
+    private String projectId;
+    @ApiModelProperty("集团编码")
+    private String groupCode;
+    @ApiModelProperty("入参列表")
+    private List<CriteriasObjDTO> criterias;
+}

+ 14 - 0
src/main/java/com/persagy/apm/energy/report/centermiddleware/model/dto/Criteria.java

@@ -0,0 +1,14 @@
+package com.persagy.apm.energy.report.centermiddleware.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+@ApiModel
+public class Criteria {
+    @ApiModelProperty("类型码列表")
+    private List<String> classCode;
+}

+ 22 - 0
src/main/java/com/persagy/apm/energy/report/centermiddleware/model/dto/CriteriasObjDTO.java

@@ -0,0 +1,22 @@
+package com.persagy.apm.energy.report.centermiddleware.model.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Map;
+
+@Data
+@ApiModel
+public class CriteriasObjDTO {
+    @ApiModelProperty("查询数据类型")
+    private String period;
+    @ApiModelProperty("数据频率")
+    private boolean interpolation;
+    @ApiModelProperty("查询信息点")
+    private String code;
+    @ApiModelProperty("对象id")
+    private String id;
+    @ApiModelProperty("数据时间参数")
+    private Map receivetime;
+}

+ 19 - 0
src/main/java/com/persagy/apm/energy/report/centermiddleware/model/dto/QueryObjectInfoDTO.java

@@ -0,0 +1,19 @@
+package com.persagy.apm.energy.report.centermiddleware.model.dto;
+
+import com.persagy.apm.common.model.dto.PoemsFeignBaseDTO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+@ApiModel
+public class QueryObjectInfoDTO extends PoemsFeignBaseDTO {
+    @ApiModelProperty("项目id")
+    private String projectId;
+    @ApiModelProperty("集团编码")
+    private String groupCode;
+    @ApiModelProperty("入参列表")
+    private Criteria criteria;
+}

+ 14 - 0
src/main/java/com/persagy/apm/energy/report/centermiddleware/model/vo/ObjectInfoVO.java

@@ -0,0 +1,14 @@
+package com.persagy.apm.energy.report.centermiddleware.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel
+@Data
+public class ObjectInfoVO {
+    @ApiModelProperty(value = "对象id")
+    private String id;
+    @ApiModelProperty(value = "对象名称")
+    private String name;
+}

+ 14 - 0
src/main/java/com/persagy/apm/energy/report/centermiddleware/model/vo/PeriodDataInfoVO.java

@@ -0,0 +1,14 @@
+package com.persagy.apm.energy.report.centermiddleware.model.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@ApiModel
+@Data
+public class PeriodDataInfoVO {
+    @ApiModelProperty(value = "数据时间")
+    private String data_time;
+    @ApiModelProperty(value = "数据")
+    private Double data_value;
+}

+ 30 - 0
src/main/java/com/persagy/apm/energy/report/centermiddleware/model/vo/ProjectEERDataVo.java

@@ -0,0 +1,30 @@
+package com.persagy.apm.energy.report.centermiddleware.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.persagy.apm.energy.report.monthly.detail.common.model.vo.DateGraphItemVO;
+import com.persagy.apm.energy.report.monthly.detail.common.model.vo.HotelRankVO;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+@ApiModel
+@JsonInclude(JsonInclude.Include.NON_NULL)
+public class ProjectEERDataVo {
+    @ApiModelProperty(value = "项目id")
+    private String projectId;
+    @ApiModelProperty(value = "eer")
+    private Double eer;
+    @ApiModelProperty(value = "最高eer发生时间")
+    private List<Date> maxEerTimeList;
+    @ApiModelProperty(value = "最低eer发生时间")
+    private List<Date> minEerTimeList;
+    @ApiModelProperty(value = "本月制冷量")
+    private Double coolingCapacityCurrentMonth;
+    @ApiModelProperty(value = "图表信息")
+    private List<DateGraphItemVO> eerDetailInfo;
+}

+ 12 - 0
src/main/java/com/persagy/apm/energy/report/centermiddleware/service/ICenterMiddlewareWebService.java

@@ -2,9 +2,11 @@ package com.persagy.apm.energy.report.centermiddleware.service;
 
 import com.persagy.apm.energy.report.centermiddleware.model.dto.QueryEnergyDataDTO;
 import com.persagy.apm.energy.report.centermiddleware.model.dto.QueryItemInfoDTO;
+import com.persagy.apm.energy.report.centermiddleware.model.vo.ProjectEERDataVo;
 import io.swagger.annotations.Api;
 
 import java.util.Date;
+import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
 
@@ -30,4 +32,14 @@ public interface ICenterMiddlewareWebService {
      */
     Map<String, TreeMap<Date, Double>> getItemEnergyDataMap(QueryEnergyDataDTO queryEnergyDataDTO);
 
+    /**
+     * 获取项目效率总览相关数据
+     *
+     * @param pjIdList   项目id殂
+     * @param groupCode  集团编码
+     * @param reportDate 报告月
+     * @return
+     */
+    List<ProjectEERDataVo> getProjectEERDataList(List<String> pjIdList, String groupCode, Date reportDate);
+
 }

+ 190 - 4
src/main/java/com/persagy/apm/energy/report/centermiddleware/service/impl/ICenterMiddlewareWebServiceImp.java

@@ -1,25 +1,36 @@
 package com.persagy.apm.energy.report.centermiddleware.service.impl;
 
+import com.alibaba.fastjson.JSONObject;
 import com.persagy.apm.common.response.PoemsFeignResponse;
 import com.persagy.apm.energy.report.centermiddleware.client.CenterMiddlewareWebClient;
-import com.persagy.apm.energy.report.centermiddleware.model.dto.QueryEnergyDataDTO;
-import com.persagy.apm.energy.report.centermiddleware.model.dto.QueryItemInfoDTO;
-import com.persagy.apm.energy.report.centermiddleware.model.vo.EnergyDataInfoVO;
-import com.persagy.apm.energy.report.centermiddleware.model.vo.EnergyItemInfoVO;
+import com.persagy.apm.energy.report.centermiddleware.model.dto.*;
+import com.persagy.apm.energy.report.centermiddleware.model.vo.*;
 import com.persagy.apm.energy.report.centermiddleware.service.ICenterMiddlewareWebService;
+import com.persagy.apm.energy.report.common.utils.DataUtils;
 import com.persagy.apm.energy.report.common.utils.DateUtils;
+import com.persagy.apm.energy.report.monthly.detail.common.model.vo.DateGraphItemVO;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
+import org.springframework.util.StringUtils;
 
 import java.util.*;
 
 @Service
+@Slf4j
 public class ICenterMiddlewareWebServiceImp implements ICenterMiddlewareWebService {
 
     @Autowired
     private CenterMiddlewareWebClient centerMiddlewareWebClient;
 
+    @Value("cooling.capacity")
+    String coolingCapacity;
+
+    @Value("power.consumption")
+    String powerConsumption;
+
     @Override
     public Map<String, String> getItemNameMap(QueryItemInfoDTO queryItemInfoDTO) {
         if (null == queryItemInfoDTO) {
@@ -62,4 +73,179 @@ public class ICenterMiddlewareWebServiceImp implements ICenterMiddlewareWebServi
         }
         return resultMap;
     }
+
+    @Override
+    public List<ProjectEERDataVo> getProjectEERDataList(List<String> pjIdList, String groupCode, Date reportDate) {
+        if (CollectionUtils.isEmpty(pjIdList) || StringUtils.isEmpty(groupCode) || null == reportDate) {
+            log.info("查询ProjectEERDataVo时参数为空,故不进行查询");
+            return new ArrayList<>();
+        }
+        List<ProjectEERDataVo> resultList = new ArrayList<>();
+        try {
+            for (String pjId : pjIdList) {
+                ProjectEERDataVo projectEERDataVo = new ProjectEERDataVo();
+                List<Date> dateList = DateUtils.getDayList(reportDate, DateUtils.getMonthOff(reportDate, 1));
+                List<String> coolClassCodeList = JSONObject.parseArray(coolingCapacity, String.class);
+                TreeMap<Date, Double> date_coolingCapacityMap = getDayCountData(pjId, groupCode, reportDate, "accCool", coolClassCodeList, dateList);
+                List<String> powerClassCodeList = JSONObject.parseArray(powerConsumption, String.class);
+                TreeMap<Date, Double> date_powerConsumptionMap = getDayCountData(pjId, groupCode, reportDate, "accElecConsum", powerClassCodeList, dateList);
+                List<DateGraphItemVO> dateGraphItemVOList = new ArrayList<>();
+                Double allCoolingCapacity = null;
+                Double allPowerConsumption = null;
+                for (Date date : dateList) {
+                    DateGraphItemVO dateGraphItemVO = new DateGraphItemVO();
+                    dateGraphItemVO.setDate(date);
+                    Double coolingCapacity = date_coolingCapacityMap.get(date);
+                    Double powerConsumption = date_powerConsumptionMap.get(date);
+                    Double eer = null;
+                    if (coolingCapacity != null && powerConsumption != null) {
+                        eer = coolingCapacity / powerConsumption;
+                        if (null == allCoolingCapacity) {
+                            allCoolingCapacity = 0.0;
+                        }
+                        allCoolingCapacity = allCoolingCapacity + coolingCapacity;
+                        if (null == allPowerConsumption) {
+                            allPowerConsumption = 0.0;
+                        }
+                        allPowerConsumption = allPowerConsumption + powerConsumption;
+                    }
+                    dateGraphItemVO.setValue(eer);
+                    dateGraphItemVOList.add(dateGraphItemVO);
+                }
+                Double allEer = null;
+                if (allCoolingCapacity != null && allPowerConsumption != null) {
+                    allEer = allCoolingCapacity / allPowerConsumption;
+                }
+                projectEERDataVo.setProjectId(pjId);
+                projectEERDataVo.setEer(allEer);
+                projectEERDataVo.setCoolingCapacityCurrentMonth(allCoolingCapacity);
+                projectEERDataVo.setEerDetailInfo(dateGraphItemVOList);
+                projectEERDataVo.setMaxEerTimeList(getMaxOrMinDateList(dateGraphItemVOList, -1));
+                projectEERDataVo.setMinEerTimeList(getMaxOrMinDateList(dateGraphItemVOList, 1));
+                resultList.add(projectEERDataVo);
+            }
+        } catch (Exception e) {
+            log.error("计算ProjectEERDataVo异常:", e);
+        }
+        return resultList;
+    }
+
+    private List<Date> getMaxOrMinDateList(List<DateGraphItemVO> dateGraphItemVOList, Integer orderType) {
+        Map<String, Integer> sortMap = new HashMap<>();
+        sortMap.put("value", orderType);
+        DataUtils.sort(dateGraphItemVOList, sortMap);
+        List<Date> resultList = new ArrayList<>();
+        Double maxOrMinData = null;
+        for (DateGraphItemVO vo : dateGraphItemVOList) {
+            if (vo.getValue() == null) {
+                continue;
+            }
+            if (maxOrMinData == null) {
+                maxOrMinData = vo.getValue();
+            } else if (maxOrMinData != vo.getValue()) {
+                break;
+            }
+            resultList.add(vo.getDate());
+        }
+        return resultList;
+    }
+
+    private TreeMap<Date, Double> getDayCountData(String pjId, String groupCode, Date reportDate, String infoCode, List<String> classCodeList, List<Date> dateList) {
+        List<String> objectIdList = getObjectIdList(pjId, groupCode, classCodeList);
+        if (!CollectionUtils.isEmpty(objectIdList)) {
+            TreeMap<Date, Double> date_dataMap = new TreeMap<>();
+            TreeMap<Date, Double> day_coolDataMap = getInfoCodePeriodDataCountMap(pjId, groupCode, objectIdList, reportDate, infoCode, "1d");
+            for (Date date : dateList) {
+                Double currentDayCoolData = day_coolDataMap.get(date);
+                Double nextDayCoolData = day_coolDataMap.get(DateUtils.getDayOff(date, 1));
+                if (currentDayCoolData != null && nextDayCoolData != null) {
+                    date_dataMap.put(date, nextDayCoolData - currentDayCoolData);
+                } else {
+                    date_dataMap.put(date, null);
+                }
+            }
+            return date_dataMap;
+        }
+        return new TreeMap<>();
+    }
+
+    private List<String> getObjectIdList(String pjId, String groupCode, List<String> classCodeList) {
+        if (StringUtils.isEmpty(pjId) || StringUtils.isEmpty(groupCode) || CollectionUtils.isEmpty(classCodeList)) {
+            log.info("查询中台对象信息时参数为空,故不进行查询");
+            return new ArrayList<>();
+        }
+        List<String> resultList = new ArrayList<>();
+        try {
+            QueryObjectInfoDTO queryObjectInfoDTO = new QueryObjectInfoDTO();
+            queryObjectInfoDTO.setProjectId(pjId);
+            queryObjectInfoDTO.setGroupCode(groupCode);
+            Criteria criteria = new Criteria();
+            criteria.setClassCode(classCodeList);
+            queryObjectInfoDTO.setCriteria(criteria);
+            PoemsFeignResponse<ObjectInfoVO> response = centerMiddlewareWebClient.getObjectInfo(queryObjectInfoDTO);
+            List<ObjectInfoVO> objectInfoVOList = response.getContent();
+            if (!CollectionUtils.isEmpty(objectInfoVOList)) {
+                for (ObjectInfoVO vo : objectInfoVOList) {
+                    resultList.add(vo.getId());
+                }
+            }
+        } catch (Exception e) {
+            log.error("查询中台对象信息时异常:", e);
+        }
+        return resultList;
+    }
+
+    private TreeMap<Date, Double> getInfoCodePeriodDataCountMap(String pjId, String groupCode, List<String> objectIdList, Date reportDate, String infoCode, String period) {
+        if (StringUtils.isEmpty(pjId) || StringUtils.isEmpty(groupCode) || CollectionUtils.isEmpty(objectIdList) || null == reportDate) {
+            log.info("查询历史数据时参数为空,故不进行查询");
+            return new TreeMap<>();
+        }
+        TreeMap<Date, Double> dataMap = new TreeMap<>();
+        try {
+            BatchQueryPeriodDataDTO batchQueryPeriodDataDTO = new BatchQueryPeriodDataDTO();
+            batchQueryPeriodDataDTO.setProjectId(pjId);
+            batchQueryPeriodDataDTO.setGroupCode(groupCode);
+            List<CriteriasObjDTO> criteriasObjDTOList = new ArrayList<>();
+            Map receivetime = new HashMap();
+            String startTime = DateUtils.date2Str(reportDate, DateUtils.SDFSECOND);
+            String endTime = DateUtils.date2Str(DateUtils.getDayOff(DateUtils.getMonthOff(reportDate, 1), 1), DateUtils.SDFSECOND);
+            receivetime.put("$gte", startTime);
+            receivetime.put("$lt", endTime);
+            for (String objectId : objectIdList) {
+                CriteriasObjDTO dto = new CriteriasObjDTO();
+                dto.setId(objectId);
+                dto.setCode(infoCode);
+                dto.setInterpolation(true);
+                dto.setPeriod(period);
+                dto.setReceivetime(receivetime);
+                criteriasObjDTOList.add(dto);
+            }
+            batchQueryPeriodDataDTO.setCriterias(criteriasObjDTOList);
+            PoemsFeignResponse<PoemsFeignResponse<PeriodDataInfoVO>> response = centerMiddlewareWebClient.getPeriodDataInfo(batchQueryPeriodDataDTO);
+            List<PoemsFeignResponse<PeriodDataInfoVO>> responseList = response.getContent();
+            if (!CollectionUtils.isEmpty(responseList)) {
+                for (PoemsFeignResponse<PeriodDataInfoVO> responseVo : responseList) {
+                    List<PeriodDataInfoVO> periodDataInfoVOList = responseVo.getContent();
+                    if (CollectionUtils.isEmpty(periodDataInfoVOList)) {
+                        continue;
+                    }
+                    for (PeriodDataInfoVO vo : periodDataInfoVOList) {
+                        if (null == vo.getData_value() || StringUtils.isEmpty(vo.getData_time())) {
+                            continue;
+                        }
+                        Double data = dataMap.get(DateUtils.str2Date(vo.getData_time(), DateUtils.SDF_SECOND));
+                        if (null == data) {
+                            data = 0.0;
+                        }
+                        data = data + vo.getData_value();
+                        dataMap.put(DateUtils.str2Date(vo.getData_time(), DateUtils.SDF_SECOND), data);
+                    }
+                }
+            }
+        } catch (Exception e) {
+            log.error("查询中台对象信息时异常:", e);
+        }
+        return dataMap;
+    }
+
 }

+ 2 - 1
src/main/java/com/persagy/apm/energy/report/common/service/CommonService.java

@@ -95,8 +95,9 @@ public interface CommonService {
      *
      * @param projectId  项目id
      * @param reportDate 报告月
+     * @param pjIdList   项目id列表
      * @return
      */
-    HotelProjectChillerPlantEfficiency getHotelProjectChillerPlantEfficiency(String projectId, Date reportDate);
+    HotelProjectChillerPlantEfficiency getHotelProjectChillerPlantEfficiency(String projectId, Date reportDate, List<String> pjIdList);
 
 }

+ 49 - 1
src/main/java/com/persagy/apm/energy/report/common/service/impl/CommonServiceImpl.java

@@ -2,6 +2,8 @@ package com.persagy.apm.energy.report.common.service.impl;
 
 import com.persagy.apm.common.model.dto.PoemsPuser;
 import com.persagy.apm.common.response.PoemsFeignResponse;
+import com.persagy.apm.energy.report.centermiddleware.model.vo.ProjectEERDataVo;
+import com.persagy.apm.energy.report.centermiddleware.service.ICenterMiddlewareWebService;
 import com.persagy.apm.energy.report.common.DataConstants;
 import com.persagy.apm.energy.report.common.dto.QueryPlatformParamDTO;
 import com.persagy.apm.energy.report.common.service.CommonService;
@@ -83,6 +85,9 @@ public class CommonServiceImpl implements CommonService {
     @Autowired
     EMSWeatherWebService emsWeatherWebService;
 
+    @Autowired
+    ICenterMiddlewareWebService iCenterMiddlewareWebService;
+
     @Override
     public List<String> getPjNameByPjId(List<String> pjIdList) {
         if (CollectionUtils.isEmpty(pjIdList)) {
@@ -367,7 +372,7 @@ public class CommonServiceImpl implements CommonService {
     }
 
     @Override
-    public HotelProjectChillerPlantEfficiency getHotelProjectChillerPlantEfficiency(String projectId, Date reportDate) {
+    public HotelProjectChillerPlantEfficiency getHotelProjectChillerPlantEfficiency(String projectId, Date reportDate, List<String> pjIdList) {
         if (StringUtils.isEmpty(projectId) || null == reportDate) {
             log.info("获取HotelProjectChillerPlantEfficiency信息时传入参为空,故不进行查询");
             return new HotelProjectChillerPlantEfficiency();
@@ -383,6 +388,49 @@ public class CommonServiceImpl implements CommonService {
             avgTempGrowth = avgTempCurrentMonth = avgTempLastYearMonth;
         }
         hotelProjectChillerPlantEfficiency.setAverageTemperatureGrowth(avgTempGrowth);
+        List<ProjectEERDataVo> projectEERDataVoList = iCenterMiddlewareWebService.getProjectEERDataList(pjIdList, groupCode, reportDate);
+        Map<String, Integer> sortMap = new HashMap<>();
+        sortMap.put("eer", -1);
+        DataUtils.sort(projectEERDataVoList, sortMap);
+        for (int i = 0; i < projectEERDataVoList.size(); i++) {
+            ProjectEERDataVo vo = projectEERDataVoList.get(0);
+            if (!vo.getProjectId().equals(projectId)) {
+                continue;
+            }
+            hotelProjectChillerPlantEfficiency.setEer(vo.getEer());
+            hotelProjectChillerPlantEfficiency.setMaxEerTime(vo.getMaxEerTimeList());
+            hotelProjectChillerPlantEfficiency.setMinEerTime(vo.getMinEerTimeList());
+            hotelProjectChillerPlantEfficiency.setCoolingCapacityCurrentMonth(vo.getCoolingCapacityCurrentMonth());
+            hotelProjectChillerPlantEfficiency.setEerDetailInfo(vo.getEerDetailInfo());
+            hotelProjectChillerPlantEfficiency.setRankWithinClimateZone(i + 1);
+        }
+        hotelProjectChillerPlantEfficiency.setProjectNumWithinClimateZone(pjIdList.size());
+        List<String> currentProjectIdList = new ArrayList<>();
+        currentProjectIdList.add(projectId);
+        List<ProjectEERDataVo> currentPjLastYearEERDataVoList = iCenterMiddlewareWebService.getProjectEERDataList(currentProjectIdList, groupCode, DateUtils.getYearOff(reportDate, -1));
+        ProjectEERDataVo currentPjLastYearEERDataVo = currentPjLastYearEERDataVoList.get(0);
+        if (currentPjLastYearEERDataVo != null) {
+            hotelProjectChillerPlantEfficiency.setCoolingCapacityLastYearSameTime(currentPjLastYearEERDataVo.getCoolingCapacityCurrentMonth());
+            Double currentMonth = hotelProjectChillerPlantEfficiency.getCoolingCapacityCurrentMonth();
+            Double lastYearSameMonth = currentPjLastYearEERDataVo.getCoolingCapacityCurrentMonth();
+            Double coolingCapacityRange = null;
+            if (lastYearSameMonth != null && lastYearSameMonth != 0.0 && currentMonth != null) {
+                coolingCapacityRange = (currentMonth - lastYearSameMonth) / lastYearSameMonth * 100;
+            }
+            hotelProjectChillerPlantEfficiency.setCoolingCapacityRange(coolingCapacityRange);
+        }
+        List<ProjectEERDataVo> currentPjLastMonthEERDataVoList = iCenterMiddlewareWebService.getProjectEERDataList(currentProjectIdList, groupCode, DateUtils.getYearOff(reportDate, -1));
+        ProjectEERDataVo currentPjLastMonthEERDataVo = currentPjLastMonthEERDataVoList.get(0);
+        if (currentPjLastMonthEERDataVo != null) {
+            hotelProjectChillerPlantEfficiency.setEerLastMonth(currentPjLastMonthEERDataVo.getEer());
+            Double currentMonth = hotelProjectChillerPlantEfficiency.getEer();
+            Double lastMonth = currentPjLastMonthEERDataVo.getEer();
+            Double eerMonthRange = null;
+            if (lastMonth != null && lastMonth != 0.0 && currentMonth != null) {
+                eerMonthRange = (currentMonth - lastMonth) / lastMonth * 100;
+            }
+            hotelProjectChillerPlantEfficiency.setEerMonthRange(eerMonthRange);
+        }
         return hotelProjectChillerPlantEfficiency;
     }
 

+ 9 - 0
src/main/java/com/persagy/apm/energy/report/common/utils/DateUtils.java

@@ -219,6 +219,15 @@ public class DateUtils {
         return (double) diff / nh;
     }
 
+    public static List<Date> getDayList(Date startDate, Date endDate) throws Exception {
+        List<Date> resultList = new ArrayList<>();
+        while (startDate.before(endDate)) {
+            resultList.add(startDate);
+            startDate = getDayOff(startDate, 1);
+        }
+        return resultList;
+    }
+
     /**
      * date转换为localDate
      *

+ 2 - 2
src/main/java/com/persagy/apm/energy/report/monthly/detail/hotel/project/model/vo/HotelProjectChillerPlantEfficiency.java

@@ -27,9 +27,9 @@ public class HotelProjectChillerPlantEfficiency extends HotelRankVO {
     @ApiModelProperty(value = "eer环比涨幅")
     private Double eerMonthRange;
     @ApiModelProperty(value = "最高eer发生时间")
-    private Date maxEerTime;
+    private List<Date> maxEerTime;
     @ApiModelProperty(value = "最低eer发生时间")
-    private Date minEerTime;
+    private List<Date> minEerTime;
     @ApiModelProperty(value = "本月平均温度")
     private Double averageTemperatureCurrentMonth;
     @ApiModelProperty(value = "去年同期平均温度")

+ 3 - 1
src/main/java/com/persagy/apm/energy/report/monthly/outline/service/builder/hotel/impl/HotelProjectReportBuilder.java

@@ -173,8 +173,10 @@ public class HotelProjectReportBuilder extends ReportBuilder implements IHotelPr
 
     @Override
     public HotelProjectChillerPlantEfficiency getChillerPlanEfficiency(ReportOutline reportOutline) {
+        String buildingType = reportOutlineService.getBuildingType(reportOutline);
+        List<String> projectIdsInSameClimateZone = getProjectIdsInSameClimateZone(reportOutline.getBelong(), buildingType);
         return commonService.getHotelProjectChillerPlantEfficiency(
-                reportOutline.getBelong(), reportOutline.getReportMonth());
+                reportOutline.getBelong(), reportOutline.getReportMonth(), projectIdsInSameClimateZone);
     }
 
     @Override