243 lines
5.6 KiB
Markdown
243 lines
5.6 KiB
Markdown
# EvoBMS MyBatis-Plus 和 MQTT 集成说明
|
||
|
||
## 概述
|
||
|
||
本项目已成功集成了 MyBatis-Plus 和 MQTT 功能,为 EVO 电池管理系统提供了强大的数据持久化和实时通信能力。
|
||
|
||
## MyBatis-Plus 集成
|
||
|
||
### 1. 依赖配置
|
||
|
||
已在 `pom.xml` 中添加以下依赖:
|
||
- `mybatis-plus-boot-starter`: MyBatis-Plus 核心依赖
|
||
- `mybatis-plus-generator`: 代码生成器
|
||
- `freemarker`: 模板引擎
|
||
|
||
### 2. 配置文件
|
||
|
||
在 `application.yml` 中添加了 MyBatis-Plus 配置:
|
||
```yaml
|
||
mybatis-plus:
|
||
mapper-locations: classpath*:mybatis/**/*Mapper.xml
|
||
type-aliases-package: com.evobms.project.**.domain
|
||
global-config:
|
||
db-config:
|
||
id-type: AUTO
|
||
field-strategy: NOT_NULL
|
||
logic-delete-field: delFlag
|
||
logic-delete-value: 2
|
||
logic-not-delete-value: 0
|
||
```
|
||
|
||
### 3. 核心功能
|
||
|
||
#### 3.1 实体类注解
|
||
- `@TableName`: 指定表名
|
||
- `@TableId`: 主键配置
|
||
- `@TableLogic`: 逻辑删除
|
||
- `@Version`: 乐观锁
|
||
|
||
#### 3.2 Mapper 接口
|
||
继承 `BaseMapper<T>` 获得基础 CRUD 操作:
|
||
```java
|
||
@Mapper
|
||
public interface BmsDeviceMapper extends BaseMapper<BmsDevice> {
|
||
// 自定义方法
|
||
}
|
||
```
|
||
|
||
#### 3.3 Service 层
|
||
继承 `IService<T>` 和 `ServiceImpl<M, T>`:
|
||
```java
|
||
public interface IBmsDeviceService extends IService<BmsDevice> {}
|
||
|
||
@Service
|
||
public class BmsDeviceServiceImpl extends ServiceImpl<BmsDeviceMapper, BmsDevice>
|
||
implements IBmsDeviceService {}
|
||
```
|
||
|
||
### 4. 示例代码
|
||
|
||
#### BmsDevice 实体类
|
||
位置:`src/main/java/com/evobms/project/bms/domain/BmsDevice.java`
|
||
|
||
包含完整的 BMS 设备属性,使用了 MyBatis-Plus 注解。
|
||
|
||
#### 数据库表
|
||
执行 `sql/bms_device.sql` 创建示例表和数据。
|
||
|
||
## MQTT 集成
|
||
|
||
### 1. 依赖配置
|
||
|
||
已添加 MQTT 相关依赖:
|
||
- `spring-integration-mqtt`: Spring Integration MQTT 支持
|
||
- `org.eclipse.paho.client.mqttv3`: Eclipse Paho MQTT 客户端
|
||
|
||
### 2. 配置文件
|
||
|
||
在 `application.yml` 中添加了 MQTT 配置:
|
||
```yaml
|
||
mqtt:
|
||
host: tcp://localhost:1883
|
||
clientId: evobms-client
|
||
username:
|
||
password:
|
||
connectionTimeout: 30
|
||
keepAliveInterval: 60
|
||
subscribeTopic: evobms/+/data
|
||
publishTopic: evobms/command
|
||
```
|
||
|
||
### 3. 核心组件
|
||
|
||
#### 3.1 MqttConfig 配置类
|
||
位置:`src/main/java/com/evobms/framework/config/MqttConfig.java`
|
||
|
||
提供了:
|
||
- MQTT 客户端工厂配置
|
||
- 消息接收通道
|
||
- 消息发送通道
|
||
- 消息处理器
|
||
|
||
#### 3.2 MqttService 服务类
|
||
位置:`src/main/java/com/evobms/project/bms/service/MqttService.java`
|
||
|
||
提供了:
|
||
- 发送 MQTT 消息
|
||
- 处理设备数据
|
||
- 设备控制命令
|
||
- 设备状态查询
|
||
|
||
### 4. 使用示例
|
||
|
||
#### 发送消息
|
||
```java
|
||
@Autowired
|
||
private MqttService mqttService;
|
||
|
||
// 发送设备控制命令
|
||
mqttService.sendDeviceCommand("BMS001", "STATUS_QUERY");
|
||
|
||
// 发送自定义消息
|
||
mqttService.sendMessage("evobms/test", "Hello MQTT");
|
||
```
|
||
|
||
#### 接收消息
|
||
消息会自动通过配置的消息处理器处理,支持设备数据自动更新。
|
||
|
||
## API 接口
|
||
|
||
### BmsDeviceController
|
||
|
||
位置:`src/main/java/com/evobms/project/bms/controller/BmsDeviceController.java`
|
||
|
||
提供了完整的 RESTful API:
|
||
|
||
- `GET /bms/device/list` - 查询设备列表
|
||
- `GET /bms/device/{deviceId}` - 获取设备详情
|
||
- `POST /bms/device` - 新增设备
|
||
- `PUT /bms/device` - 修改设备
|
||
- `DELETE /bms/device/{deviceIds}` - 删除设备
|
||
- `PUT /bms/device/status` - 批量更新状态
|
||
- `POST /bms/device/queryStatus/{deviceCode}` - 查询设备状态
|
||
- `POST /bms/device/restart/{deviceCode}` - 重启设备
|
||
- `POST /bms/device/config/{deviceCode}` - 配置设备
|
||
- `POST /bms/device/mqtt/send` - 发送 MQTT 消息
|
||
- `GET /bms/device/statistics` - 获取统计信息
|
||
|
||
## 使用建议
|
||
|
||
### 1. MyBatis-Plus 最佳实践
|
||
|
||
1. **实体类设计**:
|
||
- 使用合适的注解标注字段
|
||
- 继承 BaseEntity 获得公共字段
|
||
- 合理使用逻辑删除和乐观锁
|
||
|
||
2. **查询优化**:
|
||
- 使用 QueryWrapper 构建复杂查询
|
||
- 合理使用分页插件
|
||
- 避免 N+1 查询问题
|
||
|
||
3. **代码生成**:
|
||
- 使用 MyBatis-Plus 代码生成器快速生成基础代码
|
||
- 自定义模板适应项目需求
|
||
|
||
### 2. MQTT 最佳实践
|
||
|
||
1. **主题设计**:
|
||
- 使用层次化主题结构:`evobms/{deviceCode}/{dataType}`
|
||
- 合理使用通配符订阅
|
||
|
||
2. **消息格式**:
|
||
- 使用 JSON 格式传输数据
|
||
- 包含时间戳和设备标识
|
||
|
||
3. **错误处理**:
|
||
- 实现消息重试机制
|
||
- 记录通信日志
|
||
- 处理连接断开重连
|
||
|
||
### 3. 安全考虑
|
||
|
||
1. **数据库安全**:
|
||
- 使用参数化查询防止 SQL 注入
|
||
- 合理设置数据库权限
|
||
|
||
2. **MQTT 安全**:
|
||
- 配置用户名密码认证
|
||
- 使用 TLS 加密传输
|
||
- 限制主题访问权限
|
||
|
||
## 扩展功能
|
||
|
||
### 1. 数据监控
|
||
- 实时设备状态监控
|
||
- 历史数据分析
|
||
- 告警机制
|
||
|
||
### 2. 设备管理
|
||
- 设备注册和注销
|
||
- 固件升级
|
||
- 参数配置
|
||
|
||
### 3. 数据分析
|
||
- 电池性能分析
|
||
- 故障预测
|
||
- 能耗统计
|
||
|
||
## 故障排除
|
||
|
||
### 常见问题
|
||
|
||
1. **MyBatis-Plus 相关**:
|
||
- 检查实体类注解配置
|
||
- 确认 Mapper 扫描路径
|
||
- 验证数据库连接配置
|
||
|
||
2. **MQTT 相关**:
|
||
- 检查 MQTT 服务器连接
|
||
- 确认主题订阅配置
|
||
- 验证消息格式
|
||
|
||
### 日志配置
|
||
|
||
在 `application.yml` 中调整日志级别:
|
||
```yaml
|
||
logging:
|
||
level:
|
||
com.evobms: debug
|
||
com.baomidou.mybatisplus: debug
|
||
org.springframework.integration.mqtt: debug
|
||
```
|
||
|
||
## 总结
|
||
|
||
通过集成 MyBatis-Plus 和 MQTT,EvoBMS 系统具备了:
|
||
- 强大的数据持久化能力
|
||
- 实时的设备通信功能
|
||
- 完整的 RESTful API
|
||
- 灵活的扩展机制
|
||
|
||
这为构建现代化的电池管理系统提供了坚实的技术基础。 |