优化flowable接口
This commit is contained in:
@@ -13,8 +13,6 @@ import com.sdm.flowable.dto.resp.DeployFlowableResp;
|
||||
import com.sdm.flowable.process.ProcessService;
|
||||
import com.sdm.flowable.service.IProcessNodeParamService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.flowable.engine.history.HistoricProcessInstance;
|
||||
import org.flowable.engine.repository.Deployment;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
import org.flowable.validation.ValidationError;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@@ -79,48 +77,6 @@ public class ProcessController implements IFlowableFeignClient {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取所有流程的部署历史
|
||||
*
|
||||
* @return 流程部署数据
|
||||
*/
|
||||
@GetMapping("/listAllDeployments")
|
||||
public List<Map<String, Object>> listAllDeployments() {
|
||||
return processService.listAllDeployments();
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据部署ID获取流程定义
|
||||
*
|
||||
* @param deploymentId 部署ID
|
||||
* @return 流程定义列表
|
||||
*/
|
||||
@GetMapping("/listPorcessDefinitionsByDeploymentId/{deploymentId}")
|
||||
public List<Map<String, Object>> listPorcessDefinitionsByDeploymentId(@PathVariable String deploymentId) {
|
||||
return processService.listPorcessDefinitionsByDeploymentId(deploymentId);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取部署的流程定义元数据信息
|
||||
*
|
||||
* @param processDefinitionId
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/listProcessDefinitionsMetaInfo")
|
||||
public SdmResponse listProcessDefinitionsMetaInfo(@RequestParam String processDefinitionId) {
|
||||
|
||||
return processService.listProcessDefinitionsMetaInfo(processDefinitionId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据流程 key 和指定版本获取版本流程定义的节点信息
|
||||
*/
|
||||
@GetMapping("/listNodesByProcessDefinitionKey")
|
||||
public List<Map<String, Object>> listNodesByProcessDefinitionKey(@RequestParam String processDefinitionKey, @RequestParam(required = false) Integer processDefinitionVersion) {
|
||||
return processService.listNodesByProcessDefinitionKey(processDefinitionKey, processDefinitionVersion);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取流程定义节点详细信息(直接传流程定义ID)
|
||||
*/
|
||||
@@ -143,32 +99,17 @@ public class ProcessController implements IFlowableFeignClient {
|
||||
|
||||
// 保存节点用户输入参数(先基于流程定义ID,等流程启动后,保存流程实例ID,作为参数模板)
|
||||
@PostMapping("/saveParamsByDefinitionId")
|
||||
public void saveParamsByDefinitionId(@RequestParam String processDefinitionId, @RequestParam String nodeId,
|
||||
public SdmResponse saveParamsByDefinitionId(@RequestParam String processDefinitionId, @RequestParam String nodeId,
|
||||
@RequestBody Map<String, Object> params) {
|
||||
processNodeParamService.saveParamByProcessDefinitionId(processDefinitionId, nodeId, params);
|
||||
return SdmResponse.success();
|
||||
}
|
||||
|
||||
// 启动流程实例后,更新流程参数的流程实例id
|
||||
@PostMapping("/updateNodeParamProcessInstanceId")
|
||||
public void updateNodeParamProcessInstanceId(@RequestParam String processDefinitionId, @RequestParam String processInstanceId) {
|
||||
public SdmResponse updateNodeParamProcessInstanceId(@RequestParam String processDefinitionId, @RequestParam String processInstanceId) {
|
||||
processNodeParamService.updateNodeParamProcessInstanceId(processInstanceId, processDefinitionId);
|
||||
}
|
||||
|
||||
// 启动流程实例
|
||||
@GetMapping("/startByProcessDefinitionKey")
|
||||
public SdmResponse startByProcessDefinitionKey(@RequestParam String processDefinitionKey) {
|
||||
ProcessInstance processInstance = processService.startByProcessDefinitionKey(processDefinitionKey);
|
||||
ProcessInstanceResp processInstanceResp = new ProcessInstanceResp();
|
||||
processInstanceResp.setId(processInstance.getId());
|
||||
processInstanceResp.setProcessDefinitionId(processInstance.getProcessDefinitionId());
|
||||
processInstanceResp.setProcessDefinitionKey(processInstance.getProcessDefinitionKey());
|
||||
processInstanceResp.setProcessDefinitionName(processInstance.getProcessDefinitionName());
|
||||
processInstanceResp.setProcessDefinitionVersion(processInstance.getProcessDefinitionVersion());
|
||||
processInstanceResp.setBusinessKey(processInstance.getBusinessKey());
|
||||
processInstanceResp.setStartUserId(processInstance.getStartUserId());
|
||||
processInstanceResp.setStartTime(processInstance.getStartTime());
|
||||
processInstanceResp.setSuspended(processInstance.isSuspended());
|
||||
return SdmResponse.success(processInstanceResp);
|
||||
return SdmResponse.success();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -183,7 +124,7 @@ public class ProcessController implements IFlowableFeignClient {
|
||||
@RequestBody(required = false) Map<String, Object> variables) {
|
||||
ProcessInstance processInstance = processService.startByProcessDefinitionId(processDefinitionId, variables);
|
||||
ProcessInstanceResp processInstanceResp = new ProcessInstanceResp();
|
||||
processInstanceResp.setId(processInstance.getId());
|
||||
processInstanceResp.setProcessInstanceId(processInstance.getId());
|
||||
processInstanceResp.setProcessDefinitionId(processInstance.getProcessDefinitionId());
|
||||
processInstanceResp.setProcessDefinitionKey(processInstance.getProcessDefinitionKey());
|
||||
processInstanceResp.setProcessDefinitionName(processInstance.getProcessDefinitionName());
|
||||
@@ -196,31 +137,13 @@ public class ProcessController implements IFlowableFeignClient {
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取最新流程实例
|
||||
*
|
||||
* @param processDefinitionKey
|
||||
* @return
|
||||
* 根据流程实例 ID 查询流程状态以及节点状态
|
||||
*/
|
||||
@GetMapping("/getLatestProcessInstanceByProcessDefinitionKey")
|
||||
public HistoricProcessInstance getLatestProcessInstanceByProcessDefinitionKey(@RequestParam String processDefinitionKey) {
|
||||
return processService.getLatestProcessInstance(processDefinitionKey);
|
||||
@GetMapping("/getProcessAndNodeDetailByInstanceId")
|
||||
public Map<String, Object> getProcessAndNodeDetailByInstanceId(@RequestParam String processInstanceId) {
|
||||
return processService.getProcessAndNodeDetailByInstanceId(processInstanceId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据流程实例 ID 查询节点状态
|
||||
*/
|
||||
@GetMapping("/getNodeDetailByInstanceId")
|
||||
public Map<String, Object> getNodeDetailByInstanceId(@RequestParam String processInstanceId) {
|
||||
return processService.getProcessNodeDetail(processInstanceId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据流程定义 Key 查询最新流程实例节点状态
|
||||
*/
|
||||
@GetMapping("/getNodeDetailByProcessDefinitionKey")
|
||||
public Map<String, Object> getNodeDetailByProcessDefinitionKey(@RequestParam String processDefinitionKey) {
|
||||
return processService.getNodeDetailByProcessDefinitionKey(processDefinitionKey);
|
||||
}
|
||||
|
||||
/**
|
||||
* 流程节点继续执行(完成人工节点/或者等待用户输入后继续手动执行的节点)
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.sdm.flowable.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ProcessDefinitionInfo {
|
||||
private String id;
|
||||
private String key;
|
||||
private String name;
|
||||
private String version;
|
||||
private String deploymentId;
|
||||
private String resourceName;
|
||||
private boolean suspended;
|
||||
}
|
||||
@@ -1,8 +0,0 @@
|
||||
package com.sdm.flowable.dto.req;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class DeployFlowableJsonReq {
|
||||
String flowableJson;
|
||||
}
|
||||
@@ -4,8 +4,6 @@ import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class DeployFlowableResp {
|
||||
String deploymentId;
|
||||
String deploymentName;
|
||||
String processDefinitionId;
|
||||
String processDefinitionKey;
|
||||
}
|
||||
|
||||
@@ -1,16 +1,13 @@
|
||||
package com.sdm.flowable.process;
|
||||
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.sdm.common.common.SdmResponse;
|
||||
import com.sdm.flowable.constants.FlowableConfig;
|
||||
import com.sdm.flowable.delegate.UniversalDelegate;
|
||||
import com.sdm.flowable.dto.ProcessDefinitionDTO;
|
||||
import com.sdm.flowable.dto.req.AsyncCallbackRequest;
|
||||
import com.sdm.flowable.dto.req.RetryRequest;
|
||||
import com.sdm.flowable.dto.resp.DeployFlowableResp;
|
||||
import com.sdm.flowable.enums.FlowElementTypeEnums;
|
||||
import com.sdm.flowable.util.Dto2BpmnConverter;
|
||||
import com.sdm.flowable.constants.FlowableConfig;
|
||||
import com.sdm.flowable.dto.req.CompleteTaskReq;
|
||||
import com.sdm.flowable.util.FlowNodeIdUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -24,7 +21,6 @@ import org.flowable.engine.history.HistoricActivityInstance;
|
||||
import org.flowable.engine.history.HistoricProcessInstance;
|
||||
import org.flowable.engine.repository.Deployment;
|
||||
import org.flowable.engine.repository.ProcessDefinition;
|
||||
import org.flowable.engine.repository.ProcessDefinitionQuery;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
import org.flowable.task.api.Task;
|
||||
import org.flowable.validation.ProcessValidator;
|
||||
@@ -98,83 +94,11 @@ public class ProcessService {
|
||||
return SdmResponse.failed("部署成功,但未找到关联的流程定义");
|
||||
}
|
||||
DeployFlowableResp resp = new DeployFlowableResp();
|
||||
resp.setDeploymentId(deployment.getId());
|
||||
resp.setDeploymentName(deployment.getName());
|
||||
resp.setProcessDefinitionId(processDefinition.getId());
|
||||
resp.setProcessDefinitionKey(processDefinition.getKey());
|
||||
return SdmResponse.success(resp);
|
||||
}
|
||||
|
||||
public List<Map<String, Object>> listAllDeployments() {
|
||||
return repositoryService.createDeploymentQuery()
|
||||
.list()
|
||||
.stream()
|
||||
.map(deployment -> {
|
||||
Map<String, Object> deploymentInfo = new HashMap<>();
|
||||
|
||||
deploymentInfo.put("id", deployment.getId());
|
||||
deploymentInfo.put("name", deployment.getName());
|
||||
deploymentInfo.put("deploymentTime", deployment.getDeploymentTime());
|
||||
deploymentInfo.put("category", deployment.getCategory());
|
||||
return deploymentInfo;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public List<Map<String, Object>> listPorcessDefinitionsByDeploymentId(String deploymentId) {
|
||||
|
||||
List<ProcessDefinition> processDefinitions =
|
||||
repositoryService.createProcessDefinitionQuery()
|
||||
.deploymentId(deploymentId)
|
||||
.orderByProcessDefinitionVersion().asc()
|
||||
.list();
|
||||
|
||||
return processDefinitions.stream()
|
||||
.map(def -> {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("id", def.getId());
|
||||
map.put("key", def.getKey());
|
||||
map.put("name", def.getName());
|
||||
map.put("resourceName", def.getResourceName());
|
||||
map.put("diagramResourceName", def.getDiagramResourceName());
|
||||
map.put("version", def.getVersion());
|
||||
map.put("suspended", def.isSuspended());
|
||||
map.put("deploymentId", def.getDeploymentId());
|
||||
return map;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
public SdmResponse listProcessDefinitionsMetaInfo(String processDefinitionId) {
|
||||
ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery().processDefinitionId(processDefinitionId).singleResult();
|
||||
return SdmResponse.success(processDefinition);
|
||||
}
|
||||
|
||||
public List<Map<String, Object>> listNodesByProcessDefinitionKey(
|
||||
String processDefinitionKey, Integer processDefinitionVersion) {
|
||||
|
||||
ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery()
|
||||
.processDefinitionKey(processDefinitionKey);
|
||||
|
||||
ProcessDefinition processDefinition;
|
||||
|
||||
if (processDefinitionVersion == null) {
|
||||
// ⭐ 未指定版本 → 查最新版本
|
||||
processDefinition = query.latestVersion().singleResult();
|
||||
} else {
|
||||
// ⭐ 指定版本 → 查询对应版本
|
||||
processDefinition = query
|
||||
.processDefinitionVersion(processDefinitionVersion)
|
||||
.singleResult();
|
||||
}
|
||||
|
||||
if (processDefinition == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
return getFlowStructureWithExtensions(processDefinition.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据流程定义ID获取节点信息
|
||||
*/
|
||||
@@ -188,7 +112,7 @@ public class ProcessService {
|
||||
* @param processDefinitionId
|
||||
* @return
|
||||
*/
|
||||
public List<Map<String, Object>> getFlowStructureWithExtensions(String processDefinitionId) {
|
||||
private List<Map<String, Object>> getFlowStructureWithExtensions(String processDefinitionId) {
|
||||
|
||||
BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId);
|
||||
if (bpmnModel == null) return Collections.emptyList();
|
||||
@@ -264,10 +188,6 @@ public class ProcessService {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
public void deleteAllDeployments() {
|
||||
repositoryService.createDeploymentQuery()
|
||||
.list()
|
||||
@@ -275,12 +195,6 @@ public class ProcessService {
|
||||
-> repositoryService.deleteDeployment(deployment.getId(), true));
|
||||
}
|
||||
|
||||
|
||||
// 启动流程实例
|
||||
public ProcessInstance startByProcessDefinitionKey(String processDefinitionKey) {
|
||||
return runtimeService.startProcessInstanceByKey(processDefinitionKey);
|
||||
}
|
||||
|
||||
public ProcessInstance startByProcessDefinitionId(String processDefinitionId, Map<String, Object> variables) {
|
||||
if (variables == null) {
|
||||
variables = Collections.emptyMap();
|
||||
@@ -296,11 +210,6 @@ public class ProcessService {
|
||||
return instance;
|
||||
}
|
||||
|
||||
// 获取BPMN模型用于调试和验证
|
||||
public BpmnModel getBpmnModel(ProcessDefinitionDTO processDTO) throws Exception {
|
||||
return dto2BpmnConverter.convert(processDTO);
|
||||
}
|
||||
|
||||
// 验证并返回模型验证错误信息
|
||||
public List<ValidationError> validateModel(ProcessDefinitionDTO processDTO) throws Exception {
|
||||
BpmnModel bpmnModel = dto2BpmnConverter.convert(processDTO);
|
||||
@@ -308,69 +217,16 @@ public class ProcessService {
|
||||
return validator.validate(bpmnModel);
|
||||
}
|
||||
|
||||
|
||||
|
||||
public HistoricProcessInstance getLatestProcessInstance(String processDefinitionKey) {
|
||||
|
||||
// 查询最新版本流程定义
|
||||
ProcessDefinition latestProcDef = repositoryService
|
||||
.createProcessDefinitionQuery()
|
||||
.processDefinitionKey(processDefinitionKey)
|
||||
.latestVersion()
|
||||
.singleResult();
|
||||
|
||||
if (latestProcDef == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// 优先查正在运行的
|
||||
ProcessInstance running = runtimeService.createProcessInstanceQuery()
|
||||
.processDefinitionId(latestProcDef.getId())
|
||||
.orderByStartTime()
|
||||
.desc()
|
||||
.listPage(0, 1)
|
||||
.stream()
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
|
||||
if (running != null) {
|
||||
return historyService.createHistoricProcessInstanceQuery()
|
||||
.processInstanceId(running.getId())
|
||||
.singleResult();
|
||||
}
|
||||
|
||||
// 查最近的历史实例(已结束)
|
||||
return historyService.createHistoricProcessInstanceQuery()
|
||||
.processDefinitionId(latestProcDef.getId())
|
||||
.orderByProcessInstanceStartTime()
|
||||
.desc()
|
||||
.listPage(0, 1)
|
||||
.stream()
|
||||
.findFirst()
|
||||
.orElse(null);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 查询流程的所有节点状态
|
||||
*
|
||||
* @param processInstanceId
|
||||
* @return
|
||||
*/
|
||||
public Map<String, Object> getProcessNodeDetail(String processInstanceId) {
|
||||
public Map<String, Object> getProcessAndNodeDetailByInstanceId(String processInstanceId) {
|
||||
return buildProcessNodeDetail(processInstanceId);
|
||||
}
|
||||
|
||||
public Map<String, Object> getNodeDetailByProcessDefinitionKey(String processDefinitionKey) {
|
||||
HistoricProcessInstance processInstance = getLatestProcessInstance(processDefinitionKey);
|
||||
|
||||
if (processInstance == null) {
|
||||
throw new RuntimeException("流程不存在或未运行过: " + processDefinitionKey);
|
||||
}
|
||||
|
||||
return buildProcessNodeDetail(processInstance.getId());
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据流程实例ID构建流程节点状态(支持 UserTask 任务信息和扩展属性)
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user