From 940c8481d2fdcf51341db4ccd6fd6fcc2d43debb Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期一, 29 六月 2026 15:32:58 +0800
Subject: [PATCH] 初始化项目

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkOrderServiceImpl.java |   75 +++++++++++++++++++++++++++++++++++++
 1 files changed, 75 insertions(+), 0 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkOrderServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkOrderServiceImpl.java
index 99332dd..67f0159 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkOrderServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/workorder/MesProWorkOrderServiceImpl.java
@@ -4,6 +4,8 @@
 import cn.hutool.core.util.ObjUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi;
+import cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO;
 import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkOrderPageReqVO;
 import cn.iocoder.yudao.module.mes.controller.admin.pro.workorder.vo.MesProWorkOrderSaveReqVO;
 import cn.iocoder.yudao.module.mes.dal.dataobject.md.item.MesMdItemBatchConfigDO;
@@ -16,6 +18,7 @@
 import cn.iocoder.yudao.module.mes.service.pro.task.MesProTaskService;
 import cn.iocoder.yudao.module.mes.service.wm.barcode.MesWmBarcodeService;
 import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
@@ -36,7 +39,13 @@
  */
 @Service
 @Validated
+@Slf4j
 public class MesProWorkOrderServiceImpl implements MesProWorkOrderService {
+
+    /**
+     * BPM 鐢熶骇宸ュ崟瀹℃壒娴佺▼鏍囪瘑
+     */
+    public static final String BPM_PROCESS_DEFINITION_KEY = "mes-pro-work-order-audit";
 
     @Resource
     private MesProWorkOrderMapper workOrderMapper;
@@ -51,6 +60,9 @@
     private MesWmBarcodeService barcodeService;
     @Resource
     private MesProTaskService taskService;
+
+    @Resource
+    private BpmProcessInstanceApi bpmProcessInstanceApi;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -250,4 +262,67 @@
         return workOrderMapper.selectCountByVendorId(vendorId);
     }
 
+    // ==================== BPM 娴佺▼瀹℃壒 ====================
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void submitWorkOrder(Long id, Long userId) {
+        // 1. 鏍¢獙宸ュ崟澶勪簬鑽夌鐘舵��
+        MesProWorkOrderDO workOrder = validateWorkOrderExists(id);
+        if (ObjUtil.notEqual(workOrder.getStatus(), MesProWorkOrderStatusEnum.PREPARE.getStatus())) {
+            throw exception(PRO_WORK_ORDER_SUBMIT_FAIL_NOT_PREPARE);
+        }
+
+        // 2. 鍒涘缓鐢熶骇宸ュ崟瀹℃壒娴佺▼瀹炰緥
+        String processInstanceId = bpmProcessInstanceApi.createProcessInstance(userId, new BpmProcessInstanceCreateReqDTO()
+                .setProcessDefinitionKey(BPM_PROCESS_DEFINITION_KEY)
+                .setBusinessKey(String.valueOf(id)));
+
+        // 3. 鏇存柊宸ュ崟宸ヤ綔娴佺紪鍙枫�佺姸鎬佷负瀹℃壒涓�
+        workOrderMapper.updateById(new MesProWorkOrderDO()
+                .setId(id)
+                .setProcessInstanceId(processInstanceId)
+                .setStatus(MesProWorkOrderStatusEnum.AUDITING.getStatus()));
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void updateWorkOrderAuditStatus(Long id, Integer bpmResult) {
+        // 1. 鏍¢獙宸ュ崟瀛樺湪
+        MesProWorkOrderDO workOrder = validateWorkOrderExists(id);
+
+        // 2. 鏍¢獙宸ュ崟澶勪簬瀹℃壒涓�
+        if (ObjUtil.notEqual(workOrder.getStatus(), MesProWorkOrderStatusEnum.AUDITING.getStatus())) {
+            log.error("[updateWorkOrderAuditStatus][workOrder({}) 涓嶅浜庡鎵逛腑锛屾棤娉曟洿鏂板鎵圭粨鏋�({})]",
+                    workOrder.getId(), bpmResult);
+            throw exception(PRO_WORK_ORDER_UPDATE_AUDIT_STATUS_FAIL_NOT_AUDITING);
+        }
+
+        // 3. 鏇存柊宸ュ崟瀹℃壒缁撴灉
+        Integer auditStatus = convertBpmResultToWorkOrderStatus(bpmResult);
+        workOrderMapper.updateById(new MesProWorkOrderDO()
+                .setId(id)
+                .setStatus(auditStatus));
+    }
+
+    /**
+     * 灏� BPM 瀹℃壒缁撴灉杞崲涓� MES 宸ュ崟鐘舵��
+     *
+     * @param bpmResult BPM 瀹℃壒缁撴灉
+     * @return MES 宸ュ崟鐘舵��
+     */
+    private Integer convertBpmResultToWorkOrderStatus(Integer bpmResult) {
+        // BPM 瀹℃壒缁撴灉锛�2=閫氳繃锛�3=涓嶉�氳繃锛�4=宸插彇娑�
+        if (bpmResult == 2) {
+            return MesProWorkOrderStatusEnum.CONFIRMED.getStatus();
+        } else if (bpmResult == 3) {
+            return MesProWorkOrderStatusEnum.REJECTED.getStatus();
+        } else if (bpmResult == 4) {
+            return MesProWorkOrderStatusEnum.PREPARE.getStatus();
+        } else {
+            log.warn("[convertBpmResultToWorkOrderStatus][鏈煡鐨� BPM 瀹℃壒缁撴灉({})]", bpmResult);
+            return MesProWorkOrderStatusEnum.AUDITING.getStatus();
+        }
+    }
+
 }

--
Gitblit v1.9.3