From dc98061b74163dad6f9dfc8f1d157a2d797c424c Mon Sep 17 00:00:00 2001 From: yinq Date: Fri, 15 May 2026 17:55:13 +0800 Subject: [PATCH] =?UTF-8?q?1.1.39=20=E5=AE=A2=E6=88=B7=E3=80=81=E5=AE=A2?= =?UTF-8?q?=E6=88=B7=E8=81=94=E7=B3=BB=E4=BA=BA=E4=BF=A1=E6=81=AF=E6=9C=AC?= =?UTF-8?q?=E4=BA=BA=E5=88=9B=E5=BB=BA=E7=9A=84=E5=AE=A2=E6=88=B7=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5=E6=9F=A5=E7=9C=8B=E3=80=81=E4=BF=AE=E6=94=B9=E3=80=82?= =?UTF-8?q?=E6=8B=A5=E6=9C=89=E5=AE=A2=E6=88=B7=E7=AE=A1=E7=90=86=E5=91=98?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E6=9D=83=E9=99=90=E5=AD=97=E7=AC=A6=E6=98=AF?= =?UTF-8?q?KHMA=E7=9A=84=E7=94=A8=E6=88=B7=E8=83=BD=E7=BB=B4=E6=8A=A4?= =?UTF-8?q?=E6=89=80=E6=9C=89=E5=AE=A2=E6=88=B7=E4=BF=A1=E6=81=AF=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/CrmCustomerContactServiceImpl.java | 30 ++++++++++++++++- .../impl/CrmCustomerInfoServiceImpl.java | 33 ++++++++++++++++++- 2 files changed, 61 insertions(+), 2 deletions(-) diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmCustomerContactServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmCustomerContactServiceImpl.java index f675bd53..c2a50aa2 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmCustomerContactServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmCustomerContactServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.oa.crm.service.impl; +import cn.dev33.satoken.stp.StpUtil; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -7,8 +8,8 @@ import org.dromara.common.mybatis.core.page.PageQuery; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; +import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.oa.crm.domain.CrmCustomerInfo; import org.springframework.stereotype.Service; import org.dromara.oa.crm.domain.bo.CrmCustomerContactBo; @@ -33,6 +34,32 @@ public class CrmCustomerContactServiceImpl implements ICrmCustomerContactService private final CrmCustomerContactMapper baseMapper; + /** + * 客户管理员角色权限字符 + */ + private static final String CRM_CUSTOMER_ADMIN_ROLE_KEY = "KHMA"; + + /** + * 是否具备客户全量数据权限(客户管理员角色或超级管理员) + */ + private boolean isCrmCustomerDataAdmin() { + return LoginHelper.isSuperAdmin() || StpUtil.hasRole(CRM_CUSTOMER_ADMIN_ROLE_KEY); + } + + /** + * 无客户管理员角色时仅查询本人创建的数据 + */ + private void applyCustomerDataScope(MPJLambdaWrapper lqw) { + if (isCrmCustomerDataAdmin()) { + return; + } + Long userId = LoginHelper.getUserId(); + if (userId == null) { + lqw.eq(CrmCustomerContact::getContactId, -1L); + return; + } + lqw.eq(CrmCustomerContact::getCreateBy, userId); + } /** * 查询客户联系人信息 * @@ -91,6 +118,7 @@ public class CrmCustomerContactServiceImpl implements ICrmCustomerContactService .eq(StringUtils.isNotBlank(bo.getWechatAccount()), CrmCustomerContact::getWechatAccount, bo.getWechatAccount()) .eq(StringUtils.isNotBlank(bo.getQqNumber()), CrmCustomerContact::getQqNumber, bo.getQqNumber()) .eq(StringUtils.isNotBlank(bo.getActiveFlag()), CrmCustomerContact::getActiveFlag, bo.getActiveFlag()); + applyCustomerDataScope(lqw); return lqw; } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmCustomerInfoServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmCustomerInfoServiceImpl.java index a9da3b0b..e7f80bf6 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmCustomerInfoServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/crm/service/impl/CrmCustomerInfoServiceImpl.java @@ -1,13 +1,16 @@ package org.dromara.oa.crm.service.impl; +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.util.ObjectUtil; +import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.satoken.utils.LoginHelper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; -import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Service; import org.dromara.oa.crm.domain.bo.CrmCustomerInfoBo; @@ -30,8 +33,35 @@ import java.util.Collection; @Service public class CrmCustomerInfoServiceImpl implements ICrmCustomerInfoService { + /** + * 客户管理员角色权限字符 + */ + private static final String CRM_CUSTOMER_ADMIN_ROLE_KEY = "KHMA"; + private final CrmCustomerInfoMapper baseMapper; + /** + * 是否具备客户全量数据权限(客户管理员角色或超级管理员) + */ + private boolean isCrmCustomerDataAdmin() { + return LoginHelper.isSuperAdmin() || StpUtil.hasRole(CRM_CUSTOMER_ADMIN_ROLE_KEY); + } + + /** + * 无客户管理员角色时仅查询本人创建的数据 + */ + private void applyCustomerDataScope(MPJLambdaWrapper lqw) { + if (isCrmCustomerDataAdmin()) { + return; + } + Long userId = LoginHelper.getUserId(); + if (userId == null) { + lqw.eq(CrmCustomerInfo::getCustomerId, -1L); + return; + } + lqw.eq(CrmCustomerInfo::getCreateBy, userId); + } + /** * 查询客户信息 * @@ -94,6 +124,7 @@ public class CrmCustomerInfoServiceImpl implements ICrmCustomerInfoService { .eq(StringUtils.isNotBlank(bo.getOurCompanyFlag()), CrmCustomerInfo::getOurCompanyFlag, bo.getOurCompanyFlag()) .eq(bo.getParentCustomerId() != null, CrmCustomerInfo::getParentCustomerId, bo.getParentCustomerId()) .eq("t.del_flag", "0"); + applyCustomerDataScope(lqw); return lqw; }