From 3bfcac3d195d5cca42b4dcd930f38188b6d47558 Mon Sep 17 00:00:00 2001 From: ye1023 <12588209+ye1023@user.noreply.gitee.com> Date: Wed, 6 May 2026 15:13:21 +0800 Subject: [PATCH 1/2] =?UTF-8?q?yxk-20260506-=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E7=9B=91=E5=90=ACclass=EF=BC=9A=20SaveCurrentTaskAssigneeLocal?= =?UTF-8?q?Listener=E4=BF=9D=E5=AD=98=E5=BD=93=E5=89=8D=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E5=8A=9E=E7=90=86=E4=BA=BA=E5=88=B0=E5=AD=90=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E7=9A=84=E5=B1=80=E9=83=A8=E5=8F=98=E9=87=8F=E4=B8=AD=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SaveCurrentTaskAssigneeLocalListener.java | 22 ++++++++++++++++--- .../common/expression/FlowNodeExpression.java | 18 ++++++++++++--- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/task/SaveCurrentTaskAssigneeLocalListener.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/task/SaveCurrentTaskAssigneeLocalListener.java index 0b8a6f4..bce4e23 100644 --- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/task/SaveCurrentTaskAssigneeLocalListener.java +++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/task/SaveCurrentTaskAssigneeLocalListener.java @@ -4,9 +4,13 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.flowable.engine.RuntimeService; import org.flowable.engine.delegate.TaskListener; +import org.flowable.engine.runtime.Execution; import org.flowable.task.service.delegate.DelegateTask; import org.jeecg.common.util.SpringContextUtils; +import java.util.LinkedHashSet; +import java.util.Set; + /** * Save the current task assignee as an execution local variable. */ @@ -37,8 +41,20 @@ public class SaveCurrentTaskAssigneeLocalListener implements TaskListener { delegateTask.getId(), delegateTask.getTaskDefinitionKey()); return; } - runtimeService.setVariableLocal(delegateTask.getExecutionId(), VARIABLE_NAME, assignee); - log.info("SaveCurrentTaskAssigneeLocalListener success, taskId={}, taskDefinitionKey={}, variableName={}, assignee={}", - delegateTask.getId(), delegateTask.getTaskDefinitionKey(), VARIABLE_NAME, assignee); + Set executionIds = new LinkedHashSet<>(); + executionIds.add(delegateTask.getExecutionId()); + + Execution execution = runtimeService.createExecutionQuery() + .executionId(delegateTask.getExecutionId()) + .singleResult(); + if (execution != null && StringUtils.isNotBlank(execution.getParentId())) { + executionIds.add(execution.getParentId()); + } + + for (String executionId : executionIds) { + runtimeService.setVariableLocal(executionId, VARIABLE_NAME, assignee); + } + log.info("SaveCurrentTaskAssigneeLocalListener success, taskId={}, taskDefinitionKey={}, variableName={}, assignee={}, executionIds={}", + delegateTask.getId(), delegateTask.getTaskDefinitionKey(), VARIABLE_NAME, assignee, executionIds); } } diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/expression/FlowNodeExpression.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/expression/FlowNodeExpression.java index 7f131af..7ee533f 100644 --- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/expression/FlowNodeExpression.java +++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/expression/FlowNodeExpression.java @@ -342,9 +342,21 @@ public class FlowNodeExpression { task.getId(), task.getTaskDefinitionKey()); return; } - runtimeService.setVariableLocal(task.getExecutionId(), variableName, assignee); - log.info("saveCurrentTaskAssigneeLocal success, taskId={}, taskDefinitionKey={}, variableName={}, assignee={}", - task.getId(), task.getTaskDefinitionKey(), variableName, assignee); + Set executionIds = new LinkedHashSet<>(); + executionIds.add(task.getExecutionId()); + + Execution execution = runtimeService.createExecutionQuery() + .executionId(task.getExecutionId()) + .singleResult(); + if (execution != null && StringUtils.isNotBlank(execution.getParentId())) { + executionIds.add(execution.getParentId()); + } + + for (String executionId : executionIds) { + runtimeService.setVariableLocal(executionId, variableName, assignee); + } + log.info("saveCurrentTaskAssigneeLocal success, taskId={}, taskDefinitionKey={}, variableName={}, assignee={}, executionIds={}", + task.getId(), task.getTaskDefinitionKey(), variableName, assignee, executionIds); } private List splitUsernames(Object value) { From a3b31ea71043aa66af62abee3fe3d5bb8d284aa3 Mon Sep 17 00:00:00 2001 From: ye1023 <12588209+ye1023@user.noreply.gitee.com> Date: Wed, 6 May 2026 16:55:36 +0800 Subject: [PATCH 2/2] =?UTF-8?q?yxk-20260506-=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E7=9B=91=E5=90=ACclass=EF=BC=9A=20SaveCurrentTaskAssigneeLocal?= =?UTF-8?q?Listener=E4=BF=9D=E5=AD=98=E5=BD=93=E5=89=8D=E8=8A=82=E7=82=B9?= =?UTF-8?q?=E5=8A=9E=E7=90=86=E4=BA=BA=E5=88=B0=E5=AD=90=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E7=9A=84=E5=B1=80=E9=83=A8=E5=8F=98=E9=87=8F=E4=B8=AD=E5=8E=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SaveCurrentTaskAssigneeLocalListener.java | 1 + .../common/expression/FlowNodeExpression.java | 53 ++++++------------- 2 files changed, 17 insertions(+), 37 deletions(-) diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/task/SaveCurrentTaskAssigneeLocalListener.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/task/SaveCurrentTaskAssigneeLocalListener.java index dfe5fb1..35952a5 100644 --- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/task/SaveCurrentTaskAssigneeLocalListener.java +++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/listener/task/SaveCurrentTaskAssigneeLocalListener.java @@ -25,6 +25,7 @@ public class SaveCurrentTaskAssigneeLocalListener implements TaskListener { + @Override public void notify(DelegateTask delegateTask) { if (delegateTask == null) return; diff --git a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/expression/FlowNodeExpression.java b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/expression/FlowNodeExpression.java index bbbce20..949f22d 100644 --- a/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/expression/FlowNodeExpression.java +++ b/jeecg-boot-platform/jeecg-boot-module-bpm-flowable/src/main/java/org/jeecg/modules/extbpm/process/common/expression/FlowNodeExpression.java @@ -376,44 +376,7 @@ public class FlowNodeExpression { return usernames.get(0); } - /** - * Save current task assignee as execution local variable. - * Example: ${flowNodeExpression.saveCurrentTaskAssigneeLocal(task, 'subApproveUser')} - * - * @param task current task - * @param variableName local variable name - */ - public void saveCurrentTaskAssigneeLocal(DelegateTask task, String variableName) { - if (task == null || StringUtils.isBlank(variableName)) { - return; - } - String assignee = task.getAssignee(); - if (StringUtils.isBlank(assignee)) { - log.warn("saveCurrentTaskAssigneeLocal skipped, taskId={}, taskDefinitionKey={}, assignee is blank", - task.getId(), task.getTaskDefinitionKey()); - return; - } - if (StringUtils.isBlank(task.getExecutionId())) { - log.warn("saveCurrentTaskAssigneeLocal skipped, taskId={}, taskDefinitionKey={}, executionId is blank", - task.getId(), task.getTaskDefinitionKey()); - return; - } - Set executionIds = new LinkedHashSet<>(); - executionIds.add(task.getExecutionId()); - Execution execution = runtimeService.createExecutionQuery() - .executionId(task.getExecutionId()) - .singleResult(); - if (execution != null && StringUtils.isNotBlank(execution.getParentId())) { - executionIds.add(execution.getParentId()); - } - - for (String executionId : executionIds) { - runtimeService.setVariableLocal(executionId, variableName, assignee); - } - log.info("saveCurrentTaskAssigneeLocal success, taskId={}, taskDefinitionKey={}, variableName={}, assignee={}, executionIds={}", - task.getId(), task.getTaskDefinitionKey(), variableName, assignee, executionIds); - } private List splitUsernames(Object value) { if (value == null) { @@ -425,6 +388,22 @@ public class FlowNodeExpression { .collect(Collectors.toList()); } + private String getParentExecutionId(Execution execution, int parentLevel) { + Execution current = execution; + for (int i = 0; i < parentLevel; i++) { + if (current == null) { + return null; + } + if (StringUtils.isBlank(current.getParentId())) { + return null; + } + current = runtimeService.createExecutionQuery() + .executionId(current.getParentId()) + .singleResult(); + } + return current == null ? null : current.getId(); + } + /** * 查找上一级部门负责人 * ${flowNodeExpression.getLevel1DepartLeaders(applyUserId)}