Commit 8e9cb110c759fe5cf7316bd39ceb51ba3b4fd232

Authored by YunaiV
1 parent 9f0cd04f

BPM 模型重构 7:增加任务分配规则的列表 UI 界面(增加角色的规则配置)

Showing 13 changed files with 90 additions and 18 deletions
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/BpmTaskAssignRuleController.java
... ... @@ -2,6 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition;
2 2  
3 3 import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleCreateReqVO;
4 4 import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO;
  5 +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO;
5 6 import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService;
6 7 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
7 8 import io.swagger.annotations.Api;
... ... @@ -36,7 +37,8 @@ public class BpmTaskAssignRuleController {
36 37 }
37 38  
38 39 @PutMapping("/update")
39   - public CommonResult<Boolean> updateTaskAssignRule(@Valid @RequestBody BpmTaskAssignRuleCreateReqVO reqVO) {
  40 + public CommonResult<Boolean> updateTaskAssignRule(@Valid @RequestBody BpmTaskAssignRuleUpdateReqVO reqVO) {
  41 + taskAssignRuleService.updateTaskAssignRule(reqVO);
40 42 return success(true);
41 43 }
42 44  
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/controller/definition/vo/rule/BpmTaskAssignRuleUpdateReqVO.java
1 1 package cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule;
2 2  
  3 +import lombok.Data;
  4 +
3 5 import java.util.Set;
4 6  
  7 +@Data
5 8 public class BpmTaskAssignRuleUpdateReqVO extends BpmTaskAssignRuleBaseVO {
6 9  
7 10 private Long id;
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/convert/definition/BpmTaskAssignRuleConvert.java
... ... @@ -3,6 +3,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.convert.definition;
3 3 import cn.hutool.core.collection.CollUtil;
4 4 import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleCreateReqVO;
5 5 import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO;
  6 +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO;
6 7 import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO;
7 8 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
8 9 import org.activiti.bpmn.model.UserTask;
... ... @@ -36,4 +37,6 @@ public interface BpmTaskAssignRuleConvert {
36 37  
37 38 BpmTaskAssignRuleDO convert(BpmTaskAssignRuleCreateReqVO bean);
38 39  
  40 + BpmTaskAssignRuleDO convert(BpmTaskAssignRuleUpdateReqVO bean);
  41 +
39 42 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/enums/BpmErrorCodeConstants.java
... ... @@ -42,6 +42,8 @@ public interface BpmErrorCodeConstants {
42 42  
43 43 // ========== 流程任务分配规则 1-009-006-000 ==========
44 44 ErrorCode TASK_ASSIGN_RULE_EXISTS = new ErrorCode(1009006000, "流程({}) 的任务({}) 已经存在分配规则");
  45 + ErrorCode TASK_ASSIGN_RULE_NOT_EXISTS = new ErrorCode(1009006000, "流程任务分配规则不存在");
  46 + ErrorCode TASK_UPDATE_FAIL_NOT_MODEL = new ErrorCode(1009006000, "只有流程模型的任务分配规则,才允许被修改");
45 47  
46 48 // ========== 动态表单模块 1-009-010-000 ==========
47 49 ErrorCode FORM_NOT_EXISTS = new ErrorCode(1009010000, "动态表单不存在");
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/framework/activiti/core/behavior/BpmUserTaskActivitiBehavior.java
... ... @@ -6,6 +6,7 @@ import cn.hutool.core.util.StrUtil;
6 6 import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO;
7 7 import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskAssignRuleTypeEnum;
8 8 import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService;
  9 +import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService;
9 10 import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
10 11 import lombok.Setter;
11 12 import org.activiti.bpmn.model.UserTask;
... ... @@ -29,6 +30,8 @@ public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior {
29 30  
30 31 @Setter
31 32 private BpmTaskAssignRuleService bpmTaskRuleService;
  33 + @Setter
  34 + private SysPermissionService permissionService;
32 35  
33 36 public BpmUserTaskActivitiBehavior(UserTask userTask) {
34 37 super(userTask);
... ... @@ -96,10 +99,9 @@ public class BpmUserTaskActivitiBehavior extends UserTaskActivityBehavior {
96 99 }
97 100  
98 101 private Set<Long> calculateTaskCandidateUsersByRole(TaskEntity task, BpmTaskAssignRuleDO rule) {
99   - throw new UnsupportedOperationException("暂不支持该任务规则");
  102 + return permissionService.getUserRoleIdListByRoleIds(rule.getOptions());
100 103 }
101 104  
102   -
103 105 private Set<Long> calculateTaskCandidateUsersByDept(TaskEntity task, BpmTaskAssignRuleDO rule) {
104 106 throw new UnsupportedOperationException("暂不支持该任务规则");
105 107 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/BpmTaskAssignRuleService.java
... ... @@ -2,6 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.bpm.service.definition;
2 2  
3 3 import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleCreateReqVO;
4 4 import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO;
  5 +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO;
5 6 import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO;
6 7 import org.springframework.lang.Nullable;
7 8  
... ... @@ -51,6 +52,11 @@ public interface BpmTaskAssignRuleService {
51 52 */
52 53 Long createTaskAssignRule(@Valid BpmTaskAssignRuleCreateReqVO reqVO);
53 54  
54   - // TODO 芋艿:复制任务规则
  55 + /**
  56 + * 更新任务分配规则
  57 + *
  58 + * @param reqVO 创建信息
  59 + */
  60 + void updateTaskAssignRule(@Valid BpmTaskAssignRuleUpdateReqVO reqVO);
55 61  
56 62 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/bpm/service/definition/impl/BpmTaskAssignRuleServiceImpl.java
... ... @@ -4,17 +4,16 @@ import cn.hutool.core.collection.CollUtil;
4 4 import cn.hutool.core.util.StrUtil;
5 5 import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleCreateReqVO;
6 6 import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleRespVO;
  7 +import cn.iocoder.yudao.adminserver.modules.bpm.controller.definition.vo.rule.BpmTaskAssignRuleUpdateReqVO;
7 8 import cn.iocoder.yudao.adminserver.modules.bpm.convert.definition.BpmTaskAssignRuleConvert;
8 9 import cn.iocoder.yudao.adminserver.modules.bpm.dal.dataobject.definition.BpmTaskAssignRuleDO;
9 10 import cn.iocoder.yudao.adminserver.modules.bpm.dal.mysql.definition.BpmTaskAssignRuleMapper;
10   -import cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants;
11 11 import cn.iocoder.yudao.adminserver.modules.bpm.enums.definition.BpmTaskAssignRuleTypeEnum;
12 12 import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmModelService;
13 13 import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmProcessDefinitionService;
14 14 import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmTaskAssignRuleService;
15 15 import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysRoleService;
16 16 import cn.iocoder.yudao.framework.activiti.core.util.ActivitiUtils;
17   -import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
18 17 import lombok.extern.slf4j.Slf4j;
19 18 import org.activiti.bpmn.model.BpmnModel;
20 19 import org.activiti.bpmn.model.UserTask;
... ... @@ -28,6 +27,7 @@ import java.util.List;
28 27 import java.util.Objects;
29 28 import java.util.Set;
30 29  
  30 +import static cn.iocoder.yudao.adminserver.modules.bpm.enums.BpmErrorCodeConstants.*;
31 31 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
32 32  
33 33 /**
... ... @@ -95,8 +95,7 @@ public class BpmTaskAssignRuleServiceImpl implements BpmTaskAssignRuleService {
95 95 BpmTaskAssignRuleDO existRule = taskRuleMapper.selectListByModelIdAndTaskDefinitionKey(
96 96 reqVO.getModelId(), reqVO.getTaskDefinitionKey());
97 97 if (existRule != null) {
98   - throw exception(BpmErrorCodeConstants.TASK_ASSIGN_RULE_EXISTS,
99   - reqVO.getModelId(), reqVO.getTaskDefinitionKey());
  98 + throw exception(TASK_ASSIGN_RULE_EXISTS, reqVO.getModelId(), reqVO.getTaskDefinitionKey());
100 99 }
101 100  
102 101 // 存储
... ... @@ -106,12 +105,30 @@ public class BpmTaskAssignRuleServiceImpl implements BpmTaskAssignRuleService {
106 105 return rule.getId();
107 106 }
108 107  
  108 + @Override
  109 + public void updateTaskAssignRule(BpmTaskAssignRuleUpdateReqVO reqVO) {
  110 + // 校验参数
  111 + validTaskAssignRuleOptions(reqVO.getType(), reqVO.getOptions());
  112 + // 校验是否存在
  113 + BpmTaskAssignRuleDO existRule = taskRuleMapper.selectById(reqVO.getId());
  114 + if (existRule == null) {
  115 + throw exception(TASK_ASSIGN_RULE_NOT_EXISTS);
  116 + }
  117 + // 只允许修改流程模型的规则
  118 + if (!Objects.equals(BpmTaskAssignRuleDO.PROCESS_DEFINITION_ID_NULL, existRule.getProcessDefinitionId())) {
  119 + throw exception(TASK_UPDATE_FAIL_NOT_MODEL);
  120 + }
  121 +
  122 + // 执行更新
  123 + taskRuleMapper.updateById(BpmTaskAssignRuleConvert.INSTANCE.convert(reqVO));
  124 + }
  125 +
109 126 private void validTaskAssignRuleOptions(Integer type, Set<Long> options) {
110 127 if (Objects.equals(type, BpmTaskAssignRuleTypeEnum.ROLE.getType())) {
111 128 roleService.validRoles(options);
112 129 return;
113 130 }
114   -
  131 + // TODO 其它的
115 132 }
116 133  
117 134 }
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/permission/SysPermissionController.java
... ... @@ -59,7 +59,7 @@ public class SysPermissionController {
59 59 @GetMapping("/list-user-roles")
60 60 // @RequiresPermissions("system:permission:assign-user-role")
61 61 public CommonResult<Set<Long>> listAdminRoles(@RequestParam("userId") Long userId) {
62   - return success(permissionService.listUserRoleIs(userId));
  62 + return success(permissionService.getUserRoleIdListByUserId(userId));
63 63 }
64 64  
65 65 @ApiOperation("赋予用户角色")
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/controller/user/SysUserProfileController.java
... ... @@ -65,7 +65,7 @@ public class SysUserProfileController {
65 65 SysUserDO user = userCoreService.getUser(getLoginUserId());
66 66 SysUserProfileRespVO resp = SysUserConvert.INSTANCE.convert03(user);
67 67 // 获得用户角色
68   - List<SysRoleDO> userRoles = roleService.getRolesFromCache(permissionService.listUserRoleIs(user.getId()));
  68 + List<SysRoleDO> userRoles = roleService.getRolesFromCache(permissionService.getUserRoleIdListByUserId(user.getId()));
69 69 resp.setRoles(SysUserConvert.INSTANCE.convertList(userRoles));
70 70 // 获得部门信息
71 71 if (user.getDeptId() != null) {
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/dal/mysql/permission/SysUserRoleMapper.java
... ... @@ -16,6 +16,14 @@ public interface SysUserRoleMapper extends BaseMapperX&lt;SysUserRoleDO&gt; {
16 16 return selectList(new QueryWrapper<SysUserRoleDO>().eq("user_id", userId));
17 17 }
18 18  
  19 + default List<SysUserRoleDO> selectListByRoleId(Long roleId) {
  20 + return selectList(new QueryWrapper<SysUserRoleDO>().eq("role_id", roleId));
  21 + }
  22 +
  23 + default List<SysUserRoleDO> selectListByRoleIds(Collection<Long> roleIds) {
  24 + return selectList("role_id", roleIds);
  25 + }
  26 +
19 27 default void insertList(Long userId, Collection<Long> roleIds) {
20 28 List<SysUserRoleDO> list = roleIds.stream().map(roleId -> {
21 29 SysUserRoleDO entity = new SysUserRoleDO();
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/SysPermissionService.java
... ... @@ -67,7 +67,23 @@ public interface SysPermissionService extends SecurityPermissionFrameworkService
67 67 * @param userId 用户编号
68 68 * @return 角色编号集合
69 69 */
70   - Set<Long> listUserRoleIs(Long userId);
  70 + Set<Long> getUserRoleIdListByUserId(Long userId);
  71 +
  72 + /**
  73 + * 获得拥有某个角色的用户编号集合
  74 + *
  75 + * @param roleId 角色编号
  76 + * @return 用户编号集合
  77 + */
  78 + Set<Long> getUserRoleIdListByRoleId(Long roleId);
  79 +
  80 + /**
  81 + * 获得拥有多个角色的用户编号集合
  82 + *
  83 + * @param roleIds 角色编号集合
  84 + * @return 用户编号集合
  85 + */
  86 + Set<Long> getUserRoleIdListByRoleIds(Collection<Long> roleIds);
71 87  
72 88 /**
73 89 * 设置用户角色
... ...
yudao-admin-server/src/main/java/cn/iocoder/yudao/adminserver/modules/system/service/permission/impl/SysPermissionServiceImpl.java
... ... @@ -216,12 +216,24 @@ public class SysPermissionServiceImpl implements SysPermissionService {
216 216 }
217 217  
218 218 @Override
219   - public Set<Long> listUserRoleIs(Long userId) {
  219 + public Set<Long> getUserRoleIdListByUserId(Long userId) {
220 220 return CollectionUtils.convertSet(userRoleMapper.selectListByUserId(userId),
221 221 SysUserRoleDO::getRoleId);
222 222 }
223 223  
224 224 @Override
  225 + public Set<Long> getUserRoleIdListByRoleId(Long roleId) {
  226 + return CollectionUtils.convertSet(userRoleMapper.selectListByRoleId(roleId),
  227 + SysUserRoleDO::getRoleId);
  228 + }
  229 +
  230 + @Override
  231 + public Set<Long> getUserRoleIdListByRoleIds(Collection<Long> roleIds) {
  232 + return CollectionUtils.convertSet(userRoleMapper.selectListByRoleIds(roleIds),
  233 + SysUserRoleDO::getRoleId);
  234 + }
  235 +
  236 + @Override
225 237 public void assignUserRole(Long userId, Set<Long> roleIds) {
226 238 // 获得角色拥有角色编号
227 239 Set<Long> dbRoleIds = CollectionUtils.convertSet(userRoleMapper.selectListByUserId(userId),
... ...
yudao-admin-ui/src/views/bpm/model/index.vue
... ... @@ -204,13 +204,13 @@
204 204 <el-dialog title="任务分配规则" :visible.sync="taskAssignRule.listOpen" width="800px" append-to-body>
205 205 <el-table v-loading="taskAssignRule.loading" :data="taskAssignRule.list">
206 206 <el-table-column label="任务名" align="center" prop="taskDefinitionName" width="120" fixed />
207   - <el-table-column label="任务标识" align="center" prop="taskDefinitionKey" width="300" />
208   - <el-table-column label="规则类型" align="center" prop="type">
  207 + <el-table-column label="任务标识" align="center" prop="taskDefinitionKey" width="120" show-tooltip-when-overflow />
  208 + <el-table-column label="规则类型" align="center" prop="type" width="120">
209 209 <template slot-scope="scope">
210 210 <span>{{ getDictDataLabel(DICT_TYPE.BPM_TASK_ASSIGN_RULE_TYPE, scope.row.type) }}</span>
211 211 </template>
212 212 </el-table-column>
213   - <el-table-column label="规则范围" align="center" prop="options" width="200px">
  213 + <el-table-column label="规则范围" align="center" prop="options" width="300px">
214 214 <template slot-scope="scope">
215 215 <el-tag size="medium" v-if="scope.row.options" v-for="option in scope.row.options">
216 216 {{ getAssignRuleOptionName(scope.row.type, option) }}
... ... @@ -608,11 +608,12 @@ export default {
608 608 // 设置表单
609 609 this.taskAssignRule.form = {
610 610 ...row,
611   - options: []
  611 + options: [],
  612 + roleIds: [],
612 613 };
613 614 // 将 options 赋值到对应的 roleIds 等选项
614 615 if (row.type === 10) {
615   - this.taskAssignRule.form.roleIds = row.options;
  616 + this.taskAssignRule.form.roleIds.push(...row.options);
616 617 }
617 618 this.taskAssignRule.open = true;
618 619 },
... ...