Commit ba103d6e86b20bbfbf13aac03b2f44f6cc6755ba

Authored by puhui999
1 parent 1a5fe6fa

CRM: 完善一些 TODO 提到的问题

yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java
@@ -44,6 +44,7 @@ public interface ErrorCodeConstants { @@ -44,6 +44,7 @@ public interface ErrorCodeConstants {
44 ErrorCode CUSTOMER_UNLOCK_FAIL_IS_UNLOCK = new ErrorCode(1_020_006_008, "解锁客户失败,它已经处于未锁定状态"); 44 ErrorCode CUSTOMER_UNLOCK_FAIL_IS_UNLOCK = new ErrorCode(1_020_006_008, "解锁客户失败,它已经处于未锁定状态");
45 ErrorCode CUSTOMER_LOCK_EXCEED_LIMIT = new ErrorCode(1_020_006_009, "锁定客户失败,超出锁定规则上限"); 45 ErrorCode CUSTOMER_LOCK_EXCEED_LIMIT = new ErrorCode(1_020_006_009, "锁定客户失败,超出锁定规则上限");
46 ErrorCode CUSTOMER_OWNER_EXCEED_LIMIT = new ErrorCode(1_020_006_010, "操作失败,超出客户数拥有上限"); 46 ErrorCode CUSTOMER_OWNER_EXCEED_LIMIT = new ErrorCode(1_020_006_010, "操作失败,超出客户数拥有上限");
  47 + ErrorCode CUSTOMER_DELETE_FAIL_HAVE_REFERENCE = new ErrorCode(1_020_006_011, "删除客户失败,有关联{}");
47 48
48 // ========== 权限管理 1_020_007_000 ========== 49 // ========== 权限管理 1_020_007_000 ==========
49 ErrorCode CRM_PERMISSION_NOT_EXISTS = new ErrorCode(1_020_007_000, "数据权限不存在"); 50 ErrorCode CRM_PERMISSION_NOT_EXISTS = new ErrorCode(1_020_007_000, "数据权限不存在");
@@ -54,6 +55,7 @@ public interface ErrorCodeConstants { @@ -54,6 +55,7 @@ public interface ErrorCodeConstants {
54 ErrorCode CRM_PERMISSION_DELETE_FAIL_EXIST_OWNER = new ErrorCode(1_020_007_005, "删除数据权限失败,原因:存在负责人"); 55 ErrorCode CRM_PERMISSION_DELETE_FAIL_EXIST_OWNER = new ErrorCode(1_020_007_005, "删除数据权限失败,原因:存在负责人");
55 ErrorCode CRM_PERMISSION_DELETE_DENIED = new ErrorCode(1_020_007_006, "删除数据权限失败,原因:没有权限"); 56 ErrorCode CRM_PERMISSION_DELETE_DENIED = new ErrorCode(1_020_007_006, "删除数据权限失败,原因:没有权限");
56 ErrorCode CRM_PERMISSION_DELETE_SELF_PERMISSION_FAIL_EXIST_OWNER = new ErrorCode(1_020_007_007, "删除数据权限失败,原因:不能删除负责人"); 57 ErrorCode CRM_PERMISSION_DELETE_SELF_PERMISSION_FAIL_EXIST_OWNER = new ErrorCode(1_020_007_007, "删除数据权限失败,原因:不能删除负责人");
  58 + ErrorCode CRM_PERMISSION_CREATE_FAIL = new ErrorCode(1_020_007_008, "创建数据权限失败,原因:所加用户已有权限");
57 59
58 // ========== 产品 1_020_008_000 ========== 60 // ========== 产品 1_020_008_000 ==========
59 ErrorCode PRODUCT_NOT_EXISTS = new ErrorCode(1_020_008_000, "产品不存在"); 61 ErrorCode PRODUCT_NOT_EXISTS = new ErrorCode(1_020_008_000, "产品不存在");
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contact/CrmContactMapper.java
@@ -28,6 +28,12 @@ public interface CrmContactMapper extends BaseMapperX<CrmContactDO> { @@ -28,6 +28,12 @@ public interface CrmContactMapper extends BaseMapperX<CrmContactDO> {
28 .set(CrmContactDO::getOwnerUserId, ownerUserId)); 28 .set(CrmContactDO::getOwnerUserId, ownerUserId));
29 } 29 }
30 30
  31 + default int updateOwnerUserIdByCustomerId(Long customerId, Long ownerUserId) {
  32 + return update(new LambdaUpdateWrapper<CrmContactDO>()
  33 + .eq(CrmContactDO::getCustomerId, customerId)
  34 + .set(CrmContactDO::getOwnerUserId, ownerUserId));
  35 + }
  36 +
31 default PageResult<CrmContactDO> selectPageByCustomerId(CrmContactPageReqVO pageVO) { 37 default PageResult<CrmContactDO> selectPageByCustomerId(CrmContactPageReqVO pageVO) {
32 return selectPage(pageVO, new LambdaQueryWrapperX<CrmContactDO>() 38 return selectPage(pageVO, new LambdaQueryWrapperX<CrmContactDO>()
33 .eq(CrmContactDO::getCustomerId, pageVO.getCustomerId()) // 指定客户编号 39 .eq(CrmContactDO::getCustomerId, pageVO.getCustomerId()) // 指定客户编号
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/permission/CrmPermissionMapper.java
@@ -59,4 +59,11 @@ public interface CrmPermissionMapper extends BaseMapperX&lt;CrmPermissionDO&gt; { @@ -59,4 +59,11 @@ public interface CrmPermissionMapper extends BaseMapperX&lt;CrmPermissionDO&gt; {
59 .eq(CrmPermissionDO::getBizId, bizId)); 59 .eq(CrmPermissionDO::getBizId, bizId));
60 } 60 }
61 61
  62 + default Long selectListByBiz(Collection<Integer> bizTypes, Collection<Long> bizIds, Collection<Long> userIds) {
  63 + return selectCount(new LambdaQueryWrapperX<CrmPermissionDO>()
  64 + .in(CrmPermissionDO::getBizType, bizTypes)
  65 + .in(CrmPermissionDO::getBizId, bizIds)
  66 + .in(CrmPermissionDO::getUserId, userIds));
  67 + }
  68 +
62 } 69 }
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessService.java
@@ -98,4 +98,12 @@ public interface CrmBusinessService { @@ -98,4 +98,12 @@ public interface CrmBusinessService {
98 */ 98 */
99 void transferBusiness(CrmBusinessTransferReqVO reqVO, Long userId); 99 void transferBusiness(CrmBusinessTransferReqVO reqVO, Long userId);
100 100
  101 + /**
  102 + * 获取关联客户的商机数量
  103 + *
  104 + * @param customerId 客户编号
  105 + * @return 数量
  106 + */
  107 + Long getBusinessCountByCustomerId(Long customerId);
  108 +
101 } 109 }
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/business/CrmBusinessServiceImpl.java
@@ -180,4 +180,9 @@ public class CrmBusinessServiceImpl implements CrmBusinessService { @@ -180,4 +180,9 @@ public class CrmBusinessServiceImpl implements CrmBusinessService {
180 convertSet(contactBusinessList, CrmContactBusinessDO::getBusinessId)); 180 convertSet(contactBusinessList, CrmContactBusinessDO::getBusinessId));
181 } 181 }
182 182
  183 + @Override
  184 + public Long getBusinessCountByCustomerId(Long customerId) {
  185 + return businessMapper.selectCount(CrmBusinessDO::getCustomerId, customerId);
  186 + }
  187 +
