feat(REQ-5865) - 测试 trigger 问题
This commit is contained in:
parent
0d77c05b53
commit
b68a6bec15
@ -7,20 +7,27 @@ 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.TaskQuery;
|
||||
import org.flowable.task.api.Task;
|
||||
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;
|
||||
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;
|
||||
|
||||
/**
|
||||
@ -48,19 +55,35 @@ public class CustomActivityTriggerAsyncCmd extends AbstractCommand<String> imple
|
||||
public String execute(CommandContext commandContext) {
|
||||
ProcessEngineConfigurationImpl processEngineConfiguration =
|
||||
CommandContextUtil.getProcessEngineConfiguration(commandContext);
|
||||
TaskQuery taskQuery = processEngineConfiguration.getTaskService().createTaskQuery()
|
||||
.executionId(dto.getTriggerId());
|
||||
if (StringUtils.isNotBlank(dto.getActivityId())) {
|
||||
taskQuery.taskDefinitionKey(dto.getActivityId());
|
||||
}
|
||||
TaskEntity task = (TaskEntity) taskQuery.singleResult();
|
||||
if (Objects.isNull(task)) {
|
||||
throw new WorkflowEngineException(ACTIVITY_TRIGGER_NOT_EXISTS, dto.getTriggerId());
|
||||
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() : "未找到实例");
|
||||
}
|
||||
|
||||
if (!validateActivityConfig(task)) {
|
||||
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 "";
|
||||
return null;
|
||||
}
|
||||
|
||||
return startAsync(commandContext);
|
||||
|
||||
@ -5,20 +5,28 @@ 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.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;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
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.constant.BpmnConstants.COMMENT_TYPE_OPERATION_DESC;
|
||||
@ -49,26 +57,53 @@ public class CustomActivityTriggerCmd extends AbstractCommand<Void> implements S
|
||||
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())));
|
||||
|
||||
TaskEntity task = (TaskEntity) processEngineConfiguration.getTaskService().createTaskQuery()
|
||||
.executionId(dto.getTriggerId())
|
||||
.taskDefinitionKey(StringUtils.isBlank(dto.getActivityId()) ? null : dto.getActivityId())
|
||||
.singleResult();
|
||||
if (Objects.isNull(task)) {
|
||||
throw new WorkflowEngineException(ACTIVITY_TRIGGER_NOT_EXISTS, dto.getTriggerId());
|
||||
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)) {
|
||||
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 runtimeService = processEngineConfiguration.getRuntimeService();
|
||||
runtimeService.trigger(dto.getTriggerId());
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Optional<Task> findLatestByCreateTime(List<Task> tasks) {
|
||||
if (tasks == null || tasks.isEmpty()) {
|
||||
return Optional.empty();
|
||||
}
|
||||
return tasks.stream()
|
||||
.filter(Objects::nonNull)
|
||||
.filter(t -> t.getCreateTime() != null)
|
||||
.max(Comparator.comparing(Task::getCreateTime));
|
||||
}
|
||||
|
||||
public static boolean validateActivityConfig(TaskEntity task) {
|
||||
BpmnModel bpmnModel = ProcessDefinitionUtil.getBpmnModel(task.getProcessDefinitionId());
|
||||
FlowElement flowElement = bpmnModel.getFlowElement(task.getTaskDefinitionKey());
|
||||
|
||||
Loading…
Reference in New Issue
Block a user