Commit dd6981d90128d72d5e3d5fe678934969a691ea21

Authored by puhui999
2 parents 5dc1dbb3 3f8fa6b1

Merge remote-tracking branch 'yudao/develop' into develop

# Conflicts:
#	yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/receivable/CrmReceivablePlanServiceImpl.java
Showing 20 changed files with 83 additions and 193 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/controller/admin/customer/CrmCustomerLimitConfigController.java
... ... @@ -3,10 +3,11 @@ package cn.iocoder.yudao.module.crm.controller.admin.customer;
3 3 import cn.hutool.core.collection.CollUtil;
4 4 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
5 5 import cn.iocoder.yudao.framework.common.pojo.PageResult;
  6 +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
  7 +import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
6 8 import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigPageReqVO;
7 9 import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigRespVO;
8 10 import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigSaveReqVO;
9   -import cn.iocoder.yudao.module.crm.convert.customer.CrmCustomerLimitConfigConvert;
10 11 import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerLimitConfigDO;
11 12 import cn.iocoder.yudao.module.crm.service.customer.CrmCustomerLimitConfigService;
12 13 import cn.iocoder.yudao.module.system.api.dept.DeptApi;
... ... @@ -71,11 +72,14 @@ public class CrmCustomerLimitConfigController {
71 72 @Parameter(name = "id", description = "编号", required = true, example = "1024")
72 73 @PreAuthorize("@ss.hasPermission('crm:customer-limit-config:query')")
73 74 public CommonResult<CrmCustomerLimitConfigRespVO> getCustomerLimitConfig(@RequestParam("id") Long id) {
74   - CrmCustomerLimitConfigDO customerLimitConfig = customerLimitConfigService.getCustomerLimitConfig(id);
  75 + CrmCustomerLimitConfigDO limitConfig = customerLimitConfigService.getCustomerLimitConfig(id);
75 76 // 拼接数据
76   - Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(customerLimitConfig.getUserIds());
77   - Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(customerLimitConfig.getDeptIds());
78   - return success(CrmCustomerLimitConfigConvert.INSTANCE.convert(customerLimitConfig, userMap, deptMap));
  77 + Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(limitConfig.getUserIds());
  78 + Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(limitConfig.getDeptIds());
  79 + return success(BeanUtils.toBean(limitConfig, CrmCustomerLimitConfigRespVO.class, configVO -> {
  80 + configVO.setUsers(CollectionUtils.convertList(configVO.getUserIds(), userMap::get));
  81 + configVO.setDepts(CollectionUtils.convertList(configVO.getDeptIds(), deptMap::get));
  82 + }));
79 83 }
80 84  
81 85 @GetMapping("/page")
... ... @@ -91,7 +95,10 @@ public class CrmCustomerLimitConfigController {
91 95 convertSetByFlatMap(pageResult.getList(), CrmCustomerLimitConfigDO::getUserIds, Collection::stream));
92 96 Map<Long, DeptRespDTO> deptMap = deptApi.getDeptMap(
93 97 convertSetByFlatMap(pageResult.getList(), CrmCustomerLimitConfigDO::getDeptIds, Collection::stream));
94   - return success(CrmCustomerLimitConfigConvert.INSTANCE.convertPage(pageResult, userMap, deptMap));
  98 + return success(BeanUtils.toBean(pageResult, CrmCustomerLimitConfigRespVO.class, configVO -> {
  99 + configVO.setUsers(CollectionUtils.convertList(configVO.getUserIds(), userMap::get));
  100 + configVO.setDepts(CollectionUtils.convertList(configVO.getDeptIds(), deptMap::get));
  101 + }));
95 102 }
96 103  
97 104 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/customer/CrmCustomerLimitConfigConvert.java deleted
1   -package cn.iocoder.yudao.module.crm.convert.customer;
2   -
3   -import cn.iocoder.yudao.framework.common.pojo.PageResult;
4   -import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
5   -import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
6   -import cn.iocoder.yudao.module.crm.controller.admin.customer.vo.limitconfig.CrmCustomerLimitConfigRespVO;
7   -import cn.iocoder.yudao.module.crm.dal.dataobject.customer.CrmCustomerLimitConfigDO;
8   -import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
9   -import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
10   -import org.mapstruct.Mapper;
11   -import org.mapstruct.factory.Mappers;
12   -
13   -import java.util.List;
14   -import java.util.Map;
15   -
16   -/**
17   - * 客户限制配置 Convert
18   - *
19   - * @author Wanwan
20   - */
21   -@Mapper
22   -public interface CrmCustomerLimitConfigConvert {
23   -
24   - CrmCustomerLimitConfigConvert INSTANCE = Mappers.getMapper(CrmCustomerLimitConfigConvert.class);
25   -
26   - default PageResult<CrmCustomerLimitConfigRespVO> convertPage(
27   - PageResult<CrmCustomerLimitConfigDO> pageResult,
28   - Map<Long, AdminUserRespDTO> userMap, Map<Long, DeptRespDTO> deptMap) {
29   - List<CrmCustomerLimitConfigRespVO> list = CollectionUtils.convertList(pageResult.getList(),
30   - limitConfig -> convert(limitConfig, userMap, deptMap));
31   - return new PageResult<>(list, pageResult.getTotal());
32   - }
33   -
34   - default CrmCustomerLimitConfigRespVO convert(CrmCustomerLimitConfigDO limitConfig,
35   - Map<Long, AdminUserRespDTO> userMap, Map<Long, DeptRespDTO> deptMap) {
36   - CrmCustomerLimitConfigRespVO limitConfigVO = BeanUtils.toBean(limitConfig, CrmCustomerLimitConfigRespVO.class);
37   - limitConfigVO.setUsers(CollectionUtils.convertList(limitConfigVO.getUserIds(), userMap::get));
38   - limitConfigVO.setDepts(CollectionUtils.convertList(limitConfigVO.getDeptIds(), deptMap::get));
39   - return limitConfigVO;
40   - }
41   -
42   -}
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&lt;CrmBusinessDO&gt; {
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&lt;CrmBusinessDO&gt; {
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&lt;CrmClueDO&gt; {
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&lt;CrmClueDO&gt; {
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&lt;CrmClueDO&gt; {
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&lt;CrmContactDO&gt; {
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&lt;CrmContactDO&gt; {
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&lt;CrmContractDO&gt; {
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&lt;CrmContractDO&gt; {
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&lt;CrmContractDO&gt; {
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&lt;CrmContractDO&gt; {
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&lt;CrmCustomerDO&gt; {
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&lt;CrmCustomerDO&gt; {
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&lt;CrmCustomerDO&gt; {
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&lt;CrmCustomerDO&gt; {
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&lt;CrmCustomerDO&gt; {
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&lt;CrmReceivableDO&gt; {
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&lt;CrmReceivableDO&gt; {
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&lt;CrmReceivableDO&gt; {
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&lt;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&lt;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&lt;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/contract/CrmContractServiceImpl.java
... ... @@ -63,7 +63,7 @@ public class CrmContractServiceImpl implements CrmContractService {
63 63 /**
64 64 * BPM 合同审批流程标识
65 65 */
66   - public static final String CONTRACT_APPROVE = "contract-approve";
  66 + public static final String BPM_PROCESS_DEFINITION_KEY = "crm-contract-audit";
67 67  
68 68 @Resource
69 69 private CrmContractMapper contractMapper;
... ... @@ -288,7 +288,7 @@ public class CrmContractServiceImpl implements CrmContractService {
288 288  
289 289 // 2. 创建合同审批流程实例
290 290 String processInstanceId = bpmProcessInstanceApi.createProcessInstance(userId, new BpmProcessInstanceCreateReqDTO()
291   - .setProcessDefinitionKey(CONTRACT_APPROVE).setBusinessKey(String.valueOf(id)));
  291 + .setProcessDefinitionKey(BPM_PROCESS_DEFINITION_KEY).setBusinessKey(String.valueOf(id)));
292 292  
293 293 // 3. 更新合同工作流编号
294 294 contractMapper.updateById(new CrmContractDO().setId(id).setProcessInstanceId(processInstanceId)
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/contract/listener/CrmContractResultListener.java
... ... @@ -20,7 +20,7 @@ public class CrmContractResultListener extends BpmProcessInstanceResultEventList
20 20  
21 21 @Override
22 22 public String getProcessDefinitionKey() {
23   - return CrmContractServiceImpl.CONTRACT_APPROVE;
  23 + return CrmContractServiceImpl.BPM_PROCESS_DEFINITION_KEY;
24 24 }
25 25  
26 26 @Override
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerServiceImpl.java
... ... @@ -241,9 +241,9 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
241 241 @Transactional(rollbackFor = Exception.class)
242 242 @LogRecord(type = CRM_CUSTOMER_TYPE, subType = CRM_CUSTOMER_CREATE_SUB_TYPE, bizNo = "{{#customer.id}}",
243 243 success = CRM_CUSTOMER_CREATE_SUCCESS)
244   - public Long createCustomer(CrmCustomerCreateReqBO customerCreateReq, Long userId) {
  244 + public Long createCustomer(CrmCustomerCreateReqBO createReqBO, Long userId) {
245 245 // 1. 插入客户
246   - CrmCustomerDO customer = BeanUtils.toBean(customerCreateReq, CrmCustomerDO.class).setOwnerUserId(userId);
  246 + CrmCustomerDO customer = initCustomer(createReqBO, userId);
247 247 customerMapper.insert(customer);
248 248  
249 249 // 2. 创建数据权限
... ... @@ -422,12 +422,14 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
422 422 if (updateOwnerUserIncr == 0) {
423 423 throw exception(CUSTOMER_UPDATE_OWNER_USER_FAIL);
424 424 }
425   - // 2. 删除负责人数据权限
426   - permissionService.deletePermission(CrmBizTypeEnum.CRM_CUSTOMER.getType(), customer.getId(),
427   - CrmPermissionLevelEnum.OWNER.getLevel());
428 425  
429   - // 3. 联系人的负责人,也要设置为 null。因为:因为领取后,负责人也要关联过来,这块和 receiveCustomer 是对应的
  426 + // 2. 联系人的负责人,也要设置为 null。因为:因为领取后,负责人也要关联过来,这块和 receiveCustomer 是对应的
430 427 contactService.updateOwnerUserIdByCustomerId(customer.getId(), null);
  428 +
  429 + // 3. 删除负责人数据权限
  430 + // 注意:需要放在 contactService 后面,不然【客户】数据权限已经被删除,无法操作!
  431 + permissionService.deletePermission(CrmBizTypeEnum.CRM_CUSTOMER.getType(), customer.getId(),
  432 + CrmPermissionLevelEnum.OWNER.getLevel());
431 433 }
432 434  
433 435 @LogRecord(type = CRM_CUSTOMER_TYPE, subType = CRM_CUSTOMER_RECEIVE_SUB_TYPE, bizNo = "{{#customer.id}}",
... ...
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/service/receivable/CrmReceivablePlanServiceImpl.java
... ... @@ -70,10 +70,11 @@ public class CrmReceivablePlanServiceImpl implements CrmReceivablePlanService {
70 70 validateRelationDataExists(createReqVO);
71 71 // 1.2 查验关联合同回款数量
72 72 Long count = receivableService.getReceivableCountByContractId(createReqVO.getContractId());
  73 + int period = (int) (count + 1);
73 74  
74 75 // 2. 插入还款计划
75   - CrmReceivablePlanDO receivablePlan = BeanUtils.toBean(createReqVO, CrmReceivablePlanDO.class).setId(null)
76   - .setPeriod((int) (count + 1)).setFinishStatus(false);
  76 + CrmReceivablePlanDO receivablePlan = BeanUtils.toBean(createReqVO, CrmReceivablePlanDO.class)
  77 + .setPeriod(period).setFinishStatus(false);
77 78 receivablePlanMapper.insert(receivablePlan);
78 79  
79 80 // 3. 创建数据权限
... ...
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
... ... @@ -13,6 +13,7 @@ public enum RoleCodeEnum {
13 13  
14 14 SUPER_ADMIN("super_admin", "超级管理员"),
15 15 TENANT_ADMIN("tenant_admin", "租户管理员"),
  16 + CRM_ADMIN("crm_admin", "CRM 管理员"); // CRM 系统专用
16 17 ;
17 18  
18 19 /**
... ...