diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/ApproverScopeEnum.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/ApproverScopeEnum.java index 695b38c1e..fb72f58ca 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/ApproverScopeEnum.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/ApproverScopeEnum.java @@ -1,5 +1,8 @@ package cn.axzo.workflow.common.enums; +import java.util.Arrays; +import java.util.Objects; + /** * 审批人所在范围枚举 * @@ -37,4 +40,11 @@ public enum ApproverScopeEnum { public boolean selectWorkspace() { return this == ApproverScopeEnum.projectWorkspace; } + + public static ApproverScopeEnum valueOfProcessor(String processor) { + return Arrays.stream(ApproverScopeEnum.values()) + .filter(i -> Objects.equals(i.getProcessor(), processor)) + .findAny() + .orElse(null); + } } diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/CarbonCopyObjectType.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/CarbonCopyObjectType.java index b90047bb3..39cfdfc0e 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/CarbonCopyObjectType.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/enums/CarbonCopyObjectType.java @@ -11,30 +11,32 @@ import java.util.Objects; */ public enum CarbonCopyObjectType { - ent_role("ent_role", "单位内指定角色", "entWorkspaceProcessor"), - ent_position("ent_position", "单位内指定岗位", "entWorkspaceProcessor"), - ent_identity("ent_identity", "单位内指定身份", "entWorkspaceProcessor"), + ent_role("ent_role", "role", "单位内指定角色", "entWorkspaceProcessor"), + ent_position("ent_position", "position", "单位内指定岗位", "entWorkspaceProcessor"), + ent_identity("ent_identity", "identity", "单位内指定身份", "entWorkspaceProcessor"), - project_role("project_role", "项目部内指定角色", "projectWorkspaceProcessor"), - project_position("project_position", "项目部内指定岗位", "projectWorkspaceProcessor"), - project_identity("project_identity", "项目部内指定身份", "projectWorkspaceProcessor"), + project_role("project_role", "role", "项目部内指定角色", "projectWorkspaceProcessor"), + project_position("project_position", "position", "项目部内指定岗位", "projectWorkspaceProcessor"), + project_identity("project_identity", "identity", "项目部内指定身份", "projectWorkspaceProcessor"), - specify_user("specify_user", "指定人员", "common"), + specify_user("specify_user", "specify_user", "指定人员", "common"), - // initiator("initiator", "发起人"), - // approver("approver", "审批人"), - // ent_initiator_leader("ent_initiator_leader", "单位内发起人主管"), - // project_initiator_leader("project_initiator_leader", "项目部内发起人主管"), - - approve_relation("approve_relation", "审批相关人员", "common"), + approver_relation("approver_relation", "approver_relation", "审批相关人员", "common"), + // 以下 4 个是 approver_relation 的选项值 + initiator("initiator", "initiator", "发起人", "common"), + approver("approver", "approver", "审批人", "common"), + ent_initiator_leader("ent_initiator_leader", "initiatorLeader", "单位内发起人主管", "entWorkspaceProcessor"), + project_initiator_leader("project_initiator_leader", "initiatorLeader", "项目部内发起人主管", "projectWorkspaceProcessor"), ; private String type; + private String simpleType; private String desc; private String processor; - CarbonCopyObjectType(String type, String desc, String processor) { + CarbonCopyObjectType(String type, String simpleType, String desc, String processor) { this.type = type; + this.simpleType = simpleType; this.desc = desc; this.processor = processor; } @@ -47,6 +49,14 @@ public enum CarbonCopyObjectType { this.type = type; } + public String getSimpleType() { + return simpleType; + } + + public void setSimpleType(String simpleType) { + this.simpleType = simpleType; + } + public String getDesc() { return desc; } @@ -69,4 +79,5 @@ public enum CarbonCopyObjectType { .findAny() .orElse(null); } + } diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/BpmnCarbonCopyConf.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/BpmnCarbonCopyConf.java index 90097be10..2bba096f5 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/BpmnCarbonCopyConf.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/request/bpmn/BpmnCarbonCopyConf.java @@ -30,7 +30,7 @@ public class BpmnCarbonCopyConf implements Serializable { private CarbonCopyObjectType carbonCopyObjectType; /** - * 具体的对象值, JSON 格式的字符串: "[{}, {}]" + * 具体的对象值, JSON 格式的字符串: "[{'name': '', value: ''},{},{},{}, {}]" */ private String specifyValue; diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/mq/ProcessInstanceDTO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/mq/ProcessInstanceDTO.java index bf539e5da..bfdb0fe84 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/mq/ProcessInstanceDTO.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/mq/ProcessInstanceDTO.java @@ -88,7 +88,7 @@ public class ProcessInstanceDTO implements Serializable { /** * 取消流程实例的特殊字段 */ - private String cancelReason; + private String reason; /** * 模型对应的通知模板配置信息 diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/common/utils/BpmnMetaParserHelper.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/common/utils/BpmnMetaParserHelper.java index fb1c1aba9..bc5cea419 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/common/utils/BpmnMetaParserHelper.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/common/utils/BpmnMetaParserHelper.java @@ -300,25 +300,25 @@ public final class BpmnMetaParserHelper { return Optional.ofNullable(elements.get(0)); } - public static Optional getPreNode(FlowElement userTask, DelegateExecution execution, + public static Optional getPreNode(FlowElement flowElement, DelegateExecution execution, BpmnModel bpmnModel) { if (Objects.isNull(bpmnModel)) { bpmnModel = ProcessDefinitionUtil.getBpmnModel(execution.getProcessDefinitionId()); } - if (userTask instanceof UserTask) { - UserTask task = (UserTask) userTask; + if (flowElement instanceof UserTask) { + UserTask task = (UserTask) flowElement; if (CollectionUtils.isEmpty(task.getIncomingFlows())) { return Optional.empty(); } //preNode - FlowElement flowElement = bpmnModel.getFlowElement(task.getIncomingFlows().get(0).getSourceRef()); + FlowElement preFlowElement = bpmnModel.getFlowElement(task.getIncomingFlows().get(0).getSourceRef()); - if (Objects.isNull(flowElement)) { + if (Objects.isNull(preFlowElement)) { return Optional.empty(); - } else if (!(flowElement instanceof UserTask)) { - return getPreNode(flowElement, execution, bpmnModel); + } else if (!(preFlowElement instanceof UserTask)) { + return getPreNode(preFlowElement, execution, bpmnModel); } else { - return Optional.of((UserTask) flowElement); + return Optional.of((UserTask) preFlowElement); } } return Optional.empty(); diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/BpmnTaskAssigneeSelector.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/BpmnTaskAssigneeSelector.java index 50e79ea9d..992fae24f 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/BpmnTaskAssigneeSelector.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/BpmnTaskAssigneeSelector.java @@ -1,7 +1,7 @@ package cn.axzo.workflow.core.deletage; import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner; -import org.flowable.bpmn.model.UserTask; +import org.flowable.bpmn.model.FlowElement; import org.flowable.engine.delegate.DelegateExecution; import java.util.Collections; @@ -25,12 +25,12 @@ public interface BpmnTaskAssigneeSelector { /** * 查询具体审批人 */ - List select(UserTask userTask, DelegateExecution execution, Boolean throwException); + List select(FlowElement flowElement, DelegateExecution execution, Boolean throwException); /** * 审批人筛选项获取类型 */ - default List getTypes(UserTask userTask) { + default List getTypes(FlowElement flowElement) { return Collections.emptyList(); } } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/MockTaskAssigneeSelector.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/MockTaskAssigneeSelector.java index fcc3bafd9..a7c8a7123 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/MockTaskAssigneeSelector.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/MockTaskAssigneeSelector.java @@ -2,7 +2,7 @@ package cn.axzo.workflow.core.deletage; import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner; import com.alibaba.fastjson.JSON; -import org.flowable.bpmn.model.UserTask; +import org.flowable.bpmn.model.FlowElement; import org.flowable.engine.delegate.DelegateExecution; import org.springframework.util.CollectionUtils; @@ -45,12 +45,12 @@ public class MockTaskAssigneeSelector implements BpmnTaskAssigneeSelector { } @Override - public List select(UserTask userTask, DelegateExecution execution, + public List select(FlowElement flowElement, DelegateExecution execution, Boolean throwException) { List users = new ArrayList<>(); // 优先读取 Nacos 配置 - firstParseNacos(userTask, execution, users); + firstParseNacos(flowElement, execution, users); if (!CollectionUtils.isEmpty(users)) { return users; } @@ -67,11 +67,12 @@ public class MockTaskAssigneeSelector implements BpmnTaskAssigneeSelector { return users; } - private void firstParseNacos(UserTask userTask, DelegateExecution execution, List users) { + private void firstParseNacos(FlowElement flowElement, DelegateExecution execution, + List users) { if (global) { - users.addAll(assigneeMap.getOrDefault(userTask.getId(), Collections.emptyList())); + users.addAll(assigneeMap.getOrDefault(flowElement.getId(), Collections.emptyList())); } else if (Objects.equals(category, execution.getProcessDefinitionId().split(":")[0])) { - users.addAll(assigneeMap.getOrDefault(userTask.getId(), Collections.emptyList())); + users.addAll(assigneeMap.getOrDefault(flowElement.getId(), Collections.emptyList())); } } } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/approverscope/ApproverScopeProcessor.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/approverscope/ApproverScopeProcessor.java index 1b4573609..4684ee52b 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/approverscope/ApproverScopeProcessor.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/approverscope/ApproverScopeProcessor.java @@ -1,6 +1,6 @@ package cn.axzo.workflow.core.deletage.approverscope; -import org.flowable.bpmn.model.UserTask; +import org.flowable.bpmn.model.FlowElement; import org.flowable.engine.delegate.DelegateExecution; /** @@ -10,7 +10,7 @@ import org.flowable.engine.delegate.DelegateExecution; */ public interface ApproverScopeProcessor { - default ApproverScopeDTO build(UserTask userTask, DelegateExecution execution) { + default ApproverScopeDTO build(FlowElement flowElement, DelegateExecution execution) { return ApproverScopeDTO.builder().build(); } } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/approverscope/EntWorkspaceProcessor.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/approverscope/EntWorkspaceProcessor.java index 6bcfba956..efa7d79ec 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/approverscope/EntWorkspaceProcessor.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/approverscope/EntWorkspaceProcessor.java @@ -4,7 +4,7 @@ import cn.axzo.workflow.common.enums.WorkspaceType; import cn.axzo.workflow.common.model.dto.CooperationOrgDTO; import cn.axzo.workflow.common.model.dto.CooperationOrgDTO.OrgScope; import cn.hutool.core.collection.CollUtil; -import org.flowable.bpmn.model.UserTask; +import org.flowable.bpmn.model.FlowElement; import org.flowable.engine.delegate.DelegateExecution; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; @@ -26,7 +26,7 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.BIZ_ORG_RELATION; public class EntWorkspaceProcessor implements ApproverScopeProcessor { @Override - public ApproverScopeDTO build(UserTask userTask, DelegateExecution execution) { + public ApproverScopeDTO build(FlowElement flowElement, DelegateExecution execution) { // 获取组织信息 CooperationOrgDTO orgDTO = (CooperationOrgDTO) execution.getVariables().get(BIZ_ORG_RELATION); ApproverScopeDTO build = ApproverScopeDTO.builder().build(); diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/approverscope/PreTaskUserProcessor.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/approverscope/PreTaskUserProcessor.java index ddc1e6e89..fe32c9feb 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/approverscope/PreTaskUserProcessor.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/approverscope/PreTaskUserProcessor.java @@ -6,6 +6,7 @@ import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner; import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.flowable.bpmn.model.FlowElement; import org.flowable.bpmn.model.UserTask; import org.flowable.engine.delegate.DelegateExecution; import org.springframework.stereotype.Component; @@ -26,8 +27,8 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.INTERNAL_ACTIVITY_R public class PreTaskUserProcessor implements ApproverScopeProcessor { @Override - public ApproverScopeDTO build(UserTask userTask, DelegateExecution execution) { - Optional preUserTaskOpt = BpmnMetaParserHelper.getPreNode(userTask, execution, null); + public ApproverScopeDTO build(FlowElement flowElement, DelegateExecution execution) { + Optional preUserTaskOpt = BpmnMetaParserHelper.getPreNode(flowElement, execution, null); if (!preUserTaskOpt.isPresent()) { log.info("the current node has no pre node, skip"); return ApproverScopeDTO.builder().build(); diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/approverscope/ProjectWorkspaceProcessor.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/approverscope/ProjectWorkspaceProcessor.java index 46c12c2de..fa8b2fa82 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/approverscope/ProjectWorkspaceProcessor.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/deletage/approverscope/ProjectWorkspaceProcessor.java @@ -4,7 +4,7 @@ import cn.axzo.workflow.common.enums.WorkspaceType; import cn.axzo.workflow.common.model.dto.CooperationOrgDTO; import cn.axzo.workflow.common.model.dto.CooperationOrgDTO.OrgScope; import cn.hutool.core.collection.CollUtil; -import org.flowable.bpmn.model.UserTask; +import org.flowable.bpmn.model.FlowElement; import org.flowable.engine.delegate.DelegateExecution; import org.springframework.stereotype.Component; @@ -24,7 +24,7 @@ import static cn.axzo.workflow.common.constant.BpmnConstants.BIZ_ORG_RELATION; public class ProjectWorkspaceProcessor implements ApproverScopeProcessor { @Override - public ApproverScopeDTO build(UserTask userTask, DelegateExecution execution) { + public ApproverScopeDTO build(FlowElement flowElement, DelegateExecution execution) { // 发起项目部 CooperationOrgDTO orgDTO =(CooperationOrgDTO) execution.getVariables().get(BIZ_ORG_RELATION); if (Objects.isNull(orgDTO)) { diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomCarbonCopyUserTaskAssigneeCmd.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomCarbonCopyUserTaskAssigneeCmd.java index 1bd156059..428141821 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomCarbonCopyUserTaskAssigneeCmd.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomCarbonCopyUserTaskAssigneeCmd.java @@ -4,14 +4,26 @@ import cn.axzo.workflow.common.enums.CarbonCopyObjectType; import cn.axzo.workflow.common.model.request.bpmn.BpmnCarbonCopyConf; import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner; import cn.axzo.workflow.core.engine.listener.EngineExecutionStartListener; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.google.common.collect.Lists; +import org.flowable.bpmn.model.CustomProperty; import org.flowable.bpmn.model.ServiceTask; import org.flowable.common.engine.impl.interceptor.Command; import org.flowable.common.engine.impl.interceptor.CommandContext; +import org.flowable.engine.delegate.DelegateExecution; +import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; +import org.flowable.engine.impl.util.CommandContextUtil; +import org.flowable.engine.runtime.Execution; import org.springframework.util.CollectionUtils; import java.io.Serializable; +import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; + +import static cn.axzo.workflow.core.engine.cmd.helper.CustomTaskHelper.removeDuplicateByPersonId; /** * 抄送节点,计算全量被抄送人,并主动去重 @@ -41,24 +53,70 @@ public class CustomCarbonCopyUserTaskAssigneeCmd implements Command list = + processEngineConfiguration.getRuntimeService().createExecutionQuery().processInstanceId(processInstanceId).list(); + List assigners = new ArrayList<>(); carbons.forEach(carbon -> { CarbonCopyObjectType carbonCopyObjectType = carbon.getCarbonCopyObjectType(); switch (carbonCopyObjectType) { case ent_role: case ent_identity: case ent_position: - break; case project_role: case project_identity: case project_position: + CustomProperty property = new CustomProperty(); + property.setName(carbonCopyObjectType.getType()); + property.setSimpleValue(carbon.getSpecifyValue()); + serviceTask.setCustomProperties(Lists.newArrayList(property)); + assigners.addAll(engineExecutionStartListener.approverSelect(carbonCopyObjectType.getSimpleType() + , serviceTask, (DelegateExecution) list.get(0), false)); + break; + case approver_relation: + getApproverRelationUser(carbon, carbonCopyObjectType, assigners, list); break; - case approve_relation: case specify_user: break; default: break; } }); - return Collections.emptyList(); + return removeDuplicateByPersonId(assigners); } + + private void getApproverRelationUser(BpmnCarbonCopyConf carbon, + CarbonCopyObjectType carbonCopyObjectType, + List assigners, + List list) { + List values = JSON.parseArray(carbon.getSpecifyValue(), String.class) + .stream().map(JSON::parseObject) + .map(i -> i.getString("value")) + .collect(Collectors.toList()); + values.forEach(value -> { + CarbonCopyObjectType approverRelationConf = CarbonCopyObjectType.valueOfType(value); + switch (approverRelationConf) { + case initiator: + break; + case approver: + // 历史真正有同意和驳回动作的人 + break; + case ent_initiator_leader: + case project_initiator_leader: + CustomProperty property = new CustomProperty(); + property.setName(approverRelationConf.getType()); + JSONObject jsonObject = new JSONObject(); + jsonObject.put("value", value); + property.setSimpleValue(JSON.toJSONString(Lists.newArrayList(jsonObject))); + serviceTask.setCustomProperties(Lists.newArrayList(property)); + assigners.addAll(engineExecutionStartListener.approverSelect(carbonCopyObjectType.getSimpleType() + , serviceTask, (DelegateExecution) list.get(0), false)); + default: + break; + } + }); + } + + } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/EngineExecutionStartListener.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/EngineExecutionStartListener.java index 01e9ff79e..c2f334c54 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/EngineExecutionStartListener.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/listener/EngineExecutionStartListener.java @@ -14,6 +14,7 @@ import com.alibaba.fastjson.JSON; import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.maven.artifact.versioning.DefaultArtifactVersion; +import org.flowable.bpmn.model.FlowElement; import org.flowable.bpmn.model.Process; import org.flowable.bpmn.model.UserTask; import org.flowable.engine.delegate.DelegateExecution; @@ -202,10 +203,11 @@ public class EngineExecutionStartListener implements ExecutionListener { * 根据审批人指定类型查询审批人 * * @param type "审批人指定"方式 {@link ApproverSpecifyEnum} - * @param userTask 当前节点, 这个对象会包含配置元数据, 可以在该方法中或者基于 BpmnTaskAssigneeSelector 建一个抽象类, 做解析元数据公共方法 + * @param flowElement 当前节点, 这个对象会包含配置元数据, 可以在该方法中或者基于 BpmnTaskAssigneeSelector 建一个抽象类, 做解析元数据公共方法 * @return */ - public List approverSelect(String type, UserTask userTask, DelegateExecution execution, + public List approverSelect(String type, FlowElement flowElement, + DelegateExecution execution, Boolean throwException) { List assigners = new ArrayList<>(); @@ -236,13 +238,13 @@ public class EngineExecutionStartListener implements ExecutionListener { log.debug("当前系统 Nacos 配置中开启了 mock: {}, 将使用 mock 方式查找审批人", mock); } assigners.addAll(new MockTaskAssigneeSelector(assigneeMap, global, category) - .select(userTask, execution, throwException)); + .select(flowElement, execution, throwException)); } else { selectors.forEach(select -> { if (select.support(type)) { - log.info("审批任务节点 Id:{}, Name: {}, 审批人指定枚举: {}", userTask.getId(), userTask.getName(), type); - List selected = select.select(userTask, execution, throwException); - log.info("审批任务节点 Id:{} 的审批人集合为: {}", userTask.getId(), JSON.toJSONString(selected)); + log.info("审批任务节点 Id:{}, Name: {}, 审批人指定枚举: {}", flowElement.getId(), flowElement.getName(), type); + List selected = select.select(flowElement, execution, throwException); + log.info("审批任务节点 Id:{} 的审批人集合为: {}", flowElement.getId(), JSON.toJSONString(selected)); assigners.addAll(selected); } }); diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessDefinitionServiceImpl.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessDefinitionServiceImpl.java index 57b50df5f..e59e4d153 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessDefinitionServiceImpl.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessDefinitionServiceImpl.java @@ -21,6 +21,7 @@ import org.flowable.engine.repository.Model; import org.flowable.engine.repository.ProcessDefinition; import org.flowable.engine.repository.ProcessDefinitionQuery; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; @@ -110,6 +111,7 @@ public class BpmnProcessDefinitionServiceImpl implements BpmnProcessDefinitionSe } @Override + @Transactional(rollbackFor = Exception.class) public void updateProcessDefinition(BpmnProcessDefinitionUpdateDTO dto) { Model model = repositoryService.getModel(dto.getProcessModelId()); if (Objects.isNull(model)) { diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessInstanceServiceImpl.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessInstanceServiceImpl.java index db2a990ff..b13736eae 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessInstanceServiceImpl.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessInstanceServiceImpl.java @@ -392,7 +392,7 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic baseQuerySql.append(")"); } if (StringUtils.isNotBlank(dto.getBusinessStatus())) { - baseQuerySql.append(" AND RES.BUSINESS_STATUS_ = #{businessStatus}'"); + baseQuerySql.append(" AND RES.BUSINESS_STATUS_ = #{businessStatus}"); query.parameter("businessStatus", dto.getBusinessStatus()); } if (Objects.nonNull(dto.getStartTime()) && Objects.nonNull(dto.getEndTime())) { diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/AbstractBpmnTaskAssigneeSelector.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/AbstractBpmnTaskAssigneeSelector.java index a0fc536b9..128fdc174 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/AbstractBpmnTaskAssigneeSelector.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/AbstractBpmnTaskAssigneeSelector.java @@ -1,6 +1,8 @@ package cn.axzo.workflow.server.controller.delegate; import cn.axzo.framework.domain.web.result.ApiResult; +import cn.axzo.workflow.common.enums.ApproverScopeEnum; +import cn.axzo.workflow.common.enums.CarbonCopyObjectType; import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner; import cn.axzo.workflow.core.common.exception.WorkflowEngineException; import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper; @@ -14,6 +16,9 @@ import cn.hutool.http.HttpStatus; import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import lombok.extern.slf4j.Slf4j; +import org.flowable.bpmn.model.CustomProperty; +import org.flowable.bpmn.model.FlowElement; +import org.flowable.bpmn.model.ServiceTask; import org.flowable.bpmn.model.UserTask; import org.flowable.engine.delegate.DelegateExecution; import org.springframework.beans.BeansException; @@ -23,9 +28,9 @@ import org.springframework.util.CollectionUtils; import org.springframework.util.StopWatch; import org.springframework.util.StringUtils; +import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.Objects; import java.util.function.Supplier; import java.util.stream.Collectors; @@ -47,40 +52,50 @@ public abstract class AbstractBpmnTaskAssigneeSelector implements BpmnTaskAssign private EngineExecutionStartListener executionStartListener; @Override - public List select(UserTask userTask, DelegateExecution execution, + public List select(FlowElement flowElement, DelegateExecution execution, Boolean throwException) { - List assigners = - (List) BpmnMetaParserHelper.getApproverScope(userTask) - .map(approverScopeEnum -> { - if (Objects.isNull(approverScopeEnum.getProcessor())) { - return Collections.emptyList(); - } - ApproverScopeProcessor processor = - applicationContext.getBean(approverScopeEnum.getProcessor(), - ApproverScopeProcessor.class); - ApproverScopeDTO scopeDto = processor.build(userTask, execution); - if (CollectionUtils.isEmpty(scopeDto.getOrgScopes()) - && CollectionUtils.isEmpty(scopeDto.getWorkerTeamScopes())) { - if (throwException) { - throw new WorkflowEngineException(ENGINE_USER_TASK_PARAM_ERROR, userTask.getId(), - approverScopeEnum.getDesc()); - } - } - try { - return invokeService(userTask, execution, scopeDto); - } catch (Throwable t) { - if (throwException) { - throw new WorkflowEngineException(ENGINE_USER_TASK_CALC_ERROR, userTask.getId(), - this.getType(), t.getMessage()); - } else { - return Collections.emptyList(); - } - } - }).orElseGet(Collections::emptyList); + List assigners = new ArrayList<>(); + if (flowElement instanceof UserTask) { + assigners.addAll(BpmnMetaParserHelper.getApproverScope((UserTask) flowElement) + .map(approverScopeEnum -> privateSelector(approverScopeEnum, flowElement, execution, + throwException)) + .orElseGet(Collections::emptyList)); + } else if (flowElement instanceof ServiceTask) { + List customProperties = ((ServiceTask) flowElement).getCustomProperties(); + if (!CollectionUtils.isEmpty(customProperties)) { + String processor = CarbonCopyObjectType.valueOfType(customProperties.get(0).getName()).getProcessor(); + assigners.addAll(privateSelector(ApproverScopeEnum.valueOfProcessor(processor), flowElement, + execution, throwException)); + } + } return assigners.stream().filter(i -> StringUtils.hasText(i.getPersonId())).collect(Collectors.toList()); } - protected List invokeService(UserTask userTask, DelegateExecution execution, + private List privateSelector(ApproverScopeEnum processorType, FlowElement flowElement, + DelegateExecution execution, Boolean throwException) { + ApproverScopeProcessor processor = applicationContext.getBean(processorType.getProcessor(), + ApproverScopeProcessor.class); + ApproverScopeDTO scopeDto = processor.build(flowElement, execution); + if (CollectionUtils.isEmpty(scopeDto.getOrgScopes()) + && CollectionUtils.isEmpty(scopeDto.getWorkerTeamScopes())) { + if (throwException) { + throw new WorkflowEngineException(ENGINE_USER_TASK_PARAM_ERROR, flowElement.getId(), + processorType.getDesc()); + } + } + try { + return invokeService(flowElement, execution, scopeDto); + } catch (Throwable t) { + if (throwException) { + throw new WorkflowEngineException(ENGINE_USER_TASK_CALC_ERROR, flowElement.getId(), + this.getType(), t.getMessage()); + } else { + return Collections.emptyList(); + } + } + } + + protected List invokeService(FlowElement flowElement, DelegateExecution execution, ApproverScopeDTO scopeDto) { return Collections.emptyList(); } @@ -97,7 +112,8 @@ public abstract class AbstractBpmnTaskAssigneeSelector implements BpmnTaskAssign JSONUtil.toJsonStr(result)); try { if (stopWatch.getTotalTimeSeconds() > executionStartListener.getApiTimeout()) { - DingTalkUtils.sendDingTalkForSlowUrl(applicationContext.getEnvironment().getProperty("spring.profiles.active"), + DingTalkUtils.sendDingTalkForSlowUrl(applicationContext.getEnvironment() + .getProperty("spring.profiles.active"), stopWatch.getTotalTimeSeconds(), extInfo, param, @@ -115,14 +131,27 @@ public abstract class AbstractBpmnTaskAssigneeSelector implements BpmnTaskAssign } @Override - public List getTypes(UserTask userTask) { + public List getTypes(FlowElement flowElement) { // 默认解析格式:[{"name":"预算员", "value":"xxxx"}] try { - return BpmnMetaParserHelper.getApproverSpecifyValue(userTask) - .map(value -> JSON.parseArray(value, String.class).stream().map(JSON::parseObject) - .map(i -> i.getString("value")) - .collect(Collectors.toList())) - .orElse(Collections.emptyList()); + if (flowElement instanceof UserTask) { + return BpmnMetaParserHelper.getApproverSpecifyValue((UserTask) flowElement) + .map(value -> JSON.parseArray(value, String.class).stream().map(JSON::parseObject) + .map(i -> i.getString("value")) + .collect(Collectors.toList())) + .orElse(Collections.emptyList()); + } else if (flowElement instanceof ServiceTask) { + List customProperties = ((ServiceTask) flowElement).getCustomProperties(); + if (CollectionUtils.isEmpty(customProperties)) { + return Collections.emptyList(); + } + return JSON.parseArray(customProperties.get(0).getSimpleValue(), String.class) + .stream().map(JSON::parseObject) + .map(i -> i.getString("value")) + .collect(Collectors.toList()); + } else { + return Collections.emptyList(); + } } catch (Exception e) { throw new WorkflowEngineException(CONVERTOR_META_DATA_FORMAT_ERROR, "AbstractBpmnTaskAssigneeSelector" + "#getTypes", e.getMessage()); diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedFixedPersonTaskAssigneeSelector.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedFixedPersonTaskAssigneeSelector.java index 152b62298..1934a672e 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedFixedPersonTaskAssigneeSelector.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedFixedPersonTaskAssigneeSelector.java @@ -4,6 +4,7 @@ import cn.axzo.workflow.common.enums.ApproverSpecifyEnum; import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner; import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper; import com.alibaba.fastjson.JSON; +import org.flowable.bpmn.model.FlowElement; import org.flowable.bpmn.model.UserTask; import org.flowable.engine.delegate.DelegateExecution; import org.springframework.stereotype.Component; @@ -30,10 +31,13 @@ public class BasedFixedPersonTaskAssigneeSelector extends AbstractBpmnTaskAssign } @Override - public List select(UserTask userTask, DelegateExecution execution, + public List select(FlowElement flowElement, DelegateExecution execution, Boolean throwException) { List assigners = new ArrayList<>(); - BpmnMetaParserHelper.getApproverSpecifyValue(userTask) + if (!(flowElement instanceof UserTask)) { + return super.select(flowElement, execution, throwException); + } + BpmnMetaParserHelper.getApproverSpecifyValue((UserTask) flowElement) .ifPresent(s -> assigners.addAll(JSON.parseArray(s, BpmnTaskDelegateAssigner.class))); return assigners; } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedIdentityTaskAssigneeSelector.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedIdentityTaskAssigneeSelector.java index dda2b0f2d..0e2317c09 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedIdentityTaskAssigneeSelector.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedIdentityTaskAssigneeSelector.java @@ -10,7 +10,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.ListUtils; -import org.flowable.bpmn.model.UserTask; +import org.flowable.bpmn.model.FlowElement; import org.flowable.engine.delegate.DelegateExecution; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -42,13 +42,13 @@ public class BasedIdentityTaskAssigneeSelector extends AbstractBpmnTaskAssigneeS } @Override - public List select(UserTask userTask, DelegateExecution execution, + public List select(FlowElement flowElement, DelegateExecution execution, Boolean throwException) { - return super.select(userTask, execution, throwException); + return super.select(flowElement, execution, throwException); } @Override - protected List invokeService(UserTask userTask, DelegateExecution execution, + protected List invokeService(FlowElement flowElement, DelegateExecution execution, ApproverScopeDTO scopeDto) { ListFlowTaskAssignerReq req = ListFlowTaskAssignerReq.builder() .orgScopes(ListUtils.emptyIfNull(scopeDto.getOrgScopes()).stream() @@ -57,16 +57,16 @@ public class BasedIdentityTaskAssigneeSelector extends AbstractBpmnTaskAssigneeS .workerTeamScopes(ListUtils.emptyIfNull(scopeDto.getWorkerTeamScopes()).stream() .map(w -> BeanUtil.copyProperties(w, ListFlowTaskAssignerReq.OrgScope.class)) .collect(Collectors.toList())) - .identityCodes(super.getTypes(userTask)) + .identityCodes(super.getTypes(flowElement)) .build(); List flowTaskAssigners = parseApiResult(() -> flowSupportApi.listTaskAssignerByIdentity(req), - "审批节点: " + userTask.getId() + ", 通过身份查询审批人", + "审批节点: " + flowElement.getId() + ", 通过身份查询审批人", "cn.axzo.karma.client.feign.FlowSupportApi.listTaskAssignerByIdentity", req); if (CollUtil.isEmpty(flowTaskAssigners)) { - return super.invokeService(userTask, execution, scopeDto); + return super.invokeService(flowElement, execution, scopeDto); } return BeanUtil.copyToList(flowTaskAssigners, BpmnTaskDelegateAssigner.class); } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedInitiatorLeaderRecursionTaskAssigneeSelector.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedInitiatorLeaderRecursionTaskAssigneeSelector.java index ab0a3b18a..d7f1992ce 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedInitiatorLeaderRecursionTaskAssigneeSelector.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedInitiatorLeaderRecursionTaskAssigneeSelector.java @@ -3,7 +3,7 @@ package cn.axzo.workflow.server.controller.delegate; import cn.axzo.workflow.common.enums.ApproverSpecifyEnum; import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner; import cn.axzo.workflow.core.common.exception.WorkflowEngineException; -import org.flowable.bpmn.model.UserTask; +import org.flowable.bpmn.model.FlowElement; import org.flowable.engine.delegate.DelegateExecution; import org.springframework.stereotype.Component; @@ -32,7 +32,7 @@ public class BasedInitiatorLeaderRecursionTaskAssigneeSelector extends AbstractB } @Override - public List select(UserTask userTask, DelegateExecution execution, + public List select(FlowElement flowElement, DelegateExecution execution, Boolean throwException) { throw new WorkflowEngineException(ENGINE_USER_TASK_TYPE_NOT_SUPPORT); } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedInitiatorLeaderTaskAssigneeSelector.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedInitiatorLeaderTaskAssigneeSelector.java index 8edcfe342..f2932da8a 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedInitiatorLeaderTaskAssigneeSelector.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedInitiatorLeaderTaskAssigneeSelector.java @@ -11,7 +11,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.ListUtils; -import org.flowable.bpmn.model.UserTask; +import org.flowable.bpmn.model.FlowElement; import org.flowable.engine.delegate.DelegateExecution; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -46,19 +46,19 @@ public class BasedInitiatorLeaderTaskAssigneeSelector extends AbstractBpmnTaskAs } @Override - public List select(UserTask userTask, DelegateExecution execution, + public List select(FlowElement flowElement, DelegateExecution execution, Boolean throwException) { - return super.select(userTask, execution, throwException); + return super.select(flowElement, execution, throwException); } @Override - protected List invokeService(UserTask userTask, DelegateExecution execution, + protected List invokeService(FlowElement flowElement, DelegateExecution execution, ApproverScopeDTO scopeDto) { // 获取发起人 BpmnTaskDelegateAssigner initiator = (BpmnTaskDelegateAssigner) execution.getVariables().getOrDefault(INTERNAL_INITIATOR, null); if (Objects.isNull(initiator)) { - return super.invokeService(userTask, execution, scopeDto); + return super.invokeService(flowElement, execution, scopeDto); } FlowTaskAssignerReq req = FlowTaskAssignerReq.builder() .orgScopes(ListUtils.emptyIfNull(scopeDto.getOrgScopes()).stream() @@ -71,11 +71,11 @@ public class BasedInitiatorLeaderTaskAssigneeSelector extends AbstractBpmnTaskAs List flowTaskAssigners = parseApiResult(() -> organizationalNodeUserApi.listFlowTaskAssigner(req), - "审批节点: " + userTask.getId() + ", 通过发起人主管查询审批人", + "审批节点: " + flowElement.getId() + ", 通过发起人主管查询审批人", "cn.axzo.maokai.api.client.OrganizationalNodeUserApi.listFlowTaskAssigner", req); if (CollUtil.isEmpty(flowTaskAssigners)) { - return super.invokeService(userTask, execution, scopeDto); + return super.invokeService(flowElement, execution, scopeDto); } return BeanUtil.copyToList(flowTaskAssigners, BpmnTaskDelegateAssigner.class); } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedPositionTaskAssigneeSelector.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedPositionTaskAssigneeSelector.java index 3b8e48470..581bccee7 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedPositionTaskAssigneeSelector.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedPositionTaskAssigneeSelector.java @@ -10,7 +10,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.ListUtils; -import org.flowable.bpmn.model.UserTask; +import org.flowable.bpmn.model.FlowElement; import org.flowable.engine.delegate.DelegateExecution; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -42,28 +42,28 @@ public class BasedPositionTaskAssigneeSelector extends AbstractBpmnTaskAssigneeS } @Override - public List select(UserTask userTask, DelegateExecution execution, + public List select(FlowElement flowElement, DelegateExecution execution, Boolean throwException) { - return super.select(userTask, execution, throwException); + return super.select(flowElement, execution, throwException); } @Override - protected List invokeService(UserTask userTask, DelegateExecution execution, + protected List invokeService(FlowElement flowElement, DelegateExecution execution, ApproverScopeDTO scopeDto) { FlowTaskAssignerReq req = FlowTaskAssignerReq.builder() .orgScopes(ListUtils.emptyIfNull(scopeDto.getOrgScopes()).stream() .map(e -> BeanUtil.copyProperties(e, FlowTaskAssignerReq.OrgScope.class)) .collect(Collectors.toList())) - .jobCodes(super.getTypes(userTask)) + .jobCodes(super.getTypes(flowElement)) .build(); List flowTaskAssigners = parseApiResult(() -> organizationalNodeUserApi.listFlowTaskAssigner(req), - "审批节点: " + userTask.getId() + ", 通过岗位查询审批人", + "审批节点: " + flowElement.getId() + ", 通过岗位查询审批人", "cn.axzo.maokai.api.client.OrganizationalNodeUserApi.listFlowTaskAssigner", req); if (CollUtil.isEmpty(flowTaskAssigners)) { - return super.invokeService(userTask, execution, scopeDto); + return super.invokeService(flowElement, execution, scopeDto); } return BeanUtil.copyToList(flowTaskAssigners, BpmnTaskDelegateAssigner.class); } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedRoleTaskAssigneeSelector.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedRoleTaskAssigneeSelector.java index 11d557ac9..8e3968943 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedRoleTaskAssigneeSelector.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/BasedRoleTaskAssigneeSelector.java @@ -10,7 +10,7 @@ import cn.axzo.workflow.core.deletage.approverscope.ApproverScopeDTO; import cn.hutool.core.collection.CollUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.ListUtils; -import org.flowable.bpmn.model.UserTask; +import org.flowable.bpmn.model.FlowElement; import org.flowable.engine.delegate.DelegateExecution; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -43,13 +43,13 @@ public class BasedRoleTaskAssigneeSelector extends AbstractBpmnTaskAssigneeSelec } @Override - public List select(UserTask userTask, DelegateExecution execution, + public List select(FlowElement flowElement, DelegateExecution execution, Boolean throwException) { - return super.select(userTask, execution, throwException); + return super.select(flowElement, execution, throwException); } @Override - protected List invokeService(UserTask userTask, DelegateExecution execution, + protected List invokeService(FlowElement flowElement, DelegateExecution execution, ApproverScopeDTO scopeDto) { Set workspaceIdSet = ListUtils.emptyIfNull(scopeDto.getOrgScopes()).stream() .map(OrgScope::getWorkspaceId) @@ -58,19 +58,19 @@ public class BasedRoleTaskAssigneeSelector extends AbstractBpmnTaskAssigneeSelec // ouIds、workspaceIds 只能传其中一个 然后代码过滤 RoleUserParam param = RoleUserParam.builder() - .roleIds(super.getTypes(userTask).stream().map(Long::valueOf).collect(Collectors.toSet())) + .roleIds(super.getTypes(flowElement).stream().map(Long::valueOf).collect(Collectors.toSet())) .ouIds(ListUtils.emptyIfNull(scopeDto.getOrgScopes()).stream() .map(OrgScope::getOuId) .collect(Collectors.toList())) .build(); List flowTaskAssigners = parseApiResult(() -> tyrSaasRoleUserApi.roleUserList(param), - "审批节点: " + userTask.getId() + ", 通过角色查询审批人", + "审批节点: " + flowElement.getId() + ", 通过角色查询审批人", "cn.axzo.tyr.client.feign.TyrSaasRoleUserApi.roleUserList", param) .stream().filter(f -> workspaceIdSet.contains(f.getWorkspaceId())) .collect(Collectors.toList()); if (CollUtil.isEmpty(flowTaskAssigners)) { - return super.invokeService(userTask, execution, scopeDto); + return super.invokeService(flowElement, execution, scopeDto); } return flowTaskAssigners.stream().map(u -> BpmnTaskDelegateAssigner.builder() .assignee(String.valueOf(u.getIdentityId())) diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/PreNodeSpecifiedTaskAssigneeSelector.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/PreNodeSpecifiedTaskAssigneeSelector.java index 35097b964..b6ee4403b 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/PreNodeSpecifiedTaskAssigneeSelector.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/PreNodeSpecifiedTaskAssigneeSelector.java @@ -5,7 +5,7 @@ import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner; import com.google.common.collect.Lists; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.flowable.bpmn.model.UserTask; +import org.flowable.bpmn.model.FlowElement; import org.flowable.engine.RuntimeService; import org.flowable.engine.delegate.DelegateExecution; import org.springframework.stereotype.Component; @@ -38,7 +38,7 @@ public class PreNodeSpecifiedTaskAssigneeSelector extends AbstractBpmnTaskAssign } @Override - public List select(UserTask userTask, DelegateExecution execution, + public List select(FlowElement flowElement, DelegateExecution execution, Boolean throwException) { BpmnTaskDelegateAssigner assigner = runtimeService.getVariable(execution.getProcessInstanceId(), INTERNAL_SPECIFY_NEXT_APPROVER, BpmnTaskDelegateAssigner.class); diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/TransferToAdminTaskAssigneeSelector.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/TransferToAdminTaskAssigneeSelector.java index 3b4df963b..2db856823 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/TransferToAdminTaskAssigneeSelector.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/delegate/TransferToAdminTaskAssigneeSelector.java @@ -10,7 +10,7 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.ListUtils; -import org.flowable.bpmn.model.UserTask; +import org.flowable.bpmn.model.FlowElement; import org.flowable.engine.delegate.DelegateExecution; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -43,13 +43,13 @@ public class TransferToAdminTaskAssigneeSelector extends AbstractBpmnTaskAssigne } @Override - public List select(UserTask userTask, DelegateExecution execution, + public List select(FlowElement flowElement, DelegateExecution execution, Boolean throwException) { - return super.select(userTask, execution, throwException); + return super.select(flowElement, execution, throwException); } @Override - protected List invokeService(UserTask userTask, DelegateExecution execution, + protected List invokeService(FlowElement flowElement, DelegateExecution execution, ApproverScopeDTO scopeDto) { ListFlowTaskAssignerReq.ListFlowTaskAssignerReqBuilder builder = ListFlowTaskAssignerReq.builder(); if (!CollectionUtils.isEmpty(scopeDto.getOrgScopes())) { @@ -65,11 +65,11 @@ public class TransferToAdminTaskAssigneeSelector extends AbstractBpmnTaskAssigne ListFlowTaskAssignerReq req = builder.build(); List flowTaskAssigners = parseApiResult(() -> flowSupportApi.listTaskAssignerAdmin(req), - "审批节点: " + userTask.getId() + ", 通过管理员查询审批人", + "审批节点: " + flowElement.getId() + ", 通过管理员查询审批人", "cn.axzo.karma.client.feign.FlowSupportApi.listTaskAssignerAdmin", req); if (CollUtil.isEmpty(flowTaskAssigners)) { - return super.invokeService(userTask, execution, scopeDto); + return super.invokeService(flowElement, execution, scopeDto); } return BeanUtil.copyToList(flowTaskAssigners, BpmnTaskDelegateAssigner.class); } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/process/RocketMqBpmnProcessEventListener.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/process/RocketMqBpmnProcessEventListener.java index be12c5b9d..ac36c644a 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/process/RocketMqBpmnProcessEventListener.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/listener/process/RocketMqBpmnProcessEventListener.java @@ -150,7 +150,7 @@ public class RocketMqBpmnProcessEventListener implements BpmnProcessEventListene .setTenantId(((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId()) .setBusinessKey(((FlowableProcessCancelledEventImpl) event).getExecution().getProcessInstanceBusinessKey()) .setBusinessProcessInstanceName(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getName()) - .setCancelReason(String.valueOf(event.getCause())); + .setReason(String.valueOf(event.getCause())); BpmnMetaParserHelper.getNoticeConfig(mainProcess).ifPresent(dto::setNoticeConf); String version = (String) runtimeService.getVariable(event.getProcessInstanceId(), WORKFLOW_ENGINE_VERSION); if (Objects.isNull(version)) { @@ -191,7 +191,7 @@ public class RocketMqBpmnProcessEventListener implements BpmnProcessEventListene .setTenantId(((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId()) .setBusinessKey(((FlowableProcessCancelledEventImpl) event).getExecution().getProcessInstanceBusinessKey()) .setBusinessProcessInstanceName(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getName()) - .setCancelReason(String.valueOf(event.getCause())); + .setReason(String.valueOf(event.getCause())); BpmnMetaParserHelper.getNoticeConfig(mainProcess).ifPresent(dto::setNoticeConf); String version = (String) runtimeService.getVariable(event.getProcessInstanceId(), WORKFLOW_ENGINE_VERSION); if (Objects.isNull(version)) { @@ -227,7 +227,7 @@ public class RocketMqBpmnProcessEventListener implements BpmnProcessEventListene .setTenantId(((FlowableProcessCancelledEventImpl) event).getExecution().getTenantId()) .setBusinessKey(((FlowableProcessCancelledEventImpl) event).getExecution().getProcessInstanceBusinessKey()) .setBusinessProcessInstanceName(((ExecutionEntityImpl) ((FlowableProcessCancelledEventImpl) event).getExecution()).getName()) - .setCancelReason(String.valueOf(event.getCause())); + .setReason(String.valueOf(event.getCause())); BpmnMetaParserHelper.getNoticeConfig(mainProcess).ifPresent(dto::setNoticeConf); String version = (String) runtimeService.getVariable(event.getProcessInstanceId(), WORKFLOW_ENGINE_VERSION); if (Objects.isNull(version)) {