瀏覽代碼

开发能耗类型列表、能耗分项列表、产品关联的能源类型和设备关联的能源分项四个接口

james 1 天之前
父節點
當前提交
2b9f5deaa2

+ 42 - 0
service-ems/service-ems-biz/src/main/java/com/usky/ems/controller/web/EmsProjectController.java

@@ -1,12 +1,18 @@
 package com.usky.ems.controller.web;
 
 import com.usky.common.core.bean.ApiResult;
+import com.usky.ems.domain.EmsEnergyItemCode;
+import com.usky.ems.service.EmsEnergyItemCodeService;
 import com.usky.ems.service.EmsProjectService;
+import com.usky.ems.service.vo.EmsDeviceItemCodeSaveRequest;
+import com.usky.ems.service.vo.EmsProductEnergyTypeSaveRequest;
 import com.usky.ems.service.vo.EmsProjectResponse;
 import com.usky.ems.service.vo.EmsProjectSaveRequest;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
+
 /**
  * 项目(ems_project)新增、修改、删除
  * 基础路径前缀:/project(网关再加 /prod-api/service-ems)
@@ -17,6 +23,42 @@ public class EmsProjectController {
 
     @Autowired
     private EmsProjectService emsProjectService;
+    @Autowired
+    private EmsEnergyItemCodeService emsEnergyItemCodeService;
+
+    /**
+     * 能耗类型列表(SELECT * FROM ems_energy_item_code WHERE parent_code = 0)
+     */
+    @GetMapping("/energy-type/list")
+    public ApiResult<List<EmsEnergyItemCode>> listEnergyTypes() {
+        return ApiResult.success(emsEnergyItemCodeService.listEnergyTypes());
+    }
+
+    /**
+     * 能耗分项列表(parent_code 为能耗类型编码)
+     */
+    @GetMapping("/energy-item/list")
+    public ApiResult<List<EmsEnergyItemCode>> listEnergySubItems() {
+        return ApiResult.success(emsEnergyItemCodeService.listEnergySubItems());
+    }
+
+    /**
+     * 产品关联的能源类型(ems_product_energy_type)
+     */
+    @PostMapping("/product-energy-type")
+    public ApiResult<Void> saveProductEnergyTypes(@RequestBody EmsProductEnergyTypeSaveRequest request) {
+        emsProjectService.saveProductEnergyTypes(request);
+        return ApiResult.success();
+    }
+
+    /**
+     * 设备关联的能源分项(ems_device_item_code)
+     */
+    @PostMapping("/device-item-code")
+    public ApiResult<Void> saveDeviceItemCodes(@RequestBody EmsDeviceItemCodeSaveRequest request) {
+        emsProjectService.saveDeviceItemCodes(request);
+        return ApiResult.success();
+    }
 
     @PostMapping
     public ApiResult<EmsProjectResponse> create(@RequestBody EmsProjectSaveRequest request) {

+ 20 - 4
service-ems/service-ems-biz/src/main/java/com/usky/ems/domain/EmsDeviceItemCode.java

@@ -8,6 +8,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.io.Serializable;
+import java.time.LocalDateTime;
 
 /**
  * 设备与能耗分项关联(ems_device_item_code)
@@ -22,12 +23,27 @@ public class EmsDeviceItemCode implements Serializable {
     @TableId(value = "id", type = IdType.AUTO)
     private Long id;
 
-    @TableField("device_id")
-    private String deviceId;
+    @TableField("device_uuid")
+    private String deviceUuid;
 
     @TableField("item_code")
     private String itemCode;
 
-    @TableField("project_id")
-    private Long projectId;
+    @TableField("energy_type")
+    private Integer energyType;
+
+    @TableField("created_by")
+    private String createdBy;
+
+    @TableField("created_time")
+    private LocalDateTime createdTime;
+
+    @TableField("updated_by")
+    private String updatedBy;
+
+    @TableField("updated_time")
+    private LocalDateTime updatedTime;
+
+    /** 租户号 */
+    private Integer tenantId;
 }

