106 lines
3.5 KiB
Markdown
106 lines
3.5 KiB
Markdown
# 系统公共模块
|
|
系统公共模块主要对集群中的基础公共工具进行封装,现阶段对如需模块进行封装:
|
|
|
|
## common-core 基础核心组件
|
|
对系统中的基础服务实体进行定义,基础的工具类进行定义.例如:
|
|
|
|
### TreeUtil
|
|
自定义树形结构实体转换,可以将A对象结构具有树形关系的list转换成B对象的树形结构, 可以自定义A B两个对象之间的映射关系例如:
|
|
|
|
将Dept映射到OptionTree对象:
|
|
```javascript
|
|
//Dept 类
|
|
public class Dept extends BaseEntity {
|
|
private Long deptId;
|
|
private Long parentId;
|
|
private String ancestors;
|
|
@NotBlank(message = "部门名称不能为空!")
|
|
private String deptName;
|
|
@NotBlank(message = "显示顺序不能为空!")
|
|
private String orderNum;
|
|
@NotBlank(message = "负责人不能为空!")
|
|
private String leader;
|
|
@NotNull(message = "负责人id不能为空!")
|
|
private Long leaderId;
|
|
}
|
|
|
|
//OptionTree 目标对象
|
|
@Builder
|
|
@NoArgsConstructor
|
|
@AllArgsConstructor
|
|
public class OptionTree implements Serializable {
|
|
/**
|
|
* 节点ID
|
|
*/
|
|
private Object value;
|
|
/**
|
|
* 节点名称
|
|
*/
|
|
private String label;
|
|
/**
|
|
* 子节点
|
|
*/
|
|
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
|
private List<OptionTree> children;
|
|
}
|
|
|
|
//转换代码
|
|
List<OptionTree> optionTreeList = TreeUtil.build(deptList,OptionTree.class,(config)->{
|
|
config.setIdField("deptId");
|
|
config.setOption("deptId","deptName");
|
|
});
|
|
|
|
```
|
|
|
|
并且TreeUtil可以通过config进行自定义配置,配置项如下:
|
|
- 是否启用BeanUtils.copyProperties方法进行字段的copy(默认为ture)
|
|
- 父级关系字段名称定义
|
|
- id字段定义
|
|
- tree子级字段定义
|
|
- mapper其余字段关系映射
|
|
- exclude排除字段
|
|
|
|
## common-feign
|
|
对openfeign进行基础的配置,比如让OpenFeign 使用 OkHttp 配置类,以及Ribbon做rpc的负载均衡
|
|
|
|
## common-log
|
|
自定义操作日志模块,完成使用自定义注解实现操作日志的记录
|
|
```javascript
|
|
@ApiOperation("新增部门")
|
|
@PostMapping
|
|
@PreAuthorize("@ss.hasPermission('admin:dept:add')")
|
|
@Log(title = "新增部门",businessType = BusinessType.INSERT)
|
|
public Result<Void> add(@RequestBody @Validated Dept dept){
|
|
if (UserConstants.DEPT_DISABLE.equals(deptService.checkDeptNameUnique(dept))){
|
|
return Result.error("新增部门: "+ dept.getDeptName() +"'失败,部门名称以存在!");
|
|
}
|
|
deptService.saveDept(dept);
|
|
return Result.ok();
|
|
}
|
|
```
|
|
通过LogAspect实现当前注解的apo切面,切面中将操作的日志封装成一个操作日志对象,然后使用spring的事件发布机制发布这个日志操作对象,再使用OperationLogListener异步监听到发布的事件,再通过rpc远程调用到umps中的日志存储接口,将当前对象落地到数据库
|
|
|
|
## common-mybatis
|
|
对mybatis的基本分页功能进行封装
|
|
|
|
## common-oss
|
|
对接阿里云的oos分布式对象储存服务,
|
|
|
|
## common-redis
|
|
使redis使用FastJson序列化,对RedisTemplate进行进一步的函数封装
|
|
|
|
## common-security
|
|
集群中最核心的部分,spring security 安全校验封装,自定义PermissionService实现spring security自定校验方法,实现自定义校验逻辑,使用Inner注解实现集群内rpc远程调用接口的区分
|
|
|
|
## common-swagger
|
|
swagger接口文档配置,通过SwaggerConfig类从nacos中获取到当前服务对应的swagger配置信息,生成当前服务的swagger接口文档数据,配合gateway swagger聚合生成集群的swagger聚合文档
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|