From a366b41c5b6e9e562880f4bb9ff2609666711ad9 Mon Sep 17 00:00:00 2001 From: daihw <928874202@qq.com> Date: Sun, 23 Apr 2023 16:19:19 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=9C=AA=E4=BF=9D=E5=AD=98=E5=85=A8?= =?UTF-8?q?=E5=B1=80=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...iggerParameterInstanceIntegrationTest.java | 2 +- .../WorkflowInstanceInternalApplication.java | 22 ++++++------------- .../workflow/WorkflowInstanceMapper.java | 4 ++-- .../aggregate/process/WorkflowInstance.java | 12 ++++++---- .../WorkflowInstanceDomainService.java | 5 ++++- 5 files changed, 22 insertions(+), 23 deletions(-) diff --git a/api/src/test/java/dev/jianmu/api/WorkflowTaskTriggerParameterInstanceIntegrationTest.java b/api/src/test/java/dev/jianmu/api/WorkflowTaskTriggerParameterInstanceIntegrationTest.java index 6147321a2..356b99858 100644 --- a/api/src/test/java/dev/jianmu/api/WorkflowTaskTriggerParameterInstanceIntegrationTest.java +++ b/api/src/test/java/dev/jianmu/api/WorkflowTaskTriggerParameterInstanceIntegrationTest.java @@ -112,7 +112,7 @@ public class WorkflowTaskTriggerParameterInstanceIntegrationTest { .nodes(nodes) .build(); WorkflowInstanceDomainService workflowInstanceDomainService = new WorkflowInstanceDomainService(); - instance = workflowInstanceDomainService.create("trigger567", "CRON", 1, workflow); + instance = workflowInstanceDomainService.create("trigger567", "CRON", 1, workflow, Set.of()); } // @Test diff --git a/application/src/main/java/dev/jianmu/application/service/internal/WorkflowInstanceInternalApplication.java b/application/src/main/java/dev/jianmu/application/service/internal/WorkflowInstanceInternalApplication.java index f3d530b62..1d8d6adf6 100644 --- a/application/src/main/java/dev/jianmu/application/service/internal/WorkflowInstanceInternalApplication.java +++ b/application/src/main/java/dev/jianmu/application/service/internal/WorkflowInstanceInternalApplication.java @@ -115,17 +115,17 @@ public class WorkflowInstanceInternalApplication { AtomicInteger serialNo = new AtomicInteger(1); this.workflowInstanceRepository.findByRefAndSerialNoMax(workflow.getRef()) .ifPresent(workflowInstance -> serialNo.set(workflowInstance.getSerialNo() + 1)); + // 添加全局参数 + var globalParameters = this.findGlobalParameters(workflow, cmd.getTriggerId(), project.getAssociationId(), project.getAssociationType(), project.getAssociationPlatform()); // 创建新的流程实例 - WorkflowInstance workflowInstance = workflowInstanceDomainService.create(cmd.getTriggerId(), cmd.getTriggerType(), serialNo.get(), workflow); + WorkflowInstance workflowInstance = workflowInstanceDomainService.create(cmd.getTriggerId(), cmd.getTriggerType(), serialNo.get(), workflow, globalParameters); workflowInstance.init(cmd.getOccurredTime()); projectLastExecution.init(workflowInstance.getId(), workflowInstance.getSerialNo(), cmd.getOccurredTime(), workflowInstance.getStatus().name()); this.workflowInstanceRepository.add(workflowInstance); this.projectLastExecutionRepository.update(projectLastExecution); } - private Set findGlobalParameters(String triggerId, String workflowRef, String version, String associationId, String associationType, String associationPlatform) { - var workflow = this.workflowRepository.findByRefAndVersion(workflowRef, version) - .orElseThrow(() -> new DataNotFoundException("未找到流程")); + private Set findGlobalParameters(Workflow workflow, String triggerId, String associationId, String associationType, String associationPlatform) { // 查询参数源 var eventParameters = this.triggerEventRepository.findById(triggerId) .map(TriggerEvent::getParameters) @@ -141,7 +141,7 @@ public class WorkflowInstanceInternalApplication { .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); var eventParamValues = this.parameterRepository.findByIds(new HashSet<>(eventParams.values())); var eventMap = this.parameterDomainService.matchParameters(eventParams, eventParamValues); - // 事件参数scope为event + // 事件参数scope为trigger eventMap.forEach((key, val) -> context.add("trigger", key, val)); var globalParameters = new HashSet(); workflow.getGlobalParameters() @@ -185,22 +185,14 @@ public class WorkflowInstanceInternalApplication { return; } this.workflowInstanceRepository.findByRefAndStatuses(workflowRef, List.of(ProcessStatus.INIT)) - .stream().limit(project.getConcurrent() - i) - .forEach(workflowInstance -> this.createVolume(workflowInstance, projectLastExecution, project.getAssociationId(), project.getAssociationType(), project.getAssociationPlatform())); + .stream().limit(project.getConcurrent() - i) + .forEach(workflowInstance -> this.createVolume(workflowInstance, projectLastExecution, project.getAssociationId(), project.getAssociationType(), project.getAssociationPlatform())); } // 流程实例创建Volume private void createVolume(WorkflowInstance workflowInstance, ProjectLastExecution projectLastExecution, String associationId, String associationTYpe, String associationPlatform) { MDC.put("triggerId", workflowInstance.getTriggerId()); workflowInstance.start(); - // 添加全局参数 - try { - var globalParameters = this.findGlobalParameters(workflowInstance.getTriggerId(), workflowInstance.getWorkflowRef(), workflowInstance.getWorkflowVersion(), associationId, associationTYpe, associationPlatform); - workflowInstance.setGlobalParameters(globalParameters); - } catch (Exception e) { - log.error("流程实例启动失败:", e); - workflowInstance.terminate(); - } // 修改项目最后执行状态 projectLastExecution.running(workflowInstance.getId(), workflowInstance.getSerialNo(), workflowInstance.getStartTime(), workflowInstance.getStatus().name()); diff --git a/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/workflow/WorkflowInstanceMapper.java b/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/workflow/WorkflowInstanceMapper.java index 17d744f27..08b8c3185 100644 --- a/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/workflow/WorkflowInstanceMapper.java +++ b/infrastructure/src/main/java/dev/jianmu/infrastructure/mapper/workflow/WorkflowInstanceMapper.java @@ -81,14 +81,14 @@ public interface WorkflowInstanceMapper { @Result(column = "global_parameters", property = "globalParameters", typeHandler = ParameterSetTypeHandler.class) Optional findByTriggerId(String triggerId); - @Insert("insert into jm_workflow_instance(id, serial_no, trigger_id, trigger_type, name, description, run_mode, status, workflow_ref, workflow_version,occurred_time, start_time, suspended_time, end_time, _version) " + + @Insert("insert into jm_workflow_instance(id, serial_no, trigger_id, trigger_type, name, description, run_mode, status, workflow_ref, workflow_version,global_parameters,occurred_time, start_time, suspended_time, end_time, _version) " + "values(#{wk.id},#{wk.serialNo},#{wk.triggerId},#{wk.triggerType},#{wk.name},#{wk.description},#{wk.runMode},#{wk.status},#{wk.workflowRef},#{wk.workflowVersion}," + + "#{wk.globalParameters, jdbcType=BLOB,typeHandler=dev.jianmu.infrastructure.typehandler.ParameterSetTypeHandler}," + "#{wk.occurredTime},#{wk.startTime},#{wk.suspendedTime},#{wk.endTime},#{version})") boolean add(@Param("wk") WorkflowInstance workflowInstance, @Param("version") int version); @Update("update jm_workflow_instance " + "set run_mode=#{wk.runMode},status=#{wk.status},start_time=#{wk.startTime}," + - "global_parameters = #{wk.globalParameters, jdbcType=BLOB,typeHandler=dev.jianmu.infrastructure.typehandler.ParameterSetTypeHandler}," + "suspended_time=#{wk.suspendedTime},end_time=#{wk.endTime},_version= _version+1 " + "where id = #{wk.id}") void save(@Param("wk") WorkflowInstance workflowInstance); diff --git a/workflow-core/src/main/java/dev/jianmu/workflow/aggregate/process/WorkflowInstance.java b/workflow-core/src/main/java/dev/jianmu/workflow/aggregate/process/WorkflowInstance.java index e9501aefb..ebe9354f3 100644 --- a/workflow-core/src/main/java/dev/jianmu/workflow/aggregate/process/WorkflowInstance.java +++ b/workflow-core/src/main/java/dev/jianmu/workflow/aggregate/process/WorkflowInstance.java @@ -211,10 +211,6 @@ public class WorkflowInstance extends AggregateRoot { this.raiseSseEvents(event); } - public void setGlobalParameters(Set globalParameters) { - this.globalParameters = globalParameters; - } - public String getId() { return id; } @@ -293,6 +289,8 @@ public class WorkflowInstance extends AggregateRoot { private String workflowRef; // 流程定义版本 private String workflowVersion; + // 全局参数 + private Set globalParameters; private Builder() { } @@ -336,6 +334,11 @@ public class WorkflowInstance extends AggregateRoot { return this; } + public Builder globalParameters(Set globalParameters) { + this.globalParameters = globalParameters; + return this; + } + public WorkflowInstance build() { WorkflowInstance workflowInstance = new WorkflowInstance(); workflowInstance.workflowVersion = this.workflowVersion; @@ -346,6 +349,7 @@ public class WorkflowInstance extends AggregateRoot { workflowInstance.description = this.description; workflowInstance.id = this.id; workflowInstance.workflowRef = this.workflowRef; + workflowInstance.globalParameters = this.globalParameters; return workflowInstance; } } diff --git a/workflow-core/src/main/java/dev/jianmu/workflow/service/WorkflowInstanceDomainService.java b/workflow-core/src/main/java/dev/jianmu/workflow/service/WorkflowInstanceDomainService.java index e13b57f41..fa05551fc 100644 --- a/workflow-core/src/main/java/dev/jianmu/workflow/service/WorkflowInstanceDomainService.java +++ b/workflow-core/src/main/java/dev/jianmu/workflow/service/WorkflowInstanceDomainService.java @@ -1,5 +1,6 @@ package dev.jianmu.workflow.service; +import dev.jianmu.workflow.aggregate.definition.GlobalParameter; import dev.jianmu.workflow.aggregate.definition.Workflow; import dev.jianmu.workflow.aggregate.process.AsyncTaskInstance; import dev.jianmu.workflow.aggregate.process.TaskStatus; @@ -8,6 +9,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.List; +import java.util.Set; /** * @author Ethan Liu @@ -18,7 +20,7 @@ import java.util.List; public class WorkflowInstanceDomainService { private static final Logger logger = LoggerFactory.getLogger(WorkflowInstanceDomainService.class); - public WorkflowInstance create(String triggerId, String triggerType, int serialNo, Workflow workflow) { + public WorkflowInstance create(String triggerId, String triggerType, int serialNo, Workflow workflow, Set globalParameters) { // 构造流程实例 return WorkflowInstance.Builder.aWorkflowInstance() .serialNo(serialNo) @@ -28,6 +30,7 @@ public class WorkflowInstanceDomainService { .description(workflow.getDescription()) .workflowRef(workflow.getRef()) .workflowVersion(workflow.getVersion()) + .globalParameters(globalParameters) .build(); } -- Gitee