From a65d398858480b81666025a231d8e5c20441e4e2 Mon Sep 17 00:00:00 2001 From: zch Date: Mon, 30 Jun 2025 18:42:09 +0800 Subject: [PATCH] =?UTF-8?q?feat(workflow):=20=E6=96=B0=E5=A2=9E=E5=B7=A5?= =?UTF-8?q?=E4=BD=9C=E6=B5=81=E4=BB=BB=E5=8A=A1=E5=A4=84=E7=90=86=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 completeTaskIgnoreAuth 方法,用于系统后台发起审批时忽略权限 - 新增 getCurrentActiveTaskId 方法,根据业务ID获取当前活跃任务ID - 新增 getCurrentTaskIdByInstanceId 方法,根据流程实例ID获取当前活跃任务ID - 修改 completeTask 方法名称为 completeTaskIgnoreAuth,系统后台发起审批 无用户信息 需要忽略权限(completeTask.getVariables().put("ignore", true);) --- .../workflow/api/RemoteWorkflowService.java | 26 ++++++++++ .../dubbo/RemoteWorkflowServiceImpl.java | 15 ++++++ .../workflow/service/WorkflowService.java | 19 ++++++- .../service/impl/WorkflowServiceImpl.java | 52 ++++++++++++++++++- 4 files changed, 110 insertions(+), 2 deletions(-) diff --git a/ruoyi-api/hwmom-api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java b/ruoyi-api/hwmom-api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java index f533381..379fb25 100644 --- a/ruoyi-api/hwmom-api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java +++ b/ruoyi-api/hwmom-api-workflow/src/main/java/org/dromara/workflow/api/RemoteWorkflowService.java @@ -85,4 +85,30 @@ public interface RemoteWorkflowService { */ boolean completeTask(RemoteCompleteTask completeTask); + /** + * 办理任务 + * 系统后台发起审批 无用户信息 需要忽略权限 + * completeTask.getVariables().put("ignore", true); + * + * @param taskId 任务ID + * @param message 办理意见 + */ + boolean completeTaskIgnoreAuth(Long taskId, String message); + + /** + * 【新增方法】根据业务ID获取当前活跃任务ID + * 用于润滑工单完成时获取正确的任务ID + * + * @param businessId 业务ID + * @return 当前活跃任务ID,如果没有找到返回null + */ + Long getCurrentActiveTaskId(String businessId); + + /** + * 【新增方法】根据流程实例ID获取当前活跃任务ID + * + * @param instanceId 流程实例ID + * @return 当前活跃任务ID,如果没有找到返回null + */ + Long getCurrentTaskIdByInstanceId(Long instanceId); } diff --git a/ruoyi-modules/hwmom-workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java b/ruoyi-modules/hwmom-workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java index 5c8c60b..bf4a3b3 100644 --- a/ruoyi-modules/hwmom-workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java +++ b/ruoyi-modules/hwmom-workflow/src/main/java/org/dromara/workflow/dubbo/RemoteWorkflowServiceImpl.java @@ -68,4 +68,19 @@ public class RemoteWorkflowServiceImpl implements RemoteWorkflowService { return workflowService.completeTask(completeTask); } + @Override + public boolean completeTaskIgnoreAuth(Long taskId, String message) { + return workflowService.completeTaskIgnoreAuth(taskId, message); + } + + @Override + public Long getCurrentActiveTaskId(String businessId) { + return workflowService.getCurrentActiveTaskId(businessId); + } + + @Override + public Long getCurrentTaskIdByInstanceId(Long instanceId) { + return workflowService.getCurrentTaskIdByInstanceId(instanceId); + } + } diff --git a/ruoyi-modules/hwmom-workflow/src/main/java/org/dromara/workflow/service/WorkflowService.java b/ruoyi-modules/hwmom-workflow/src/main/java/org/dromara/workflow/service/WorkflowService.java index 3fde86c..746046d 100644 --- a/ruoyi-modules/hwmom-workflow/src/main/java/org/dromara/workflow/service/WorkflowService.java +++ b/ruoyi-modules/hwmom-workflow/src/main/java/org/dromara/workflow/service/WorkflowService.java @@ -90,6 +90,23 @@ public interface WorkflowService { * @param taskId 任务ID * @param message 办理意见 */ - boolean completeTask(Long taskId, String message); + boolean completeTaskIgnoreAuth(Long taskId, String message); + + /** + * 【新增方法】根据业务ID获取当前活跃任务ID + * 用于润滑工单完成时获取正确的任务ID + * + * @param businessId 业务ID + * @return 当前活跃任务ID,如果没有找到返回null + */ + Long getCurrentActiveTaskId(String businessId); + + /** + * 【新增方法】根据流程实例ID获取当前活跃任务ID + * + * @param instanceId 流程实例ID + * @return 当前活跃任务ID,如果没有找到返回null + */ + Long getCurrentTaskIdByInstanceId(Long instanceId); } diff --git a/ruoyi-modules/hwmom-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java b/ruoyi-modules/hwmom-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java index f55e481..f9a0451 100644 --- a/ruoyi-modules/hwmom-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java +++ b/ruoyi-modules/hwmom-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java @@ -3,6 +3,7 @@ package org.dromara.workflow.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.dromara.common.core.utils.StringUtils; import org.dromara.warm.flow.orm.entity.FlowInstance; import org.dromara.workflow.api.domain.RemoteCompleteTask; @@ -19,12 +20,14 @@ import org.springframework.stereotype.Service; import java.util.List; import java.util.Map; +import java.util.Optional; /** * 通用 工作流服务实现 * * @author may */ +@Slf4j @ConditionalOnEnable @RequiredArgsConstructor @Service @@ -139,7 +142,7 @@ public class WorkflowServiceImpl implements WorkflowService { * @param message 办理意见 */ @Override - public boolean completeTask(Long taskId, String message) { + public boolean completeTaskIgnoreAuth(Long taskId, String message) { CompleteTaskBo completeTask = new CompleteTaskBo(); completeTask.setTaskId(taskId); completeTask.setMessage(message); @@ -148,4 +151,51 @@ public class WorkflowServiceImpl implements WorkflowService { return flwTaskService.completeTask(completeTask); } + /** + * 【新增方法】根据业务ID获取当前活跃任务ID + * 用于润滑工单完成时获取正确的任务ID + * + * @param businessId 业务ID + * @return 当前活跃任务ID,如果没有找到返回null + */ + @Override + public Long getCurrentActiveTaskId(String businessId) { + // 先获取流程实例ID + Long instanceId = getInstanceIdByBusinessId(businessId); + if (instanceId == null) { + return null; + } + + // 通过流程实例ID获取当前活跃任务ID + return getCurrentTaskIdByInstanceId(instanceId); + } + + /** + * 【新增方法】根据流程实例ID获取当前活跃任务ID + * + * @param instanceId 流程实例ID + * @return 当前活跃任务ID,如果没有找到返回null + */ + @Override + public Long getCurrentTaskIdByInstanceId(Long instanceId) { + if (instanceId == null) { + return null; + } + + try { + // 获取该流程实例下的所有活跃任务 + List activeTasks = flwTaskService.selectByInstId(instanceId); + + // 过滤出当前活跃的任务(del_flag=0) + Optional activeTask = activeTasks.stream() + .filter(task -> "0".equals(task.getDelFlag())) + .findFirst(); + + return activeTask.map(org.dromara.warm.flow.orm.entity.FlowTask::getId).orElse(null); + } catch (Exception e) { + log.error("获取当前活跃任务失败,instanceId: {}", instanceId, e); + return null; + } + } + }