From f6a9dfb7a3d020b1859d9098dcb637f0391c984d Mon Sep 17 00:00:00 2001 From: tony <846249920@qq.com> Date: Thu, 22 Apr 2021 22:16:13 +0800 Subject: [PATCH] =?UTF-8?q?feat(=E4=BC=9A=E7=AD=BE):=20=E4=BC=9A=E7=AD=BE?= =?UTF-8?q?=E4=BA=BA=E5=91=98=E5=8A=A8=E6=80=81=E6=96=B0=E5=A2=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/ProcessConstants.java | 10 +++ .../impl/FlowDefinitionServiceImpl.java | 3 - .../service/impl/FlowTaskServiceImpl.java | 64 +++++++++++-------- .../src/views/flowable/task/record/index.vue | 12 ++-- 4 files changed, 53 insertions(+), 36 deletions(-) diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/constant/ProcessConstants.java b/ruoyi-common/src/main/java/com/ruoyi/common/constant/ProcessConstants.java index 59cee4c..60448f2 100644 --- a/ruoyi-common/src/main/java/com/ruoyi/common/constant/ProcessConstants.java +++ b/ruoyi-common/src/main/java/com/ruoyi/common/constant/ProcessConstants.java @@ -35,11 +35,21 @@ public class ProcessConstants { */ public static final String PROCESS_APPROVAL = "approval"; + /** + * 会签人员 + */ + public static final String PROCESS_MULTI_INSTANCE_USER = "userList"; + /** * nameapace */ public static final String NAMASPASE = "http://flowable.org/bpmn"; + /** + * 会签节点 + */ + public static final String PROCESS_MULTI_INSTANCE = "multiInstance"; + /** * 自定义属性 dataType */ diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowDefinitionServiceImpl.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowDefinitionServiceImpl.java index 239d50b..2ebe458 100644 --- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowDefinitionServiceImpl.java +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowDefinitionServiceImpl.java @@ -172,9 +172,6 @@ public class FlowDefinitionServiceImpl extends FlowServiceFactory implements IFl // 设置流程发起人Id到流程中 Long userId = SecurityUtils.getLoginUser().getUser().getUserId(); identityService.setAuthenticatedUserId(userId.toString()); - List users = sysUserService.selectUserList(new SysUser()); - List collect = users.stream().map(sysUser -> sysUser.getUserId().toString()).collect(Collectors.toList()); - variables.put("userList", collect); variables.put(ProcessConstants.PROCESS_INITIATOR, userId); ProcessInstance processInstance = runtimeService.startProcessInstanceById(procDefId, variables); // 给第一步申请人节点设置任务执行人和意见 todo:第一个节点不设置为申请人节点有点问题? diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowTaskServiceImpl.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowTaskServiceImpl.java index 2f62870..db95cc3 100644 --- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowTaskServiceImpl.java +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/service/impl/FlowTaskServiceImpl.java @@ -877,33 +877,45 @@ public class FlowTaskServiceImpl extends FlowServiceFactory implements IFlowTask List nextUserTask = FindNextNodeUtil.getNextUserTasks(repositoryService, task, new HashMap<>()); if (CollectionUtils.isNotEmpty(nextUserTask)) { for (UserTask userTask : nextUserTask) { - MultiInstanceLoopCharacteristics characteristics = userTask.getLoopCharacteristics(); - String dataType = userTask.getAttributeValue(ProcessConstants.NAMASPASE, ProcessConstants.PROCESS_CUSTOM_DATA_TYPE); - String userType = userTask.getAttributeValue(ProcessConstants.NAMASPASE, ProcessConstants.PROCESS_CUSTOM_USER_TYPE); - - if (ProcessConstants.DATA_TYPE.equals(dataType)) { - // 指定单个人员 - if (ProcessConstants.USER_TYPE_ASSIGNEE.equals(userType)) { - List list = sysUserService.selectUserList(new SysUser()); - - flowNextDto.setVars(ProcessConstants.PROCESS_APPROVAL); - flowNextDto.setType(ProcessConstants.USER_TYPE_ASSIGNEE); - flowNextDto.setUserList(list); - } - // 候选人员(多个) - if (ProcessConstants.USER_TYPE_USERS.equals(userType)) { - List list = sysUserService.selectUserList(new SysUser()); + MultiInstanceLoopCharacteristics multiInstance = userTask.getLoopCharacteristics(); + // 会签节点 + if (Objects.nonNull(multiInstance)) { + List list = sysUserService.selectUserList(new SysUser()); + + flowNextDto.setVars(ProcessConstants.PROCESS_MULTI_INSTANCE_USER); + flowNextDto.setType(ProcessConstants.PROCESS_MULTI_INSTANCE); + flowNextDto.setUserList(list); + } else { + + // 读取自定义节点属性 判断是否是否需要动态指定任务接收人员、组 + String dataType = userTask.getAttributeValue(ProcessConstants.NAMASPASE, ProcessConstants.PROCESS_CUSTOM_DATA_TYPE); + String userType = userTask.getAttributeValue(ProcessConstants.NAMASPASE, ProcessConstants.PROCESS_CUSTOM_USER_TYPE); + + if (ProcessConstants.DATA_TYPE.equals(dataType)) { + // 指定单个人员 + if (ProcessConstants.USER_TYPE_ASSIGNEE.equals(userType)) { + List list = sysUserService.selectUserList(new SysUser()); + + flowNextDto.setVars(ProcessConstants.PROCESS_APPROVAL); + flowNextDto.setType(ProcessConstants.USER_TYPE_ASSIGNEE); + flowNextDto.setUserList(list); + } + // 候选人员(多个) + if (ProcessConstants.USER_TYPE_USERS.equals(userType)) { + List list = sysUserService.selectUserList(new SysUser()); - flowNextDto.setVars(ProcessConstants.PROCESS_APPROVAL); - flowNextDto.setType(ProcessConstants.USER_TYPE_USERS); - flowNextDto.setUserList(list); - } - // 候选组 - if (ProcessConstants.USER_TYPE_ROUPS.equals(userType)) { - List sysRoles = sysRoleService.selectRoleAll(); - flowNextDto.setVars(ProcessConstants.PROCESS_APPROVAL); - flowNextDto.setType(ProcessConstants.USER_TYPE_ROUPS); - flowNextDto.setRoleList(sysRoles); + flowNextDto.setVars(ProcessConstants.PROCESS_APPROVAL); + flowNextDto.setType(ProcessConstants.USER_TYPE_USERS); + flowNextDto.setUserList(list); + } + // 候选组 + if (ProcessConstants.USER_TYPE_ROUPS.equals(userType)) { + List sysRoles = sysRoleService.selectRoleAll(); + + flowNextDto.setVars(ProcessConstants.PROCESS_APPROVAL); + flowNextDto.setType(ProcessConstants.USER_TYPE_ROUPS); + flowNextDto.setRoleList(sysRoles); + } } } } diff --git a/ruoyi-ui/src/views/flowable/task/record/index.vue b/ruoyi-ui/src/views/flowable/task/record/index.vue index 42c5f6b..6ffdc9b 100644 --- a/ruoyi-ui/src/views/flowable/task/record/index.vue +++ b/ruoyi-ui/src/views/flowable/task/record/index.vue @@ -204,11 +204,6 @@ export default { this.finished = this.$route.query && this.$route.query.finished }, - // watch:{ - // $route(){ - // this.finished = this.$route.query && this.$route.query.finished - // } - // }, mounted() { // // 表单数据回填,模拟异步请求场景 // setTimeout(() => { @@ -306,13 +301,16 @@ export default { } else if (data.type === 'candidateUsers') { this.userDataList = res.data.userList; this.taskForm.multiple = true; - } else { - res.data.roleList.forEach(role =>{ + } else if (data.type === 'candidateGroups') { + res.data.roleList.forEach(role => { role.userId = role.roleId; role.nickName = role.roleName; }) this.userDataList = res.data.roleList; this.taskForm.multiple = false; + } else if (data.type === 'multiInstance') { + this.userDataList = res.data.userList; + this.taskForm.multiple = true; } this.taskForm.sendUserShow = true; }