소스 검색

pms功能优化 物料管理

zhangcl 5 달 전
부모
커밋
2a515b0932
10개의 변경된 파일219개의 추가작업 그리고 7개의 파일을 삭제
  1. 41 4
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterial/IotMaterialController.java
  2. 3 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterial/vo/IotMaterialRespVO.java
  3. 34 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterial/vo/IotMaterialSimpleRespVO.java
  4. 23 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterial/vo/MaterialUpdateStatusReqVO.java
  5. 41 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/convert/iotmaterial/IotMaterialConvert.java
  6. 7 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotmaterial/IotMaterialMapper.java
  7. 16 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmaterial/IotMaterialService.java
  8. 19 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmaterial/IotMaterialServiceImpl.java
  9. 24 0
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmaterialgroup/IotMaterialGroupService.java
  10. 11 3
      yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmaterialgroup/IotMaterialGroupServiceImpl.java

+ 41 - 4
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterial/IotMaterialController.java

@@ -1,16 +1,23 @@
 package cn.iocoder.yudao.module.pms.controller.admin.iotmaterial;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+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.object.BeanUtils;
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
-import cn.iocoder.yudao.module.pms.controller.admin.iotmaterial.vo.IotMaterialPageReqVO;
-import cn.iocoder.yudao.module.pms.controller.admin.iotmaterial.vo.IotMaterialRespVO;
-import cn.iocoder.yudao.module.pms.controller.admin.iotmaterial.vo.IotMaterialSaveReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterial.vo.*;
+import cn.iocoder.yudao.module.pms.convert.iotmaterial.IotMaterialConvert;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterial.IotMaterialDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterialgroup.IotMaterialGroupDO;
 import cn.iocoder.yudao.module.pms.service.iotmaterial.IotMaterialService;
+import cn.iocoder.yudao.module.pms.service.iotmaterialgroup.IotMaterialGroupService;
+import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserUpdateStatusReqVO;
+import cn.iocoder.yudao.module.system.convert.user.UserConvert;
+import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -23,9 +30,11 @@ import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
 import java.util.List;
+import java.util.Map;
 
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList;
 
 @Tag(name = "管理后台 - PMS 功能优化 物料")
 @RestController
@@ -36,6 +45,9 @@ public class IotMaterialController {
     @Resource
     private IotMaterialService iotMaterialService;
 
+    @Resource
+    private IotMaterialGroupService iotMaterialGroupService;
+
     @PostMapping("/create")
     @Operation(summary = "创建PMS 功能优化 物料")
     @PreAuthorize("@ss.hasPermission('rq:iot-material:create')")
@@ -51,6 +63,14 @@ public class IotMaterialController {
         return success(true);
     }
 
+    @PutMapping("/update-status")
+    @Operation(summary = "修改物料状态")
+    @PreAuthorize("@ss.hasPermission('rq:iot-material:update')")
+    public CommonResult<Boolean> updateMaterialStatus(@Valid @RequestBody MaterialUpdateStatusReqVO reqVO) {
+        iotMaterialService.updateMaterialStatus(reqVO.getId(), reqVO.getStatus());
+        return success(true);
+    }
+
     @DeleteMapping("/delete")
     @Operation(summary = "删除PMS 功能优化 物料")
     @Parameter(name = "id", description = "编号", required = true)
@@ -74,7 +94,24 @@ public class IotMaterialController {
     @PreAuthorize("@ss.hasPermission('rq:iot-material:query')")
     public CommonResult<PageResult<IotMaterialRespVO>> getIotMaterialPage(@Valid IotMaterialPageReqVO pageReqVO) {
         PageResult<IotMaterialDO> pageResult = iotMaterialService.getIotMaterialPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, IotMaterialRespVO.class));
+        if (CollUtil.isEmpty(pageResult.getList())) {
+            return success(new PageResult<>(pageResult.getTotal()));
+        }
+        // 拼接物料组
+        Map<Long, IotMaterialGroupDO> materialGroupMap = iotMaterialGroupService.getMaterialGroupMap(
+                convertList(pageResult.getList(), IotMaterialDO::getMaterialGroupId));
+        return success(new PageResult<>(IotMaterialConvert.INSTANCE.convertList(pageResult.getList(), materialGroupMap),
+                pageResult.getTotal()));
+    }
+
+    @GetMapping({"/list-all-simple", "/simple-list"})
+    @Operation(summary = "获取物料精简信息列表", description = "只包含被开启的物料,主要用于前端的下拉选项")
+    public CommonResult<List<IotMaterialSimpleRespVO>> getSimpleMaterialList() {
+        List<IotMaterialDO> list = iotMaterialService.getMaterialListByStatus(CommonStatusEnum.ENABLE.getStatus());
+        // 拼接数据
+        Map<Long, IotMaterialGroupDO> materialGroupMap = iotMaterialGroupService.getMaterialGroupMap(
+                convertList(list, IotMaterialDO::getMaterialGroupId));
+        return success(IotMaterialConvert.INSTANCE.convertSimpleList(list, materialGroupMap));
     }
 
     @GetMapping("/export-excel")

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

