Commit e8ade5f1fe36f1a7102822b5ed3e7b2444711174

Authored by puhui999
1 parent a05d3bc1

crm:完善一些遗留的 TODO

yudao-framework/yudao-spring-boot-starter-biz-operatelog/src/main/java/cn/iocoder/yudao/framework/operatelogv2/core/aop/OperateLogV2Aspect.java
... ... @@ -129,6 +129,10 @@ public class OperateLogV2Aspect {
129 129 if (EXTRA.get() != null && EXTRA.get().get(ENABLE) != null) {
130 130 return;
131 131 }
  132 + if (CONTENT.get() == null) { // 没有值说明没有日志需要记录
  133 + return;
  134 + }
  135 +
132 136 // 真正记录操作日志
133 137 this.log0(joinPoint, operation, startTime, result, exception);
134 138 } catch (Throwable ex) {
... ... @@ -146,7 +150,7 @@ public class OperateLogV2Aspect {
146 150 // 补充用户信息
147 151 fillUserFields(reqDTO);
148 152 // 补全模块信息
149   - fillModuleFields(reqDTO, joinPoint, operation);
  153 + fillModuleFields(reqDTO, operation);
150 154 // 补全请求信息
151 155 fillRequestFields(reqDTO);
152 156 // 补全方法信息
... ... @@ -161,7 +165,7 @@ public class OperateLogV2Aspect {
161 165 reqDTO.setUserType(WebFrameworkUtils.getLoginUserType());
162 166 }
163 167  
164   - private static void fillModuleFields(OperateLogV2CreateReqDTO reqDTO, ProceedingJoinPoint joinPoint, Operation operation) {
  168 + private static void fillModuleFields(OperateLogV2CreateReqDTO reqDTO, Operation operation) {
165 169 LogRecord logRecord = CONTENT.get();
166 170 reqDTO.setBizId(Long.parseLong(logRecord.getBizNo())); // 操作模块业务编号
167 171 reqDTO.setContent(logRecord.getAction());// 例如说,修改编号为 1 的用户信息,将性别从男改成女,将姓名从芋道改成源码。
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/aop/CrmPermissionAspect.java
... ... @@ -3,16 +3,14 @@ package cn.iocoder.yudao.module.crm.framework.permission.core.aop;
3 3 import cn.hutool.core.collection.CollUtil;
4 4 import cn.hutool.core.util.ObjUtil;
5 5 import cn.hutool.core.util.StrUtil;
6   -import cn.hutool.extra.spring.SpringUtil;
7 6 import cn.iocoder.yudao.framework.common.util.spring.SpringExpressionUtils;
8 7 import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
9 8 import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO;
10 9 import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
11 10 import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
12   -import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionRoleCodeEnum;
13 11 import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission;
  12 +import cn.iocoder.yudao.module.crm.framework.permission.core.util.CrmPermissionUtils;
14 13 import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService;
15   -import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
16 14 import jakarta.annotation.Resource;
17 15 import lombok.extern.slf4j.Slf4j;
18 16 import org.aspectj.lang.JoinPoint;
... ... @@ -52,7 +50,7 @@ public class CrmPermissionAspect {
52 50 Integer permissionLevel = crmPermission.level().getLevel(); // 需要的权限级别
53 51  
54 52 // 1.1 如果是超级管理员则直接通过
55   - if (validateAdminUser(getUserId())) {
  53 + if (CrmPermissionUtils.validateAdminUser()) {
56 54 return;
57 55 }
58 56 // 1.2 获取数据权限
... ... @@ -120,29 +118,4 @@ public class CrmPermissionAspect {
120 118 return SpringExpressionUtils.parseExpressions(joinPoint, expressionStrings);
121 119 }
122 120  
123   - /**
124   - * 校验用户是否是 CRM 管理员
125   - *
126   - * @param userId 用户编号
127   - * @return 是/否
128   - */
129   - private static boolean validateAdminUser(Long userId) {
130   - return SingletonManager.getPermissionApi().hasAnyRoles(userId, CrmPermissionRoleCodeEnum.CRM_ADMIN.getCode());
131   - }
132   -
133   - /**
134   - * 静态内部类实现单例获取
135   - *
136   - * @author HUIHUI
137   - */
138   - private static class SingletonManager {
139   -
140   - private static final PermissionApi PERMISSION_API = SpringUtil.getBean(PermissionApi.class);
141   -
142   - public static PermissionApi getPermissionApi() {
143   - return PERMISSION_API;
144   - }
145   -
146   - }
147   -
148 121 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/util/CrmPermissionUtils.java 0 → 100644
  1 +package cn.iocoder.yudao.module.crm.framework.permission.core.util;
  2 +
  3 +import cn.hutool.extra.spring.SpringUtil;
  4 +import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
  5 +import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionRoleCodeEnum;
  6 +import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
  7 +
  8 +/**
  9 + * 数据权限工具类
  10 + *
  11 + * @author HUIHUI
  12 + */
  13 +public class CrmPermissionUtils {
  14 +
  15 + /**
  16 + * 校验用户是否是 CRM 管理员
  17 + *
  18 + * @return 是/否
  19 + */
  20 + public static boolean validateAdminUser() {
  21 + return SingletonManager.getPermissionApi().hasAnyRoles(getUserId(), CrmPermissionRoleCodeEnum.CRM_ADMIN.getCode());
  22 + }
  23 +
  24 + /**
  25 + * 获得用户编号
  26 + *
  27 + * @return 用户编号
  28 + */
  29 + private static Long getUserId() {
  30 + return WebFrameworkUtils.getLoginUserId();
  31 + }
  32 +
  33 + /**
  34 + * 静态内部类实现单例获取
  35 + *
  36 + * @author HUIHUI
  37 + */
  38 + private static class SingletonManager {
  39 +
  40 + private static final PermissionApi PERMISSION_API = SpringUtil.getBean(PermissionApi.class);
  41 +
  42 + public static PermissionApi getPermissionApi() {
  43 + return PERMISSION_API;
  44 + }
  45 +
  46 + }
  47 +
  48 +}
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerServiceImpl.java
... ... @@ -53,6 +53,7 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
53 53  
54 54 @Override
55 55 @Transactional(rollbackFor = Exception.class)
  56 + @LogRecord(type = CRM_CUSTOMER, bizNo = "{{#customerId}}", success = "创建了客户")
56 57 public Long createCustomer(CrmCustomerCreateReqVO createReqVO, Long userId) {
57 58 // 插入
58 59 CrmCustomerDO customer = CrmCustomerConvert.INSTANCE.convert(createReqVO);
... ... @@ -61,6 +62,9 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
61 62 // 创建数据权限
62 63 crmPermissionService.createPermission(new CrmPermissionCreateReqBO().setBizType(CrmBizTypeEnum.CRM_CUSTOMER.getType())
63 64 .setBizId(customer.getId()).setUserId(userId).setLevel(CrmPermissionLevelEnum.OWNER.getLevel())); // 设置当前操作的人为负责人
  65 +
  66 + // 添加日志上下文所需
  67 + LogRecordContext.putVariable("customerId", customer.getId());
64 68 return customer.getId();
65 69 }
66 70  
... ... @@ -85,6 +89,7 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
85 89  
86 90 @Override
87 91 @Transactional(rollbackFor = Exception.class)
  92 + @LogRecord(type = CRM_CUSTOMER, bizNo = "{{#id}}", success = "删除了客户")
88 93 @CrmPermission(bizType = CrmBizTypeEnum.CRM_CUSTOMER, bizId = "#id", level = CrmPermissionLevelEnum.OWNER)
89 94 public void deleteCustomer(Long id) {
90 95 // 校验存在
... ... @@ -152,6 +157,7 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
152 157 }
153 158  
154 159 @Override
  160 + @LogRecord(type = CRM_CUSTOMER, bizNo = "{{#updateReqVO.id}}", success = "锁定了客户")
155 161 public void lockCustomer(CrmCustomerUpdateReqVO updateReqVO) {
156 162 // 校验存在
157 163 validateCustomerExists(updateReqVO.getId());
... ... @@ -165,6 +171,7 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
165 171  
166 172 @Override
167 173 @Transactional(rollbackFor = Exception.class)
  174 + @LogRecord(type = CRM_CUSTOMER, bizNo = "{{#id}}", success = "将客户放入了公海")
168 175 @CrmPermission(bizType = CrmBizTypeEnum.CRM_CUSTOMER, bizId = "#id", level = CrmPermissionLevelEnum.OWNER)
169 176 public void putCustomerPool(Long id) {
170 177 // 1. 校验存在
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/permission/CrmPermissionServiceImpl.java
... ... @@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO;
8 8 import cn.iocoder.yudao.module.crm.dal.mysql.permission.CrmPermissionMapper;
9 9 import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
10 10 import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
  11 +import cn.iocoder.yudao.module.crm.framework.permission.core.util.CrmPermissionUtils;
11 12 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO;
12 13 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionTransferReqBO;
13 14 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
... ... @@ -89,8 +90,7 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
89 90 CrmPermissionDO oldPermission = crmPermissionMapper.selectByBizTypeAndBizIdByUserId(
90 91 transferReqBO.getBizType(), transferReqBO.getBizId(), transferReqBO.getUserId());
91 92 String bizTypeName = CrmBizTypeEnum.getNameByType(transferReqBO.getBizType());
92   - // TODO 校验是否为超级管理员 || 1
93   - if (oldPermission == null || !isOwner(oldPermission.getLevel())) {
  93 + if (oldPermission == null || !isOwner(oldPermission.getLevel()) || !CrmPermissionUtils.validateAdminUser()) {
94 94 throw exception(CRM_PERMISSION_DENIED, bizTypeName);
95 95 }
96 96 // 1.1 校验转移对象是否已经是该负责人
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/util/CrmQueryWrapperUtils.java
... ... @@ -7,8 +7,7 @@ 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.enums.permission.CrmPermissionRoleCodeEnum;
11   -import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
  10 +import cn.iocoder.yudao.module.crm.framework.permission.core.util.CrmPermissionUtils;
12 11 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
13 12 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
14 13 import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
... ... @@ -41,7 +40,7 @@ public class CrmQueryWrapperUtils {
41 40 Long userId, Integer sceneType, Boolean pool) {
42 41 final String ownerUserIdField = SingletonManager.getMybatisPlusJoinProperties().getTableAlias() + ".owner_user_id";
43 42 // 1. 构建数据权限连表条件
44   - if (ObjUtil.notEqual(validateAdminUser(userId), Boolean.TRUE) && ObjUtil.notEqual(pool, Boolean.TRUE)) { // 管理员,公海不需要数据权限
  43 + if (ObjUtil.notEqual(CrmPermissionUtils.validateAdminUser(), Boolean.TRUE) && ObjUtil.notEqual(pool, Boolean.TRUE)) { // 管理员,公海不需要数据权限
45 44 query.innerJoin(CrmPermissionDO.class, on -> on.eq(CrmPermissionDO::getBizType, bizType)
46 45 .eq(CrmPermissionDO::getBizId, bizId) // 只能使用 SFunction 如果传 id 解析出来的 sql 不对
47 46 .eq(CrmPermissionDO::getUserId, userId));
... ... @@ -82,7 +81,7 @@ public class CrmQueryWrapperUtils {
82 81 * @param userId 用户编号
83 82 */
84 83 public static <T extends MPJLambdaWrapper<?>> void appendPermissionCondition(T query, Integer bizType, Collection<Long> bizIds, Long userId) {
85   - if (ObjUtil.equal(validateAdminUser(userId), Boolean.TRUE)) {// 管理员不需要数据权限
  84 + if (ObjUtil.equal(CrmPermissionUtils.validateAdminUser(), Boolean.TRUE)) {// 管理员不需要数据权限
86 85 return;
87 86 }
88 87  
... ... @@ -92,16 +91,6 @@ public class CrmQueryWrapperUtils {
92 91 }
93 92  
94 93 /**
95   - * 校验用户是否是 CRM 管理员
96   - *
97   - * @param userId 用户编号
98   - * @return 是/否
99   - */
100   - private static boolean validateAdminUser(Long userId) {
101   - return SingletonManager.getPermissionApi().hasAnyRoles(userId, CrmPermissionRoleCodeEnum.CRM_ADMIN.getCode());
102   - }
103   -
104   - /**
105 94 * 静态内部类实现单例获取
106 95 *
107 96 * @author HUIHUI
... ... @@ -109,17 +98,12 @@ public class CrmQueryWrapperUtils {
109 98 private static class SingletonManager {
110 99  
111 100 private static final AdminUserApi ADMIN_USER_API = SpringUtil.getBean(AdminUserApi.class);
112   - private static final PermissionApi PERMISSION_API = SpringUtil.getBean(PermissionApi.class);
113 101 private static final MybatisPlusJoinProperties MYBATIS_PLUS_JOIN_PROPERTIES = SpringUtil.getBean(MybatisPlusJoinProperties.class);
114 102  
115 103 public static AdminUserApi getAdminUserApi() {
116 104 return ADMIN_USER_API;
117 105 }
118 106  
119   - public static PermissionApi getPermissionApi() {
120   - return PERMISSION_API;
121   - }
122   -
123 107 public static MybatisPlusJoinProperties getMybatisPlusJoinProperties() {
124 108 return MYBATIS_PLUS_JOIN_PROPERTIES;
125 109 }
... ...