mirror of
				https://gitee.com/hhyykk/ipms-sjy.git
				synced 2025-11-01 02:38:43 +08:00 
			
		
		
		
	✨ CRM:简化 CRM 数据权限的实现
This commit is contained in:
		| @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; | ||||
| import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; | ||||
| import cn.iocoder.yudao.module.crm.util.CrmQueryWrapperUtils; | ||||
| import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils; | ||||
| import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| @@ -45,7 +45,7 @@ public interface CrmBusinessMapper extends BaseMapperX<CrmBusinessDO> { | ||||
|     default PageResult<CrmBusinessDO> selectPage(CrmBusinessPageReqVO pageReqVO, Long userId) { | ||||
|         MPJLambdaWrapperX<CrmBusinessDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 拼接数据权限的查询条件 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_BUSINESS.getType(), | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_BUSINESS.getType(), | ||||
|                 CrmBusinessDO::getId, userId, pageReqVO.getSceneType(), Boolean.FALSE); | ||||
|         // 拼接自身的查询条件 | ||||
|         query.selectAll(CrmBusinessDO.class) | ||||
| @@ -57,7 +57,7 @@ public interface CrmBusinessMapper extends BaseMapperX<CrmBusinessDO> { | ||||
|     default List<CrmBusinessDO> selectBatchIds(Collection<Long> ids, Long userId) { | ||||
|         MPJLambdaWrapperX<CrmBusinessDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 拼接数据权限的查询条件 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_BUSINESS.getType(), ids, userId); | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_BUSINESS.getType(), ids, userId); | ||||
|         // 拼接自身的查询条件 | ||||
|         query.selectAll(CrmBusinessDO.class).in(CrmBusinessDO::getId, ids).orderByDesc(CrmBusinessDO::getId); | ||||
|         return selectJoinList(CrmBusinessDO.class, query); | ||||
|   | ||||
| @@ -7,7 +7,7 @@ import cn.iocoder.yudao.module.crm.controller.admin.clue.vo.CrmCluePageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.clue.CrmClueDO; | ||||
| import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; | ||||
| import cn.iocoder.yudao.module.crm.enums.common.CrmSceneTypeEnum; | ||||
| import cn.iocoder.yudao.module.crm.util.CrmQueryWrapperUtils; | ||||
| import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| import java.util.Collection; | ||||
| @@ -24,7 +24,7 @@ public interface CrmClueMapper extends BaseMapperX<CrmClueDO> { | ||||
|     default PageResult<CrmClueDO> selectPage(CrmCluePageReqVO pageReqVO, Long userId) { | ||||
|         MPJLambdaWrapperX<CrmClueDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 拼接数据权限的查询条件 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CLUE.getType(), | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CLUE.getType(), | ||||
|                 CrmClueDO::getId, userId, pageReqVO.getSceneType(), pageReqVO.getPool()); | ||||
|         // 拼接自身的查询条件 | ||||
|         query.selectAll(CrmClueDO.class) | ||||
| @@ -43,7 +43,7 @@ public interface CrmClueMapper extends BaseMapperX<CrmClueDO> { | ||||
|     default List<CrmClueDO> selectBatchIds(Collection<Long> ids, Long userId) { | ||||
|         MPJLambdaWrapperX<CrmClueDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 拼接数据权限的查询条件 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CLUE.getType(), ids, userId); | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CLUE.getType(), ids, userId); | ||||
|         query.selectAll(CrmClueDO.class).in(CrmClueDO::getId, ids).orderByDesc(CrmClueDO::getId); | ||||
|         // 拼接自身的查询条件 | ||||
|         return selectJoinList(CrmClueDO.class, query); | ||||
| @@ -52,7 +52,7 @@ public interface CrmClueMapper extends BaseMapperX<CrmClueDO> { | ||||
|     default Long selectCountByFollow(Long userId) { | ||||
|         MPJLambdaWrapperX<CrmClueDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 我负责的 + 非公海 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CLUE.getType(), | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CLUE.getType(), | ||||
|                 CrmClueDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); | ||||
|         // 未跟进 + 未转化 | ||||
|         query.eq(CrmClueDO::getFollowUpStatus, false) | ||||
|   | ||||
| @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX; | ||||
| import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactPageReqVO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO; | ||||
| import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; | ||||
| import cn.iocoder.yudao.module.crm.util.CrmQueryWrapperUtils; | ||||
| import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils; | ||||
| import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| @@ -55,7 +55,7 @@ public interface CrmContactMapper extends BaseMapperX<CrmContactDO> { | ||||
|     default PageResult<CrmContactDO> selectPage(CrmContactPageReqVO pageReqVO, Long userId) { | ||||
|         MPJLambdaWrapperX<CrmContactDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 拼接数据权限的查询条件 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTACT.getType(), | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTACT.getType(), | ||||
|                 CrmContactDO::getId, userId, pageReqVO.getSceneType(), Boolean.FALSE); | ||||
|         // 拼接自身的查询条件 | ||||
|         query.selectAll(CrmContactDO.class) | ||||
| @@ -72,7 +72,7 @@ public interface CrmContactMapper extends BaseMapperX<CrmContactDO> { | ||||
|     default List<CrmContactDO> selectBatchIds(Collection<Long> ids, Long ownerUserId) { | ||||
|         MPJLambdaWrapperX<CrmContactDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 拼接数据权限的查询条件 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTACT.getType(), ids, ownerUserId); | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTACT.getType(), ids, ownerUserId); | ||||
|         query.selectAll(CrmContactDO.class).in(CrmContactDO::getId, ids).orderByDesc(CrmContactDO::getId); | ||||
|         return selectJoinList(CrmContactDO.class, query); | ||||
|     } | ||||
|   | ||||
| @@ -10,7 +10,7 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO; | ||||
| import cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum; | ||||
| import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; | ||||
| import cn.iocoder.yudao.module.crm.enums.common.CrmSceneTypeEnum; | ||||
| import cn.iocoder.yudao.module.crm.util.CrmQueryWrapperUtils; | ||||
| import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| import java.time.LocalDateTime; | ||||
| @@ -42,7 +42,7 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> { | ||||
|     default PageResult<CrmContractDO> selectPage(CrmContractPageReqVO pageReqVO, Long userId) { | ||||
|         MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 拼接数据权限的查询条件 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), | ||||
|                 CrmContractDO::getId, userId, pageReqVO.getSceneType(), Boolean.FALSE); | ||||
|         // 拼接自身的查询条件 | ||||
|         query.selectAll(CrmContractDO.class) | ||||
| @@ -71,7 +71,7 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> { | ||||
|     default List<CrmContractDO> selectBatchIds(Collection<Long> ids, Long userId) { | ||||
|         MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 构建数据权限连表条件 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), ids, userId); | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), ids, userId); | ||||
|         // 拼接自身的查询条件 | ||||
|         query.selectAll(CrmContractDO.class).in(CrmContractDO::getId, ids).orderByDesc(CrmContractDO::getId); | ||||
|         return selectJoinList(CrmContractDO.class, query); | ||||
| @@ -88,7 +88,7 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> { | ||||
|     default Long selectCheckContractCount(Long userId) { | ||||
|         MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 我负责的 + 非公海 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), | ||||
|                 CrmContractDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); | ||||
|         // 未提交 or 审核不通过 | ||||
|         query.in(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.DRAFT.getStatus(), CrmAuditStatusEnum.REJECT.getStatus()); | ||||
| @@ -98,7 +98,7 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> { | ||||
|     default Long selectEndContractCount(Long userId) { | ||||
|         MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 我负责的 + 非公海 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), | ||||
|                 CrmContractDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); | ||||
|         // 即将到期 | ||||
|         LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now()); | ||||
|   | ||||
| @@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerPoolConfigDO; | ||||
| import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; | ||||
| import cn.iocoder.yudao.module.crm.enums.common.CrmSceneTypeEnum; | ||||
| import cn.iocoder.yudao.module.crm.util.CrmQueryWrapperUtils; | ||||
| import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils; | ||||
| import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||
| import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
| @@ -52,7 +52,7 @@ public interface CrmCustomerMapper extends BaseMapperX<CrmCustomerDO> { | ||||
|     default PageResult<CrmCustomerDO> selectPage(CrmCustomerPageReqVO pageReqVO, Long ownerUserId) { | ||||
|         MPJLambdaWrapperX<CrmCustomerDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 拼接数据权限的查询条件 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), | ||||
|                 CrmCustomerDO::getId, ownerUserId, pageReqVO.getSceneType(), pageReqVO.getPool()); | ||||
|         // 拼接自身的查询条件 | ||||
|         query.selectAll(CrmCustomerDO.class) | ||||
| @@ -84,7 +84,7 @@ public interface CrmCustomerMapper extends BaseMapperX<CrmCustomerDO> { | ||||
|     default List<CrmCustomerDO> selectBatchIds(Collection<Long> ids, Long ownerUserId) { | ||||
|         MPJLambdaWrapperX<CrmCustomerDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 拼接数据权限的查询条件 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), ids, ownerUserId); | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), ids, ownerUserId); | ||||
|         // 拼接自身的查询条件 | ||||
|         query.selectAll(CrmCustomerDO.class).in(CrmCustomerDO::getId, ids).orderByDesc(CrmCustomerDO::getId); | ||||
|         return selectJoinList(CrmCustomerDO.class, query); | ||||
| @@ -113,7 +113,7 @@ public interface CrmCustomerMapper extends BaseMapperX<CrmCustomerDO> { | ||||
|                                                                                     Long ownerUserId) { | ||||
|         MPJLambdaWrapperX<CrmCustomerDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 拼接数据权限的查询条件 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), | ||||
|                 CrmCustomerDO::getId, ownerUserId, pageReqVO.getSceneType(), null); | ||||
|  | ||||
|         // 未锁定 + 未成交 | ||||
| @@ -167,7 +167,7 @@ public interface CrmCustomerMapper extends BaseMapperX<CrmCustomerDO> { | ||||
|     default Long selectCountByTodayContact(Long ownerUserId) { | ||||
|         MPJLambdaWrapperX<CrmCustomerDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 我负责的 + 非公海 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), | ||||
|                 CrmCustomerDO::getId, ownerUserId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); | ||||
|         // 今天需联系 | ||||
|         LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now()); | ||||
| @@ -179,7 +179,7 @@ public interface CrmCustomerMapper extends BaseMapperX<CrmCustomerDO> { | ||||
|     default Long selectCountByFollow(Long ownerUserId) { | ||||
|         MPJLambdaWrapperX<CrmCustomerDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 我负责的 + 非公海 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), | ||||
|                 CrmCustomerDO::getId, ownerUserId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); | ||||
|         // 未跟进 | ||||
|         query.eq(CrmClueDO::getFollowUpStatus, false); | ||||
|   | ||||
| @@ -10,8 +10,7 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableDO; | ||||
| import cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum; | ||||
| import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; | ||||
| import cn.iocoder.yudao.module.crm.enums.common.CrmSceneTypeEnum; | ||||
| import cn.iocoder.yudao.module.crm.util.CrmQueryWrapperUtils; | ||||
| import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | ||||
| import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| import java.util.Collection; | ||||
| @@ -25,12 +24,6 @@ import java.util.List; | ||||
| @Mapper | ||||
| public interface CrmReceivableMapper extends BaseMapperX<CrmReceivableDO> { | ||||
|  | ||||
|     default int updateOwnerUserIdById(Long id, Long ownerUserId) { | ||||
|         return update(new LambdaUpdateWrapper<CrmReceivableDO>() | ||||
|                 .eq(CrmReceivableDO::getId, id) | ||||
|                 .set(CrmReceivableDO::getOwnerUserId, ownerUserId)); | ||||
|     } | ||||
|  | ||||
|     default PageResult<CrmReceivableDO> selectPageByCustomerId(CrmReceivablePageReqVO reqVO) { | ||||
|         return selectPage(reqVO, new LambdaQueryWrapperX<CrmReceivableDO>() | ||||
|                 .eq(CrmReceivableDO::getCustomerId, reqVO.getCustomerId()) // 必须传递 | ||||
| @@ -42,7 +35,7 @@ public interface CrmReceivableMapper extends BaseMapperX<CrmReceivableDO> { | ||||
|     default PageResult<CrmReceivableDO> selectPage(CrmReceivablePageReqVO pageReqVO, Long userId) { | ||||
|         MPJLambdaWrapperX<CrmReceivableDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 拼接数据权限的查询条件 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE.getType(), | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE.getType(), | ||||
|                 CrmReceivableDO::getId, userId, pageReqVO.getSceneType(), Boolean.FALSE); | ||||
|         // 拼接自身的查询条件 | ||||
|         query.selectAll(CrmReceivableDO.class) | ||||
| @@ -56,7 +49,7 @@ public interface CrmReceivableMapper extends BaseMapperX<CrmReceivableDO> { | ||||
|     default List<CrmReceivableDO> selectBatchIds(Collection<Long> ids, Long userId) { | ||||
|         MPJLambdaWrapperX<CrmReceivableDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 拼接数据权限的查询条件 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE.getType(), ids, userId); | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE.getType(), ids, userId); | ||||
|         // 拼接自身的查询条件 | ||||
|         query.selectAll(CrmReceivableDO.class).in(CrmReceivableDO::getId, ids).orderByDesc(CrmReceivableDO::getId); | ||||
|         return selectJoinList(CrmReceivableDO.class, query); | ||||
| @@ -65,7 +58,7 @@ public interface CrmReceivableMapper extends BaseMapperX<CrmReceivableDO> { | ||||
|     default Long selectCheckReceivablesCount(Long userId) { | ||||
|         MPJLambdaWrapperX<CrmReceivableDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 我负责的 + 非公海 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE.getType(), | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE.getType(), | ||||
|                 CrmReceivableDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); | ||||
|         // 未提交 or 审核不通过 | ||||
|         query.in(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.DRAFT.getStatus(), CrmAuditStatusEnum.REJECT.getStatus()); | ||||
|   | ||||
| @@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.plan.CrmReceiv | ||||
| import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivablePlanDO; | ||||
| import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; | ||||
| import cn.iocoder.yudao.module.crm.enums.common.CrmSceneTypeEnum; | ||||
| import cn.iocoder.yudao.module.crm.util.CrmQueryWrapperUtils; | ||||
| import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| import java.time.LocalDateTime; | ||||
| @@ -34,7 +34,7 @@ public interface CrmReceivablePlanMapper extends BaseMapperX<CrmReceivablePlanDO | ||||
|     default PageResult<CrmReceivablePlanDO> selectPage(CrmReceivablePlanPageReqVO pageReqVO, Long userId) { | ||||
|         MPJLambdaWrapperX<CrmReceivablePlanDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 拼接数据权限的查询条件 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE_PLAN.getType(), | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE_PLAN.getType(), | ||||
|                 CrmReceivablePlanDO::getId, userId, pageReqVO.getSceneType(), Boolean.FALSE); | ||||
|         // 拼接自身的查询条件 | ||||
|         query.selectAll(CrmReceivablePlanDO.class) | ||||
| @@ -64,7 +64,7 @@ public interface CrmReceivablePlanMapper extends BaseMapperX<CrmReceivablePlanDO | ||||
|     default List<CrmReceivablePlanDO> selectBatchIds(Collection<Long> ids, Long userId) { | ||||
|         MPJLambdaWrapperX<CrmReceivablePlanDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 拼接数据权限的查询条件 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE_PLAN.getType(), ids, userId); | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE_PLAN.getType(), ids, userId); | ||||
|         // 拼接自身的查询条件 | ||||
|         query.selectAll(CrmReceivablePlanDO.class).in(CrmReceivablePlanDO::getId, ids).orderByDesc(CrmReceivablePlanDO::getId); | ||||
|         return selectJoinList(CrmReceivablePlanDO.class, query); | ||||
| @@ -73,7 +73,7 @@ public interface CrmReceivablePlanMapper extends BaseMapperX<CrmReceivablePlanDO | ||||
|     default Long selectRemindReceivablePlanCount(Long userId) { | ||||
|         MPJLambdaWrapperX<CrmReceivablePlanDO> query = new MPJLambdaWrapperX<>(); | ||||
|         // 我负责的 + 非公海 | ||||
|         CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE_PLAN.getType(), | ||||
|         CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE_PLAN.getType(), | ||||
|                 CrmReceivablePlanDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); | ||||
|         // TODO: @dhb52 需要配置 提前提醒天数 | ||||
|         int REMIND_DAYS = 20; | ||||
|   | ||||
| @@ -9,7 +9,7 @@ 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.framework.permission.core.annotations.CrmPermission; | ||||
| import cn.iocoder.yudao.module.crm.framework.permission.core.util.CrmPermissionUtils; | ||||
| import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils; | ||||
| import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; | ||||
| import jakarta.annotation.Resource; | ||||
| import lombok.extern.slf4j.Slf4j; | ||||
|   | ||||
| @@ -1,40 +0,0 @@ | ||||
| package cn.iocoder.yudao.module.crm.framework.permission.core.util; | ||||
|  | ||||
| import cn.hutool.extra.spring.SpringUtil; | ||||
| import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionRoleCodeEnum; | ||||
| import cn.iocoder.yudao.module.system.api.permission.PermissionApi; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; | ||||
|  | ||||
| /** | ||||
|  * 数据权限工具类 | ||||
|  * | ||||
|  * @author HUIHUI | ||||
|  */ | ||||
| public class CrmPermissionUtils { | ||||
|  | ||||
|     /** | ||||
|      * 校验用户是否是 CRM 管理员 | ||||
|      * | ||||
|      * @return 是/否 | ||||
|      */ | ||||
|     public static boolean isCrmAdmin() { | ||||
|         return SingletonManager.getPermissionApi().hasAnyRoles(getLoginUserId(), CrmPermissionRoleCodeEnum.CRM_ADMIN.getCode()); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * 静态内部类实现单例获取 | ||||
|      * | ||||
|      * @author HUIHUI | ||||
|      */ | ||||
|     private static class SingletonManager { | ||||
|  | ||||
|         private static final PermissionApi PERMISSION_API = SpringUtil.getBean(PermissionApi.class); | ||||
|  | ||||
|         public static PermissionApi getPermissionApi() { | ||||
|             return PERMISSION_API; | ||||
|         } | ||||
|  | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO; | ||||
| import cn.iocoder.yudao.module.crm.dal.mysql.permission.CrmPermissionMapper; | ||||
| 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.util.CrmPermissionUtils; | ||||
| import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils; | ||||
| import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; | ||||
| import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionTransferReqBO; | ||||
| import cn.iocoder.yudao.module.system.api.user.AdminUserApi; | ||||
|   | ||||
| @@ -7,9 +7,10 @@ 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.common.CrmSceneTypeEnum; | ||||
| import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; | ||||
| import cn.iocoder.yudao.module.crm.framework.permission.core.util.CrmPermissionUtils; | ||||
| import cn.iocoder.yudao.module.system.api.permission.PermissionApi; | ||||
| import cn.iocoder.yudao.module.system.api.user.AdminUserApi; | ||||
| import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; | ||||
| import cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum; | ||||
| import com.baomidou.mybatisplus.core.toolkit.support.SFunction; | ||||
| import com.github.yulichang.autoconfigure.MybatisPlusJoinProperties; | ||||
| import com.github.yulichang.wrapper.MPJLambdaWrapper; | ||||
| @@ -18,13 +19,24 @@ import java.util.Collection; | ||||
| import java.util.List; | ||||
| 
 | ||||
| import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; | ||||
| import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; | ||||
| 
 | ||||
| /** | ||||
|  * CRM 查询工具类 | ||||
|  * 数据权限工具类 | ||||
|  * | ||||
|  * @author HUIHUI | ||||
|  */ | ||||
| public class CrmQueryWrapperUtils { | ||||
| public class CrmPermissionUtils { | ||||
| 
 | ||||
|     /** | ||||
|      * 校验用户是否是 CRM 管理员 | ||||
|      * | ||||
|      * @return 是/否 | ||||
|      */ | ||||
|     public static boolean isCrmAdmin() { | ||||
|         PermissionApi permissionApi = SpringUtil.getBean(PermissionApi.class); | ||||
|         return permissionApi.hasAnyRoles(getLoginUserId(), RoleCodeEnum.CRM_ADMIN.getCode()); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 构造 CRM 数据类型数据分页查询条件 | ||||
| @@ -38,7 +50,8 @@ public class CrmQueryWrapperUtils { | ||||
|      */ | ||||
|     public static <T extends MPJLambdaWrapper<?>, S> void appendPermissionCondition(T query, Integer bizType, SFunction<S, ?> bizId, | ||||
|                                                                                     Long userId, Integer sceneType, Boolean pool) { | ||||
|         final String ownerUserIdField = SingletonManager.getMybatisPlusJoinProperties().getTableAlias() + ".owner_user_id"; | ||||
|         MybatisPlusJoinProperties mybatisPlusJoinProperties = SpringUtil.getBean(MybatisPlusJoinProperties.class); | ||||
|         final String ownerUserIdField = mybatisPlusJoinProperties.getTableAlias() + ".owner_user_id"; | ||||
|         // 1. 构建数据权限连表条件 | ||||
|         if (!CrmPermissionUtils.isCrmAdmin() && ObjUtil.notEqual(pool, Boolean.TRUE)) { // 管理员,公海不需要数据权限 | ||||
|             query.innerJoin(CrmPermissionDO.class, on -> on.eq(CrmPermissionDO::getBizType, bizType) | ||||
| @@ -56,7 +69,8 @@ public class CrmQueryWrapperUtils { | ||||
|         } | ||||
|         // 2.3 场景三:下属负责的数据 | ||||
|         if (CrmSceneTypeEnum.isSubordinate(sceneType)) { | ||||
|             List<AdminUserRespDTO> subordinateUsers = SingletonManager.getAdminUserApi().getUserListBySubordinate(userId); | ||||
|             AdminUserApi adminUserApi = SpringUtil.getBean(AdminUserApi.class); | ||||
|             List<AdminUserRespDTO> subordinateUsers = adminUserApi.getUserListBySubordinate(userId); | ||||
|             if (CollUtil.isEmpty(subordinateUsers)) { | ||||
|                 query.eq(ownerUserIdField, -1); // 不返回任何结果 | ||||
|             } else { | ||||
| @@ -81,7 +95,7 @@ public class CrmQueryWrapperUtils { | ||||
|      * @param userId  用户编号 | ||||
|      */ | ||||
|     public static <T extends MPJLambdaWrapper<?>> void appendPermissionCondition(T query, Integer bizType, Collection<Long> bizIds, Long userId) { | ||||
|         if (CrmPermissionUtils.isCrmAdmin()) {// 管理员不需要数据权限 | ||||
|         if (isCrmAdmin()) {// 管理员不需要数据权限 | ||||
|             return; | ||||
|         } | ||||
|         query.innerJoin(CrmPermissionDO.class, on -> | ||||
| @@ -89,25 +103,4 @@ public class CrmQueryWrapperUtils { | ||||
|                         .eq(CollUtil.isNotEmpty(bizIds), CrmPermissionDO::getUserId, userId)); | ||||
|     } | ||||
| 
 | ||||
|     /** | ||||
|      * 静态内部类实现单例获取 | ||||
|      * | ||||
|      * @author HUIHUI | ||||
|      */ | ||||
|     private static class SingletonManager { | ||||
| 
 | ||||
|         private static final AdminUserApi ADMIN_USER_API = SpringUtil.getBean(AdminUserApi.class); | ||||
| 
 | ||||
|         private static final MybatisPlusJoinProperties MYBATIS_PLUS_JOIN_PROPERTIES = SpringUtil.getBean(MybatisPlusJoinProperties.class); | ||||
| 
 | ||||
|         public static AdminUserApi getAdminUserApi() { | ||||
|             return ADMIN_USER_API; | ||||
|         } | ||||
| 
 | ||||
|         public static MybatisPlusJoinProperties getMybatisPlusJoinProperties() { | ||||
|             return MYBATIS_PLUS_JOIN_PROPERTIES; | ||||
|         } | ||||
| 
 | ||||
|     } | ||||
| 
 | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 YunaiV
					YunaiV