Commit 662194d12f785c3269bd0542aec57252ab05113f

Authored by YunaiV
1 parent 69763355

✨ feat(mes): 重构工单状态管理及验证逻辑

移除工单状态字段,优化工单创建和更新时的验证逻辑,确保数据一致性和完整性。更新前端表单,简化状态处理,提升用户体验。
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pro/workorder/vo/MesProWorkorderPageReqVO.java
... ... @@ -26,9 +26,6 @@ public class MesProWorkOrderPageReqVO extends PageParam {
26 26 @Schema(description = "工单类型", example = "1")
27 27 private Integer type;
28 28  
29   - @Schema(description = "工单状态", example = "1")
30   - private Integer status;
31   -
32 29 @Schema(description = "来源单据编号", example = "SO-001")
33 30 private String orderSourceCode;
34 31  
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pro/workorder/MesProWorkorderMapper.java
... ... @@ -23,7 +23,6 @@ public interface MesProWorkOrderMapper extends BaseMapperX<MesProWorkOrderDO> {
23 23 .likeIfPresent(MesProWorkOrderDO::getCode, reqVO.getCode())
24 24 .likeIfPresent(MesProWorkOrderDO::getName, reqVO.getName())
25 25 .eqIfPresent(MesProWorkOrderDO::getType, reqVO.getType())
26   - .eqIfPresent(MesProWorkOrderDO::getStatus, reqVO.getStatus())
27 26 .likeIfPresent(MesProWorkOrderDO::getOrderSourceCode, reqVO.getOrderSourceCode())
28 27 .eqIfPresent(MesProWorkOrderDO::getProductId, reqVO.getProductId())
29 28 .eqIfPresent(MesProWorkOrderDO::getClientId, reqVO.getClientId())
... ...
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkorderServiceImpl.java
... ... @@ -56,13 +56,8 @@ public class MesProWorkOrderServiceImpl implements MesProWorkOrderService {
56 56 @Override
57 57 @Transactional(rollbackFor = Exception.class)
58 58 public Long createWorkOrder(MesProWorkOrderSaveReqVO createReqVO) {
59   - // TODO @AI:validateXXXSaveData
60   - // 1.1 校验编码唯一
61   - validateWorkOrderCodeUnique(null, createReqVO.getCode());
62   - // 1.2 校验产品存在
63   - itemService.validateItemExists(createReqVO.getProductId());
64   - // 1.3 校验批次配置
65   - validateBatchConfig(createReqVO.getProductId(), createReqVO.getClientId());
  59 + // 1. 校验数据
  60 + validateWorkOrderSaveData(null, createReqVO);
66 61  
67 62 // 2.1 设置默认值
68 63 if (createReqVO.getParentId() == null) {
... ... @@ -85,17 +80,13 @@ public class MesProWorkOrderServiceImpl implements MesProWorkOrderService {
85 80 @Override
86 81 @Transactional(rollbackFor = Exception.class)
87 82 public void updateWorkOrder(MesProWorkOrderSaveReqVO updateReqVO) {
88   - // 1.1 校验存在
  83 + // 1.1 校验存在 + 只有草稿状态才能编辑
89 84 MesProWorkOrderDO oldWorkOrder = validateWorkOrderExists(updateReqVO.getId());
90   - // TODO @AI:validateXXXSaveData
91   - // 1.2 只有草稿状态才能编辑
92 85 if (ObjUtil.notEqual(oldWorkOrder.getStatus(), MesProWorkOrderStatusEnum.PREPARE.getStatus())) {
93 86 throw exception(PRO_WORK_ORDER_NOT_PREPARE);
94 87 }
95   - // 1.3 校验编码唯一
96   - validateWorkOrderCodeUnique(updateReqVO.getId(), updateReqVO.getCode());
97   - // 1.4 校验批次配置
98   - validateBatchConfig(updateReqVO.getProductId(), updateReqVO.getClientId());
  88 + // 1.2 校验数据
  89 + validateWorkOrderSaveData(updateReqVO.getId(), updateReqVO);
99 90  
100 91 // 2. 判断产品或数量是否变更,如果变更则重新生成 BOM(updated=true 会先清理旧数据)
101 92 boolean productChanged = ObjUtil.notEqual(oldWorkOrder.getProductId(), updateReqVO.getProductId());
... ... @@ -222,6 +213,18 @@ public class MesProWorkOrderServiceImpl implements MesProWorkOrderService {
222 213  
223 214 // ==================== 校验方法 ====================
224 215  
  216 + private void validateWorkOrderSaveData(Long id, MesProWorkOrderSaveReqVO reqVO) {
  217 + // 1. 校验编码唯一
  218 + validateWorkOrderCodeUnique(id, reqVO.getCode());
  219 + // 2. 校验产品存在
  220 + itemService.validateItemExists(reqVO.getProductId());
  221 + // 3. 校验批次配置(如果产品有 clientFlag=true,则 clientId 必填)
  222 + MesMdItemBatchConfigDO batchConfig = itemBatchConfigService.getItemBatchConfigByItemId(reqVO.getProductId());
  223 + if (batchConfig != null && Boolean.TRUE.equals(batchConfig.getClientFlag()) && reqVO.getClientId() == null) {
  224 + throw exception(MD_CLIENT_NOT_EXISTS);
  225 + }
  226 + }
  227 +
225 228 private void validateWorkOrderCodeUnique(Long id, String code) {
226 229 if (code == null) {
227 230 return;
... ... @@ -235,15 +238,6 @@ public class MesProWorkOrderServiceImpl implements MesProWorkOrderService {
235 238 }
236 239 }
237 240  
238   - private void validateBatchConfig(Long productId, Long clientId) {
239   - // 如果产品有 clientFlag =true,则 clientId 必填
240   - MesMdItemBatchConfigDO batchConfig = itemBatchConfigService.getItemBatchConfigByItemId(productId);
241   - if (batchConfig != null && Boolean.TRUE.equals(batchConfig.getClientFlag()) && clientId == null) {
242   - // 产品要求批次管理中必须填写客户
243   - throw exception(MD_CLIENT_NOT_EXISTS);
244   - }
245   - }
246   -
247 241 @Override
248 242 public List<MesProWorkOrderDO> getWorkOrderList(Integer type) {
249 243 return workOrderMapper.selectList(new LambdaQueryWrapperX<MesProWorkOrderDO>()
... ...