Commit 86050d411b47d8c08d46e684def21e89c2c901ea

Authored by YunaiV
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
@@ -7,6 +7,7 @@ import lombok.Getter; @@ -7,6 +7,7 @@ import lombok.Getter;
7 7
8 import java.util.Arrays; 8 import java.util.Arrays;
9 9
  10 +// TODO @puhui999:这个应该是 crm 全局的,不仅仅属于 customer 客户哈;
10 /** 11 /**
11 * CRM 客户等级 12 * CRM 客户等级
12 * 13 *
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&lt;CrmBusinessDO&gt; { @@ -26,6 +26,7 @@ public interface CrmBusinessMapper extends BaseMapperX&lt;CrmBusinessDO&gt; {
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 /**