183 } 188 }
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactService.java
1 package cn.iocoder.yudao.module.crm.service.contact; 1 package cn.iocoder.yudao.module.crm.service.contact;
2 2
3 import cn.iocoder.yudao.framework.common.pojo.PageResult; 3 import cn.iocoder.yudao.framework.common.pojo.PageResult;
4 -import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.*; 4 +import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactPageReqVO;
  5 +import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactSaveReqVO;
  6 +import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactTransferReqVO;
5 import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO; 7 import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO;
6 import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; 8 import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO;
7 import jakarta.validation.Valid; 9 import jakarta.validation.Valid;
@@ -40,6 +42,22 @@ public interface CrmContactService { @@ -40,6 +42,22 @@ public interface CrmContactService {
40 void deleteContact(Long id); 42 void deleteContact(Long id);
41 43
42 /** 44 /**
  45 + * 联系人转移
  46 + *
  47 + * @param reqVO 请求
  48 + * @param userId 用户编号
  49 + */
  50 + void transferContact(CrmContactTransferReqVO reqVO, Long userId);
  51 +
  52 + /**
  53 + * 更新客户联系人负责人
  54 + *
  55 + * @param customerId 客户编号
  56 + * @param ownerUserId 用户编号
  57 + */
  58 + void updateOwnerUserIdByCustomerId(Long customerId, Long ownerUserId);
  59 +
  60 + /**
43 * 获得联系人 61 * 获得联系人
44 * 62 *
45 * @param id 编号 63 * @param id 编号
@@ -85,11 +103,11 @@ public interface CrmContactService { @@ -85,11 +103,11 @@ public interface CrmContactService {
85 PageResult<CrmContactDO> getContactPageByCustomerId(CrmContactPageReqVO pageVO); 103 PageResult<CrmContactDO> getContactPageByCustomerId(CrmContactPageReqVO pageVO);
86 104
87 /** 105 /**
88 - * 联系人转移 106 + * 获取关联客户的联系人数量
89 * 107 *
90 - * @param reqVO 请求  
91 - * @param userId 用户编号 108 + * @param customerId 客户编号
  109 + * @return 数量
92 */ 110 */
93 - void transferContact(CrmContactTransferReqVO reqVO, Long userId); 111 + Long getContactCountByCustomerId(Long customerId);
94 112
95 } 113 }
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contact/CrmContactServiceImpl.java
@@ -187,6 +187,11 @@ public class CrmContactServiceImpl implements CrmContactService { @@ -187,6 +187,11 @@ public class CrmContactServiceImpl implements CrmContactService {
187 LogRecordContext.putVariable("contact", contact); 187 LogRecordContext.putVariable("contact", contact);
188 } 188 }
189 189
  190 + @Override
  191 + public void updateOwnerUserIdByCustomerId(Long customerId, Long ownerUserId) {
  192 + contactMapper.updateOwnerUserIdByCustomerId(customerId, ownerUserId);
  193 + }
  194 +
