gaoluyang
4 天以前 eee03bbfea8b15d1a56ab63bd09a35c6c861c4cb
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pro/feedback/MesProFeedbackServiceImpl.java
@@ -352,21 +352,29 @@
                 reqVO.setLotNumber(reason);
               }
            }
            approveFeedback(reqVO);
            // BPM 回调时流程实例仍在运行,必须走内部方法,不能被「已发起流程」的校验拦住
            doApproveFeedback(reqVO, feedback, true);
        } 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);
            doRejectFeedback(id);
        }
    }
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void rejectFeedback(Long id) {
        equipmentService.lock();
        // 1. 校验存在 + 审批中状态
        validateFeedbackStatusApproving(id);
        MesProFeedbackDO feedback = validateFeedbackStatusApproving(id);
        // 1.1 已发起审批流程的报工单只能由审批人通过「待办任务」处理,避免业务接口绕过流程
        if (StrUtil.isNotBlank(feedback.getProcessInstanceId())) {
            throw exception(PRO_FEEDBACK_APPROVAL_HANDLE_IN_BPM);
        }
        doRejectFeedback(id);
    }
        // 2. 更新状态为草稿
    private void doRejectFeedback(Long id) {
        equipmentService.lock();
        // 1. 更新状态为草稿
        feedbackMapper.updateById(new MesProFeedbackDO().setId(id)
                .setStatus(MesProFeedbackStatusEnum.PREPARE.getStatus()));
    }
@@ -378,9 +386,18 @@
    }
    private boolean approveFeedback(MesProFeedbackApproveReqVO reqVO, boolean enforceQualityGate) {
        equipmentService.lock();
        // 1.1 校验存在 + 审批中状态
        MesProFeedbackDO feedback = validateFeedbackStatusApproving(reqVO.getId());
        // 1.2 已发起审批流程的报工单只能由审批人通过「待办任务」处理,避免业务接口绕过流程
        if (StrUtil.isNotBlank(feedback.getProcessInstanceId())) {
            throw exception(PRO_FEEDBACK_APPROVAL_HANDLE_IN_BPM);
        }
        return doApproveFeedback(reqVO, feedback, enforceQualityGate);
    }
    private boolean doApproveFeedback(MesProFeedbackApproveReqVO reqVO, MesProFeedbackDO feedback,
                                      boolean enforceQualityGate) {
        equipmentService.lock();
        equipmentService.validateApproval(feedback);
        try (var equipmentScope = equipmentService.beginApproval(feedback)) {
            return approveValidatedFeedback(reqVO, feedback, enforceQualityGate);