mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-10-31 10:18:42 +08:00 
			
		
		
		
	CRM-客户: 完善 TODO
This commit is contained in:
		| @@ -37,6 +37,10 @@ | ||||
|             <groupId>cn.iocoder.boot</groupId> | ||||
|             <artifactId>yudao-spring-boot-starter-biz-ip</artifactId> | ||||
|         </dependency> | ||||
|         <dependency> | ||||
|             <groupId>cn.iocoder.boot</groupId> | ||||
|             <artifactId>yudao-spring-boot-starter-biz-tenant</artifactId> | ||||
|         </dependency> | ||||
|  | ||||
|         <!-- Web 相关 --> | ||||
|         <dependency> | ||||
| @@ -70,11 +74,5 @@ | ||||
|             <groupId>cn.iocoder.boot</groupId> | ||||
|             <artifactId>yudao-spring-boot-starter-test</artifactId> | ||||
|         </dependency> | ||||
|  | ||||
|         <!-- TODO @puhui999:放的位置,要整齐哈。 --> | ||||
|         <dependency> | ||||
|             <groupId>cn.iocoder.boot</groupId> | ||||
|             <artifactId>yudao-spring-boot-starter-biz-tenant</artifactId> | ||||
|         </dependency> | ||||
|     </dependencies> | ||||
| </project> | ||||
|   | ||||
| @@ -100,11 +100,11 @@ public interface CrmCustomerMapper extends BaseMapperX<CrmCustomerDO> { | ||||
|         return selectJoinPage(pageReqVO, CrmCustomerDO.class, query); | ||||
|     } | ||||
|  | ||||
|     default List<CrmCustomerDO> selectListByLockStatusAndOwnerUserIdNotNull(Boolean lockStatus) { | ||||
|     default List<CrmCustomerDO> selectListByLockAndDealStatusAndNotPool(Boolean lockStatus, Boolean dealStatus) { | ||||
|         return selectList(new LambdaQueryWrapper<CrmCustomerDO>() | ||||
|                 .eq(CrmCustomerDO::getLockStatus, lockStatus) | ||||
|                 // TODO @puhui999:not null 可以转化成大于 0 | ||||
|                 .isNotNull(CrmCustomerDO::getOwnerUserId)); | ||||
|                 .eq(CrmCustomerDO::getDealStatus, dealStatus) | ||||
|                 .gt(CrmCustomerDO::getOwnerUserId, 0)); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -1,17 +1,9 @@ | ||||
| package cn.iocoder.yudao.module.crm.framework.permission.core.util; | ||||
|  | ||||
| import cn.hutool.core.util.ObjUtil; | ||||
| import cn.hutool.extra.spring.SpringUtil; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO; | ||||
| import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; | ||||
| import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; | ||||
| import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionRoleCodeEnum; | ||||
| import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; | ||||
| import cn.iocoder.yudao.module.system.api.permission.PermissionApi; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.anyMatch; | ||||
| import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; | ||||
|  | ||||
| /** | ||||
| @@ -30,22 +22,6 @@ public class CrmPermissionUtils { | ||||
|         return SingletonManager.getPermissionApi().hasAnyRoles(getLoginUserId(), CrmPermissionRoleCodeEnum.CRM_ADMIN.getCode()); | ||||
|     } | ||||
|  | ||||
|     // TODO @puhui999:这个貌似直接放到 CrmPermissionService 会更好? | ||||
|     /** | ||||
|      * 校验权限 | ||||
|      * | ||||
|      * @param bizType   数据类型,关联 {@link CrmBizTypeEnum} | ||||
|      * @param bizId     数据编号,关联 {@link CrmBizTypeEnum} 对应模块 DO#getId() | ||||
|      * @param userId    用户编号 | ||||
|      * @param levelEnum 权限级别 | ||||
|      * @return boolean | ||||
|      */ | ||||
|     public static boolean hasPermission(Integer bizType, Long bizId, Long userId, CrmPermissionLevelEnum levelEnum) { | ||||
|         List<CrmPermissionDO> permissionList = SingletonManager.getCrmPermissionService().getPermissionListByBiz(bizType, bizId); | ||||
|         return anyMatch(permissionList, permission -> | ||||
|                 ObjUtil.equal(permission.getUserId(), userId) && ObjUtil.equal(permission.getLevel(), levelEnum.getLevel())); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 静态内部类实现单例获取 | ||||
|      * | ||||
| @@ -54,16 +30,11 @@ public class CrmPermissionUtils { | ||||
|     private static class SingletonManager { | ||||
|  | ||||
|         private static final PermissionApi PERMISSION_API = SpringUtil.getBean(PermissionApi.class); | ||||
|         private static final CrmPermissionService CRM_PERMISSION_SERVICE = SpringUtil.getBean(CrmPermissionService.class); | ||||
|  | ||||
|         public static PermissionApi getPermissionApi() { | ||||
|             return PERMISSION_API; | ||||
|         } | ||||
|  | ||||
|         public static CrmPermissionService getCrmPermissionService() { | ||||
|             return CRM_PERMISSION_SERVICE; | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -20,7 +20,7 @@ public class CrmCustomerAutoPutPoolJob implements JobHandler { | ||||
|     @Override | ||||
|     @TenantJob | ||||
|     public String execute(String param) { | ||||
|         int count = customerService.customerAutoPutPoolBySystem(); | ||||
|         int count = customerService.autoPutCustomerPool(); | ||||
|         return String.format("掉入公海客户 %s 个", count); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -126,12 +126,11 @@ public interface CrmCustomerService { | ||||
|      */ | ||||
|     void receiveCustomer(List<Long> ids, Long ownerUserId, Boolean isReceive); | ||||
|  | ||||
|     // TODO @puhui999:autoPutCustomerPool,注释说明是系统就好哈; | ||||
|     /** | ||||
|      * 【系统】客户自动掉入公海 | ||||
|      * | ||||
|      * @return 掉入公海数量 | ||||
|      */ | ||||
|     int customerAutoPutPoolBySystem(); | ||||
|     int autoPutCustomerPool(); | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -47,6 +47,7 @@ import java.util.Collections; | ||||
| import java.util.List; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||||
| import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.filterList; | ||||
| import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*; | ||||
| import static cn.iocoder.yudao.module.crm.enums.LogRecordConstants.*; | ||||
| import static cn.iocoder.yudao.module.crm.enums.customer.CrmCustomerLimitConfigTypeEnum.CUSTOMER_LOCK_LIMIT; | ||||
| @@ -313,23 +314,22 @@ public class CrmCustomerServiceImpl implements CrmCustomerService { | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int customerAutoPutPoolBySystem() { | ||||
|     public int autoPutCustomerPool() { | ||||
|         CrmCustomerPoolConfigDO poolConfig = customerPoolConfigService.getCustomerPoolConfig(); | ||||
|         if (poolConfig == null || !poolConfig.getEnabled()) { | ||||
|             return 0; | ||||
|         } | ||||
|         // 1. 获取没有锁定的不在公海的客户 | ||||
|         List<CrmCustomerDO> customerList = customerMapper.selectListByLockStatusAndOwnerUserIdNotNull(Boolean.FALSE); | ||||
|         List<CrmCustomerDO> poolCustomerList = CollectionUtils.filterList(customerList, customer -> { | ||||
|             // TODO @puhui999:建议这里作为一个查询条件哈,不放内存里过滤; | ||||
|             // 1.1 未成交放入公海 | ||||
|             if (!customer.getDealStatus()) { | ||||
|                 return (poolConfig.getDealExpireDays() - LocalDateTimeUtils.between(customer.getCreateTime())) <= 0; | ||||
|             } | ||||
|             // 1.2 未跟进放入公海 | ||||
|         // 1.1 获取没有锁定的不在公海的客户且没有成交的 | ||||
|         List<CrmCustomerDO> notDealCustomerList = customerMapper.selectListByLockAndDealStatusAndNotPool(Boolean.FALSE, Boolean.FALSE); | ||||
|         // 1.2 获取没有锁定的不在公海的客户且成交的 | ||||
|         List<CrmCustomerDO> dealCustomerList = customerMapper.selectListByLockAndDealStatusAndNotPool(Boolean.FALSE, Boolean.TRUE); | ||||
|         List<CrmCustomerDO> poolCustomerList = new ArrayList<>(); | ||||
|         poolCustomerList.addAll(filterList(notDealCustomerList, customer -> | ||||
|                 (poolConfig.getDealExpireDays() - LocalDateTimeUtils.between(customer.getCreateTime())) <= 0)); | ||||
|         poolCustomerList.addAll(filterList(dealCustomerList, customer -> { | ||||
|             LocalDateTime lastTime = ObjUtil.defaultIfNull(customer.getContactLastTime(), customer.getCreateTime()); | ||||
|             return (poolConfig.getContactExpireDays() - LocalDateTimeUtils.between(lastTime)) <= 0; | ||||
|         }); | ||||
|         })); | ||||
|  | ||||
|         // 2. 逐个放入公海 | ||||
|         int count = 0; | ||||
|   | ||||
| @@ -33,7 +33,6 @@ import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionU | ||||
| import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertList; | ||||
| import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.FOLLOW_UP_RECORD_DELETE_DENIED; | ||||
| import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.FOLLOW_UP_RECORD_NOT_EXISTS; | ||||
| import static cn.iocoder.yudao.module.crm.framework.permission.core.util.CrmPermissionUtils.hasPermission; | ||||
|  | ||||
| /** | ||||
|  * 跟进记录 Service 实现类 | ||||
| @@ -119,7 +118,7 @@ public class CrmFollowUpRecordServiceImpl implements CrmFollowUpRecordService { | ||||
|         // 校验存在 | ||||
|         CrmFollowUpRecordDO followUpRecord = validateFollowUpRecordExists(id); | ||||
|         // 校验权限 | ||||
|         if (!hasPermission(followUpRecord.getBizType(), followUpRecord.getBizId(), userId, CrmPermissionLevelEnum.OWNER)) { | ||||
|         if (!permissionService.hasPermission(followUpRecord.getBizType(), followUpRecord.getBizId(), userId, CrmPermissionLevelEnum.OWNER)) { | ||||
|             throw exception(FOLLOW_UP_RECORD_DELETE_DENIED); | ||||
|         } | ||||
|  | ||||
|   | ||||
| @@ -108,4 +108,15 @@ public interface CrmPermissionService { | ||||
|      */ | ||||
|     List<CrmPermissionDO> getPermissionListByBizTypeAndUserId(Integer bizType, Long userId); | ||||
|  | ||||
|     /** | ||||
|      * 校验权限 | ||||
|      * | ||||
|      * @param bizType   数据类型,关联 {@link CrmBizTypeEnum} | ||||
|      * @param bizId     数据编号,关联 {@link CrmBizTypeEnum} 对应模块 DO#getId() | ||||
|      * @param userId    用户编号 | ||||
|      * @param levelEnum 权限级别 | ||||
|      * @return boolean | ||||
|      */ | ||||
|     boolean hasPermission(Integer bizType, Long bizId, Long userId, CrmPermissionLevelEnum levelEnum); | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -24,6 +24,7 @@ import java.util.List; | ||||
| import java.util.Set; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||||
| import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.anyMatch; | ||||
| import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; | ||||
| import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.*; | ||||
| import static cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum.isOwner; | ||||
| @@ -211,4 +212,11 @@ public class CrmPermissionServiceImpl implements CrmPermissionService { | ||||
|         return permissionMapper.selectListByBizTypeAndUserId(bizType, userId); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public boolean hasPermission(Integer bizType, Long bizId, Long userId, CrmPermissionLevelEnum levelEnum) { | ||||
|         List<CrmPermissionDO> permissionList = permissionMapper.selectByBizTypeAndBizId(bizType, bizId); | ||||
|         return anyMatch(permissionList, permission -> | ||||
|                 ObjUtil.equal(permission.getUserId(), userId) && ObjUtil.equal(permission.getLevel(), levelEnum.getLevel())); | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 puhui999
					puhui999