forked from toolchaintechnologycenter/spdm-backend
优化flowable流程和节点状态查询
This commit is contained in:
@@ -43,6 +43,7 @@ public class UniversalDelegate implements JavaDelegate {
|
||||
public void execute(DelegateExecution execution) {
|
||||
try {
|
||||
// 1. 获取当前节点信息
|
||||
String processDefinitionId = execution.getProcessDefinitionId();
|
||||
String procInstId = execution.getProcessInstanceId();
|
||||
String nodeId = execution.getCurrentActivityId();
|
||||
String nodeName = execution.getCurrentFlowElement().getName();
|
||||
@@ -50,7 +51,7 @@ public class UniversalDelegate implements JavaDelegate {
|
||||
log.info("开始执行节点, 流程实例ID: {}, 节点ID: {}, 节点名称: {}", procInstId, nodeId, nodeName);
|
||||
|
||||
// 2. 读取输入参数
|
||||
Map<String, Object> params = processNodeParamService.getParam(procInstId, nodeId);
|
||||
Map<String, Object> params = processNodeParamService.getParam(processDefinitionId, nodeId);
|
||||
|
||||
log.info("节点执行参数, 流程实例ID: {}, 节点ID: {}, 参数: {}", procInstId, nodeId, params);
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.sdm.flowable.dto;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Data
|
||||
public class NodeStructureInfo {
|
||||
@@ -11,4 +12,5 @@ public class NodeStructureInfo {
|
||||
protected String type; // 如 "UserTask", "ExclusiveGateway"
|
||||
protected List<String> nextNodeIds; // 后续节点 ID 列表
|
||||
protected String executeConfig; // 扩展属性内容
|
||||
protected Map<String,Object> userParam;// 用户输入参数
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import com.sdm.flowable.dto.req.AsyncCallbackRequest;
|
||||
import com.sdm.flowable.dto.resp.ProcessInstanceDetailResponse;
|
||||
import com.sdm.common.entity.resp.flowable.DeployFlowableResp;
|
||||
import com.sdm.flowable.enums.FlowElementTypeEnums;
|
||||
import com.sdm.flowable.service.IProcessNodeParamService;
|
||||
import com.sdm.flowable.util.Dto2BpmnConverter;
|
||||
import com.sdm.flowable.dto.req.CompleteTaskReq;
|
||||
import com.sdm.flowable.util.FlowNodeIdUtils;
|
||||
@@ -60,6 +61,9 @@ public class ProcessService {
|
||||
@Autowired
|
||||
private UniversalDelegate universalDelegate;
|
||||
|
||||
@Autowired
|
||||
IProcessNodeParamService processNodeParamService;
|
||||
|
||||
// 部署流程(前端传入Flowable标准JSON)
|
||||
public SdmResponse<DeployFlowableResp> deploy(ProcessDefinitionDTO processDTO) throws Exception {
|
||||
log.info("开始部署流程定义");
|
||||
@@ -259,7 +263,7 @@ public class ProcessService {
|
||||
|
||||
// 按有序节点构建详情
|
||||
return orderedNodes.stream()
|
||||
.map(node -> buildNodeDetailInfo(node, activityMap, activeActivityIds))
|
||||
.map(node -> buildNodeDetailInfo(node,processDefinitionId, activityMap, activeActivityIds))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@@ -273,11 +277,14 @@ public class ProcessService {
|
||||
// --- 构建单个节点详情(返回 NodeDetailInfo)---
|
||||
private NodeDetailInfo buildNodeDetailInfo(
|
||||
FlowNode node,
|
||||
String processDefinitionId,
|
||||
Map<String, HistoricActivityInstance> activityMap,
|
||||
List<String> activeActivityIds) {
|
||||
|
||||
String nodeId = node.getId();
|
||||
// 先构建静态结构
|
||||
NodeStructureInfo base = buildNodeStructureInfo(node);
|
||||
Map<String, Object> params = processNodeParamService.getParam(processDefinitionId, nodeId);
|
||||
base.setUserParam(params);
|
||||
|
||||
// 再填充动态信息
|
||||
NodeDetailInfo detail = new NodeDetailInfo();
|
||||
@@ -288,7 +295,6 @@ public class ProcessService {
|
||||
detail.setExecuteConfig(base.getExecuteConfig());
|
||||
|
||||
// 动态状态逻辑
|
||||
String nodeId = node.getId();
|
||||
HistoricActivityInstance historicActivity = activityMap.get(nodeId);
|
||||
boolean isActive = activeActivityIds.contains(nodeId);
|
||||
boolean isFinished = historicActivity != null && historicActivity.getEndTime() != null;
|
||||
|
||||
@@ -63,8 +63,8 @@ public class ProcessNodeParamServiceImpl extends ServiceImpl<ProcessNodeParamMap
|
||||
|
||||
|
||||
// 查询节点输入参数(流程执行时调用)
|
||||
public Map<String, Object> getParam(String procInstId, String nodeId) {
|
||||
ProcessNodeParam param = this.lambdaQuery().eq(ProcessNodeParam::getProcessInstanceId, procInstId)
|
||||
public Map<String, Object> getParam(String processDefinitionId, String nodeId) {
|
||||
ProcessNodeParam param = this.lambdaQuery().eq(ProcessNodeParam::getProcessDefinitionId, processDefinitionId)
|
||||
.eq(ProcessNodeParam::getNodeId, nodeId)
|
||||
.one();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user