Sfoglia il codice sorgente

pms 设备BOM添加物料

zhangcl 1 mese fa
parent
commit
c237294f4d

+ 8 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotdevicematerial/IotDeviceMaterialController.java

@@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 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.iotcommonbommaterial.vo.IotCommonBomMaterialSaveReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdevicematerial.vo.IotDeviceMaterialPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdevicematerial.vo.IotDeviceMaterialRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdevicematerial.vo.IotDeviceMaterialSaveReqVO;
@@ -44,6 +45,13 @@ public class IotDeviceMaterialController {
         return success(iotDeviceMaterialService.createIotDeviceMaterial(createReqVO));
     }
 
+    @PostMapping("/addMaterials")
+    @Operation(summary = "批量 创建PMS 设备BOM挂载物料关联")
+    @PreAuthorize("@ss.hasPermission('pms:iot-device-material:create')")
+    public CommonResult<Long> addMaterials(@Valid @RequestBody List<IotDeviceMaterialSaveReqVO> materials) {
+        return success(iotDeviceMaterialService.addMaterials(materials));
+    }
+
     @PutMapping("/update")
     @Operation(summary = "更新PMS 设备BOM物料关联")
     @PreAuthorize("@ss.hasPermission('pms:iot-device-material:update')")

+ 2 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmainworkorder/vo/IotMainWorkOrderPageReqVO.java

@@ -91,9 +91,9 @@ public class IotMainWorkOrderPageReqVO extends PageParam {
     @Schema(description = "设备id", example = "8684")
     private Long deviceId;
     @Schema(description = "设备名称", example = "空压机")
-    private Long deviceName;
+    private String deviceName;
     @Schema(description = "设备编码", example = "8684")
-    private Long deviceCode;
+    private String deviceCode;
     @Schema(description = "工单id集合", example = "8684")
     private List<Long> workOrderIds;
 }

+ 10 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotdevicematerial/IotDeviceMaterialService.java

@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.pms.service.iotdevicematerial;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.pms.controller.admin.iotcommonbommaterial.vo.IotCommonBomMaterialSaveReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdevicematerial.vo.IotDeviceMaterialPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdevicematerial.vo.IotDeviceMaterialSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicematerial.IotDeviceMaterialDO;
@@ -77,4 +78,13 @@ public interface IotDeviceMaterialService {
      * @return PMS 设备BOM挂载物料关联列表
      */
     void deleteDeviceMaterial(Long bomNodeId, String code);
+
+    /**
+     * 获得PMS 设备BOM挂载物料关联列表
+     *
+     * @param materials 批量选择的物料集合
+     * @return
+     *
+     */
+    Long addMaterials(List<IotDeviceMaterialSaveReqVO> materials);
 }

+ 53 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotdevicematerial/IotDeviceMaterialServiceImpl.java

@@ -5,8 +5,10 @@ import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 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.iotdevicematerial.vo.IotDeviceMaterialPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdevicematerial.vo.IotDeviceMaterialSaveReqVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotcommonbommaterial.IotCommonBomMaterialDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotdevicematerial.IotDeviceMaterialDO;
 import cn.iocoder.yudao.module.pms.dal.mysql.IotDeviceMapper;
 import cn.iocoder.yudao.module.pms.dal.mysql.iotdevicematerial.IotDeviceMaterialMapper;
@@ -16,9 +18,14 @@ 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.Set;
+import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_COMMON_BOM_MATERIAL_NOT_EXISTS;
 import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_DEVICE_MATERIAL_NOT_EXISTS;
 
 
@@ -110,8 +117,52 @@ public class IotDeviceMaterialServiceImpl implements IotDeviceMaterialService {
                 "code", code
         ));
         // 设置关联设备的 bom_sync_status = 1
-        // 将设备分类BOM及BOM节点挂载的物料同步到设备BOM
-        iotBomService.syncDeviceBomAndMaterials(deviceMaterials.get(0).getDeviceCategoryId());
+        iotDeviceMapper.updateBomSyncStatus(deviceMaterials.get(0).getDeviceId());
+    }
+
+    @Override
+    public Long addMaterials(List<IotDeviceMaterialSaveReqVO> materials) {
+        Long resultCount = 0L;
+        if (CollUtil.isEmpty(materials)) {
+            throw exception(IOT_DEVICE_MATERIAL_NOT_EXISTS);
+        }
+        Long bomNodeId = materials.get(0).getBomNodeId();
+        Long deviceId = materials.get(0).getDeviceId();
+
+        if (ObjUtil.isEmpty(bomNodeId)) {
+            throw exception(IOT_DEVICE_MATERIAL_NOT_EXISTS);
+        }
+        // 先查询当前BOM节点下所有物料 与要添加的物料匹配 筛选出在数据库中不存在的物料 插入到数据库
+        IotDeviceMaterialPageReqVO reqVO = new IotDeviceMaterialPageReqVO();
+        reqVO.setBomNodeId(bomNodeId);
+        List<IotDeviceMaterialDO> existMaterials = iotDeviceMaterialMapper.selectList(reqVO);
+        List<IotDeviceMaterialSaveReqVO> newMaterials = new ArrayList<>();
+        if (CollUtil.isNotEmpty(existMaterials)) {
+            // 提取已存在的物料编码集合
+            Set<String> existCodes = existMaterials.stream()
+                    .map(IotDeviceMaterialDO::getCode)    // 获取DO对象的code字段
+                    .filter(Objects::nonNull)             // 过滤可能的null值
+                    .collect(Collectors.toSet());
+            // 筛选出不存在的物料
+            newMaterials = materials.stream()
+                    .filter(material -> material.getCode() != null)     // 确保物料编码不为null
+                    .filter(material -> !existCodes.contains(material.getCode())) // 检查是否不存在
+                    .collect(Collectors.toList());
+        } else {
+            newMaterials = materials;
+        }
+        List<IotDeviceMaterialDO> tobeAddedMaterials = new ArrayList<>();
+        if (CollUtil.isNotEmpty(newMaterials)) {
+            newMaterials.forEach(material -> {
+                IotDeviceMaterialDO iotCommonBomMaterial = BeanUtils.toBean(material, IotDeviceMaterialDO.class);
+                tobeAddedMaterials.add(iotCommonBomMaterial);
+            });
+            iotDeviceMaterialMapper.insertBatch(tobeAddedMaterials);
+            resultCount = Long.valueOf(tobeAddedMaterials.size());
+        }
+        // 设置设备bom同步状态 sync_bom_status = 1
+        iotDeviceMapper.updateBomSyncStatus(deviceId);
+        return resultCount;
     }
 
 }

+ 7 - 0
yudao-module-supplier/yudao-module-supplier-biz/src/main/java/cn/iocoder/yudao/module/supplier/dal/mysql/product/SupplierMapper.java

@@ -1,6 +1,7 @@
 package cn.iocoder.yudao.module.supplier.dal.mysql.product;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.module.supplier.controller.admin.product.vo.SupplierPageReqVO;
@@ -15,6 +16,12 @@ import org.apache.ibatis.annotations.Mapper;
 @Mapper
 public interface SupplierMapper extends BaseMapperX<SupplierDO> {
 
+    /**
+     * 禁用数据权限 共享客商信息
+     * @param reqVO
+     * @return
+     */
+    @DataPermission(enable = false)
     default PageResult<SupplierDO> selectPage(SupplierPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<SupplierDO>()
                 .eqIfPresent(SupplierDO::getCode, reqVO.getCode())