190 //======================= 查询相关 ======================= 195 //======================= 查询相关 =======================
191 196
192 @Override 197 @Override
@@ -219,4 +224,9 @@ public class CrmContactServiceImpl implements CrmContactService { @@ -219,4 +224,9 @@ public class CrmContactServiceImpl implements CrmContactService {
219 return contactMapper.selectPageByCustomerId(pageVO); 224 return contactMapper.selectPageByCustomerId(pageVO);
220 } 225 }
221 226
  227 + @Override
  228 + public Long getContactCountByCustomerId(Long customerId) {
  229 + return contactMapper.selectCount(CrmContactDO::getCustomerId, customerId);
  230 + }
  231 +
222 } 232 }
223 \ No newline at end of file 233 \ No newline at end of file
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractService.java
@@ -95,4 +95,12 @@ public interface CrmContractService { @@ -95,4 +95,12 @@ public interface CrmContractService {
95 */ 95 */
96 Long getContractCountByContactId(Long contactId); 96 Long getContractCountByContactId(Long contactId);
97 97
  98 + /**
  99 + * 获取关联客户的合同数量
  100 + *
  101 + * @param customerId 客户编号
  102 + * @return 数量
  103 + */
  104 + Long getContractCountByCustomerId(Long customerId);
  105 +
98 } 106 }
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contract/CrmContractServiceImpl.java
@@ -167,5 +167,10 @@ public class CrmContractServiceImpl implements CrmContractService { @@ -167,5 +167,10 @@ public class CrmContractServiceImpl implements CrmContractService {
167 return contractMapper.selectCountByContactId(contactId); 167 return contractMapper.selectCountByContactId(contactId);
168 } 168 }
169 169
  170 + @Override
  171 + public Long getContractCountByCustomerId(Long customerId) {
  172 + return contractMapper.selectCount(CrmContractDO::getCustomerId, customerId);
  173 + }
  174 +
170 // TODO @合同待定:需要新增一个 ContractConfigDO 表,合同配置,重点是到期提醒; 175 // TODO @合同待定:需要新增一个 ContractConfigDO 表,合同配置,重点是到期提醒;
171 } 176 }
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerServiceImpl.java
@@ -18,6 +18,9 @@ import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; @@ -18,6 +18,9 @@ import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
18 import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; 18 import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
19 import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission; 19 import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission;
20 import cn.iocoder.yudao.module.crm.framework.permission.core.util.CrmPermissionUtils; 20 import cn.iocoder.yudao.module.crm.framework.permission.core.util.CrmPermissionUtils;
  21 +import cn.iocoder.yudao.module.crm.service.business.CrmBusinessService;
  22 +import cn.iocoder.yudao.module.crm.service.contact.CrmContactService;
  23 +import cn.iocoder.yudao.module.crm.service.contract.CrmContractService;
