Ver código fonte

crm:完善一些遗留的 TODO

puhui999 1 ano atrás
pai
commit
e8ade5f1fe

+ 6 - 2
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 {
             if (EXTRA.get() != null && EXTRA.get().get(ENABLE) != null) {
                 return;
             }
+            if (CONTENT.get() == null) { // 没有值说明没有日志需要记录
+                return;
+            }
+
             // 真正记录操作日志
             this.log0(joinPoint, operation, startTime, result, exception);
         } catch (Throwable ex) {
@@ -146,7 +150,7 @@ public class OperateLogV2Aspect {
         // 补充用户信息
         fillUserFields(reqDTO);
         // 补全模块信息
-        fillModuleFields(reqDTO, joinPoint, operation);
+        fillModuleFields(reqDTO, operation);
         // 补全请求信息
         fillRequestFields(reqDTO);
         // 补全方法信息
@@ -161,7 +165,7 @@ public class OperateLogV2Aspect {
         reqDTO.setUserType(WebFrameworkUtils.getLoginUserType());
     }
 
-    private static void fillModuleFields(OperateLogV2CreateReqDTO reqDTO, ProceedingJoinPoint joinPoint, Operation operation) {
+    private static void fillModuleFields(OperateLogV2CreateReqDTO reqDTO, Operation operation) {
         LogRecord logRecord = CONTENT.get();
         reqDTO.setBizId(Long.parseLong(logRecord.getBizNo())); // 操作模块业务编号
         reqDTO.setContent(logRecord.getAction());// 例如说,修改编号为 1 的用户信息,将性别从男改成女,将姓名从芋道改成源码。

+ 2 - 29
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;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.util.ObjUtil;
 import cn.hutool.core.util.StrUtil;
-import cn.hutool.extra.spring.SpringUtil;
 import cn.iocoder.yudao.framework.common.util.spring.SpringExpressionUtils;
 import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
 import cn.iocoder.yudao.module.crm.dal.dataobject.permission.CrmPermissionDO;
 import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
 import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
-import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionRoleCodeEnum;
 import cn.iocoder.yudao.module.crm.framework.permission.core.annotations.CrmPermission;
+import cn.iocoder.yudao.module.crm.framework.permission.core.util.CrmPermissionUtils;
 import cn.iocoder.yudao.module.crm.service.permission.CrmPermissionService;
-import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.aspectj.lang.JoinPoint;
@@ -52,7 +50,7 @@ public class CrmPermissionAspect {
         Integer permissionLevel = crmPermission.level().getLevel(); // 需要的权限级别
 
         // 1.1 如果是超级管理员则直接通过
-        if (validateAdminUser(getUserId())) {
+        if (CrmPermissionUtils.validateAdminUser()) {
             return;
         }
         // 1.2 获取数据权限
@@ -120,29 +118,4 @@ public class CrmPermissionAspect {
         return SpringExpressionUtils.parseExpressions(joinPoint, expressionStrings);
     }
 
-    /**
-     * 校验用户是否是 CRM 管理员
-     *
-     * @param userId 用户编号
-     * @return 是/否
-     */
-    private static boolean validateAdminUser(Long userId) {
-        return SingletonManager.getPermissionApi().hasAnyRoles(userId, CrmPermissionRoleCodeEnum.CRM_ADMIN.getCode());
-    }
-
-    /**
-     * 静态内部类实现单例获取
-     *
-     * @author HUIHUI
-     */
-    private static class SingletonManager {
-
-        private static final PermissionApi PERMISSION_API = SpringUtil.getBean(PermissionApi.class);
-
-        public static PermissionApi getPermissionApi() {
-            return PERMISSION_API;
-        }
-
-    }
-
 }

+ 48 - 0
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/framework/permission/core/util/CrmPermissionUtils.java

@@ -0,0 +1,48 @@
+package cn.iocoder.yudao.module.crm.framework.permission.core.util;
+
+import cn.hutool.extra.spring.SpringUtil;
+import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils;
+import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionRoleCodeEnum;
+import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
+
+/**
+ * 数据权限工具类
+ *
+ * @author HUIHUI
+ */
+public class CrmPermissionUtils {
+
+    /**
+     * 校验用户是否是 CRM 管理员
+     *
+     * @return 是/否
+     */
+    public static boolean validateAdminUser() {
+        return SingletonManager.getPermissionApi().hasAnyRoles(getUserId(), CrmPermissionRoleCodeEnum.CRM_ADMIN.getCode());
+    }
+
+    /**
+     * 获得用户编号
+     *
+     * @return 用户编号
+     */
+    private static Long getUserId() {
+        return WebFrameworkUtils.getLoginUserId();
+    }
+
+    /**
+     * 静态内部类实现单例获取
+     *
+     * @author HUIHUI
+     */
+    private static class SingletonManager {
+
+        private static final PermissionApi PERMISSION_API = SpringUtil.getBean(PermissionApi.class);
+
+        public static PermissionApi getPermissionApi() {
+            return PERMISSION_API;
+        }
+
+    }
+
+}

+ 7 - 0
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 {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
+    @LogRecord(type = CRM_CUSTOMER, bizNo = "{{#customerId}}", success = "创建了客户")
     public Long createCustomer(CrmCustomerCreateReqVO createReqVO, Long userId) {
         // 插入
         CrmCustomerDO customer = CrmCustomerConvert.INSTANCE.convert(createReqVO);
@@ -61,6 +62,9 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
         // 创建数据权限
         crmPermissionService.createPermission(new CrmPermissionCreateReqBO().setBizType(CrmBizTypeEnum.CRM_CUSTOMER.getType())
                 .setBizId(customer.getId()).setUserId(userId).setLevel(CrmPermissionLevelEnum.OWNER.getLevel())); // 设置当前操作的人为负责人
+
+        // 添加日志上下文所需
+        LogRecordContext.putVariable("customerId", customer.getId());
         return customer.getId();
     }
 
@@ -85,6 +89,7 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
+    @LogRecord(type = CRM_CUSTOMER, bizNo = "{{#id}}", success = "删除了客户")
     @CrmPermission(bizType = CrmBizTypeEnum.CRM_CUSTOMER, bizId = "#id", level = CrmPermissionLevelEnum.OWNER)
     public void deleteCustomer(Long id) {
         // 校验存在
@@ -152,6 +157,7 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
     }
 
     @Override
+    @LogRecord(type = CRM_CUSTOMER, bizNo = "{{#updateReqVO.id}}", success = "锁定了客户")
     public void lockCustomer(CrmCustomerUpdateReqVO updateReqVO) {
         // 校验存在
         validateCustomerExists(updateReqVO.getId());
@@ -165,6 +171,7 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
 
     @Override
     @Transactional(rollbackFor = Exception.class)
+    @LogRecord(type = CRM_CUSTOMER, bizNo = "{{#id}}", success = "将客户放入了公海")
     @CrmPermission(bizType = CrmBizTypeEnum.CRM_CUSTOMER, bizId = "#id", level = CrmPermissionLevelEnum.OWNER)
     public void putCustomerPool(Long id) {
         // 1. 校验存在

+ 2 - 2
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;
 import cn.iocoder.yudao.module.crm.dal.mysql.permission.CrmPermissionMapper;
 import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
 import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
+import cn.iocoder.yudao.module.crm.framework.permission.core.util.CrmPermissionUtils;
 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionCreateReqBO;
 import cn.iocoder.yudao.module.crm.service.permission.bo.CrmPermissionTransferReqBO;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
@@ -89,8 +90,7 @@ public class CrmPermissionServiceImpl implements CrmPermissionService {
         CrmPermissionDO oldPermission = crmPermissionMapper.selectByBizTypeAndBizIdByUserId(
                 transferReqBO.getBizType(), transferReqBO.getBizId(), transferReqBO.getUserId());
         String bizTypeName = CrmBizTypeEnum.getNameByType(transferReqBO.getBizType());
-        // TODO 校验是否为超级管理员 || 1
-        if (oldPermission == null || !isOwner(oldPermission.getLevel())) {
+        if (oldPermission == null || !isOwner(oldPermission.getLevel()) || !CrmPermissionUtils.validateAdminUser()) {
             throw exception(CRM_PERMISSION_DENIED, bizTypeName);
         }
         // 1.1 校验转移对象是否已经是该负责人

+ 3 - 19
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;
 import cn.iocoder.yudao.module.crm.enums.common.CrmBizTypeEnum;
 import cn.iocoder.yudao.module.crm.enums.common.CrmSceneTypeEnum;
 import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionLevelEnum;
-import cn.iocoder.yudao.module.crm.enums.permission.CrmPermissionRoleCodeEnum;
-import cn.iocoder.yudao.module.system.api.permission.PermissionApi;
+import cn.iocoder.yudao.module.crm.framework.permission.core.util.CrmPermissionUtils;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
@@ -41,7 +40,7 @@ public class CrmQueryWrapperUtils {
                                                                                     Long userId, Integer sceneType, Boolean pool) {
         final String ownerUserIdField = SingletonManager.getMybatisPlusJoinProperties().getTableAlias() + ".owner_user_id";
         // 1. 构建数据权限连表条件
-        if (ObjUtil.notEqual(validateAdminUser(userId), Boolean.TRUE) && ObjUtil.notEqual(pool, Boolean.TRUE)) { // 管理员,公海不需要数据权限
+        if (ObjUtil.notEqual(CrmPermissionUtils.validateAdminUser(), Boolean.TRUE) && ObjUtil.notEqual(pool, Boolean.TRUE)) { // 管理员,公海不需要数据权限
             query.innerJoin(CrmPermissionDO.class, on -> on.eq(CrmPermissionDO::getBizType, bizType)
                     .eq(CrmPermissionDO::getBizId, bizId) // 只能使用 SFunction 如果传 id 解析出来的 sql 不对
                     .eq(CrmPermissionDO::getUserId, userId));
@@ -82,7 +81,7 @@ public class CrmQueryWrapperUtils {
      * @param userId  用户编号
      */
     public static <T extends MPJLambdaWrapper<?>> void appendPermissionCondition(T query, Integer bizType, Collection<Long> bizIds, Long userId) {
-        if (ObjUtil.equal(validateAdminUser(userId), Boolean.TRUE)) {// 管理员不需要数据权限
+        if (ObjUtil.equal(CrmPermissionUtils.validateAdminUser(), Boolean.TRUE)) {// 管理员不需要数据权限
             return;
         }
 
@@ -91,16 +90,6 @@ public class CrmQueryWrapperUtils {
                         .in(CollUtil.isNotEmpty(bizIds), CrmPermissionDO::getUserId, userId));
     }
 
-    /**
-     * 校验用户是否是 CRM 管理员
-     *
-     * @param userId 用户编号
-     * @return 是/否
-     */
-    private static boolean validateAdminUser(Long userId) {
-        return SingletonManager.getPermissionApi().hasAnyRoles(userId, CrmPermissionRoleCodeEnum.CRM_ADMIN.getCode());
-    }
-
     /**
      * 静态内部类实现单例获取
      *
@@ -109,17 +98,12 @@ public class CrmQueryWrapperUtils {
     private static class SingletonManager {
 
         private static final AdminUserApi ADMIN_USER_API = SpringUtil.getBean(AdminUserApi.class);
-        private static final PermissionApi PERMISSION_API = SpringUtil.getBean(PermissionApi.class);
         private static final MybatisPlusJoinProperties MYBATIS_PLUS_JOIN_PROPERTIES = SpringUtil.getBean(MybatisPlusJoinProperties.class);
 
         public static AdminUserApi getAdminUserApi() {
             return ADMIN_USER_API;
         }
 
-        public static PermissionApi getPermissionApi() {
-            return PERMISSION_API;
-        }
-
         public static MybatisPlusJoinProperties getMybatisPlusJoinProperties() {
             return MYBATIS_PLUS_JOIN_PROPERTIES;
         }