Explorar o código

1、优化获取概览页能源类型条目(如电/水/气)接口;
2、优化能源类型列表(电、水、气)接口;

james hai 1 día
pai
achega
60ad6d5ef4

+ 1 - 1
service-ems/service-ems-biz/src/main/java/com/usky/ems/controller/web/EmsModelController.java

@@ -32,7 +32,7 @@ public class EmsModelController {
 //    }
 
     /**
-     * 能源类型列表(电、水、气
+     * 能源类型列表(与概览 /overview/item 同源:租户产品关联的能源类型
      */
     @GetMapping("/energy-type/list")
     public ApiResult<List<EmsEnergyTypeVO>> getEnergyTypeList() {

+ 5 - 4
service-ems/service-ems-biz/src/main/java/com/usky/ems/controller/web/EmsOverviewController.java

@@ -1,6 +1,7 @@
 package com.usky.ems.controller.web;
 
 import com.usky.common.core.bean.ApiResult;
+import com.usky.common.security.utils.SecurityUtils;
 import com.usky.ems.service.EmsOverviewService;
 import com.usky.ems.service.vo.EmsProjectResponse;
 import com.usky.ems.service.vo.EmsSummaryRequest;
@@ -26,7 +27,8 @@ public class EmsOverviewController {
      * 获取项目信息
      */
     @GetMapping("/project")
-    public ApiResult<EmsProjectResponse> getProject(@RequestParam(required = false) Integer projectId) {
+    public ApiResult<EmsProjectResponse> getProject(
+            @RequestParam(required = false) Integer projectId) {
         return ApiResult.success(emsOverviewService.getProject(projectId));
     }
 
@@ -43,9 +45,8 @@ public class EmsOverviewController {
      * 获取概览页能源类型条目(如电/水/气)
      */
     @GetMapping("/item")
-    public ApiResult<java.util.List<EmsOverviewEnergyItemVO>> queryOverviewItem(
-            @RequestParam(required = false) Long projectId) {
-        return ApiResult.success(emsOverviewService.queryOverviewItem(projectId));
+    public ApiResult<java.util.List<EmsOverviewEnergyItemVO>> queryOverviewItem() {
+        return ApiResult.success(emsOverviewService.queryOverviewItem());
     }
 
     /**

+ 30 - 0
service-ems/service-ems-biz/src/main/java/com/usky/ems/domain/EmsProductEnergyType.java

@@ -0,0 +1,30 @@
+package com.usky.ems.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * 产品能源类型关联(ems_product_energy_type)
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@TableName("ems_product_energy_type")
+public class EmsProductEnergyType implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @TableField("product_id")
+    private Long productId;
+
+    @TableField("energy_type")
+    private Integer energyType;
+}

+ 45 - 0
service-ems/service-ems-biz/src/main/java/com/usky/ems/enums/EnergyTypeEnum.java

@@ -0,0 +1,45 @@
+package com.usky.ems.enums;
+
+import com.usky.common.core.exception.BusinessException;
+
+import java.util.Objects;
+
+public enum EnergyTypeEnum {
+    AMMETER("电", 1, "10000000"),
+    WATER("水", 2, "20000000"),
+    COOL("冷", 3, "60000000"),
+    HOT("热", 4, "50000000"),
+    HOT_WATER("热循环", 5, "90000000");
+
+    private final Integer value;
+    private final String name;
+    private final String code;
+
+    private EnergyTypeEnum(String name, Integer value, String code) {
+        this.name = name;
+        this.value = value;
+        this.code = code;
+    }
+
+    public static EnergyTypeEnum get(Integer type) {
+        for(EnergyTypeEnum typeEnum : values()) {
+            if (Objects.equals(typeEnum.getValue(), type)) {
+                return typeEnum;
+            }
+        }
+
+        throw new BusinessException("能源类型错误");
+    }
+
+    public Integer getValue() {
+        return this.value;
+    }
+
+    public String getName() {
+        return this.name;
+    }
+
+    public String getCode() {
+        return this.code;
+    }
+}

+ 10 - 0
service-ems/service-ems-biz/src/main/java/com/usky/ems/mapper/EmsProductEnergyTypeMapper.java

@@ -0,0 +1,10 @@
+package com.usky.ems.mapper;
+
+import com.usky.common.mybatis.core.CrudMapper;
+import com.usky.ems.domain.EmsProductEnergyType;
+
+/**
+ * 产品能源类型关联 Mapper(ems_product_energy_type)
+ */
+public interface EmsProductEnergyTypeMapper extends CrudMapper<EmsProductEnergyType> {
+}

+ 1 - 1
service-ems/service-ems-biz/src/main/java/com/usky/ems/service/EmsModelService.java

@@ -21,7 +21,7 @@ public interface EmsModelService {
 //    EmsStructureTreeNode getStructureTree(Long projectId, Boolean includeGateway);
 
     /**
-     * 能源类型列表(电、水、气
+     * 能源类型列表(按当前租户产品关联的 ems_product_energy_type 动态返回
      */
     List<EmsEnergyTypeVO> getEnergyTypeList();
 

+ 2 - 2
service-ems/service-ems-biz/src/main/java/com/usky/ems/service/EmsOverviewService.java

@@ -13,7 +13,7 @@ import java.util.Map;
 public interface EmsOverviewService {
 
     /**
-     * 获取项目信息(当前项目或指定 projectId
+     * 获取项目信息(当前租户下指定 projectId,或未传 projectId 时取该租户第一个项目
      */
     EmsProjectResponse getProject(Integer projectId);
 
@@ -25,7 +25,7 @@ public interface EmsOverviewService {
     /**
      * 获取概览页能源类型条目(如电/水/气)
      */
-    java.util.List<EmsOverviewEnergyItemVO> queryOverviewItem(Long projectId);
+    java.util.List<EmsOverviewEnergyItemVO> queryOverviewItem();
 
     /**
      * 获取概览页设备系统统计(每个系统下设备数量)

+ 67 - 13
service-ems/service-ems-biz/src/main/java/com/usky/ems/service/impl/EmsModelServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.toolkit.StringUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.usky.common.security.utils.SecurityUtils;
 import com.usky.ems.domain.*;
+import com.usky.ems.enums.EnergyTypeEnum;
 import com.usky.ems.mapper.*;
 import com.usky.ems.service.EmsModelService;
 import com.usky.ems.service.vo.DmpGatewayDetailResponse;
@@ -28,6 +29,7 @@ import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
 import java.util.UUID;
+import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
 /**
@@ -37,6 +39,9 @@ import java.util.stream.Collectors;
 @Service
 public class EmsModelServiceImpl implements EmsModelService {
 
+    /** 热循环,建模与概览页均不展示 */
+    private static final int EXCLUDED_ENERGY_TYPE = 5;
+
     @Autowired
     private BaseSpaceMapper baseSpaceMapper;
     @Autowired
@@ -60,6 +65,8 @@ public class EmsModelServiceImpl implements EmsModelService {
     @Autowired
     private DmpProductMapper dmpProductMapper;
     @Autowired
+    private EmsProductEnergyTypeMapper emsProductEnergyTypeMapper;
+    @Autowired
     private DmpDeviceMapper dmpDeviceMapper;
     @Autowired
     private DmpDeviceStatusMapper dmpDeviceStatusMapper;
@@ -158,20 +165,67 @@ public class EmsModelServiceImpl implements EmsModelService {
 
     @Override
     public List<EmsEnergyTypeVO> getEnergyTypeList() {
-        String[] names = {"", "电", "水", "气"};
-        String[] codes = {"", "electric", "water", "gas"};
-        String[] units = {"", "kWh", "m³", "m³"};
-        List<EmsEnergyTypeVO> result = new ArrayList<>();
-        for (int i = 1; i <= 3; i++) {
-            EmsEnergyTypeVO vo = new EmsEnergyTypeVO();
-            vo.setId((long) i);
-            vo.setName(names[i]);
-            vo.setCode(codes[i]);
-            vo.setUnit(units[i]);
-            vo.setSortOrder(i - 1);
-            result.add(vo);
+        List<DmpProduct> products = dmpProductMapper.selectList(
+                Wrappers.<DmpProduct>lambdaQuery()
+                        .eq(DmpProduct::getTenantId, SecurityUtils.getTenantId())
+                        .eq(DmpProduct::getDeleteFlag, 0)
+        );
+        if (products.isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        List<Long> productIds = products.stream()
+                .map(DmpProduct::getId)
+                .filter(Objects::nonNull)
+                .map(Integer::longValue)
+                .collect(Collectors.toList());
+        if (productIds.isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        List<EmsProductEnergyType> energyTypeList = emsProductEnergyTypeMapper.selectList(
+                Wrappers.<EmsProductEnergyType>lambdaQuery()
+                        .in(EmsProductEnergyType::getProductId, productIds)
+        );
+        if (energyTypeList.isEmpty()) {
+            return Collections.emptyList();
+        }
+
+        AtomicInteger sortOrder = new AtomicInteger(0);
+        return energyTypeList.stream()
+                .map(EmsProductEnergyType::getEnergyType)
+                .filter(Objects::nonNull)
+                .filter(type -> type != EXCLUDED_ENERGY_TYPE)
+                .distinct()
+                .sorted()
+                .map(type -> {
+                    EnergyTypeEnum typeEnum = EnergyTypeEnum.get(type);
+                    EmsEnergyTypeVO vo = new EmsEnergyTypeVO();
+                    vo.setId(typeEnum.getValue().longValue());
+                    vo.setName(typeEnum.getName());
+                    vo.setCode(typeEnum.getCode());
+                    vo.setUnit(energyTypeUnit(type));
+                    vo.setSortOrder(sortOrder.getAndIncrement());
+                    return vo;
+                })
+                .collect(Collectors.toList());
+    }
+
+    private static String energyTypeUnit(Integer energyType) {
+        if (energyType == null) {
+            return "";
+        }
+        switch (energyType) {
+            case 1:
+                return "kWh";
+            case 2:
+                return "m³";
+            case 3:
+            case 4:
+                return "kWh";
+            default:
+                return "";
         }
-        return result;
     }
 
     @Override

+ 20 - 18
service-ems/service-ems-biz/src/main/java/com/usky/ems/service/impl/EmsOverviewServiceImpl.java

@@ -2,11 +2,7 @@ package com.usky.ems.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.usky.common.security.utils.SecurityUtils;
-import com.usky.ems.domain.EmsDevice;
-import com.usky.ems.domain.BaseSpace;
-import com.usky.ems.domain.EmsEnergyItemCode;
-import com.usky.ems.domain.EmsProject;
-import com.usky.ems.domain.EmsProjectDeviceSystem;
+import com.usky.ems.domain.*;
 import com.usky.ems.mapper.EmsDeviceMapper;
 import com.usky.ems.mapper.EmsEnergyItemCodeMapper;
 import com.usky.ems.mapper.EmsProjectDeviceSystemMapper;
@@ -29,9 +25,11 @@ import java.time.LocalDateTime;
 import java.time.LocalTime;
 import java.time.temporal.TemporalAdjusters;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.stream.Collectors;
 
 /**
@@ -60,11 +58,14 @@ public class EmsOverviewServiceImpl implements EmsOverviewService {
 
     @Override
     public EmsProjectResponse getProject(Integer projectId) {
+        LambdaQueryWrapper<EmsProject> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(EmsProject::getTenantId, SecurityUtils.getTenantId());
         EmsProject project;
         if (projectId != null) {
-            project = emsProjectMapper.selectById(projectId);
+            wrapper.eq(EmsProject::getId, projectId);
+            project = emsProjectMapper.selectOne(wrapper);
         } else {
-            List<EmsProject> list = emsProjectMapper.selectList(null);
+            List<EmsProject> list = emsProjectMapper.selectList(wrapper);
             project = list.isEmpty() ? null : list.get(0);
         }
         if (project == null) {
@@ -135,16 +136,16 @@ public class EmsOverviewServiceImpl implements EmsOverviewService {
     }
 
     @Override
-    public List<EmsOverviewEnergyItemVO> queryOverviewItem(Long projectId) {
-        // 当前实现:直接基于能源类型列表(电/水/气)构造概览条目
-        List<EmsEnergyTypeVO> types = emsModelService.getEnergyTypeList();
-        return types.stream().map(t -> {
-            EmsOverviewEnergyItemVO vo = new EmsOverviewEnergyItemVO();
-            vo.setName(t.getName());
-            vo.setItemCode(t.getCode());
-            vo.setEnergyType(t.getId() != null ? t.getId().intValue() : null);
-            return vo;
-        }).collect(Collectors.toList());
+    public List<EmsOverviewEnergyItemVO> queryOverviewItem() {
+        return emsModelService.getEnergyTypeList().stream()
+                .map(type -> {
+                    EmsOverviewEnergyItemVO vo = new EmsOverviewEnergyItemVO();
+                    vo.setName(type.getName());
+                    vo.setItemCode(type.getCode());
+                    vo.setEnergyType(type.getId() != null ? type.getId().intValue() : null);
+                    return vo;
+                })
+                .collect(Collectors.toList());
     }
 
     @Override
@@ -436,7 +437,8 @@ public class EmsOverviewServiceImpl implements EmsOverviewService {
         }
 
         // 项目信息(含面积、根空间 ID)
-        EmsProjectResponse project = getProject(SecurityUtils.getTenantId());
+        Integer resolvedProjectId = projectId != null ? projectId.intValue() : null;
+        EmsProjectResponse project = getProject(resolvedProjectId);
         if (project == null || project.getSpaceId() == null) {
             return resultMap;
         }