+ 14 - 7
service-ems/service-ems-biz/src/main/java/com/usky/ems/domain/EmsEnergyItemCode.java

@@ -33,12 +33,19 @@ public class EmsEnergyItemCode implements Serializable {
     private String identifier;
     @TableField("energy_type")
     private Integer energyType;
-    @TableField("updated_by")
-    private Long updatedBy;
-    @TableField("update_time")
-    private LocalDateTime updateTime;
+
     @TableField("created_by")
-    private Long createdBy;
-    @TableField("create_time")
-    private LocalDateTime createTime;
+    private String createdBy;
+
+    @TableField("created_time")
+    private LocalDateTime createdTime;
+
+    @TableField("updated_by")
+    private String updatedBy;
+
+    @TableField("updated_time")
+    private LocalDateTime updatedTime;
+
+    /** 租户号 */
+    private Integer tenantId;
 }

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

@@ -8,6 +8,7 @@ import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.io.Serializable;
+import java.time.LocalDateTime;
 
 /**
  * 产品能源类型关联(ems_product_energy_type)
@@ -27,4 +28,19 @@ public class EmsProductEnergyType implements Serializable {
 
     @TableField("energy_type")
     private Integer energyType;
+
+    @TableField("created_by")
+    private String createdBy;
+
+    @TableField("created_time")
+    private LocalDateTime createdTime;
+
+    @TableField("updated_by")
+    private String updatedBy;
+
+    @TableField("updated_time")
+    private LocalDateTime updatedTime;
+
+    /** 租户号 */
+    private Integer tenantId;
 }

+ 10 - 7
service-ems/service-ems-biz/src/main/java/com/usky/ems/domain/EmsProjectConversionFactor.java

@@ -34,15 +34,18 @@ public class EmsProjectConversionFactor implements Serializable {
 
     private BigDecimal value;
 
+    @TableField("created_by")
+    private String createdBy;
+
+    @TableField("created_time")
+    private LocalDateTime createdTime;
+
     @TableField("updated_by")
     private String updatedBy;
 
-    @TableField("update_time")
-    private LocalDateTime updateTime;
-
-    @TableField("created_by")
-    private String createdBy;
+    @TableField("updated_time")
+    private LocalDateTime updatedTime;
 
-    @TableField("create_time")
-    private LocalDateTime createTime;
+    /** 租户号 */
+    private Integer tenantId;
 }

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

@@ -15,5 +15,15 @@ public interface EmsEnergyItemCodeService extends CrudService<EmsEnergyItemCode>
      * 查询指定空间下的分项能耗配置(基于能耗公式和分项编码组装树形结构)。
      */
     List<EnergyItemCodeVO> querySpaceEnergyItem(Long spaceId);
+
+    /**
+     * 能耗类型列表:parent_code = 0
+     */
+    List<EmsEnergyItemCode> listEnergyTypes();
+
+    /**
+     * 能耗分项列表:parent_code 为能耗类型(parent_code = 0)的编码
+     */
+    List<EmsEnergyItemCode> listEnergySubItems();
 }
 

+ 12 - 0
service-ems/service-ems-biz/src/main/java/com/usky/ems/service/EmsProjectService.java

@@ -1,5 +1,7 @@
 package com.usky.ems.service;
 
+import com.usky.ems.service.vo.EmsDeviceItemCodeSaveRequest;
+import com.usky.ems.service.vo.EmsProductEnergyTypeSaveRequest;
 import com.usky.ems.service.vo.EmsProjectResponse;
 import com.usky.ems.service.vo.EmsProjectSaveRequest;
 
@@ -13,4 +15,14 @@ public interface EmsProjectService {
     EmsProjectResponse update(EmsProjectSaveRequest request);
 
     void remove(Long spaceId);
+
+    /**
+     * 保存产品关联的能源类型:先删除当前租户下该能耗类型的记录,再按产品列表插入
+     */
+    void saveProductEnergyTypes(EmsProductEnergyTypeSaveRequest request);
+
+    /**
+     * 保存设备关联的能源分项:先删除当前租户下该分项编码的记录,再按设备列表插入
+     */
+    void saveDeviceItemCodes(EmsDeviceItemCodeSaveRequest request);
 }