@@ -20,6 +20,9 @@ public class IotMaterialRespVO {
     @ExcelProperty("物料组id")
     private Long materialGroupId;
 
+    @Schema(description = "物料组名称", example = "pms")
+    private String materialGroupName;
+
     @Schema(description = "BOM叶子节点", example = "10893")
     @ExcelProperty("BOM叶子节点")
     private Long bomId;

+ 34 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterial/vo/IotMaterialSimpleRespVO.java

@@ -0,0 +1,34 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotmaterial.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Schema(description = "管理后台 - 物料精简信息 Response VO")
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class IotMaterialSimpleRespVO {
+
+    @Schema(description = "物料id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+    private Long id;
+
+    @Schema(description = "物料名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "pms")
+    private String name;
+
+    @Schema(description = "物料编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "pms")
+    private String code;
+
+    @Schema(description = "规格型号", requiredMode = Schema.RequiredMode.REQUIRED, example = "pms")
+    private String model;
+
+    @Schema(description = "单位", requiredMode = Schema.RequiredMode.REQUIRED, example = "pms")
+    private String unit;
+
+    @Schema(description = "物料组ID", example = "1024")
+    private Long materialGroupId;
+    @Schema(description = "物料组名称", example = "IT 部")
+    private String materialGroupName;
+
+}

+ 23 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/iotmaterial/vo/MaterialUpdateStatusReqVO.java

@@ -0,0 +1,23 @@
+package cn.iocoder.yudao.module.pms.controller.admin.iotmaterial.vo;
+
+import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
+import cn.iocoder.yudao.framework.common.validation.InEnum;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 物料更新状态 Request VO")
+@Data
+public class MaterialUpdateStatusReqVO {
+
+    @Schema(description = "物料id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
+    @NotNull(message = "物料id不能为空")
+    private Long id;
+
+    @Schema(description = "状态,见 CommonStatusEnum 枚举", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "状态不能为空")
+    @InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}")
+    private Integer status;
+
+}

+ 41 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/convert/iotmaterial/IotMaterialConvert.java

@@ -0,0 +1,41 @@
+package cn.iocoder.yudao.module.pms.convert.iotmaterial;
+
+import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
+import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterial.vo.IotMaterialRespVO;
+import cn.iocoder.yudao.module.pms.controller.admin.iotmaterial.vo.IotMaterialSimpleRespVO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterial.IotMaterialDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterialgroup.IotMaterialGroupDO;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+import java.util.Map;
+
+@Mapper
+public interface IotMaterialConvert {
+
+    IotMaterialConvert INSTANCE = Mappers.getMapper(IotMaterialConvert.class);
+
+    default List<IotMaterialRespVO> convertList(List<IotMaterialDO> list, Map<Long, IotMaterialGroupDO> materialGroupMap) {
+        return CollectionUtils.convertList(list, material -> convert(material, materialGroupMap.get(material.getMaterialGroupId())));
+    }
+
+    default IotMaterialRespVO convert(IotMaterialDO material, IotMaterialGroupDO materialGroup) {
+        IotMaterialRespVO materialVO = BeanUtils.toBean(material, IotMaterialRespVO.class);
+        if (materialGroup != null) {
+            materialVO.setMaterialGroupName(materialGroup.getName());
+        }
+        return materialVO;
+    }
+
+    default List<IotMaterialSimpleRespVO> convertSimpleList(List<IotMaterialDO> list, Map<Long, IotMaterialGroupDO> materialGroupMap) {
+        return CollectionUtils.convertList(list, material -> {
+            IotMaterialSimpleRespVO materialVO = BeanUtils.toBean(material, IotMaterialSimpleRespVO.class);
+            MapUtils.findAndThen(materialGroupMap, material.getMaterialGroupId(), group -> materialVO.setMaterialGroupName(group.getName()));
+            return materialVO;
+        });
+    }
+
+}

+ 7 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/iotmaterial/IotMaterialMapper.java

@@ -5,8 +5,11 @@ import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmaterial.vo.IotMaterialPageReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterial.IotMaterialDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.util.List;
+
 /**
  * PMS 功能优化 物料 Mapper
  *
@@ -35,4 +38,8 @@ public interface IotMaterialMapper extends BaseMapperX<IotMaterialDO> {
                 .orderByDesc(IotMaterialDO::getId));
     }
 
+    default List<IotMaterialDO> selectListByStatus(Integer status) {
+        return selectList(IotMaterialDO::getStatus, status);
+    }
+
 }

+ 16 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmaterial/IotMaterialService.java

@@ -5,6 +5,7 @@ import cn.iocoder.yudao.module.pms.controller.admin.iotmaterial.vo.*;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterial.IotMaterialDO;
 
 import javax.validation.Valid;
+import java.util.List;
 
 /**
  * PMS 功能优化 物料 Service 接口
@@ -28,6 +29,14 @@ public interface IotMaterialService {
      */
     void updateIotMaterial(@Valid IotMaterialSaveReqVO updateReqVO);
 
+    /**
+     * 修改状态
+     *
+     * @param id     物料id
+     * @param status 状态
+     */
+    void updateMaterialStatus(Long id, Integer status);
+
     /**
      * 删除PMS 功能优化 物料
      *
@@ -51,4 +60,11 @@ public interface IotMaterialService {
      */
     PageResult<IotMaterialDO> getIotMaterialPage(IotMaterialPageReqVO pageReqVO);
 
+    /**
+     * 获得指定状态的 物料
+     *
+     * @param status 状态
+     * @return 物料列表
+     */
+    List<IotMaterialDO> getMaterialListByStatus(Integer status);
 }

+ 19 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmaterial/IotMaterialServiceImpl.java

@@ -5,11 +5,14 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmaterial.vo.*;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterial.IotMaterialDO;
 import cn.iocoder.yudao.module.pms.dal.mysql.iotmaterial.IotMaterialMapper;
+import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 
+import java.util.List;
+
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_MATERIAL_NOT_EXISTS;
 
@@ -44,6 +47,17 @@ public class IotMaterialServiceImpl implements IotMaterialService {
         iotMaterialMapper.updateById(updateObj);
     }
 
+    @Override
+    public void updateMaterialStatus(Long id, Integer status) {
+        // 校验用户存在
+        validateIotMaterialExists(id);
+        // 更新状态
+        IotMaterialDO updateObj = new IotMaterialDO();
+        updateObj.setId(id);
+        updateObj.setStatus(status);
+        iotMaterialMapper.updateById(updateObj);
+    }
+
     @Override
     public void deleteIotMaterial(Long id) {
         // 校验存在
@@ -68,4 +82,9 @@ public class IotMaterialServiceImpl implements IotMaterialService {
         return iotMaterialMapper.selectPage(pageReqVO);
     }
 
+    @Override
+    public List<IotMaterialDO> getMaterialListByStatus(Integer status) {
+        return iotMaterialMapper.selectListByStatus(status);
+    }
+
 }

+ 24 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmaterialgroup/IotMaterialGroupService.java

@@ -1,13 +1,17 @@
 package cn.iocoder.yudao.module.pms.service.iotmaterialgroup;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialgroup.vo.IotMaterialGroupListReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialgroup.vo.IotMaterialGroupPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotmaterialgroup.vo.IotMaterialGroupSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaterialgroup.IotMaterialGroupDO;
+import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
 
 import javax.validation.Valid;
+import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * PMS 功能优化 物料组 Service 接口
@@ -61,4 +65,24 @@ public interface IotMaterialGroupService {
      * @return 物料组列表
      */
     List<IotMaterialGroupDO> getMaterialGroupList(IotMaterialGroupListReqVO reqVO);
+
+
+    /**
+     * 获取物料组信息数组
+     *
+     * @param ids 筛选条件请求 VO
+     * @return 物料组列表
+     */
+    List<IotMaterialGroupDO> getMaterialGroupList(Collection<Long> ids);
+
+    /**
+     * 获得指定编号的物料组 Map
+     *
+     * @param ids 物料组编号数组
+     * @return 物料组 Map
+     */
+    default Map<Long, IotMaterialGroupDO> getMaterialGroupMap(List<Long> ids){
+        List<IotMaterialGroupDO> list = getMaterialGroupList(ids);
+        return CollectionUtils.convertMap(list, IotMaterialGroupDO::getId);
+    };
 }

+ 11 - 3
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmaterialgroup/IotMaterialGroupServiceImpl.java

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.pms.service.iotmaterialgroup;
 
+import cn.hutool.core.collection.CollUtil;
 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.iotmaterialgroup.vo.IotMaterialGroupListReqVO;
@@ -11,8 +12,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
-import java.util.Comparator;
-import java.util.List;
+import java.util.*;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_MATERIAL_GROUP_NOT_EXISTS;
@@ -21,7 +21,7 @@ import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_MATERIAL_G
 /**
  * PMS 功能优化 物料组 Service 实现类
  *
- * @author 芋道源码
+ * @author ruiqi
  */
 @Service
 @Validated
@@ -79,4 +79,12 @@ public class IotMaterialGroupServiceImpl implements IotMaterialGroupService {
         return list;
     }
 
+    @Override
+    public List<IotMaterialGroupDO> getMaterialGroupList(Collection<Long> ids) {
+        if (CollUtil.isEmpty(ids)) {
+            return Collections.emptyList();
+        }
+        return iotMaterialGroupMapper.selectBatchIds(ids);
+    }
+
 }