Commit 82b03d7f7d3cebd8a38c19a77e57737ae62ed18a

Authored by YunaiV
1 parent cdb31679

【功能新增】工作流:API 创建流程时,设置 userId(解决 Job 下,无法设置 userId 的问题)

yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/FlowableUtils.java
... ... @@ -22,6 +22,7 @@ import java.util.HashMap;
22 22 import java.util.List;
23 23 import java.util.Map;
24 24 import java.util.Objects;
  25 +import java.util.concurrent.Callable;
25 26  
26 27 /**
27 28 * Flowable 相关的工具方法
... ... @@ -40,6 +41,17 @@ public class FlowableUtils {
40 41 Authentication.setAuthenticatedUserId(null);
41 42 }
42 43  
  44 + public static <V> V executeAuthenticatedUserId(Long userId, Callable<V> callable) {
  45 + setAuthenticatedUserId(userId);
  46 + try {
  47 + return callable.call();
  48 + } catch (Exception e) {
  49 + throw new RuntimeException(e);
  50 + } finally {
  51 + clearAuthenticatedUserId();
  52 + }
  53 + }
  54 +
43 55 public static String getTenantId() {
44 56 Long tenantId = TenantContextHolder.getTenantId();
45 57 return tenantId != null ? String.valueOf(tenantId) : ProcessEngineConfiguration.NO_TENANT_ID;
... ...
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java
... ... @@ -557,11 +557,13 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
557 557  
558 558 @Override
559 559 public String createProcessInstance(Long userId, @Valid BpmProcessInstanceCreateReqDTO createReqDTO) {
560   - // 获得流程定义
561   - ProcessDefinition definition = processDefinitionService.getActiveProcessDefinition(createReqDTO.getProcessDefinitionKey());
562   - // 发起流程
563   - return createProcessInstance0(userId, definition, createReqDTO.getVariables(), createReqDTO.getBusinessKey(),
564   - createReqDTO.getStartUserSelectAssignees());
  560 + return FlowableUtils.executeAuthenticatedUserId(userId, () -> {
  561 + // 获得流程定义
  562 + ProcessDefinition definition = processDefinitionService.getActiveProcessDefinition(createReqDTO.getProcessDefinitionKey());
  563 + // 发起流程
  564 + return createProcessInstance0(userId, definition, createReqDTO.getVariables(), createReqDTO.getBusinessKey(),
  565 + createReqDTO.getStartUserSelectAssignees());
  566 + });
565 567 }
566 568  
567 569 private String createProcessInstance0(Long userId, ProcessDefinition definition,
... ...