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