Selaa lähdekoodia

Merge branch 'dev-v1.0.0-jd' of http://39.106.8.246:3003/apm/energy-report into dev-v1.0.0-jd

lixing 3 vuotta sitten
vanhempi
commit
ad58efcfd6
18 muutettua tiedostoa jossa 475 lisäystä ja 25 poistoa
  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. 70 10
      src/main/java/com/persagy/apm/energy/report/common/service/impl/CommonServiceImpl.java
  13. 14 2
      src/main/java/com/persagy/apm/energy/report/common/utils/DataUtils.java
  14. 9 0
      src/main/java/com/persagy/apm/energy/report/common/utils/DateUtils.java
  15. 2 2
      src/main/java/com/persagy/apm/energy/report/monthly/detail/hotel/project/model/vo/HotelProjectChillerPlantEfficiency.java
  16. 3 1
      src/main/java/com/persagy/apm/energy/report/monthly/outline/service/builder/hotel/impl/HotelProjectReportBuilder.java
  17. 2 1
      src/main/java/com/persagy/apm/energy/report/workorder/service/IWorkOrderWebService.java
  18. 13 4
      src/main/java/com/persagy/apm/energy/report/workorder/service/impl/IWorkOrderWebServiceImpl.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);
 
 }

+ 70 - 10
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)) {
@@ -143,13 +148,13 @@ public class CommonServiceImpl implements CommonService {
         }
         Integer workCount = null;
         Integer dealCount = null;
-        List<WorkOrder> askEndTimeList = iWorkOrderWebService.getWorkOrderNumByParam(projectId, reportDate, "ask_end_time", null);
+        List<WorkOrder> askEndTimeList = iWorkOrderWebService.getWorkOrderNumByParam(projectId, reportDate, "ask_end_time", null, "8");
         if (null != askEndTimeList) {
-            workCount = askEndTimeList.size();
+            dealCount = askEndTimeList.size();
         }
-        List<WorkOrder> createTimeWorkList = iWorkOrderWebService.getWorkOrderNumByParam(projectId, reportDate, "create_time", null);
+        List<WorkOrder> createTimeWorkList = iWorkOrderWebService.getWorkOrderNumByParam(projectId, reportDate, "create_time", null, null);
         if (null != createTimeWorkList) {
-            dealCount = createTimeWorkList.size();
+            workCount = createTimeWorkList.size();
         }
         Double completeRate = null;
         if (null != workCount && workCount != 0 && null != dealCount) {
@@ -193,7 +198,9 @@ public class CommonServiceImpl implements CommonService {
                 if (!hotelProjectKpiItem.getProjectId().equals(projectId)) {
                     continue;
                 }
-                hotelProjectKpiItem.setRankWithinClimateZone(i + 1);
+                if (hotelProjectKpiItem.getControlRates() != null) {
+                    hotelProjectKpiItem.setRankWithinClimateZone(i + 1);
+                }
                 hotelProjectKpiItem.setName(function.getName());
                 return hotelProjectKpiItem;
             }
@@ -276,7 +283,10 @@ public class CommonServiceImpl implements CommonService {
             }
             hotelProjectMaintenanceInfo.setBreakCount(vo.getAlarmCount());
             hotelProjectMaintenanceInfo.setBreakLostTime(vo.getTotalDuration());
-            hotelProjectMaintenanceInfo.setRankWithinClimateZone(i + 1);
+            if (vo.getAlarmCount() != null) {
+                hotelProjectMaintenanceInfo.setRankWithinClimateZone(i + 1);
+            }
+            break;
         }
         hotelProjectMaintenanceInfo.setProjectNumWithinClimateZone(projectIdList.size());
         hotelProjectMaintenanceInfo.setGraphs(hotelProjectMaintenanceGraphList);
@@ -291,12 +301,12 @@ public class CommonServiceImpl implements CommonService {
         }
         HotelProjectEnergyWorkerOrderInfo hotelProjectEnergyWorkerOrderInfo = new HotelProjectEnergyWorkerOrderInfo();
         try {
-            List<WorkOrder> createTimeWorkList = iWorkOrderWebService.getWorkOrderNumByParam(projectId, reportDate, "create_time", workOrderType);
+            List<WorkOrder> createTimeWorkList = iWorkOrderWebService.getWorkOrderNumByParam(projectId, reportDate, "create_time", workOrderType, null);
             Integer totalCount = null;
             if (null != createTimeWorkList) {
                 totalCount = createTimeWorkList.size();
             }
-            List<WorkOrder> realFinishTimeWorkList = iWorkOrderWebService.getWorkOrderNumByParam(projectId, reportDate, "real_finish_time", workOrderType);
+            List<WorkOrder> realFinishTimeWorkList = iWorkOrderWebService.getWorkOrderNumByParam(projectId, reportDate, "real_finish_time", workOrderType, null);
             Integer executeCount = null;
             if (null != realFinishTimeWorkList) {
                 executeCount = realFinishTimeWorkList.size();
@@ -308,7 +318,7 @@ public class CommonServiceImpl implements CommonService {
                 executePercent = DataUtils.parseDouble(executeCount) / totalCount * 100;
             }
             hotelProjectEnergyWorkerOrderInfo.setExecutePercent(executePercent);
-            List<WorkOrder> energySaveRealFinishTimeWorkList = iWorkOrderWebService.getWorkOrderNumByParam(projectId, reportDate, "real_finish_time", energySaveWorkOrderType);
+            List<WorkOrder> energySaveRealFinishTimeWorkList = iWorkOrderWebService.getWorkOrderNumByParam(projectId, reportDate, "real_finish_time", energySaveWorkOrderType, null);
             Integer initiativeCount = null;
             if (null != energySaveRealFinishTimeWorkList) {
                 initiativeCount = energySaveRealFinishTimeWorkList.size();
@@ -367,7 +377,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 +393,56 @@ 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());
+            if (vo.getEer() != null) {
+                hotelProjectChillerPlantEfficiency.setRankWithinClimateZone(i + 1);
+            }
+            break;
+        }
+        hotelProjectChillerPlantEfficiency.setProjectNumWithinClimateZone(pjIdList.size());
+        List<String> currentProjectIdList = new ArrayList<>();
+        currentProjectIdList.add(projectId);
+        List<ProjectEERDataVo> currentPjLastYearEERDataVoList = iCenterMiddlewareWebService.getProjectEERDataList(currentProjectIdList, groupCode, DateUtils.getYearOff(reportDate, -1));
+        if (!CollectionUtils.isEmpty(currentPjLastYearEERDataVoList)) {
+            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));
+        if (!CollectionUtils.isEmpty(currentPjLastMonthEERDataVoList)) {
+            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;
     }
 

+ 14 - 2
src/main/java/com/persagy/apm/energy/report/common/utils/DataUtils.java

@@ -178,7 +178,13 @@ public class DataUtils {
                             v2 = (Comparable) pd2.getReadMethod().invoke(o2);
                         }
                         if (entry.getValue() == 1) {
-                            if (v1 instanceof String) {
+                            if (v1 == null && v2 != null) {
+                                sort = -1;
+                            } else if (v1 != null && v2 == null) {
+                                sort = 1;
+                            } else if (v1 == null && v2 == null) {
+                                sort = 1;
+                            } else if (v1 instanceof String) {
                                 sort = CHINA_COLLATOR.compare(v1, v2);
                             } else {
                                 if (v1.compareTo(v2) > 0) {
@@ -188,7 +194,13 @@ public class DataUtils {
                                 }
                             }
                         } else {
-                            if (v1 instanceof String) {
+                            if (v1 == null && v2 != null) {
+                                sort = 1;
+                            } else if (v1 != null && v2 == null) {
+                                sort = -1;
+                            } else if (v1 == null && v2 == null) {
+                                sort = -1;
+                            } else if (v1 instanceof String) {
                                 sort = CHINA_COLLATOR.compare(v2, v1);
                             } else {
                                 if (v1.compareTo(v2) > 0) {

+ 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

+ 2 - 1
src/main/java/com/persagy/apm/energy/report/workorder/service/IWorkOrderWebService.java

@@ -15,8 +15,9 @@ public interface IWorkOrderWebService {
      * @param projectId  项目id
      * @param reportDate 报告日期
      * @param timeType   查询类型
+     * @param orderState 工单状态
      * @author wch
      * @version V1.0 2021/5/19 4:04 下午
      */
-    List<WorkOrder> getWorkOrderNumByParam(String projectId, Date reportDate, String timeType, String orderType);
+    List<WorkOrder> getWorkOrderNumByParam(String projectId, Date reportDate, String timeType, String orderType, String orderState);
 }

+ 13 - 4
src/main/java/com/persagy/apm/energy/report/workorder/service/impl/IWorkOrderWebServiceImpl.java

@@ -26,17 +26,17 @@ public class IWorkOrderWebServiceImpl implements IWorkOrderWebService {
     private WorkOrderRepository workOrderRepository;
 
     @Override
-    public List<WorkOrder> getWorkOrderNumByParam(String projectId, Date reportDate, String timeType, String orderType) {
+    public List<WorkOrder> getWorkOrderNumByParam(String projectId, Date reportDate, String timeType, String orderType, String orderState) {
         try {
             String startTime = DateUtils.date2Str(reportDate, DateUtils.SDFSECOND);
             String endTime = DateUtils.date2Str(DateUtils.getMonthOff(reportDate, 1), DateUtils.SDFSECOND);
-            BoolQueryBuilder queryOrderNumBuilder = createQueryParam(projectId, timeType, startTime, endTime, orderType);
+            BoolQueryBuilder queryOrderNumBuilder = createQueryParam(projectId, timeType, startTime, endTime, orderType, orderState);
             NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
             nativeSearchQueryBuilder.withQuery(queryOrderNumBuilder);
             NativeSearchQuery query = nativeSearchQueryBuilder.build();
             Page<WorkOrder> resultList = workOrderRepository.search(query);
             if (null != resultList && resultList.getSize() != 0) {
-                return (List<WorkOrder>) resultList;
+                return  resultList.getContent();
             }
         } catch (Exception e) {
             e.printStackTrace();
@@ -44,7 +44,7 @@ public class IWorkOrderWebServiceImpl implements IWorkOrderWebService {
         return new ArrayList<>();
     }
 
-    private BoolQueryBuilder createQueryParam(String pjId, String timeType, String startTime, String endTime, String orderType) {
+    private BoolQueryBuilder createQueryParam(String pjId, String timeType, String startTime, String endTime, String orderType, String orderState) {
         BoolQueryBuilder queryBuilder = QueryBuilders.boolQuery();
         queryBuilder.must(QueryBuilders.matchQuery("project_id", pjId));
         //时间查询
@@ -54,6 +54,8 @@ public class IWorkOrderWebServiceImpl implements IWorkOrderWebService {
                     queryBuilder.must(QueryBuilders.rangeQuery("create_time").gte(startTime));
                 } else if ("ask_end_time".equals(timeType)) {
                     queryBuilder.must(QueryBuilders.rangeQuery("ask_end_time").gte(startTime));
+                } else if ("real_finish_time".equals(timeType)) {
+                    queryBuilder.must(QueryBuilders.rangeQuery("real_finish_time").gte(startTime));
                 }
             }
             if (StringUtils.isNotBlank(endTime)) {
@@ -61,6 +63,8 @@ public class IWorkOrderWebServiceImpl implements IWorkOrderWebService {
                     queryBuilder.must(QueryBuilders.rangeQuery("create_time").lt(endTime));
                 } else if ("ask_end_time".equals(timeType)) {
                     queryBuilder.must(QueryBuilders.rangeQuery("ask_end_time").lt(endTime));
+                } else if ("real_finish_time".equals(timeType)) {
+                    queryBuilder.must(QueryBuilders.rangeQuery("real_finish_time").lt(endTime));
                 }
             }
         }
@@ -68,6 +72,11 @@ public class IWorkOrderWebServiceImpl implements IWorkOrderWebService {
             List<String> orderTypeList = JSONObject.parseArray(orderType, String.class);
             queryBuilder.must(QueryBuilders.termsQuery("order_type", orderTypeList));
         }
+
+        if (StringUtils.isNotEmpty(orderState)) {
+            queryBuilder.must(QueryBuilders.matchQuery("order_state", orderState));
+        }
+
         return queryBuilder;
     }