Files
jsowell-charger-web/jsowell-netty/CLAUDE.md

219 lines
5.6 KiB
Markdown
Raw Normal View History

2026-02-03 14:20:30 +08:00
[根目录](../CLAUDE.md) > **jsowell-netty**
# jsowell-netty 模块
Netty 通信模块,处理充电桩设备的 TCP/MQTT 协议通信。
---
## 变更记录 (Changelog)
### 2026-02-03 11:32:30
- 初始化模块文档
- 识别云快充协议处理器 70+ 个
- 识别电动自行车协议处理器 7 个
---
## 模块职责
- **TCP 服务**: 基于 Netty 的 TCP 服务器,处理充电桩设备连接
- **MQTT 服务**: MQTT 协议支持
- **协议解析**: 云快充协议、电动自行车协议解析
- **消息处理**: 设备登录、心跳、充电控制、数据上报
- **远程控制**: 远程启停充电、参数配置、固件升级
---
## 入口与启动
### Netty 服务器
```java
// NettyServer.java - 云快充 TCP 服务器
@Component
public class NettyServer {
// 启动 TCP 服务器,监听充电桩连接
}
// MqttSever.java - MQTT 服务器
@Component
public class MqttSever {
// 启动 MQTT 服务器
}
```
### 服务管理
```java
// NettyServerManager.java
@Component
public class NettyServerManager {
// 管理多个 Netty 服务器实例
}
```
---
## 对外接口
### 协议处理器(云快充)
| Handler | 帧类型 | 说明 |
|---------|--------|------|
| `LoginRequestHandler` | 0x01 | 设备登录 |
| `HeartbeatRequestHandler` | 0x03 | 心跳 |
| `BillingTemplateRequestHandler` | 0x05 | 计费模板请求 |
| `RemoteStartChargingRequestHandler` | 0x33 | 远程启动充电 |
| `RemoteStopChargingRequestHandler` | 0x35 | 远程停止充电 |
| `UploadRealTimeMonitorHandler` | 0x13 | 实时监控数据上报 |
| `ChargeEndHandler` | 0x15 | 充电结束 |
| `ConfirmStartChargingRequestHandler` | 0x17 | 确认启动充电 |
### 协议处理器(电动自行车)
| Handler | 说明 |
|---------|------|
| `RegistrationHandler` | 设备注册 |
| `HeartbeatHandler` | 心跳 |
| `SettlementUploadHandler` | 结算上报 |
| `PowerHeartbeatHandler` | 电源心跳 |
### 业务服务
```java
// YKCBusinessService.java - 云快充业务服务
public interface YKCBusinessService {
void handleLogin(LoginRequestData data);
void handleHeartbeat(HeartbeatData data);
void handleChargeEnd(TransactionRecordsData data);
// ...
}
// EBikeBusinessService.java - 电动自行车业务服务
public interface EBikeBusinessService {
void handleRegistration(RegistrationData data);
void handleSettlement(SettlementData data);
// ...
}
```
---
## 关键依赖与配置
### Maven 依赖
```xml
<dependencies>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.75.Final</version>
</dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-codec-mqtt</artifactId>
<version>4.1.79.Final</version>
</dependency>
<dependency>
<groupId>com.jsowell</groupId>
<artifactId>jsowell-pile</artifactId>
</dependency>
<dependency>
<groupId>com.jsowell</groupId>
<artifactId>jsowell-thirdparty</artifactId>
</dependency>
</dependencies>
```
---
## 数据模型
### 协议数据结构
| 类 | 说明 |
|-----|------|
| `YKCDataProtocol` | 云快充协议数据 |
| `YKCBaseMessage` | 基础消息 |
| `LoginRequestData` | 登录请求数据 |
| `RealTimeMonitorData` | 实时监控数据 |
| `TransactionRecordsData` | 交易记录数据 |
| `EBikeDataProtocol` | 电动自行车协议数据 |
### 帧类型码
定义在 `YKCFrameTypeCode.java`
- `0x01/0x02` - 登录请求/响应
- `0x03/0x04` - 心跳请求/响应
- `0x13/0x14` - 实时数据上报/响应
- `0x15/0x16` - 充电结束上报/响应
- `0x33/0x34` - 远程启动/响应
- `0x35/0x36` - 远程停止/响应
---
## 测试与质量
### 测试客户端
```java
// TestNettyClient.java
public class TestNettyClient {
// 用于测试 Netty 服务器的客户端
}
```
---
## 常见问题 (FAQ)
### Q: 设备无法连接?
1. 检查 TCP 端口是否开放
2. 检查设备 SN 是否已注册
3. 查看 `YKCBusinessServiceImpl.handleLogin()` 日志
### Q: 充电无法启动?
1. 检查设备在线状态
2. 检查充电枪状态
3. 查看 `RemoteStartChargingRequestHandler` 处理逻辑
### Q: 实时数据不更新?
1. 检查心跳是否正常
2. 检查 `UploadRealTimeMonitorHandler` 处理
3. 查看 RabbitMQ 消息队列状态
---
## 相关文件清单
```
jsowell-netty/
├── src/main/java/com/jsowell/netty/
│ ├── client/ # Netty 客户端
│ ├── decoder/ # 协议解码器
│ │ ├── YkcProtocolDecoder.java
│ │ ├── YouDianProtocolDecoder.java
│ │ └── YunKuaiChongDecoder.java
│ ├── domain/ # 数据模型
│ ├── factory/ # 处理器工厂
│ │ ├── YKCOperateFactory.java
│ │ └── EBikeOperateFactory.java
│ ├── handler/ # 消息处理器
│ │ ├── yunkuaichong/ # 云快充处理器 (70+)
│ │ └── electricbicycles/ # 电动自行车处理器
│ ├── server/ # Netty 服务器
│ │ ├── yunkuaichong/ # 云快充服务器
│ │ ├── electricbicycles/ # 电动自行车服务器
│ │ └── mqtt/ # MQTT 服务器
│ ├── service/ # 业务服务
│ │ ├── yunkuaichong/
│ │ ├── electricbicycles/
│ │ ├── camera/
│ │ └── rabbitmq/ # RabbitMQ 监听
│ └── strategy/ # 策略模式
│ └── ykc/ # 云快充策略
└── pom.xml
```