diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomActivityTriggerAsyncCmd.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomActivityTriggerAsyncCmd.java index 6a59c04f9..c1bd71440 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomActivityTriggerAsyncCmd.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomActivityTriggerAsyncCmd.java @@ -7,16 +7,19 @@ import cn.hutool.json.JSONUtil; import com.alibaba.fastjson.JSON; import org.apache.commons.lang3.StringUtils; import org.flowable.common.engine.impl.interceptor.CommandContext; +import org.flowable.engine.RuntimeService; import org.flowable.engine.TaskService; +import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; import org.flowable.engine.impl.util.CommandContextUtil; +import org.flowable.engine.runtime.Execution; import org.flowable.job.service.JobService; import org.flowable.job.service.impl.persistence.entity.JobEntity; import org.flowable.task.api.Task; -import org.flowable.task.api.TaskQuery; import org.flowable.task.service.impl.persistence.entity.TaskEntity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.util.CollectionUtils; import java.io.Serializable; import java.util.List; @@ -24,6 +27,7 @@ import java.util.Objects; import java.util.stream.Collectors; import static cn.axzo.workflow.common.code.BpmnTaskRespCode.ACTIVITY_TRIGGER_NOT_EXISTS; +import static cn.axzo.workflow.core.engine.cmd.CustomActivityTriggerCmd.findLatestByCreateTime; import static cn.axzo.workflow.core.engine.cmd.CustomActivityTriggerCmd.validateActivityConfig; /** @@ -49,57 +53,57 @@ public class CustomActivityTriggerAsyncCmd extends AbstractCommand imple @Override public String execute(CommandContext commandContext) { -// ProcessEngineConfigurationImpl processEngineConfiguration = -// CommandContextUtil.getProcessEngineConfiguration(commandContext); -// RuntimeService runtimeService = processEngineConfiguration.getRuntimeService(); -// List list = runtimeService.createExecutionQuery().executionId(dto.getTriggerId()).list(); -// log.info("execution list size: {}, executionId: {}, id: {}", list.size(), dto.getTriggerId(), org.springframework.util.StringUtils.collectionToCommaDelimitedString(list.stream().map(Execution::getId).collect(Collectors.toSet()))); -// -// if (list.size() == 1) { -// HistoricProcessInstance instance = processEngineConfiguration.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(list.get(0).getProcessInstanceId()).singleResult(); -// log.info("instance business status : {}", Objects.nonNull(instance) ? instance.getBusinessStatus() : "未找到实例"); -// } -// -// List tasks = processEngineConfiguration.getTaskService().createTaskQuery() -// .executionId(dto.getTriggerId()).list(); -// if (CollectionUtils.isEmpty(tasks)) { -// log.info("未通过 triggerId 找到任务集合,无法继续触发,executionId: {}", dto.getTriggerId()); -// throw new WorkflowEngineException(ACTIVITY_TRIGGER_NOT_EXISTS, dto.getTriggerId()); -// } -// if (org.springframework.util.StringUtils.hasText(dto.getActivityId())) { -// tasks = tasks.stream() -// .filter(task -> Objects.equals(task.getTaskDefinitionKey(), dto.getActivityId())) -// .collect(Collectors.toList()); -// } -// -// TaskEntity task = (TaskEntity) findLatestByCreateTime(tasks).orElse(null); -// if (Objects.isNull(task)) { -// log.info("未找到对应的任务,无法继续触发,executionId: {}, activityId: {}", dto.getTriggerId(), dto.getActivityId()); -// throw new WorkflowEngineException(ACTIVITY_TRIGGER_NOT_EXISTS, dto.getTriggerId()); -// } -// if (!validateActivityConfig((task))) { -// log.info("业务节点唤醒时,发现节点已经修改配置,无法继续唤醒,processInstanceId:{}, taskDefinitionKey={}", task.getProcessInstanceId(), task.getTaskDefinitionKey()); -// return null; -// } - ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration(commandContext); - TaskQuery taskQuery = processEngineConfiguration.getTaskService().createTaskQuery() - .executionId(dto.getTriggerId()); - if (StringUtils.isNotBlank(dto.getActivityId())) { - taskQuery.taskDefinitionKey(dto.getActivityId()); - } - List list = taskQuery.list(); - log.info("tasks size: {}, activityIds: {}", list.size(), org.springframework.util.StringUtils.collectionToCommaDelimitedString(list.stream().map(Task::getTaskDefinitionKey).collect(Collectors.toList()))); - TaskEntity task = (TaskEntity) taskQuery.singleResult(); - if (Objects.isNull(task)) { - throw new WorkflowEngineException(ACTIVITY_TRIGGER_NOT_EXISTS, dto.getTriggerId()); + RuntimeService runtimeService = processEngineConfiguration.getRuntimeService(); + List list = runtimeService.createExecutionQuery().executionId(dto.getTriggerId()).list(); + log.info("execution list size: {}, executionId: {}, id: {}", list.size(), dto.getTriggerId(), org.springframework.util.StringUtils.collectionToCommaDelimitedString(list.stream().map(Execution::getId).collect(Collectors.toSet()))); + + if (list.size() == 1) { + HistoricProcessInstance instance = processEngineConfiguration.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(list.get(0).getProcessInstanceId()).singleResult(); + log.info("instance business status : {}", Objects.nonNull(instance) ? instance.getBusinessStatus() : "未找到实例"); } - if (!validateActivityConfig(task)) { - log.info("业务节点唤醒时,发现节点已经修改配置,无法继续唤醒,processInstanceId:{}, taskDefinitionKey={}", task.getProcessInstanceId(), task.getTaskDefinitionKey()); - return ""; + List tasks = processEngineConfiguration.getTaskService().createTaskQuery() + .executionId(dto.getTriggerId()).list(); + if (CollectionUtils.isEmpty(tasks)) { + log.info("未通过 triggerId 找到任务集合,无法继续触发,executionId: {}", dto.getTriggerId()); + throw new WorkflowEngineException(ACTIVITY_TRIGGER_NOT_EXISTS, dto.getTriggerId()); } + if (org.springframework.util.StringUtils.hasText(dto.getActivityId())) { + tasks = tasks.stream() + .filter(task -> Objects.equals(task.getTaskDefinitionKey(), dto.getActivityId())) + .collect(Collectors.toList()); + } + + TaskEntity task = (TaskEntity) findLatestByCreateTime(tasks).orElse(null); + if (Objects.isNull(task)) { + log.info("未找到对应的任务,无法继续触发,executionId: {}, activityId: {}", dto.getTriggerId(), dto.getActivityId()); + throw new WorkflowEngineException(ACTIVITY_TRIGGER_NOT_EXISTS, dto.getTriggerId()); + } + if (!validateActivityConfig((task))) { + log.info("业务节点唤醒时,发现节点已经修改配置,无法继续唤醒,processInstanceId:{}, taskDefinitionKey={}", task.getProcessInstanceId(), task.getTaskDefinitionKey()); + return null; + } + +// ProcessEngineConfigurationImpl processEngineConfiguration = +// CommandContextUtil.getProcessEngineConfiguration(commandContext); +// TaskQuery taskQuery = processEngineConfiguration.getTaskService().createTaskQuery() +// .executionId(dto.getTriggerId()); +// if (StringUtils.isNotBlank(dto.getActivityId())) { +// taskQuery.taskDefinitionKey(dto.getActivityId()); +// } +// List list = taskQuery.list(); +// log.info("tasks size: {}, activityIds: {}", list.size(), org.springframework.util.StringUtils.collectionToCommaDelimitedString(list.stream().map(Task::getTaskDefinitionKey).collect(Collectors.toList()))); +// TaskEntity task = (TaskEntity) taskQuery.singleResult(); +// if (Objects.isNull(task)) { +// throw new WorkflowEngineException(ACTIVITY_TRIGGER_NOT_EXISTS, dto.getTriggerId()); +// } +// +// if (!validateActivityConfig(task)) { +// log.info("业务节点唤醒时,发现节点已经修改配置,无法继续唤醒,processInstanceId:{}, taskDefinitionKey={}", task.getProcessInstanceId(), task.getTaskDefinitionKey()); +// return ""; +// } return startAsync(commandContext); } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomActivityTriggerCmd.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomActivityTriggerCmd.java index 4f031031f..04a8cfafe 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomActivityTriggerCmd.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/engine/cmd/CustomActivityTriggerCmd.java @@ -5,19 +5,21 @@ import cn.axzo.workflow.common.exception.WorkflowEngineException; import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivityTriggerDTO; import cn.axzo.workflow.core.common.utils.BpmnMetaParserHelper; import com.alibaba.fastjson.JSON; -import org.apache.commons.lang3.StringUtils; import org.flowable.bpmn.model.BpmnModel; import org.flowable.bpmn.model.FlowElement; import org.flowable.common.engine.impl.interceptor.CommandContext; import org.flowable.engine.RuntimeService; +import org.flowable.engine.history.HistoricProcessInstance; import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; import org.flowable.engine.impl.util.CommandContextUtil; import org.flowable.engine.impl.util.ProcessDefinitionUtil; +import org.flowable.engine.runtime.Execution; import org.flowable.task.api.Task; -import org.flowable.task.api.TaskQuery; import org.flowable.task.service.impl.persistence.entity.TaskEntity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; import java.io.Serializable; import java.util.Comparator; @@ -53,68 +55,68 @@ public class CustomActivityTriggerCmd extends AbstractCommand implements S @Override public Void execute(CommandContext commandContext) { -// ProcessEngineConfigurationImpl processEngineConfiguration = -// CommandContextUtil.getProcessEngineConfiguration(commandContext); -// RuntimeService runtimeService = processEngineConfiguration.getRuntimeService(); -// List list = runtimeService.createExecutionQuery().executionId(dto.getTriggerId()).list(); -// log.info("execution list size: {}, executionId: {}, id: {}", list.size(), dto.getTriggerId(), org.springframework.util.StringUtils.collectionToCommaDelimitedString(list.stream().map(Execution::getId).collect(Collectors.toSet()))); -// -// if (list.size() == 1) { -// HistoricProcessInstance instance = processEngineConfiguration.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(list.get(0).getProcessInstanceId()).singleResult(); -// log.info("instance business status : {}", Objects.nonNull(instance) ? instance.getBusinessStatus() : "未找到实例"); -// } -// -// List tasks = processEngineConfiguration.getTaskService().createTaskQuery() -// .executionId(dto.getTriggerId()).list(); -// if (CollectionUtils.isEmpty(tasks)) { -// log.info("未通过 triggerId 找到任务集合,无法继续触发,executionId: {}", dto.getTriggerId()); -// throw new WorkflowEngineException(ACTIVITY_TRIGGER_NOT_EXISTS, dto.getTriggerId()); -// } -// if (StringUtils.hasText(dto.getActivityId())) { -// tasks = tasks.stream() -// .filter(task -> Objects.equals(task.getTaskDefinitionKey(), dto.getActivityId())) -// .collect(Collectors.toList()); -// } -// -// TaskEntity task = (TaskEntity) findLatestByCreateTime(tasks).orElse(null); -// if (Objects.isNull(task)) { -// log.info("未找到对应的任务,无法继续触发,executionId: {}, activityId: {}", dto.getTriggerId(), dto.getActivityId()); -// throw new WorkflowEngineException(ACTIVITY_TRIGGER_NOT_EXISTS, dto.getTriggerId()); -// } -// if (!validateActivityConfig((task))) { -// log.info("业务节点唤醒时,发现节点已经修改配置,无法继续唤醒,processInstanceId:{}, taskDefinitionKey={}", task.getProcessInstanceId(), task.getTaskDefinitionKey()); -// return null; -// } -// -// -// addComment(commandContext, task, COMMENT_TYPE_OPERATION_DESC, "已同意"); -// runtimeService.trigger(dto.getTriggerId()); -// return null; - ProcessEngineConfigurationImpl processEngineConfiguration = CommandContextUtil.getProcessEngineConfiguration(commandContext); + RuntimeService runtimeService = processEngineConfiguration.getRuntimeService(); + List list = runtimeService.createExecutionQuery().executionId(dto.getTriggerId()).list(); + log.info("execution list size: {}, executionId: {}, id: {}", list.size(), dto.getTriggerId(), org.springframework.util.StringUtils.collectionToCommaDelimitedString(list.stream().map(Execution::getId).collect(Collectors.toSet()))); - TaskQuery taskQuery = processEngineConfiguration.getTaskService().createTaskQuery() - .executionId(dto.getTriggerId()); - if (StringUtils.isNotBlank(dto.getActivityId())) { - taskQuery.taskDefinitionKey(dto.getActivityId()); + if (list.size() == 1) { + HistoricProcessInstance instance = processEngineConfiguration.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(list.get(0).getProcessInstanceId()).singleResult(); + log.info("instance business status : {}", Objects.nonNull(instance) ? instance.getBusinessStatus() : "未找到实例"); } - List list = taskQuery.list(); - log.info("tasks size: {}, activityIds: {}", list.size(), org.springframework.util.StringUtils.collectionToCommaDelimitedString(list.stream().map(Task::getTaskDefinitionKey).collect(Collectors.toList()))); - TaskEntity task = (TaskEntity) taskQuery.singleResult(); - if (Objects.isNull(task)) { + + List tasks = processEngineConfiguration.getTaskService().createTaskQuery() + .executionId(dto.getTriggerId()).list(); + if (CollectionUtils.isEmpty(tasks)) { + log.info("未通过 triggerId 找到任务集合,无法继续触发,executionId: {}", dto.getTriggerId()); throw new WorkflowEngineException(ACTIVITY_TRIGGER_NOT_EXISTS, dto.getTriggerId()); } + if (StringUtils.hasText(dto.getActivityId())) { + tasks = tasks.stream() + .filter(task -> Objects.equals(task.getTaskDefinitionKey(), dto.getActivityId())) + .collect(Collectors.toList()); + } - if (!validateActivityConfig(task)) { + TaskEntity task = (TaskEntity) findLatestByCreateTime(tasks).orElse(null); + if (Objects.isNull(task)) { + log.info("未找到对应的任务,无法继续触发,executionId: {}, activityId: {}", dto.getTriggerId(), dto.getActivityId()); + throw new WorkflowEngineException(ACTIVITY_TRIGGER_NOT_EXISTS, dto.getTriggerId()); + } + if (!validateActivityConfig((task))) { log.info("业务节点唤醒时,发现节点已经修改配置,无法继续唤醒,processInstanceId:{}, taskDefinitionKey={}", task.getProcessInstanceId(), task.getTaskDefinitionKey()); return null; } + addComment(commandContext, task, COMMENT_TYPE_OPERATION_DESC, "已同意"); - RuntimeService runtimeService = processEngineConfiguration.getRuntimeService(); runtimeService.trigger(dto.getTriggerId()); return null; + +// ProcessEngineConfigurationImpl processEngineConfiguration = +// CommandContextUtil.getProcessEngineConfiguration(commandContext); +// +// TaskQuery taskQuery = processEngineConfiguration.getTaskService().createTaskQuery() +// .executionId(dto.getTriggerId()); +// if (StringUtils.isNotBlank(dto.getActivityId())) { +// taskQuery.taskDefinitionKey(dto.getActivityId()); +// } +// List list = taskQuery.list(); +// log.info("tasks size: {}, activityIds: {}", list.size(), org.springframework.util.StringUtils.collectionToCommaDelimitedString(list.stream().map(Task::getTaskDefinitionKey).collect(Collectors.toList()))); +// TaskEntity task = (TaskEntity) taskQuery.singleResult(); +// if (Objects.isNull(task)) { +// throw new WorkflowEngineException(ACTIVITY_TRIGGER_NOT_EXISTS, dto.getTriggerId()); +// } +// +// if (!validateActivityConfig(task)) { +// log.info("业务节点唤醒时,发现节点已经修改配置,无法继续唤醒,processInstanceId:{}, taskDefinitionKey={}", task.getProcessInstanceId(), task.getTaskDefinitionKey()); +// return null; +// } +// +// addComment(commandContext, task, COMMENT_TYPE_OPERATION_DESC, "已同意"); +// RuntimeService runtimeService = processEngineConfiguration.getRuntimeService(); +// runtimeService.trigger(dto.getTriggerId()); +// return null; } public static Optional findLatestByCreateTime(List tasks) {