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 7  
8 8 import java.util.Arrays;
9 9  
  10 +// TODO @puhui999:这个应该是 crm 全局的,不仅仅属于 customer 客户哈;
10 11 /**
11 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 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&lt;CrmBusinessDO&gt; {
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
... ... @@ -17,7 +17,7 @@ public class CrmPermissionUpdateReqBO {
17 17 /**
18 18 * 数据权限编号
19 19 */
20   - @NotNull(message = "Crm 数据权限编号不能为空")
  20 + @NotNull(message = "数据权限编号不能为空")
21 21 private Long id;
22 22  
23 23 /**
... ...