mirror of
				https://github.com/YunaiV/ruoyi-vue-pro.git
				synced 2025-10-31 18:49:06 +08:00 
			
		
		
		
	fix: 代码审查修改
This commit is contained in:
		| @ -30,8 +30,7 @@ public enum BpmSimpleModelNodeTypeEnum implements ArrayValuable<Integer> { | |||||||
|     DELAY_TIMER_NODE(14, "延迟器", "receiveTask"), |     DELAY_TIMER_NODE(14, "延迟器", "receiveTask"), | ||||||
|     TRIGGER_NODE(15, "触发器", "serviceTask"), |     TRIGGER_NODE(15, "触发器", "serviceTask"), | ||||||
|  |  | ||||||
|     CHILD_PROCESS(20, "子流程", "callActivity"), // TODO @lesan:CHILD_PROCESS、ASYNC_CHILD_PROCESS 可以合并为一个么? |     CHILD_PROCESS(20, "子流程", "callActivity"), | ||||||
|     ASYNC_CHILD_PROCESS(21, "异步子流程", "callActivity"), |  | ||||||
|  |  | ||||||
|     // 50 ~ 条件分支 |     // 50 ~ 条件分支 | ||||||
|     CONDITION_NODE(50, "条件", "sequenceFlow"), // 用于构建流转条件的表达式 |     CONDITION_NODE(50, "条件", "sequenceFlow"), // 用于构建流转条件的表达式 | ||||||
|  | |||||||
| @ -425,33 +425,30 @@ public class BpmSimpleModelNodeVO { | |||||||
|     @Valid |     @Valid | ||||||
|     public static class ChildProcessSetting { |     public static class ChildProcessSetting { | ||||||
|  |  | ||||||
|         // TODO @lesan:calledElement => calledProcessDefinitionKey ? 这样更容易理解?不过如果一个流程多次发起,key 变了,好像会有问题? |  | ||||||
|         @Schema(description = "被调用流程", requiredMode = Schema.RequiredMode.REQUIRED, example = "xxx") |         @Schema(description = "被调用流程", requiredMode = Schema.RequiredMode.REQUIRED, example = "xxx") | ||||||
|         @NotEmpty(message = "被调用流程不能为空") |         @NotEmpty(message = "被调用流程不能为空") | ||||||
|         private String calledElement; |         private String calledProcessDefinitionKey; | ||||||
|  |  | ||||||
|         @Schema(description = "被调用流程名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "xxx") |         @Schema(description = "被调用流程名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "xxx") | ||||||
|         @NotEmpty(message = "被调用流程名称不能为空") |         @NotEmpty(message = "被调用流程名称不能为空") | ||||||
|         private String calledElementName; |         private String calledProcessDefinitionName; | ||||||
|  |  | ||||||
|         @Schema(description = "是否异步", requiredMode = Schema.RequiredMode.REQUIRED, example = "false") |         @Schema(description = "是否异步", requiredMode = Schema.RequiredMode.REQUIRED, example = "false") | ||||||
|         @NotNull(message = "是否异步不能为空") |         @NotNull(message = "是否异步不能为空") | ||||||
|         private Boolean async; |         private Boolean async; | ||||||
|  |  | ||||||
|         // TODO @lesan:inVariables |         @Schema(description = "输入参数(主->子)", example = "[]") | ||||||
|         @Schema(description = "输入参数(主->子)", requiredMode = Schema.RequiredMode.REQUIRED, example = "[]") |         private List<IOParameter> inVariables; | ||||||
|         private List<IOParameter> inVariable; |  | ||||||
|  |  | ||||||
|         // TODO @lesan:outVariables |  | ||||||
|         @Schema(description = "输出参数(子->主)", example = "[]") |         @Schema(description = "输出参数(子->主)", example = "[]") | ||||||
|         private List<IOParameter> outVariable; |         private List<IOParameter> outVariables; | ||||||
|  |  | ||||||
|         @Schema(description = "是否自动跳过子流程发起节点", example = "false") |         @Schema(description = "是否自动跳过子流程发起节点", requiredMode = Schema.RequiredMode.REQUIRED, example = "false") | ||||||
|         @NotNull(message = "是否自动跳过子流程发起节点不能为空") |         @NotNull(message = "是否自动跳过子流程发起节点不能为空") | ||||||
|         private Boolean skipStartUserNode; |         private Boolean skipStartUserNode; | ||||||
|  |  | ||||||
|         @Schema(description = "子流程发起人配置", requiredMode = Schema.RequiredMode.REQUIRED, example = "{}") |         @Schema(description = "子流程发起人配置", requiredMode = Schema.RequiredMode.REQUIRED, example = "{}") | ||||||
|         // TODO @lesan:这个应该也必须填写? |         @NotNull(message = "子流程发起人配置不能为空") | ||||||
|         private StartUserSetting startUserSetting; |         private StartUserSetting startUserSetting; | ||||||
|  |  | ||||||
|         @Schema(description = "子流程发起人配置") |         @Schema(description = "子流程发起人配置") | ||||||
| @ -467,11 +464,10 @@ public class BpmSimpleModelNodeVO { | |||||||
|             @Schema(description = "表单", example = "xxx") |             @Schema(description = "表单", example = "xxx") | ||||||
|             private String formField; |             private String formField; | ||||||
|  |  | ||||||
|             // TODO @lesan:emptyHandleType => emptyType,和 type 对上? |  | ||||||
|             @Schema(description = "当子流程发起人为空时类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") |             @Schema(description = "当子流程发起人为空时类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") | ||||||
|             @NotNull(message = "当子流程发起人为空时类型不能为空") |             @NotNull(message = "当子流程发起人为空时类型不能为空") | ||||||
|             @InEnum(BpmChildProcessStartUserEmptyTypeEnum.class) |             @InEnum(BpmChildProcessStartUserEmptyTypeEnum.class) | ||||||
|             private Integer emptyHandleType; |             private Integer emptyType; | ||||||
|  |  | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,7 +1,7 @@ | |||||||
| package cn.iocoder.yudao.module.bpm.framework.flowable.core.util; | package cn.iocoder.yudao.module.bpm.framework.flowable.core.util; | ||||||
|  |  | ||||||
|  | import cn.hutool.core.map.MapUtil; | ||||||
| import cn.hutool.core.util.ObjectUtil; | import cn.hutool.core.util.ObjectUtil; | ||||||
| import cn.hutool.core.util.StrUtil; |  | ||||||
| import cn.hutool.extra.spring.SpringUtil; | import cn.hutool.extra.spring.SpringUtil; | ||||||
| import cn.iocoder.yudao.framework.common.core.KeyValue; | import cn.iocoder.yudao.framework.common.core.KeyValue; | ||||||
| import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | import cn.iocoder.yudao.framework.common.util.json.JsonUtils; | ||||||
| @ -244,8 +244,7 @@ public class FlowableUtils { | |||||||
|         return formFieldsMap.entrySet().stream() |         return formFieldsMap.entrySet().stream() | ||||||
|                 .limit(3) |                 .limit(3) | ||||||
|                 .map(entry -> new KeyValue<>(entry.getValue().getTitle(), |                 .map(entry -> new KeyValue<>(entry.getValue().getTitle(), | ||||||
|                         // TODO @lesan: MapUtil.getStr 可以更简单? |                         MapUtil.getStr(processVariables, entry.getValue().getField(), ""))) | ||||||
|                         StrUtil.toStringOrEmpty(processVariables.getOrDefault(entry.getValue().getField(), "")))) |  | ||||||
|                 .collect(Collectors.toList()); |                 .collect(Collectors.toList()); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | |||||||
| @ -48,7 +48,7 @@ public class SimpleModelUtils { | |||||||
|                 new StartUserNodeConvert(), new ApproveNodeConvert(), new CopyNodeConvert(), new TransactorNodeConvert(), |                 new StartUserNodeConvert(), new ApproveNodeConvert(), new CopyNodeConvert(), new TransactorNodeConvert(), | ||||||
|                 new DelayTimerNodeConvert(), new TriggerNodeConvert(), |                 new DelayTimerNodeConvert(), new TriggerNodeConvert(), | ||||||
|                 new ConditionBranchNodeConvert(), new ParallelBranchNodeConvert(), new InclusiveBranchNodeConvert(), new RouteBranchNodeConvert(), |                 new ConditionBranchNodeConvert(), new ParallelBranchNodeConvert(), new InclusiveBranchNodeConvert(), new RouteBranchNodeConvert(), | ||||||
|                 new ChildProcessConvert(), new AsyncChildProcessConvert()); |                 new ChildProcessConvert()); | ||||||
|         converts.forEach(convert -> NODE_CONVERTS.put(convert.getType(), convert)); |         converts.forEach(convert -> NODE_CONVERTS.put(convert.getType(), convert)); | ||||||
|     } |     } | ||||||
|  |  | ||||||
| @ -819,46 +819,38 @@ public class SimpleModelUtils { | |||||||
|         @Override |         @Override | ||||||
|         public CallActivity convert(BpmSimpleModelNodeVO node) { |         public CallActivity convert(BpmSimpleModelNodeVO node) { | ||||||
|             BpmSimpleModelNodeVO.ChildProcessSetting childProcessSetting = node.getChildProcessSetting(); |             BpmSimpleModelNodeVO.ChildProcessSetting childProcessSetting = node.getChildProcessSetting(); | ||||||
|             List<IOParameter> inVariable = childProcessSetting.getInVariable() == null ? |             List<IOParameter> inVariables = childProcessSetting.getInVariables() == null ? | ||||||
|                     new ArrayList<>() : new ArrayList<>(childProcessSetting.getInVariable()); |                     new ArrayList<>() : new ArrayList<>(childProcessSetting.getInVariables()); | ||||||
|             CallActivity callActivity = new CallActivity(); |             CallActivity callActivity = new CallActivity(); | ||||||
|             callActivity.setId(node.getId()); |             callActivity.setId(node.getId()); | ||||||
|             callActivity.setName(node.getName()); |             callActivity.setName(node.getName()); | ||||||
|             callActivity.setCalledElementType("key"); // TODO @lesan:这里为啥是 key 哈? |             callActivity.setCalledElementType("key"); | ||||||
|             // 1. 是否异步 |             // 1. 是否异步 | ||||||
|             callActivity.setAsynchronous(node.getChildProcessSetting().getAsync()); |             if (node.getChildProcessSetting().getAsync()) { | ||||||
|  |                 // TODO @lesan: 这里目前测试没有跳过执行call activity 后面的节点 | ||||||
|             // 2. 调用的子流程 |                 callActivity.setAsynchronous(true); | ||||||
|             callActivity.setCalledElement(childProcessSetting.getCalledElement()); |  | ||||||
|             callActivity.setProcessInstanceName(childProcessSetting.getCalledElementName()); |  | ||||||
|  |  | ||||||
|             // 3. 是否自动跳过子流程发起节点 |  | ||||||
|             // TODO @lesan:貌似只有 SourceExpression 的区别,直接通过 valueOf childProcessSetting.getSkipStartUserNode()??? |  | ||||||
|             if (Boolean.TRUE.equals(childProcessSetting.getSkipStartUserNode())) { |  | ||||||
|                 IOParameter ioParameter = new IOParameter(); |  | ||||||
|                 ioParameter.setSourceExpression("true"); |  | ||||||
|                 ioParameter.setTarget(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_SKIP_START_USER_NODE); |  | ||||||
|                 inVariable.add(ioParameter); |  | ||||||
|             } else { |  | ||||||
|                 IOParameter ioParameter = new IOParameter(); |  | ||||||
|                 ioParameter.setSourceExpression("false"); |  | ||||||
|                 ioParameter.setTarget(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_SKIP_START_USER_NODE); |  | ||||||
|                 inVariable.add(ioParameter); |  | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             // 4. 主→子变量传递 |             // 2. 调用的子流程 | ||||||
|             // 4.1 【默认需要传递的一些变量】流程状态 |             callActivity.setCalledElement(childProcessSetting.getCalledProcessDefinitionKey()); | ||||||
|             // TODO @lesan:4.1 这个要不,单独一个序号,类似 3. 这个。然后下面,就是把 主→子变量传递、子→主变量传递;这样逻辑连贯点哈 |             callActivity.setProcessInstanceName(childProcessSetting.getCalledProcessDefinitionName()); | ||||||
|  |  | ||||||
|  |             // 3. 是否自动跳过子流程发起节点 | ||||||
|             IOParameter ioParameter = new IOParameter(); |             IOParameter ioParameter = new IOParameter(); | ||||||
|  |             ioParameter.setSourceExpression(childProcessSetting.getSkipStartUserNode().toString()); | ||||||
|  |             ioParameter.setTarget(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_SKIP_START_USER_NODE); | ||||||
|  |             inVariables.add(ioParameter); | ||||||
|  |  | ||||||
|  |             // 4. 【默认需要传递的一些变量】流程状态 | ||||||
|  |             ioParameter = new IOParameter(); | ||||||
|             ioParameter.setSource(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS); |             ioParameter.setSource(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS); | ||||||
|             ioParameter.setTarget(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS); |             ioParameter.setTarget(BpmnVariableConstants.PROCESS_INSTANCE_VARIABLE_STATUS); | ||||||
|             inVariable.add(ioParameter); |             inVariables.add(ioParameter); | ||||||
|             callActivity.setInParameters(inVariable); |  | ||||||
|  |  | ||||||
|             // 5. 子→主变量传递 |             // 5. 主→子变量传递、子->主变量传递 | ||||||
|             // TODO @lesan:通过 isNotEmpty 这种哈 |             callActivity.setInParameters(inVariables); | ||||||
|             if (childProcessSetting.getOutVariable() != null && !childProcessSetting.getOutVariable().isEmpty()) { |             if (ArrayUtil.isNotEmpty(childProcessSetting.getOutVariables()) && ObjUtil.notEqual(childProcessSetting.getAsync(), Boolean.TRUE)) { | ||||||
|                 callActivity.setOutParameters(childProcessSetting.getOutVariable()); |                 callActivity.setOutParameters(childProcessSetting.getOutVariables()); | ||||||
|             } |             } | ||||||
|  |  | ||||||
|             // 6. 子流程发起人配置 |             // 6. 子流程发起人配置 | ||||||
| @ -886,16 +878,6 @@ public class SimpleModelUtils { | |||||||
|  |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     private static class AsyncChildProcessConvert extends ChildProcessConvert { |  | ||||||
|  |  | ||||||
|         @Override |  | ||||||
|         public BpmSimpleModelNodeTypeEnum getType() { |  | ||||||
|             return BpmSimpleModelNodeTypeEnum.ASYNC_CHILD_PROCESS; |  | ||||||
|         } |  | ||||||
|  |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|  |  | ||||||
|     private static String buildGatewayJoinId(String id) { |     private static String buildGatewayJoinId(String id) { | ||||||
|         return id + "_join"; |         return id + "_join"; | ||||||
|     } |     } | ||||||
| @ -926,7 +908,6 @@ public class SimpleModelUtils { | |||||||
|                 || nodeType == BpmSimpleModelNodeTypeEnum.TRANSACTOR_NODE |                 || nodeType == BpmSimpleModelNodeTypeEnum.TRANSACTOR_NODE | ||||||
|                 || nodeType == BpmSimpleModelNodeTypeEnum.COPY_NODE |                 || nodeType == BpmSimpleModelNodeTypeEnum.COPY_NODE | ||||||
|                 || nodeType == BpmSimpleModelNodeTypeEnum.CHILD_PROCESS |                 || nodeType == BpmSimpleModelNodeTypeEnum.CHILD_PROCESS | ||||||
|                 || nodeType == BpmSimpleModelNodeTypeEnum.ASYNC_CHILD_PROCESS |  | ||||||
|                 || nodeType == BpmSimpleModelNodeTypeEnum.END_NODE) { |                 || nodeType == BpmSimpleModelNodeTypeEnum.END_NODE) { | ||||||
|             // 添加元素 |             // 添加元素 | ||||||
|             resultNodes.add(currentNode); |             resultNodes.add(currentNode); | ||||||
|  | |||||||
| @ -320,7 +320,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | |||||||
|         // 遍历 tasks 列表,只处理已结束的 UserTask |         // 遍历 tasks 列表,只处理已结束的 UserTask | ||||||
|         // 为什么不通过 activities 呢?因为,加签场景下,它只存在于 tasks,没有 activities,导致如果遍历 activities |         // 为什么不通过 activities 呢?因为,加签场景下,它只存在于 tasks,没有 activities,导致如果遍历 activities | ||||||
|         // 的话,它无法成为一个节点 |         // 的话,它无法成为一个节点 | ||||||
|         // TODO @芋艿:子流程只有activity,这里获取不到已结束的子流程;TODO @lesan:这个会有啥影响?微信聊? |         // TODO @芋艿:子流程只有activity,这里获取不到已结束的子流程;TODO @lesan:这个会导致timeline不会展示已结束的子流程 | ||||||
|         List<HistoricTaskInstance> endTasks = filterList(tasks, task -> task.getEndTime() != null); |         List<HistoricTaskInstance> endTasks = filterList(tasks, task -> task.getEndTime() != null); | ||||||
|         List<ActivityNode> approvalNodes = convertList(endTasks, task -> { |         List<ActivityNode> approvalNodes = convertList(endTasks, task -> { | ||||||
|             FlowElement flowNode = BpmnModelUtils.getFlowElementById(bpmnModel, task.getTaskDefinitionKey()); |             FlowElement flowNode = BpmnModelUtils.getFlowElementById(bpmnModel, task.getTaskDefinitionKey()); | ||||||
| @ -414,7 +414,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | |||||||
|             // 处理每个任务的 tasks 属性 |             // 处理每个任务的 tasks 属性 | ||||||
|             for (HistoricActivityInstance activity : taskActivities) { |             for (HistoricActivityInstance activity : taskActivities) { | ||||||
|                 HistoricTaskInstance task = taskMap.get(activity.getTaskId()); |                 HistoricTaskInstance task = taskMap.get(activity.getTaskId()); | ||||||
|                 // TODO @lesan:这里为啥 continue 哈? |                 // TODO @lesan:这里为啥 continue 哈? @芋艿:子流程的 activity 中 task 是null 下面的方法会报错 | ||||||
|                 if (task == null) { |                 if (task == null) { | ||||||
|                     continue; |                     continue; | ||||||
|                 } |                 } | ||||||
| @ -510,8 +510,7 @@ public class BpmProcessInstanceServiceImpl implements BpmProcessInstanceService | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         // 4. 子流程节点 |         // 4. 子流程节点 | ||||||
|         if (BpmSimpleModelNodeTypeEnum.CHILD_PROCESS.getType().equals(node.getType()) || |         if (BpmSimpleModelNodeTypeEnum.CHILD_PROCESS.getType().equals(node.getType())) { | ||||||
|                 BpmSimpleModelNodeTypeEnum.ASYNC_CHILD_PROCESS.getType().equals(node.getType())) { |  | ||||||
|             return activityNode; |             return activityNode; | ||||||
|         } |         } | ||||||
|         return null; |         return null; | ||||||
|  | |||||||
| @ -1230,7 +1230,7 @@ public class BpmTaskServiceImpl implements BpmTaskService { | |||||||
|                 if (userTaskElement.getId().equals(START_USER_NODE_ID) |                 if (userTaskElement.getId().equals(START_USER_NODE_ID) | ||||||
|                         && (skipStartUserNodeFlag == null // 目的:一般是“主流程”,发起人节点,自动通过审核 |                         && (skipStartUserNodeFlag == null // 目的:一般是“主流程”,发起人节点,自动通过审核 | ||||||
|                             || Boolean.TRUE.equals(skipStartUserNodeFlag)) // 目的:一般是“子流程”,发起人节点,按配置自动通过审核 |                             || Boolean.TRUE.equals(skipStartUserNodeFlag)) // 目的:一般是“子流程”,发起人节点,按配置自动通过审核 | ||||||
|                         && !Boolean.TRUE.equals(returnTaskFlag)) { // TODO @lesan:ObjUtil.notEqual(returnTaskFlag, Boolean.TRUE) 改成这个有问题么?尽量不用 ! 取反 |                         && ObjUtil.notEqual(returnTaskFlag, Boolean.TRUE)) { | ||||||
|                     getSelf().approveTask(Long.valueOf(task.getAssignee()), new BpmTaskApproveReqVO().setId(task.getId()) |                     getSelf().approveTask(Long.valueOf(task.getAssignee()), new BpmTaskApproveReqVO().setId(task.getId()) | ||||||
|                             .setReason(BpmReasonEnum.ASSIGN_START_USER_APPROVE_WHEN_SKIP_START_USER_NODE.getReason())); |                             .setReason(BpmReasonEnum.ASSIGN_START_USER_APPROVE_WHEN_SKIP_START_USER_NODE.getReason())); | ||||||
|                     return; |                     return; | ||||||
|  | |||||||
| @ -59,19 +59,19 @@ public class BpmCallActivityListener implements ExecutionListener { | |||||||
|             // 2.1 当表单值为空时 |             // 2.1 当表单值为空时 | ||||||
|             if (StrUtil.isEmpty(formFieldValue)) { |             if (StrUtil.isEmpty(formFieldValue)) { | ||||||
|                 // 2.1.1 来自主流程发起人 |                 // 2.1.1 来自主流程发起人 | ||||||
|                 if (startUserSetting.getEmptyHandleType().equals(BpmChildProcessStartUserEmptyTypeEnum.MAIN_PROCESS_START_USER.getType())) { |                 if (startUserSetting.getEmptyType().equals(BpmChildProcessStartUserEmptyTypeEnum.MAIN_PROCESS_START_USER.getType())) { | ||||||
|                     FlowableUtils.setAuthenticatedUserId(Long.parseLong(parent.getStartUserId())); |                     FlowableUtils.setAuthenticatedUserId(Long.parseLong(parent.getStartUserId())); | ||||||
|                     return; |                     return; | ||||||
|                 } |                 } | ||||||
|                 // 2.1.2 来自子流程管理员 |                 // 2.1.2 来自子流程管理员 | ||||||
|                 if (startUserSetting.getEmptyHandleType().equals(BpmChildProcessStartUserEmptyTypeEnum.CHILD_PROCESS_ADMIN.getType())) { |                 if (startUserSetting.getEmptyType().equals(BpmChildProcessStartUserEmptyTypeEnum.CHILD_PROCESS_ADMIN.getType())) { | ||||||
|                     BpmProcessDefinitionInfoDO processDefinition = processDefinitionService.getProcessDefinitionInfo(execution.getProcessDefinitionId()); |                     BpmProcessDefinitionInfoDO processDefinition = processDefinitionService.getProcessDefinitionInfo(execution.getProcessDefinitionId()); | ||||||
|                     List<Long> managerUserIds = processDefinition.getManagerUserIds(); |                     List<Long> managerUserIds = processDefinition.getManagerUserIds(); | ||||||
|                     FlowableUtils.setAuthenticatedUserId(managerUserIds.get(0)); |                     FlowableUtils.setAuthenticatedUserId(managerUserIds.get(0)); | ||||||
|                     return; |                     return; | ||||||
|                 } |                 } | ||||||
|                 // 2.1.3 来自主流程管理员 |                 // 2.1.3 来自主流程管理员 | ||||||
|                 if (startUserSetting.getEmptyHandleType().equals(BpmChildProcessStartUserEmptyTypeEnum.MAIN_PROCESS_ADMIN.getType())) { |                 if (startUserSetting.getEmptyType().equals(BpmChildProcessStartUserEmptyTypeEnum.MAIN_PROCESS_ADMIN.getType())) { | ||||||
|                     BpmProcessDefinitionInfoDO processDefinition = processDefinitionService.getProcessDefinitionInfo(parent.getProcessDefinitionId()); |                     BpmProcessDefinitionInfoDO processDefinition = processDefinitionService.getProcessDefinitionInfo(parent.getProcessDefinitionId()); | ||||||
|                     List<Long> managerUserIds = processDefinition.getManagerUserIds(); |                     List<Long> managerUserIds = processDefinition.getManagerUserIds(); | ||||||
|                     FlowableUtils.setAuthenticatedUserId(managerUserIds.get(0)); |                     FlowableUtils.setAuthenticatedUserId(managerUserIds.get(0)); | ||||||
| @ -82,7 +82,8 @@ public class BpmCallActivityListener implements ExecutionListener { | |||||||
|             try { |             try { | ||||||
|                 FlowableUtils.setAuthenticatedUserId(Long.parseLong(formFieldValue)); |                 FlowableUtils.setAuthenticatedUserId(Long.parseLong(formFieldValue)); | ||||||
|             } catch (Exception e) { |             } catch (Exception e) { | ||||||
|                 // todo @lesan:打个日志,方便排查 |                 log.error("[error][监听器:{},子流程监听器设置流程的发起人字符串转 Long 失败,字符串:{}]", | ||||||
|  |                         DELEGATE_EXPRESSION, formFieldValue); | ||||||
|                 FlowableUtils.setAuthenticatedUserId(Long.parseLong(parent.getStartUserId())); |                 FlowableUtils.setAuthenticatedUserId(Long.parseLong(parent.getStartUserId())); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Lesan
					Lesan