Commit 3ca2f75f55d6f9a48c020bfa379ab1ef90089caf

Authored by YunaiV
1 parent 631a829f

✨ feat(mes): 添加工序编号及名称,优化工作站相关功能

新增工序编号和名称字段,更新工作站相关逻辑以支持工序信息的处理。优化工作站的创建、更新和查询功能,确保工序信息的有效性和完整性。
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/workstation/MesMdWorkstationController.java
@@ -14,8 +14,10 @@ import cn.iocoder.yudao.module.mes.controller.admin.md.workstation.vo.MesMdWorks @@ -14,8 +14,10 @@ import cn.iocoder.yudao.module.mes.controller.admin.md.workstation.vo.MesMdWorks
14 import cn.iocoder.yudao.module.mes.controller.admin.md.workstation.vo.MesMdWorkstationSaveReqVO; 14 import cn.iocoder.yudao.module.mes.controller.admin.md.workstation.vo.MesMdWorkstationSaveReqVO;
15 import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkshopDO; 15 import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkshopDO;
16 import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkstationDO; 16 import cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation.MesMdWorkstationDO;
  17 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.process.MesProProcessDO;
17 import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkshopService; 18 import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkshopService;
18 import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService; 19 import cn.iocoder.yudao.module.mes.service.md.workstation.MesMdWorkstationService;
  20 +import cn.iocoder.yudao.module.mes.service.pro.process.MesProProcessService;
