Explorar el Código

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

移除工单状态字段,优化工单创建和更新时的验证逻辑,确保数据一致性和完整性。更新前端表单,简化状态处理,提升用户体验。
YunaiV hace 2 meses
padre
commit
662194d12f

+ 0 - 3
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 {
     @Schema(description = "工单类型", example = "1")
     private Integer type;
 
-    @Schema(description = "工单状态", example = "1")
-    private Integer status;
-
     @Schema(description = "来源单据编号", example = "SO-001")
     private String orderSourceCode;
 

+ 0 - 1
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> {
                 .likeIfPresent(MesProWorkOrderDO::getCode, reqVO.getCode())
                 .likeIfPresent(MesProWorkOrderDO::getName, reqVO.getName())
                 .eqIfPresent(MesProWorkOrderDO::getType, reqVO.getType())
-                .eqIfPresent(MesProWorkOrderDO::getStatus, reqVO.getStatus())
                 .likeIfPresent(MesProWorkOrderDO::getOrderSourceCode, reqVO.getOrderSourceCode())
                 .eqIfPresent(MesProWorkOrderDO::getProductId, reqVO.getProductId())
                 .eqIfPresent(MesProWorkOrderDO::getClientId, reqVO.getClientId())

+ 17 - 23
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 {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public Long createWorkOrder(MesProWorkOrderSaveReqVO createReqVO) {
-        // TODO @AI:validateXXXSaveData
-        // 1.1 校验编码唯一
-        validateWorkOrderCodeUnique(null, createReqVO.getCode());
-        // 1.2 校验产品存在
-        itemService.validateItemExists(createReqVO.getProductId());
-        // 1.3 校验批次配置
-        validateBatchConfig(createReqVO.getProductId(), createReqVO.getClientId());
+        // 1. 校验数据
+        validateWorkOrderSaveData(null, createReqVO);
 
         // 2.1 设置默认值
         if (createReqVO.getParentId() == null) {
@@ -85,17 +80,13 @@ public class MesProWorkOrderServiceImpl implements MesProWorkOrderService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void updateWorkOrder(MesProWorkOrderSaveReqVO updateReqVO) {
-        // 1.1 校验存在
+        // 1.1 校验存在 + 只有草稿状态才能编辑
         MesProWorkOrderDO oldWorkOrder = validateWorkOrderExists(updateReqVO.getId());
-        // TODO @AI:validateXXXSaveData
-        // 1.2 只有草稿状态才能编辑
         if (ObjUtil.notEqual(oldWorkOrder.getStatus(), MesProWorkOrderStatusEnum.PREPARE.getStatus())) {
             throw exception(PRO_WORK_ORDER_NOT_PREPARE);
         }
-        // 1.3 校验编码唯一
-        validateWorkOrderCodeUnique(updateReqVO.getId(), updateReqVO.getCode());
-        // 1.4 校验批次配置
-        validateBatchConfig(updateReqVO.getProductId(), updateReqVO.getClientId());
+        // 1.2 校验数据
+        validateWorkOrderSaveData(updateReqVO.getId(), updateReqVO);
 
         // 2. 判断产品或数量是否变更,如果变更则重新生成 BOM(updated=true 会先清理旧数据)
         boolean productChanged = ObjUtil.notEqual(oldWorkOrder.getProductId(), updateReqVO.getProductId());
@@ -222,6 +213,18 @@ public class MesProWorkOrderServiceImpl implements MesProWorkOrderService {
 
     // ==================== 校验方法 ====================
 
+    private void validateWorkOrderSaveData(Long id, MesProWorkOrderSaveReqVO reqVO) {
+        // 1. 校验编码唯一
+        validateWorkOrderCodeUnique(id, reqVO.getCode());
+        // 2. 校验产品存在
+        itemService.validateItemExists(reqVO.getProductId());
+        // 3. 校验批次配置(如果产品有 clientFlag=true,则 clientId 必填)
+        MesMdItemBatchConfigDO batchConfig = itemBatchConfigService.getItemBatchConfigByItemId(reqVO.getProductId());
+        if (batchConfig != null && Boolean.TRUE.equals(batchConfig.getClientFlag()) && reqVO.getClientId() == null) {
+            throw exception(MD_CLIENT_NOT_EXISTS);
+        }
+    }
+
     private void validateWorkOrderCodeUnique(Long id, String code) {
         if (code == null) {
             return;
@@ -235,15 +238,6 @@ public class MesProWorkOrderServiceImpl implements MesProWorkOrderService {
         }
     }
 
-    private void validateBatchConfig(Long productId, Long clientId) {
-        // 如果产品有 clientFlag =true,则 clientId 必填
-        MesMdItemBatchConfigDO batchConfig = itemBatchConfigService.getItemBatchConfigByItemId(productId);
-        if (batchConfig != null && Boolean.TRUE.equals(batchConfig.getClientFlag()) && clientId == null) {
-            // 产品要求批次管理中必须填写客户
-            throw exception(MD_CLIENT_NOT_EXISTS);
-        }
-    }
-
     @Override
     public List<MesProWorkOrderDO> getWorkOrderList(Integer type) {
         return workOrderMapper.selectList(new LambdaQueryWrapperX<MesProWorkOrderDO>()