Commit 23cfbfe4912fd02b06283615dd343cd059a54ca5

Authored by puhui999
1 parent 7a8ffd9c

CRM-数据权限:完善数据团队操作-添加、编辑、移除团队成员,退出团队

Showing 12 changed files with 312 additions and 27 deletions
yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/ErrorCodeConstants.java
... ... @@ -38,7 +38,6 @@ public interface ErrorCodeConstants {
38 38 ErrorCode CRM_PERMISSION_NOT_EXISTS = new ErrorCode(1_020_007_000, "数据权限不存在");
39 39 ErrorCode CRM_PERMISSION_DENIED = new ErrorCode(1_020_007_001, "{}操作失败,原因:没有权限");
40 40 ErrorCode CRM_PERMISSION_MODEL_NOT_EXISTS = new ErrorCode(1_020_007_002, "{}不存在");
41   - ErrorCode CRM_PERMISSION_MODEL_TRANSFER_FAIL_OWNER_USER_NOT_EXISTS = new ErrorCode(1_020_007_003, "{}操作失败,原因:负责人不存在");
42   - ErrorCode CRM_PERMISSION_MODEL_TRANSFER_FAIL_OWNER_USER_EXISTS = new ErrorCode(1_020_007_004, "{}操作失败,原因:转移对象已经是该负责人");
  41 + ErrorCode CRM_PERMISSION_MODEL_TRANSFER_FAIL_OWNER_USER_EXISTS = new ErrorCode(1_020_007_003, "{}操作失败,原因:转移对象已经是该负责人");
43 42  
44 43 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/business/CrmBusinessController.java
... ... @@ -95,5 +95,4 @@ public class CrmBusinessController {
95 95 return success(true);
96 96 }
97 97  
98   -
99 98 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/permission/CrmPermissionController.java 0 → 100644
  1 +package cn.iocoder.yudao.module.crm.controller.admin.permission;
  2 +
  3 +import cn.hutool.core.collection.CollUtil;
  4 +import cn.hutool.core.util.ObjUtil;
  5 +import cn.iocoder.yudao.framework.common.pojo.CommonResult;
  6 +import cn.iocoder.yudao.module.crm.controller.admin.permission.vo.CrmPermissionCreateReqVO;
  7 +import cn.iocoder.yudao.module.crm.controller.admin.permission.vo.CrmPermissionRespVO;
  8 +import cn.iocoder.yudao.module.crm.controller.admin.permission.vo.CrmPermissionUpdateReqVO;
  9 +import cn.iocoder.yudao.module.crm.convert.permission.CrmPermissionConvert;
  10 +import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO;
  11 +import cn.iocoder.yudao.module.crm.framework.core.service.CrmPermissionValidateService;
  12 +import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService;
  13 +import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
  14 +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
  15 +import io.swagger.v3.oas.annotations.Operation;
  16 +import io.swagger.v3.oas.annotations.Parameter;
  17 +import io.swagger.v3.oas.annotations.Parameters;
  18 +import io.swagger.v3.oas.annotations.tags.Tag;
  19 +import org.springframework.security.access.prepost.PreAuthorize;
  20 +import org.springframework.validation.annotation.Validated;
  21 +import org.springframework.web.bind.annotation.*;
  22 +
  23 +import javax.annotation.Resource;
  24 +import javax.validation.Valid;
  25 +import java.util.Collections;
  26 +import java.util.List;
  27 +
  28 +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
  29 +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
  30 +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
  31 +import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
  32 +import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.CRM_PERMISSION_DENIED;
  33 +import static cn.iocoder.yudao.module.crm.enums.ErrorCodeConstants.CRM_PERMISSION_MODEL_NOT_EXISTS;
  34 +import static cn.iocoder.yudao.module.crm.framework.enums.CrmBizTypeEnum.getNameByType;
  35 +import static cn.iocoder.yudao.module.crm.framework.enums.CrmPermissionLevelEnum.isOwner;
  36 +
  37 +@Tag(name = "管理后台 - CRM 数据权限(数据团队成员操作)")
  38 +@RestController
  39 +@RequestMapping("/crm/permission")
  40 +@Validated
  41 +public class CrmPermissionController {
  42 +
  43 + @Resource
  44 + private CrmPermissionService crmPermissionService;
  45 +
  46 + @Resource
  47 + private AdminUserApi adminUserApi;
  48 + @Resource
  49 + private List<CrmPermissionValidateService> permissionValidateServices;
  50 +
  51 + private void validatePermission(Integer bizType, Long bizId) {
  52 + // 1. TODO 校验是否为超级管理员
  53 + // 2. 防御一手,如果是超级管理员不校验权限还是得校验一下数据是否存在
  54 + permissionValidateServices.forEach(item -> {
  55 + if (!item.validateBizIdExists(bizType, bizId)) {
  56 + throw exception(CRM_PERMISSION_MODEL_NOT_EXISTS, getNameByType(bizType));
  57 + }
  58 + });
  59 + // 3. 校验数据权限 (如果存在则表示 bizId 也存在)
  60 + CrmPermissionDO permission = crmPermissionService.getPermissionByBizTypeAndBizIdAndUserId(
  61 + bizType, bizId, getLoginUserId());
  62 + if (isOwner(permission.getPermissionLevel())) { // 只有负责人才可以操作团队成员
  63 + return;
  64 + }
  65 + throw exception(CRM_PERMISSION_DENIED, getNameByType(bizType));
  66 + }
  67 +
  68 + @PutMapping("/add")
  69 + @Operation(summary = "添加团队成员")
  70 + @PreAuthorize("@ss.hasPermission('crm:permission:create')")
  71 + public CommonResult<Boolean> addPermission(@Valid @RequestBody CrmPermissionCreateReqVO reqVO) {
  72 + // 1. 前置校验
  73 + validatePermission(reqVO.getBizType(), reqVO.getBizId());
  74 +
  75 + // 2. 加入成员
  76 + crmPermissionService.createPermission(CrmPermissionConvert.INSTANCE.convert(reqVO));
  77 + return success(true);
  78 + }
  79 +
  80 +
  81 + @PutMapping("/update")
  82 + @Operation(summary = "编辑团队成员")
  83 + @PreAuthorize("@ss.hasPermission('crm:permission:update')")
  84 + public CommonResult<Boolean> updatePermission(@Valid @RequestBody CrmPermissionUpdateReqVO updateReqVO) {
  85 + // 1. 前置校验
  86 + validatePermission(updateReqVO.getBizType(), updateReqVO.getBizId());
  87 +
  88 + // 2. 编辑团队成员
  89 + crmPermissionService.updatePermission(CrmPermissionConvert.INSTANCE.convert(updateReqVO));
  90 + return success(true);
  91 + }
  92 +
  93 + @GetMapping("/delete")
  94 + @Operation(summary = "移除团队成员")
  95 + @Parameter(name = "id", description = "团队成员编号", required = true)
  96 + @PreAuthorize("@ss.hasPermission('crm:permission:delete')")
  97 + public CommonResult<Boolean> deletePermission(@RequestParam("bizType") Integer bizType,
  98 + @RequestParam("bizId") Long bizId,
  99 + @RequestParam("id") Long id) {
  100 + // 1. 前置校验
  101 + validatePermission(bizType, bizId);
  102 +
  103 + // 2. 移除团队成员
  104 + crmPermissionService.deletePermission(id);
  105 + return success(true);
  106 + }
  107 +
  108 + @GetMapping("/quit")
  109 + @Operation(summary = "退出团队")
  110 + @Parameters({
  111 + @Parameter(name = "bizType", description = "CRM 类型", required = true, example = "2"),
  112 + @Parameter(name = "bizId", description = "CRM 类型数据编号", required = true, example = "1024")
  113 + })
  114 + @PreAuthorize("@ss.hasPermission('crm:permission:delete')")
  115 + public CommonResult<Boolean> quitPermission(@RequestParam("bizType") Integer bizType,
  116 + @RequestParam("bizId") Long bizId) {
  117 + CrmPermissionDO permission = crmPermissionService.getPermissionByBizTypeAndBizIdAndUserId(
  118 + bizType, bizId, getLoginUserId());
  119 + if (permission == null) { // 没有就不是团队成员
  120 + return success(false);
  121 + }
  122 + crmPermissionService.deletePermission(permission.getId());
  123 + return success(true);
  124 + }
  125 +
  126 + @GetMapping("/list")
  127 + @Operation(summary = "获取团队成员")
  128 + @Parameters({
  129 + @Parameter(name = "bizType", description = "CRM 类型", required = true, example = "2"),
  130 + @Parameter(name = "bizId", description = "CRM 类型数据编号", required = true, example = "1024")
  131 + })
  132 + @PreAuthorize("@ss.hasPermission('crm:permission:query')")
  133 + public CommonResult<List<CrmPermissionRespVO>> getPermissionList(@RequestParam("bizType") Integer bizType,
  134 + @RequestParam("bizId") Long bizId) {
  135 + List<CrmPermissionDO> permission = crmPermissionService.getPermissionByBizTypeAndBizId(bizType, bizId);
  136 + if (CollUtil.isEmpty(permission)) {
  137 + return success(Collections.emptyList());
  138 + }
  139 + permission.removeIf(item -> ObjUtil.equal(item.getUserId(), CrmPermissionDO.POOL_USER_ID)); // 排除
  140 +
  141 + // 拼接数据
  142 + List<AdminUserRespDTO> userList = adminUserApi.getUserList(convertSet(permission, CrmPermissionDO::getUserId));
  143 + return success(CrmPermissionConvert.INSTANCE.convert(permission, userList));
  144 + }
  145 +
  146 +}
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/permission/vo/CrmPermissionBaseVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.crm.controller.admin.permission.vo;
  2 +
  3 +import cn.iocoder.yudao.framework.common.validation.InEnum;
  4 +import cn.iocoder.yudao.module.crm.framework.enums.CrmBizTypeEnum;
  5 +import cn.iocoder.yudao.module.crm.framework.enums.CrmPermissionLevelEnum;
  6 +import io.swagger.v3.oas.annotations.media.Schema;
  7 +import lombok.Data;
  8 +
  9 +import javax.validation.constraints.NotNull;
  10 +
  11 +/**
  12 + * 数据权限(团队成员) Base VO,提供给添加、修改、详细的子 VO 使用
  13 + * 如果子 VO 存在差异的字段,请不要添加到这里,影响 Swagger 文档生成
  14 + *
  15 + * @author HUIHUI
  16 + */
  17 +@Data
  18 +public class CrmPermissionBaseVO {
  19 +
  20 + @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "123456")
  21 + @NotNull(message = "用户编号不能为空")
  22 + private Long userId;
  23 +
  24 + @Schema(description = "Crm 类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
  25 + @InEnum(CrmBizTypeEnum.class)
  26 + @NotNull(message = "Crm 类型不能为空")
  27 + private Integer bizType;
  28 +
  29 + @Schema(description = "Crm 类型数据编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024")
  30 + @NotNull(message = "Crm 类型数据编号不能为空")
  31 + private Long bizId;
  32 +
  33 + @Schema(description = "权限级别", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
  34 + @InEnum(CrmPermissionLevelEnum.class)
  35 + @NotNull(message = "权限级别不能为空")
  36 + private Integer permissionLevel;
  37 +
  38 +}
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/permission/vo/CrmPermissionCreateReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.crm.controller.admin.permission.vo;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
  6 +import lombok.ToString;
  7 +
  8 +@Schema(description = "管理后台 - CRM 数据权限创建 Request VO")
  9 +@Data
  10 +@EqualsAndHashCode(callSuper = true)
  11 +@ToString(callSuper = true)
  12 +public class CrmPermissionCreateReqVO extends CrmPermissionBaseVO {
  13 +
  14 +}
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/permission/vo/CrmPermissionRespVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.crm.controller.admin.permission.vo;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.Data;
  5 +
  6 +import java.util.Set;
  7 +
  8 +@Schema(description = "管理后台 - CRM 数据权限(团队成员) Response VO")
  9 +@Data
  10 +public class CrmPermissionRespVO extends CrmPermissionBaseVO {
  11 +
  12 + @Schema(description = "数据权限编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13563")
  13 + private Long id;
  14 +
  15 + @Schema(description = "团队级别", requiredMode = Schema.RequiredMode.REQUIRED, example = "负责人")
  16 + private String permissionLevelName;
  17 +
  18 + @Schema(description = "部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
  19 + private Long deptId;
  20 +
  21 + @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
  22 + private String nickname;
  23 +
  24 + @Schema(description = "岗位编号数组", requiredMode = Schema.RequiredMode.REQUIRED, example = "[1,2,3]")
  25 + private Set<Long> postIds;
  26 +
  27 +}
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/permission/vo/CrmPermissionUpdateReqVO.java 0 → 100644
  1 +package cn.iocoder.yudao.module.crm.controller.admin.permission.vo;
  2 +
  3 +import io.swagger.v3.oas.annotations.media.Schema;
  4 +import lombok.Data;
  5 +import lombok.EqualsAndHashCode;
  6 +import lombok.ToString;
  7 +
  8 +@Schema(description = "管理后台 - CRM 数据权限更新 Request VO")
  9 +@Data
  10 +@EqualsAndHashCode(callSuper = true)
  11 +@ToString(callSuper = true)
  12 +public class CrmPermissionUpdateReqVO extends CrmPermissionBaseVO {
  13 +
  14 + @Schema(description = "数据权限编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13563")
  15 + private Long id;
  16 +
  17 +}
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/convert/permission/CrmPermissionConvert.java
1 1 package cn.iocoder.yudao.module.crm.convert.permission;
2 2  
  3 +import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
  4 +import cn.iocoder.yudao.framework.common.util.collection.MapUtils;
  5 +import cn.iocoder.yudao.module.crm.controller.admin.permission.vo.CrmPermissionCreateReqVO;
  6 +import cn.iocoder.yudao.module.crm.controller.admin.permission.vo.CrmPermissionRespVO;
  7 +import cn.iocoder.yudao.module.crm.controller.admin.permission.vo.CrmPermissionUpdateReqVO;
3 8 import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO;
4 9 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO;
5 10 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionUpdateReqBO;
  11 +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
6 12 import org.mapstruct.Mapper;
7 13 import org.mapstruct.factory.Mappers;
8 14  
  15 +import java.util.List;
  16 +import java.util.Map;
  17 +
  18 +import static cn.iocoder.yudao.module.crm.framework.enums.CrmPermissionLevelEnum.getNameByLevel;
  19 +
9 20 /**
10 21 * Crm 数据权限 Convert
11 22 *
... ... @@ -20,4 +31,21 @@ public interface CrmPermissionConvert {
20 31  
21 32 CrmPermissionDO convert(CrmPermissionUpdateReqBO updateBO);
22 33  
  34 + CrmPermissionCreateReqBO convert(CrmPermissionCreateReqVO reqVO);
  35 +
  36 + CrmPermissionUpdateReqBO convert(CrmPermissionUpdateReqVO updateReqVO);
  37 +
  38 + List<CrmPermissionRespVO> convert(List<CrmPermissionDO> permission);
  39 +
  40 + default List<CrmPermissionRespVO> convert(List<CrmPermissionDO> permission, List<AdminUserRespDTO> userList) {
  41 + Map<Long, AdminUserRespDTO> userMap = CollectionUtils.convertMap(userList, AdminUserRespDTO::getId);
  42 + return CollectionUtils.convertList(convert(permission), item -> {
  43 + MapUtils.findAndThen(userMap, item.getId(), user -> {
  44 + item.setNickname(user.getNickname()).setDeptId(user.getDeptId()).setPostIds(user.getPostIds())
  45 + .setPermissionLevelName(getNameByLevel(item.getPermissionLevel()));
  46 + });
  47 + return item;
  48 + });
  49 + }
  50 +
23 51 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/permission/CrmPermissionMapper.java
... ... @@ -46,19 +46,6 @@ public interface CrmPermissionMapper extends BaseMapperX&lt;CrmPermissionDO&gt; {
46 46 .eq(CrmPermissionDO::getBizId, bizId));
47 47 }
48 48  
49   - /**
50   - * 获取数据权限列表通过 数据类型 x 用户编号。如果
51   - *
52   - * @param bizType 数据类型,关联 {@link CrmBizTypeEnum}
53   - * @param userId
54   - * @return Crm 数据权限列表
55   - */
56   - default List<CrmPermissionDO> selectByBizTypeAndUserId(Integer bizType, Long userId) {
57   - return selectList(new LambdaQueryWrapperX<CrmPermissionDO>()
58   - .eq(CrmPermissionDO::getBizType, bizType)
59   - .eq(CrmPermissionDO::getUserId, userId));
60   - }
61   -
62 49 default PageResult<CrmPermissionDO> selectPage(CrmPermissionPageReqBO pageReqBO) {
63 50 return selectPage(pageReqBO, new LambdaQueryWrapperX<CrmPermissionDO>()
64 51 .eq(CrmPermissionDO::getBizType, pageReqBO.getBizType())
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/core/service/CrmPermissionValidateService.java 0 → 100644
  1 +package cn.iocoder.yudao.module.crm.framework.core.service;
  2 +
  3 +/**
  4 + * 校验数据是否存在 service 接口
  5 + * TODO 需要使用团队成员相关操作的业务接口都需要继承此接口
  6 + *
  7 + * @author HUIHUI
  8 + */
  9 +public interface CrmPermissionValidateService {
  10 +
  11 + /**
  12 + * 校验数据是否存在
  13 + *
  14 + * @param bizType CRM 类型
  15 + * @param bizId 数据编号
  16 + * @return 是/否
  17 + */
  18 + boolean validateBizIdExists(Integer bizType, Long bizId);
  19 +
  20 +}
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/enums/CrmPermissionLevelEnum.java
... ... @@ -47,4 +47,13 @@ public enum CrmPermissionLevelEnum implements IntArrayValuable {
47 47 return ObjUtil.equal(WRITE.level, level);
48 48 }
49 49  
  50 + public static String getNameByLevel(Integer level) {
  51 + for (CrmPermissionLevelEnum levelEnum : CrmPermissionLevelEnum.values()) {
  52 + if (ObjUtil.equal(levelEnum.level, level)) {
  53 + return levelEnum.name;
  54 + }
  55 + }
  56 + return "";
  57 + }
  58 +
50 59 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java
... ... @@ -13,12 +13,12 @@ import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionPageReqBO;
13 13 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionUpdateReqBO;
14 14 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmTransferPermissionReqBO;
15 15 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
16   -import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
17 16 import org.springframework.stereotype.Service;
18 17 import org.springframework.transaction.annotation.Transactional;
19 18 import org.springframework.validation.annotation.Validated;
20 19  
21 20 import javax.annotation.Resource;
  21 +import java.util.Collections;
22 22 import java.util.List;
23 23  
24 24 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
... ... @@ -43,6 +43,10 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
43 43 @Override
44 44 @Transactional(rollbackFor = Exception.class)
45 45 public Long createPermission(CrmPermissionCreateReqBO createBO) {
  46 + // 1. 校验用户是否存在
  47 + adminUserApi.validateUserList(Collections.singletonList(createBO.getUserId()));
  48 +
  49 + // 2. 创建
46 50 CrmPermissionDO permission = CrmPermissionConvert.INSTANCE.convert(createBO);
47 51 crmPermissionMapper.insert(permission);
48 52 return permission.getId();
... ... @@ -51,7 +55,11 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
51 55 @Override
52 56 @Transactional(rollbackFor = Exception.class)
53 57 public void updatePermission(CrmPermissionUpdateReqBO updateBO) {
  58 + // 1. 校验用户是否存在
  59 + adminUserApi.validateUserList(Collections.singletonList(updateBO.getUserId()));
  60 + // 2. 校验存在
54 61 validateCrmPermissionExists(updateBO.getId());
  62 +
55 63 // 更新操作
56 64 CrmPermissionDO updateDO = CrmPermissionConvert.INSTANCE.convert(updateBO);
57 65 crmPermissionMapper.updateById(updateDO);
... ... @@ -60,7 +68,9 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
60 68 @Override
61 69 @Transactional(rollbackFor = Exception.class)
62 70 public void deletePermission(Long id) {
  71 + // 校验存在
63 72 validateCrmPermissionExists(id);
  73 +
64 74 // 删除
65 75 crmPermissionMapper.deleteById(id);
66 76 }
... ... @@ -75,11 +85,6 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
75 85 return crmPermissionMapper.selectByBizTypeAndBizId(bizType, bizId);
76 86 }
77 87  
78   - @Override
79   - public List<CrmPermissionDO> getPermissionByBizTypeAndUserId(Integer bizType, Long userId) {
80   - return crmPermissionMapper.selectByBizTypeAndUserId(bizType, userId);
81   - }
82   -
83 88 private void validateCrmPermissionExists(Long id) {
84 89 if (crmPermissionMapper.selectById(id) == null) {
85 90 throw exception(CRM_PERMISSION_NOT_EXISTS);
... ... @@ -103,11 +108,7 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
103 108 throw exception(CRM_PERMISSION_MODEL_TRANSFER_FAIL_OWNER_USER_EXISTS, crmName);
104 109 }
105 110 // 2.1 校验新负责人是否存在
106   - AdminUserRespDTO user = adminUserApi.getUser(transferReqBO.getNewOwnerUserId());
107   - if (user == null) {
108   - throw exception(CRM_PERMISSION_MODEL_TRANSFER_FAIL_OWNER_USER_NOT_EXISTS, crmName);
109   - }
110   -
  111 + adminUserApi.validateUserList(Collections.singletonList(transferReqBO.getNewOwnerUserId()));
111 112 // 3. 权限转移
112 113 List<CrmPermissionDO> permissions = crmPermissionMapper.selectByBizTypeAndBizId(
113 114 transferReqBO.getBizType(), transferReqBO.getBizId()); // 获取所有团队成员
... ...