From 8e704c6474b8a9df9652191112f6dc280992ba52 Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期二, 13 十月 2026 17:15:45 +0800
Subject: [PATCH] fix(crm): 修复客户公海数据显示问题

---
 yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/aop/CrmPermissionAspect.java |   34 +++++++++++++++++++++++-----------
 1 files changed, 23 insertions(+), 11 deletions(-)

diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/aop/CrmPermissionAspect.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/aop/CrmPermissionAspect.java
index 5b23ae4..9658e37 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/aop/CrmPermissionAspect.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/aop/CrmPermissionAspect.java
@@ -8,6 +8,7 @@
 import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO;
 import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO;
 import cn.iocoder.yudao.module.crm.dal.mysql.business.CrmBusinessMapper;
+import cn.iocoder.yudao.module.crm.dal.mysql.customer.CrmCustomerMapper;
 import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
 import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
 import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission;
@@ -49,6 +50,9 @@
     @Resource
     private CrmBusinessMapper businessMapper;
 
+    @Resource
+    private CrmCustomerMapper customerMapper;
+
     @Before("@annotation(crmPermission)")
     public void doBefore(JoinPoint joinPoint, CrmPermission crmPermission) {
         // 1.1 鑾峰彇鐩稿叧灞炴�у��
@@ -79,17 +83,22 @@
         if (CrmPermissionUtils.isCrmAdmin()) {
             return;
         }
+        // 鍏捣鍏佽鏌ョ湅鏈夎礋璐d汉鐨勫鎴凤紱鍙巿浜堣鍙栨潈闄愶紝涓嶅奖鍝嶅啓鍏ャ�佽浆绉绘垨棰嗗彇鏉冮檺銆�
+        if (CrmBizTypeEnum.CRM_CUSTOMER.getType().equals(bizType)
+                && CrmPermissionLevelEnum.isRead(permissionLevel) && isPublicPoolVisible(bizType, bizId)) {
+            return;
+        }
         // 鐗规畩锛氭病鏈夋暟鎹潈闄愮殑鎯呭喌锛岄拡瀵� READ 鐨勭壒娈婂鐞�
         if (CollUtil.isEmpty(bizPermissions)) {
             // 1.1 鍏捣鏁版嵁锛屽鏋滄病鏈夊洟闃熸垚鍛橈紝澶у涔熷簲璇ユ湁 READ 鏉冮檺鎵嶅
-            if (CrmPermissionLevelEnum.isRead(permissionLevel)) {
+            if (CrmPermissionLevelEnum.isRead(permissionLevel) && isPublicPoolVisible(bizType, bizId)) {
                 return;
             }
             // 娌℃湁鏁版嵁鏉冮檺鐨勬儏鍐典笅瓒呭嚭浜嗚鏉冮檺鐩存帴鎶ラ敊锛岄伩鍏嶅悗闈㈡牎楠岀┖鎸囬拡
             throw exception(CRM_PERMISSION_DENIED, CrmBizTypeEnum.getNameByType(bizType));
         } else { // 1.2 鏈夋暟鎹潈闄愪絾鏄病鏈夎礋璐d汉鐨勬儏鍐�
             if (!anyMatch(bizPermissions, item -> CrmPermissionLevelEnum.isOwner(item.getLevel()))
-                && CrmPermissionLevelEnum.isRead(permissionLevel)) {
+                && CrmPermissionLevelEnum.isRead(permissionLevel) && isPublicPoolVisible(bizType, bizId)) {
                 return;
             }
         }
@@ -132,14 +141,16 @@
         throw exception(CRM_PERMISSION_DENIED, CrmBizTypeEnum.getNameByType(bizType));
     }
 
-    /**
-     * 鍟嗘満鐗规畩鏉冮檺鏍¢獙锛氭鏌ョ敤鎴锋槸鍚︽湁璇ュ晢鏈烘墍灞炲鎴风殑鍥㈤槦鏉冮檺
-     *
-     * @param businessId     鍟嗘満缂栧彿
-     * @param userId         鐢ㄦ埛缂栧彿
-     * @param permissionLevel 闇�瑕佺殑鏉冮檺绾у埆
-     * @return 鏄惁鏈夋潈闄�
-     */
+    /** 鍙栨秷瀹㈡埛鍏捣鍙搴﹀悗锛屼笉鍐嶆巿浜堝叕鍏辫鍙栨潈闄愩�� */
+    private boolean isPublicPoolVisible(Integer bizType, Long bizId) {
+        if (!CrmBizTypeEnum.CRM_CUSTOMER.getType().equals(bizType)) {
+            return true;
+        }
+        var customer = customerMapper.selectById(bizId);
+        return customer != null && !Boolean.FALSE.equals(customer.getAutoPoolEnabled());
+    }
+
+    /** 鍟嗘満鐗规畩鏉冮檺鏍¢獙锛氭鏌ョ敤鎴锋槸鍚︽湁璇ュ晢鏈烘墍灞炲鎴风殑鍥㈤槦鏉冮檺銆� */
     private boolean validateBusinessCustomerPermission(Long businessId, Long userId, Integer permissionLevel) {
         // 鑾峰彇鍟嗘満鐨勫鎴稩D
         CrmBusinessDO business = businessMapper.selectById(businessId);
@@ -151,7 +162,8 @@
                 CrmBizTypeEnum.CRM_CUSTOMER.getType(), Collections.singleton(business.getCustomerId()));
         if (CollUtil.isEmpty(customerPermissions)) {
             // 瀹㈡埛鍏捣鏁版嵁锛孯EAD 鏉冮檺鏀捐
-            return CrmPermissionLevelEnum.isRead(permissionLevel);
+            return CrmPermissionLevelEnum.isRead(permissionLevel)
+                    && isPublicPoolVisible(CrmBizTypeEnum.CRM_CUSTOMER.getType(), business.getCustomerId());
         }
         // 妫�鏌ョ敤鎴锋槸鍚︽湁瀹㈡埛鍥㈤槦鐨勬潈闄�
         CrmPermissionDO userCustomerPermission = CollUtil.findOne(customerPermissions,

--
Gitblit v1.9.3