From 79fe3222764bea9970a5c1682fc39361345e9a1c Mon Sep 17 00:00:00 2001 From: yinq Date: Fri, 5 Jun 2026 17:34:42 +0800 Subject: [PATCH] =?UTF-8?q?1.1.62=20=E5=90=88=E5=90=8C=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E3=80=81=E5=90=88=E5=90=8C=E6=89=A7=E8=A1=8C=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=9D=83=E9=99=90=E4=BB=85=E9=99=90=E6=9C=AC?= =?UTF-8?q?=E4=BA=BA=E6=88=96=E5=90=88=E5=90=8C=E7=AE=A1=E7=90=86=E8=A7=92?= =?UTF-8?q?=E8=89=B2=E8=83=BD=E7=9C=8B=E6=89=80=E6=9C=89=E5=90=88=E5=90=8C?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oa/erp/mapper/ErpContractInfoMapper.java | 20 +++---- .../oa/erp/mapper/ErpProjectInfoMapper.java | 11 ---- .../impl/ErpContractInfoServiceImpl.java | 33 +++++++++++ .../impl/ErpContractOrderServiceImpl.java | 57 +++++++++++++++++-- 4 files changed, 96 insertions(+), 25 deletions(-) diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractInfoMapper.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractInfoMapper.java index e6eef648..3c5b4144 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractInfoMapper.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpContractInfoMapper.java @@ -26,11 +26,11 @@ public interface ErpContractInfoMapper extends BaseMapperPlus selectCustomErpContractInfoVoList(@Param("page") Page page, @Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); /** @@ -39,11 +39,11 @@ public interface ErpContractInfoMapper extends BaseMapperPlus selectCustomErpContractInfoVoList(@Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpProjectInfoMapper.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpProjectInfoMapper.java index b7774181..ba02f9d6 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpProjectInfoMapper.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/mapper/ErpProjectInfoMapper.java @@ -67,17 +67,6 @@ public interface ErpProjectInfoMapper extends BaseMapperPlus selectErpProjectInfoVoJoinList(@Param("page") Page page, @Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); - /** - * 查询项目信息列表,主要财务应收款使用 - * - * @param queryWrapper 条件 - * @return 项目信息集合 - */ - @DataPermission({ - @DataColumn(key = "deptName", value = "t.dept_id"), - @DataColumn(key = "userName", value = "t.create_by") - }) - public List selectErpProjectInfoVoJoinList(@Param(Constants.WRAPPER) MPJLambdaWrapper queryWrapper); } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractInfoServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractInfoServiceImpl.java index 6baf6646..119ac18c 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractInfoServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractInfoServiceImpl.java @@ -1,7 +1,9 @@ package org.dromara.oa.erp.service.impl; +import cn.dev33.satoken.stp.StpUtil; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.convert.Convert; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.convert.NumberChineseFormatter; import cn.hutool.core.map.MapUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -22,6 +24,7 @@ import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.satoken.utils.LoginHelper; import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.oa.base.domain.bo.BaseRelationMaterialBo; import org.dromara.oa.base.domain.vo.BaseRelationMaterialVo; @@ -71,6 +74,11 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { /** 合同审批流程编码(与流程引擎中 flowCode 一致) */ public static final String FLOW_CODE_CONTRACT = "OAC"; + /** + * 合同管理员角色权限字符(sys_role.role_key),拥有后可查看全部合同数据 + */ + private static final String CONTRACT_ADMIN_ROLE_KEY = "HTGLSJQX"; + private final ErpContractInfoMapper baseMapper; private final ErpContractMaterialMapper contractMaterialMapper; @@ -86,6 +94,30 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { @DubboReference(timeout = 30000) private RemoteWorkflowService remoteWorkflowService; + /** + * 是否具备合同全量数据权限(合同管理员角色或超级管理员) + */ + private boolean isContractDataAdmin() { + return LoginHelper.isSuperAdmin() || StpUtil.hasRole(CONTRACT_ADMIN_ROLE_KEY); + } + + /** + * 无合同管理员角色时仅查询本人创建或当前合同负责人是本人的合同 + */ + private void applyContractDataScope(MPJLambdaWrapper lqw) { + if (isContractDataAdmin()) { + return; + } + Long userId = LoginHelper.getUserId(); + if (userId == null) { + lqw.eq(ErpContractInfo::getContractId, -1L); + return; + } + lqw.and(w -> w.eq(ErpContractInfo::getCreateBy, userId) + .or() + .eq(ErpContractInfo::getContractManagerId, userId)); + } + /** * 查询合同信息 * @@ -251,6 +283,7 @@ public class ErpContractInfoServiceImpl implements IErpContractInfoService { .eq(bo.getFrameworkValidPeriod() != null, ErpContractInfo::getFrameworkValidPeriod, bo.getFrameworkValidPeriod()) .eq("t.del_flag", "0") .eq("t.active_flag", "1"); + applyContractDataScope(lqw); return lqw; } diff --git a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractOrderServiceImpl.java b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractOrderServiceImpl.java index 7226f28c..a7dcd524 100644 --- a/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractOrderServiceImpl.java +++ b/ruoyi-modules/ruoyi-oa/src/main/java/org/dromara/oa/erp/service/impl/ErpContractOrderServiceImpl.java @@ -1,6 +1,8 @@ package org.dromara.oa.erp.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.dev33.satoken.stp.StpUtil; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; @@ -49,6 +51,7 @@ import org.dromara.oa.erp.domain.vo.ErpProjectTypeVo; import org.dromara.oa.erp.constant.ProjectCategoryConstant; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.helper.DataPermissionHelper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; @@ -105,6 +108,11 @@ public class ErpContractOrderServiceImpl implements IErpContractOrderService { */ private static final String FLOW_CODE_PROJECT = "xmsq"; + /** + * 合同管理员角色权限字符(sys_role.role_key),拥有后可查看/维护全部合同及合同执行数据 + */ + private static final String CONTRACT_ADMIN_ROLE_KEY = "HTGLSJQX"; + @DubboReference(timeout = 300000) private RemoteWorkflowService remoteWorkflowService; @@ -114,6 +122,47 @@ public class ErpContractOrderServiceImpl implements IErpContractOrderService { @DubboReference(timeout = 30000) private RemoteWmsShippingBillService remoteWmsShippingBillService; + /** + * 是否具备合同全量数据权限(合同管理员角色或超级管理员) + */ + private boolean isContractDataAdmin() { + return LoginHelper.isSuperAdmin() || StpUtil.hasRole(CONTRACT_ADMIN_ROLE_KEY); + } + + /** + * 无合同管理员角色时,仅查询关联合同为本人创建或本人负责管理的合同执行信息 + */ + private void applyContractOrderDataScope(MPJLambdaWrapper lqw) { + if (isContractDataAdmin()) { + return; + } + Long userId = LoginHelper.getUserId(); + if (userId == null) { + lqw.eq(ErpProjectInfo::getProjectId, -1L); + return; + } + lqw.apply("(c.create_by = {0} OR c.contract_manager_id = {0})", userId); + } + + /** + * 分页查询合同订单列表,忽略数据权限(用于后台自定义权限处理) + * @param page 分页对象 + * @param lqw 查询条件 + * @return 合同订单信息分页对象 + */ + private Page selectContractOrderPage(Page page, MPJLambdaWrapper lqw) { + return DataPermissionHelper.ignore(() -> projectInfoMapper.selectCustomErpProjectInfoVoList(page, lqw)); + } + + /** + * 查询合同订单列表,忽略数据权限(用于后台自定义权限处理) + * @param lqw 查询条件 + * @return 合同订单信息列表 + */ + private List selectContractOrderList(MPJLambdaWrapper lqw) { + return DataPermissionHelper.ignore(() -> projectInfoMapper.selectCustomErpProjectInfoVoList(lqw)); + } + /** * 查询合同订单(项目信息) * @@ -140,7 +189,7 @@ public class ErpContractOrderServiceImpl implements IErpContractOrderService { @Override public TableDataInfo queryPageList(ErpProjectInfoBo bo, PageQuery pageQuery) { MPJLambdaWrapper lqw = buildQueryWrapper(bo); - Page result = projectInfoMapper.selectCustomErpProjectInfoVoList(pageQuery.build(), lqw); + Page result = selectContractOrderPage(pageQuery.build(), lqw); return TableDataInfo.build(result); } @@ -154,7 +203,7 @@ public class ErpContractOrderServiceImpl implements IErpContractOrderService { String todoOwnerType = bo.getTodoOwnerType(); bo.setManagerId(null); MPJLambdaWrapper lqw = buildQueryWrapper(bo); - List baseList = projectInfoMapper.selectCustomErpProjectInfoVoList(lqw); + List baseList = selectContractOrderList(lqw); if (CollUtil.isEmpty(baseList)) { return baseList; } @@ -202,7 +251,7 @@ public class ErpContractOrderServiceImpl implements IErpContractOrderService { @Override public List queryList(ErpProjectInfoBo bo) { MPJLambdaWrapper lqw = buildQueryWrapper(bo); - return projectInfoMapper.selectCustomErpProjectInfoVoList(lqw); + return selectContractOrderList(lqw); } @Override @@ -246,9 +295,9 @@ public class ErpContractOrderServiceImpl implements IErpContractOrderService { .eq(StringUtils.isNotBlank(bo.getOrderInvoiceStatus()), ErpProjectInfo::getOrderInvoiceStatus, bo.getOrderInvoiceStatus()) .like(StringUtils.isNotBlank(bo.getContractCode()), "c.contract_code", bo.getContractCode()) .like(StringUtils.isNotBlank(bo.getContractName()), "c.contract_name", bo.getContractName()) - .eq(ErpProjectInfo::getProjectCategory, ProjectCategoryConstant.CONTRACT_ORDER) .eq("t.del_flag", "0") .orderByDesc(ErpProjectInfo::getCreateTime); + applyContractOrderDataScope(lqw); return lqw; }