From cc5fff0bde631182316d4c9821134db324729e0c Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Wed, 16 Oct 2024 10:01:15 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0tenantId=E5=92=8C=E8=A7=A6?= =?UTF-8?q?=E5=8F=91=E5=99=A8=E9=BB=98=E8=AE=A4=E7=9A=84id=E5=92=8C?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=8F=B3=E8=BE=B9=E6=B5=81=E7=A8=8B=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E6=9B=B4=E6=96=B0=E6=9C=80=E6=96=B0=E7=89=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wflow/bean/entity/WflowModelHistorys.java | 2 ++ .../vo/ProcessConditionResolveParamsVo.java | 6 ++++ .../service/impl/ProcessTaskServiceImpl.java | 30 ++++++++----------- .../workflow/task/TriggerServiceTask.java | 14 +++++---- 4 files changed, 29 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/wflow/bean/entity/WflowModelHistorys.java b/src/main/java/com/wflow/bean/entity/WflowModelHistorys.java index 70518f1..a551234 100644 --- a/src/main/java/com/wflow/bean/entity/WflowModelHistorys.java +++ b/src/main/java/com/wflow/bean/entity/WflowModelHistorys.java @@ -51,5 +51,7 @@ public class WflowModelHistorys implements Serializable { private String logo; + private String tenantId; + } diff --git a/src/main/java/com/wflow/workflow/bean/vo/ProcessConditionResolveParamsVo.java b/src/main/java/com/wflow/workflow/bean/vo/ProcessConditionResolveParamsVo.java index 8accf02..a6e3795 100644 --- a/src/main/java/com/wflow/workflow/bean/vo/ProcessConditionResolveParamsVo.java +++ b/src/main/java/com/wflow/workflow/bean/vo/ProcessConditionResolveParamsVo.java @@ -1,6 +1,9 @@ package com.wflow.workflow.bean.vo; +import lombok.AllArgsConstructor; +import lombok.Builder; import lombok.Data; +import lombok.NoArgsConstructor; import java.util.Map; @@ -9,6 +12,9 @@ import java.util.Map; * @date : 2023/11/10 */ @Data +@Builder +@AllArgsConstructor +@NoArgsConstructor public class ProcessConditionResolveParamsVo { //流程定义ID private String processDfId; diff --git a/src/main/java/com/wflow/workflow/service/impl/ProcessTaskServiceImpl.java b/src/main/java/com/wflow/workflow/service/impl/ProcessTaskServiceImpl.java index 986833e..5a6917c 100644 --- a/src/main/java/com/wflow/workflow/service/impl/ProcessTaskServiceImpl.java +++ b/src/main/java/com/wflow/workflow/service/impl/ProcessTaskServiceImpl.java @@ -27,7 +27,6 @@ import com.wflow.workflow.bean.vo.*; import com.wflow.workflow.config.WflowGlobalVarDef; import com.wflow.workflow.extension.cmd.RecallToHisApprovalNodeCmd; import com.wflow.workflow.service.*; -import com.wflow.workflow.service.FormService; import com.wflow.workflow.utils.FlowableUtils; import com.zhgd.xmgl.tenant.TenantContextHolder; import lombok.extern.slf4j.Slf4j; @@ -38,16 +37,13 @@ import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.*; import org.flowable.engine.delegate.DelegateExecution; import org.flowable.engine.history.HistoricProcessInstance; -import org.flowable.engine.history.HistoricProcessInstanceQuery; import org.flowable.engine.impl.persistence.entity.ExecutionEntity; import org.flowable.engine.impl.util.ExecutionGraphUtil; -import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.runtime.ActivityInstance; import org.flowable.engine.runtime.Execution; import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.runtime.ProcessInstanceQuery; import org.flowable.task.api.Task; -import org.flowable.task.api.TaskInfo; import org.flowable.task.api.TaskQuery; import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.service.history.NativeHistoricTaskInstanceQuery; @@ -55,7 +51,6 @@ import org.flowable.variable.api.history.HistoricVariableInstance; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import org.springframework.transaction.interceptor.TransactionAspectSupport; import java.util.*; import java.util.stream.Collectors; @@ -479,7 +474,8 @@ public class ProcessTaskServiceImpl implements ProcessTaskService { log.info("获取节点[{}]的审批人", execution.getActivityId()); Map propsMap = execution.getVariable(WflowGlobalVarDef.WFLOW_NODE_PROPS, Map.class); ApprovalProps props = (ApprovalProps) propsMap.get(execution.getActivityId()); - List approvalUsers = getApprovalUsers(execution, props); + WflowModels wflowModels = wflowModelsMapper.selectById(execution.getProcessDefinitionKey()); + List approvalUsers = getApprovalUsers(execution.getProcessInstanceId(), execution.getActivityId(), props, wflowModels.getTenantId()); taskCache.put(execution.getProcessInstanceId() + execution.getActivityId(), approvalUsers); return approvalUsers; } @@ -552,16 +548,14 @@ public class ProcessTaskServiceImpl implements ProcessTaskService { /** * 获取审批人 * - * @param execution 上下文 * @param props 节点熟悉 + * @param tenantId * @return 审批人ID列表 */ - public List getApprovalUsers(ExecutionEntity execution, ApprovalProps props) { - WflowModels wflowModels = wflowModelsMapper.selectById(execution.getProcessDefinitionKey()); - String userId = execution.getStartUserId(); - userId = StrUtil.isNotBlank(userId) ? userId : execution.getParent().getStartUserId(); - String deptId = execution.getVariable("startDept", String.class); - deptId = StrUtil.isNotBlank(deptId) ? deptId : execution.getVariable("owner", ProcessInstanceOwnerDto.class).getOwnerDeptId(); + public List getApprovalUsers(String instanceId, String nodeId, ApprovalProps props, String tenantId) { + String userId = runtimeService.getVariable(instanceId, WflowGlobalVarDef.INITIATOR, String.class); + String deptId = runtimeService.getVariable(instanceId, WflowGlobalVarDef.START_DEPT, String.class); + deptId = StrUtil.isNotBlank(deptId) ? deptId : runtimeService.getVariable(instanceId, WflowGlobalVarDef.OWNER, ProcessInstanceOwnerDto.class).getOwnerDeptId();; Set userSet = new LinkedHashSet<>(); switch (props.getAssignedType()) { case REFUSE: @@ -571,16 +565,16 @@ public class ProcessTaskServiceImpl implements ProcessTaskService { userSet.add(userId); break; case ROLE: //取角色 - userSet.addAll(userDeptOrLeaderService.getUsersByRoles(props.getRole().stream().map(OrgUser::getId).collect(Collectors.toList()), wflowModels.getTenantId())); + userSet.addAll(userDeptOrLeaderService.getUsersByRoles(props.getRole().stream().map(OrgUser::getId).collect(Collectors.toList()), tenantId)); break; case FORM_USER: //从表单取 - List> userList = execution.getVariable(props.getFormUser(), List.class); + List> userList = runtimeService.getVariable(instanceId, props.getFormUser(), List.class); Optional.ofNullable(userList).ifPresent(users -> { userSet.addAll(users.stream().map(u -> u.get("id").toString()).collect(Collectors.toList())); }); break; case FORM_DEPT: //从表单取 - List> deptList = execution.getVariable(props.getFormDept(), List.class); + List> deptList = runtimeService.getVariable(instanceId, props.getFormDept(), List.class); Optional.ofNullable(deptList).ifPresent(users -> { userSet.addAll(userDeptOrLeaderService.getLeadersByDept( users.stream().map(u -> u.get("id").toString()).collect(Collectors.toList()))); @@ -594,7 +588,7 @@ public class ProcessTaskServiceImpl implements ProcessTaskService { userSet.addAll(userDeptOrLeaderService.getLeadersByDept(collect)); break; case SELF_SELECT: //自选用户,从变量取,这一步在发起流程时设置的 - List selectUsers = execution.getVariable(execution.getActivityId(), List.class); + List selectUsers = runtimeService.getVariable(instanceId, nodeId, List.class); Optional.ofNullable(selectUsers).ifPresent(on -> userSet.addAll(on.stream().map(OrgUser::getId).collect(Collectors.toList()))); break; case LEADER: //用户的指定级别部门主管 @@ -616,7 +610,7 @@ public class ProcessTaskServiceImpl implements ProcessTaskService { userSet.addAll(props.getNobody().getAssignedUser().stream().map(OrgUser::getId).collect(Collectors.toList())); break; case TO_ADMIN: //TODO 注意系统需要包含该角色 WFLOW_APPROVAL_ADMIN - userSet.addAll(userDeptOrLeaderService.getUsersByRoles(CollectionUtil.newArrayList(WflowGlobalVarDef.WFLOW_APPROVAL_ADMIN), wflowModels.getTenantId())); + userSet.addAll(userDeptOrLeaderService.getUsersByRoles(CollectionUtil.newArrayList(WflowGlobalVarDef.WFLOW_APPROVAL_ADMIN), tenantId)); break; case TO_PASS: userSet.add(WflowGlobalVarDef.WFLOW_TASK_AGRRE); diff --git a/src/main/java/com/wflow/workflow/task/TriggerServiceTask.java b/src/main/java/com/wflow/workflow/task/TriggerServiceTask.java index 66d61f6..674d8b4 100644 --- a/src/main/java/com/wflow/workflow/task/TriggerServiceTask.java +++ b/src/main/java/com/wflow/workflow/task/TriggerServiceTask.java @@ -119,12 +119,16 @@ public class TriggerServiceTask implements JavaDelegate { String.valueOf(variables.getOrDefault(String.valueOf(hd.getValue()), "")) : getStrByRegex(String.valueOf(hd.getValue()), variables)); }); + request.form("dfInstanceId", execution.getProcessInstanceId()); + request.form("dfNodeId", execution.getCurrentActivityId()); } else { - request.body(JSONObject.toJSONString(http.getParams().stream().filter(o -> o != null && o.getName() != null && !"".equals(o.getName())) - .collect(Collectors.toMap(TriggerProps.Http.Variable::getName, - v -> v.getIsField() ? variables.getOrDefault(String.valueOf(v.getValue()), "") - : getStrByRegex(String.valueOf(v.getValue()), variables)))) - , "application/json"); + Map m = http.getParams().stream().filter(o -> o != null && o.getName() != null && !"".equals(o.getName())) + .collect(Collectors.toMap(TriggerProps.Http.Variable::getName, + v -> v.getIsField() ? variables.getOrDefault(String.valueOf(v.getValue()), "") + : getStrByRegex(String.valueOf(v.getValue()), variables))); + m.put("dfInstanceId", execution.getProcessInstanceId()); + m.put("dfNodeId", execution.getCurrentActivityId()); + request.body(JSONObject.toJSONString(m), "application/json"); } HttpResponse response = request.timeout(10000).executeAsync(); if (response.isOk()) {