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