Jelajahi Sumber

优化能耗类型列表接口,增加能耗类型绑定产品id集合字段取值;优化能耗分项列表接口,增加能耗分项绑定设备uuid集合字段取值;

james 1 hari lalu
induk
melakukan
4bdf0a3903

+ 9 - 0
service-ems/service-ems-biz/src/main/java/com/usky/ems/domain/EmsEnergyItemCode.java

@@ -9,6 +9,7 @@ import lombok.EqualsAndHashCode;
 
 import java.io.Serializable;
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * 能源分项编码(leo.ems_energy_item_code),用于能源类型列表
@@ -48,4 +49,12 @@ public class EmsEnergyItemCode implements Serializable {
 
     /** 租户号 */
     private Integer tenantId;
+
+    /** 能耗绑定产品id集合 **/
+    @TableField(exist = false)
+    private List<Long> productIdList;
+
+    /** 能耗分项绑定设备uuid集合 **/
+    @TableField(exist = false)
+    private List<String> deviceUuidList;
 }

+ 65 - 6
service-ems/service-ems-biz/src/main/java/com/usky/ems/service/impl/EmsEnergyItemCodeServiceImpl.java

@@ -3,10 +3,15 @@ package com.usky.ems.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.usky.common.mybatis.core.AbstractCrudService;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.ems.domain.EmsDeviceItemCode;
 import com.usky.ems.domain.EmsEnergyConsumptionFormula;
 import com.usky.ems.domain.EmsEnergyItemCode;
+import com.usky.ems.domain.EmsProductEnergyType;
+import com.usky.ems.mapper.EmsDeviceItemCodeMapper;
 import com.usky.ems.mapper.EmsEnergyConsumptionFormulaMapper;
 import com.usky.ems.mapper.EmsEnergyItemCodeMapper;
+import com.usky.ems.mapper.EmsProductEnergyTypeMapper;
 import com.usky.ems.service.EmsEnergyItemCodeService;
 import com.usky.ems.service.vo.EnergyItemCodeVO;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -25,6 +30,10 @@ public class EmsEnergyItemCodeServiceImpl
 
     @Autowired
     private EmsEnergyConsumptionFormulaMapper energyConsumptionFormulaMapper;
+    @Autowired
+    private EmsProductEnergyTypeMapper emsProductEnergyTypeMapper;
+    @Autowired
+    private EmsDeviceItemCodeMapper emsDeviceItemCodeMapper;
 
     @Override
     public List<EnergyItemCodeVO> querySpaceEnergyItem(Long spaceId) {
@@ -109,15 +118,21 @@ public class EmsEnergyItemCodeServiceImpl
 
     @Override
     public List<EmsEnergyItemCode> listEnergyTypes() {
-        return this.list(
-                Wrappers.<EmsEnergyItemCode>lambdaQuery()
-                        .eq(EmsEnergyItemCode::getParentCode, "0")
-                        .orderByAsc(EmsEnergyItemCode::getCode));
+        List<EmsEnergyItemCode> energyTypes = listRootEnergyTypes();
+        if (energyTypes.isEmpty()) {
+            return energyTypes;
+        }
+        Map<Integer, List<Long>> productIdsByEnergyType = loadProductIdsByEnergyType(SecurityUtils.getTenantId());
+        for (EmsEnergyItemCode energyType : energyTypes) {
+            energyType.setProductIdList(
+                    productIdsByEnergyType.getOrDefault(energyType.getEnergyType(), Collections.emptyList()));
+        }
+        return energyTypes;
     }
 
     @Override
     public List<EmsEnergyItemCode> listEnergySubItems() {
-        List<String> rootCodes = listEnergyTypes().stream()
+        List<String> rootCodes = listRootEnergyTypes().stream()
                 .map(EmsEnergyItemCode::getCode)
                 .filter(Objects::nonNull)
                 .distinct()
@@ -125,10 +140,54 @@ public class EmsEnergyItemCodeServiceImpl
         if (rootCodes.isEmpty()) {
             return Collections.emptyList();
         }
-        return this.list(
+        List<EmsEnergyItemCode> energySubItems = this.list(
                 Wrappers.<EmsEnergyItemCode>lambdaQuery()
                         .in(EmsEnergyItemCode::getParentCode, rootCodes)
                         .orderByAsc(EmsEnergyItemCode::getParentCode, EmsEnergyItemCode::getCode));
+        if (energySubItems.isEmpty()) {
+            return energySubItems;
+        }
+        Map<String, List<String>> deviceUuidsByItemCode = loadDeviceUuidsByItemCode(SecurityUtils.getTenantId());
+        for (EmsEnergyItemCode energySubItem : energySubItems) {
+            energySubItem.setDeviceUuidList(
+                    deviceUuidsByItemCode.getOrDefault(energySubItem.getCode(), Collections.emptyList()));
+        }
+        return energySubItems;
+    }
+
+    private List<EmsEnergyItemCode> listRootEnergyTypes() {
+        return this.list(
+                Wrappers.<EmsEnergyItemCode>lambdaQuery()
+                        .eq(EmsEnergyItemCode::getParentCode, "0")
+                        .orderByAsc(EmsEnergyItemCode::getCode));
+    }
+
+    private Map<Integer, List<Long>> loadProductIdsByEnergyType(Integer tenantId) {
+        List<EmsProductEnergyType> bindings = emsProductEnergyTypeMapper.selectList(
+                Wrappers.<EmsProductEnergyType>lambdaQuery()
+                        .eq(EmsProductEnergyType::getTenantId, tenantId));
+        if (bindings.isEmpty()) {
+            return Collections.emptyMap();
+        }
+        return bindings.stream()
+                .filter(binding -> binding.getEnergyType() != null && binding.getProductId() != null)
+                .collect(Collectors.groupingBy(
+                        EmsProductEnergyType::getEnergyType,
+                        Collectors.mapping(EmsProductEnergyType::getProductId, Collectors.toList())));
+    }
+
+    private Map<String, List<String>> loadDeviceUuidsByItemCode(Integer tenantId) {
+        List<EmsDeviceItemCode> bindings = emsDeviceItemCodeMapper.selectList(
+                Wrappers.<EmsDeviceItemCode>lambdaQuery()
+                        .eq(EmsDeviceItemCode::getTenantId, tenantId));
+        if (bindings.isEmpty()) {
+            return Collections.emptyMap();
+        }
+        return bindings.stream()
+                .filter(binding -> binding.getItemCode() != null && binding.getDeviceUuid() != null)
+                .collect(Collectors.groupingBy(
+                        EmsDeviceItemCode::getItemCode,
+                        Collectors.mapping(EmsDeviceItemCode::getDeviceUuid, Collectors.toList())));
     }
 }