Commit 9e151b396676f82f5cd8e8ba07998a6d60f44b7c

Authored by smallNorthLee
1 parent 4e57bd15

review: 278 281行

yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/task/BpmProcessInstanceServiceImpl.java
@@ -149,7 +149,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -149,7 +149,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
149 } 149 }
150 150
151 private Map<String, String> getFormFieldsPermission(BpmnModel bpmnModel, 151 private Map<String, String> getFormFieldsPermission(BpmnModel bpmnModel,
152 - String activityId, String taskId) { 152 + String activityId, String taskId) {
153 // 1. 获取流程活动编号。流程活动 Id 为空事,从流程任务中获取流程活动 Id 153 // 1. 获取流程活动编号。流程活动 Id 为空事,从流程任务中获取流程活动 Id
154 if (StrUtil.isEmpty(activityId) && StrUtil.isNotEmpty(taskId)) { 154 if (StrUtil.isEmpty(activityId) && StrUtil.isNotEmpty(taskId)) {
155 activityId = Optional.ofNullable(taskService.getHistoricTask(taskId)) 155 activityId = Optional.ofNullable(taskService.getHistoricTask(taskId))
@@ -232,57 +232,62 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -232,57 +232,62 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
232 232
233 @Override 233 @Override
234 public List<ActivityNode> getNextFlowNodes(Long loginUserId, BpmApprovalDetailReqVO reqVO) { 234 public List<ActivityNode> getNextFlowNodes(Long loginUserId, BpmApprovalDetailReqVO reqVO) {
235 - // 1 校验任务存在 235 + // 1.1 校验任务存在
236 Task task = taskService.getTask(reqVO.getTaskId()); 236 Task task = taskService.getTask(reqVO.getTaskId());
237 if (task == null) { 237 if (task == null) {
238 throw exception(TASK_NOT_EXISTS); 238 throw exception(TASK_NOT_EXISTS);
239 } 239 }
240 - // 2 校验任务是否由当前用户审批 240 + // 1.2 校验任务是否由当前用户审批
241 if (StrUtil.isNotBlank(task.getAssignee()) 241 if (StrUtil.isNotBlank(task.getAssignee())
242 && ObjectUtil.notEqual(loginUserId, NumberUtils.parseLong(task.getAssignee()))) { 242 && ObjectUtil.notEqual(loginUserId, NumberUtils.parseLong(task.getAssignee()))) {
243 throw exception(TASK_OPERATE_FAIL_ASSIGN_NOT_SELF); 243 throw exception(TASK_OPERATE_FAIL_ASSIGN_NOT_SELF);
244 } 244 }
245 - // 3 校验流程实例存在 245 + // 1.3 校验流程实例存在
246 ProcessInstance instance = getProcessInstance(task.getProcessInstanceId()); 246 ProcessInstance instance = getProcessInstance(task.getProcessInstanceId());
247 if (instance == null) { 247 if (instance == null) {
248 throw exception(PROCESS_INSTANCE_NOT_EXISTS); 248 throw exception(PROCESS_INSTANCE_NOT_EXISTS);
249 } 249 }
250 - // 4 获取 BpmnModel 250 + // 1.4 校验BpmnModel
251 BpmnModel bpmnModel = processDefinitionService.getProcessDefinitionBpmnModel(task.getProcessDefinitionId()); 251 BpmnModel bpmnModel = processDefinitionService.getProcessDefinitionBpmnModel(task.getProcessDefinitionId());
252 if (bpmnModel == null) { 252 if (bpmnModel == null) {
253 return null; 253 return null;
254 } 254 }
  255 + //1.5 流程实例是否存在
255 HistoricProcessInstance historicProcessInstance = getHistoricProcessInstance(task.getProcessInstanceId()); 256 HistoricProcessInstance historicProcessInstance = getHistoricProcessInstance(task.getProcessInstanceId());
256 if (historicProcessInstance == null) { 257 if (historicProcessInstance == null) {
257 throw exception(ErrorCodeConstants.PROCESS_INSTANCE_NOT_EXISTS); 258 throw exception(ErrorCodeConstants.PROCESS_INSTANCE_NOT_EXISTS);
258 } 259 }
  260 +
  261 + // 2 设置流程变量
259 Map<String, Object> processVariables = new HashMap<>(); 262 Map<String, Object> processVariables = new HashMap<>();
260 - // 获取历史中流程变量 263 + // 2.1 获取历史中流程变量
261 Map<String, Object> historicVariables = historicProcessInstance.getProcessVariables(); 264 Map<String, Object> historicVariables = historicProcessInstance.getProcessVariables();
262 if (CollUtil.isNotEmpty(historicVariables)) { 265 if (CollUtil.isNotEmpty(historicVariables)) {
263 processVariables.putAll(historicVariables); 266 processVariables.putAll(historicVariables);
264 } 267 }
265 - // 合并前端传递的流程变量,以前端为准  
266 - if (CollUtil.isNotEmpty(reqVO.getProcessVariables())){ 268 + // 2.2 合并前端传递的流程变量,以前端为准
  269 + if (CollUtil.isNotEmpty(reqVO.getProcessVariables())) {
267 processVariables.putAll(reqVO.getProcessVariables()); 270 processVariables.putAll(reqVO.getProcessVariables());
268 } 271 }
269 - // 获取流程定义信息  
270 - BpmProcessDefinitionInfoDO processDefinitionInfo = processDefinitionService  
271 - .getProcessDefinitionInfo(task.getProcessDefinitionId());  
272 - // 获取当前任务节点的信息 272 + // 3 获取当前任务节点的信息
273 FlowElement flowElement = bpmnModel.getFlowElement(task.getTaskDefinitionKey()); 273 FlowElement flowElement = bpmnModel.getFlowElement(task.getTaskDefinitionKey());
274 - // 获取下一个将要执行的节点集合 274 + // 3.1 获取下一个将要执行的节点集合
275 List<FlowNode> nextFlowNodes = BpmnModelUtils.getNextFlowNodes(flowElement, bpmnModel, processVariables); 275 List<FlowNode> nextFlowNodes = BpmnModelUtils.getNextFlowNodes(flowElement, bpmnModel, processVariables);
276 return convertList(nextFlowNodes, node -> { 276 return convertList(nextFlowNodes, node -> {
277 List<Long> candidateUserIds = getTaskCandidateUserList(bpmnModel, node.getId(), 277 List<Long> candidateUserIds = getTaskCandidateUserList(bpmnModel, node.getId(),
278 - loginUserId, processDefinitionInfo.getProcessDefinitionId(), processVariables);  
279 - //存在一个节点多人审批的情况  
280 - List<UserSimpleBaseVO> candidateUsers = new ArrayList<>();  
281 - for (Long candidateUserId : candidateUserIds) {  
282 - Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(candidateUserIds);  
283 - Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(convertSet(userMap.values(), AdminUserRespDTO::getDeptId));  
284 - candidateUsers.add(BpmProcessInstanceConvert.INSTANCE.buildUser(candidateUserId, userMap, deptMap)); 278 + loginUserId, historicProcessInstance.getProcessDefinitionId(), processVariables);
  279 + // 3.2 获取节点的审批人信息
  280 + Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(candidateUserIds);
  281 + if (CollUtil.isEmpty(userMap)) {
  282 + return null;
285 } 283 }
  284 + // 3.3 获取节点的审批人部门信息
  285 + Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(convertSet(userMap.values(), AdminUserRespDTO::getDeptId));
  286 + // 3.4 存在一个节点多人审批的情况,组装审批人信息
  287 + List<UserSimpleBaseVO> candidateUsers = new ArrayList<>();
  288 + userMap.forEach((key, value) -> {
  289 + candidateUsers.add(BpmProcessInstanceConvert.INSTANCE.buildUser(key, userMap, deptMap));
  290 + });
286 return new ActivityNode().setNodeType(BpmSimpleModelNodeTypeEnum.APPROVE_NODE.getType()) 291 return new ActivityNode().setNodeType(BpmSimpleModelNodeTypeEnum.APPROVE_NODE.getType())
287 .setId(node.getId()) 292 .setId(node.getId())
288 .setName(node.getName()) 293 .setName(node.getName())
@@ -356,15 +361,15 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -356,15 +361,15 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
356 * 主要是,拼接审批人的用户信息、部门信息 361 * 主要是,拼接审批人的用户信息、部门信息
357 */ 362 */
358 private BpmApprovalDetailRespVO buildApprovalDetail(BpmApprovalDetailReqVO reqVO, 363 private BpmApprovalDetailRespVO buildApprovalDetail(BpmApprovalDetailReqVO reqVO,
359 - BpmnModel bpmnModel,  
360 - ProcessDefinition processDefinition,  
361 - BpmProcessDefinitionInfoDO processDefinitionInfo,  
362 - HistoricProcessInstance processInstance,  
363 - Integer processInstanceStatus,  
364 - List<ActivityNode> endApprovalNodeInfos,  
365 - List<ActivityNode> runningApprovalNodeInfos,  
366 - List<ActivityNode> simulateApprovalNodeInfos,  
367 - BpmTaskRespVO todoTask) { 364 + BpmnModel bpmnModel,
  365 + ProcessDefinition processDefinition,
  366 + BpmProcessDefinitionInfoDO processDefinitionInfo,
  367 + HistoricProcessInstance processInstance,
  368 + Integer processInstanceStatus,
  369 + List<ActivityNode> endApprovalNodeInfos,
  370 + List<ActivityNode> runningApprovalNodeInfos,
  371 + List<ActivityNode> simulateApprovalNodeInfos,
  372 + BpmTaskRespVO todoTask) {
368 // 1. 获取所有需要读取用户信息的 userIds 373 // 1. 获取所有需要读取用户信息的 userIds
369 List<ActivityNode> approveNodes = newArrayList( 374 List<ActivityNode> approveNodes = newArrayList(
370 asList(endApprovalNodeInfos, runningApprovalNodeInfos, simulateApprovalNodeInfos)); 375 asList(endApprovalNodeInfos, runningApprovalNodeInfos, simulateApprovalNodeInfos));
@@ -386,9 +391,9 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -386,9 +391,9 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
386 * 获得【已结束】的活动节点们 391 * 获得【已结束】的活动节点们
387 */ 392 */
388 private List<ActivityNode> getEndActivityNodeList(Long startUserId, BpmnModel bpmnModel, 393 private List<ActivityNode> getEndActivityNodeList(Long startUserId, BpmnModel bpmnModel,
389 - BpmProcessDefinitionInfoDO processDefinitionInfo,  
390 - HistoricProcessInstance historicProcessInstance, Integer processInstanceStatus,  
391 - List<HistoricActivityInstance> activities, List<HistoricTaskInstance> tasks) { 394 + BpmProcessDefinitionInfoDO processDefinitionInfo,
  395 + HistoricProcessInstance historicProcessInstance, Integer processInstanceStatus,
  396 + List<HistoricActivityInstance> activities, List<HistoricTaskInstance> tasks) {
392 // 遍历 tasks 列表,只处理已结束的 UserTask 397 // 遍历 tasks 列表,只处理已结束的 UserTask
393 // 为什么不通过 activities 呢?因为,加签场景下,它只存在于 tasks,没有 activities,导致如果遍历 activities 398 // 为什么不通过 activities 呢?因为,加签场景下,它只存在于 tasks,没有 activities,导致如果遍历 activities
394 // 的话,它无法成为一个节点 399 // 的话,它无法成为一个节点
@@ -400,7 +405,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -400,7 +405,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
400 .setNodeType(START_USER_NODE_ID.equals(task.getTaskDefinitionKey()) 405 .setNodeType(START_USER_NODE_ID.equals(task.getTaskDefinitionKey())
401 ? BpmSimpleModelNodeTypeEnum.START_USER_NODE.getType() 406 ? BpmSimpleModelNodeTypeEnum.START_USER_NODE.getType()
402 : ObjUtil.defaultIfNull(parseNodeType(flowNode), // 目的:解决“办理节点”的识别 407 : ObjUtil.defaultIfNull(parseNodeType(flowNode), // 目的:解决“办理节点”的识别
403 - BpmSimpleModelNodeTypeEnum.APPROVE_NODE.getType())) 408 + BpmSimpleModelNodeTypeEnum.APPROVE_NODE.getType()))
404 .setStatus(FlowableUtils.getTaskStatus(task)) 409 .setStatus(FlowableUtils.getTaskStatus(task))
405 .setCandidateStrategy(BpmnModelUtils.parseCandidateStrategy(flowNode)) 410 .setCandidateStrategy(BpmnModelUtils.parseCandidateStrategy(flowNode))
406 .setStartTime(DateUtils.of(task.getCreateTime())).setEndTime(DateUtils.of(task.getEndTime())) 411 .setStartTime(DateUtils.of(task.getCreateTime())).setEndTime(DateUtils.of(task.getEndTime()))
@@ -456,11 +461,11 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -456,11 +461,11 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
456 * 获得【进行中】的活动节点们 461 * 获得【进行中】的活动节点们
457 */ 462 */
458 private List<ActivityNode> getRunApproveNodeList(Long startUserId, 463 private List<ActivityNode> getRunApproveNodeList(Long startUserId,
459 - BpmnModel bpmnModel,  
460 - ProcessDefinition processDefinition,  
461 - Map<String, Object> processVariables,  
462 - List<HistoricActivityInstance> activities,  
463 - List<HistoricTaskInstance> tasks) { 464 + BpmnModel bpmnModel,
  465 + ProcessDefinition processDefinition,
  466 + Map<String, Object> processVariables,
  467 + List<HistoricActivityInstance> activities,
  468 + List<HistoricTaskInstance> tasks) {
464 // 构建运行中的任务、子流程,基于 activityId 分组 469 // 构建运行中的任务、子流程,基于 activityId 分组
465 List<HistoricActivityInstance> runActivities = filterList(activities, activity -> activity.getEndTime() == null 470 List<HistoricActivityInstance> runActivities = filterList(activities, activity -> activity.getEndTime() == null
466 && (StrUtil.equalsAny(activity.getActivityType(), ELEMENT_TASK_USER, ELEMENT_CALL_ACTIVITY))); 471 && (StrUtil.equalsAny(activity.getActivityType(), ELEMENT_TASK_USER, ELEMENT_CALL_ACTIVITY)));
@@ -521,9 +526,9 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -521,9 +526,9 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
521 * 获得【预测(未来)】的活动节点们 526 * 获得【预测(未来)】的活动节点们
522 */ 527 */
523 private List<ActivityNode> getSimulateApproveNodeList(Long startUserId, BpmnModel bpmnModel, 528 private List<ActivityNode> getSimulateApproveNodeList(Long startUserId, BpmnModel bpmnModel,
524 - BpmProcessDefinitionInfoDO processDefinitionInfo,  
525 - Map<String, Object> processVariables,  
526 - List<HistoricActivityInstance> activities) { 529 + BpmProcessDefinitionInfoDO processDefinitionInfo,
  530 + Map<String, Object> processVariables,
  531 + List<HistoricActivityInstance> activities) {
527 // TODO @芋艿:【可优化】在驳回场景下,未来的预测准确性不高。原因是,驳回后,HistoricActivityInstance 532 // TODO @芋艿:【可优化】在驳回场景下,未来的预测准确性不高。原因是,驳回后,HistoricActivityInstance
528 // 包括了历史的操作,不是只有 startEvent 到当前节点的记录 533 // 包括了历史的操作,不是只有 startEvent 到当前节点的记录
529 Set<String> runActivityIds = convertSet(activities, HistoricActivityInstance::getActivityId); 534 Set<String> runActivityIds = convertSet(activities, HistoricActivityInstance::getActivityId);
@@ -545,8 +550,8 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -545,8 +550,8 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
545 } 550 }
546 551
547 private ActivityNode buildNotRunApproveNodeForSimple(Long startUserId, BpmnModel bpmnModel, 552 private ActivityNode buildNotRunApproveNodeForSimple(Long startUserId, BpmnModel bpmnModel,
548 - BpmProcessDefinitionInfoDO processDefinitionInfo, Map<String, Object> processVariables,  
549 - BpmSimpleModelNodeVO node, Set<String> runActivityIds) { 553 + BpmProcessDefinitionInfoDO processDefinitionInfo, Map<String, Object> processVariables,
  554 + BpmSimpleModelNodeVO node, Set<String> runActivityIds) {
550 // TODO @芋艿:【可优化】在驳回场景下,未来的预测准确性不高。原因是,驳回后,HistoricActivityInstance 555 // TODO @芋艿:【可优化】在驳回场景下,未来的预测准确性不高。原因是,驳回后,HistoricActivityInstance
551 // 包括了历史的操作,不是只有 startEvent 到当前节点的记录 556 // 包括了历史的操作,不是只有 startEvent 到当前节点的记录
552 if (runActivityIds.contains(node.getId())) { 557 if (runActivityIds.contains(node.getId())) {
@@ -590,8 +595,8 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -590,8 +595,8 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
590 } 595 }
591 596
592 private ActivityNode buildNotRunApproveNodeForBpmn(Long startUserId, BpmnModel bpmnModel, 597 private ActivityNode buildNotRunApproveNodeForBpmn(Long startUserId, BpmnModel bpmnModel,
593 - BpmProcessDefinitionInfoDO processDefinitionInfo, Map<String, Object> processVariables,  
594 - FlowElement node, Set<String> runActivityIds) { 598 + BpmProcessDefinitionInfoDO processDefinitionInfo, Map<String, Object> processVariables,
  599 + FlowElement node, Set<String> runActivityIds) {
595 if (runActivityIds.contains(node.getId())) { 600 if (runActivityIds.contains(node.getId())) {
596 return null; 601 return null;
597 } 602 }
@@ -622,7 +627,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -622,7 +627,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
622 } 627 }
623 628
624 private List<Long> getTaskCandidateUserList(BpmnModel bpmnModel, String activityId, 629 private List<Long> getTaskCandidateUserList(BpmnModel bpmnModel, String activityId,
625 - Long startUserId, String processDefinitionId, Map<String, Object> processVariables) { 630 + Long startUserId, String processDefinitionId, Map<String, Object> processVariables) {
626 Set<Long> userIds = taskCandidateInvoker.calculateUsersByActivity(bpmnModel, activityId, 631 Set<Long> userIds = taskCandidateInvoker.calculateUsersByActivity(bpmnModel, activityId,
627 startUserId, processDefinitionId, processVariables); 632 startUserId, processDefinitionId, processVariables);
628 return new ArrayList<>(userIds); 633 return new ArrayList<>(userIds);
@@ -658,11 +663,11 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -658,11 +663,11 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
658 Set<String> finishedTaskActivityIds = convertSet(activities, HistoricActivityInstance::getActivityId, 663 Set<String> finishedTaskActivityIds = convertSet(activities, HistoricActivityInstance::getActivityId,
659 activityInstance -> activityInstance.getEndTime() != null 664 activityInstance -> activityInstance.getEndTime() != null
660 && ObjectUtil.notEqual(activityInstance.getActivityType(), 665 && ObjectUtil.notEqual(activityInstance.getActivityType(),
661 - BpmnXMLConstants.ELEMENT_SEQUENCE_FLOW)); 666 + BpmnXMLConstants.ELEMENT_SEQUENCE_FLOW));
662 Set<String> finishedSequenceFlowActivityIds = convertSet(activities, HistoricActivityInstance::getActivityId, 667 Set<String> finishedSequenceFlowActivityIds = convertSet(activities, HistoricActivityInstance::getActivityId,
663 activityInstance -> activityInstance.getEndTime() != null 668 activityInstance -> activityInstance.getEndTime() != null
664 && ObjectUtil.equals(activityInstance.getActivityType(), 669 && ObjectUtil.equals(activityInstance.getActivityType(),
665 - BpmnXMLConstants.ELEMENT_SEQUENCE_FLOW)); 670 + BpmnXMLConstants.ELEMENT_SEQUENCE_FLOW));
666 // 特殊:会签情况下,会有部分已完成(审批)、部分未完成(待审批),此时需要 finishedTaskActivityIds 移除掉 671 // 特殊:会签情况下,会有部分已完成(审批)、部分未完成(待审批),此时需要 finishedTaskActivityIds 移除掉
667 finishedTaskActivityIds.removeAll(unfinishedTaskActivityIds); 672 finishedTaskActivityIds.removeAll(unfinishedTaskActivityIds);
668 // 特殊:如果流程实例被拒绝,则需要计算是哪个活动节点。 673 // 特殊:如果流程实例被拒绝,则需要计算是哪个活动节点。
@@ -714,8 +719,8 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -714,8 +719,8 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
714 } 719 }
715 720
716 private String createProcessInstance0(Long userId, ProcessDefinition definition, 721 private String createProcessInstance0(Long userId, ProcessDefinition definition,
717 - Map<String, Object> variables, String businessKey,  
718 - Map<String, List<Long>> startUserSelectAssignees) { 722 + Map<String, Object> variables, String businessKey,
  723 + Map<String, List<Long>> startUserSelectAssignees) {
719 // 1.1 校验流程定义 724 // 1.1 校验流程定义
720 if (definition == null) { 725 if (definition == null) {
721 throw exception(PROCESS_DEFINITION_NOT_EXISTS); 726 throw exception(PROCESS_DEFINITION_NOT_EXISTS);
@@ -744,8 +749,8 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -744,8 +749,8 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
744 variables.put(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS, // 流程实例状态:审批中 749 variables.put(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS, // 流程实例状态:审批中
745 BpmProcessInstanceStatusEnum.RUNNING.getStatus()); 750 BpmProcessInstanceStatusEnum.RUNNING.getStatus());
746 variables.put(BpmnVariableConstants.PROCESS_INSTANCE_SKIP_EXPRESSION_ENABLED, true); // 跳过表达式需要添加此变量为 751 variables.put(BpmnVariableConstants.PROCESS_INSTANCE_SKIP_EXPRESSION_ENABLED, true); // 跳过表达式需要添加此变量为
747 - // true,不影响没配置  
748 - // skipExpression 的节点 752 + // true,不影响没配置
  753 + // skipExpression 的节点
749 if (CollUtil.isNotEmpty(startUserSelectAssignees)) { 754 if (CollUtil.isNotEmpty(startUserSelectAssignees)) {
750 // 设置流程变量,发起人自选审批人 755 // 设置流程变量,发起人自选审批人
751 variables.put(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_START_USER_SELECT_ASSIGNEES, 756 variables.put(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_START_USER_SELECT_ASSIGNEES,
@@ -784,20 +789,20 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService @@ -784,20 +789,20 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService
784 789
785 private void validateStartUserSelectAssignees(Long userId, ProcessDefinition definition, 790 private void validateStartUserSelectAssignees(Long userId, ProcessDefinition definition,
786 Map<String, List<Long>> startUserSelectAssignees, 791 Map<String, List<Long>> startUserSelectAssignees,
787 - Map<String,Object> variables) { 792 + Map<String, Object> variables) {
788 // 1. 获取预测的节点信息 793 // 1. 获取预测的节点信息
789 BpmApprovalDetailRespVO detailRespVO = getApprovalDetail(userId, new BpmApprovalDetailReqVO() 794 BpmApprovalDetailRespVO detailRespVO = getApprovalDetail(userId, new BpmApprovalDetailReqVO()
790 .setProcessDefinitionId(definition.getId()) 795 .setProcessDefinitionId(definition.getId())
791 .setProcessVariables(variables)); 796 .setProcessVariables(variables));
792 List<ActivityNode> activityNodes = detailRespVO.getActivityNodes(); 797 List<ActivityNode> activityNodes = detailRespVO.getActivityNodes();
793 - if (CollUtil.isEmpty(activityNodes)){ 798 + if (CollUtil.isEmpty(activityNodes)) {
794 return; 799 return;
795 } 800 }
796 801
797 // 2.1 移除掉不是发起人或者审批人自选审批人节点 802 // 2.1 移除掉不是发起人或者审批人自选审批人节点
798 activityNodes.removeIf(task -> 803 activityNodes.removeIf(task ->
799 ObjectUtil.notEqual(BpmTaskCandidateStrategyEnum.START_USER_SELECT.getStrategy(), task.getCandidateStrategy()) 804 ObjectUtil.notEqual(BpmTaskCandidateStrategyEnum.START_USER_SELECT.getStrategy(), task.getCandidateStrategy())
800 - && ObjectUtil.notEqual(BpmTaskCandidateStrategyEnum.APPROVE_USER_SELECT.getStrategy(), task.getCandidateStrategy())); 805 + && ObjectUtil.notEqual(BpmTaskCandidateStrategyEnum.APPROVE_USER_SELECT.getStrategy(), task.getCandidateStrategy()));
801 // 2.2 流程发起时要先获取当前流程的预测走向节点,发起时只校验预测的节点发起人自选审批人的审批人和抄送人是否都配置了 806 // 2.2 流程发起时要先获取当前流程的预测走向节点,发起时只校验预测的节点发起人自选审批人的审批人和抄送人是否都配置了
802 activityNodes.forEach(task -> { 807 activityNodes.forEach(task -> {
803 List<Long> assignees = startUserSelectAssignees != null ? startUserSelectAssignees.get(task.getId()) : null; 808 List<Long> assignees = startUserSelectAssignees != null ? startUserSelectAssignees.get(task.getId()) : null;