21 import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; 24 import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService;
22 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; 25 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO;
23 import cn.iocoder.yudao.module.system.api.user.AdminUserApi; 26 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
@@ -59,6 +62,12 @@ public class CrmCustomerServiceImpl implements CrmCustomerService { @@ -59,6 +62,12 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
59 private CrmPermissionService permissionService; 62 private CrmPermissionService permissionService;
60 @Resource 63 @Resource
61 private CrmCustomerLimitConfigService customerLimitConfigService; 64 private CrmCustomerLimitConfigService customerLimitConfigService;
  65 + @Resource
  66 + private CrmContactService contactService;
  67 + @Resource
  68 + private CrmBusinessService businessService;
  69 + @Resource
  70 + private CrmContractService contractService;
62 71
63 @Resource 72 @Resource
64 private AdminUserApi adminUserApi; 73 private AdminUserApi adminUserApi;
@@ -116,8 +125,8 @@ public class CrmCustomerServiceImpl implements CrmCustomerService { @@ -116,8 +125,8 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
116 public void deleteCustomer(Long id) { 125 public void deleteCustomer(Long id) {
117 // 校验存在 126 // 校验存在
118 CrmCustomerDO customer = validateCustomerExists(id); 127 CrmCustomerDO customer = validateCustomerExists(id);
119 - // TODO @puhui999:如果有联系人、商机,则不允许删除;  
120 - 128 + // 检查引用
  129 + checkCustomerReference(id);
121 // 删除 130 // 删除
122 customerMapper.deleteById(id); 131 customerMapper.deleteById(id);
123 // 删除数据权限 132 // 删除数据权限
@@ -128,6 +137,23 @@ public class CrmCustomerServiceImpl implements CrmCustomerService { @@ -128,6 +137,23 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
128 LogRecordContext.putVariable("customerName", customer.getName()); 137 LogRecordContext.putVariable("customerName", customer.getName());
129 } 138 }
130 139
  140 + /**
  141 + * 校验客户是否被引用
  142 + *
  143 + * @param id 客户编号
  144 + */
  145 + private void checkCustomerReference(Long id) {
  146 + if (contactService.getContactCountByCustomerId(id) > 0) {
  147 + throw exception(CUSTOMER_DELETE_FAIL_HAVE_REFERENCE, CrmBizTypeEnum.CRM_CONTACT.getName());
  148 + }
  149 + if (businessService.getBusinessCountByCustomerId(id) > 0) {
  150 + throw exception(CUSTOMER_DELETE_FAIL_HAVE_REFERENCE, CrmBizTypeEnum.CRM_BUSINESS.getName());
  151 + }
  152 + if (contractService.getContractCountByCustomerId(id) > 0) {
  153 + throw exception(CUSTOMER_DELETE_FAIL_HAVE_REFERENCE, CrmBizTypeEnum.CRM_CONTRACT.getName());
  154 + }
  155 + }
  156 +
131 @Override 157 @Override
132 @Transactional(rollbackFor = Exception.class) 158 @Transactional(rollbackFor = Exception.class)
133 @LogRecord(type = CRM_CUSTOMER_TYPE, subType = CRM_CUSTOMER_TRANSFER_SUB_TYPE, bizNo = "{{#reqVO.id}}", 159 @LogRecord(type = CRM_CUSTOMER_TYPE, subType = CRM_CUSTOMER_TRANSFER_SUB_TYPE, bizNo = "{{#reqVO.id}}",
@@ -200,6 +226,8 @@ public class CrmCustomerServiceImpl implements CrmCustomerService { @@ -200,6 +226,8 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
200 permissionService.deletePermission(CrmBizTypeEnum.CRM_CUSTOMER.getType(), customer.getId(), 226 permissionService.deletePermission(CrmBizTypeEnum.CRM_CUSTOMER.getType(), customer.getId(),
201 CrmPermissionLevelEnum.OWNER.getLevel()); 227 CrmPermissionLevelEnum.OWNER.getLevel());
202 // TODO @puhui999:联系人的负责人,也要设置为 null;这块和领取是对应的;因为领取后,负责人也要关联过来; 228 // TODO @puhui999:联系人的负责人,也要设置为 null;这块和领取是对应的;因为领取后,负责人也要关联过来;
  229 + // 提问:那是不是可以这样理解客户所有联系人的负责人默认为客户的负责人,然后添加客户团队成员时才存在“同时分配给”的操作?
  230 + contactService.updateOwnerUserIdByCustomerId(customer.getId(), null);
203 231
204 // 记录操作日志上下文 232 // 记录操作日志上下文
205 LogRecordContext.putVariable("customerName", customer.getName()); 233 LogRecordContext.putVariable("customerName", customer.getName());
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java
@@ -20,6 +20,7 @@ import org.springframework.validation.annotation.Validated; @@ -20,6 +20,7 @@ import org.springframework.validation.annotation.Validated;
20 import java.util.Collection; 20 import java.util.Collection;
21 import java.util.Collections; 21 import java.util.Collections;
22 import java.util.List; 22 import java.util.List;
  23 +import java.util.Set;
23 24
24 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; 25 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
25 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; 26 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
@@ -36,7 +37,7 @@ import static cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnu @@ -36,7 +37,7 @@ import static cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnu
36 public class CrmPermissionServiceImpl implements CrmPermissionService { 37 public class CrmPermissionServiceImpl implements CrmPermissionService {
37 38
38 @Resource 39 @Resource
39 - private CrmPermissionMapper crmPermissionMapper; 40 + private CrmPermissionMapper permissionMapper;
40 41
41 @Resource 42 @Resource
42 private AdminUserApi adminUserApi; 43 private AdminUserApi adminUserApi;
@@ -44,50 +45,59 @@ public class CrmPermissionServiceImpl implements CrmPermissionService { @@ -44,50 +45,59 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
44 @Override 45 @Override
45 @Transactional(rollbackFor = Exception.class) 46 @Transactional(rollbackFor = Exception.class)
46 public Long createPermission(CrmPermissionCreateReqBO createReqBO) { 47 public Long createPermission(CrmPermissionCreateReqBO createReqBO) {
47 - // TODO @puhui999:排重 48 + validatePermissionNotExists(Collections.singletonList(createReqBO));
48 // 1. 校验用户是否存在 49 // 1. 校验用户是否存在
49 adminUserApi.validateUserList(Collections.singletonList(createReqBO.getUserId())); 50 adminUserApi.validateUserList(Collections.singletonList(createReqBO.getUserId()));
50 51
51 // 2. 创建 52 // 2. 创建
52 CrmPermissionDO permission = CrmPermissionConvert.INSTANCE.convert(createReqBO); 53 CrmPermissionDO permission = CrmPermissionConvert.INSTANCE.convert(createReqBO);
53 - crmPermissionMapper.insert(permission); 54 + permissionMapper.insert(permission);
54 return permission.getId(); 55 return permission.getId();
55 } 56 }
56 57
57 @Override 58 @Override
58 public void createPermissionBatch(List<CrmPermissionCreateReqBO> createReqBOs) { 59 public void createPermissionBatch(List<CrmPermissionCreateReqBO> createReqBOs) {
59 - // TODO @puhui999:排重 60 + validatePermissionNotExists(createReqBOs);
60 // 1. 校验用户是否存在 61 // 1. 校验用户是否存在
61 adminUserApi.validateUserList(convertSet(createReqBOs, CrmPermissionCreateReqBO::getUserId)); 62 adminUserApi.validateUserList(convertSet(createReqBOs, CrmPermissionCreateReqBO::getUserId));
62 63
63 // 2. 创建 64 // 2. 创建
64 List<CrmPermissionDO> permissions = CrmPermissionConvert.INSTANCE.convertList(createReqBOs); 65 List<CrmPermissionDO> permissions = CrmPermissionConvert.INSTANCE.convertList(createReqBOs);
65 - crmPermissionMapper.insertBatch(permissions); 66 + permissionMapper.insertBatch(permissions);
66 } 67 }
67 68
68 @Override 69 @Override
69 @Transactional(rollbackFor = Exception.class) 70 @Transactional(rollbackFor = Exception.class)
70 public void updatePermission(CrmPermissionUpdateReqVO updateReqVO) { 71 public void updatePermission(CrmPermissionUpdateReqVO updateReqVO) {
71 - // TODO @puhui999:排重  
72 // 1. 校验存在 72 // 1. 校验存在
73 - validateCrmPermissionExists(updateReqVO.getIds()); 73 + validatePermissionExists(updateReqVO.getIds());
74 // 2. 更新 74 // 2. 更新
75 List<CrmPermissionDO> updateDO = CrmPermissionConvert.INSTANCE.convertList(updateReqVO); 75 List<CrmPermissionDO> updateDO = CrmPermissionConvert.INSTANCE.convertList(updateReqVO);
76 - crmPermissionMapper.updateBatch(updateDO); 76 + permissionMapper.updateBatch(updateDO);
77 } 77 }
78 78
79 - private void validateCrmPermissionExists(Collection<Long> ids) {  
80 - List<CrmPermissionDO> permissionList = crmPermissionMapper.selectBatchIds(ids); 79 + private void validatePermissionExists(Collection<Long> ids) {
  80 + List<CrmPermissionDO> permissionList = permissionMapper.selectBatchIds(ids);
81 if (ObjUtil.notEqual(permissionList.size(), ids.size())) { 81 if (ObjUtil.notEqual(permissionList.size(), ids.size())) {
82 throw exception(CRM_PERMISSION_NOT_EXISTS); 82 throw exception(CRM_PERMISSION_NOT_EXISTS);
83 } 83 }
84 } 84 }
85 85
  86 + private void validatePermissionNotExists(Collection<CrmPermissionCreateReqBO> createReqBOs) {
  87 + Set<Integer> bizTypes = convertSet(createReqBOs, CrmPermissionCreateReqBO::getBizType);
  88 + Set<Long> bizIds = convertSet(createReqBOs, CrmPermissionCreateReqBO::getBizId);
  89 + Set<Long> userIds = convertSet(createReqBOs, CrmPermissionCreateReqBO::getUserId);
  90 + Long count = permissionMapper.selectListByBiz(bizTypes, bizIds, userIds);
  91 + if (count > 0) {
  92 + throw exception(CRM_PERMISSION_CREATE_FAIL);
  93 + }
  94 + }
  95 +
86 @Override 96 @Override
87 @Transactional(rollbackFor = Exception.class) 97 @Transactional(rollbackFor = Exception.class)
88 public void transferPermission(CrmPermissionTransferReqBO transferReqBO) { 98 public void transferPermission(CrmPermissionTransferReqBO transferReqBO) {
89 // 1. 校验数据权限:是否是负责人,只有负责人才可以转移 99 // 1. 校验数据权限:是否是负责人,只有负责人才可以转移
90 - CrmPermissionDO oldPermission = crmPermissionMapper.selectByBizTypeAndBizIdByUserId( 100 + CrmPermissionDO oldPermission = permissionMapper.selectByBizTypeAndBizIdByUserId(
91 transferReqBO.getBizType(), transferReqBO.getBizId(), transferReqBO.getUserId()); 101 transferReqBO.getBizType(), transferReqBO.getBizId(), transferReqBO.getUserId());
92 String bizTypeName = CrmBizTypeEnum.getNameByType(transferReqBO.getBizType()); 102 String bizTypeName = CrmBizTypeEnum.getNameByType(transferReqBO.getBizType());
93 if (oldPermission == null // 不是拥有者,并且不是超管 103 if (oldPermission == null // 不是拥有者,并且不是超管
@@ -102,25 +112,25 @@ public class CrmPermissionServiceImpl implements CrmPermissionService { @@ -102,25 +112,25 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
102 adminUserApi.validateUserList(Collections.singletonList(transferReqBO.getNewOwnerUserId())); 112 adminUserApi.validateUserList(Collections.singletonList(transferReqBO.getNewOwnerUserId()));
103 113
104 // 2. 修改新负责人的权限 114 // 2. 修改新负责人的权限
105 - List<CrmPermissionDO> permissions = crmPermissionMapper.selectByBizTypeAndBizId( 115 + List<CrmPermissionDO> permissions = permissionMapper.selectByBizTypeAndBizId(
106 transferReqBO.getBizType(), transferReqBO.getBizId()); // 获得所有数据权限 116 transferReqBO.getBizType(), transferReqBO.getBizId()); // 获得所有数据权限
107 CrmPermissionDO permission = CollUtil.findOne(permissions, 117 CrmPermissionDO permission = CollUtil.findOne(permissions,
108 item -> ObjUtil.equal(item.getUserId(), transferReqBO.getNewOwnerUserId())); 118 item -> ObjUtil.equal(item.getUserId(), transferReqBO.getNewOwnerUserId()));
109 if (permission == null) { 119 if (permission == null) {
110 - crmPermissionMapper.insert(new CrmPermissionDO().setBizType(transferReqBO.getBizType()) 120 + permissionMapper.insert(new CrmPermissionDO().setBizType(transferReqBO.getBizType())
111 .setBizId(transferReqBO.getBizId()).setUserId(transferReqBO.getNewOwnerUserId()) 121 .setBizId(transferReqBO.getBizId()).setUserId(transferReqBO.getNewOwnerUserId())
112 .setLevel(CrmPermissionLevelEnum.OWNER.getLevel())); 122 .setLevel(CrmPermissionLevelEnum.OWNER.getLevel()));
113 } else { 123 } else {
114 - crmPermissionMapper.updateById(new CrmPermissionDO().setId(permission.getId()) 124 + permissionMapper.updateById(new CrmPermissionDO().setId(permission.getId())
115 .setLevel(CrmPermissionLevelEnum.OWNER.getLevel())); 125 .setLevel(CrmPermissionLevelEnum.OWNER.getLevel()));
116 } 126 }
117 127
118 // 3. 修改老负责人的权限 128 // 3. 修改老负责人的权限
119 if (transferReqBO.getOldOwnerPermissionLevel() != null) { 129 if (transferReqBO.getOldOwnerPermissionLevel() != null) {
120 - crmPermissionMapper.updateById(new CrmPermissionDO().setId(oldPermission.getId()) 130 + permissionMapper.updateById(new CrmPermissionDO().setId(oldPermission.getId())
121 .setLevel(transferReqBO.getOldOwnerPermissionLevel())); 131 .setLevel(transferReqBO.getOldOwnerPermissionLevel()));
122 } else { 132 } else {
123 - crmPermissionMapper.deleteById(oldPermission.getId()); 133 + permissionMapper.deleteById(oldPermission.getId());
124 } 134 }
125 } 135 }
126 136
@@ -128,19 +138,19 @@ public class CrmPermissionServiceImpl implements CrmPermissionService { @@ -128,19 +138,19 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
128 @Transactional(rollbackFor = Exception.class) 138 @Transactional(rollbackFor = Exception.class)
129 public void deletePermission(Integer bizType, Long bizId, Integer level) { 139 public void deletePermission(Integer bizType, Long bizId, Integer level) {
130 // 校验存在 140 // 校验存在
131 - List<CrmPermissionDO> permissions = crmPermissionMapper.selectListByBizTypeAndBizIdAndLevel( 141 + List<CrmPermissionDO> permissions = permissionMapper.selectListByBizTypeAndBizIdAndLevel(
132 bizType, bizId, level); 142 bizType, bizId, level);
133 if (CollUtil.isEmpty(permissions)) { 143 if (CollUtil.isEmpty(permissions)) {
134 throw exception(CRM_PERMISSION_NOT_EXISTS); 144 throw exception(CRM_PERMISSION_NOT_EXISTS);
135 } 145 }
136 146
137 // 删除数据权限 147 // 删除数据权限
138 - crmPermissionMapper.deleteBatchIds(convertSet(permissions, CrmPermissionDO::getId)); 148 + permissionMapper.deleteBatchIds(convertSet(permissions, CrmPermissionDO::getId));
139 } 149 }
140 150
141 @Override 151 @Override
142 public void deletePermission(Integer bizType, Long bizId) { 152 public void deletePermission(Integer bizType, Long bizId) {
143 - int deletedCount = crmPermissionMapper.deletePermission(bizType, bizId); 153 + int deletedCount = permissionMapper.deletePermission(bizType, bizId);
144 if (deletedCount == 0) { 154 if (deletedCount == 0) {
145 throw exception(CRM_PERMISSION_NOT_EXISTS); 155 throw exception(CRM_PERMISSION_NOT_EXISTS);
146 } 156 }
@@ -148,7 +158,7 @@ public class CrmPermissionServiceImpl implements CrmPermissionService { @@ -148,7 +158,7 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
148 158
149 @Override 159 @Override
150 public void deletePermissionBatch(Collection<Long> ids, Long userId) { 160 public void deletePermissionBatch(Collection<Long> ids, Long userId) {
151 - List<CrmPermissionDO> permissions = crmPermissionMapper.selectBatchIds(ids); 161 + List<CrmPermissionDO> permissions = permissionMapper.selectBatchIds(ids);
152 if (CollUtil.isEmpty(permissions)) { 162 if (CollUtil.isEmpty(permissions)) {
153 throw exception(CRM_PERMISSION_NOT_EXISTS); 163 throw exception(CRM_PERMISSION_NOT_EXISTS);
154 } 164 }
@@ -157,19 +167,19 @@ public class CrmPermissionServiceImpl implements CrmPermissionService { @@ -157,19 +167,19 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
157 throw exception(CRM_PERMISSION_DELETE_FAIL); 167 throw exception(CRM_PERMISSION_DELETE_FAIL);
158 } 168 }
159 // 校验操作人是否为负责人 169 // 校验操作人是否为负责人
160 - CrmPermissionDO permission = crmPermissionMapper.selectByIdAndUserId(permissions.get(0).getBizId(), userId); 170 + CrmPermissionDO permission = permissionMapper.selectByIdAndUserId(permissions.get(0).getBizId(), userId);
161 if (!CrmPermissionLevelEnum.isOwner(permission.getLevel())) { 171 if (!CrmPermissionLevelEnum.isOwner(permission.getLevel())) {
162 throw exception(CRM_PERMISSION_DELETE_DENIED); 172 throw exception(CRM_PERMISSION_DELETE_DENIED);
163 } 173 }
164 174
165 // 删除数据权限 175 // 删除数据权限
166 - crmPermissionMapper.deleteBatchIds(ids); 176 + permissionMapper.deleteBatchIds(ids);
167 } 177 }
168 178
169 @Override 179 @Override
170 public void deleteSelfPermission(Long id, Long userId) { 180 public void deleteSelfPermission(Long id, Long userId) {
171 // 校验数据存在且是自己 181 // 校验数据存在且是自己
172 - CrmPermissionDO permission = crmPermissionMapper.selectByIdAndUserId(id, userId); 182 + CrmPermissionDO permission = permissionMapper.selectByIdAndUserId(id, userId);
173 if (permission == null) { 183 if (permission == null) {
174 throw exception(CRM_PERMISSION_NOT_EXISTS); 184 throw exception(CRM_PERMISSION_NOT_EXISTS);
175 } 185 }
@@ -179,22 +189,22 @@ public class CrmPermissionServiceImpl implements CrmPermissionService { @@ -179,22 +189,22 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
179 } 189 }
180 190
181 // 删除 191 // 删除
182 - crmPermissionMapper.deleteById(id); 192 + permissionMapper.deleteById(id);
183 } 193 }
184 194
185 @Override 195 @Override
186 public List<CrmPermissionDO> getPermissionListByBiz(Integer bizType, Long bizId) { 196 public List<CrmPermissionDO> getPermissionListByBiz(Integer bizType, Long bizId) {
187 - return crmPermissionMapper.selectByBizTypeAndBizId(bizType, bizId); 197 + return permissionMapper.selectByBizTypeAndBizId(bizType, bizId);
188 } 198 }
189 199
190 @Override 200 @Override
191 public List<CrmPermissionDO> getPermissionListByBiz(Integer bizType, Collection<Long> bizIds) { 201 public List<CrmPermissionDO> getPermissionListByBiz(Integer bizType, Collection<Long> bizIds) {
192 - return crmPermissionMapper.selectByBizTypeAndBizIds(bizType, bizIds); 202 + return permissionMapper.selectByBizTypeAndBizIds(bizType, bizIds);
193 } 203 }
194 204
195 @Override 205 @Override
196 public List<CrmPermissionDO> getPermissionListByBizTypeAndUserId(Integer bizType, Long userId) { 206 public List<CrmPermissionDO> getPermissionListByBizTypeAndUserId(Integer bizType, Long userId) {
197 - return crmPermissionMapper.selectListByBizTypeAndUserId(bizType, userId); 207 + return permissionMapper.selectListByBizTypeAndUserId(bizType, userId);
198 } 208 }
199 209
200 } 210 }