框架组件总览
作者:唐亚峰 | battcn
字数统计:1k 字
说明
本文档介绍 wemirr-platform-framework 下的所有组件功能和使用方法
组件清单
| 组件 | 说明 | 依赖方式 |
|---|---|---|
| common-framework-core | 基础核心 | 自动引入 |
| common-spring-boot-starter | Spring Boot 启动器 | 手动引入 |
| db-spring-boot-starter | 数据库增强 | 手动引入 |
| redis-plus-spring-boot-starter | Redis 增强 | 手动引入 |
| security-spring-boot-starter | 安全认证 | 手动引入 |
| feign-plugin-spring-boot-starter | Feign 增强 | 手动引入 |
| easyexcel-spring-boot-starter | Excel 操作 | 手动引入 |
| diff-log-spring-boot-starter | 差异日志 | 手动引入 |
| i18n-spring-boot-starter | 国际化 | 手动引入 |
| robot-spring-boot-starter | 消息机器人 | 手动引入 |
| websocket-spring-boot-starter | WebSocket | 手动引入 |
common-framework-core
基础核心模块,提供公共注解、接口、异常和工具类。
常用注解
java
// 操作日志
@AccessLog(module = "用户管理", description = "新增用户")
// 租户忽略
@TenantIgnore
// 数据权限
@DataPermission(field = "created_by", deptField = "dept_id")统一响应
java
// 成功响应
Result.success();
Result.success(data);
// 失败响应
Result.fail("操作失败");
Result.fail(ResultCode.USER_NOT_FOUND);业务异常
java
// 抛出业务异常
throw new BizException("用户不存在");
throw new BizException(ResultCode.USER_NOT_FOUND);
// 断言
BizAssert.notNull(user, "用户不存在");
BizAssert.isTrue(user.isEnabled(), "用户已禁用");db-spring-boot-starter
数据库增强模块,集成 MyBatis-Plus 并提供多租户、数据权限支持。
Maven 依赖
xml
<dependency>
<groupId>com.wemirr.framework</groupId>
<artifactId>db-spring-boot-starter</artifactId>
</dependency>多租户配置
yaml
extend:
mybatis-plus:
multi-tenant:
type: column # column / datasource
tenant-column: tenant_id
ignore-tables: # 忽略租户过滤的表
- sys_tenant
- sys_dict数据权限
java
@Service
public class OrderService {
@DataPermission(field = "created_by", deptField = "dept_id")
public IPage<Order> page(OrderQuery query) {
return orderMapper.selectPage(query.buildPage(), buildWrapper(query));
}
}自动填充
实体类继承 SuperEntity 或 Entity 自动填充审计字段:
java
@Data
@TableName("t_order")
public class Order extends SuperEntity<Long> {
// id, created_by, created_name, created_time,
// updated_by, updated_name, updated_time 自动填充
private String orderNo;
private BigDecimal amount;
}security-spring-boot-starter
安全认证模块,基于 Sa-Token 封装。
Maven 依赖
xml
<dependency>
<groupId>com.wemirr.framework</groupId>
<artifactId>security-spring-boot-starter</artifactId>
</dependency>权限注解
java
@RestController
@RequestMapping("/users")
public class UserController {
// 需要登录
@SaCheckLogin
@GetMapping("/info")
public UserVO info() { ... }
// 需要权限
@SaCheckPermission("sys:user:add")
@PostMapping
public void create(@RequestBody UserDTO dto) { ... }
// 需要角色
@SaCheckRole("admin")
@DeleteMapping("/{id}")
public void delete(@PathVariable Long id) { ... }
}获取当前用户
java
@Service
@RequiredArgsConstructor
public class OrderService {
private final AuthenticationContext context;
public void createOrder(OrderDTO dto) {
Long userId = context.userId();
Long tenantId = context.tenantId();
String username = context.username();
// ...
}
}feign-plugin-spring-boot-starter
Feign 增强模块,自动传递 Token 和请求头。
Maven 依赖
xml
<dependency>
<groupId>com.wemirr.framework</groupId>
<artifactId>feign-plugin-spring-boot-starter</artifactId>
</dependency>使用方式
java
// 定义 Feign 接口
@FeignClient(name = "wemirr-platform-iam")
public interface UserFeignClient {
@GetMapping("/users/{id}")
Result<UserVO> getById(@PathVariable Long id);
}
// 调用
@Service
@RequiredArgsConstructor
public class OrderService {
private final UserFeignClient userFeignClient;
public void process() {
// Token 和租户信息自动传递
Result<UserVO> result = userFeignClient.getById(1L);
}
}easyexcel-spring-boot-starter
Excel 导入导出模块,基于 EasyExcel 封装。
Maven 依赖
xml
<dependency>
<groupId>com.wemirr.framework</groupId>
<artifactId>easyexcel-spring-boot-starter</artifactId>
</dependency>导出示例
java
@RestController
@RequestMapping("/users")
public class UserController {
@PostMapping("/export")
@ResponseExcel(fileName = "用户列表")
public List<UserExportVO> export(@RequestBody UserQuery query) {
return userService.listForExport(query);
}
}
@Data
public class UserExportVO {
@ExcelProperty("用户名")
private String username;
@ExcelProperty("手机号")
private String mobile;
@ExcelProperty("创建时间")
private LocalDateTime createdTime;
}导入示例
java
@PostMapping("/import")
public Result<Void> importUsers(@RequestExcel List<UserImportVO> users) {
userService.batchImport(users);
return Result.success();
}robot-spring-boot-starter
消息机器人模块,支持钉钉、企业微信、飞书。
Maven 依赖
xml
<dependency>
<groupId>com.wemirr.framework</groupId>
<artifactId>robot-spring-boot-starter</artifactId>
</dependency>配置
yaml
extend:
robot:
dingtalk:
enabled: true
webhook: https://oapi.dingtalk.com/robot/send?access_token=xxx
secret: xxx
wechat:
enabled: true
webhook: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx
feishu:
enabled: true
webhook: https://open.feishu.cn/open-apis/bot/v2/hook/xxx发送消息
java
@Service
@RequiredArgsConstructor
public class NotifyService {
private final RobotMessageSender messageSender;
public void sendAlert(String content) {
// 发送到钉钉
messageSender.sendDingTalk(TextMessage.of(content));
// 发送到企业微信
messageSender.sendWechat(TextMessage.of(content));
// 发送到飞书
messageSender.sendFeishu(TextMessage.of(content));
}
}websocket-spring-boot-starter
分布式 WebSocket 模块,基于 Redis 实现多节点消息同步。
Maven 依赖
xml
<dependency>
<groupId>com.wemirr.framework</groupId>
<artifactId>websocket-spring-boot-starter</artifactId>
</dependency>发送消息
java
@Service
@RequiredArgsConstructor
public class MessageService {
private final WebSocketMessageSender messageSender;
// 发送给指定用户
public void sendToUser(Long userId, String message) {
messageSender.sendToUser(userId, message);
}
// 广播给所有用户
public void broadcast(String message) {
messageSender.broadcast(message);
}
// 发送给指定租户的所有用户
public void sendToTenant(Long tenantId, String message) {
messageSender.sendToTenant(tenantId, message);
}
}