19 import io.swagger.v3.oas.annotations.Operation; 21 import io.swagger.v3.oas.annotations.Operation;
20 import io.swagger.v3.oas.annotations.Parameter; 22 import io.swagger.v3.oas.annotations.Parameter;
21 import io.swagger.v3.oas.annotations.tags.Tag; 23 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -44,9 +46,10 @@ public class MesMdWorkstationController { @@ -44,9 +46,10 @@ public class MesMdWorkstationController {
44 46
45 @Resource 47 @Resource
46 private MesMdWorkstationService workstationService; 48 private MesMdWorkstationService workstationService;
47 -  
48 @Resource 49 @Resource
49 private MesMdWorkshopService workshopService; 50 private MesMdWorkshopService workshopService;
  51 + @Resource
  52 + private MesProProcessService processService;
50 53
51 @PostMapping("/create") 54 @PostMapping("/create")
52 @Operation(summary = "创建工作站") 55 @Operation(summary = "创建工作站")
@@ -116,13 +119,17 @@ public class MesMdWorkstationController { @@ -116,13 +119,17 @@ public class MesMdWorkstationController {
116 if (CollUtil.isEmpty(list)) { 119 if (CollUtil.isEmpty(list)) {
117 return Collections.emptyList(); 120 return Collections.emptyList();
118 } 121 }
119 - // 1. 批量获取车间信息 122 + // 1. 批量获取车间、工序信息
120 Map<Long, MesMdWorkshopDO> workshopMap = workshopService.getWorkshopMap( 123 Map<Long, MesMdWorkshopDO> workshopMap = workshopService.getWorkshopMap(
121 convertSet(list, MesMdWorkstationDO::getWorkshopId)); 124 convertSet(list, MesMdWorkstationDO::getWorkshopId));
  125 + Map<Long, MesProProcessDO> processMap = processService.getProcessMap(
  126 + convertSet(list, MesMdWorkstationDO::getProcessId));
122 // 2. 拼接 VO 127 // 2. 拼接 VO
123 return BeanUtils.toBean(list, MesMdWorkstationRespVO.class, vo -> { 128 return BeanUtils.toBean(list, MesMdWorkstationRespVO.class, vo -> {
124 MapUtils.findAndThen(workshopMap, vo.getWorkshopId(), 129 MapUtils.findAndThen(workshopMap, vo.getWorkshopId(),
125 workshop -> vo.setWorkshopName(workshop.getName())); 130 workshop -> vo.setWorkshopName(workshop.getName()));
  131 + MapUtils.findAndThen(processMap, vo.getProcessId(),
  132 + process -> vo.setProcessName(process.getName()));
126 }); 133 });
127 } 134 }
128 135
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/workstation/vo/MesMdWorkstationPageReqVO.java
@@ -21,6 +21,9 @@ public class MesMdWorkstationPageReqVO extends PageParam { @@ -21,6 +21,9 @@ public class MesMdWorkstationPageReqVO extends PageParam {
21 @Schema(description = "所在车间编号", example = "1") 21 @Schema(description = "所在车间编号", example = "1")
22 private Long workshopId; 22 private Long workshopId;
23 23
  24 + @Schema(description = "工序编号", example = "1")
  25 + private Long processId;
  26 +
24 @Schema(description = "状态", example = "0") 27 @Schema(description = "状态", example = "0")
25 private Integer status; 28 private Integer status;
26 29
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/workstation/vo/MesMdWorkstationRespVO.java
@@ -38,6 +38,10 @@ public class MesMdWorkstationRespVO { @@ -38,6 +38,10 @@ public class MesMdWorkstationRespVO {
38 @Schema(description = "工序编号", example = "1") 38 @Schema(description = "工序编号", example = "1")
39 private Long processId; 39 private Long processId;
40 40
  41 + @Schema(description = "工序名称", example = "打磨")
  42 + @ExcelProperty("工序名称")
  43 + private String processName;
  44 +
41 @Schema(description = "线边库编号", example = "1") 45 @Schema(description = "线边库编号", example = "1")
42 private Long warehouseId; 46 private Long warehouseId;
43 47
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/md/workstation/vo/MesMdWorkstationSaveReqVO.java
@@ -27,7 +27,8 @@ public class MesMdWorkstationSaveReqVO { @@ -27,7 +27,8 @@ public class MesMdWorkstationSaveReqVO {
27 @NotNull(message = "所在车间不能为空") 27 @NotNull(message = "所在车间不能为空")
28 private Long workshopId; 28 private Long workshopId;
29 29
30 - @Schema(description = "工序编号", example = "1") 30 + @Schema(description = "工序编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  31 + @NotNull(message = "所属工序不能为空")
31 private Long processId; 32 private Long processId;
32 33
33 @Schema(description = "线边库编号", example = "1") 34 @Schema(description = "线边库编号", example = "1")
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/dataobject/md/workstation/MesMdWorkstationDO.java
1 package cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation; 1 package cn.iocoder.yudao.module.mes.dal.dataobject.md.workstation;
2 2
3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; 3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  4 +import cn.iocoder.yudao.module.mes.dal.dataobject.pro.process.MesProProcessDO;
  5 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseAreaDO;
  6 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseDO;
  7 +import cn.iocoder.yudao.module.mes.dal.dataobject.wm.warehouse.MesWmWarehouseLocationDO;
4 import com.baomidou.mybatisplus.annotation.KeySequence; 8 import com.baomidou.mybatisplus.annotation.KeySequence;
5 import com.baomidou.mybatisplus.annotation.TableId; 9 import com.baomidou.mybatisplus.annotation.TableId;
6 import com.baomidou.mybatisplus.annotation.TableName; 10 import com.baomidou.mybatisplus.annotation.TableName;
@@ -47,25 +51,25 @@ public class MesMdWorkstationDO extends BaseDO { @@ -47,25 +51,25 @@ public class MesMdWorkstationDO extends BaseDO {
47 /** 51 /**
48 * 工序编号 52 * 工序编号
49 * 53 *
50 - * TODO @芋艿:等 pro 模块,关联工序表 54 + * 关联 {@link MesProProcessDO#getId()}
51 */ 55 */
52 private Long processId; 56 private Long processId;
53 /** 57 /**
54 * 线边库编号 58 * 线边库编号
55 * 59 *
56 - * TODO @芋艿:等 wm 模块,关联仓库表 60 + * 关联 {@link MesWmWarehouseDO#getId()}
57 */ 61 */
58 private Long warehouseId; 62 private Long warehouseId;
59 /** 63 /**
60 * 库区编号 64 * 库区编号
61 * 65 *
62 - * TODO @芋艿:等 wm 模块,关联库区表 66 + * 关联 {@link MesWmWarehouseLocationDO#getId()}
63 */ 67 */
64 private Long locationId; 68 private Long locationId;
65 /** 69 /**
66 * 库位编号 70 * 库位编号
67 * 71 *
68 - * TODO @芋艿:等 wm 模块,关联库位表 72 + * 关联 {@link MesWmWarehouseAreaDO#getId()}
69 */ 73 */
70 private Long areaId; 74 private Long areaId;
71 /** 75 /**
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/md/workstation/MesMdWorkstationMapper.java
@@ -22,6 +22,7 @@ public interface MesMdWorkstationMapper extends BaseMapperX&lt;MesMdWorkstationDO&gt; @@ -22,6 +22,7 @@ public interface MesMdWorkstationMapper extends BaseMapperX&lt;MesMdWorkstationDO&gt;
22 .eqIfPresent(MesMdWorkstationDO::getCode, reqVO.getCode()) 22 .eqIfPresent(MesMdWorkstationDO::getCode, reqVO.getCode())
23 .likeIfPresent(MesMdWorkstationDO::getName, reqVO.getName()) 23 .likeIfPresent(MesMdWorkstationDO::getName, reqVO.getName())
24 .eqIfPresent(MesMdWorkstationDO::getWorkshopId, reqVO.getWorkshopId()) 24 .eqIfPresent(MesMdWorkstationDO::getWorkshopId, reqVO.getWorkshopId())
  25 + .eqIfPresent(MesMdWorkstationDO::getProcessId, reqVO.getProcessId())
25 .eqIfPresent(MesMdWorkstationDO::getStatus, reqVO.getStatus()) 26 .eqIfPresent(MesMdWorkstationDO::getStatus, reqVO.getStatus())
26 .orderByDesc(MesMdWorkstationDO::getId)); 27 .orderByDesc(MesMdWorkstationDO::getId));
27 } 28 }
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/enums/md/autocode/MesMdAutoCodeRuleCodeEnum.java
@@ -15,6 +15,7 @@ public enum MesMdAutoCodeRuleCodeEnum { @@ -15,6 +15,7 @@ public enum MesMdAutoCodeRuleCodeEnum {
15 MD_ITEM_CODE("MD_ITEM_CODE", "物料编码"), 15 MD_ITEM_CODE("MD_ITEM_CODE", "物料编码"),
16 MD_VENDOR_CODE("MD_VENDOR_CODE", "供应商编码"), 16 MD_VENDOR_CODE("MD_VENDOR_CODE", "供应商编码"),
17 MD_CLIENT_CODE("MD_CLIENT_CODE", "客户编码"), 17 MD_CLIENT_CODE("MD_CLIENT_CODE", "客户编码"),
  18 + MD_WORKSTATION_CODE("MD_WORKSTATION_CODE", "工作站编码"),
18 WM_SN_CODE("WM_SN_CODE", "SN 码"), 19 WM_SN_CODE("WM_SN_CODE", "SN 码"),
19 WM_PACKAGE_CODE("WM_PACKAGE_CODE", "装箱单编码"), 20 WM_PACKAGE_CODE("WM_PACKAGE_CODE", "装箱单编码"),
20 WM_BATCH_CODE("WM_BATCH_CODE", "批次编码"), 21 WM_BATCH_CODE("WM_BATCH_CODE", "批次编码"),
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/md/workstation/MesMdWorkstationServiceImpl.java
@@ -19,6 +19,7 @@ import cn.iocoder.yudao.module.mes.service.wm.barcode.MesWmBarcodeService; @@ -19,6 +19,7 @@ import cn.iocoder.yudao.module.mes.service.wm.barcode.MesWmBarcodeService;
19 import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService; 19 import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseAreaService;
20 import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService; 20 import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseLocationService;
21 import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService; 21 import cn.iocoder.yudao.module.mes.service.wm.warehouse.MesWmWarehouseService;
  22 +import cn.iocoder.yudao.module.mes.service.pro.process.MesProProcessService;
22 import jakarta.annotation.Resource; 23 import jakarta.annotation.Resource;
23 import org.springframework.stereotype.Service; 24 import org.springframework.stereotype.Service;
24 import org.springframework.transaction.annotation.Transactional; 25 import org.springframework.transaction.annotation.Transactional;
@@ -67,16 +68,13 @@ public class MesMdWorkstationServiceImpl implements MesMdWorkstationService { @@ -67,16 +68,13 @@ public class MesMdWorkstationServiceImpl implements MesMdWorkstationService {
67 @Resource 68 @Resource
68 private MesWmBarcodeService barcodeService; 69 private MesWmBarcodeService barcodeService;
69 70
  71 + @Resource
  72 + private MesProProcessService processService;
  73 +
70 @Override 74 @Override
71 public Long createWorkstation(MesMdWorkstationSaveReqVO createReqVO) { 75 public Long createWorkstation(MesMdWorkstationSaveReqVO createReqVO) {
72 - // 校验编码唯一  
73 - validateWorkstationCodeUnique(null, createReqVO.getCode());  
74 - // 校验名称唯一  
75 - validateWorkstationNameUnique(null, createReqVO.getName());  
76 - // 校验车间存在  
77 - validateWorkshopExists(createReqVO.getWorkshopId());  
78 - // 校验仓库层级  
79 - validateWarehouseHierarchy(createReqVO); 76 + // 校验数据
  77 + validateWorkstationSaveData(null, createReqVO);
80 78
81 // 插入 79 // 插入
82 MesMdWorkstationDO workstation = BeanUtils.toBean(createReqVO, MesMdWorkstationDO.class); 80 MesMdWorkstationDO workstation = BeanUtils.toBean(createReqVO, MesMdWorkstationDO.class);
@@ -92,20 +90,27 @@ public class MesMdWorkstationServiceImpl implements MesMdWorkstationService { @@ -92,20 +90,27 @@ public class MesMdWorkstationServiceImpl implements MesMdWorkstationService {
92 public void updateWorkstation(MesMdWorkstationSaveReqVO updateReqVO) { 90 public void updateWorkstation(MesMdWorkstationSaveReqVO updateReqVO) {
93 // 校验存在 91 // 校验存在
94 validateWorkstationExists(updateReqVO.getId()); 92 validateWorkstationExists(updateReqVO.getId());
95 - // 校验编码唯一  
96 - validateWorkstationCodeUnique(updateReqVO.getId(), updateReqVO.getCode());  
97 - // 校验名称唯一  
98 - validateWorkstationNameUnique(updateReqVO.getId(), updateReqVO.getName());  
99 - // 校验车间存在  
100 - validateWorkshopExists(updateReqVO.getWorkshopId());  
101 - // 校验仓库层级  
102 - validateWarehouseHierarchy(updateReqVO); 93 + // 校验数据
  94 + validateWorkstationSaveData(updateReqVO.getId(), updateReqVO);
103 95
104 // 更新 96 // 更新
105 MesMdWorkstationDO updateObj = BeanUtils.toBean(updateReqVO, MesMdWorkstationDO.class); 97 MesMdWorkstationDO updateObj = BeanUtils.toBean(updateReqVO, MesMdWorkstationDO.class);
106 workstationMapper.updateById(updateObj); 98 workstationMapper.updateById(updateObj);
107 } 99 }
108 100
  101 + private void validateWorkstationSaveData(Long id, MesMdWorkstationSaveReqVO reqVO) {
  102 + // 校验编码唯一
  103 + validateWorkstationCodeUnique(id, reqVO.getCode());
  104 + // 校验名称唯一
  105 + validateWorkstationNameUnique(id, reqVO.getName());
  106 + // 校验车间存在
  107 + validateWorkshopExists(reqVO.getWorkshopId());
  108 + // 校验工序存在
  109 + processService.validateProcessExists(reqVO.getProcessId());
  110 + // 校验仓库层级
  111 + validateWarehouseHierarchy(reqVO);
  112 + }
  113 +
109 @Override 114 @Override
110 @Transactional(rollbackFor = Exception.class) 115 @Transactional(rollbackFor = Exception.class)
111 public void deleteWorkstation(Long id) { 116 public void deleteWorkstation(Long id) {