浏览代码

生成报告代码开发

lixing 3 年之前
父节点
当前提交
28e8138a7a

+ 33 - 0
src/main/java/com/persagy/apm/energy/report/centermiddleware/constant/enums/TimeTypeEnum.java

@@ -0,0 +1,33 @@
+package com.persagy.apm.energy.report.centermiddleware.constant.enums;
+
+import com.persagy.apm.common.model.annotation.SwaggerDisplayEnum;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 时间类型
+ *
+ * @author lixing
+ * @version V1.0 2021/5/17 10:51 上午
+ */
+@SwaggerDisplayEnum
+public enum TimeTypeEnum {
+    /**
+     * 时间类型
+     */
+    HOUR(1, "时"),
+    DAY(2, "天"),
+    MONTH(3, "月");
+
+    @Setter
+    @Getter
+    private Integer type;
+    @Setter
+    @Getter
+    private String desc;
+
+    TimeTypeEnum(Integer type, String desc) {
+        this.type = type;
+        this.desc = desc;
+    }
+}

+ 1 - 1
src/main/java/com/persagy/apm/energy/report/centermiddleware/model/dto/QueryEnergyDataDTO.java

@@ -24,7 +24,7 @@ public class QueryEnergyDataDTO extends PoemsFeignBaseDTO {
     private String startDate;
     @ApiModelProperty("结束时间")
     private String endDate;
-    @ApiModelProperty("查询数据类型1-时 2-天 3-月")
+    @ApiModelProperty(value = "查询数据类型", notes = "com.persagy.apm.energy.report.centermiddleware.constant.enums.TimeTypeEnum")
     private Integer timeType;
 
 }

+ 3 - 2
src/main/java/com/persagy/apm/energy/report/centermiddleware/service/ICenterMiddlewareWebService.java

@@ -4,6 +4,7 @@ import com.persagy.apm.energy.report.centermiddleware.model.dto.QueryEnergyDataD
 import com.persagy.apm.energy.report.centermiddleware.model.dto.QueryItemInfoDTO;
 import io.swagger.annotations.Api;
 
+import java.util.Date;
 import java.util.Map;
 import java.util.TreeMap;
 
@@ -17,7 +18,7 @@ public interface ICenterMiddlewareWebService {
      * @author wch
      * @version V1.0 2021/5/19 4:04 下午
      */
-    Map getItemNameMap(QueryItemInfoDTO queryItemInfoDTO);
+    Map<String, String> getItemNameMap(QueryItemInfoDTO queryItemInfoDTO);
 
     /**
      * 获取分项能耗数据
@@ -27,6 +28,6 @@ public interface ICenterMiddlewareWebService {
      * @author wch
      * @version V1.0 2021/5/19 4:04 下午
      */
-    Map<String, TreeMap> getItemEnergyDataMap(QueryEnergyDataDTO queryEnergyDataDTO);
+    Map<String, TreeMap<Date, Double>> getItemEnergyDataMap(QueryEnergyDataDTO queryEnergyDataDTO);
 
 }

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

