Procházet zdrojové kódy

pms功能优化 保养工单 填报 功能优化2

zhangcl před 3 měsíci
rodič
revize
41052ae687

+ 34 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotbom/IotBomController.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.pms.controller.admin.iotbom;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
@@ -7,11 +8,15 @@ import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.module.pms.controller.admin.iotbom.vo.*;
+import cn.iocoder.yudao.module.pms.controller.admin.iotcommonbommaterial.vo.IotCommonBomMaterialSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotbom.IotBomDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotcommonbommaterial.IotCommonBomMaterialDO;
 import cn.iocoder.yudao.module.pms.service.iotbom.IotBomService;
+import cn.iocoder.yudao.module.pms.service.iotcommonbommaterial.IotCommonBomMaterialService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -23,7 +28,8 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
-import java.util.List;
+import java.util.*;
+import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@@ -36,6 +42,8 @@ public class IotBomController {
 
     @Resource
     private IotBomService iotBomService;
+    @Resource
+    private IotCommonBomMaterialService iotCommonBomMaterialService;
 
     @PostMapping("/create")
     @Operation(summary = "创建PMS BOM 关系")
@@ -95,7 +103,31 @@ public class IotBomController {
             return success(CollectionUtil.newArrayList());
         }
         List<IotBomDO> list = iotBomService.getBomList(reqVO);
-        return success(BeanUtils.toBean(list, IotBomRespVO.class));
+        if (CollUtil.isEmpty(list)) {
+            return success(Collections.emptyList());
+        }
+        List<Long> bomNodeIds = list.stream()
+                .map(IotBomDO::getId)
+                .collect(Collectors.toList());
+
+        IotCommonBomMaterialSaveReqVO bomMaterialSaveReqVO = new IotCommonBomMaterialSaveReqVO();
+        bomMaterialSaveReqVO.setBomNodeIds(bomNodeIds);
+        // 查询所有bom节点已经绑定的物料列表
+        List<IotCommonBomMaterialDO> bomMaterials = iotCommonBomMaterialService.getIotCommonBomMaterials(bomMaterialSaveReqVO);
+        Map<Long, Integer> bomMaterialCount = new HashMap<>();
+        if (CollUtil.isNotEmpty(bomMaterials)) {
+            bomMaterials.forEach(material -> {
+                if (bomMaterialCount.containsKey(material.getBomNodeId())) {
+                    bomMaterialCount.put(material.getBomNodeId(), bomMaterialCount.get(material.getBomNodeId())+1);
+                } else {
+                    bomMaterialCount.put(material.getBomNodeId(), 1);
+                }
+            });
+        }
+        return success(BeanUtils.toBean(list, IotBomRespVO.class, bom -> {
+            Integer materialCount = bomMaterialCount.getOrDefault(bom.getId(), 0);
+            bom.setMaterials(materialCount);
+        }));
     }
 
     @GetMapping(value = {"/list-all-simple", "/simple-list"})

+ 6 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotbom/vo/IotBomRespVO.java

@@ -80,4 +80,10 @@ public class IotBomRespVO {
     private String deviceStatus;
     @Schema(description = "资产性质")
     private String assetProperty;
+
+    /**
+     * 扩展字段
+     */
+    @Schema(description = "已经绑定的物料数量")
+    private Integer materials;
 }

+ 6 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotcommonbommaterial/vo/IotCommonBomMaterialSaveReqVO.java

@@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.util.List;
 
 @Schema(description = "管理后台 - PMS 设备分类公共BOM挂载物料关联新增/修改 Request VO")
 @Data
@@ -36,4 +37,9 @@ public class IotCommonBomMaterialSaveReqVO {
     @Schema(description = "备注", example = "随便")
     private String remark;
 
+    /**
+     * 扩展字段
+     */
+    @Schema(description = "bom节点id集合", example = "随便")
+    private List<Long> bomNodeIds;
 }

+ 3 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmainworkorderbommaterial/vo/IotMainWorkOrderBomMaterialRespVO.java

@@ -126,4 +126,7 @@ public class IotMainWorkOrderBomMaterialRespVO {
     @Schema(description = "单位", example = "kg")
     private String unit;
 
+    @Schema(description = "是否是bom节点关联的物料", example = "Y N")
+    private String bomMaterialFlag;
+
 }

+ 1 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotcommonbommaterial/IotCommonBomMaterialMapper.java

@@ -36,6 +36,7 @@ public interface IotCommonBomMaterialMapper extends BaseMapperX<IotCommonBomMate
         return selectList(new LambdaQueryWrapperX<IotCommonBomMaterialDO>()
                 .eqIfPresent(IotCommonBomMaterialDO::getDeviceCategoryId, reqVO.getDeviceCategoryId())
                 .eqIfPresent(IotCommonBomMaterialDO::getBomNodeId, reqVO.getBomNodeId())
+                .inIfPresent(IotCommonBomMaterialDO::getBomNodeId, reqVO.getBomNodeIds())
                 .eqIfPresent(IotCommonBomMaterialDO::getMaterialId, reqVO.getMaterialId()));
     }
 

+ 15 - 4
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmainworkorderbommaterial/IotMainWorkOrderBomMaterialServiceImpl.java

@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.pms.service.iotmainworkorderbommaterial;
 import cn.hutool.core.collection.CollUtil;
 import cn.iocoder.yudao.framework.common.exception.ServiceException;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.pms.controller.admin.iotcommonbommaterial.vo.IotCommonBomMaterialSaveReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmainworkorderbommaterial.vo.IotMainWorkOrderBomMaterialPageReqVO;
@@ -21,9 +22,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -97,13 +96,25 @@ public class IotMainWorkOrderBomMaterialServiceImpl implements IotMainWorkOrderB
         reqVO.setBomNodeId(pageReqVO.getBomNodeId());
         List<IotCommonBomMaterialDO> bomMaterials = iotCommonBomMaterialService.getIotCommonBomMaterials(reqVO);
         List<String> materialCodes = new ArrayList<>();
+        Map<String, IotCommonBomMaterialDO> bomNodePair = new HashMap<>();
         if (CollUtil.isNotEmpty(bomMaterials)) {
             materialCodes = bomMaterials.stream()
                     .map(IotCommonBomMaterialDO::getCode) // 提取每个元素的 code 属性
                     .collect(Collectors.toList());
+            // 组装每个bomNodeId关联的物料编码
+            bomNodePair = CollectionUtils.convertMap(bomMaterials, IotCommonBomMaterialDO::getCode);
         }
         IPage<IotMainWorkOrderBomMaterialRespVO> iotMaintainMaterialDOIPage =
-                iotMainWorkOrderBomMaterialMapper.selectMaterialsByDept(Page.of(pageReqVO.getPageNo(), pageReqVO.getPageSize()), pageReqVO.getDeptId(), dept.getParentId(), materialCodes);
+                iotMainWorkOrderBomMaterialMapper.selectMaterialsByDept(Page.of(pageReqVO.getPageNo(), pageReqVO.getPageSize()),
+                        pageReqVO.getDeptId(), dept.getParentId(), materialCodes);
+        List<IotMainWorkOrderBomMaterialRespVO> materials = iotMaintainMaterialDOIPage.getRecords();
+        if (CollUtil.isNotEmpty(materials)) {
+            for (IotMainWorkOrderBomMaterialRespVO material : materials) {
+                if (bomNodePair.containsKey(material.getMaterialCode())){
+                    material.setBomMaterialFlag("Y");
+                }
+            }
+        }
         return new PageResult<>(iotMaintainMaterialDOIPage.getRecords(), iotMaintainMaterialDOIPage.getTotal());
     }