+ 24 - 0
service-ems/service-ems-biz/src/main/java/com/usky/ems/service/impl/EmsEnergyItemCodeServiceImpl.java

@@ -106,5 +106,29 @@ public class EmsEnergyItemCodeServiceImpl
 
         return result;
     }
+
+    @Override
+    public List<EmsEnergyItemCode> listEnergyTypes() {
+        return this.list(
+                Wrappers.<EmsEnergyItemCode>lambdaQuery()
+                        .eq(EmsEnergyItemCode::getParentCode, "0")
+                        .orderByAsc(EmsEnergyItemCode::getCode));
+    }
+
+    @Override
+    public List<EmsEnergyItemCode> listEnergySubItems() {
+        List<String> rootCodes = listEnergyTypes().stream()
+                .map(EmsEnergyItemCode::getCode)
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(Collectors.toList());
+        if (rootCodes.isEmpty()) {
+            return Collections.emptyList();
+        }
+        return this.list(
+                Wrappers.<EmsEnergyItemCode>lambdaQuery()
+                        .in(EmsEnergyItemCode::getParentCode, rootCodes)
+                        .orderByAsc(EmsEnergyItemCode::getParentCode, EmsEnergyItemCode::getCode));
+    }
 }
 

+ 79 - 0
service-ems/service-ems-biz/src/main/java/com/usky/ems/service/impl/EmsProjectServiceImpl.java

@@ -4,13 +4,19 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.usky.common.core.exception.BusinessException;
 import com.usky.common.security.utils.SecurityUtils;
 import com.usky.ems.domain.BaseSpace;
+import com.usky.ems.domain.EmsDeviceItemCode;
+import com.usky.ems.domain.EmsProductEnergyType;
 import com.usky.ems.domain.EmsProject;
 import com.usky.ems.domain.EmsProjectDeviceSystem;
+import com.usky.ems.mapper.EmsDeviceItemCodeMapper;
+import com.usky.ems.mapper.EmsProductEnergyTypeMapper;
 import com.usky.ems.mapper.EmsProjectDeviceSystemMapper;
 import com.usky.ems.mapper.EmsProjectMapper;
 import com.usky.ems.service.BaseSpaceService;
 import com.usky.ems.service.EmsProjectService;
 import com.usky.ems.service.EmsSystemDictRegionService;
