Skip to content

框架组件总览

作者:唐亚峰 | battcn
字数统计:1k 字

说明

本文档介绍 wemirr-platform-framework 下的所有组件功能和使用方法

组件清单

组件说明依赖方式
common-framework-core基础核心自动引入
common-spring-boot-starterSpring Boot 启动器手动引入
db-spring-boot-starter数据库增强手动引入
redis-plus-spring-boot-starterRedis 增强手动引入
security-spring-boot-starter安全认证手动引入
feign-plugin-spring-boot-starterFeign 增强手动引入
easyexcel-spring-boot-starterExcel 操作手动引入
diff-log-spring-boot-starter差异日志手动引入
i18n-spring-boot-starter国际化手动引入
robot-spring-boot-starter消息机器人手动引入
websocket-spring-boot-starterWebSocket手动引入

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));
    }
}

自动填充

实体类继承 SuperEntityEntity 自动填充审计字段:

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);
    }
}

下一步