@@ -12,10 +12,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
+import java.util.*;
 
 @Service
 public class ICenterMiddlewareWebServiceImp implements ICenterMiddlewareWebService {
@@ -24,7 +21,7 @@ public class ICenterMiddlewareWebServiceImp implements ICenterMiddlewareWebServi
     private CenterMiddlewareWebClient centerMiddlewareWebClient;
 
     @Override
-    public Map getItemNameMap(QueryItemInfoDTO queryItemInfoDTO) {
+    public Map<String, String> getItemNameMap(QueryItemInfoDTO queryItemInfoDTO) {
         if (null == queryItemInfoDTO) {
             return new HashMap<>();
         }
@@ -33,7 +30,7 @@ public class ICenterMiddlewareWebServiceImp implements ICenterMiddlewareWebServi
         if (CollectionUtils.isEmpty(energyItemInfoVOList)) {
             return new HashMap<>();
         }
-        Map resultMap = new HashMap<>();
+        Map<String, String> resultMap = new HashMap<>();
         for (EnergyItemInfoVO energyItemInfoVO : energyItemInfoVOList) {
             resultMap.put(energyItemInfoVO.getItemId(), energyItemInfoVO.getItemName());
         }
@@ -41,7 +38,7 @@ public class ICenterMiddlewareWebServiceImp implements ICenterMiddlewareWebServi
     }
 
     @Override
-    public Map<String, TreeMap> getItemEnergyDataMap(QueryEnergyDataDTO queryEnergyDataDTO) {
+    public Map<String, TreeMap<Date, Double>> getItemEnergyDataMap(QueryEnergyDataDTO queryEnergyDataDTO) {
         if (null == queryEnergyDataDTO) {
             return new HashMap<>();
         }
@@ -50,15 +47,15 @@ public class ICenterMiddlewareWebServiceImp implements ICenterMiddlewareWebServi
         if (CollectionUtils.isEmpty(energyDataInfoVOList)) {
             return new HashMap<>();
         }
-        Map<String, TreeMap> resultMap = new HashMap<>();
+        Map<String, TreeMap<Date, Double>> resultMap = new HashMap<>();
         try {
             for (EnergyDataInfoVO energyDataInfoVO : energyDataInfoVOList) {
-                TreeMap date_dataMap = resultMap.get(energyDataInfoVO.getItemId());
-                if (null == date_dataMap) {
-                    date_dataMap = new TreeMap<>();
+                TreeMap<Date, Double> dateDataMap = resultMap.get(energyDataInfoVO.getItemId());
+                if (null == dateDataMap) {
+                    dateDataMap = new TreeMap<>();
                 }
-                date_dataMap.put(DateUtils.str2Date(energyDataInfoVO.getTime(), DateUtils.SDF_SECOND), energyDataInfoVO.getData());
-                resultMap.put(energyDataInfoVO.getItemId(), date_dataMap);
+                dateDataMap.put(DateUtils.str2Date(energyDataInfoVO.getTime(), DateUtils.SDF_SECOND), energyDataInfoVO.getData());
+                resultMap.put(energyDataInfoVO.getItemId(), dateDataMap);
             }
         } catch (Exception e) {
             e.printStackTrace();

+ 2 - 1
src/main/java/com/persagy/apm/energy/report/common/utils/DateUtils.java

@@ -30,7 +30,7 @@ public class DateUtils {
      * @return
      * @throws Exception
      */
-    public static String date2Str(Date date, String pattern) throws Exception {
+    public static String date2Str(Date date, String pattern) {
         SimpleDateFormat sdf = new SimpleDateFormat(pattern);
         return sdf.format(date);
     }
@@ -141,6 +141,7 @@ public class DateUtils {
 
     /**
      * 获取某一天的开始时间 即2017-01-01 00:00:00
+     *
      * @param date 时间参数
      * @return
      * @throws ParseException

+ 1 - 1
src/main/java/com/persagy/apm/energy/report/monthly/outline/constants/enums/BusinessReportParagraphs.java

@@ -1,4 +1,4 @@
-package com.persagy.apm.energy.report.monthly.outline.constants.enums;
+package com.persagy.apm.energy.report.monthly.outline.constants;
 
 /**
  * 商业报告段落

+ 91 - 15
src/main/java/com/persagy/apm/energy/report/monthly/outline/service/impl/GenerateReportThreadPool.java

@@ -1,6 +1,11 @@
 package com.persagy.apm.energy.report.monthly.outline.service.impl;
 
 import cn.hutool.core.thread.ExecutorBuilder;
+import com.persagy.apm.energy.report.centermiddleware.constant.enums.TimeTypeEnum;
+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.service.ICenterMiddlewareWebService;
+import com.persagy.apm.energy.report.common.utils.DateUtils;
 import com.persagy.apm.energy.report.monthly.config.function.model.Function;
 import com.persagy.apm.energy.report.monthly.config.function.service.IFunctionService;
 import com.persagy.apm.energy.report.monthly.config.functiongroup.model.FunctionGroup;
@@ -11,6 +16,7 @@ import com.persagy.apm.energy.report.monthly.config.rel.typefunction.service.IRe
 import com.persagy.apm.energy.report.monthly.config.rel.typefunctiongroup.model.ReportTypeFunctionGroupRel;
 import com.persagy.apm.energy.report.monthly.config.rel.typefunctiongroup.model.dto.QueryReportTypeFunctionGroupRelDTO;
 import com.persagy.apm.energy.report.monthly.config.rel.typefunctiongroup.service.IReportTypeFunctionGroupRelService;
+import com.persagy.apm.energy.report.monthly.config.type.constant.enums.BelongTypeEnum;
 import com.persagy.apm.energy.report.monthly.config.type.constant.enums.BuildingTypeEnum;
 import com.persagy.apm.energy.report.monthly.config.type.model.ReportType;
 import com.persagy.apm.energy.report.monthly.config.type.service.IReportTypeService;
@@ -20,17 +26,19 @@ import com.persagy.apm.energy.report.monthly.detail.business.model.vo.GroupInfo;
 import com.persagy.apm.energy.report.monthly.detail.business.model.vo.PowerItemVO;
 import com.persagy.apm.energy.report.monthly.detail.business.service.IReportBusinessDetailService;
 import com.persagy.apm.energy.report.monthly.functionvalue.service.IFunctionValueService;
-import com.persagy.apm.energy.report.monthly.outline.constants.enums.BusinessReportParagraphs;
+import com.persagy.apm.energy.report.monthly.outline.constants.BusinessReportParagraphs;
 import com.persagy.apm.energy.report.monthly.outline.constants.enums.ReportStateEnum;
 import com.persagy.apm.energy.report.monthly.outline.model.ReportOutline;
+import com.persagy.apm.energy.report.saasweb.model.vo.PoemsProjectVO;
+import com.persagy.apm.energy.report.saasweb.model.vo.SimpleProjectVO;
+import com.persagy.apm.energy.report.saasweb.service.ISaasWebService;
 import lombok.extern.slf4j.Slf4j;
 import org.assertj.core.util.Lists;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.LinkedBlockingQueue;
 import java.util.concurrent.ThreadPoolExecutor;
@@ -60,7 +68,9 @@ public class GenerateReportThreadPool {
     @Autowired
     private IFunctionValueService functionValueService;
     @Autowired
-    private
+    private ICenterMiddlewareWebService centerMiddlewareWebService;
+    @Autowired
+    private ISaasWebService saasWebService;
 
     private final ExecutorService es;
 
@@ -113,15 +123,31 @@ public class GenerateReportThreadPool {
         String reportTypeId = reportOutline.getReportTypeId();
         Date reportMonth = reportOutline.getReportMonth();
 
+        ReportType reportType = reportTypeService.queryReportTypeDetail(reportTypeId);
+        String belongType = reportType.getBelongType();
+
+        List<String> projectIds = new ArrayList<>();
+        if (BelongTypeEnum.PROJECT.getType().equals(belongType)) {
+            projectIds.add(reportOutline.getBelong());
+        } else {
+            String areaId = reportOutline.getBelong();
+            // 获取区域下的项目
+            List<PoemsProjectVO> projectsByArea = saasWebService.getProjectsByArea(areaId);
+            if (!CollectionUtils.isEmpty(projectsByArea)) {
+                projectIds.addAll(projectsByArea.stream().map(
+                        PoemsProjectVO::getProjectId).collect(Collectors.toList()));
+            }
+        }
+
         // 获取在营项目用电量下拥有的信息点分组和信息点
         List<String> groupIdList = getGroupsByParagraph(
                 reportTypeId, BusinessReportParagraphs.OPEN_POWER);
 
-        openPower.setGroups(getPowerGroupInfos(groupIdList, reportMonth));
+        openPower.setGroups(getPowerGroupInfos(groupIdList, reportMonth, projectIds));
 
         List<String> functionIdList = getFunctionsByParagraph(
                 reportTypeId, BusinessReportParagraphs.OPEN_POWER);
-        openPower.setItems(getPowerItemInfos(functionIdList, reportMonth));
+        openPower.setItems(getPowerItemInfos(functionIdList, reportMonth, projectIds));
         // TODO: 2021/5/24 计算统计值
         // openPower.setSummary();
         return openPower;
@@ -131,24 +157,42 @@ public class GenerateReportThreadPool {
      * 获取用电量条目信息
      *
      * @param functionIdList 用电量条目列表
-     * @param reportMonth 报告月份
+     * @param reportMonth    报告月份
      * @return 用电量条目列表
      * @author lixing
      * @version V1.0 2021/5/24 7:15 下午
      */
-    private List<PowerItemVO> getPowerItemInfos(List<String> functionIdList, Date reportMonth) {
+    private List<PowerItemVO> getPowerItemInfos(List<String> functionIdList, Date reportMonth, List<String> projectIds) {
         List<PowerItemVO> powerItemVOList = Lists.newArrayList();
-        if (CollectionUtils.isEmpty(functionIdList)) {
+        if (CollectionUtils.isEmpty(functionIdList) || CollectionUtils.isEmpty(projectIds)) {
             return powerItemVOList;
         }
+
         for (String functionId : functionIdList) {
             Function function = functionService.queryFunctionDetail(functionId);
-            String itemId = function.getItemId();
-            // TODO: 2021/5/24 获取条目名称
-            String itemName = "";
+            String itemName = getItemName(function, projectIds.get(0));
             PowerItemVO powerItemVO = new PowerItemVO();
             powerItemVO.setName(itemName);
-            // TODO: 2021/5/24 调用functionValueService获取值
+            for (String projectId : projectIds) {
+                QueryEnergyDataDTO queryEnergyDataDTO = new QueryEnergyDataDTO();
+                // 获取项目信息
+                SimpleProjectVO simpleProjectInfo = saasWebService.getSimpleProjectInfo(projectId);
+                if (simpleProjectInfo == null) {
+                    continue;
+                }
+                queryEnergyDataDTO.setProjectId(simpleProjectInfo.getProjectLocalID());
+                queryEnergyDataDTO.setBuildingId(simpleProjectInfo.getProjectLocalID());
+                queryEnergyDataDTO.setModelCode(function.getModelCode());
+                // 去年一月
+                queryEnergyDataDTO.setStartDate();
+                queryEnergyDataDTO.setEndDate(DateUtils.date2Str(reportMonth, DateUtils.SDF_SECOND));
+                queryEnergyDataDTO.setItemIdList(Lists.newArrayList(function.getItemId()));
+                queryEnergyDataDTO.setTimeType(TimeTypeEnum.MONTH.getType());
+                Map<String, TreeMap<Date, Double>> itemEnergyDataMap = centerMiddlewareWebService.getItemEnergyDataMap(queryEnergyDataDTO);
+            }
+
+            // TODO: 2021/5/24 获取值
+
             // powerItemVO.setCurrentMonth();
             // ...
             powerItemVOList.add(powerItemVO);
@@ -156,16 +200,48 @@ public class GenerateReportThreadPool {
         return powerItemVOList;
     }
 
+
+
+    /**
+     * 获取条目名称
+     *
+     * @param function  功能点信息
+     * @param projectId 项目id
+     * @return 条目名称
+     * @author lixing
+     * @version V1.0 2021/5/28 7:22 下午
+     */
+    private String getItemName(Function function, String projectId) {
+        // 获取项目信息
+        SimpleProjectVO simpleProjectInfo = saasWebService.getSimpleProjectInfo(projectId);
+
+        if (simpleProjectInfo == null) {
+            return "";
+        }
+        QueryItemInfoDTO queryItemInfoDTO = new QueryItemInfoDTO();
+        // 注意这里应该传入项目本地编码
+        queryItemInfoDTO.setProjectId(simpleProjectInfo.getProjectLocalID());
+        queryItemInfoDTO.setBuildingId(simpleProjectInfo.getProjectLocalID());
+        queryItemInfoDTO.setModelCode(function.getModelCode());
+        queryItemInfoDTO.setItemIdList(Lists.newArrayList(function.getItemId()));
+        Map<String, String> itemNameMap = centerMiddlewareWebService.getItemNameMap(queryItemInfoDTO);
+        if (itemNameMap != null) {
+            return itemNameMap.get(function.getItemId());
+        }
+        return "";
+    }
+
     /**
      * 获取用电量分组信息
      *
      * @param groupIdList 分组id列表
      * @param reportMonth 报告月份
+     * @param projectIds 报告涉及的项目id列表
      * @return 分组对象列表
      * @author lixing
      * @version V1.0 2021/5/24 7:12 下午
      */
-    private List<GroupInfo<PowerItemVO>> getPowerGroupInfos(List<String> groupIdList, Date reportMonth) {
+    private List<GroupInfo<PowerItemVO>> getPowerGroupInfos(List<String> groupIdList, Date reportMonth, List<String> projectIds) {
         List<GroupInfo<PowerItemVO>> groupInfoList = Lists.newArrayList();
         if (CollectionUtils.isEmpty(groupIdList)) {
             return groupInfoList;
@@ -178,7 +254,7 @@ public class GenerateReportThreadPool {
             // 获取组下的分项
             String functionIdStr = functionGroup.getFunctionIds();
             List<String> functionIds = Lists.newArrayList(functionIdStr.split(","));
-            List<PowerItemVO> powerItemInfos = getPowerItemInfos(functionIds, reportMonth);
+            List<PowerItemVO> powerItemInfos = getPowerItemInfos(functionIds, reportMonth, projectIds);
             groupInfo.setItems(powerItemInfos);
             // TODO: 2021/5/24  计算统计值
             // groupInfo.setSummary();

+ 2 - 0
src/main/java/com/persagy/apm/energy/report/saasweb/model/vo/SimpleProjectVO.java

@@ -17,4 +17,6 @@ public class SimpleProjectVO {
     private String projectName;
     @ApiModelProperty(value = "项目功能类型")
     private String functionType;
+    @ApiModelProperty(value = "项目本地编码")
+    private String projectLocalID;
 }

+ 22 - 4
src/main/java/com/persagy/apm/energy/report/saasweb/service/ISaasWebService.java

@@ -1,9 +1,6 @@
 package com.persagy.apm.energy.report.saasweb.service;
 
-import com.persagy.apm.energy.report.saasweb.model.vo.PartitionVO;
-import com.persagy.apm.energy.report.saasweb.model.vo.ReportAreaVO;
-import com.persagy.apm.energy.report.saasweb.model.vo.ReportProjectVO;
-import com.persagy.apm.energy.report.saasweb.model.vo.SimpleProjectVO;
+import com.persagy.apm.energy.report.saasweb.model.vo.*;
 import io.swagger.annotations.Api;
 
 import java.util.List;
@@ -14,6 +11,17 @@ import java.util.List;
  **/
 @Api(value = "运维平台service接口")
 public interface ISaasWebService {
+
+    /**
+     * 获取项目基础信息
+     *
+     * @param projectId 项目id
+     * @return 项目信息
+     * @author lixing
+     * @version V1.0 2021/5/19 4:04 下午
+     */
+    SimpleProjectVO getSimpleProjectInfo(String projectId);
+
     /**
      * 获取项目信息
      *
@@ -35,6 +43,16 @@ public interface ISaasWebService {
     ReportAreaVO getReportAreaInfo(String areaCode);
 
     /**
+     * 获取分区下所有的项目
+     *
+     * @param areaCode 分区编码
+     * @return 项目列表
+     * @author lixing
+     * @version V1.0 2021/5/24 5:37 下午
+     */
+    List<PoemsProjectVO> getProjectsByArea(String areaCode);
+
+    /**
      * 根据业态获取用户可选的项目
      *
      * @param buildingType 项目业态

+ 27 - 22
src/main/java/com/persagy/apm/energy/report/saasweb/service/impl/SaasWebServiceImpl.java

@@ -33,25 +33,37 @@ public class SaasWebServiceImpl implements ISaasWebService {
     @Override
     public ReportProjectVO getReportProjectInfo(String projectId) {
         ReportProjectVO reportProjectVO = new ReportProjectVO();
+        reportProjectVO.setProjectId(projectId);
 
+        SimpleProjectVO simpleProjectVO = getSimpleProjectInfo(projectId);
+
+        if (simpleProjectVO != null) {
+            reportProjectVO.setProjectName(simpleProjectVO.getProjectName());
+            reportProjectVO.setFunctionType(simpleProjectVO.getFunctionType());
+            // 获取项目下建筑的面积总和
+            ReportProjectVO projectAreas = getProjectAreas(projectId);
+            reportProjectVO.setCommercialArea(projectAreas.getCommercialArea());
+            reportProjectVO.setUndergroundGarageArea(projectAreas.getUndergroundGarageArea());
+        }
+
+        return reportProjectVO;
+    }
+
+    @Override
+    public SimpleProjectVO getSimpleProjectInfo(String projectId) {
+        if (StringUtils.isBlank(projectId)) {
+            return null;
+        }
         QueryByProjectIdDTO queryByProjectIdDTO = new QueryByProjectIdDTO();
         queryByProjectIdDTO.setProjectId(projectId);
-
         // 获取项目信息
         PoemsFeignResponse<SimpleProjectVO> projectInfoResponse = saasWebClientWrapper.getProjectById(queryByProjectIdDTO);
         List<SimpleProjectVO> projectInfos = projectInfoResponse.getContent();
+        SimpleProjectVO simpleProjectVO = null;
         if (!CollectionUtils.isEmpty(projectInfos)) {
-            SimpleProjectVO simpleProjectVO = projectInfos.get(0);
-            reportProjectVO.setProjectId(projectId);
-            reportProjectVO.setProjectName(simpleProjectVO.getProjectName());
-            reportProjectVO.setFunctionType(simpleProjectVO.getFunctionType());
+            simpleProjectVO = projectInfos.get(0);
         }
-
-        // 获取项目下建筑的面积总和
-        ReportProjectVO projectAreas = getProjectAreas(projectId);
-        reportProjectVO.setCommercialArea(projectAreas.getCommercialArea());
-        reportProjectVO.setUndergroundGarageArea(projectAreas.getUndergroundGarageArea());
-        return reportProjectVO;
+        return simpleProjectVO;
     }
 
     /**
@@ -127,15 +139,8 @@ public class SaasWebServiceImpl implements ISaasWebService {
         return reportAreaVO;
     }
 
-    /**
-     * 获取分区下所有的项目
-     *
-     * @param areaCode 分区编码
-     * @return 项目列表
-     * @author lixing
-     * @version V1.0 2021/5/24 5:37 下午
-     */
-    private List<PoemsProjectVO> getProjectsByArea(String areaCode) {
+    @Override
+    public List<PoemsProjectVO> getProjectsByArea(String areaCode) {
         // 获取管理分区下的项目
         QueryProjectDTO queryProjectDTO = new QueryProjectDTO();
         queryProjectDTO.setGroupManageZone(areaCode);
@@ -146,7 +151,7 @@ public class SaasWebServiceImpl implements ISaasWebService {
     /**
      * 根据区域和业态过滤项目
      *
-     * @param areaCode 区域编码
+     * @param areaCode     区域编码
      * @param buildingType 业态
      * @return 项目列表
      * @author lixing
@@ -329,7 +334,7 @@ public class SaasWebServiceImpl implements ISaasWebService {
     /**
      * 级联给区域的子节点赋值
      *
-     * @param result 需要赋值的节点
+     * @param result      需要赋值的节点
      * @param parentIdMap 区域父节点id -> 区域列表
      * @author lixing
      * @version V1.0 2021/5/28 5:51 下午