Files
CordysCRM/backend/framework
2024-12-25 15:09:49 +08:00
..
2024-12-25 15:09:49 +08:00
2024-12-25 15:09:49 +08:00

通用模块使用说明

本项目是一个企业级应用框架,包含多种常用的功能模块,包括 AOP 支持、公共功能类、MyBatis 配置、文件处理、安全性管理等。以下是如何使用这些模块的详细说明。

  1. AOP 支持

AOP 模块包含多个子模块包括注解、切面、构建器、常量、DTO 和事件。

  • annotation:定义了用于 AOP 功能的注解。
  • aspect:定义了具体的切面逻辑。
  • builder:提供了构建 AOP 相关对象的构建器模式。
  • constants:定义了常量类,避免硬编码。
  • dto:用于 AOP 事件的数据传输对象。
  • event:定义了与 AOP 相关的事件。

使用示例

设计思路来源:https://github.com/mouzt/mzt-biz-log

  1. 普通的记录日志
  • resourceId:业务资源的 ID
  • success:方法调用成功后记录的日志内容
  • SpEL 表达式:用双大括号包围的表达式(例如:{{#user.username}})是 SpEL 表达式Spring 支持的表达式都能在此使用,如调用静态方法、三目表达式等。
@OperationLog(
        module = LogModule.SYSTEM,
        type = LogType.ADD,
        operator = "{{#user.name}}",
        resourceId = "{{#user.id}}",
        success = "添加用户成功",
        extra = "{{#newUser}}"
)
public void addUser(User user) {
    // 业务代码

    // 添加日志上下文
    OperationLogContext.putVariable("newUser", LogExtraDTO.builder()
            .originalValue(null)
            .modifiedValue(user)
            .build());
}
  1. 记录失败的日志

如果抛出异常则记录失败日志,未抛出异常则记录成功日志。

@OperationLog(
        fail = "业务操作失败,失败原因:「{{#_errorMsg}}」",
        success = "业务操作成功",
        operator = "{{#user.name}}",
        type = LogType.ADD,
        resourceId = "{{#biz.id}}"
)
public boolean create(BizObj obj) {
    OperationLogContext.putVariable("innerOrder", LogExtraDTO.builder()
            .originalValue(obj)
            .modifiedValue(obj)
            .build());
    return true;
}
  • #_errorMsg 是方法抛出异常后的错误信息。
  1. 方法记录多条日志

若希望一个方法记录多条日志,可以在方法上重复写两个注解,前提是两个注解不相同。

@OperationLog(
        module = LogModule.SYSTEM,
        type = LogType.UPDATE,
        operator = "{{#user.name}}",
        resourceId = "{{#user.id}}",
        success = "更新用户成功",
        extra = "{{#upUser}}"
)
@OperationLog(
        module = LogModule.SYSTEM,
        type = LogType.UPDATE,
        operator = "{{#user.name}}",
        resourceId = "{{#user.id}}",
        success = "更新用户成功",
        extra = "{{#upUser}}"
)
public void updateUser(User user) {
    // 更新用户
    User preUser = userMapper.selectByPrimaryKey(user.getId());

    // 添加日志上下文
    OperationLogContext.putVariable("upUser", LogExtraDTO.builder()
            .originalValue(preUser)
            .modifiedValue(user)
            .build());
}
  1. 公共功能模块

该模块提供了常用的公共工具和功能,包括:

  • constants:常量类,避免魔法值。
  • exception:自定义异常处理。
  • groups:分组管理。
  • pager:分页查询功能。
  • response:统一的响应格式和响应处理。
  • uid:生成唯一标识符。
  • util:工具类,包含常用的加密方法(如 RSA 加密)。
  1. 配置模块

配置模块主要用于配置项目中的各种常量、参数和配置信息。

  1. 文件处理模块

该模块用于处理与文件相关的操作,包括文件上传、下载、存储等。

  • engine:文件引擎,用于文件的操作和管理。
  1. MyBatis 配置

MyBatis 配置模块提供了对 MyBatis 配置的支持,包括拦截器和 Lambda 表达式支持。

  • interceptor:自定义拦截器,用于扩展 MyBatis 的功能。
  • lambdaLambda 支持,简化 MyBatis 查询语句的构建。
  • Use it like this:
    @Resource
    private BaseMapper<User> userMapper;

    List<User> userList = userMapper.selectListByLambda(
            new LambdaQueryWrapper<User>()
                    .eq(User::getId, "admin")
    );
  • 自动生成SQL ` SELECT * FROM user WHERE id = 'admin'

`6. 安全性管理模块

该模块用于实现安全性相关功能,如身份验证、授权、加密等。