feat(REQ-5865) - 测试 trigger 问题

This commit is contained in:
wangli 2025-11-28 15:12:26 +08:00
parent 415b18f5f1
commit d452465750
2 changed files with 94 additions and 108 deletions

View File

@ -5,29 +5,22 @@ import cn.axzo.workflow.common.model.request.bpmn.task.BpmnActivityTriggerDTO;
import cn.axzo.workflow.core.engine.job.AsyncActivityTriggerJobHandler; import cn.axzo.workflow.core.engine.job.AsyncActivityTriggerJobHandler;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import org.apache.commons.lang3.StringUtils;
import org.flowable.common.engine.impl.interceptor.CommandContext; import org.flowable.common.engine.impl.interceptor.CommandContext;
import org.flowable.engine.RuntimeService;
import org.flowable.engine.TaskService; import org.flowable.engine.TaskService;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.flowable.engine.impl.util.CommandContextUtil; import org.flowable.engine.impl.util.CommandContextUtil;
import org.flowable.engine.runtime.Execution;
import org.flowable.job.service.JobService; import org.flowable.job.service.JobService;
import org.flowable.job.service.impl.persistence.entity.JobEntity; 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.flowable.task.service.impl.persistence.entity.TaskEntity;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils;
import java.io.Serializable; import java.io.Serializable;
import java.util.List;
import java.util.Objects; 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.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; import static cn.axzo.workflow.core.engine.cmd.CustomActivityTriggerCmd.validateActivityConfig;
/** /**
@ -53,57 +46,55 @@ public class CustomActivityTriggerAsyncCmd extends AbstractCommand<String> imple
@Override @Override
public String execute(CommandContext commandContext) { public String execute(CommandContext commandContext) {
ProcessEngineConfigurationImpl processEngineConfiguration =
CommandContextUtil.getProcessEngineConfiguration(commandContext);
RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
List<Execution> 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<Task> 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 = // ProcessEngineConfigurationImpl processEngineConfiguration =
// CommandContextUtil.getProcessEngineConfiguration(commandContext); // CommandContextUtil.getProcessEngineConfiguration(commandContext);
// TaskQuery taskQuery = processEngineConfiguration.getTaskService().createTaskQuery() // RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
// .executionId(dto.getTriggerId()); // List<Execution> list = runtimeService.createExecutionQuery().executionId(dto.getTriggerId()).list();
// if (StringUtils.isNotBlank(dto.getActivityId())) { // 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.taskDefinitionKey(dto.getActivityId()); //
// } // if (list.size() == 1) {
// List<Task> list = taskQuery.list(); // HistoricProcessInstance instance = processEngineConfiguration.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(list.get(0).getProcessInstanceId()).singleResult();
// log.info("tasks size: {}, activityIds: {}", list.size(), org.springframework.util.StringUtils.collectionToCommaDelimitedString(list.stream().map(Task::getTaskDefinitionKey).collect(Collectors.toList()))); // log.info("instance business status : {}", Objects.nonNull(instance) ? instance.getBusinessStatus() : "未找到实例");
// TaskEntity task = (TaskEntity) taskQuery.singleResult();
// if (Objects.isNull(task)) {
// throw new WorkflowEngineException(ACTIVITY_TRIGGER_NOT_EXISTS, dto.getTriggerId());
// } // }
// //
// if (!validateActivityConfig(task)) { // List<Task> tasks = processEngineConfiguration.getTaskService().createTaskQuery()
// log.info("业务节点唤醒时发现节点已经修改配置无法继续唤醒processInstanceId:{}, taskDefinitionKey={}", task.getProcessInstanceId(), task.getTaskDefinitionKey()); // .executionId(dto.getTriggerId()).list();
// return ""; // 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.hasText(dto.getActivityId())) {
taskQuery.taskDefinitionKey(dto.getActivityId());
}
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); return startAsync(commandContext);
} }
@ -113,7 +104,7 @@ public class CustomActivityTriggerAsyncCmd extends AbstractCommand<String> imple
TaskService taskService = processEngineConfiguration.getTaskService(); TaskService taskService = processEngineConfiguration.getTaskService();
TaskEntity task = (TaskEntity) taskService.createTaskQuery() TaskEntity task = (TaskEntity) taskService.createTaskQuery()
.executionId(dto.getTriggerId()) .executionId(dto.getTriggerId())
.taskDefinitionKey(StringUtils.isBlank(dto.getActivityId()) ? null : dto.getActivityId()) .taskDefinitionKey(StringUtils.hasText(dto.getActivityId()) ? dto.getActivityId() : null)
.singleResult(); .singleResult();
JobService jobService = processEngineConfiguration.getJobServiceConfiguration().getJobService(); JobService jobService = processEngineConfiguration.getJobServiceConfiguration().getJobService();

View File

@ -9,16 +9,14 @@ import org.flowable.bpmn.model.BpmnModel;
import org.flowable.bpmn.model.FlowElement; import org.flowable.bpmn.model.FlowElement;
import org.flowable.common.engine.impl.interceptor.CommandContext; import org.flowable.common.engine.impl.interceptor.CommandContext;
import org.flowable.engine.RuntimeService; import org.flowable.engine.RuntimeService;
import org.flowable.engine.history.HistoricProcessInstance;
import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl; import org.flowable.engine.impl.cfg.ProcessEngineConfigurationImpl;
import org.flowable.engine.impl.util.CommandContextUtil; import org.flowable.engine.impl.util.CommandContextUtil;
import org.flowable.engine.impl.util.ProcessDefinitionUtil; import org.flowable.engine.impl.util.ProcessDefinitionUtil;
import org.flowable.engine.runtime.Execution;
import org.flowable.task.api.Task; import org.flowable.task.api.Task;
import org.flowable.task.api.TaskQuery;
import org.flowable.task.service.impl.persistence.entity.TaskEntity; import org.flowable.task.service.impl.persistence.entity.TaskEntity;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import java.io.Serializable; import java.io.Serializable;
@ -26,7 +24,6 @@ import java.util.Comparator;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Collectors;
import static cn.axzo.workflow.common.code.BpmnTaskRespCode.ACTIVITY_TRIGGER_NOT_EXISTS; import static cn.axzo.workflow.common.code.BpmnTaskRespCode.ACTIVITY_TRIGGER_NOT_EXISTS;
import static cn.axzo.workflow.common.constant.BpmnConstants.COMMENT_TYPE_OPERATION_DESC; import static cn.axzo.workflow.common.constant.BpmnConstants.COMMENT_TYPE_OPERATION_DESC;
@ -55,68 +52,66 @@ public class CustomActivityTriggerCmd extends AbstractCommand<Void> implements S
@Override @Override
public Void execute(CommandContext commandContext) { public Void execute(CommandContext commandContext) {
ProcessEngineConfigurationImpl processEngineConfiguration =
CommandContextUtil.getProcessEngineConfiguration(commandContext);
RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
List<Execution> 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<Task> 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 = // ProcessEngineConfigurationImpl processEngineConfiguration =
// CommandContextUtil.getProcessEngineConfiguration(commandContext); // CommandContextUtil.getProcessEngineConfiguration(commandContext);
// RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
// List<Execution> 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() // if (list.size() == 1) {
// .executionId(dto.getTriggerId()); // HistoricProcessInstance instance = processEngineConfiguration.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(list.get(0).getProcessInstanceId()).singleResult();
// if (StringUtils.isNotBlank(dto.getActivityId())) { // log.info("instance business status : {}", Objects.nonNull(instance) ? instance.getBusinessStatus() : "未找到实例");
// taskQuery.taskDefinitionKey(dto.getActivityId());
// } // }
// List<Task> list = taskQuery.list(); //
// log.info("tasks size: {}, activityIds: {}", list.size(), org.springframework.util.StringUtils.collectionToCommaDelimitedString(list.stream().map(Task::getTaskDefinitionKey).collect(Collectors.toList()))); // List<Task> tasks = processEngineConfiguration.getTaskService().createTaskQuery()
// TaskEntity task = (TaskEntity) taskQuery.singleResult(); // .executionId(dto.getTriggerId()).list();
// if (Objects.isNull(task)) { // if (CollectionUtils.isEmpty(tasks)) {
// log.info("未通过 triggerId 找到任务集合无法继续触发executionId: {}", dto.getTriggerId());
// throw new WorkflowEngineException(ACTIVITY_TRIGGER_NOT_EXISTS, 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()); // log.info("业务节点唤醒时发现节点已经修改配置无法继续唤醒processInstanceId:{}, taskDefinitionKey={}", task.getProcessInstanceId(), task.getTaskDefinitionKey());
// return null; // return null;
// } // }
// //
//
// addComment(commandContext, task, COMMENT_TYPE_OPERATION_DESC, "已同意"); // addComment(commandContext, task, COMMENT_TYPE_OPERATION_DESC, "已同意");
// RuntimeService runtimeService = processEngineConfiguration.getRuntimeService();
// runtimeService.trigger(dto.getTriggerId()); // runtimeService.trigger(dto.getTriggerId());
// return null; // return null;
ProcessEngineConfigurationImpl processEngineConfiguration =
CommandContextUtil.getProcessEngineConfiguration(commandContext);
TaskQuery taskQuery = processEngineConfiguration.getTaskService().createTaskQuery()
.executionId(dto.getTriggerId());
if (StringUtils.hasText(dto.getActivityId())) {
taskQuery.taskDefinitionKey(dto.getActivityId());
}
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.triggerAsync(dto.getTriggerId());
return null;
} }
public static Optional<Task> findLatestByCreateTime(List<Task> tasks) { public static Optional<Task> findLatestByCreateTime(List<Task> tasks) {