Commit 67ac11b56c242df634a000315c8265e43fb2552a

Authored by YunaiV
1 parent f73b8575

code review:crm 客户转移

Showing 17 changed files with 23 additions and 53 deletions
yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java
... ... @@ -11,7 +11,7 @@ public interface ErrorCodeConstants {
11 11  
12 12 // ========== 合同管理 1-020-000-000 ==========
13 13 ErrorCode CONTRACT_NOT_EXISTS = new ErrorCode(1_020_000_000, "合同不存在");
14   - ErrorCode CONTRACT_TRANSFER_FAIL_PERMISSION_DENIED = new ErrorCode(1_020_000_001, "合同转移失败,原因:没有转移权限");
  14 + ErrorCode CONTRACT_TRANSFER_FAIL_PERMISSION_DENIED = new ErrorCode(1_020_000_001, "合同转移失败,原因:没有转移权限"); // TODO @puhui999:这个搞成 “合同操作失败,原因:没有权限”
15 15 ErrorCode CONTRACT_TRANSFER_FAIL_OWNER_USER_NOT_EXISTS = new ErrorCode(1_020_000_002, "合同转移失败,原因:负责人不存在");
16 16  
17 17 // ========== 线索管理 1-020-001-000 ==========
... ... @@ -19,7 +19,7 @@ public interface ErrorCodeConstants {
19 19  
20 20 // ========== 商机管理 1-020-002-000 ==========
21 21 ErrorCode BUSINESS_NOT_EXISTS = new ErrorCode(1_020_002_000, "商机不存在");
22   - ErrorCode BUSINESS_TRANSFER_FAIL_PERMISSION_DENIED = new ErrorCode(1_020_002_001, "商机转移失败,原因:没有转移权限");
  22 + ErrorCode BUSINESS_TRANSFER_FAIL_PERMISSION_DENIED = new ErrorCode(1_020_002_001, "商机转移失败,原因:没有转移权限"); // TODO @puhui999:这个搞成 “商机操作失败,原因:没有权限”
23 23 ErrorCode BUSINESS_TRANSFER_FAIL_OWNER_USER_NOT_EXISTS = new ErrorCode(1_020_002_002, "商机转移失败,原因:负责人不存在");
24 24  
25 25 // TODO @lilleo:商机状态、商机类型,都单独错误码段
... ... @@ -29,7 +29,7 @@ public interface ErrorCodeConstants {
29 29  
30 30 // ========== 联系人管理 1-020-003-000 ==========
31 31 ErrorCode CONTACT_NOT_EXISTS = new ErrorCode(1_020_003_000, "联系人不存在");
32   - ErrorCode CONTACT_TRANSFER_FAIL_PERMISSION_DENIED = new ErrorCode(1_020_003_001, "联系人转移失败,原因:没有转移权限");
  32 + ErrorCode CONTACT_TRANSFER_FAIL_PERMISSION_DENIED = new ErrorCode(1_020_003_001, "联系人转移失败,原因:没有转移权限"); // TODO @puhui999:这个搞成 “联系人操作失败,原因:没有权限”
33 33 ErrorCode CONTACT_TRANSFER_FAIL_OWNER_USER_NOT_EXISTS = new ErrorCode(1_020_003_002, "联系人转移失败,原因:负责人不存在");
34 34  
35 35 // TODO @liuhongfeng:错误码分段;
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/CrmBusinessCreateReqVO.java
... ... @@ -5,21 +5,12 @@ import lombok.Data;
5 5 import lombok.EqualsAndHashCode;
6 6 import lombok.ToString;
7 7  
8   -import java.util.Set;
9   -
10 8 @Schema(description = "管理后台 - 商机创建 Request VO")
11 9 @Data
12 10 @EqualsAndHashCode(callSuper = true)
13 11 @ToString(callSuper = true)
14 12 public class CrmBusinessCreateReqVO extends CrmBusinessBaseVO {
15 13  
16   - @Schema(description = "只读权限的用户编号数组")
17   - private Set<Long> roUserIds;
18   -
19   - @Schema(description = "读写权限的用户编号数组")
20   - private Set<Long> rwUserIds;
21   -
22   -
23 14 // TODO @ljileo:新建的时候,应该可以传递添加的产品;
24 15  
25 16 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/CrmBusinessTransferReqVO.java
... ... @@ -15,6 +15,6 @@ public class CrmBusinessTransferReqVO {
15 15  
16 16 @Schema(description = "新负责人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10430")
17 17 @NotNull(message = "新负责人的用户编号不能为空")
18   - private Long ownerUserId; // 新的负责人
  18 + private Long ownerUserId;
19 19  
20 20 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/vo/CrmBusinessUpdateReqVO.java
... ... @@ -6,7 +6,6 @@ import lombok.EqualsAndHashCode;
6 6 import lombok.ToString;
7 7  
8 8 import javax.validation.constraints.NotNull;
9   -import java.util.Set;
10 9  
11 10 @Schema(description = "管理后台 - 商机更新 Request VO")
12 11 @Data
... ... @@ -18,13 +17,6 @@ public class CrmBusinessUpdateReqVO extends CrmBusinessBaseVO {
18 17 @NotNull(message = "主键不能为空")
19 18 private Long id;
20 19  
21   - @Schema(description = "只读权限的用户编号数组")
22   - private Set<Long> roUserIds;
23   -
24   - @Schema(description = "读写权限的用户编号数组")
25   - private Set<Long> rwUserIds;
26   -
27   -
28 20 // TODO @ljileo:修改的时候,应该可以传递添加的产品;
29 21  
30 22 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/ContactUpdateReqVO.java
... ... @@ -5,8 +5,6 @@ import lombok.Data;
5 5 import lombok.EqualsAndHashCode;
6 6 import lombok.ToString;
7 7  
8   -import java.util.Set;
9   -
10 8 @Schema(description = "管理后台 - crm联系人更新 Request VO")
11 9 @Data
12 10 @EqualsAndHashCode(callSuper = true)
... ... @@ -16,10 +14,4 @@ public class ContactUpdateReqVO extends ContactBaseVO {
16 14 @Schema(description = "主键", example = "23210")
17 15 private Long id;
18 16  
19   - @Schema(description = "只读权限的用户编号数组")
20   - private Set<Long> roUserIds;
21   -
22   - @Schema(description = "读写权限的用户编号数组")
23   - private Set<Long> rwUserIds;
24   -
25 17 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contact/vo/CrmContactTransferReqVO.java
... ... @@ -15,6 +15,6 @@ public class CrmContactTransferReqVO {
15 15  
16 16 @Schema(description = "新负责人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10430")
17 17 @NotNull(message = "新负责人的用户编号不能为空")
18   - private Long ownerUserId; // 新的负责人
  18 + private Long ownerUserId;
19 19  
20 20 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/ContractController.java
... ... @@ -95,5 +95,4 @@ public class ContractController {
95 95 return success(true);
96 96 }
97 97  
98   -
99 98 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/ContractCreateReqVO.java
... ... @@ -5,18 +5,10 @@ import lombok.Data;
5 5 import lombok.EqualsAndHashCode;
6 6 import lombok.ToString;
7 7  
8   -import java.util.Set;
9   -
10 8 @Schema(description = "管理后台 - 合同创建 Request VO")
11 9 @Data
12 10 @EqualsAndHashCode(callSuper = true)
13 11 @ToString(callSuper = true)
14 12 public class ContractCreateReqVO extends ContractBaseVO {
15 13  
16   - @Schema(description = "只读权限的用户编号数组")
17   - private Set<Long> roUserIds;
18   -
19   - @Schema(description = "读写权限的用户编号数组")
20   - private Set<Long> rwUserIds;
21   -
22 14 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/ContractUpdateReqVO.java
... ... @@ -6,7 +6,6 @@ import lombok.EqualsAndHashCode;
6 6 import lombok.ToString;
7 7  
8 8 import javax.validation.constraints.NotNull;
9   -import java.util.Set;
10 9  
11 10 @Schema(description = "管理后台 - 合同更新 Request VO")
12 11 @Data
... ... @@ -18,10 +17,4 @@ public class ContractUpdateReqVO extends ContractBaseVO {
18 17 @NotNull(message = "合同编号不能为空")
19 18 private Long id;
20 19  
21   - @Schema(description = "只读权限的用户编号数组")
22   - private Set<Long> roUserIds;
23   -
24   - @Schema(description = "读写权限的用户编号数组")
25   - private Set<Long> rwUserIds;
26   -
27 20 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/contract/vo/CrmContractTransferReqVO.java
... ... @@ -15,6 +15,6 @@ public class CrmContractTransferReqVO {
15 15  
16 16 @Schema(description = "新负责人的用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10430")
17 17 @NotNull(message = "新负责人的用户编号不能为空")
18   - private Long ownerUserId; // 新的负责人
  18 + private Long ownerUserId;
19 19  
20 20 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/business/CrmBusinessConvert.java
... ... @@ -32,8 +32,10 @@ public interface CrmBusinessConvert {
32 32  
33 33 default CrmBusinessDO convert(CrmBusinessDO business, CrmBusinessTransferReqVO reqVO, Long userId) {
34 34 Set<Long> rwUserIds = business.getRwUserIds();
35   - rwUserIds.removeIf(item -> ObjUtil.equal(item, userId)); // 移除老负责人
  35 + rwUserIds.removeIf(item -> ObjUtil.equal(item, userId)); // 移除老负责人 TODO puhui999:是不是直接 rwUserIds.remove(userId)
  36 + // TODO @puhui999:ownerUserId 不用添加到进去,它就是 ownerUserId 就够;因为一共有 3 个角色:负责人、读写、只读;
36 37 rwUserIds.add(reqVO.getOwnerUserId()); // 读写权限加入新的负人
  38 + // TODO @puhui999:对原负责人,加个类似的处理:移除、转化为团队成员(只读、读写)
37 39 return new CrmBusinessDO().setId(business.getId()).setOwnerUserId(reqVO.getOwnerUserId()) // 设置新负责人
38 40 .setRwUserIds(rwUserIds);
39 41 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/contact/ContactConvert.java
... ... @@ -32,6 +32,7 @@ public interface ContactConvert {
32 32  
33 33 List<ContactExcelVO> convertList02(List<ContactDO> list);
34 34  
  35 + // TODO @puhui999:参考 CrmBusinessConvert 的修改建议
35 36 default ContactDO convert(ContactDO contact, CrmContactTransferReqVO reqVO, Long userId) {
36 37 Set<Long> rwUserIds = contact.getRwUserIds();
37 38 rwUserIds.removeIf(item -> ObjUtil.equal(item, userId)); // 移除老负责人
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/contract/ContractConvert.java
... ... @@ -32,6 +32,7 @@ public interface ContractConvert {
32 32  
33 33 List<ContractExcelVO> convertList02(List<ContractDO> list);
34 34  
  35 + // TODO @puhui999:参考 CrmBusinessConvert 的修改建议
35 36 default ContractDO convert(ContractDO contract, CrmContractTransferReqVO reqVO, Long userId) {
36 37 Set<Long> rwUserIds = contract.getRwUserIds();
37 38 rwUserIds.removeIf(item -> ObjUtil.equal(item, userId)); // 移除老负责人
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/utils/AuthUtil.java
... ... @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.crm.framework.utils;
2 2  
3 3 import java.util.Collection;
4 4  
  5 +// TODO @puhui999:改成 CrmPermissionUtils;
5 6 /**
6 7 * 数据读写权限校验工具类
7 8 *
... ... @@ -9,6 +10,8 @@ import java.util.Collection;
9 10 */
10 11 public class AuthUtil {
11 12  
  13 + // TODO @puhui999:负责人是单独的字段哈;
  14 + // TODO @puhui999:额外校验,如果是管理员,可以查看所有;看着要做成有状态的了,可能要搞个 CrmPermissionService 咧;
12 15 /**
13 16 * 判断当前数据对用户来说是否是只读的
14 17 *
... ... @@ -17,6 +20,7 @@ public class AuthUtil {
17 20 * @return boolean 是/否
18 21 */
19 22 public static boolean isReadOnly(Collection<Long> roUserIds, Long userId) {
  23 + // TODO @puhui999:从代码角度来说,最好使用 CollUtil.contains
20 24 return roUserIds.contains(userId);
21 25 }
22 26  
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java
... ... @@ -92,26 +92,27 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
92 92 return businessMapper.selectList(exportReqVO);
93 93 }
94 94  
  95 + // TODO @puhui999:动名词哈。transferBusiness
95 96 @Override
96 97 public void businessTransfer(CrmBusinessTransferReqVO reqVO, Long userId) {
97   - // 1. 校验商机是否存在
  98 + // 1.1 校验商机是否存在
98 99 CrmBusinessDO business = validateBusinessExists(reqVO.getId());
99   - // 1.2. 校验用户是否拥有读写权限
  100 + // 1.2 校验用户是否拥有读写权限
100 101 if (!isReadAndWrite(business.getRwUserIds(), userId)) {
101 102 throw exception(BUSINESS_TRANSFER_FAIL_PERMISSION_DENIED);
102 103 }
103   - // 2. 校验新负责人是否存在
  104 + // TODO @puhui999:如果已经是该负责人,抛个业务异常;
  105 + // 1.3 校验新负责人是否存在
104 106 AdminUserRespDTO user = adminUserApi.getUser(reqVO.getOwnerUserId());
105 107 if (user == null) {
106 108 throw exception(BUSINESS_TRANSFER_FAIL_OWNER_USER_NOT_EXISTS);
107 109 }
108 110  
109   - // 3. 更新新的负责人
  111 + // 2. 更新新的负责人
110 112 CrmBusinessDO updateBusiness = CrmBusinessConvert.INSTANCE.convert(business, reqVO, userId);
111 113 businessMapper.updateById(updateBusiness);
112 114  
113 115 // 4. TODO 记录商机转移日志
114   -
115 116 }
116 117  
117 118 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/ContactServiceImpl.java
... ... @@ -95,6 +95,7 @@ public class ContactServiceImpl implements ContactService {
95 95 return contactMapper.selectList(exportReqVO);
96 96 }
97 97  
  98 + // TODO @puhui999:参考 CrmBusinessServiceImpl 修改建议
98 99 @Override
99 100 public void contactTransfer(CrmContactTransferReqVO reqVO, Long userId) {
100 101 // 1. 校验联系人是否存在
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contract/ContractServiceImpl.java
... ... @@ -92,6 +92,7 @@ public class ContractServiceImpl implements ContractService {
92 92 return contractMapper.selectList(exportReqVO);
93 93 }
94 94  
  95 + // TODO @puhui999:参考 CrmBusinessServiceImpl 修改建议
95 96 @Override
96 97 public void contractTransfer(CrmContractTransferReqVO reqVO, Long userId) {
97 98 // 1. 校验合同是否存在
... ...