Files
jsowell-charger-web/CLAUDE.md
2025-12-22 18:29:35 +08:00

226 lines
7.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## 项目概述
万车充运营管理平台 (jsowell-charger-web) - 电动汽车充电桩管理系统,基于 Spring Boot 2.5.14 + MyBatis + Netty 构建的多模块 Maven 项目。
**技术栈**
- Java 8
- Spring Boot 2.5.14
- MyBatis + MyBatis-Plus 3.4.0
- Netty 4.1.75 (TCP/MQTT 通信)
- Dubbo 3.3.0 + Nacos (微服务)
- Redis (缓存)
- RabbitMQ (消息队列)
- MySQL (数据库)
- Druid (连接池)
## 模块架构
项目采用多模块分层架构,各模块职责清晰:
```
jsowell-charger-web/
├── jsowell-admin/ # Web 服务入口模块,包含 Controller 层和启动类
├── jsowell-framework/ # 核心框架模块,包含安全、权限、登录等基础服务
├── jsowell-system/ # 系统管理模块,用户、角色、菜单、字典等
├── jsowell-common/ # 通用工具模块,工具类、常量、异常、注解等
├── jsowell-pile/ # 充电桩业务核心模块,订单、会员、计费、支付等
├── jsowell-netty/ # Netty 通信模块,处理充电桩设备 TCP/MQTT 协议
├── jsowell-thirdparty/ # 第三方平台对接模块,支付宝、微信、高德地图等
├── jsowell-quartz/ # 定时任务模块
├── jsowell-generator/ # 代码生成器模块
└── jsowell-settlement/ # 结算模块
```
**模块依赖关系**
- `jsowell-admin` 依赖 `jsowell-framework``jsowell-pile``jsowell-netty``jsowell-thirdparty`
- `jsowell-pile` 依赖 `jsowell-framework`(核心业务逻辑)
- `jsowell-netty` 依赖 `jsowell-pile``jsowell-thirdparty`(设备通信)
- `jsowell-framework` 依赖 `jsowell-system``jsowell-common`(基础框架)
## 核心业务流程
### 充电桩通信架构
系统通过 Netty 实现与充电桩设备的实时通信:
1. **TCP 服务器**`jsowell-netty` 模块启动 TCP 服务器监听充电桩连接
2. **协议处理**
- 云快充协议:`com.jsowell.netty.handler.yunkuaichong.*Handler`50+ 个处理器)
- 电动自行车协议:`com.jsowell.netty.handler.electricbicycles.*Handler`
3. **MQTT 支持**`BootNettyMqttChannelInboundHandler` 处理 MQTT 协议
4. **业务服务**
- `YKCBusinessService`:云快充业务逻辑
- `EBikeBusinessService`:电动自行车业务逻辑
- `CameraBusinessService`:摄像头业务逻辑
### 支付与结算流程
支持多种支付方式:
- **微信支付**`WechatPayService`V3 API
- **支付宝支付**`AliAppletRemoteService`
- **汇付支付**`AdapayMemberAccountService`
结算相关:
- 订单分账:`OrderSplitRecordService`
- 清算账单:`ClearingBillInfoService`
- 商户结算:`SettleOrderReportService`
### 第三方平台对接
`jsowell-thirdparty` 模块对接多个第三方平台:
- **高德地图**`AMapService`(充电站信息同步)
- **停车场系统**`QcyunsService``LTYTService``RJService`
- **充电平台**`ZDLService`(中电联)、`NRService`(南瑞)、`XDTService`(新电途)
## 常用开发命令
### 构建与运行
```bash
# 编译整个项目
mvn clean compile
# 打包(跳过测试)
mvn clean package -DskipTests
# 运行主应用(开发环境)
cd jsowell-admin
mvn spring-boot:run -Dspring-boot.run.profiles=dev
# 运行测试
mvn test
```
### 数据库相关
**MyBatis Mapper 位置**
- XML 文件:`src/main/resources/mapper/**/*Mapper.xml`
- Java 接口:`src/main/java/**/mapper/*Mapper.java`
- 配置:`mybatis-config.xml`(在 `jsowell-admin/src/main/resources/mybatis/`
**MyBatis-Plus**`jsowell-pile` 模块使用 MyBatis-Plus 3.4.0,支持 Lambda 查询和代码生成。
### 环境配置
**配置文件位置**`jsowell-admin/src/main/resources/`
- `application.yml`:主配置文件
- `application-dev.yml`:开发环境
- `application-sit.yml`:测试环境
- `application-pre.yml`:预发布环境
- `application-prd.yml`:生产环境
**切换环境**:修改 `application.yml` 中的 `spring.profiles.active`
### Dubbo 服务
项目使用 Dubbo 3.3.0 + Nacos 作为微服务框架:
- 注册中心Nacos
- 协议dubbo动态端口
- API 定义:`charge-common-api` 模块
## 代码规范
### 包结构约定
```
com.jsowell.{module}/
├── controller/ # REST API 控制器
├── service/ # 业务逻辑接口
│ └── impl/ # 业务逻辑实现
├── mapper/ # MyBatis Mapper 接口
├── domain/ # 实体类(对应数据库表)
├── dto/ # 数据传输对象
└── vo/ # 视图对象
```
### 命名规范
- **Controller**`{Entity}Controller`,使用 `@RestController``@Controller`
- **Service**:接口 `I{Entity}Service``{Entity}Service`,实现类 `{Entity}ServiceImpl`
- **Mapper**`{Entity}Mapper`(接口)+ `{Entity}Mapper.xml`XML
- **Domain**:实体类名与数据库表名对应(驼峰转下划线)
### 注解使用
- **Swagger**:使用 `@Api``@ApiOperation``@ApiParam` 生成 API 文档
- **权限控制**`@PreAuthorize("@ss.hasPermi('system:user:list')")`
- **日志记录**`@Log(title = "用户管理", businessType = BusinessType.INSERT)`
- **数据权限**`@DataScope(deptAlias = "d", userAlias = "u")`
## 关键配置说明
### Netty 服务器配置
Netty 服务器在 `jsowell-netty` 模块中配置,支持:
- TCP 服务器(云快充协议)
- MQTT 服务器(物联网设备)
- 电动自行车专用服务器
### 安全与认证
- **JWT Token**`TokenService` 管理 Token 生成和验证
- **密码加密**:使用 BCrypt 加密
- **权限验证**`PermissionService``SysPermissionService`
- **登录限制**:密码错误 5 次锁定 10 分钟
### 缓存策略
使用 Redis 缓存:
- 用户登录信息
- 字典数据
- 配置参数
- 充电桩在线状态
### 文件上传
- **本地存储**:配置 `jsowell.profile` 路径
- **阿里云 OSS**:配置在 `aliyunoss` 节点
- **Minio**:可选的对象存储方案
## 测试说明
测试文件位置:`jsowell-admin/src/test/java/`
现有测试:
- `SpringBootTestController.java`Spring Boot 集成测试
- `PaymentTestController.java`:支付功能测试
## 监控与运维
### Prometheus 监控
- 监控端口8091
- 指标路径:`/actuator/prometheus`
- 配置:`management.metrics.export.prometheus.enabled=true`
### Druid 监控
- 访问路径:`/druid/*`
- 用户名/密码:配置在 `application-{env}.yml`
### Swagger API 文档
- 开发环境访问:`http://localhost:8080/swagger-ui/`
- 配置:`swagger.enabled=true`
## 注意事项
1. **数据库连接**:使用 Druid 连接池,主从分离配置在 `application-{env}.yml`
2. **事务管理**:使用 `@Transactional` 注解,注意事务传播行为
3. **异步处理**RabbitMQ 配置手动确认模式(`acknowledge-mode: manual`
4. **Netty 线程模型**:注意 EventLoop 线程安全,避免阻塞操作
5. **Dubbo 服务**:启动时不检查提供者(`consumer.check=false`
6. **日志级别**:开发环境 `com.jsowell: debug`,生产环境建议 `info`
7. **热部署**:开发环境启用 `spring.devtools.restart.enabled=true`
## 启动类
主启动类:`com.jsowell.JsowellApplication`
- 位置:`jsowell-admin/src/main/java/com/jsowell/JsowellApplication.java`
- 注解:`@SpringBootApplication``@EnableDubbo`
- 排除:`DataSourceAutoConfiguration`(使用自定义数据源配置)