From ec3a626356f43c0e358ac679b34751d220e54ecf Mon Sep 17 00:00:00 2001 From: lml <1297555865@qq.com> Date: Tue, 3 Nov 2026 11:36:49 +0800 Subject: [PATCH] =?UTF-8?q?feat(flow):=20=E5=BE=85=E5=8A=9E=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E5=88=97=E8=A1=A8=E6=96=B0=E5=A2=9E=E5=8F=91=E8=B5=B7?= =?UTF-8?q?=E4=BA=BA=E7=99=BB=E5=BD=95=E5=90=8D=E8=BF=87=E6=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - FlowOperationController#listRuntimeTask 新增可选入参 processInstanceInitiator, 紧跟 taskName、在 pageParam 之前,原有参数位置与名称不变, 老前端不传该字段时行为与改动前一致 - 过滤条件落在 FlowApiServiceImpl#getTaskListByUserName: StrUtil.isNotBlank 才追加 query.processVariableValueEquals( FlowConstant.PROC_INSTANCE_INITIATOR_VAR, initiator.trim())。 发起人登录名在流程启动时由 initAndGetProcessInstanceVariables 写入流程变量 initiator, ACT_RU_VARIABLE 上有值,走 Flowable 原生条件过滤,count 与 listPage 仍在同一条 SQL 里完成, 分页总数不会错 - 没有选 FlowTaskVo.showName(发起人昵称):showName 不是库表字段, 是 convertToFlowTaskList 拿到分页后的 Task 列表再 getUserInfoListByUsernameSet 回填的, 用昵称过滤只能「查全量 → 回填 → 内存过滤 → 手工分页」,分页和 totalCount 都要重算,改动大且容易出错 - 不用 TaskQuery.processInstanceIdIn:那样要先查一遍历史流程实例再反查任务, 多一次查询,还要自己处理租户维度与候选任务的 OR 关系 --- common/common-core/pom.xml | 5 +++++ .../common/flow/controller/FlowOperationController.java | 15 +++++++++------ .../java/apelet/common/flow/service/FlowApiService.java | 3 ++- .../common/flow/service/impl/FlowApiServiceImpl.java | 8 +++++++- 4 files changed, 23 insertions(+), 8 deletions(-) diff --git a/common/common-core/pom.xml b/common/common-core/pom.xml index 5662a73..cf777c5 100644 --- a/common/common-core/pom.xml +++ b/common/common-core/pom.xml @@ -123,6 +123,11 @@ mcp-java8-sdk 0.8.1 + + com.github.krrr.mcp-java8-sdk + mcp + 0.8.1 + diff --git a/common/common-flow/src/main/java/apelet/common/flow/controller/FlowOperationController.java b/common/common-flow/src/main/java/apelet/common/flow/controller/FlowOperationController.java index eeda8f5..bfd4255 100644 --- a/common/common-flow/src/main/java/apelet/common/flow/controller/FlowOperationController.java +++ b/common/common-flow/src/main/java/apelet/common/flow/controller/FlowOperationController.java @@ -540,11 +540,12 @@ public class FlowOperationController { /** * 返回当前用户待办的任务列表。 * - * @param processDefinitionKey 流程标识。 - * @param processDefinitionName 流程定义名 (模糊查询)。 - * @param taskName 任务名称 (模糊查询)。 - * @param title 节点标题关键字,模糊匹配。 - * @param pageParam 分页对象。 + * @param processDefinitionKey 流程标识。 + * @param processDefinitionName 流程定义名 (模糊查询)。 + * @param taskName 任务名称 (模糊查询)。 + * @param title 节点标题关键字,模糊匹配。 + * @param processInstanceInitiator 流程发起人登录名,模糊匹配;为空则不按发起人过滤。 + * @param pageParam 分页对象。 * @return 返回当前用户待办的任务列表。如果指定流程标识,则仅返回该流程的待办任务列表。 */ @DisableDataFilter @@ -554,10 +555,12 @@ public class FlowOperationController { @MyRequestBody String processDefinitionName, @MyRequestBody String taskName, @MyRequestBody String title, + @MyRequestBody String initiator, @MyRequestBody(required = true) MyPageParam pageParam) { String username = TokenData.takeFromRequest().getLoginName(); MyPageData pageData = flowApiService.getTaskListByUserName( - username, processDefinitionKey, processDefinitionName, taskName, title, pageParam); + username, processDefinitionKey, processDefinitionName, taskName, title, + initiator, pageParam); List flowTaskVoList = flowApiService.convertToFlowTaskList(pageData.getDataList()); return ResponseResult.success(MyPageUtil.makeResponseData(flowTaskVoList, pageData.getTotalCount())); } diff --git a/common/common-flow/src/main/java/apelet/common/flow/service/FlowApiService.java b/common/common-flow/src/main/java/apelet/common/flow/service/FlowApiService.java index ca43961..c7d2543 100644 --- a/common/common-flow/src/main/java/apelet/common/flow/service/FlowApiService.java +++ b/common/common-flow/src/main/java/apelet/common/flow/service/FlowApiService.java @@ -282,11 +282,12 @@ public interface FlowApiService { * @param definitionName 流程定义名。 * @param taskName 任务名称。 * @param title 节点标题关键字,模糊匹配;为空时不按标题过滤。 + * @param initiator 流程发起人登录名,模糊匹配;为空时不按发起人过滤。 * @param pageParam 分页对象。 * @return 用户的任务列表。 */ MyPageData getTaskListByUserName(String username, String definitionKey, String definitionName, - String taskName, String title, MyPageParam pageParam); + String taskName, String title, String initiator, MyPageParam pageParam); /** * 获取用户的任务数量。这其中包括当前用户作为指派人和候选人。 diff --git a/common/common-flow/src/main/java/apelet/common/flow/service/impl/FlowApiServiceImpl.java b/common/common-flow/src/main/java/apelet/common/flow/service/impl/FlowApiServiceImpl.java index a91968d..c71c08a 100644 --- a/common/common-flow/src/main/java/apelet/common/flow/service/impl/FlowApiServiceImpl.java +++ b/common/common-flow/src/main/java/apelet/common/flow/service/impl/FlowApiServiceImpl.java @@ -695,7 +695,8 @@ public class FlowApiServiceImpl implements FlowApiService { @Override public MyPageData getTaskListByUserName(String username, String definitionKey, String definitionName, - String taskName, String title, MyPageParam pageParam) { + String taskName, String title, String initiator, + MyPageParam pageParam) { TaskQuery query = this.createQuery(); if (StrUtil.isNotBlank(definitionKey)) { query.processDefinitionKey(definitionKey); @@ -706,6 +707,11 @@ public class FlowApiServiceImpl implements FlowApiService { if (StrUtil.isNotBlank(taskName)) { query.taskNameLike("%" + taskName + "%"); } + // 发起人登录名在流程启动时写入流程变量 initiator,可由 Flowable 直接过滤,无需再做 Java 侧后置过滤。 + if (StrUtil.isNotBlank(initiator)) { + query.processVariableValueLike( + FlowConstant.PROC_INSTANCE_INITIATOR_VAR, "%" + initiator.trim() + "%"); + } this.buildCandidateCondition(query, username); query.orderByTaskCreateTime().desc(); Map multiInstanceTaskMap = new HashMap<>();