From cb60fadb6a2561aa810802d26f705f6619cfd87b Mon Sep 17 00:00:00 2001 From: yuchen Date: Wed, 8 Apr 2026 14:25:20 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=E5=B7=A5=E4=BD=9C=E6=B5=81?= =?UTF-8?q?=E5=BC=95=E6=93=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/activiti/WorkflowService.java | 10 +- .../simple/SimpleProcessInstanceWrapper.java | 103 ++++++++++++++++++ 2 files changed, 111 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/sipai/workflow/simple/SimpleProcessInstanceWrapper.java diff --git a/src/main/java/com/sipai/service/activiti/WorkflowService.java b/src/main/java/com/sipai/service/activiti/WorkflowService.java index 62df89b2..e3aafdfb 100644 --- a/src/main/java/com/sipai/service/activiti/WorkflowService.java +++ b/src/main/java/com/sipai/service/activiti/WorkflowService.java @@ -61,6 +61,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.sipai.workflow.IWorkflowEngine; +import com.sipai.workflow.simple.SimpleProcessInstanceWrapper; import javax.annotation.Resource; import java.text.SimpleDateFormat; @@ -171,15 +172,20 @@ public class WorkflowService { String processInstanceId = workflowEngine.startProcess(businessKey, userId, processDefKey, variables); if (processInstanceId != null) { // activiti模式下通过runtimeService查询返回原始ProcessInstance对象 - // simple模式下runtimeService可能为null,返回null(Controller只需要getId(),可通过processInstanceId获取) try { if (runtimeService != null) { - return runtimeService.createProcessInstanceQuery() + ProcessInstance pi = runtimeService.createProcessInstanceQuery() .processInstanceId(processInstanceId).singleResult(); + if (pi != null) { + return pi; + } } } catch (Exception e) { logger.warn("查询ProcessInstance失败,processInstanceId={}", processInstanceId); } + // simple模式下返回轻量包装对象,调用方只需要getId() + final String pid = processInstanceId; + return new SimpleProcessInstanceWrapper(pid, businessKey, processDefKey); } return null; } diff --git a/src/main/java/com/sipai/workflow/simple/SimpleProcessInstanceWrapper.java b/src/main/java/com/sipai/workflow/simple/SimpleProcessInstanceWrapper.java new file mode 100644 index 00000000..74446b9e --- /dev/null +++ b/src/main/java/com/sipai/workflow/simple/SimpleProcessInstanceWrapper.java @@ -0,0 +1,103 @@ +package com.sipai.workflow.simple; + +import org.activiti.engine.runtime.ProcessInstance; +import java.util.Map; + +/** + * 自研流程引擎的ProcessInstance轻量包装类 + * 调用方只需要getId()和getBusinessKey()等基本方法 + */ +public class SimpleProcessInstanceWrapper implements ProcessInstance { + + private String id; + private String businessKey; + private String processDefinitionId; + private String processDefinitionKey; + + public SimpleProcessInstanceWrapper(String id, String businessKey, String processDefinitionKey) { + this.id = id; + this.businessKey = businessKey; + this.processDefinitionKey = processDefinitionKey; + this.processDefinitionId = processDefinitionKey; + } + + @Override + public String getId() { + return id; + } + + @Override + public String getBusinessKey() { + return businessKey; + } + + @Override + public String getProcessDefinitionId() { + return processDefinitionId; + } + + @Override + public String getProcessDefinitionKey() { + return processDefinitionKey; + } + + @Override + public String getProcessInstanceId() { + return id; + } + + @Override + public boolean isEnded() { + return false; + } + + @Override + public boolean isSuspended() { + return false; + } + + @Override + public String getActivityId() { + return null; + } + + @Override + public String getName() { + return null; + } + + @Override + public String getDescription() { + return null; + } + + @Override + public String getProcessDefinitionName() { + return null; + } + + @Override + public Integer getProcessDefinitionVersion() { + return null; + } + + @Override + public String getDeploymentId() { + return null; + } + + @Override + public Map getProcessVariables() { + return null; + } + + @Override + public String getTenantId() { + return null; + } + + @Override + public String getParentId() { + return null; + } +}