Commit ba103d6e86b20bbfbf13aac03b2f44f6cc6755ba
1 parent
1a5fe6fa
CRM: 完善一些 TODO 提到的问题
Showing
11 changed files
with
141 additions
and
34 deletions
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<CrmPermissionDO> { | @@ -59,4 +59,11 @@ public interface CrmPermissionMapper extends BaseMapperX<CrmPermissionDO> { | ||
| 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 | } |