From 6ad21a9c40b843e445b28ea6e0ddd8cda4bf5e7d Mon Sep 17 00:00:00 2001 From: konbai <1527468660@qq.com> Date: Sun, 24 Apr 2022 16:01:03 +0800 Subject: [PATCH] =?UTF-8?q?fix=20--=20=E9=87=8D=E5=86=99=E5=89=8D=E7=AB=AF?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E5=AE=A1=E6=89=B9=E7=94=A8=E6=88=B7=E6=A8=A1?= =?UTF-8?q?=E5=9D=97=EF=BC=8C=E6=B7=BB=E5=8A=A0=E5=80=99=E9=80=89=E7=BB=84?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=88=E7=9B=AE=E5=89=8D=E6=94=AF=E6=8C=81?= =?UTF-8?q?"=E8=A7=92=E8=89=B2"=E5=92=8C"=E9=83=A8=E9=97=A8"=EF=BC=89?= =?UTF-8?q?=E3=80=82=E6=B5=81=E7=A8=8B=E5=9B=BE=E4=B8=8D=E5=85=BC=E5=AE=B9?= =?UTF-8?q?=E4=B9=8B=E5=89=8D=E7=89=88=E6=9C=AC=EF=BC=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/ProcessConstants.java | 5 - .../common/constant/TaskConstants.java | 23 + .../com/ruoyi/flowable/utils/TaskUtils.java | 41 ++ .../service/impl/WfInstanceServiceImpl.java | 15 +- .../service/impl/WfProcessServiceImpl.java | 6 +- .../service/impl/WfTaskServiceImpl.java | 3 +- ruoyi-ui/src/components/TreeSelect/index.vue | 306 +++++++++++ .../descriptor/flowableDescriptor.json | 10 + .../package/penal/task/ElementTask.vue | 10 +- .../penal/task/task-components/TagSelect.vue | 73 --- .../penal/task/task-components/UserTask.vue | 486 ++++++++++-------- 11 files changed, 668 insertions(+), 310 deletions(-) create mode 100644 ruoyi-flowable/src/main/java/com/ruoyi/flowable/common/constant/TaskConstants.java create mode 100644 ruoyi-flowable/src/main/java/com/ruoyi/flowable/utils/TaskUtils.java create mode 100644 ruoyi-ui/src/components/TreeSelect/index.vue delete mode 100644 ruoyi-ui/src/plugins/package/penal/task/task-components/TagSelect.vue diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/common/constant/ProcessConstants.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/common/constant/ProcessConstants.java index 2b818051..14a2c66d 100644 --- a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/common/constant/ProcessConstants.java +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/common/constant/ProcessConstants.java @@ -60,11 +60,6 @@ public class ProcessConstants { */ public static final String PROCESS_CUSTOM_USER_TYPE = "userType"; - /** - * 初始化人员 - */ - public static final String PROCESS_INITIATOR = "INITIATOR"; - /** * 流程跳过 diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/common/constant/TaskConstants.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/common/constant/TaskConstants.java new file mode 100644 index 00000000..bf5e6d49 --- /dev/null +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/common/constant/TaskConstants.java @@ -0,0 +1,23 @@ +package com.ruoyi.flowable.common.constant; + +/** + * @author konbai + * @createTime 2022/4/24 13:24 + */ +public class TaskConstants { + + /** + * 流程发起人 + */ + public static final String PROCESS_INITIATOR = "initiator"; + + /** + * 角色候选组前缀 + */ + public static final String ROLE_GROUP_PREFIX = "ROLE"; + + /** + * 部门候选组前缀 + */ + public static final String DEPT_GROUP_PREFIX = "DEPT"; +} diff --git a/ruoyi-flowable/src/main/java/com/ruoyi/flowable/utils/TaskUtils.java b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/utils/TaskUtils.java new file mode 100644 index 00000000..838215f3 --- /dev/null +++ b/ruoyi-flowable/src/main/java/com/ruoyi/flowable/utils/TaskUtils.java @@ -0,0 +1,41 @@ +package com.ruoyi.flowable.utils; + +import cn.hutool.core.util.ObjectUtil; +import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.helper.LoginHelper; +import com.ruoyi.flowable.common.constant.TaskConstants; + +import java.util.ArrayList; +import java.util.List; + +/** + * 工作流任务工具类 + * + * @author konbai + * @createTime 2022/4/24 12:42 + */ +public class TaskUtils { + + public static String getUserId() { + return String.valueOf(LoginHelper.getUserId()); + } + + /** + * 获取用户组信息 + * + * @return candidateGroup + */ + public static List getCandidateGroup() { + List list = new ArrayList<>(); + LoginUser user = LoginHelper.getLoginUser(); + if (ObjectUtil.isNotNull(user)) { + if (ObjectUtil.isNotEmpty(user.getRoles())) { + user.getRoles().forEach(role -> list.add(TaskConstants.ROLE_GROUP_PREFIX + role.getRoleId())); + } + if (ObjectUtil.isNotNull(user.getDeptId())) { + list.add(TaskConstants.DEPT_GROUP_PREFIX + user.getDeptId()); + } + } + return list; + } +} diff --git a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfInstanceServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfInstanceServiceImpl.java index 9c887ab8..8da38c64 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfInstanceServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfInstanceServiceImpl.java @@ -5,12 +5,15 @@ import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.BetweenFormatter; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.ObjectUtil; +import com.ruoyi.common.core.domain.entity.SysDept; import com.ruoyi.common.core.domain.entity.SysRole; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.utils.JsonUtils; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.flowable.common.constant.TaskConstants; import com.ruoyi.flowable.factory.FlowServiceFactory; +import com.ruoyi.system.service.ISysDeptService; import com.ruoyi.system.service.ISysRoleService; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.workflow.domain.bo.WfTaskBo; @@ -44,6 +47,7 @@ public class WfInstanceServiceImpl extends FlowServiceFactory implements IWfInst private final IWfDeployFormService deployFormService; private final ISysUserService userService; private final ISysRoleService roleService; + private final ISysDeptService deptService; /** * 结束流程实例 @@ -153,8 +157,15 @@ public class WfInstanceServiceImpl extends FlowServiceFactory implements IWfInst stringBuilder.append(user.getNickName()).append(","); } if (StringUtils.isNotBlank(identityLink.getGroupId())) { - SysRole role = roleService.selectRoleById(Long.parseLong(identityLink.getGroupId())); - stringBuilder.append(role.getRoleName()).append(","); + if (identityLink.getGroupId().startsWith(TaskConstants.ROLE_GROUP_PREFIX)) { + Long roleId = Long.parseLong(StringUtils.stripStart(identityLink.getGroupId(), TaskConstants.ROLE_GROUP_PREFIX)); + SysRole role = roleService.selectRoleById(roleId); + stringBuilder.append(role.getRoleName()).append(","); + } else if (identityLink.getGroupId().startsWith(TaskConstants.DEPT_GROUP_PREFIX)) { + Long deptId = Long.parseLong(StringUtils.stripStart(identityLink.getGroupId(), TaskConstants.DEPT_GROUP_PREFIX)); + SysDept dept = deptService.selectDeptById(deptId); + stringBuilder.append(dept.getDeptName()).append(","); + } } } } diff --git a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfProcessServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfProcessServiceImpl.java index d3897475..2bc1f2c0 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfProcessServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfProcessServiceImpl.java @@ -12,8 +12,9 @@ import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.flowable.common.constant.ProcessConstants; +import com.ruoyi.flowable.common.constant.TaskConstants; import com.ruoyi.flowable.factory.FlowServiceFactory; +import com.ruoyi.flowable.utils.TaskUtils; import com.ruoyi.system.service.ISysUserService; import com.ruoyi.workflow.domain.vo.WfDefinitionVo; import com.ruoyi.workflow.domain.vo.WfTaskVo; @@ -201,6 +202,7 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce .active() .includeProcessVariables() .taskCandidateOrAssigned(userId.toString()) + .taskCandidateGroupIn(TaskUtils.getCandidateGroup()) .orderByTaskCreateTime().desc(); page.setTotal(taskQuery.count()); int offset = pageQuery.getPageSize() * (pageQuery.getPageNum() - 1); @@ -305,7 +307,7 @@ public class WfProcessServiceImpl extends FlowServiceFactory implements IWfProce private void buildProcessVariables(Map variables) { String userIdStr = LoginHelper.getUserId().toString(); identityService.setAuthenticatedUserId(userIdStr); - variables.put(ProcessConstants.PROCESS_INITIATOR, userIdStr); + variables.put(TaskConstants.PROCESS_INITIATOR, userIdStr); } diff --git a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfTaskServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfTaskServiceImpl.java index 3d01b9a3..0b4da10e 100644 --- a/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfTaskServiceImpl.java +++ b/ruoyi-system/src/main/java/com/ruoyi/workflow/service/impl/WfTaskServiceImpl.java @@ -14,6 +14,7 @@ import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.flowable.common.constant.ProcessConstants; +import com.ruoyi.flowable.common.constant.TaskConstants; import com.ruoyi.flowable.common.enums.FlowComment; import com.ruoyi.flowable.factory.FlowServiceFactory; import com.ruoyi.flowable.flow.CustomProcessDiagramGenerator; @@ -840,7 +841,7 @@ public class WfTaskServiceImpl extends FlowServiceFactory implements IWfTaskServ // 给第一步申请人节点设置任务执行人和意见 todo:第一个节点不设置为申请人节点有点问题? Task task = taskService.createTaskQuery().processInstanceId(processInstance.getProcessInstanceId()).singleResult(); if (Objects.nonNull(task)) { - String userIdStr = (String) variables.get(ProcessConstants.PROCESS_INITIATOR); + String userIdStr = (String) variables.get(TaskConstants.PROCESS_INITIATOR); if (!StrUtil.equalsAny(task.getAssignee(), userIdStr)) { throw new ServiceException("数据验证失败,该工作流第一个用户任务的指派人并非当前用户,不能执行该操作!"); } diff --git a/ruoyi-ui/src/components/TreeSelect/index.vue b/ruoyi-ui/src/components/TreeSelect/index.vue new file mode 100644 index 00000000..2b49c9af --- /dev/null +++ b/ruoyi-ui/src/components/TreeSelect/index.vue @@ -0,0 +1,306 @@ + + + + + diff --git a/ruoyi-ui/src/plugins/package/designer/plugins/descriptor/flowableDescriptor.json b/ruoyi-ui/src/plugins/package/designer/plugins/descriptor/flowableDescriptor.json index 4aa345e7..a9bca641 100644 --- a/ruoyi-ui/src/plugins/package/designer/plugins/descriptor/flowableDescriptor.json +++ b/ruoyi-ui/src/plugins/package/designer/plugins/descriptor/flowableDescriptor.json @@ -344,6 +344,11 @@ "name": "Assignable", "extends": [ "bpmn:UserTask" ], "properties": [ + { + "name": "dataType", + "isAttr": true, + "type": "String" + }, { "name": "assignee", "isAttr": true, @@ -364,6 +369,11 @@ "isAttr": true, "type": "String" }, + { + "name": "text", + "isAttr": true, + "type": "String" + }, { "name": "dueDate", "isAttr": true, diff --git a/ruoyi-ui/src/plugins/package/penal/task/ElementTask.vue b/ruoyi-ui/src/plugins/package/penal/task/ElementTask.vue index fd454ecc..d1ba6687 100644 --- a/ruoyi-ui/src/plugins/package/penal/task/ElementTask.vue +++ b/ruoyi-ui/src/plugins/package/penal/task/ElementTask.vue @@ -1,11 +1,11 @@