update - 流程节点推测功能细化,可以提前过滤掉已经完成或者不需要的节点,提高性能
This commit is contained in:
parent
3add4f209c
commit
c9fd2a54b0
@ -108,6 +108,7 @@ public interface ProcessInstanceApi {
|
|||||||
*/
|
*/
|
||||||
@PostMapping("/api/process/instance/carbon-copy")
|
@PostMapping("/api/process/instance/carbon-copy")
|
||||||
CommonResponse<Boolean> carbonCopyProcessInstance(@Validated @RequestBody BpmnProcessInstanceCarbonCopyDTO dto);
|
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,
|
CommonResponse<List<ProcessNodeDetailVO>> processInstanceNodeForecast(@NotBlank(message = "流程实例 ID 不能为空") @RequestParam(required = false) String processInstanceId,
|
||||||
@Nullable @RequestParam(required = false) String tenantId);
|
@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);
|
List<ProcessNodeDetailVO> getProcessInstanceNodeForecast(String processInstanceId, String tenantId);
|
||||||
|
|
||||||
/**
|
List<ProcessNodeDetailVO> getProcessInstanceNodeFilterForecast(String processInstanceId, String tenantId, List<String> nodeDefinitionKeys);
|
||||||
* 可过滤指定节点集合的剩余接地那推送
|
|
||||||
*
|
|
||||||
* @param processInstanceId
|
|
||||||
* @param tenantId
|
|
||||||
* @param allNode
|
|
||||||
* @param removeTaskDefinitionKeys
|
|
||||||
* @return
|
|
||||||
*/
|
|
||||||
List<ProcessNodeDetailVO> getProcessInstanceNodeForecast(String processInstanceId, String tenantId, Boolean allNode, List<String> removeTaskDefinitionKeys);
|
|
||||||
|
|
||||||
List<String> getTenantIds();
|
List<String> getTenantIds();
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -767,6 +767,12 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
|||||||
@Override
|
@Override
|
||||||
public List<ProcessNodeDetailVO> getProcessInstanceNodeForecast(String processInstanceId,
|
public List<ProcessNodeDetailVO> getProcessInstanceNodeForecast(String processInstanceId,
|
||||||
@Nullable String tenantId) {
|
@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()
|
ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery()
|
||||||
.processInstanceId(processInstanceId);
|
.processInstanceId(processInstanceId);
|
||||||
if (StringUtils.isNotBlank(tenantId)) {
|
if (StringUtils.isNotBlank(tenantId)) {
|
||||||
@ -778,7 +784,9 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
|||||||
BpmnModel bpmnModel = repositoryService.getBpmnModel(instance.getProcessDefinitionId());
|
BpmnModel bpmnModel = repositoryService.getBpmnModel(instance.getProcessDefinitionId());
|
||||||
List<ProcessNodeDetailVO> resultList = new ArrayList<>(flowElements.size());
|
List<ProcessNodeDetailVO> resultList = new ArrayList<>(flowElements.size());
|
||||||
// 发起人节点,也是一个 UserTask 节点, 所以这里默认就包含了发起人节点
|
// 发起人节点,也是一个 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 -> {
|
.forEach(i -> {
|
||||||
ProcessNodeDetailVO node = new ProcessNodeDetailVO();
|
ProcessNodeDetailVO node = new ProcessNodeDetailVO();
|
||||||
node.setForecastAssigners(Collections.emptyList());
|
node.setForecastAssigners(Collections.emptyList());
|
||||||
@ -802,20 +810,6 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic
|
|||||||
return resultList;
|
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) {
|
private void parseServiceTask(String processInstanceId, ServiceTask i, ProcessNodeDetailVO node) {
|
||||||
// ServiceTask 主要作用于抄送
|
// ServiceTask 主要作用于抄送
|
||||||
node.setId(i.getId()).setName(i.getName());
|
node.setId(i.getId()).setName(i.getName());
|
||||||
|
|||||||
@ -191,7 +191,7 @@ public class BpmnProcessInstanceController implements ProcessInstanceApi {
|
|||||||
* 获取审批流程实例的运行图
|
* 获取审批流程实例的运行图
|
||||||
*
|
*
|
||||||
* @param processInstanceId 流程实例 ID
|
* @param processInstanceId 流程实例 ID
|
||||||
* @param tenantId 租户 ID
|
* @param tenantId 租户 ID
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
@Operation(summary = "获取审批流程实例的运行图")
|
@Operation(summary = "获取审批流程实例的运行图")
|
||||||
@ -217,6 +217,30 @@ public class BpmnProcessInstanceController implements ProcessInstanceApi {
|
|||||||
return success(bpmnProcessInstanceService.getProcessInstanceNodeForecast(processInstanceId, tenantId));
|
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