Commit 86050d411b47d8c08d46e684def21e89c2c901ea
1 parent
716b0814
code review:权限模块
Showing
23 changed files
with
57 additions
and
27 deletions
yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/customer/CrmCustomerSceneEnum.java
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/CrmBusinessTransferReqVO.java
| ... | ... | @@ -17,12 +17,13 @@ public class CrmBusinessTransferReqVO { |
| 17 | 17 | /** |
| 18 | 18 | * 新负责人的用户编号 |
| 19 | 19 | */ |
| 20 | - @NotNull(message = "新负责人的用户编号不能为空") | |
| 21 | 20 | @Schema(description = "新负责人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10430") |
| 21 | + @NotNull(message = "新负责人的用户编号不能为空") | |
| 22 | 22 | private Long newOwnerUserId; |
| 23 | 23 | |
| 24 | 24 | /** |
| 25 | 25 | * 老负责人加入团队后的权限级别。如果 null 说明移除 |
| 26 | + * | |
| 26 | 27 | * 关联 {@link CrmPermissionLevelEnum} |
| 27 | 28 | */ |
| 28 | 29 | @Schema(description = "老负责人加入团队后的权限级别", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/CrmContactTransferReqVO.java
| ... | ... | @@ -17,12 +17,13 @@ public class CrmContactTransferReqVO { |
| 17 | 17 | /** |
| 18 | 18 | * 新负责人的用户编号 |
| 19 | 19 | */ |
| 20 | - @NotNull(message = "新负责人的用户编号不能为空") | |
| 21 | 20 | @Schema(description = "新负责人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10430") |
| 21 | + @NotNull(message = "新负责人的用户编号不能为空") | |
| 22 | 22 | private Long newOwnerUserId; |
| 23 | 23 | |
| 24 | 24 | /** |
| 25 | 25 | * 老负责人加入团队后的权限级别。如果 null 说明移除 |
| 26 | + * | |
| 26 | 27 | * 关联 {@link CrmPermissionLevelEnum} |
| 27 | 28 | */ |
| 28 | 29 | @Schema(description = "老负责人加入团队后的权限级别", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/CrmContractTransferReqVO.java
| ... | ... | @@ -17,12 +17,13 @@ public class CrmContractTransferReqVO { |
| 17 | 17 | /** |
| 18 | 18 | * 新负责人的用户编号 |
| 19 | 19 | */ |
| 20 | - @NotNull(message = "新负责人的用户编号不能为空") | |
| 21 | 20 | @Schema(description = "新负责人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10430") |
| 21 | + @NotNull(message = "新负责人的用户编号不能为空") | |
| 22 | 22 | private Long newOwnerUserId; |
| 23 | 23 | |
| 24 | 24 | /** |
| 25 | 25 | * 老负责人加入团队后的权限级别。如果 null 说明移除 |
| 26 | + * | |
| 26 | 27 | * 关联 {@link CrmPermissionLevelEnum} |
| 27 | 28 | */ |
| 28 | 29 | @Schema(description = "老负责人加入团队后的权限级别", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/CrmCustomerController.java
| ... | ... | @@ -106,6 +106,7 @@ public class CrmCustomerController { |
| 106 | 106 | return success(CrmCustomerConvert.INSTANCE.convert(customer, ownerMap, userMap, deptMap)); |
| 107 | 107 | } |
| 108 | 108 | |
| 109 | + // TODO @puhui999:可以在 CrmCustomerPageReqVO 里面加个 pool 参数,为 true 时,代表来自公海客户的分页 | |
| 109 | 110 | @GetMapping("/page") |
| 110 | 111 | @Operation(summary = "获得客户分页") |
| 111 | 112 | @PreAuthorize("@ss.hasPermission('crm:customer:query')") |
| ... | ... | @@ -115,7 +116,7 @@ public class CrmCustomerController { |
| 115 | 116 | return success(PageResult.empty(pageResult.getTotal())); |
| 116 | 117 | } |
| 117 | 118 | // 拼接数据 |
| 118 | - // TODO 芋艿:需要 review 下; | |
| 119 | + // TODO @puhui999:这块的拼接逻辑,可以和 convertPage 合并下; | |
| 119 | 120 | // Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap( |
| 120 | 121 | // convertSetByFlatMap(pageResult.getList(), user -> Stream.of(NumberUtil.parseLong(user.getCreator()), user.getOwnerUserId()))); |
| 121 | 122 | // Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap( |
| ... | ... | @@ -123,6 +124,7 @@ public class CrmCustomerController { |
| 123 | 124 | return convertPage(customerService.getCustomerPage(pageVO, getLoginUserId())); |
| 124 | 125 | } |
| 125 | 126 | |
| 127 | + // TODO @puhui999: | |
| 126 | 128 | @GetMapping("/pool-page") |
| 127 | 129 | @Operation(summary = "获得公海客户分页") |
| 128 | 130 | @PreAuthorize("@ss.hasPermission('crm:customer:query')") | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/vo/CrmCustomerPageReqVO.java
| ... | ... | @@ -29,7 +29,9 @@ public class CrmCustomerPageReqVO extends PageParam { |
| 29 | 29 | private Integer source; |
| 30 | 30 | |
| 31 | 31 | /** |
| 32 | - * 场景类型,关联 {@link CrmCustomerSceneEnum} | |
| 32 | + * 场景类型 | |
| 33 | + * | |
| 34 | + * 关联 {@link CrmCustomerSceneEnum} | |
| 33 | 35 | */ |
| 34 | 36 | @Schema(description = "场景类型", example = "1") |
| 35 | 37 | private Integer sceneType; | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/vo/CrmCustomerTransferReqVO.java
| ... | ... | @@ -17,12 +17,13 @@ public class CrmCustomerTransferReqVO { |
| 17 | 17 | /** |
| 18 | 18 | * 新负责人的用户编号 |
| 19 | 19 | */ |
| 20 | - @NotNull(message = "新负责人的用户编号不能为空") | |
| 21 | 20 | @Schema(description = "新负责人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10430") |
| 21 | + @NotNull(message = "新负责人的用户编号不能为空") | |
| 22 | 22 | private Long newOwnerUserId; |
| 23 | 23 | |
| 24 | 24 | /** |
| 25 | 25 | * 老负责人加入团队后的权限级别。如果 null 说明移除 |
| 26 | + * | |
| 26 | 27 | * 关联 {@link CrmPermissionLevelEnum} |
| 27 | 28 | */ |
| 28 | 29 | @Schema(description = "老负责人加入团队后的权限级别", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/permission/CrmPermissionController.java
| ... | ... | @@ -55,16 +55,18 @@ public class CrmPermissionController { |
| 55 | 55 | @Resource |
| 56 | 56 | private PostApi postApi; |
| 57 | 57 | |
| 58 | + // TODO @puhui999:保持统一,create 噢;然后是 PostMapping | |
| 58 | 59 | @PutMapping("/add") |
| 59 | 60 | @Operation(summary = "添加团队成员") |
| 60 | 61 | @PreAuthorize("@ss.hasPermission('crm:permission:create')") |
| 61 | - @CrmPermission(bizType = CrmBizTypeEnum.CRM_PERMISSION, bizTypeValue = "#reqVO.bizType", bizId = "#reqVO.bizId" | |
| 62 | - , level = CrmPermissionLevelEnum.OWNER) | |
| 62 | + @CrmPermission(bizType = CrmBizTypeEnum.CRM_PERMISSION, bizTypeValue = "#reqVO.bizType", bizId = "#reqVO.bizId", | |
| 63 | + level = CrmPermissionLevelEnum.OWNER) | |
| 63 | 64 | public CommonResult<Boolean> addPermission(@Valid @RequestBody CrmPermissionCreateReqVO reqVO) { |
| 64 | 65 | permissionService.createPermission(CrmPermissionConvert.INSTANCE.convert(reqVO)); |
| 65 | 66 | return success(true); |
| 66 | 67 | } |
| 67 | 68 | |
| 69 | + // TODO @puhui999:领取公海客户,是不是放到客户那更合适哈? | |
| 68 | 70 | @PutMapping("/receive") |
| 69 | 71 | @Operation(summary = "领取公海数据") |
| 70 | 72 | @PreAuthorize("@ss.hasPermission('crm:permission:update')") |
| ... | ... | @@ -73,6 +75,7 @@ public class CrmPermissionController { |
| 73 | 75 | return success(true); |
| 74 | 76 | } |
| 75 | 77 | |
| 78 | + // TODO @puhui999:是不是放到客户那更合适哈? | |
| 76 | 79 | @PutMapping("/put-pool") |
| 77 | 80 | @Operation(summary = "数据放入公海") |
| 78 | 81 | @PreAuthorize("@ss.hasPermission('crm:permission:update')") |
| ... | ... | @@ -93,6 +96,7 @@ public class CrmPermissionController { |
| 93 | 96 | return success(true); |
| 94 | 97 | } |
| 95 | 98 | |
| 99 | + // TODO @puhui999:bizType 和 bizId 是不是不用啦;因为参数校验需要 bizType 和 bizId,可以先查询下,在直接调用方法;不一定都要注解哈; | |
| 96 | 100 | @DeleteMapping("/delete") |
| 97 | 101 | @Operation(summary = "移除团队成员") |
| 98 | 102 | @Parameters({ |
| ... | ... | @@ -110,9 +114,11 @@ public class CrmPermissionController { |
| 110 | 114 | return success(true); |
| 111 | 115 | } |
| 112 | 116 | |
| 117 | + // TODO @puhui999:deleteSelfPermission;尽量归成 crud 这样的操作哈; | |
| 113 | 118 | @DeleteMapping("/quit-team") |
| 114 | 119 | @Operation(summary = "退出团队") |
| 115 | 120 | @Parameters({ |
| 121 | + // TODO @puhui999:这个可以拿出来,不用包在 @Parameters 里,在只有一个参数时哈; | |
| 116 | 122 | @Parameter(name = "id", description = "团队成员编号", required = true, example = "1024") |
| 117 | 123 | }) |
| 118 | 124 | @PreAuthorize("@ss.hasPermission('crm:permission:delete')") |
| ... | ... | @@ -143,6 +149,7 @@ public class CrmPermissionController { |
| 143 | 149 | } |
| 144 | 150 | // TODO @puhui999:池子的逻辑; |
| 145 | 151 | // 判断是否是公海数据 |
| 152 | + // TODO @puhui999:这段逻辑,可以删除么? | |
| 146 | 153 | Predicate<CrmPermissionDO> filter = item -> ObjUtil.equal(item.getUserId(), CrmPermissionDO.POOL_USER_ID); |
| 147 | 154 | if (anyMatch(permission, filter)) { |
| 148 | 155 | permission.removeIf(filter); // 排除 |
| ... | ... | @@ -151,6 +158,7 @@ public class CrmPermissionController { |
| 151 | 158 | // 拼接数据 |
| 152 | 159 | List<AdminUserRespDTO> userList = adminUserApi.getUserList(convertSet(permission, CrmPermissionDO::getUserId)); |
| 153 | 160 | Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(convertSet(userList, AdminUserRespDTO::getDeptId)); |
| 161 | + // TODO @puhui999:CollectionUtils.convertSetByFlatMap() 看看可以不 | |
| 154 | 162 | Set<Long> postIds = userList.stream().flatMap(item -> item.getPostIds().stream()).collect(Collectors.toSet()); |
| 155 | 163 | Map<Long, PostRespDTO> postMap = postApi.getPostMap(postIds); |
| 156 | 164 | return success(CrmPermissionConvert.INSTANCE.convert(permission, userList, deptMap, postMap)); | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/permission/vo/CrmPermissionBaseVO.java
| ... | ... | @@ -21,13 +21,13 @@ public class CrmPermissionBaseVO { |
| 21 | 21 | @NotNull(message = "用户编号不能为空") |
| 22 | 22 | private Long userId; |
| 23 | 23 | |
| 24 | - @Schema(description = "Crm 类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | |
| 24 | + @Schema(description = "CRM 类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | |
| 25 | 25 | @InEnum(CrmBizTypeEnum.class) |
| 26 | - @NotNull(message = "Crm 类型不能为空") | |
| 26 | + @NotNull(message = "CRM 类型不能为空") | |
| 27 | 27 | private Integer bizType; |
| 28 | 28 | |
| 29 | - @Schema(description = "Crm 类型数据编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | |
| 30 | - @NotNull(message = "Crm 类型数据编号不能为空") | |
| 29 | + @Schema(description = "CRM 类型数据编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") | |
| 30 | + @NotNull(message = "CRM 类型数据编号不能为空") | |
| 31 | 31 | private Long bizId; |
| 32 | 32 | |
| 33 | 33 | @Schema(description = "权限级别", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/permission/vo/CrmPermissionRespVO.java
| ... | ... | @@ -13,12 +13,12 @@ public class CrmPermissionRespVO extends CrmPermissionBaseVO { |
| 13 | 13 | @Schema(description = "数据权限编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13563") |
| 14 | 14 | private Long id; |
| 15 | 15 | |
| 16 | - @Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "研发部") | |
| 17 | - private String deptName; | |
| 18 | - | |
| 19 | 16 | @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿") |
| 20 | 17 | private String nickname; |
| 21 | 18 | |
| 19 | + @Schema(description = "部门名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "研发部") | |
| 20 | + private String deptName; | |
| 21 | + | |
| 22 | 22 | @Schema(description = "岗位名称数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "[BOOS,经理]") |
| 23 | 23 | private Set<String> postNames; |
| 24 | 24 | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/customer/CrmCustomerConvert.java
| ... | ... | @@ -81,6 +81,7 @@ public interface CrmCustomerConvert { |
| 81 | 81 | |
| 82 | 82 | PageResult<CrmCustomerRespVO> convertPage(PageResult<CrmCustomerDO> page); |
| 83 | 83 | |
| 84 | + // TODO @puhui999:两个 convertPage 的逻辑,合并下; | |
| 84 | 85 | default PageResult<CrmCustomerRespVO> convertPage(PageResult<CrmCustomerDO> pageResult, Map<Long, CrmPermissionDO> ownerMap, |
| 85 | 86 | Map<Long, AdminUserRespDTO> userMap, Map<Long, DeptRespDTO> deptMap) { |
| 86 | 87 | PageResult<CrmCustomerRespVO> result = convertPage(pageResult); | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/permission/CrmPermissionConvert.java
| ... | ... | @@ -56,6 +56,7 @@ public interface CrmPermissionConvert { |
| 56 | 56 | } |
| 57 | 57 | |
| 58 | 58 | default List<CrmPermissionDO> convertList(CrmPermissionUpdateReqVO updateReqVO) { |
| 59 | + // TODO @puhui999:CollectionUtils.convert | |
| 59 | 60 | List<CrmPermissionDO> permissions = new ArrayList<>(); |
| 60 | 61 | updateReqVO.getIds().forEach(id -> { |
| 61 | 62 | permissions.add(new CrmPermissionDO().setId(id).setLevel(updateReqVO.getLevel())); | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/permission/CrmPermissionDO.java
| ... | ... | @@ -24,6 +24,7 @@ import lombok.*; |
| 24 | 24 | public class CrmPermissionDO extends BaseDO { |
| 25 | 25 | |
| 26 | 26 | // TODO puhui999:是不是公海的数据,就不插入了;这样方便获取公海数据鸭 |
| 27 | + // TODO @puhui999:每个数据那的负责人,我想了下,还是存储的; | |
| 27 | 28 | /** |
| 28 | 29 | * 当数据变为公海数据时,也就是数据团队成员中没有负责人的时候,将原本的负责人 userId 设置为 POOL_USER_ID 方便查询公海数据。 |
| 29 | 30 | * 也就是说每条数据到最后都有一个负责人,如果有人领取则 userId 为领取人 | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/business/CrmBusinessMapper.java
| ... | ... | @@ -26,6 +26,7 @@ public interface CrmBusinessMapper extends BaseMapperX<CrmBusinessDO> { |
| 26 | 26 | .orderByDesc(CrmBusinessDO::getId)); |
| 27 | 27 | } |
| 28 | 28 | |
| 29 | + // TODO @puhui999:selectList 噢; | |
| 29 | 30 | default List<CrmBusinessDO> selectPage(CrmBusinessExportReqVO reqVO) { |
| 30 | 31 | return selectList(new LambdaQueryWrapperX<CrmBusinessDO>() |
| 31 | 32 | .likeIfPresent(CrmBusinessDO::getName, reqVO.getName()) | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/core/annotations/CrmPermission.java
| ... | ... | @@ -12,7 +12,7 @@ import static java.lang.annotation.ElementType.ANNOTATION_TYPE; |
| 12 | 12 | import static java.lang.annotation.ElementType.METHOD; |
| 13 | 13 | |
| 14 | 14 | /** |
| 15 | - * Crm 数据操作权限校验 AOP 注解 | |
| 15 | + * CRM 数据操作权限校验 AOP 注解 | |
| 16 | 16 | * |
| 17 | 17 | * @author HUIHUI |
| 18 | 18 | */ |
| ... | ... | @@ -22,18 +22,19 @@ import static java.lang.annotation.ElementType.METHOD; |
| 22 | 22 | public @interface CrmPermission { |
| 23 | 23 | |
| 24 | 24 | /** |
| 25 | - * crm 类型 | |
| 25 | + * CRM 类型 | |
| 26 | 26 | */ |
| 27 | 27 | CrmBizTypeEnum bizType(); |
| 28 | 28 | |
| 29 | 29 | /** |
| 30 | - * crm 类型扩展 | |
| 31 | - * 用于 CrmPermissionController 团队权限校验 | |
| 30 | + * CRM 类型扩展,通过 Spring EL 表达式获取到 {@link #bizType()} | |
| 31 | + * | |
| 32 | + * 目的:用于 CrmPermissionController 团队权限校验 | |
| 32 | 33 | */ |
| 33 | 34 | String bizTypeValue() default ""; |
| 34 | 35 | |
| 35 | 36 | /** |
| 36 | - * 数据编号,通过 spring el 表达式获取 | |
| 37 | + * 数据编号,通过 Spring EL 表达式获取 | |
| 37 | 38 | * TODO 数据权限完成后去除 default "" |
| 38 | 39 | */ |
| 39 | 40 | String bizId() default ""; | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/core/aop/CrmPermissionAspect.java
| ... | ... | @@ -108,6 +108,8 @@ public class CrmPermissionAspect { |
| 108 | 108 | throw exception(CRM_PERMISSION_DENIED, crmPermission.bizType().getName()); |
| 109 | 109 | } |
| 110 | 110 | |
| 111 | + | |
| 112 | + // TODO @puhui999:这块看看能不能用 SpringExpressionUtils 工具类; | |
| 111 | 113 | private KeyValue<Long, Integer> getBizIdAndBizType(JoinPoint joinPoint, CrmPermission crmPermission) throws NoSuchMethodException { |
| 112 | 114 | Method method = getMethod(joinPoint); |
| 113 | 115 | // 1. 获取方法的参数值 | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/core/config/SpelConfig.java
| ... | ... | @@ -4,6 +4,7 @@ import org.springframework.context.annotation.Bean; |
| 4 | 4 | import org.springframework.context.annotation.Configuration; |
| 5 | 5 | import org.springframework.expression.spel.standard.SpelExpressionParser; |
| 6 | 6 | |
| 7 | +// TODO @puhui999:SpringExpressionUtils | |
| 7 | 8 | /** |
| 8 | 9 | * 注册 Spel 所需 Bean |
| 9 | 10 | * | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/enums/CrmBizTypeEnum.java
| ... | ... | @@ -17,6 +17,7 @@ import java.util.Arrays; |
| 17 | 17 | @Getter |
| 18 | 18 | public enum CrmBizTypeEnum implements IntArrayValuable { |
| 19 | 19 | |
| 20 | + // TODO @puhui999:如果类似 CrmBizPermission 的 bizType 需要为空,可以设置它是数组,参考 Telephone 的 payload | |
| 20 | 21 | CRM_PERMISSION(0, "团队"), // CrmPermissionController 中使用 |
| 21 | 22 | CRM_LEADS(1, "线索"), |
| 22 | 23 | CRM_CUSTOMER(2, "客户"), | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java
| ... | ... | @@ -103,6 +103,7 @@ public class CrmBusinessServiceImpl implements CrmBusinessService { |
| 103 | 103 | @Override |
| 104 | 104 | public PageResult<CrmBusinessDO> getBusinessPage(CrmBusinessPageReqVO pageReqVO, Long userId) { |
| 105 | 105 | // 1. 获取当前用户能看的分页数据 |
| 106 | + // TODO @puhui999:如果业务的数据量比较大,in 太多可能有性能问题噢;看看是不是搞成 join 连表了;可以微信讨论下; | |
| 106 | 107 | List<CrmPermissionDO> permissions = crmPermissionService.getPermissionListByBizTypeAndUserId( |
| 107 | 108 | CrmBizTypeEnum.CRM_BUSINESS.getType(), userId); |
| 108 | 109 | Set<Long> ids = convertSet(permissions, CrmPermissionDO::getBizId); | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerServiceImpl.java
| ... | ... | @@ -100,6 +100,7 @@ public class CrmCustomerServiceImpl implements CrmCustomerService { |
| 100 | 100 | return customerMapper.selectPage(pageReqVO, Collections.emptyList()); |
| 101 | 101 | } |
| 102 | 102 | // 1.2 获取当前用户能看的分页数据 |
| 103 | + // TODO @puhui999:如果业务的数据量比较大,in 太多可能有性能问题噢;看看是不是搞成 join 连表了;可以微信讨论下; | |
| 103 | 104 | List<CrmPermissionDO> permissions = crmPermissionService.getPermissionListByBizTypeAndUserId( |
| 104 | 105 | CrmBizTypeEnum.CRM_CUSTOMER.getType(), userId); |
| 105 | 106 | // 1.3 TODO 场景数据过滤 | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java
| ... | ... | @@ -24,8 +24,9 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU |
| 24 | 24 | import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*; |
| 25 | 25 | import static cn.iocoder.yudao.module.crm.framework.enums.CrmPermissionLevelEnum.isOwner; |
| 26 | 26 | |
| 27 | +// TODO @puhui999:尽量规避用“团队”这个词哈;这个只是我们给前端展示用的; | |
| 27 | 28 | /** |
| 28 | - * crm 数据权限 Service 接口实现类 | |
| 29 | + * CRM 数据权限 Service 接口实现类 | |
| 29 | 30 | * |
| 30 | 31 | * @author HUIHUI |
| 31 | 32 | */ |
| ... | ... | @@ -117,6 +118,7 @@ public class CrmPermissionServiceImpl implements CrmPermissionService { |
| 117 | 118 | // 1.2 校验新负责人是否存在 |
| 118 | 119 | adminUserApi.validateUserList(Collections.singletonList(transferReqBO.getNewOwnerUserId())); |
| 119 | 120 | |
| 121 | + // TODO @puhui999:2. 和 2.1 合并成 2;2.2 单独成 3;说白了,就是 2. 修改新负责人的权限;3. 修改老负责人的权限;这样整体注释会简洁一点,也清晰一点; | |
| 120 | 122 | // 2. 权限转移 |
| 121 | 123 | List<CrmPermissionDO> permissions = crmPermissionMapper.selectByBizTypeAndBizId( |
| 122 | 124 | transferReqBO.getBizType(), transferReqBO.getBizId()); // 获取所有团队成员 |
| ... | ... | @@ -127,7 +129,6 @@ public class CrmPermissionServiceImpl implements CrmPermissionService { |
| 127 | 129 | crmPermissionMapper.insert(new CrmPermissionDO().setBizType(transferReqBO.getBizType()) |
| 128 | 130 | .setBizId(transferReqBO.getBizId()).setUserId(transferReqBO.getNewOwnerUserId()) |
| 129 | 131 | .setLevel(CrmPermissionLevelEnum.OWNER.getLevel())); |
| 130 | - | |
| 131 | 132 | } else { // 存在则修改权限级别 |
| 132 | 133 | crmPermissionMapper.updateById(new CrmPermissionDO().setId(permission.getId()) |
| 133 | 134 | .setLevel(CrmPermissionLevelEnum.OWNER.getLevel())); |
| ... | ... | @@ -138,7 +139,7 @@ public class CrmPermissionServiceImpl implements CrmPermissionService { |
| 138 | 139 | .setLevel(transferReqBO.getOldOwnerPermissionLevel())); // 设置加入团队后的级别 |
| 139 | 140 | return; |
| 140 | 141 | } |
| 141 | - crmPermissionMapper.deleteById(oldPermission.getId()); // 移除 | |
| 142 | + crmPermissionMapper.deleteById(oldPermission.getId()); | |
| 142 | 143 | } |
| 143 | 144 | |
| 144 | 145 | @Override |
| ... | ... | @@ -164,7 +165,7 @@ public class CrmPermissionServiceImpl implements CrmPermissionService { |
| 164 | 165 | if (permission == null) { // 不存在则模块数据也不存在 |
| 165 | 166 | throw exception(CRM_PERMISSION_MODEL_NOT_EXISTS, CrmBizTypeEnum.getNameByType(bizType)); |
| 166 | 167 | } |
| 167 | - | |
| 168 | + // 更新 | |
| 168 | 169 | crmPermissionMapper.updateById(new CrmPermissionDO().setId(permission.getId()).setUserId(CrmPermissionDO.POOL_USER_ID)); |
| 169 | 170 | } |
| 170 | 171 | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/permission/bo/CrmPermissionTransferReqBO.java
| ... | ... | @@ -22,7 +22,7 @@ public class CrmPermissionTransferReqBO { |
| 22 | 22 | private Long userId; |
| 23 | 23 | |
| 24 | 24 | /** |
| 25 | - * Crm 类型 | |
| 25 | + * CRM 类型 | |
| 26 | 26 | */ |
| 27 | 27 | @NotNull(message = "Crm 类型不能为空") |
| 28 | 28 | @InEnum(CrmBizTypeEnum.class) |
| ... | ... | @@ -30,7 +30,7 @@ public class CrmPermissionTransferReqBO { |
| 30 | 30 | /** |
| 31 | 31 | * 数据编号 |
| 32 | 32 | */ |
| 33 | - @NotNull(message = "Crm 数据编号不能为空") | |
| 33 | + @NotNull(message = "CRM 数据编号不能为空") | |
| 34 | 34 | private Long bizId; |
| 35 | 35 | |
| 36 | 36 | /** |
| ... | ... | @@ -41,6 +41,7 @@ public class CrmPermissionTransferReqBO { |
| 41 | 41 | |
| 42 | 42 | /** |
| 43 | 43 | * 老负责人加入团队后的权限级别。如果 null 说明移除 |
| 44 | + * | |
| 44 | 45 | * 关联 {@link CrmPermissionLevelEnum} |
| 45 | 46 | */ |
| 46 | 47 | private Integer oldOwnerPermissionLevel; | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/permission/bo/CrmPermissionUpdateReqBO.java