+import com.usky.ems.service.vo.EmsDeviceItemCodeSaveRequest;
+import com.usky.ems.service.vo.EmsProductEnergyTypeSaveRequest;
 import com.usky.ems.service.vo.EmsProjectResponse;
 import com.usky.ems.service.vo.EmsProjectSaveRequest;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,6 +46,10 @@ public class EmsProjectServiceImpl implements EmsProjectService {
     private BaseSpaceService baseSpaceService;
     @Autowired
     private EmsSystemDictRegionService emsSystemDictRegionService;
+    @Autowired
+    private EmsProductEnergyTypeMapper emsProductEnergyTypeMapper;
+    @Autowired
+    private EmsDeviceItemCodeMapper emsDeviceItemCodeMapper;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -103,6 +113,75 @@ public class EmsProjectServiceImpl implements EmsProjectService {
         baseSpaceService.removeById(spaceId);
     }
 
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void saveProductEnergyTypes(EmsProductEnergyTypeSaveRequest request) {
+        if (request == null || request.getEnergyType() == null) {
+            throw new BusinessException("能耗类型不能为空");
+        }
+        Integer tenantId = SecurityUtils.getTenantId();
+        emsProductEnergyTypeMapper.delete(
+                new LambdaQueryWrapper<EmsProductEnergyType>()
+                        .eq(EmsProductEnergyType::getTenantId, tenantId)
+                        .eq(EmsProductEnergyType::getEnergyType, request.getEnergyType()));
+        if (CollectionUtils.isEmpty(request.getProductIdList())) {
+            return;
+        }
+        LocalDateTime now = LocalDateTime.now();
+        String auditUser = SecurityUtils.getUsername();
+        for (Long productId : request.getProductIdList()) {
+            if (productId == null) {
+                continue;
+            }
+            EmsProductEnergyType row = new EmsProductEnergyType();
+            row.setProductId(productId);
+            row.setEnergyType(request.getEnergyType());
+            row.setTenantId(tenantId);
+            row.setCreatedBy(auditUser);
+            row.setUpdatedBy(auditUser);
+            row.setCreatedTime(now);
+            row.setUpdatedTime(now);
+            emsProductEnergyTypeMapper.insert(row);
+        }
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void saveDeviceItemCodes(EmsDeviceItemCodeSaveRequest request) {
+        if (request == null || request.getEnergyType() == null) {
+            throw new BusinessException("能耗类型不能为空");
+        }
+        if (!StringUtils.hasText(request.getItemCode())) {
+            throw new BusinessException("能耗分项编码不能为空");
+        }
+        Integer tenantId = SecurityUtils.getTenantId();
+        String itemCode = request.getItemCode().trim();
+        emsDeviceItemCodeMapper.delete(
+                new LambdaQueryWrapper<EmsDeviceItemCode>()
+                        .eq(EmsDeviceItemCode::getTenantId, tenantId)
+                        .eq(EmsDeviceItemCode::getItemCode, itemCode));
+        if (CollectionUtils.isEmpty(request.getDeviceUuidList())) {
+            return;
+        }
+        LocalDateTime now = LocalDateTime.now();
+        String auditUser = SecurityUtils.getUsername();
+        for (String deviceUuid : request.getDeviceUuidList()) {
+            if (!StringUtils.hasText(deviceUuid)) {
+                continue;
+            }
+            EmsDeviceItemCode row = new EmsDeviceItemCode();
+            row.setDeviceUuid(deviceUuid.trim());
+            row.setItemCode(itemCode);
+            row.setEnergyType(request.getEnergyType());
+            row.setTenantId(tenantId);
+            row.setCreatedBy(auditUser);
+            row.setUpdatedBy(auditUser);
+            row.setCreatedTime(now);
+            row.setUpdatedTime(now);
+            emsDeviceItemCodeMapper.insert(row);
+        }
+    }
+
     /**
      * 对应原 UserService.hasLoggedUser(projectId)。接入统一用户/权限模块后可在此查询用户与项目绑定关系。
      */

+ 22 - 0
service-ems/service-ems-biz/src/main/java/com/usky/ems/service/vo/EmsDeviceItemCodeSaveRequest.java

@@ -0,0 +1,22 @@
+package com.usky.ems.service.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 设备关联能源分项保存请求(ems_device_item_code)
+ */
+@Data
+public class EmsDeviceItemCodeSaveRequest {
+
+    @ApiModelProperty(value = "选中的设备UUID集合", required = true)
+    private List<String> deviceUuidList;
+
+    @ApiModelProperty(value = "能耗类型", required = true)
+    private Integer energyType;
+
+    @ApiModelProperty(value = "能耗分项编码", required = true)
+    private String itemCode;
+}

+ 19 - 0
service-ems/service-ems-biz/src/main/java/com/usky/ems/service/vo/EmsProductEnergyTypeSaveRequest.java

@@ -0,0 +1,19 @@
+package com.usky.ems.service.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 产品关联能源类型保存请求(ems_product_energy_type)
+ */
+@Data
+public class EmsProductEnergyTypeSaveRequest {
+
+    @ApiModelProperty(value = "选中的产品ID集合", required = true)
+    private List<Long> productIdList;
+
+    @ApiModelProperty(value = "能耗类型", required = true)
+    private Integer energyType;
+}