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

145 lines
4.4 KiB
Markdown
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
通用模块使用说明
本项目是一个企业级应用框架,包含多种常用的功能模块,包括 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 支持的表达式都能在此使用,如调用静态方法、三目表达式等。
```java
@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());
}
```
2. 记录失败的日志
如果抛出异常则记录失败日志,未抛出异常则记录成功日志。
```java
@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` 是方法抛出异常后的错误信息。
3. 方法记录多条日志
若希望一个方法记录多条日志,可以在方法上重复写两个注解,前提是两个注解不相同。
```java
@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());
}
```
2. 公共功能模块
该模块提供了常用的公共工具和功能,包括:
- **constants**:常量类,避免魔法值。
- **exception**:自定义异常处理。
- **groups**:分组管理。
- **pager**:分页查询功能。
- **response**:统一的响应格式和响应处理。
- **uid**:生成唯一标识符。
- **util**:工具类,包含常用的加密方法(如 RSA 加密)。
3. 配置模块
配置模块主要用于配置项目中的各种常量、参数和配置信息。
4. 文件处理模块
该模块用于处理与文件相关的操作,包括文件上传、下载、存储等。
- **engine**:文件引擎,用于文件的操作和管理。
5. MyBatis 配置
MyBatis 配置模块提供了对 MyBatis 配置的支持,包括拦截器和 Lambda 表达式支持。
- **interceptor**:自定义拦截器,用于扩展 MyBatis 的功能。
- **lambda**Lambda 支持,简化 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. 安全性管理模块
该模块用于实现安全性相关功能,如身份验证、授权、加密等。