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 54e2ed538..6a59c04f9 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,19 +7,16 @@ 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; @@ -27,7 +24,6 @@ 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; /** @@ -53,39 +49,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); - 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() : "未找到实例"); + TaskQuery taskQuery = processEngineConfiguration.getTaskService().createTaskQuery() + .executionId(dto.getTriggerId()); + if (StringUtils.isNotBlank(dto.getActivityId())) { + taskQuery.taskDefinitionKey(dto.getActivityId()); } - - 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); + 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)) { - 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; - } + 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 20537295c..4f031031f 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,21 +5,19 @@ 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; @@ -55,41 +53,66 @@ 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()))); - 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() : "未找到实例"); + TaskQuery taskQuery = processEngineConfiguration.getTaskService().createTaskQuery() + .executionId(dto.getTriggerId()); + if (StringUtils.isNotBlank(dto.getActivityId())) { + taskQuery.taskDefinitionKey(dto.getActivityId()); } - - 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); + 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)) { - log.info("未找到对应的任务,无法继续触发,executionId: {}, activityId: {}", dto.getTriggerId(), dto.getActivityId()); throw new WorkflowEngineException(ACTIVITY_TRIGGER_NOT_EXISTS, dto.getTriggerId()); } - if (!validateActivityConfig((task))) { + + 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; }