Browse Source

CRM-客户: 完善 TODO

puhui999 1 year ago
parent
commit
d8b2da8eed

+ 4 - 6
yudao-module-crm/yudao-module-crm-biz/pom.xml

@@ -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>

+ 3 - 3
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/customer/CrmCustomerMapper.java

@@ -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));
     }
 
 }

+ 0 - 29
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/util/CrmPermissionUtils.java

@@ -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;
-        }
-
     }
 
 }

+ 1 - 1
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/job/customer/CrmCustomerAutoPutPoolJob.java

@@ -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);
     }
 

+ 1 - 2
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerService.java

@@ -126,12 +126,11 @@ public interface CrmCustomerService {
      */
     void receiveCustomer(List<Long> ids, Long ownerUserId, Boolean isReceive);
 
-    // TODO @puhui999:autoPutCustomerPool,注释说明是系统就好哈;
     /**
      * 【系统】客户自动掉入公海
      *
      * @return 掉入公海数量
      */
-    int customerAutoPutPoolBySystem();
+    int autoPutCustomerPool();
 
 }

+ 11 - 11
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerServiceImpl.java

@@ -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;

+ 1 - 2
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/followup/CrmFollowUpRecordServiceImpl.java

@@ -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);
         }
 

+ 11 - 0
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionService.java

@@ -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);
+
 }

+ 8 - 0
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java

@@ -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()));
+    }
+
 }