Commit 8e9cb110c759fe5cf7316bd39ceb51ba3b4fd232
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
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<SysUserRoleDO> { |
| 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 | }, | ... | ... |