From 0da8464afe907ed91ab03eebc7613666353bd7e5 Mon Sep 17 00:00:00 2001
From: hsy <1029150275@qq.com>
Date: 星期三, 19 八月 2026 11:54:08 +0800
Subject: [PATCH] feat(mes): 新增工作台报工数据隔离与生产订单BPM审批动态控制
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java | 77 ++++++++++++++++++++++++++++++++++++--
1 files changed, 72 insertions(+), 5 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java
index d5401e9..3d3022f 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java
@@ -4,6 +4,7 @@
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.mes.controller.admin.pro.feedback.vo.*;
@@ -62,6 +63,7 @@
*/
@Service
@Validated
+@lombok.extern.slf4j.Slf4j
public class MesProFeedbackServiceImpl implements MesProFeedbackService {
@Resource
@@ -94,6 +96,8 @@
private MesMdmItemService mdmItemService;
@Resource
private MdmItemBatchConfigApi itemBatchConfigApi;
+ @Resource
+ private cn.iocoder.yudao.module.bpm.api.task.BpmProcessInstanceApi processInstanceApi;
@Override
public Long createFeedback(MesProFeedbackSaveReqVO createReqVO) {
@@ -154,13 +158,76 @@
}
@Override
- public void submitFeedback(Long id) {
+ @Transactional(rollbackFor = Exception.class)
+ public void submitFeedback(MesProFeedbackSubmitReqVO reqVO) {
+ Long id = reqVO.getId();
// 1. 鏍¢獙瀛樺湪 + 鑽夌鐘舵��
- validateFeedbackStatusPrepare(id);
+ MesProFeedbackDO feedback = validateFeedbackStatusPrepare(id);
- // 2. 鏇存柊鐘舵�佷负瀹℃壒涓紙鎶ュ伐浜哄拰鎶ュ伐鏃堕棿鐢辫〃鍗曚繚瀛樻椂纭畾锛屾彁浜や笉瑕嗙洊锛�
- feedbackMapper.updateById(new MesProFeedbackDO().setId(id)
- .setStatus(MesProFeedbackStatusEnum.APPROVING.getStatus()));
+ MesProWorkOrderDO workOrder = workOrderService.getWorkOrder(feedback.getWorkOrderId());
+
+ if (workOrder != null && Boolean.TRUE.equals(workOrder.getFeedbackApprove()) && cn.hutool.core.util.StrUtil.isNotBlank(workOrder.getProcessDefinitionKey())) {
+ // 2. 鏇存柊鐘舵�佷负瀹℃壒涓紝骞跺惎鍔ㄦ祦绋�
+ String processInstanceId = processInstanceApi.createProcessInstance(cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId(),
+ new cn.iocoder.yudao.module.bpm.api.task.dto.BpmProcessInstanceCreateReqDTO()
+ .setProcessDefinitionKey(workOrder.getProcessDefinitionKey())
+ .setBusinessKey(String.valueOf(id)));
+
+ feedbackMapper.updateById(new MesProFeedbackDO().setId(id)
+ .setStatus(MesProFeedbackStatusEnum.APPROVING.getStatus())
+ .setProcessDefinitionKey(workOrder.getProcessDefinitionKey())
+ .setProcessInstanceId(processInstanceId));
+ } else {
+ // 2. 鍒ゆ柇杩欎釜鎶ュ伐闇�涓嶉渶瑕佹壒娆″彿
+ MesProFeedbackBatchCheckRespVO mesProFeedbackBatchCheckRespVO = checkBatchRequirements(id);
+ if (mesProFeedbackBatchCheckRespVO.getNeedBatchInput()) {
+ if (StrUtil.isBlank(reqVO.getLotNumber())) {
+ throw exception(MD_ITEM_BATCH_CONFIG_AT_LEAST_ONE_APPROVE_FLAG);
+ }
+ }
+
+ // 3. 鏇存柊鐘舵�佷负瀹℃壒涓紝鐒跺悗鐩存帴閫氳繃瀹℃壒
+ feedbackMapper.updateById(new MesProFeedbackDO().setId(id)
+ .setStatus(MesProFeedbackStatusEnum.APPROVING.getStatus()));
+ MesProFeedbackApproveReqVO approveReqVO = cn.iocoder.yudao.framework.common.util.object.BeanUtils.toBean(reqVO, MesProFeedbackApproveReqVO.class);
+ approveFeedback(approveReqVO);
+ }
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void handleBpmProcessResult(Long id, Integer bpmResult,String reason) {
+ // 1. 鏌旀�ф牎楠岋細鑾峰彇鎶ュ伐鍗曞苟鍒ゆ柇鐘舵��
+ MesProFeedbackDO feedback = feedbackMapper.selectById(id);
+ if (feedback == null) {
+ log.warn("[handleBpmProcessResult] 鐢熶骇鎶ュ伐({}) 涓嶅瓨鍦�", id);
+ return;
+ }
+ if (!MesProFeedbackStatusEnum.APPROVING.getStatus().equals(feedback.getStatus())) {
+ log.warn("[handleBpmProcessResult] 鐢熶骇鎶ュ伐({}) 涓嶅浜庡鎵逛腑鐘舵�侊紝褰撳墠鐘舵�侊細{}", id, feedback.getStatus());
+ return;
+ }
+
+ // 2. 鏍规嵁瀹℃壒缁撴灉杩涜澶勭悊
+ if (cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum.APPROVE.getStatus().equals(bpmResult)) {
+ MesProFeedbackApproveReqVO reqVO = new MesProFeedbackApproveReqVO();
+ reqVO.setId(id);
+ // 鍒ゆ柇杩欎釜鎶ュ伐闇�涓嶉渶瑕佹壒娆″彿
+ MesProFeedbackBatchCheckRespVO mesProFeedbackBatchCheckRespVO = checkBatchRequirements(id);
+ if (mesProFeedbackBatchCheckRespVO.getNeedBatchInput()){
+ if (StrUtil.isBlank(reason)){
+ // 鎶ラ敊 璇峰湪瀹℃壒鎰忚閲屽~鍐欐壒娆″彿
+ throw exception(MD_ITEM_BATCH_CONFIG_AT_LEAST_ONE_APPROVE_FLAG);
+ }else {
+ BeanUtils.copyProperties(mesProFeedbackBatchCheckRespVO,reqVO);
+ reqVO.setLotNumber(reason);
+ }
+ }
+ approveFeedback(reqVO);
+ } else if (cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum.REJECT.getStatus().equals(bpmResult) ||
+ cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceStatusEnum.CANCEL.getStatus().equals(bpmResult)) {
+ rejectFeedback(id);
+ }
}
@Override
--
Gitblit v1.9.3