update - 流程节点推测功能细化,可以提前过滤掉已经完成或者不需要的节点,提高性能
This commit is contained in:
parent
3add4f209c
commit
c9fd2a54b0
@ -108,6 +108,7 @@ public interface ProcessInstanceApi {
|
||||
*/
|
||||
@PostMapping("/api/process/instance/carbon-copy")
|
||||
CommonResponse<Boolean> carbonCopyProcessInstance(@Validated @RequestBody BpmnProcessInstanceCarbonCopyDTO dto);
|
||||
|
||||
/**
|
||||
* 获得流程实例
|
||||
*
|
||||
@ -148,6 +149,19 @@ public interface ProcessInstanceApi {
|
||||
CommonResponse<List<ProcessNodeDetailVO>> processInstanceNodeForecast(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam(required = false) String processInstanceId,
|
||||
@Nullable @RequestParam(required = false) String tenantId);
|
||||
|
||||
/**
|
||||
* 推断指定流程实例的过滤掉部分节点执行顺序
|
||||
*
|
||||
* @param allNode 如果为真时,相当于调用 {@link ProcessInstanceApi#processInstanceNodeForecast(String, String)} 方法,切会直接丢弃 nodeDefinitionKeys 参数
|
||||
* 如果为假时,才结合 nodeDefinitionKeys 过滤掉传入的节点
|
||||
* @return
|
||||
*/
|
||||
@GetMapping("/api/process/instance/node/filter/forecasting")
|
||||
CommonResponse<List<ProcessNodeDetailVO>> processInstanceFilterNodeForecast(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam(required = false) String processInstanceId,
|
||||
@Nullable @RequestParam(required = false) String tenantId,
|
||||
@RequestParam(required = false, defaultValue = "false") Boolean allNode,
|
||||
@Nullable @RequestParam(required = false) List<String> nodeDefinitionKeys);
|
||||
|
||||
/**
|
||||
* 获取指定流程实例的协作单位
|
||||
*
|
||||
|
||||
@ -133,18 +133,8 @@ public interface BpmnProcessInstanceService {
|
||||
*/
|
||||
List<ProcessNodeDetailVO> getProcessInstanceNodeForecast(String processInstanceId, String tenantId);
|
||||
|
||||
/**
|
||||
* 可过滤指定节点集合的剩余接地那推送
|
||||
*
|
||||
* @param processInstanceId
|
||||
* @param tenantId
|
||||
* @param allNode
|
||||
* @param removeTaskDefinitionKeys
|
||||
* @return
|
||||
*/
|
||||
List<ProcessNodeDetailVO> getProcessInstanceNodeForecast(String processInstanceId, String tenantId, Boolean allNode, List<String> removeTaskDefinitionKeys);
|
||||
List<ProcessNodeDetailVO> getProcessInstanceNodeFilterForecast(String processInstanceId, String tenantId, List<String> nodeDefinitionKeys);
|
||||
|
||||
List<String> getTenantIds();
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -767,6 +767,12 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
@Override
|
||||
public List<ProcessNodeDetailVO> getProcessInstanceNodeForecast(String processInstanceId,
|
||||
@Nullable String tenantId) {
|
||||
|
||||
return getProcessInstanceNodeFilterForecast(processInstanceId, tenantId, Collections.emptyList());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ProcessNodeDetailVO> getProcessInstanceNodeFilterForecast(String processInstanceId, String tenantId, List<String> nodeDefinitionKeys) {
|
||||
ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery()
|
||||
.processInstanceId(processInstanceId);
|
||||
if (StringUtils.isNotBlank(tenantId)) {
|
||||
@ -778,7 +784,9 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
BpmnModel bpmnModel = repositoryService.getBpmnModel(instance.getProcessDefinitionId());
|
||||
List<ProcessNodeDetailVO> resultList = new ArrayList<>(flowElements.size());
|
||||
// 发起人节点,也是一个 UserTask 节点, 所以这里默认就包含了发起人节点
|
||||
flowElements.stream().filter(i -> (i instanceof UserTask || i instanceof ReceiveTask || i instanceof ServiceTask))
|
||||
flowElements.stream()
|
||||
.filter(i -> !nodeDefinitionKeys.contains(i.getId()))
|
||||
.filter(i -> (i instanceof UserTask || i instanceof ReceiveTask || i instanceof ServiceTask))
|
||||
.forEach(i -> {
|
||||
ProcessNodeDetailVO node = new ProcessNodeDetailVO();
|
||||
node.setForecastAssigners(Collections.emptyList());
|
||||
@ -802,20 +810,6 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
||||
return resultList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 可过滤指定节点集合的剩余接地那推送
|
||||
*
|
||||
* @param processInstanceId
|
||||
* @param tenantId
|
||||
* @param allNode
|
||||
* @param removeTaskDefinitionKeys
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<ProcessNodeDetailVO> getProcessInstanceNodeForecast(String processInstanceId, String tenantId, Boolean allNode, List<String> removeTaskDefinitionKeys) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
private void parseServiceTask(String processInstanceId, ServiceTask i, ProcessNodeDetailVO node) {
|
||||
// ServiceTask 主要作用于抄送
|
||||
node.setId(i.getId()).setName(i.getName());
|
||||
|
||||
@ -217,6 +217,30 @@ public class BpmnProcessInstanceController implements ProcessInstanceApi {
|
||||
return success(bpmnProcessInstanceService.getProcessInstanceNodeForecast(processInstanceId, tenantId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 推断指定流程实例的过滤掉部分节点执行顺序
|
||||
*
|
||||
* @param processInstanceId
|
||||
* @param tenantId
|
||||
* @param allNode 如果为真时,相当于调用 {@link ProcessInstanceApi#processInstanceNodeForecast(String, String)} 方法,切会直接丢弃 nodeDefinitionKeys 参数
|
||||
* 如果为假时,才结合 nodeDefinitionKeys 过滤掉传入的节点
|
||||
* @param nodeDefinitionKeys
|
||||
* @return
|
||||
*/
|
||||
@Operation(summary = "推断指定流程实例的过滤掉部分节点执行顺序")
|
||||
@GetMapping("/node/filter/forecasting")
|
||||
@Override
|
||||
public CommonResponse<List<ProcessNodeDetailVO>> processInstanceFilterNodeForecast(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam(required = false) String processInstanceId,
|
||||
@Nullable @RequestParam(required = false) String tenantId,
|
||||
@RequestParam(required = false, defaultValue = "false") Boolean allNode,
|
||||
@Nullable @RequestParam(required = false) List<String> nodeDefinitionKeys) {
|
||||
if (allNode) {
|
||||
return success(bpmnProcessInstanceService.getProcessInstanceNodeForecast(processInstanceId, tenantId));
|
||||
} else {
|
||||
return success(bpmnProcessInstanceService.getProcessInstanceNodeFilterForecast(processInstanceId, tenantId, nodeDefinitionKeys));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取指定流程实例的协作单位
|
||||
*
|
||||
|
||||
Loading…
Reference in New Issue
Block a user