Commit 3f8fa6b1bcdb45fff1a25d82d6ecb56a5017b399
1 parent
a8f6a3d3
✨ CRM:简化 CRM 数据权限的实现
Showing
14 changed files
with
56 additions
and
134 deletions
yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/permission/CrmPermissionLevelEnum.java
| ... | ... | @@ -10,6 +10,8 @@ import java.util.Arrays; |
| 10 | 10 | /** |
| 11 | 11 | * CRM 数据权限级别枚举 |
| 12 | 12 | * |
| 13 | + * OWNER > WRITE > READ | |
| 14 | + * | |
| 13 | 15 | * @author HUIHUI |
| 14 | 16 | */ |
| 15 | 17 | @Getter |
| ... | ... | @@ -17,8 +19,8 @@ import java.util.Arrays; |
| 17 | 19 | public enum CrmPermissionLevelEnum implements IntArrayValuable { |
| 18 | 20 | |
| 19 | 21 | OWNER(1, "负责人"), |
| 20 | - READ(2, "读"), | |
| 21 | - WRITE(3, "写"); | |
| 22 | + READ(2, "只读"), | |
| 23 | + WRITE(3, "读写"); | |
| 22 | 24 | |
| 23 | 25 | public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CrmPermissionLevelEnum::getLevel).toArray(); |
| 24 | 26 | ... | ... |
yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/permission/CrmPermissionRoleCodeEnum.java deleted
| 1 | -package cn.iocoder.yudao.module.crm.enums.permission; | |
| 2 | - | |
| 3 | -import lombok.AllArgsConstructor; | |
| 4 | -import lombok.Getter; | |
| 5 | - | |
| 6 | -/** | |
| 7 | - * Crm 数据权限角色枚举 | |
| 8 | - * | |
| 9 | - * @author HUIHUI | |
| 10 | - */ | |
| 11 | -@Getter | |
| 12 | -@AllArgsConstructor | |
| 13 | -public enum CrmPermissionRoleCodeEnum { | |
| 14 | - | |
| 15 | - CRM_ADMIN("crm_admin", "CRM 管理员"); | |
| 16 | - | |
| 17 | - /** | |
| 18 | - * 角色标识 | |
| 19 | - */ | |
| 20 | - private String code; | |
| 21 | - /** | |
| 22 | - * 角色名称 | |
| 23 | - */ | |
| 24 | - private String name; | |
| 25 | - | |
| 26 | -} | |
| 27 | - |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/business/CrmBusinessMapper.java
| ... | ... | @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX; |
| 7 | 7 | import cn.iocoder.yudao.module.crm.controller.admin.business.vo.business.CrmBusinessPageReqVO; |
| 8 | 8 | import cn.iocoder.yudao.module.crm.dal.dataobject.business.CrmBusinessDO; |
| 9 | 9 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 10 | -import cn.iocoder.yudao.module.crm.util.CrmQueryWrapperUtils; | |
| 10 | +import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils; | |
| 11 | 11 | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| 12 | 12 | import org.apache.ibatis.annotations.Mapper; |
| 13 | 13 | |
| ... | ... | @@ -45,7 +45,7 @@ public interface CrmBusinessMapper extends BaseMapperX<CrmBusinessDO> { |
| 45 | 45 | default PageResult<CrmBusinessDO> selectPage(CrmBusinessPageReqVO pageReqVO, Long userId) { |
| 46 | 46 | MPJLambdaWrapperX<CrmBusinessDO> query = new MPJLambdaWrapperX<>(); |
| 47 | 47 | // 拼接数据权限的查询条件 |
| 48 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_BUSINESS.getType(), | |
| 48 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_BUSINESS.getType(), | |
| 49 | 49 | CrmBusinessDO::getId, userId, pageReqVO.getSceneType(), Boolean.FALSE); |
| 50 | 50 | // 拼接自身的查询条件 |
| 51 | 51 | query.selectAll(CrmBusinessDO.class) |
| ... | ... | @@ -57,7 +57,7 @@ public interface CrmBusinessMapper extends BaseMapperX<CrmBusinessDO> { |
| 57 | 57 | default List<CrmBusinessDO> selectBatchIds(Collection<Long> ids, Long userId) { |
| 58 | 58 | MPJLambdaWrapperX<CrmBusinessDO> query = new MPJLambdaWrapperX<>(); |
| 59 | 59 | // 拼接数据权限的查询条件 |
| 60 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_BUSINESS.getType(), ids, userId); | |
| 60 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_BUSINESS.getType(), ids, userId); | |
| 61 | 61 | // 拼接自身的查询条件 |
| 62 | 62 | query.selectAll(CrmBusinessDO.class).in(CrmBusinessDO::getId, ids).orderByDesc(CrmBusinessDO::getId); |
| 63 | 63 | return selectJoinList(CrmBusinessDO.class, query); | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/clue/CrmClueMapper.java
| ... | ... | @@ -7,7 +7,7 @@ import cn.iocoder.yudao.module.crm.controller.admin.clue.vo.CrmCluePageReqVO; |
| 7 | 7 | import cn.iocoder.yudao.module.crm.dal.dataobject.clue.CrmClueDO; |
| 8 | 8 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 9 | 9 | import cn.iocoder.yudao.module.crm.enums.common.CrmSceneTypeEnum; |
| 10 | -import cn.iocoder.yudao.module.crm.util.CrmQueryWrapperUtils; | |
| 10 | +import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils; | |
| 11 | 11 | import org.apache.ibatis.annotations.Mapper; |
| 12 | 12 | |
| 13 | 13 | import java.util.Collection; |
| ... | ... | @@ -24,7 +24,7 @@ public interface CrmClueMapper extends BaseMapperX<CrmClueDO> { |
| 24 | 24 | default PageResult<CrmClueDO> selectPage(CrmCluePageReqVO pageReqVO, Long userId) { |
| 25 | 25 | MPJLambdaWrapperX<CrmClueDO> query = new MPJLambdaWrapperX<>(); |
| 26 | 26 | // 拼接数据权限的查询条件 |
| 27 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CLUE.getType(), | |
| 27 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CLUE.getType(), | |
| 28 | 28 | CrmClueDO::getId, userId, pageReqVO.getSceneType(), pageReqVO.getPool()); |
| 29 | 29 | // 拼接自身的查询条件 |
| 30 | 30 | query.selectAll(CrmClueDO.class) |
| ... | ... | @@ -43,7 +43,7 @@ public interface CrmClueMapper extends BaseMapperX<CrmClueDO> { |
| 43 | 43 | default List<CrmClueDO> selectBatchIds(Collection<Long> ids, Long userId) { |
| 44 | 44 | MPJLambdaWrapperX<CrmClueDO> query = new MPJLambdaWrapperX<>(); |
| 45 | 45 | // 拼接数据权限的查询条件 |
| 46 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CLUE.getType(), ids, userId); | |
| 46 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CLUE.getType(), ids, userId); | |
| 47 | 47 | query.selectAll(CrmClueDO.class).in(CrmClueDO::getId, ids).orderByDesc(CrmClueDO::getId); |
| 48 | 48 | // 拼接自身的查询条件 |
| 49 | 49 | return selectJoinList(CrmClueDO.class, query); |
| ... | ... | @@ -52,7 +52,7 @@ public interface CrmClueMapper extends BaseMapperX<CrmClueDO> { |
| 52 | 52 | default Long selectCountByFollow(Long userId) { |
| 53 | 53 | MPJLambdaWrapperX<CrmClueDO> query = new MPJLambdaWrapperX<>(); |
| 54 | 54 | // 我负责的 + 非公海 |
| 55 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CLUE.getType(), | |
| 55 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CLUE.getType(), | |
| 56 | 56 | CrmClueDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); |
| 57 | 57 | // 未跟进 + 未转化 |
| 58 | 58 | query.eq(CrmClueDO::getFollowUpStatus, false) | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contact/CrmContactMapper.java
| ... | ... | @@ -7,7 +7,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX; |
| 7 | 7 | import cn.iocoder.yudao.module.crm.controller.admin.contact.vo.CrmContactPageReqVO; |
| 8 | 8 | import cn.iocoder.yudao.module.crm.dal.dataobject.contact.CrmContactDO; |
| 9 | 9 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 10 | -import cn.iocoder.yudao.module.crm.util.CrmQueryWrapperUtils; | |
| 10 | +import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils; | |
| 11 | 11 | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| 12 | 12 | import org.apache.ibatis.annotations.Mapper; |
| 13 | 13 | |
| ... | ... | @@ -55,7 +55,7 @@ public interface CrmContactMapper extends BaseMapperX<CrmContactDO> { |
| 55 | 55 | default PageResult<CrmContactDO> selectPage(CrmContactPageReqVO pageReqVO, Long userId) { |
| 56 | 56 | MPJLambdaWrapperX<CrmContactDO> query = new MPJLambdaWrapperX<>(); |
| 57 | 57 | // 拼接数据权限的查询条件 |
| 58 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTACT.getType(), | |
| 58 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTACT.getType(), | |
| 59 | 59 | CrmContactDO::getId, userId, pageReqVO.getSceneType(), Boolean.FALSE); |
| 60 | 60 | // 拼接自身的查询条件 |
| 61 | 61 | query.selectAll(CrmContactDO.class) |
| ... | ... | @@ -72,7 +72,7 @@ public interface CrmContactMapper extends BaseMapperX<CrmContactDO> { |
| 72 | 72 | default List<CrmContactDO> selectBatchIds(Collection<Long> ids, Long ownerUserId) { |
| 73 | 73 | MPJLambdaWrapperX<CrmContactDO> query = new MPJLambdaWrapperX<>(); |
| 74 | 74 | // 拼接数据权限的查询条件 |
| 75 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTACT.getType(), ids, ownerUserId); | |
| 75 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTACT.getType(), ids, ownerUserId); | |
| 76 | 76 | query.selectAll(CrmContactDO.class).in(CrmContactDO::getId, ids).orderByDesc(CrmContactDO::getId); |
| 77 | 77 | return selectJoinList(CrmContactDO.class, query); |
| 78 | 78 | } | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/contract/CrmContractMapper.java
| ... | ... | @@ -10,7 +10,7 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.contract.CrmContractDO; |
| 10 | 10 | import cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum; |
| 11 | 11 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 12 | 12 | import cn.iocoder.yudao.module.crm.enums.common.CrmSceneTypeEnum; |
| 13 | -import cn.iocoder.yudao.module.crm.util.CrmQueryWrapperUtils; | |
| 13 | +import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils; | |
| 14 | 14 | import org.apache.ibatis.annotations.Mapper; |
| 15 | 15 | |
| 16 | 16 | import java.time.LocalDateTime; |
| ... | ... | @@ -42,7 +42,7 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> { |
| 42 | 42 | default PageResult<CrmContractDO> selectPage(CrmContractPageReqVO pageReqVO, Long userId) { |
| 43 | 43 | MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>(); |
| 44 | 44 | // 拼接数据权限的查询条件 |
| 45 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), | |
| 45 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), | |
| 46 | 46 | CrmContractDO::getId, userId, pageReqVO.getSceneType(), Boolean.FALSE); |
| 47 | 47 | // 拼接自身的查询条件 |
| 48 | 48 | query.selectAll(CrmContractDO.class) |
| ... | ... | @@ -71,7 +71,7 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> { |
| 71 | 71 | default List<CrmContractDO> selectBatchIds(Collection<Long> ids, Long userId) { |
| 72 | 72 | MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>(); |
| 73 | 73 | // 构建数据权限连表条件 |
| 74 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), ids, userId); | |
| 74 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), ids, userId); | |
| 75 | 75 | // 拼接自身的查询条件 |
| 76 | 76 | query.selectAll(CrmContractDO.class).in(CrmContractDO::getId, ids).orderByDesc(CrmContractDO::getId); |
| 77 | 77 | return selectJoinList(CrmContractDO.class, query); |
| ... | ... | @@ -88,7 +88,7 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> { |
| 88 | 88 | default Long selectCheckContractCount(Long userId) { |
| 89 | 89 | MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>(); |
| 90 | 90 | // 我负责的 + 非公海 |
| 91 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), | |
| 91 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), | |
| 92 | 92 | CrmContractDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); |
| 93 | 93 | // 未提交 or 审核不通过 |
| 94 | 94 | query.in(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.DRAFT.getStatus(), CrmAuditStatusEnum.REJECT.getStatus()); |
| ... | ... | @@ -98,7 +98,7 @@ public interface CrmContractMapper extends BaseMapperX<CrmContractDO> { |
| 98 | 98 | default Long selectEndContractCount(Long userId) { |
| 99 | 99 | MPJLambdaWrapperX<CrmContractDO> query = new MPJLambdaWrapperX<>(); |
| 100 | 100 | // 我负责的 + 非公海 |
| 101 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), | |
| 101 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CONTRACT.getType(), | |
| 102 | 102 | CrmContractDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); |
| 103 | 103 | // 即将到期 |
| 104 | 104 | LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now()); | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/customer/CrmCustomerMapper.java
| ... | ... | @@ -12,7 +12,7 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerDO; |
| 12 | 12 | import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerPoolConfigDO; |
| 13 | 13 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 14 | 14 | import cn.iocoder.yudao.module.crm.enums.common.CrmSceneTypeEnum; |
| 15 | -import cn.iocoder.yudao.module.crm.util.CrmQueryWrapperUtils; | |
| 15 | +import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils; | |
| 16 | 16 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| 17 | 17 | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; |
| 18 | 18 | import org.apache.ibatis.annotations.Mapper; |
| ... | ... | @@ -52,7 +52,7 @@ public interface CrmCustomerMapper extends BaseMapperX<CrmCustomerDO> { |
| 52 | 52 | default PageResult<CrmCustomerDO> selectPage(CrmCustomerPageReqVO pageReqVO, Long ownerUserId) { |
| 53 | 53 | MPJLambdaWrapperX<CrmCustomerDO> query = new MPJLambdaWrapperX<>(); |
| 54 | 54 | // 拼接数据权限的查询条件 |
| 55 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), | |
| 55 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), | |
| 56 | 56 | CrmCustomerDO::getId, ownerUserId, pageReqVO.getSceneType(), pageReqVO.getPool()); |
| 57 | 57 | // 拼接自身的查询条件 |
| 58 | 58 | query.selectAll(CrmCustomerDO.class) |
| ... | ... | @@ -84,7 +84,7 @@ public interface CrmCustomerMapper extends BaseMapperX<CrmCustomerDO> { |
| 84 | 84 | default List<CrmCustomerDO> selectBatchIds(Collection<Long> ids, Long ownerUserId) { |
| 85 | 85 | MPJLambdaWrapperX<CrmCustomerDO> query = new MPJLambdaWrapperX<>(); |
| 86 | 86 | // 拼接数据权限的查询条件 |
| 87 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), ids, ownerUserId); | |
| 87 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), ids, ownerUserId); | |
| 88 | 88 | // 拼接自身的查询条件 |
| 89 | 89 | query.selectAll(CrmCustomerDO.class).in(CrmCustomerDO::getId, ids).orderByDesc(CrmCustomerDO::getId); |
| 90 | 90 | return selectJoinList(CrmCustomerDO.class, query); |
| ... | ... | @@ -113,7 +113,7 @@ public interface CrmCustomerMapper extends BaseMapperX<CrmCustomerDO> { |
| 113 | 113 | Long ownerUserId) { |
| 114 | 114 | MPJLambdaWrapperX<CrmCustomerDO> query = new MPJLambdaWrapperX<>(); |
| 115 | 115 | // 拼接数据权限的查询条件 |
| 116 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), | |
| 116 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), | |
| 117 | 117 | CrmCustomerDO::getId, ownerUserId, pageReqVO.getSceneType(), null); |
| 118 | 118 | |
| 119 | 119 | // 未锁定 + 未成交 |
| ... | ... | @@ -167,7 +167,7 @@ public interface CrmCustomerMapper extends BaseMapperX<CrmCustomerDO> { |
| 167 | 167 | default Long selectCountByTodayContact(Long ownerUserId) { |
| 168 | 168 | MPJLambdaWrapperX<CrmCustomerDO> query = new MPJLambdaWrapperX<>(); |
| 169 | 169 | // 我负责的 + 非公海 |
| 170 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), | |
| 170 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), | |
| 171 | 171 | CrmCustomerDO::getId, ownerUserId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); |
| 172 | 172 | // 今天需联系 |
| 173 | 173 | LocalDateTime beginOfToday = LocalDateTimeUtil.beginOfDay(LocalDateTime.now()); |
| ... | ... | @@ -179,7 +179,7 @@ public interface CrmCustomerMapper extends BaseMapperX<CrmCustomerDO> { |
| 179 | 179 | default Long selectCountByFollow(Long ownerUserId) { |
| 180 | 180 | MPJLambdaWrapperX<CrmCustomerDO> query = new MPJLambdaWrapperX<>(); |
| 181 | 181 | // 我负责的 + 非公海 |
| 182 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), | |
| 182 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_CUSTOMER.getType(), | |
| 183 | 183 | CrmCustomerDO::getId, ownerUserId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); |
| 184 | 184 | // 未跟进 |
| 185 | 185 | query.eq(CrmClueDO::getFollowUpStatus, false); | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivableMapper.java
| ... | ... | @@ -10,8 +10,7 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivableDO; |
| 10 | 10 | import cn.iocoder.yudao.module.crm.enums.common.CrmAuditStatusEnum; |
| 11 | 11 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 12 | 12 | import cn.iocoder.yudao.module.crm.enums.common.CrmSceneTypeEnum; |
| 13 | -import cn.iocoder.yudao.module.crm.util.CrmQueryWrapperUtils; | |
| 14 | -import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | |
| 13 | +import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils; | |
| 15 | 14 | import org.apache.ibatis.annotations.Mapper; |
| 16 | 15 | |
| 17 | 16 | import java.util.Collection; |
| ... | ... | @@ -25,12 +24,6 @@ import java.util.List; |
| 25 | 24 | @Mapper |
| 26 | 25 | public interface CrmReceivableMapper extends BaseMapperX<CrmReceivableDO> { |
| 27 | 26 | |
| 28 | - default int updateOwnerUserIdById(Long id, Long ownerUserId) { | |
| 29 | - return update(new LambdaUpdateWrapper<CrmReceivableDO>() | |
| 30 | - .eq(CrmReceivableDO::getId, id) | |
| 31 | - .set(CrmReceivableDO::getOwnerUserId, ownerUserId)); | |
| 32 | - } | |
| 33 | - | |
| 34 | 27 | default PageResult<CrmReceivableDO> selectPageByCustomerId(CrmReceivablePageReqVO reqVO) { |
| 35 | 28 | return selectPage(reqVO, new LambdaQueryWrapperX<CrmReceivableDO>() |
| 36 | 29 | .eq(CrmReceivableDO::getCustomerId, reqVO.getCustomerId()) // 必须传递 |
| ... | ... | @@ -42,7 +35,7 @@ public interface CrmReceivableMapper extends BaseMapperX<CrmReceivableDO> { |
| 42 | 35 | default PageResult<CrmReceivableDO> selectPage(CrmReceivablePageReqVO pageReqVO, Long userId) { |
| 43 | 36 | MPJLambdaWrapperX<CrmReceivableDO> query = new MPJLambdaWrapperX<>(); |
| 44 | 37 | // 拼接数据权限的查询条件 |
| 45 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE.getType(), | |
| 38 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE.getType(), | |
| 46 | 39 | CrmReceivableDO::getId, userId, pageReqVO.getSceneType(), Boolean.FALSE); |
| 47 | 40 | // 拼接自身的查询条件 |
| 48 | 41 | query.selectAll(CrmReceivableDO.class) |
| ... | ... | @@ -56,7 +49,7 @@ public interface CrmReceivableMapper extends BaseMapperX<CrmReceivableDO> { |
| 56 | 49 | default List<CrmReceivableDO> selectBatchIds(Collection<Long> ids, Long userId) { |
| 57 | 50 | MPJLambdaWrapperX<CrmReceivableDO> query = new MPJLambdaWrapperX<>(); |
| 58 | 51 | // 拼接数据权限的查询条件 |
| 59 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE.getType(), ids, userId); | |
| 52 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE.getType(), ids, userId); | |
| 60 | 53 | // 拼接自身的查询条件 |
| 61 | 54 | query.selectAll(CrmReceivableDO.class).in(CrmReceivableDO::getId, ids).orderByDesc(CrmReceivableDO::getId); |
| 62 | 55 | return selectJoinList(CrmReceivableDO.class, query); |
| ... | ... | @@ -65,7 +58,7 @@ public interface CrmReceivableMapper extends BaseMapperX<CrmReceivableDO> { |
| 65 | 58 | default Long selectCheckReceivablesCount(Long userId) { |
| 66 | 59 | MPJLambdaWrapperX<CrmReceivableDO> query = new MPJLambdaWrapperX<>(); |
| 67 | 60 | // 我负责的 + 非公海 |
| 68 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE.getType(), | |
| 61 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE.getType(), | |
| 69 | 62 | CrmReceivableDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); |
| 70 | 63 | // 未提交 or 审核不通过 |
| 71 | 64 | query.in(CrmContractDO::getAuditStatus, CrmAuditStatusEnum.DRAFT.getStatus(), CrmAuditStatusEnum.REJECT.getStatus()); | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/receivable/CrmReceivablePlanMapper.java
| ... | ... | @@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.crm.controller.admin.receivable.vo.plan.CrmReceiv |
| 9 | 9 | import cn.iocoder.yudao.module.crm.dal.dataobject.receivable.CrmReceivablePlanDO; |
| 10 | 10 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 11 | 11 | import cn.iocoder.yudao.module.crm.enums.common.CrmSceneTypeEnum; |
| 12 | -import cn.iocoder.yudao.module.crm.util.CrmQueryWrapperUtils; | |
| 12 | +import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils; | |
| 13 | 13 | import org.apache.ibatis.annotations.Mapper; |
| 14 | 14 | |
| 15 | 15 | import java.time.LocalDateTime; |
| ... | ... | @@ -34,7 +34,7 @@ public interface CrmReceivablePlanMapper extends BaseMapperX<CrmReceivablePlanDO |
| 34 | 34 | default PageResult<CrmReceivablePlanDO> selectPage(CrmReceivablePlanPageReqVO pageReqVO, Long userId) { |
| 35 | 35 | MPJLambdaWrapperX<CrmReceivablePlanDO> query = new MPJLambdaWrapperX<>(); |
| 36 | 36 | // 拼接数据权限的查询条件 |
| 37 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE_PLAN.getType(), | |
| 37 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE_PLAN.getType(), | |
| 38 | 38 | CrmReceivablePlanDO::getId, userId, pageReqVO.getSceneType(), Boolean.FALSE); |
| 39 | 39 | // 拼接自身的查询条件 |
| 40 | 40 | query.selectAll(CrmReceivablePlanDO.class) |
| ... | ... | @@ -64,7 +64,7 @@ public interface CrmReceivablePlanMapper extends BaseMapperX<CrmReceivablePlanDO |
| 64 | 64 | default List<CrmReceivablePlanDO> selectBatchIds(Collection<Long> ids, Long userId) { |
| 65 | 65 | MPJLambdaWrapperX<CrmReceivablePlanDO> query = new MPJLambdaWrapperX<>(); |
| 66 | 66 | // 拼接数据权限的查询条件 |
| 67 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE_PLAN.getType(), ids, userId); | |
| 67 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE_PLAN.getType(), ids, userId); | |
| 68 | 68 | // 拼接自身的查询条件 |
| 69 | 69 | query.selectAll(CrmReceivablePlanDO.class).in(CrmReceivablePlanDO::getId, ids).orderByDesc(CrmReceivablePlanDO::getId); |
| 70 | 70 | return selectJoinList(CrmReceivablePlanDO.class, query); |
| ... | ... | @@ -73,7 +73,7 @@ public interface CrmReceivablePlanMapper extends BaseMapperX<CrmReceivablePlanDO |
| 73 | 73 | default Long selectRemindReceivablePlanCount(Long userId) { |
| 74 | 74 | MPJLambdaWrapperX<CrmReceivablePlanDO> query = new MPJLambdaWrapperX<>(); |
| 75 | 75 | // 我负责的 + 非公海 |
| 76 | - CrmQueryWrapperUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE_PLAN.getType(), | |
| 76 | + CrmPermissionUtils.appendPermissionCondition(query, CrmBizTypeEnum.CRM_RECEIVABLE_PLAN.getType(), | |
| 77 | 77 | CrmReceivablePlanDO::getId, userId, CrmSceneTypeEnum.OWNER.getType(), Boolean.FALSE); |
| 78 | 78 | // TODO: @dhb52 需要配置 提前提醒天数 |
| 79 | 79 | int REMIND_DAYS = 20; | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/aop/CrmPermissionAspect.java
| ... | ... | @@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO; |
| 9 | 9 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 10 | 10 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 11 | 11 | import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission; |
| 12 | -import cn.iocoder.yudao.module.crm.framework.permission.core.util.CrmPermissionUtils; | |
| 12 | +import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils; | |
| 13 | 13 | import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService; |
| 14 | 14 | import jakarta.annotation.Resource; |
| 15 | 15 | import lombok.extern.slf4j.Slf4j; | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/util/CrmPermissionUtils.java deleted
| 1 | -package cn.iocoder.yudao.module.crm.framework.permission.core.util; | |
| 2 | - | |
| 3 | -import cn.hutool.extra.spring.SpringUtil; | |
| 4 | -import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionRoleCodeEnum; | |
| 5 | -import cn.iocoder.yudao.module.system.api.permission.PermissionApi; | |
| 6 | - | |
| 7 | -import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; | |
| 8 | - | |
| 9 | -/** | |
| 10 | - * 数据权限工具类 | |
| 11 | - * | |
| 12 | - * @author HUIHUI | |
| 13 | - */ | |
| 14 | -public class CrmPermissionUtils { | |
| 15 | - | |
| 16 | - /** | |
| 17 | - * 校验用户是否是 CRM 管理员 | |
| 18 | - * | |
| 19 | - * @return 是/否 | |
| 20 | - */ | |
| 21 | - public static boolean isCrmAdmin() { | |
| 22 | - return SingletonManager.getPermissionApi().hasAnyRoles(getLoginUserId(), CrmPermissionRoleCodeEnum.CRM_ADMIN.getCode()); | |
| 23 | - } | |
| 24 | - | |
| 25 | - /** | |
| 26 | - * 静态内部类实现单例获取 | |
| 27 | - * | |
| 28 | - * @author HUIHUI | |
| 29 | - */ | |
| 30 | - private static class SingletonManager { | |
| 31 | - | |
| 32 | - private static final PermissionApi PERMISSION_API = SpringUtil.getBean(PermissionApi.class); | |
| 33 | - | |
| 34 | - public static PermissionApi getPermissionApi() { | |
| 35 | - return PERMISSION_API; | |
| 36 | - } | |
| 37 | - | |
| 38 | - } | |
| 39 | - | |
| 40 | -} |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java
| ... | ... | @@ -9,7 +9,7 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO; |
| 9 | 9 | import cn.iocoder.yudao.module.crm.dal.mysql.permission.CrmPermissionMapper; |
| 10 | 10 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 11 | 11 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 12 | -import cn.iocoder.yudao.module.crm.framework.permission.core.util.CrmPermissionUtils; | |
| 12 | +import cn.iocoder.yudao.module.crm.util.CrmPermissionUtils; | |
| 13 | 13 | import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO; |
| 14 | 14 | import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionTransferReqBO; |
| 15 | 15 | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; | ... | ... |
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/util/CrmQueryWrapperUtils.java renamed to yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/util/CrmPermissionUtils.java
| ... | ... | @@ -7,9 +7,10 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO; |
| 7 | 7 | import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum; |
| 8 | 8 | import cn.iocoder.yudao.module.crm.enums.common.CrmSceneTypeEnum; |
| 9 | 9 | import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum; |
| 10 | -import cn.iocoder.yudao.module.crm.framework.permission.core.util.CrmPermissionUtils; | |
| 10 | +import cn.iocoder.yudao.module.system.api.permission.PermissionApi; | |
| 11 | 11 | import cn.iocoder.yudao.module.system.api.user.AdminUserApi; |
| 12 | 12 | import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; |
| 13 | +import cn.iocoder.yudao.module.system.enums.permission.RoleCodeEnum; | |
| 13 | 14 | import com.baomidou.mybatisplus.core.toolkit.support.SFunction; |
| 14 | 15 | import com.github.yulichang.autoconfigure.MybatisPlusJoinProperties; |
| 15 | 16 | import com.github.yulichang.wrapper.MPJLambdaWrapper; |
| ... | ... | @@ -18,13 +19,24 @@ import java.util.Collection; |
| 18 | 19 | import java.util.List; |
| 19 | 20 | |
| 20 | 21 | import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; |
| 22 | +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; | |
| 21 | 23 | |
| 22 | 24 | /** |
| 23 | - * CRM 查询工具类 | |
| 25 | + * 数据权限工具类 | |
| 24 | 26 | * |
| 25 | 27 | * @author HUIHUI |
| 26 | 28 | */ |
| 27 | -public class CrmQueryWrapperUtils { | |
| 29 | +public class CrmPermissionUtils { | |
| 30 | + | |
| 31 | + /** | |
| 32 | + * 校验用户是否是 CRM 管理员 | |
| 33 | + * | |
| 34 | + * @return 是/否 | |
| 35 | + */ | |
| 36 | + public static boolean isCrmAdmin() { | |
| 37 | + PermissionApi permissionApi = SpringUtil.getBean(PermissionApi.class); | |
| 38 | + return permissionApi.hasAnyRoles(getLoginUserId(), RoleCodeEnum.CRM_ADMIN.getCode()); | |
| 39 | + } | |
| 28 | 40 | |
| 29 | 41 | /** |
| 30 | 42 | * 构造 CRM 数据类型数据分页查询条件 |
| ... | ... | @@ -38,7 +50,8 @@ public class CrmQueryWrapperUtils { |
| 38 | 50 | */ |
| 39 | 51 | public static <T extends MPJLambdaWrapper<?>, S> void appendPermissionCondition(T query, Integer bizType, SFunction<S, ?> bizId, |
| 40 | 52 | Long userId, Integer sceneType, Boolean pool) { |
| 41 | - final String ownerUserIdField = SingletonManager.getMybatisPlusJoinProperties().getTableAlias() + ".owner_user_id"; | |
| 53 | + MybatisPlusJoinProperties mybatisPlusJoinProperties = SpringUtil.getBean(MybatisPlusJoinProperties.class); | |
| 54 | + final String ownerUserIdField = mybatisPlusJoinProperties.getTableAlias() + ".owner_user_id"; | |
| 42 | 55 | // 1. 构建数据权限连表条件 |
| 43 | 56 | if (!CrmPermissionUtils.isCrmAdmin() && ObjUtil.notEqual(pool, Boolean.TRUE)) { // 管理员,公海不需要数据权限 |
| 44 | 57 | query.innerJoin(CrmPermissionDO.class, on -> on.eq(CrmPermissionDO::getBizType, bizType) |
| ... | ... | @@ -56,7 +69,8 @@ public class CrmQueryWrapperUtils { |
| 56 | 69 | } |
| 57 | 70 | // 2.3 场景三:下属负责的数据 |
| 58 | 71 | if (CrmSceneTypeEnum.isSubordinate(sceneType)) { |
| 59 | - List<AdminUserRespDTO> subordinateUsers = SingletonManager.getAdminUserApi().getUserListBySubordinate(userId); | |
| 72 | + AdminUserApi adminUserApi = SpringUtil.getBean(AdminUserApi.class); | |
| 73 | + List<AdminUserRespDTO> subordinateUsers = adminUserApi.getUserListBySubordinate(userId); | |
| 60 | 74 | if (CollUtil.isEmpty(subordinateUsers)) { |
| 61 | 75 | query.eq(ownerUserIdField, -1); // 不返回任何结果 |
| 62 | 76 | } else { |
| ... | ... | @@ -81,7 +95,7 @@ public class CrmQueryWrapperUtils { |
| 81 | 95 | * @param userId 用户编号 |
| 82 | 96 | */ |
| 83 | 97 | public static <T extends MPJLambdaWrapper<?>> void appendPermissionCondition(T query, Integer bizType, Collection<Long> bizIds, Long userId) { |
| 84 | - if (CrmPermissionUtils.isCrmAdmin()) {// 管理员不需要数据权限 | |
| 98 | + if (isCrmAdmin()) {// 管理员不需要数据权限 | |
| 85 | 99 | return; |
| 86 | 100 | } |
| 87 | 101 | query.innerJoin(CrmPermissionDO.class, on -> |
| ... | ... | @@ -89,25 +103,4 @@ public class CrmQueryWrapperUtils { |
| 89 | 103 | .eq(CollUtil.isNotEmpty(bizIds), CrmPermissionDO::getUserId, userId)); |
| 90 | 104 | } |
| 91 | 105 | |
| 92 | - /** | |
| 93 | - * 静态内部类实现单例获取 | |
| 94 | - * | |
| 95 | - * @author HUIHUI | |
| 96 | - */ | |
| 97 | - private static class SingletonManager { | |
| 98 | - | |
| 99 | - private static final AdminUserApi ADMIN_USER_API = SpringUtil.getBean(AdminUserApi.class); | |
| 100 | - | |
| 101 | - private static final MybatisPlusJoinProperties MYBATIS_PLUS_JOIN_PROPERTIES = SpringUtil.getBean(MybatisPlusJoinProperties.class); | |
| 102 | - | |
| 103 | - public static AdminUserApi getAdminUserApi() { | |
| 104 | - return ADMIN_USER_API; | |
| 105 | - } | |
| 106 | - | |
| 107 | - public static MybatisPlusJoinProperties getMybatisPlusJoinProperties() { | |
| 108 | - return MYBATIS_PLUS_JOIN_PROPERTIES; | |
| 109 | - } | |
| 110 | - | |
| 111 | - } | |
| 112 | - | |
| 113 | 106 | } | ... | ... |
yudao-module-system/yudao-module-system-api/src/main/java/cn/iocoder/yudao/module/system/enums/permission/RoleCodeEnum.java