Commit 0e48458ef7e85bb6bc8ba5e663885b32164a59f8

Authored by Lesan
1 parent 9698fee3

feat: 子流程-添加高亮

yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/framework/flowable/core/util/SimpleModelUtils.java
@@ -816,6 +816,8 @@ public class SimpleModelUtils { @@ -816,6 +816,8 @@ public class SimpleModelUtils {
816 if (childProcessSetting.getOutVariable() != null && !childProcessSetting.getOutVariable().isEmpty()) { 816 if (childProcessSetting.getOutVariable() != null && !childProcessSetting.getOutVariable().isEmpty()) {
817 callActivity.setOutParameters(childProcessSetting.getOutVariable()); 817 callActivity.setOutParameters(childProcessSetting.getOutVariable());
818 } 818 }
  819 + // 添加节点类型
  820 + addNodeType(node.getType(), callActivity);
819 return callActivity; 821 return callActivity;
820 } 822 }
821 823
@@ -865,6 +867,8 @@ public class SimpleModelUtils { @@ -865,6 +867,8 @@ public class SimpleModelUtils {
865 || nodeType == BpmSimpleModelNodeTypeEnum.APPROVE_NODE 867 || nodeType == BpmSimpleModelNodeTypeEnum.APPROVE_NODE
866 || nodeType == BpmSimpleModelNodeTypeEnum.TRANSACTOR_NODE 868 || nodeType == BpmSimpleModelNodeTypeEnum.TRANSACTOR_NODE
867 || nodeType == BpmSimpleModelNodeTypeEnum.COPY_NODE 869 || nodeType == BpmSimpleModelNodeTypeEnum.COPY_NODE
  870 + || nodeType == BpmSimpleModelNodeTypeEnum.CHILD_PROCESS
  871 + || nodeType == BpmSimpleModelNodeTypeEnum.ASYNC_CHILD_PROCESS
868 || nodeType == BpmSimpleModelNodeTypeEnum.END_NODE) { 872 || nodeType == BpmSimpleModelNodeTypeEnum.END_NODE) {
869 // 添加元素 873 // 添加元素
870 resultNodes.add(currentNode); 874 resultNodes.add(currentNode);
yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java
@@ -320,6 +320,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -320,6 +320,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
320 // 遍历 tasks 列表,只处理已结束的 UserTask 320 // 遍历 tasks 列表,只处理已结束的 UserTask
321 // 为什么不通过 activities 呢?因为,加签场景下,它只存在于 tasks,没有 activities,导致如果遍历 activities 321 // 为什么不通过 activities 呢?因为,加签场景下,它只存在于 tasks,没有 activities,导致如果遍历 activities
322 // 的话,它无法成为一个节点 322 // 的话,它无法成为一个节点
  323 + // TODO @芋艿:子流程只有activity,这里获取不到已结束的子流程
323 List<HistoricTaskInstance> endTasks = filterList(tasks, task -> task.getEndTime() != null); 324 List<HistoricTaskInstance> endTasks = filterList(tasks, task -> task.getEndTime() != null);
324 List<ActivityNode> approvalNodes = convertList(endTasks, task -> { 325 List<ActivityNode> approvalNodes = convertList(endTasks, task -> {
325 FlowElement flowNode = BpmnModelUtils.getFlowElementById(bpmnModel, task.getTaskDefinitionKey()); 326 FlowElement flowNode = BpmnModelUtils.getFlowElementById(bpmnModel, task.getTaskDefinitionKey());
@@ -390,7 +391,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -390,7 +391,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
390 List<HistoricTaskInstance> tasks) { 391 List<HistoricTaskInstance> tasks) {
391 // 构建运行中的任务,基于 activityId 分组 392 // 构建运行中的任务,基于 activityId 分组
392 List<HistoricActivityInstance> runActivities = filterList(activities, activity -> activity.getEndTime() == null 393 List<HistoricActivityInstance> runActivities = filterList(activities, activity -> activity.getEndTime() == null
393 - && (StrUtil.equalsAny(activity.getActivityType(), ELEMENT_TASK_USER))); 394 + && (StrUtil.equalsAny(activity.getActivityType(), ELEMENT_TASK_USER, ELEMENT_CALL_ACTIVITY)));
394 Map<String, List<HistoricActivityInstance>> runningTaskMap = convertMultiMap(runActivities, 395 Map<String, List<HistoricActivityInstance>> runningTaskMap = convertMultiMap(runActivities,
395 HistoricActivityInstance::getActivityId); 396 HistoricActivityInstance::getActivityId);
396 397
@@ -404,7 +405,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -404,7 +405,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
404 HistoricActivityInstance firstActivity = CollUtil.getFirst(taskActivities); // 取第一个任务,会签/或签的任务,开始时间相同 405 HistoricActivityInstance firstActivity = CollUtil.getFirst(taskActivities); // 取第一个任务,会签/或签的任务,开始时间相同
405 ActivityNode activityNode = new ActivityNode().setId(firstActivity.getActivityId()) 406 ActivityNode activityNode = new ActivityNode().setId(firstActivity.getActivityId())
406 .setName(firstActivity.getActivityName()) 407 .setName(firstActivity.getActivityName())
407 - .setNodeType(ObjUtil.defaultIfNull(parseNodeType(flowNode), // 目的:解决“办理节点”的识别 408 + .setNodeType(ObjUtil.defaultIfNull(parseNodeType(flowNode), // 目的:解决“办理节点”和"子流程"的识别
408 BpmSimpleModelNodeTypeEnum.APPROVE_NODE.getType())) 409 BpmSimpleModelNodeTypeEnum.APPROVE_NODE.getType()))
409 .setStatus(BpmTaskStatusEnum.RUNNING.getStatus()) 410 .setStatus(BpmTaskStatusEnum.RUNNING.getStatus())
410 .setCandidateStrategy(BpmnModelUtils.parseCandidateStrategy(flowNode)) 411 .setCandidateStrategy(BpmnModelUtils.parseCandidateStrategy(flowNode))
@@ -413,6 +414,9 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -413,6 +414,9 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
413 // 处理每个任务的 tasks 属性 414 // 处理每个任务的 tasks 属性
414 for (HistoricActivityInstance activity : taskActivities) { 415 for (HistoricActivityInstance activity : taskActivities) {
415 HistoricTaskInstance task = taskMap.get(activity.getTaskId()); 416 HistoricTaskInstance task = taskMap.get(activity.getTaskId());
  417 + if (task == null) {
  418 + continue;
  419 + }
416 activityNode.getTasks().add(BpmProcessInstanceConvert.INSTANCE.buildApprovalTaskInfo(task)); 420 activityNode.getTasks().add(BpmProcessInstanceConvert.INSTANCE.buildApprovalTaskInfo(task));
417 // 加签子任务,需要过滤掉已经完成的加签子任务 421 // 加签子任务,需要过滤掉已经完成的加签子任务
418 List<HistoricTaskInstance> childrenTasks = filterList( 422 List<HistoricTaskInstance> childrenTasks = filterList(
@@ -503,6 +507,12 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -503,6 +507,12 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
503 activityNode.setCandidateUserIds(candidateUserIds); 507 activityNode.setCandidateUserIds(candidateUserIds);
504 return activityNode; 508 return activityNode;
505 } 509 }
  510 +
  511 + // 4. 子流程节点
  512 + if (BpmSimpleModelNodeTypeEnum.CHILD_PROCESS.getType().equals(node.getType()) ||
  513 + BpmSimpleModelNodeTypeEnum.ASYNC_CHILD_PROCESS.getType().equals(node.getType())) {
  514 + return activityNode;
  515 + }
506 return null; 516 return null;
507 } 517 }
508 518