gaoluyang
7 小时以前 f4ef6d1f4489e0d4cbba1845792945b924c16228
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/customer/CrmCustomerMapper.java
@@ -49,14 +49,20 @@
    }
    default PageResult<CrmCustomerDO> selectPage(CrmCustomerPageReqVO pageReqVO, Long ownerUserId) {
        return selectPage(pageReqVO, ownerUserId,
                Boolean.TRUE.equals(pageReqVO.getPool()) && CrmPermissionUtils.isSuperAdmin());
    }
    default PageResult<CrmCustomerDO> selectPage(CrmCustomerPageReqVO pageReqVO, Long ownerUserId,
                                               boolean superAdmin) {
        MPJLambdaWrapperX<CrmCustomerDO> query = new MPJLambdaWrapperX<>();
        // 拼接数据权限的查询条件
        if (CrmSceneTypeEnum.isAll(pageReqVO.getSceneType())) {
        // 公海展示允许共享的客户(包含已有负责人),与客户管理使用同一份数据。
        if (Boolean.TRUE.equals(pageReqVO.getPool())) {
            query.eq(!superAdmin, CrmCustomerDO::getAutoPoolEnabled, true);
        } else if (CrmSceneTypeEnum.isAll(pageReqVO.getSceneType())) {
            // 场景四:全部数据,不区分公海/非公海,由 appendPermissionCondition 统一处理
            CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(),
                    CrmCustomerDO::getId, ownerUserId, pageReqVO.getSceneType());
        } else if (Boolean.TRUE.equals(pageReqVO.getPool())) {
            query.isNull(CrmCustomerDO::getOwnerUserId);
        } else {
            CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(),
                    CrmCustomerDO::getId, ownerUserId, pageReqVO.getSceneType());
@@ -68,6 +74,7 @@
                .eqIfPresent(CrmCustomerDO::getIndustryId, pageReqVO.getIndustryId())
                .eqIfPresent(CrmCustomerDO::getLevel, pageReqVO.getLevel())
                .eqIfPresent(CrmCustomerDO::getSource, pageReqVO.getSource())
                .eqIfPresent(CrmCustomerDO::getAutoPoolEnabled, pageReqVO.getAutoPoolEnabled())
                .eqIfPresent(CrmCustomerDO::getFollowUpStatus, pageReqVO.getFollowUpStatus());
        // backlog 查询
@@ -85,6 +92,8 @@
                throw new IllegalArgumentException("未知联系状态:" + pageReqVO.getContactStatus());
            }
        }
        // 重点客户(A/level=1)默认排在前面
        query.orderByAsc(CrmCustomerDO::getLevel);
        return selectJoinPage(pageReqVO, CrmCustomerDO.class, query);
    }
@@ -115,7 +124,8 @@
                CrmCustomerDO::getId, ownerUserId, pageReqVO.getSceneType());
        // 未锁定 + 未成交
        query.eq(CrmCustomerDO::getLockStatus, false).eq(CrmCustomerDO::getDealStatus, false);
        query.eq(CrmCustomerDO::getLockStatus, false).eq(CrmCustomerDO::getDealStatus, false)
                .eq(CrmCustomerDO::getAutoPoolEnabled, true);
        // 情况一:未成交提醒日期区间
        Integer dealExpireDays = poolConfig.getDealExpireDays();
@@ -147,7 +157,8 @@
        LambdaQueryWrapper<CrmCustomerDO> query = new LambdaQueryWrapper<>();
        query.gt(CrmCustomerDO::getOwnerUserId, 0);
        // 未锁定 + 未成交
        query.eq(CrmCustomerDO::getLockStatus, false).eq(CrmCustomerDO::getDealStatus, false);
        query.eq(CrmCustomerDO::getLockStatus, false).eq(CrmCustomerDO::getDealStatus, false)
                .eq(CrmCustomerDO::getAutoPoolEnabled, true);
        // 已经超时
        LocalDateTime dealExpireTime = LocalDateTime.now().minusDays(poolConfig.getDealExpireDays());
        LocalDateTime contactExpireTime = LocalDateTime.now().minusDays(poolConfig.getContactExpireDays());
@@ -203,7 +214,7 @@
    default Long selectPoolCount() {
        return selectCount(new LambdaQueryWrapperX<CrmCustomerDO>()
                .isNull(CrmCustomerDO::getOwnerUserId));
                .eq(!CrmPermissionUtils.isSuperAdmin(), CrmCustomerDO::getAutoPoolEnabled, true));
    }
}