mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-19 18:45:03 +08:00
434 lines
16 KiB
Markdown
434 lines
16 KiB
Markdown
# CLAUDE.md
|
||
|
||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||
|
||
---
|
||
|
||
## 变更记录 (Changelog)
|
||
|
||
### 2026-01-30 16:51:50
|
||
- **初始化项目架构文档**
|
||
- 完成全仓扫描与模块识别(10 个模块)
|
||
- 生成根级 CLAUDE.md 文档
|
||
- 建立模块依赖关系图(Mermaid)
|
||
- 识别 500+ Java 文件、85 个 Mapper XML、168 个测试用例
|
||
- 覆盖率:核心模块 100%,测试模块 85%
|
||
|
||
---
|
||
|
||
## 项目愿景
|
||
|
||
万车充运营管理平台 (jsowell-charger-web) 是一个企业级电动汽车充电桩运营管理系统,旨在为充电站运营商提供完整的解决方案:
|
||
|
||
- **设备管理**: 充电桩设备监控、状态管理、远程控制
|
||
- **会员服务**: 会员注册、钱包管理、积分系统、车牌绑定
|
||
- **订单管理**: 充电订单、支付结算、分账清算、退款处理
|
||
- **实时通信**: 基于 Netty 的 TCP/MQTT 协议处理,支持云快充协议
|
||
- **平台互联**: 对接中电联、南瑞、高德地图等第三方平台
|
||
- **支付集成**: 支持微信、支付宝、汇付支付等多种支付方式
|
||
|
||
---
|
||
|
||
## 架构总览
|
||
|
||
### 技术栈
|
||
|
||
| 技术 | 版本 | 用途 |
|
||
|------|------|------|
|
||
| Java | 1.8 | 开发语言 |
|
||
| Spring Boot | 2.5.14 | 应用框架 |
|
||
| MyBatis | 2.2.2 | 持久层框架 |
|
||
| MyBatis-Plus | 3.4.0 | 增强工具(jsowell-pile 模块) |
|
||
| Netty | 4.1.75.Final | 设备通信(TCP/MQTT) |
|
||
| Dubbo | 3.3.0 | 微服务框架 |
|
||
| Nacos | 2.0.3 | 服务注册与配置中心 |
|
||
| Redis | - | 缓存 |
|
||
| RabbitMQ | - | 消息队列 |
|
||
| MySQL | - | 数据库 |
|
||
| Druid | 1.2.11 | 数据库连接池 |
|
||
| Swagger | 3.0.0 | API 文档 |
|
||
| Quartz | - | 定时任务 |
|
||
|
||
### 核心特性
|
||
|
||
1. **多模块分层架构**: 清晰的模块职责划分,便于维护和扩展
|
||
2. **设备实时通信**: 基于 Netty 的 TCP/MQTT 协议处理,支持云快充、电动自行车等多种设备
|
||
3. **微服务架构**: Dubbo + Nacos 实现服务治理与配置管理
|
||
4. **异步消息处理**: RabbitMQ 实现订单结算、积分发放等异步任务
|
||
5. **多支付方式**: 支持微信、支付宝、汇付支付、余额支付、白名单免费等
|
||
6. **第三方平台对接**: 支持中电联、南瑞、新电途、高德地图、停车场系统等
|
||
7. **分账清算**: 完整的商户分账与清算流程,支持汇付支付分账
|
||
8. **积分系统**: 充电奖励积分,异步发放,支持积分抵扣
|
||
|
||
---
|
||
|
||
## 模块结构图
|
||
|
||
```mermaid
|
||
graph TD
|
||
A["jsowell-charger-web<br/>(根项目)"] --> B["jsowell-admin<br/>(Web 入口)"];
|
||
A --> C["jsowell-framework<br/>(核心框架)"];
|
||
A --> D["jsowell-system<br/>(系统管理)"];
|
||
A --> E["jsowell-common<br/>(通用工具)"];
|
||
A --> F["jsowell-pile<br/>(充电桩业务)"];
|
||
A --> G["jsowell-netty<br/>(设备通信)"];
|
||
A --> H["jsowell-thirdparty<br/>(第三方对接)"];
|
||
A --> I["jsowell-quartz<br/>(定时任务)"];
|
||
A --> J["jsowell-generator<br/>(代码生成)"];
|
||
A --> K["jsowell-settlement<br/>(结算模块)"];
|
||
|
||
B --> C;
|
||
B --> F;
|
||
B --> G;
|
||
B --> H;
|
||
C --> D;
|
||
C --> E;
|
||
D --> E;
|
||
F --> C;
|
||
G --> F;
|
||
G --> H;
|
||
H --> F;
|
||
I --> F;
|
||
I --> G;
|
||
I --> H;
|
||
K --> F;
|
||
J --> E;
|
||
|
||
style A fill:#e1f5ff
|
||
style B fill:#fff4e1
|
||
style C fill:#ffe1e1
|
||
style F fill:#e1ffe1
|
||
style G fill:#f0e1ff
|
||
|
||
click B "./jsowell-admin/CLAUDE.md" "查看 jsowell-admin 模块文档"
|
||
click C "./jsowell-framework/CLAUDE.md" "查看 jsowell-framework 模块文档"
|
||
click D "./jsowell-system/CLAUDE.md" "查看 jsowell-system 模块文档"
|
||
click E "./jsowell-common/CLAUDE.md" "查看 jsowell-common 模块文档"
|
||
click F "./jsowell-pile/CLAUDE.md" "查看 jsowell-pile 模块文档"
|
||
click G "./jsowell-netty/CLAUDE.md" "查看 jsowell-netty 模块文档"
|
||
click H "./jsowell-thirdparty/CLAUDE.md" "查看 jsowell-thirdparty 模块文档"
|
||
click I "./jsowell-quartz/CLAUDE.md" "查看 jsowell-quartz 模块文档"
|
||
click J "./jsowell-generator/CLAUDE.md" "查看 jsowell-generator 模块文档"
|
||
click K "./jsowell-settlement/CLAUDE.md" "查看 jsowell-settlement 模块文档"
|
||
```
|
||
|
||
---
|
||
|
||
## 模块索引
|
||
|
||
| 模块 | 路径 | 职责 | 主要依赖 | 状态 |
|
||
|------|------|------|---------|------|
|
||
| **jsowell-admin** | `/jsowell-admin` | Web 服务入口,包含 Controller 层和启动类 | framework, pile, netty, thirdparty | ✅ 活跃 |
|
||
| **jsowell-framework** | `/jsowell-framework` | 核心框架,包含安全、权限、登录等基础服务 | system, common | ✅ 活跃 |
|
||
| **jsowell-system** | `/jsowell-system` | 系统管理模块,用户、角色、菜单、字典等 | common | ✅ 活跃 |
|
||
| **jsowell-common** | `/jsowell-common` | 通用工具模块,工具类、常量、异常、注解等 | - | ✅ 活跃 |
|
||
| **jsowell-pile** | `/jsowell-pile` | 充电桩业务核心模块,订单、会员、计费、支付等 | framework | ✅ 活跃 |
|
||
| **jsowell-netty** | `/jsowell-netty` | Netty 通信模块,处理充电桩设备 TCP/MQTT 协议 | pile, thirdparty | ✅ 活跃 |
|
||
| **jsowell-thirdparty** | `/jsowell-thirdparty` | 第三方平台对接模块,支付宝、微信、高德地图等 | pile | ✅ 活跃 |
|
||
| **jsowell-quartz** | `/jsowell-quartz` | 定时任务模块 | pile, netty, thirdparty | ✅ 活跃 |
|
||
| **jsowell-generator** | `/jsowell-generator` | 代码生成器模块 | common | ✅ 活跃 |
|
||
| **jsowell-settlement** | `/jsowell-settlement` | 结算模块 | pile | ⚠️ 待完善 |
|
||
|
||
---
|
||
|
||
## 运行与开发
|
||
|
||
### 环境要求
|
||
|
||
- **JDK**: 1.8+
|
||
- **Maven**: 3.6+
|
||
- **MySQL**: 5.7+
|
||
- **Redis**: 3.0+
|
||
- **RabbitMQ**: 3.8+
|
||
- **Nacos**: 2.0+
|
||
|
||
### 快速启动
|
||
|
||
```bash
|
||
# 1. 克隆项目
|
||
git clone <repository-url>
|
||
cd jsowell-charger-web
|
||
|
||
# 2. 编译项目
|
||
mvn clean compile
|
||
|
||
# 3. 打包(跳过测试)
|
||
mvn clean package -DskipTests
|
||
|
||
# 4. 运行主应用(开发环境)
|
||
cd jsowell-admin
|
||
mvn spring-boot:run -Dspring-boot.run.profiles=dev
|
||
|
||
# 或者运行打包后的 jar
|
||
java -jar jsowell-admin/target/jsowell-admin.jar --spring.profiles.active=dev
|
||
```
|
||
|
||
### 环境配置
|
||
|
||
配置文件位置:`jsowell-admin/src/main/resources/`
|
||
|
||
- `application.yml` - 主配置文件
|
||
- `application-dev.yml` - 开发环境
|
||
- `application-sit.yml` - 测试环境
|
||
- `application-pre.yml` - 预发布环境
|
||
- `application-prd.yml` - 生产环境
|
||
|
||
切换环境:修改 `application.yml` 中的 `spring.profiles.active`
|
||
|
||
### 访问地址
|
||
|
||
- **应用端口**: `http://localhost:8080`
|
||
- **Swagger 文档**: `http://localhost:8080/swagger-ui/`
|
||
- **Druid 监控**: `http://localhost:8080/druid/`
|
||
- **Prometheus 监控**: `http://localhost:8091/actuator/prometheus`
|
||
|
||
### 数据库配置
|
||
|
||
**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 查询和代码生成。
|
||
|
||
### Dubbo 服务
|
||
|
||
项目使用 Dubbo 3.3.0 + Nacos 作为微服务框架:
|
||
- 注册中心:Nacos
|
||
- 协议:dubbo(动态端口)
|
||
- API 定义:`charge-common-api` 模块(版本 0.1.7)
|
||
|
||
---
|
||
|
||
## 测试策略
|
||
|
||
### 测试文件位置
|
||
|
||
- 单元测试:`jsowell-admin/src/test/java/`
|
||
- 集成测试:同上
|
||
|
||
### 现有测试
|
||
|
||
| 测试类 | 测试数量 | 说明 |
|
||
|--------|---------|------|
|
||
| `SpringBootTestController` | 131 | Spring Boot 集成测试 |
|
||
| `PaymentTestController` | 20 | 支付功能测试 |
|
||
| `JcppMessageControllerTest` | 8 | JCPP 消息测试 |
|
||
| `PricingModelConverterTest` | 4 | 计费模型转换测试 |
|
||
| `OrderServiceWhitelistCompletionTest` | 3 | 白名单订单测试 |
|
||
| `WhitelistOrderCompletionDefaultsTest` | 2 | 白名单默认值测试 |
|
||
| `MemberBindingCarNoHttpTest` | - | 会员车牌绑定 HTTP 测试 |
|
||
|
||
**总计**: 168 个测试用例
|
||
|
||
### 运行测试
|
||
|
||
```bash
|
||
# 运行所有测试
|
||
mvn test
|
||
|
||
# 运行指定模块测试
|
||
mvn test -pl jsowell-admin
|
||
|
||
# 跳过测试
|
||
mvn clean package -DskipTests
|
||
```
|
||
|
||
---
|
||
|
||
## 编码规范
|
||
|
||
### 包结构约定
|
||
|
||
```
|
||
com.jsowell.{module}/
|
||
├── controller/ # REST API 控制器
|
||
├── service/ # 业务逻辑接口
|
||
│ └── impl/ # 业务逻辑实现
|
||
├── mapper/ # MyBatis Mapper 接口
|
||
├── domain/ # 实体类(对应数据库表)
|
||
├── dto/ # 数据传输对象
|
||
├── vo/ # 视图对象
|
||
├── enums/ # 枚举类
|
||
├── config/ # 配置类
|
||
└── mq/ # 消息队列相关
|
||
├── producer/ # 消息生产者
|
||
└── consumer/ # 消息消费者
|
||
```
|
||
|
||
### 命名规范
|
||
|
||
- **Controller**: `{Entity}Controller`,使用 `@RestController` 或 `@Controller`
|
||
- **Service**: 接口 `I{Entity}Service` 或 `{Entity}Service`,实现类 `{Entity}ServiceImpl`
|
||
- **Mapper**: `{Entity}Mapper`(接口)+ `{Entity}Mapper.xml`(XML)
|
||
- **Domain**: 实体类名与数据库表名对应(驼峰转下划线)
|
||
- **Enum**: `{Name}Enum`,放在 `enums` 包下
|
||
|
||
### 注解使用
|
||
|
||
- **Swagger**: `@Api`, `@ApiOperation`, `@ApiParam` 生成 API 文档
|
||
- **权限控制**: `@PreAuthorize("@ss.hasPermi('system:user:list')")`
|
||
- **日志记录**: `@Log(title = "用户管理", businessType = BusinessType.INSERT)`
|
||
- **数据权限**: `@DataScope(deptAlias = "d", userAlias = "u")`
|
||
- **事务管理**: `@Transactional(rollbackFor = Exception.class)`
|
||
- **RabbitMQ**: `@RabbitListener`, `@RabbitHandler`
|
||
|
||
### 代码质量
|
||
|
||
- 使用 Lombok 减少样板代码(`@Data`, `@Slf4j`, `@Builder` 等)
|
||
- 统一异常处理 (`GlobalExceptionHandler`)
|
||
- 统一返回结果 (`AjaxResult`, `R`)
|
||
- 日志规范:使用 SLF4J + Logback
|
||
- 使用 Swagger 注解生成 API 文档
|
||
|
||
---
|
||
|
||
## AI 使用指引
|
||
|
||
### 常见任务
|
||
|
||
#### 1. 添加新的业务功能
|
||
|
||
```
|
||
请帮我在 jsowell-pile 模块中添加一个新的会员优惠券功能,包括:
|
||
- 实体类 MemberCoupon(对应数据库表 member_coupon)
|
||
- Mapper 接口和 XML(参考 MemberPointsInfoMapper)
|
||
- Service 接口和实现(参考 MemberPointsInfoService)
|
||
- Controller API(参考 MemberPointsInfoController)
|
||
- 需要支持 CRUD 操作和优惠券发放功能
|
||
```
|
||
|
||
#### 2. 修改订单结算逻辑
|
||
|
||
```
|
||
请查看 /Users/autumn/Workspace/jsowell-charger-web/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java
|
||
中的 realTimeOrderSplit() 方法,帮我理解当前的分账逻辑,并建议如何优化。
|
||
```
|
||
|
||
#### 3. 添加第三方平台对接
|
||
|
||
```
|
||
请参考 /Users/autumn/Workspace/jsowell-charger-web/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/zhongdianlian/service/impl/ZDLServiceImpl.java
|
||
的实现,帮我添加一个新的第三方平台对接,平台名称是 XXX,需要实现以下接口:...
|
||
```
|
||
|
||
#### 4. 调试 Netty 通信问题
|
||
|
||
```
|
||
充电桩设备无法正常登录,请帮我检查
|
||
/Users/autumn/Workspace/jsowell-charger-web/jsowell-netty/src/main/java/com/jsowell/netty/service/yunkuaichong/impl/YKCBusinessServiceImpl.java
|
||
中的登录处理逻辑,并查看相关的 RabbitMQ 消息队列配置。
|
||
```
|
||
|
||
#### 5. 添加新的枚举类型
|
||
|
||
```
|
||
请在 jsowell-common 模块的 enums 包下添加一个新的枚举类 OrderRefundStatusEnum,
|
||
用于表示订单退款状态,参考现有的 OrderStatusEnum 的实现方式。
|
||
```
|
||
|
||
### 关键文件索引
|
||
|
||
| 功能 | 关键文件 |
|
||
|------|---------|
|
||
| 启动类 | `/Users/autumn/Workspace/jsowell-charger-web/jsowell-admin/src/main/java/com/jsowell/JsowellApplication.java` |
|
||
| 主配置 | `/Users/autumn/Workspace/jsowell-charger-web/jsowell-admin/src/main/resources/application.yml` |
|
||
| 订单结算 | `/Users/autumn/Workspace/jsowell-charger-web/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java` |
|
||
| 设备通信 | `/Users/autumn/Workspace/jsowell-charger-web/jsowell-netty/src/main/java/com/jsowell/netty/service/yunkuaichong/impl/YKCBusinessServiceImpl.java` |
|
||
| 积分系统 | `/Users/autumn/Workspace/jsowell-charger-web/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/MemberPointsInfoServiceImpl.java` |
|
||
| 微信支付 | `/Users/autumn/Workspace/jsowell-charger-web/jsowell-pile/src/main/java/com/jsowell/wxpay/config/WechatPayConfig.java` |
|
||
| 支付宝支付 | `/Users/autumn/Workspace/jsowell-charger-web/jsowell-pile/src/main/java/com/jsowell/alipay/config/AliPayConfig.java` |
|
||
| 汇付支付 | `/Users/autumn/Workspace/jsowell-charger-web/jsowell-pile/src/main/java/com/jsowell/adapay/config/InitializeAdapayConfig.java` |
|
||
| RabbitMQ 配置 | `/Users/autumn/Workspace/jsowell-charger-web/jsowell-common/src/main/java/com/jsowell/common/config/mq/RabbitConfig.java` |
|
||
| 积分 RabbitMQ | `/Users/autumn/Workspace/jsowell-charger-web/jsowell-common/src/main/java/com/jsowell/common/config/mq/PointsRabbitConfig.java` |
|
||
| 安全配置 | `/Users/autumn/Workspace/jsowell-charger-web/jsowell-framework/src/main/java/com/jsowell/framework/config/SecurityConfig.java` |
|
||
| Redis 配置 | `/Users/autumn/Workspace/jsowell-charger-web/jsowell-framework/src/main/java/com/jsowell/framework/config/RedisConfig.java` |
|
||
|
||
### 数据库表索引
|
||
|
||
详细的数据库表结构请参考各模块的 `CLAUDE.md` 文档。
|
||
|
||
主要表分类:
|
||
- **会员相关**: `member_basic_info`, `member_wallet_info`, `member_wallet_log`, `member_points_info`, `member_points_record`, `member_plate_number_relation`
|
||
- **充电桩相关**: `pile_station_info`, `pile_basic_info`, `pile_connector_info`, `pile_billing_template`, `pile_merchant_info`, `pile_station_whitelist`, `pile_auth_card`
|
||
- **订单相关**: `order_basic_info`, `order_pay_record`, `order_monitor_data`, `order_abnormal_record`, `order_split_record`
|
||
- **结算相关**: `clearing_bill_info`, `clearing_bill_detail`, `station_split_config`, `settle_order_report`
|
||
- **系统相关**: `sys_user`, `sys_role`, `sys_menu`, `sys_dept`, `sys_dict_type`, `sys_dict_data`, `sys_config`
|
||
|
||
### 枚举类索引
|
||
|
||
项目中定义了大量枚举类,位于 `jsowell-common/src/main/java/com/jsowell/common/enums/` 目录下:
|
||
|
||
- **订单相关**: `OrderStatusEnum`, `OrderPayStatusEnum`, `OrderPayModeEnum`, `OrderTypeEnum`
|
||
- **支付相关**: `PayModeEnum`, `PaymentInstitutionsEnum`, `AdapayStatusEnum`, `AdapayPayChannelEnum`
|
||
- **充电桩相关**: `PileStatusEnum`, `PileConnectorStatusEnum`, `StartModeEnum`, `StopChargingFailedReasonEnum`
|
||
- **会员相关**: `MemberWalletEnum`, `BalanceChangesEnum`
|
||
- **第三方平台**: `ThirdPlatformTypeEnum`, `ThirdPartyApiEnum`, `ThirdPartyReturnCodeEnum`
|
||
|
||
---
|
||
|
||
## 监控与运维
|
||
|
||
### 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`
|
||
|
||
### 日志
|
||
|
||
- **日志配置**: `logback-spring.xml`
|
||
- **日志级别**:
|
||
- 开发环境: `com.jsowell: debug`
|
||
- 生产环境: `com.jsowell: info`
|
||
|
||
---
|
||
|
||
## 注意事项
|
||
|
||
1. **数据库连接**: 使用 Druid 连接池,主从分离配置在 `application-{env}.yml`
|
||
2. **事务管理**: 使用 `@Transactional` 注解,注意事务传播行为
|
||
3. **异步处理**: RabbitMQ 已改为自动应答模式(2024年12月26日)
|
||
4. **Netty 线程模型**: 注意 EventLoop 线程安全,避免阻塞操作
|
||
5. **Dubbo 服务**: 启动时不检查提供者(`consumer.check=false`)
|
||
6. **积分发放**: 通过 RabbitMQ 异步处理,避免影响订单结算主流程
|
||
7. **热部署**: 开发环境启用 `spring.devtools.restart.enabled=true`
|
||
8. **文件上传**: 支持本地存储、阿里云 OSS、Minio 三种方式
|
||
9. **密码安全**: 使用 BCrypt 加密,密码错误 5 次锁定 10 分钟
|
||
10. **Token 管理**: JWT Token 有效期 1440 分钟(1天),接口 Token 有效期 259200 分钟(6个月)
|
||
|
||
---
|
||
|
||
## 相关资源
|
||
|
||
- [Spring Boot 文档](https://spring.io/projects/spring-boot)
|
||
- [MyBatis 文档](https://mybatis.org/mybatis-3/)
|
||
- [MyBatis-Plus 文档](https://baomidou.com/)
|
||
- [Netty 文档](https://netty.io/wiki/)
|
||
- [Dubbo 文档](https://dubbo.apache.org/)
|
||
- [RabbitMQ 文档](https://www.rabbitmq.com/documentation.html)
|
||
- [Nacos 文档](https://nacos.io/zh-cn/docs/what-is-nacos.html)
|
||
|
||
---
|
||
|
||
## 联系方式
|
||
|
||
- **项目维护**: jsowell 团队
|
||
- **Git 分支**:
|
||
- 主分支: `master`
|
||
- 开发分支: `dev`(当前分支)
|
||
- **最近提交**:
|
||
- `7c576ca25` - bugfix 查询订单详情字段为空
|
||
- `c1db659cc` - update
|
||
- `5ffb8826f` - update 运营端小程序查询订单详情接口补充反参
|