mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-19 18:45:03 +08:00
Merge branch 'dev' of https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web into dev
This commit is contained in:
766
CLAUDE.md
766
CLAUDE.md
@@ -2,351 +2,195 @@
|
||||
|
||||
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 项目。
|
||||
## 变更记录 (Changelog)
|
||||
|
||||
**技术栈**:
|
||||
- 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 (连接池)
|
||||
### 2026-02-03 11:32:30
|
||||
- **增量更新项目架构文档**
|
||||
- 更新文件统计:600+ Java 文件、80 个 Mapper XML、60 个枚举类
|
||||
- 新增各模块 CLAUDE.md 文档(10 个模块)
|
||||
- 更新模块依赖关系与覆盖率报告
|
||||
- 识别 108 个 Controller、80 个 Service 实现类
|
||||
- 覆盖率:核心模块 100%,测试模块 90%
|
||||
|
||||
## 模块架构
|
||||
### 2026-01-30 16:51:50
|
||||
- **初始化项目架构文档**
|
||||
- 完成全仓扫描与模块识别(10 个模块)
|
||||
- 生成根级 CLAUDE.md 文档
|
||||
- 建立模块依赖关系图(Mermaid)
|
||||
- 识别 500+ Java 文件、85 个 Mapper XML、168 个测试用例
|
||||
- 覆盖率:核心模块 100%,测试模块 85%
|
||||
|
||||
项目采用多模块分层架构,各模块职责清晰:
|
||||
---
|
||||
|
||||
```
|
||||
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-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-framework`、`jsowell-pile`、`jsowell-netty`、`jsowell-thirdparty`
|
||||
- `jsowell-pile` 依赖 `jsowell-framework`(核心业务逻辑)
|
||||
- `jsowell-netty` 依赖 `jsowell-pile`、`jsowell-thirdparty`(设备通信)
|
||||
- `jsowell-framework` 依赖 `jsowell-system`、`jsowell-common`(基础框架)
|
||||
---
|
||||
|
||||
## 模块索引
|
||||
|
||||
| 模块 | 路径 | 职责 | 主要依赖 | 状态 |
|
||||
|------|------|------|---------|------|
|
||||
| **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 | ⚠️ 待完善 |
|
||||
|
||||
---
|
||||
|
||||
## 核心业务功能
|
||||
## 运行与开发
|
||||
|
||||
### 1. 会员管理
|
||||
### 环境要求
|
||||
|
||||
#### 1.1 会员基本信息
|
||||
- **实体类**:`MemberBasicInfo`
|
||||
- **服务类**:`MemberBasicInfoService`
|
||||
- **数据表**:`member_basic_info`
|
||||
- **功能**:会员注册、信息维护、实名认证、车牌绑定
|
||||
- **JDK**: 1.8+
|
||||
- **Maven**: 3.6+
|
||||
- **MySQL**: 5.7+
|
||||
- **Redis**: 3.0+
|
||||
- **RabbitMQ**: 3.8+
|
||||
- **Nacos**: 2.0+
|
||||
|
||||
#### 1.2 会员钱包
|
||||
- **实体类**:`MemberWalletInfo`、`MemberWalletLog`
|
||||
- **服务类**:`MemberWalletInfoService`、`MemberWalletLogService`
|
||||
- **数据表**:`member_wallet_info`、`member_wallet_log`
|
||||
- **功能**:
|
||||
- 余额管理(本金余额、赠金余额)
|
||||
- 充值记录
|
||||
- 消费记录
|
||||
- 退款处理
|
||||
|
||||
#### 1.3 会员积分系统
|
||||
- **实体类**:`MemberPointsInfo`、`MemberPointsRecord`
|
||||
- **服务类**:`MemberPointsInfoService`、`MemberPointsRecordService`
|
||||
- **数据表**:`member_points_info`、`member_points_record`
|
||||
- **Controller**:`MemberPointsInfoController`(路径:`/points`)
|
||||
|
||||
**积分规则**:
|
||||
- 积分类型:`1-充电奖励`、`2-消费抵扣`
|
||||
- 发放条件:
|
||||
1. 结算金额大于 0
|
||||
2. 在线支付(微信支付 payMode=4、支付宝支付 payMode=5)
|
||||
- 积分计算:积分数量 = 实际结算金额(保留两位小数)
|
||||
- 异步发放:通过 RabbitMQ 队列 `ykc.pointsReward-topic.member-group` 异步处理
|
||||
|
||||
**积分 API**:
|
||||
| 方法 | 路径 | 说明 | 权限 |
|
||||
|------|------|------|------|
|
||||
| GET | `/points/balance` | 查询积分余额 | `member:points:query` |
|
||||
| GET | `/points/list` | 查询积分明细 | `member:points:list` |
|
||||
| POST | `/points/add` | 增加积分 | `member:points:add` |
|
||||
| POST | `/points/deduct` | 扣减积分 | `member:points:deduct` |
|
||||
| POST | `/points/init` | 初始化积分账户 | `member:points:init` |
|
||||
|
||||
**积分相关类**:
|
||||
- 消息实体:`PointsRewardMessage`
|
||||
- 消息生产者:`PointsRewardProducer`
|
||||
- 消息消费者:`PointsRewardConsumer`
|
||||
- RabbitMQ 配置:`PointsRabbitConfig`
|
||||
|
||||
---
|
||||
|
||||
### 2. 充电桩管理
|
||||
|
||||
#### 2.1 充电站
|
||||
- **实体类**:`PileStationInfo`
|
||||
- **服务类**:`PileStationInfoService`
|
||||
- **数据表**:`pile_station_info`
|
||||
- **功能**:充电站基本信息、地理位置、营业时间、服务设施
|
||||
|
||||
#### 2.2 充电桩设备
|
||||
- **实体类**:`PileBasicInfo`
|
||||
- **服务类**:`PileBasicInfoService`
|
||||
- **数据表**:`pile_basic_info`
|
||||
- **功能**:充电桩信息、在线状态、功率配置
|
||||
|
||||
#### 2.3 充电枪(连接器)
|
||||
- **实体类**:`PileConnectorInfo`
|
||||
- **服务类**:`PileConnectorInfoService`
|
||||
- **数据表**:`pile_connector_info`
|
||||
- **功能**:充电枪状态、充电功率、故障信息
|
||||
|
||||
#### 2.4 计费模板
|
||||
- **实体类**:`PileBillingTemplate`
|
||||
- **服务类**:`PileBillingTemplateService`
|
||||
- **数据表**:`pile_billing_template`
|
||||
- **功能**:分时电价、服务费配置、计费规则
|
||||
|
||||
---
|
||||
|
||||
### 3. 订单管理
|
||||
|
||||
#### 3.1 充电订单
|
||||
- **实体类**:`OrderBasicInfo`
|
||||
- **服务类**:`OrderBasicInfoService`
|
||||
- **数据表**:`order_basic_info`
|
||||
- **Mapper**:`OrderBasicInfoMapper`
|
||||
|
||||
**订单状态**(`OrderStatusEnum`):
|
||||
- `0` - 待支付
|
||||
- `1` - 充电中
|
||||
- `2` - 充电完成
|
||||
- `3` - 已取消
|
||||
- `4` - 异常结束
|
||||
|
||||
**支付状态**:
|
||||
- `0` - 待支付
|
||||
- `1` - 支付完成
|
||||
- `2` - 无需支付
|
||||
- `3` - 待补缴
|
||||
|
||||
**支付方式**(`OrderPayModeEnum`):
|
||||
- `1` - 余额支付(本金)
|
||||
- `2` - 赠金支付
|
||||
- `3` - 白名单支付(免费)
|
||||
- `4` - 微信支付
|
||||
- `5` - 支付宝支付
|
||||
- `6` - ETC 支付
|
||||
|
||||
#### 3.2 订单支付记录
|
||||
- **实体类**:`OrderPayRecord`
|
||||
- **服务类**:`OrderPayRecordService`
|
||||
- **数据表**:`order_pay_record`
|
||||
- **功能**:记录每笔支付的详细信息,支持多次支付
|
||||
|
||||
#### 3.3 订单监控数据
|
||||
- **实体类**:`OrderMonitorData`
|
||||
- **服务类**:`OrderMonitorDataService`
|
||||
- **数据表**:`order_monitor_data`
|
||||
- **功能**:充电过程实时数据(电压、电流、功率、SOC)
|
||||
|
||||
#### 3.4 订单异常记录
|
||||
- **实体类**:`OrderAbnormalRecord`
|
||||
- **服务类**:`OrderAbnormalRecordService`
|
||||
- **数据表**:`order_abnormal_record`
|
||||
- **功能**:记录充电异常情况
|
||||
|
||||
---
|
||||
|
||||
### 4. 支付与结算
|
||||
|
||||
#### 4.1 支付方式
|
||||
|
||||
**微信支付**:
|
||||
- 服务类:`WxAppletRemoteService`
|
||||
- 配置类:`WechatPayConfig`
|
||||
- 使用微信支付 V3 API
|
||||
- 支持小程序支付
|
||||
|
||||
**支付宝支付**:
|
||||
- 服务类:`AliAppletRemoteService`
|
||||
- 支持支付宝小程序支付
|
||||
|
||||
**汇付支付**:
|
||||
- 服务类:`AdapayService`、`AdapayMemberAccountService`
|
||||
- 配置类:`AdapayConfig`
|
||||
- 用于分账和清算
|
||||
|
||||
#### 4.2 订单结算流程
|
||||
|
||||
**结算入口**:`OrderBasicInfoServiceImpl.realTimeOrderSplit()`
|
||||
|
||||
**结算流程**:
|
||||
1. 校验订单支付金额、消费金额、退款金额
|
||||
2. 白名单支付直接返回(不做处理)
|
||||
3. 余额支付校验:消费金额 - 折扣金额 + 退款金额 = 支付金额
|
||||
4. 在线支付校验:结算金额 + 退款金额 = 支付金额
|
||||
5. 执行退款(如有)
|
||||
6. 执行分账
|
||||
7. 发放积分奖励(异步)
|
||||
|
||||
**分账逻辑**:`splittingMethod()`
|
||||
- 根据站点分账配置计算各方分成
|
||||
- 支持电费和服务费分别计算
|
||||
- 调用汇付支付接口执行分账
|
||||
|
||||
#### 4.3 分账配置
|
||||
- **实体类**:`StationSplitConfig`
|
||||
- **服务类**:`StationSplitConfigService`
|
||||
- **数据表**:`station_split_config`
|
||||
- **功能**:配置各参与方的分账比例
|
||||
|
||||
#### 4.4 分账记录
|
||||
- **实体类**:`OrderSplitRecord`
|
||||
- **服务类**:`OrderSplitRecordService`
|
||||
- **数据表**:`order_split_record`
|
||||
- **功能**:记录每笔订单的分账详情
|
||||
|
||||
#### 4.5 清算账单
|
||||
- **实体类**:`ClearingBillInfo`、`ClearingBillDetail`
|
||||
- **服务类**:`ClearingBillInfoService`、`ClearingBillDetailService`
|
||||
- **数据表**:`clearing_bill_info`、`clearing_bill_detail`
|
||||
- **功能**:商户清算账单管理
|
||||
|
||||
---
|
||||
|
||||
### 5. 充电桩通信
|
||||
|
||||
#### 5.1 通信架构
|
||||
- **模块**:`jsowell-netty`
|
||||
- **协议**:云快充协议(TCP)、MQTT 协议
|
||||
- **服务器**:Netty TCP Server
|
||||
|
||||
#### 5.2 云快充协议处理器
|
||||
位置:`com.jsowell.netty.handler.yunkuaichong`
|
||||
|
||||
主要处理器:
|
||||
- `PileLoginHandler` - 充电桩登录
|
||||
- `HeartBeatHandler` - 心跳检测
|
||||
- `RealTimeDataHandler` - 实时数据上报
|
||||
- `TransactionRecordHandler` - 交易记录上报
|
||||
- `StartChargeHandler` - 启动充电
|
||||
- `StopChargeHandler` - 停止充电
|
||||
|
||||
#### 5.3 业务服务
|
||||
- `YKCBusinessService` - 云快充业务逻辑
|
||||
- `EBikeBusinessService` - 电动自行车业务逻辑
|
||||
- `CameraBusinessService` - 摄像头业务逻辑
|
||||
|
||||
#### 5.4 消息队列处理
|
||||
- **监听器**:`OrderRabbitListener`、`PileRabbitListener`
|
||||
- **队列常量**:`RabbitConstants`
|
||||
|
||||
主要队列:
|
||||
| 队列名称 | 用途 |
|
||||
|----------|------|
|
||||
| `ykc.pileLogin-topic.device-group` | 充电桩登录 |
|
||||
| `ykc.heartBeat-topic.device-group` | 心跳消息 |
|
||||
| `ykc.realtimeData-topic.device-group` | 实时数据 |
|
||||
| `ykc.chargeOrderData-topic.device-group` | 订单结算 |
|
||||
| `ykc.pointsReward-topic.member-group` | 积分奖励 |
|
||||
|
||||
---
|
||||
|
||||
### 6. 第三方平台对接
|
||||
|
||||
#### 6.1 地图服务
|
||||
- **高德地图**:`AMapService` - 充电站信息同步到高德
|
||||
|
||||
#### 6.2 停车场系统
|
||||
- `QcyunsService` - 青城云停车
|
||||
- `LTYTService` - 蓝天云停
|
||||
- `RJService` - 睿捷停车
|
||||
|
||||
#### 6.3 充电平台互联互通
|
||||
- `ZDLService` - 中电联平台
|
||||
- `NRService` - 南瑞平台
|
||||
- `XDTService` - 新电途平台
|
||||
|
||||
#### 6.4 第三方关系映射
|
||||
- **实体类**:`ThirdpartySnRelation`
|
||||
- **服务类**:`IThirdpartySnRelationService`
|
||||
- **功能**:管理本地设备与第三方平台设备的映射关系
|
||||
|
||||
---
|
||||
|
||||
### 7. 商户管理
|
||||
|
||||
#### 7.1 商户信息
|
||||
- **实体类**:`PileMerchantInfo`
|
||||
- **服务类**:`PileMerchantInfoService`
|
||||
- **数据表**:`pile_merchant_info`
|
||||
- **功能**:商户基本信息、资质认证、结算账户
|
||||
|
||||
#### 7.2 商户汇付账户
|
||||
- **实体类**:`MemberAdapayRecord`
|
||||
- **服务类**:`MemberAdapayRecordService`、`AdapayMemberAccountService`
|
||||
- **功能**:商户在汇付的分账账户管理
|
||||
|
||||
---
|
||||
|
||||
### 8. 白名单管理
|
||||
|
||||
- **实体类**:`PileStationWhitelist`
|
||||
- **服务类**:`PileStationWhitelistService`
|
||||
- **数据表**:`pile_station_whitelist`
|
||||
- **功能**:
|
||||
- 免费充电白名单
|
||||
- 支持按车牌、会员、卡号设置
|
||||
- 白名单用户充电不扣费
|
||||
|
||||
---
|
||||
|
||||
### 9. 授权卡管理
|
||||
|
||||
- **实体类**:`PileAuthCard`
|
||||
- **服务类**:`PileAuthCardService`
|
||||
- **数据表**:`pile_auth_card`
|
||||
- **功能**:
|
||||
- 刷卡充电授权
|
||||
- 卡号与会员绑定
|
||||
- 卡片状态管理
|
||||
|
||||
---
|
||||
|
||||
## 常用开发命令
|
||||
|
||||
### 构建与运行
|
||||
### 快速启动
|
||||
|
||||
```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
|
||||
|
||||
# 运行测试
|
||||
mvn test
|
||||
# 或者运行打包后的 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`
|
||||
@@ -355,27 +199,52 @@ mvn test
|
||||
|
||||
**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` 模块
|
||||
- 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
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 编码规范
|
||||
|
||||
### 包结构约定
|
||||
|
||||
@@ -389,6 +258,7 @@ com.jsowell.{module}/
|
||||
├── dto/ # 数据传输对象
|
||||
├── vo/ # 视图对象
|
||||
├── enums/ # 枚举类
|
||||
├── config/ # 配置类
|
||||
└── mq/ # 消息队列相关
|
||||
├── producer/ # 消息生产者
|
||||
└── consumer/ # 消息消费者
|
||||
@@ -396,113 +266,112 @@ com.jsowell.{module}/
|
||||
|
||||
### 命名规范
|
||||
|
||||
- **Controller**:`{Entity}Controller`,使用 `@RestController` 或 `@Controller`
|
||||
- **Service**:接口 `I{Entity}Service` 或 `{Entity}Service`,实现类 `{Entity}ServiceImpl`
|
||||
- **Mapper**:`{Entity}Mapper`(接口)+ `{Entity}Mapper.xml`(XML)
|
||||
- **Domain**:实体类名与数据库表名对应(驼峰转下划线)
|
||||
- **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)`
|
||||
- **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 使用指引
|
||||
|
||||
### RabbitMQ 配置
|
||||
### 常见任务
|
||||
|
||||
**配置类**:`RabbitConfig`、`PointsRabbitConfig`
|
||||
**常量类**:`RabbitConstants`
|
||||
#### 1. 添加新的业务功能
|
||||
|
||||
**配置特点**:
|
||||
- 消息序列化:`Jackson2JsonMessageConverter`
|
||||
- 应答模式:自动应答(2024年12月26日改为自动)
|
||||
- 重试机制:指数退避策略
|
||||
- 并发消费者:1-20
|
||||
```
|
||||
请帮我在 jsowell-pile 模块中添加一个新的会员优惠券功能,包括:
|
||||
- 实体类 MemberCoupon(对应数据库表 member_coupon)
|
||||
- Mapper 接口和 XML(参考 MemberPointsInfoMapper)
|
||||
- Service 接口和实现(参考 MemberPointsInfoService)
|
||||
- Controller API(参考 MemberPointsInfoController)
|
||||
- 需要支持 CRUD 操作和优惠券发放功能
|
||||
```
|
||||
|
||||
### Netty 服务器配置
|
||||
#### 2. 修改订单结算逻辑
|
||||
|
||||
Netty 服务器在 `jsowell-netty` 模块中配置,支持:
|
||||
- TCP 服务器(云快充协议)
|
||||
- MQTT 服务器(物联网设备)
|
||||
- 电动自行车专用服务器
|
||||
```
|
||||
请查看 /Users/autumn/Workspace/jsowell-charger-web/jsowell-pile/src/main/java/com/jsowell/pile/service/impl/OrderBasicInfoServiceImpl.java
|
||||
中的 realTimeOrderSplit() 方法,帮我理解当前的分账逻辑,并建议如何优化。
|
||||
```
|
||||
|
||||
### 安全与认证
|
||||
#### 3. 添加第三方平台对接
|
||||
|
||||
- **JWT Token**:`TokenService` 管理 Token 生成和验证
|
||||
- **密码加密**:使用 BCrypt 加密
|
||||
- **权限验证**:`PermissionService` 和 `SysPermissionService`
|
||||
- **登录限制**:密码错误 5 次锁定 10 分钟
|
||||
```
|
||||
请参考 /Users/autumn/Workspace/jsowell-charger-web/jsowell-thirdparty/src/main/java/com/jsowell/thirdparty/zhongdianlian/service/impl/ZDLServiceImpl.java
|
||||
的实现,帮我添加一个新的第三方平台对接,平台名称是 XXX,需要实现以下接口:...
|
||||
```
|
||||
|
||||
### 缓存策略
|
||||
#### 4. 调试 Netty 通信问题
|
||||
|
||||
使用 Redis 缓存:
|
||||
- 用户登录信息
|
||||
- 字典数据
|
||||
- 配置参数
|
||||
- 充电桩在线状态
|
||||
```
|
||||
充电桩设备无法正常登录,请帮我检查
|
||||
/Users/autumn/Workspace/jsowell-charger-web/jsowell-netty/src/main/java/com/jsowell/netty/service/yunkuaichong/impl/YKCBusinessServiceImpl.java
|
||||
中的登录处理逻辑,并查看相关的 RabbitMQ 消息队列配置。
|
||||
```
|
||||
|
||||
### 文件上传
|
||||
#### 5. 添加新的枚举类型
|
||||
|
||||
- **本地存储**:配置 `jsowell.profile` 路径
|
||||
- **阿里云 OSS**:配置在 `aliyunoss` 节点
|
||||
- **Minio**:可选的对象存储方案
|
||||
```
|
||||
请在 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` |
|
||||
|
||||
### 会员相关表
|
||||
| 表名 | 说明 |
|
||||
|------|------|
|
||||
| `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` | 授权卡 |
|
||||
详细的数据库表结构请参考各模块的 `CLAUDE.md` 文档。
|
||||
|
||||
### 订单相关表
|
||||
| 表名 | 说明 |
|
||||
|------|------|
|
||||
| `order_basic_info` | 订单基本信息 |
|
||||
| `order_pay_record` | 支付记录 |
|
||||
| `order_monitor_data` | 监控数据 |
|
||||
| `order_abnormal_record` | 异常记录 |
|
||||
| `order_split_record` | 分账记录 |
|
||||
主要表分类:
|
||||
- **会员相关**: `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`
|
||||
|
||||
### 结算相关表
|
||||
| 表名 | 说明 |
|
||||
|------|------|
|
||||
| `station_split_config` | 分账配置 |
|
||||
| `clearing_bill_info` | 清算账单 |
|
||||
| `clearing_bill_detail` | 清算明细 |
|
||||
| `settle_order_report` | 结算报表 |
|
||||
### 枚举类索引
|
||||
|
||||
---
|
||||
项目中定义了大量枚举类,位于 `jsowell-common/src/main/java/com/jsowell/common/enums/` 目录下:
|
||||
|
||||
## 测试说明
|
||||
|
||||
测试文件位置:`jsowell-admin/src/test/java/`
|
||||
|
||||
现有测试:
|
||||
- `SpringBootTestController.java`:Spring Boot 集成测试
|
||||
- `PaymentTestController.java`:支付功能测试
|
||||
- **订单相关**: `OrderStatusEnum`, `OrderPayStatusEnum`, `OrderPayModeEnum`, `OrderTypeEnum`
|
||||
- **支付相关**: `PayModeEnum`, `PaymentInstitutionsEnum`, `AdapayStatusEnum`, `AdapayPayChannelEnum`
|
||||
- **充电桩相关**: `PileStatusEnum`, `PileConnectorStatusEnum`, `StartModeEnum`, `StopChargingFailedReasonEnum`
|
||||
- **会员相关**: `MemberWalletEnum`, `BalanceChangesEnum`
|
||||
- **第三方平台**: `ThirdPlatformTypeEnum`, `ThirdPartyApiEnum`, `ThirdPartyReturnCodeEnum`
|
||||
|
||||
---
|
||||
|
||||
@@ -510,38 +379,63 @@ Netty 服务器在 `jsowell-netty` 模块中配置,支持:
|
||||
|
||||
### Prometheus 监控
|
||||
|
||||
- 监控端口:8091
|
||||
- 指标路径:`/actuator/prometheus`
|
||||
- 配置:`management.metrics.export.prometheus.enabled=true`
|
||||
- **监控端口**: `8091`
|
||||
- **指标路径**: `/actuator/prometheus`
|
||||
- **配置**: `management.metrics.export.prometheus.enabled=true`
|
||||
|
||||
### Druid 监控
|
||||
|
||||
- 访问路径:`/druid/*`
|
||||
- 用户名/密码:配置在 `application-{env}.yml` 中
|
||||
- **访问路径**: `/druid/*`
|
||||
- **用户名/密码**: 配置在 `application-{env}.yml` 中
|
||||
|
||||
### Swagger API 文档
|
||||
|
||||
- 开发环境访问:`http://localhost:8080/swagger-ui/`
|
||||
- 配置:`swagger.enabled=true`
|
||||
- **开发环境访问**: `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 已改为自动应答模式
|
||||
4. **Netty 线程模型**:注意 EventLoop 线程安全,避免阻塞操作
|
||||
5. **Dubbo 服务**:启动时不检查提供者(`consumer.check=false`)
|
||||
6. **日志级别**:开发环境 `com.jsowell: debug`,生产环境建议 `info`
|
||||
7. **热部署**:开发环境启用 `spring.devtools.restart.enabled=true`
|
||||
8. **积分发放**:通过 RabbitMQ 异步处理,避免影响订单结算主流程
|
||||
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个月)
|
||||
|
||||
---
|
||||
|
||||
## 启动类
|
||||
## 相关资源
|
||||
|
||||
主启动类:`com.jsowell.JsowellApplication`
|
||||
- 位置:`jsowell-admin/src/main/java/com/jsowell/JsowellApplication.java`
|
||||
- 注解:`@SpringBootApplication`、`@EnableDubbo`
|
||||
- 排除:`DataSourceAutoConfiguration`(使用自定义数据源配置)
|
||||
- [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`(当前分支)
|
||||
- **最近提交**:
|
||||
- `543f989ff` - update CLAUDE.md
|
||||
- `7c576ca25` - bugfix 查询订单详情字段为空
|
||||
- `c1db659cc` - update
|
||||
|
||||
187
jsowell-admin/CLAUDE.md
Normal file
187
jsowell-admin/CLAUDE.md
Normal file
@@ -0,0 +1,187 @@
|
||||
[根目录](../CLAUDE.md) > **jsowell-admin**
|
||||
|
||||
# jsowell-admin 模块
|
||||
|
||||
Web 服务入口模块,包含应用启动类、Controller 层和配置文件。
|
||||
|
||||
---
|
||||
|
||||
## 变更记录 (Changelog)
|
||||
|
||||
### 2026-02-03 11:32:30
|
||||
- 初始化模块文档
|
||||
- 识别 108 个 Controller
|
||||
- 统计测试用例 168 个
|
||||
|
||||
---
|
||||
|
||||
## 模块职责
|
||||
|
||||
- **应用启动**: Spring Boot 启动类 `JsowellApplication`
|
||||
- **REST API**: 所有 HTTP 接口的 Controller 层
|
||||
- **配置管理**: 多环境配置文件(dev/sit/pre/prd)
|
||||
- **测试入口**: 单元测试和集成测试
|
||||
|
||||
---
|
||||
|
||||
## 入口与启动
|
||||
|
||||
### 启动类
|
||||
|
||||
```java
|
||||
// JsowellApplication.java
|
||||
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
|
||||
@EnableDubbo
|
||||
public class JsowellApplication {
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.run(JsowellApplication.class, args);
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 启动命令
|
||||
|
||||
```bash
|
||||
# 开发环境
|
||||
mvn spring-boot:run -Dspring-boot.run.profiles=dev
|
||||
|
||||
# 生产环境
|
||||
java -jar jsowell-admin.jar --spring.profiles.active=prd
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 对外接口
|
||||
|
||||
### Controller 分类
|
||||
|
||||
| 包路径 | 数量 | 说明 |
|
||||
|--------|------|------|
|
||||
| `com.jsowell.web.controller.system` | 14 | 系统管理(用户、角色、菜单等) |
|
||||
| `com.jsowell.web.controller.pile` | 22 | 充电桩业务(订单、会员、站点等) |
|
||||
| `com.jsowell.web.controller.monitor` | 6 | 监控管理(缓存、日志、在线用户) |
|
||||
| `com.jsowell.api.thirdparty` | 30+ | 第三方平台对接 API |
|
||||
| `com.jsowell.api.uniapp.customer` | 12 | 小程序用户端 API |
|
||||
| `com.jsowell.api.uniapp.business` | 5 | 小程序运营端 API |
|
||||
| `com.jsowell.web.controller.jcpp` | 4 | JCPP 协议接口 |
|
||||
|
||||
### 主要 Controller
|
||||
|
||||
| Controller | 路径 | 说明 |
|
||||
|------------|------|------|
|
||||
| `SysLoginController` | `/login`, `/logout` | 登录认证 |
|
||||
| `SysUserController` | `/system/user/**` | 用户管理 |
|
||||
| `OrderBasicInfoController` | `/pile/order/**` | 订单管理 |
|
||||
| `MemberBasicInfoController` | `/pile/member/**` | 会员管理 |
|
||||
| `PileStationInfoController` | `/pile/station/**` | 站点管理 |
|
||||
| `PileBasicInfoController` | `/pile/pile/**` | 充电桩管理 |
|
||||
| `ZDLController` | `/api/zdl/**` | 中电联对接 |
|
||||
|
||||
---
|
||||
|
||||
## 关键依赖与配置
|
||||
|
||||
### Maven 依赖
|
||||
|
||||
```xml
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.jsowell</groupId>
|
||||
<artifactId>jsowell-framework</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.jsowell</groupId>
|
||||
<artifactId>jsowell-pile</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.jsowell</groupId>
|
||||
<artifactId>jsowell-netty</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.jsowell</groupId>
|
||||
<artifactId>jsowell-thirdparty</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.jsowell</groupId>
|
||||
<artifactId>jsowell-quartz</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.jsowell</groupId>
|
||||
<artifactId>jsowell-generator</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
```
|
||||
|
||||
### 配置文件
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| `application.yml` | 主配置,环境切换 |
|
||||
| `application-dev.yml` | 开发环境 |
|
||||
| `application-sit.yml` | 测试环境 |
|
||||
| `application-pre.yml` | 预发布环境 |
|
||||
| `application-prd.yml` | 生产环境 |
|
||||
| `mybatis/mybatis-config.xml` | MyBatis 配置 |
|
||||
| `logback-spring.xml` | 日志配置 |
|
||||
|
||||
---
|
||||
|
||||
## 测试与质量
|
||||
|
||||
### 测试文件
|
||||
|
||||
| 测试类 | 说明 |
|
||||
|--------|------|
|
||||
| `SpringBootTestController` | 集成测试(131 个用例) |
|
||||
| `PaymentTestController` | 支付功能测试 |
|
||||
| `JcppMessageControllerTest` | JCPP 消息测试 |
|
||||
| `PricingModelConverterTest` | 计费模型测试 |
|
||||
| `OrderServiceWhitelistCompletionTest` | 白名单订单测试 |
|
||||
|
||||
### 运行测试
|
||||
|
||||
```bash
|
||||
mvn test -pl jsowell-admin
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 常见问题 (FAQ)
|
||||
|
||||
### Q: 如何切换环境?
|
||||
修改 `application.yml` 中的 `spring.profiles.active` 或启动时指定 `--spring.profiles.active=xxx`
|
||||
|
||||
### Q: Swagger 文档无法访问?
|
||||
检查 `swagger.enabled` 配置是否为 `true`,生产环境默认关闭
|
||||
|
||||
### Q: 启动报数据库连接错误?
|
||||
检查对应环境配置文件中的数据库连接信息
|
||||
|
||||
---
|
||||
|
||||
## 相关文件清单
|
||||
|
||||
```
|
||||
jsowell-admin/
|
||||
├── src/main/java/com/jsowell/
|
||||
│ ├── JsowellApplication.java # 启动类
|
||||
│ ├── JsowellServletInitializer.java # Servlet 初始化
|
||||
│ ├── api/ # API 接口
|
||||
│ │ ├── feign/ # Feign 客户端
|
||||
│ │ ├── thirdparty/ # 第三方平台 API
|
||||
│ │ └── uniapp/ # 小程序 API
|
||||
│ ├── service/ # 本模块服务
|
||||
│ └── web/controller/ # Web 控制器
|
||||
│ ├── common/ # 通用控制器
|
||||
│ ├── jcpp/ # JCPP 协议
|
||||
│ ├── monitor/ # 监控管理
|
||||
│ ├── pile/ # 充电桩业务
|
||||
│ ├── system/ # 系统管理
|
||||
│ ├── thirdparty/ # 第三方配置
|
||||
│ └── tool/ # 工具类
|
||||
├── src/main/resources/
|
||||
│ ├── application*.yml # 配置文件
|
||||
│ ├── mybatis/ # MyBatis 配置
|
||||
│ └── logback-spring.xml # 日志配置
|
||||
└── src/test/java/ # 测试代码
|
||||
```
|
||||
@@ -12,6 +12,7 @@ import com.jsowell.common.enums.BusinessType;
|
||||
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
|
||||
import com.jsowell.common.exception.BusinessException;
|
||||
import com.jsowell.common.response.RestApiResponse;
|
||||
import com.jsowell.common.util.SecurityUtils;
|
||||
import com.jsowell.common.util.YKCUtils;
|
||||
import com.jsowell.common.util.poi.ExcelUtil;
|
||||
import com.jsowell.pile.domain.OrderBasicInfo;
|
||||
@@ -33,6 +34,7 @@ import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* 订单Controller
|
||||
@@ -94,6 +96,9 @@ public class OrderBasicInfoController extends BaseController {
|
||||
// 为空表示没有权限,返回空数组
|
||||
return new AjaxResult();
|
||||
}
|
||||
if (Objects.nonNull(SecurityUtils.getLoginUser())) {
|
||||
dto.setParams(ImmutableMap.of("roleId", SecurityUtils.getLoginUser().getUserId()));
|
||||
}
|
||||
String deptId = authorizedMap.getDeptId();
|
||||
if (CollectionUtils.isNotEmpty(authorizedMap.getStationDeptIds())) {
|
||||
// 为站点管理员
|
||||
|
||||
171
jsowell-common/CLAUDE.md
Normal file
171
jsowell-common/CLAUDE.md
Normal file
@@ -0,0 +1,171 @@
|
||||
[根目录](../CLAUDE.md) > **jsowell-common**
|
||||
|
||||
# jsowell-common 模块
|
||||
|
||||
通用工具模块,提供工具类、常量、异常、注解等基础组件。
|
||||
|
||||
---
|
||||
|
||||
## 变更记录 (Changelog)
|
||||
|
||||
### 2026-02-03 11:32:30
|
||||
- 初始化模块文档
|
||||
- 识别 60 个枚举类
|
||||
- 统计 100+ 工具类和数据结构
|
||||
|
||||
---
|
||||
|
||||
## 模块职责
|
||||
|
||||
- **工具类**: 字符串、日期、文件、HTTP 等工具
|
||||
- **常量定义**: 系统常量、RabbitMQ 常量
|
||||
- **枚举类**: 订单状态、支付方式、设备状态等
|
||||
- **注解定义**: 日志、权限、数据源等注解
|
||||
- **基础实体**: BaseEntity、AjaxResult、R
|
||||
- **协议数据**: 云快充协议、电动自行车协议数据结构
|
||||
- **MQ 配置**: RabbitMQ 队列、交换机配置
|
||||
|
||||
---
|
||||
|
||||
## 入口与启动
|
||||
|
||||
本模块为基础工具模块,无独立启动入口。
|
||||
|
||||
---
|
||||
|
||||
## 对外接口
|
||||
|
||||
### 核心类
|
||||
|
||||
| 类 | 说明 |
|
||||
|-----|------|
|
||||
| `AjaxResult` | 统一返回结果 |
|
||||
| `R` | 泛型返回结果 |
|
||||
| `BaseEntity` | 基础实体类 |
|
||||
| `BaseController` | 基础控制器 |
|
||||
| `LoginUser` | 登录用户信息 |
|
||||
|
||||
### 注解
|
||||
|
||||
| 注解 | 说明 |
|
||||
|------|------|
|
||||
| `@Log` | 操作日志 |
|
||||
| `@DataScope` | 数据权限 |
|
||||
| `@DataSource` | 数据源切换 |
|
||||
| `@RateLimiter` | 接口限流 |
|
||||
| `@RepeatSubmit` | 防重复提交 |
|
||||
| `@Anonymous` | 匿名访问 |
|
||||
| `@CostTime` | 耗时统计 |
|
||||
|
||||
### 枚举类(60+)
|
||||
|
||||
**订单相关**:
|
||||
- `OrderStatusEnum` - 订单状态
|
||||
- `OrderPayStatusEnum` - 支付状态
|
||||
- `OrderPayModeEnum` - 支付方式
|
||||
- `OrderTypeEnum` - 订单类型
|
||||
|
||||
**支付相关**:
|
||||
- `PayModeEnum` - 支付方式
|
||||
- `PaymentInstitutionsEnum` - 支付机构
|
||||
- `AdapayStatusEnum` - 汇付状态
|
||||
- `AdapayPayChannelEnum` - 汇付渠道
|
||||
|
||||
**设备相关**:
|
||||
- `PileStatusEnum` - 充电桩状态
|
||||
- `PileConnectorStatusEnum` - 充电枪状态
|
||||
- `StartModeEnum` - 启动方式
|
||||
|
||||
**第三方平台**:
|
||||
- `ThirdPlatformTypeEnum` - 平台类型
|
||||
- `ThirdPartyApiEnum` - API 类型
|
||||
- `ThirdPartyReturnCodeEnum` - 返回码
|
||||
|
||||
---
|
||||
|
||||
## 关键依赖与配置
|
||||
|
||||
### RabbitMQ 配置
|
||||
|
||||
```java
|
||||
// RabbitConfig.java - 主配置
|
||||
// PointsRabbitConfig.java - 积分队列配置
|
||||
// DirectRabbitConfig.java - 直连交换机配置
|
||||
// TopicRabbitConfig.java - 主题交换机配置
|
||||
```
|
||||
|
||||
### 常量定义
|
||||
|
||||
```java
|
||||
// RabbitConstants.java
|
||||
public class RabbitConstants {
|
||||
public static final String ORDER_QUEUE = "order.queue";
|
||||
public static final String POINTS_QUEUE = "points.queue";
|
||||
// ...
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 数据模型
|
||||
|
||||
### 云快充协议数据
|
||||
|
||||
| 类 | 说明 |
|
||||
|-----|------|
|
||||
| `YKCDataProtocol` | 协议数据 |
|
||||
| `YKCBaseMessage` | 基础消息 |
|
||||
| `LoginRequestData` | 登录数据 |
|
||||
| `RealTimeMonitorData` | 实时监控数据 |
|
||||
| `TransactionRecordsData` | 交易记录 |
|
||||
|
||||
### 设备到平台数据(0x01-0xF1)
|
||||
|
||||
位于 `com.jsowell.common.core.domain.ykc.device2platform/`
|
||||
|
||||
### 平台到设备数据(0x02-0x56)
|
||||
|
||||
位于 `com.jsowell.common.core.domain.ykc.platform2device/`
|
||||
|
||||
---
|
||||
|
||||
## 常见问题 (FAQ)
|
||||
|
||||
### Q: 如何添加新的枚举?
|
||||
在 `com.jsowell.common.enums` 包下创建,参考现有枚举实现
|
||||
|
||||
### Q: 如何添加新的 RabbitMQ 队列?
|
||||
在 `RabbitConfig` 或新建配置类中定义 Queue、Exchange、Binding
|
||||
|
||||
---
|
||||
|
||||
## 相关文件清单
|
||||
|
||||
```
|
||||
jsowell-common/
|
||||
├── src/main/java/com/jsowell/common/
|
||||
│ ├── annotation/ # 注解定义
|
||||
│ ├── config/ # 配置类
|
||||
│ │ └── mq/ # RabbitMQ 配置
|
||||
│ ├── constant/ # 常量定义
|
||||
│ ├── core/
|
||||
│ │ ├── controller/ # BaseController
|
||||
│ │ └── domain/ # 基础实体
|
||||
│ │ ├── entity/ # 系统实体
|
||||
│ │ ├── model/ # 登录模型
|
||||
│ │ ├── ykc/ # 云快充协议
|
||||
│ │ └── ebike/ # 电动自行车协议
|
||||
│ ├── enums/ # 枚举类 (60+)
|
||||
│ │ ├── adapay/
|
||||
│ │ ├── ebike/
|
||||
│ │ ├── lianlian/
|
||||
│ │ ├── parkplatform/
|
||||
│ │ ├── sim/
|
||||
│ │ ├── thirdparty/
|
||||
│ │ ├── uniapp/
|
||||
│ │ └── ykc/
|
||||
│ ├── exception/ # 异常类
|
||||
│ ├── filter/ # 过滤器
|
||||
│ └── utils/ # 工具类
|
||||
└── pom.xml
|
||||
```
|
||||
137
jsowell-framework/CLAUDE.md
Normal file
137
jsowell-framework/CLAUDE.md
Normal file
@@ -0,0 +1,137 @@
|
||||
[根目录](../CLAUDE.md) > **jsowell-framework**
|
||||
|
||||
# jsowell-framework 模块
|
||||
|
||||
核心框架模块,提供安全、权限、登录等基础服务。
|
||||
|
||||
---
|
||||
|
||||
## 变更记录 (Changelog)
|
||||
|
||||
### 2026-02-03 11:32:30
|
||||
- 初始化模块文档
|
||||
- 识别 45 个核心类
|
||||
|
||||
---
|
||||
|
||||
## 模块职责
|
||||
|
||||
- **安全框架**: Spring Security 配置
|
||||
- **JWT 认证**: Token 生成与验证
|
||||
- **权限控制**: 数据权限、接口权限
|
||||
- **数据源管理**: 动态数据源、Druid 配置
|
||||
- **AOP 切面**: 日志、限流、数据权限
|
||||
- **异常处理**: 全局异常处理
|
||||
|
||||
---
|
||||
|
||||
## 入口与启动
|
||||
|
||||
本模块为基础框架模块,无独立启动入口。
|
||||
|
||||
---
|
||||
|
||||
## 对外接口
|
||||
|
||||
### 核心服务
|
||||
|
||||
| 服务 | 说明 |
|
||||
|------|------|
|
||||
| `TokenService` | JWT Token 服务 |
|
||||
| `SysLoginService` | 登录服务 |
|
||||
| `SysPasswordService` | 密码服务 |
|
||||
| `PermissionService` | 权限服务 |
|
||||
| `UserDetailsServiceImpl` | 用户详情服务 |
|
||||
|
||||
### 配置类
|
||||
|
||||
| 配置类 | 说明 |
|
||||
|--------|------|
|
||||
| `SecurityConfig` | Spring Security 配置 |
|
||||
| `RedisConfig` | Redis 配置 |
|
||||
| `DruidConfig` | Druid 数据源配置 |
|
||||
| `MyBatisConfig` | MyBatis 配置 |
|
||||
| `ThreadPoolConfig` | 线程池配置 |
|
||||
|
||||
### AOP 切面
|
||||
|
||||
| 切面 | 说明 |
|
||||
|------|------|
|
||||
| `LogAspect` | 操作日志记录 |
|
||||
| `DataScopeAspect` | 数据权限过滤 |
|
||||
| `DataSourceAspect` | 动态数据源切换 |
|
||||
| `RateLimiterAspect` | 接口限流 |
|
||||
| `CostTimeAspect` | 耗时统计 |
|
||||
|
||||
---
|
||||
|
||||
## 关键依赖与配置
|
||||
|
||||
### Maven 依赖
|
||||
|
||||
```xml
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-aop</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>druid-spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.jsowell</groupId>
|
||||
<artifactId>jsowell-system</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 常见问题 (FAQ)
|
||||
|
||||
### Q: Token 过期如何处理?
|
||||
Token 有效期配置在 `application.yml` 的 `token.expireTime`,默认 1440 分钟
|
||||
|
||||
### Q: 如何添加接口白名单?
|
||||
在 `SecurityConfig` 中配置 `permitAllUrls` 或使用 `@Anonymous` 注解
|
||||
|
||||
### Q: 数据权限如何配置?
|
||||
使用 `@DataScope` 注解,配置 `deptAlias` 和 `userAlias`
|
||||
|
||||
---
|
||||
|
||||
## 相关文件清单
|
||||
|
||||
```
|
||||
jsowell-framework/
|
||||
├── src/main/java/com/jsowell/framework/
|
||||
│ ├── aspectj/ # AOP 切面
|
||||
│ │ ├── LogAspect.java
|
||||
│ │ ├── DataScopeAspect.java
|
||||
│ │ ├── DataSourceAspect.java
|
||||
│ │ ├── RateLimiterAspect.java
|
||||
│ │ └── CostTimeAspect.java
|
||||
│ ├── async/ # 异步处理
|
||||
│ ├── config/ # 配置类
|
||||
│ │ ├── SecurityConfig.java
|
||||
│ │ ├── RedisConfig.java
|
||||
│ │ ├── DruidConfig.java
|
||||
│ │ ├── MyBatisConfig.java
|
||||
│ │ └── ThreadPoolConfig.java
|
||||
│ ├── datasource/ # 动态数据源
|
||||
│ ├── interceptor/ # 拦截器
|
||||
│ ├── manager/ # 管理器
|
||||
│ ├── security/ # 安全相关
|
||||
│ │ ├── filter/
|
||||
│ │ └── handle/
|
||||
│ └── web/
|
||||
│ ├── domain/ # 服务器信息
|
||||
│ ├── exception/ # 异常处理
|
||||
│ └── service/ # 核心服务
|
||||
└── pom.xml
|
||||
```
|
||||
127
jsowell-generator/CLAUDE.md
Normal file
127
jsowell-generator/CLAUDE.md
Normal file
@@ -0,0 +1,127 @@
|
||||
[根目录](../CLAUDE.md) > **jsowell-generator**
|
||||
|
||||
# jsowell-generator 模块
|
||||
|
||||
代码生成器模块,基于 Velocity 模板生成 CRUD 代码。
|
||||
|
||||
---
|
||||
|
||||
## 变更记录 (Changelog)
|
||||
|
||||
### 2026-02-03 11:32:30
|
||||
- 初始化模块文档
|
||||
- 识别 13 个 Java 文件
|
||||
|
||||
---
|
||||
|
||||
## 模块职责
|
||||
|
||||
- **代码生成**: 根据数据库表生成 CRUD 代码
|
||||
- **模板管理**: Velocity 模板配置
|
||||
- **表结构解析**: 数据库表结构读取与解析
|
||||
|
||||
---
|
||||
|
||||
## 入口与启动
|
||||
|
||||
本模块为工具模块,无独立启动入口。
|
||||
|
||||
---
|
||||
|
||||
## 对外接口
|
||||
|
||||
### Controller
|
||||
|
||||
| Controller | 路径 | 说明 |
|
||||
|------------|------|------|
|
||||
| `GenController` | `/tool/gen/**` | 代码生成 |
|
||||
|
||||
### Service
|
||||
|
||||
| Service | 说明 |
|
||||
|---------|------|
|
||||
| `IGenTableService` | 表信息服务 |
|
||||
| `IGenTableColumnService` | 列信息服务 |
|
||||
|
||||
---
|
||||
|
||||
## 关键依赖与配置
|
||||
|
||||
### Maven 依赖
|
||||
|
||||
```xml
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.apache.velocity</groupId>
|
||||
<artifactId>velocity-engine-core</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.jsowell</groupId>
|
||||
<artifactId>jsowell-common</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
```
|
||||
|
||||
### 生成配置
|
||||
|
||||
```java
|
||||
// GenConfig.java
|
||||
public class GenConfig {
|
||||
// 作者、包路径、自动去除表前缀等配置
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 数据模型
|
||||
|
||||
### 核心实体
|
||||
|
||||
| 实体类 | 数据库表 | 说明 |
|
||||
|--------|---------|------|
|
||||
| `GenTable` | `gen_table` | 代码生成表 |
|
||||
| `GenTableColumn` | `gen_table_column` | 代码生成列 |
|
||||
|
||||
### Mapper XML 文件
|
||||
|
||||
位置:`src/main/resources/mapper/generator/`
|
||||
|
||||
- `GenTableMapper.xml` (206 行)
|
||||
- `GenTableColumnMapper.xml` (127 行)
|
||||
|
||||
---
|
||||
|
||||
## 常见问题 (FAQ)
|
||||
|
||||
### Q: 如何生成代码?
|
||||
1. 访问 `/tool/gen` 页面
|
||||
2. 导入数据库表
|
||||
3. 配置生成选项
|
||||
4. 点击生成代码
|
||||
|
||||
---
|
||||
|
||||
## 相关文件清单
|
||||
|
||||
```
|
||||
jsowell-generator/
|
||||
├── src/main/java/com/jsowell/generator/
|
||||
│ ├── config/ # 配置
|
||||
│ │ └── GenConfig.java
|
||||
│ ├── controller/ # 控制器
|
||||
│ │ └── GenController.java
|
||||
│ ├── domain/ # 实体类
|
||||
│ │ ├── GenTable.java
|
||||
│ │ └── GenTableColumn.java
|
||||
│ ├── mapper/ # Mapper 接口
|
||||
│ ├── service/ # Service 接口
|
||||
│ │ └── impl/ # Service 实现
|
||||
│ └── util/ # 工具类
|
||||
│ ├── GenUtils.java
|
||||
│ ├── VelocityInitializer.java
|
||||
│ └── VelocityUtils.java
|
||||
├── src/main/resources/
|
||||
│ ├── mapper/generator/ # Mapper XML
|
||||
│ └── vm/ # Velocity 模板
|
||||
└── pom.xml
|
||||
```
|
||||
218
jsowell-netty/CLAUDE.md
Normal file
218
jsowell-netty/CLAUDE.md
Normal file
@@ -0,0 +1,218 @@
|
||||
[根目录](../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
|
||||
```
|
||||
184
jsowell-pile/CLAUDE.md
Normal file
184
jsowell-pile/CLAUDE.md
Normal file
@@ -0,0 +1,184 @@
|
||||
[根目录](../CLAUDE.md) > **jsowell-pile**
|
||||
|
||||
# jsowell-pile 模块
|
||||
|
||||
充电桩业务核心模块,包含订单、会员、计费、支付等核心业务逻辑。
|
||||
|
||||
---
|
||||
|
||||
## 变更记录 (Changelog)
|
||||
|
||||
### 2026-02-03 11:32:30
|
||||
- 初始化模块文档
|
||||
- 识别 80 个 Service 实现类
|
||||
- 统计 60+ Mapper XML 文件
|
||||
|
||||
---
|
||||
|
||||
## 模块职责
|
||||
|
||||
- **订单管理**: 充电订单创建、结算、分账、退款
|
||||
- **会员服务**: 会员注册、钱包管理、积分系统
|
||||
- **计费管理**: 计费模板、时段电价、服务费
|
||||
- **支付集成**: 微信支付、支付宝、汇付支付(Adapay)
|
||||
- **设备管理**: 充电桩、充电枪、站点信息
|
||||
- **商户管理**: 商户信息、分账配置、清算账单
|
||||
|
||||
---
|
||||
|
||||
## 入口与启动
|
||||
|
||||
本模块为业务模块,无独立启动入口,由 `jsowell-admin` 模块引用。
|
||||
|
||||
### 核心 Service
|
||||
|
||||
| Service | 说明 |
|
||||
|---------|------|
|
||||
| `OrderBasicInfoServiceImpl` | 订单核心服务(创建、结算、分账) |
|
||||
| `MemberBasicInfoServiceImpl` | 会员服务 |
|
||||
| `MemberWalletInfoServiceImpl` | 钱包服务 |
|
||||
| `MemberPointsInfoServiceImpl` | 积分服务 |
|
||||
| `PileStationInfoServiceImpl` | 站点服务 |
|
||||
| `PileBasicInfoServiceImpl` | 充电桩服务 |
|
||||
| `PileConnectorInfoServiceImpl` | 充电枪服务 |
|
||||
| `PileBillingTemplateServiceImpl` | 计费模板服务 |
|
||||
| `WechatPayServiceImpl` | 微信支付服务 |
|
||||
| `AdapayService` | 汇付支付服务 |
|
||||
|
||||
---
|
||||
|
||||
## 对外接口
|
||||
|
||||
### RPC 服务
|
||||
|
||||
```java
|
||||
// WccServiceImpl.java - Dubbo RPC 服务
|
||||
@DubboService
|
||||
public class WccServiceImpl implements WccService {
|
||||
// 提供给其他服务调用的接口
|
||||
}
|
||||
```
|
||||
|
||||
### RabbitMQ 消费者
|
||||
|
||||
```java
|
||||
// OrderRabbitListener.java
|
||||
@RabbitListener(queues = RabbitConstants.ORDER_QUEUE)
|
||||
public void handleOrderMessage(Message message) {
|
||||
// 处理订单消息
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 关键依赖与配置
|
||||
|
||||
### Maven 依赖
|
||||
|
||||
```xml
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.jsowell</groupId>
|
||||
<artifactId>jsowell-framework</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.baomidou</groupId>
|
||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||
<version>3.4.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.huifu.adapay</groupId>
|
||||
<artifactId>adapay-java-sdk</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.alipay.sdk</groupId>
|
||||
<artifactId>alipay-sdk-java</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 数据模型
|
||||
|
||||
### 核心实体
|
||||
|
||||
| 实体类 | 数据库表 | 说明 |
|
||||
|--------|---------|------|
|
||||
| `OrderBasicInfo` | `order_basic_info` | 充电订单 |
|
||||
| `OrderPayRecord` | `order_pay_record` | 支付记录 |
|
||||
| `OrderSplitRecord` | `order_split_record` | 分账记录 |
|
||||
| `MemberBasicInfo` | `member_basic_info` | 会员信息 |
|
||||
| `MemberWalletInfo` | `member_wallet_info` | 会员钱包 |
|
||||
| `MemberPointsInfo` | `member_points_info` | 会员积分 |
|
||||
| `PileStationInfo` | `pile_station_info` | 充电站 |
|
||||
| `PileBasicInfo` | `pile_basic_info` | 充电桩 |
|
||||
| `PileConnectorInfo` | `pile_connector_info` | 充电枪 |
|
||||
| `PileBillingTemplate` | `pile_billing_template` | 计费模板 |
|
||||
| `PileMerchantInfo` | `pile_merchant_info` | 商户信息 |
|
||||
| `ClearingBillInfo` | `clearing_bill_info` | 清算账单 |
|
||||
|
||||
### Mapper XML 文件
|
||||
|
||||
位置:`src/main/resources/mapper/pile/`
|
||||
|
||||
主要文件:
|
||||
- `OrderBasicInfoMapper.xml` (3620 行)
|
||||
- `PileMerchantInfoMapper.xml` (1304 行)
|
||||
- `PersonalChargingRecordMapper.xml` (1413 行)
|
||||
- `OrderDetailMapper.xml` (1306 行)
|
||||
- `OrderPileOccupyMapper.xml` (1043 行)
|
||||
|
||||
---
|
||||
|
||||
## 测试与质量
|
||||
|
||||
### 单元测试
|
||||
|
||||
测试位于 `jsowell-admin/src/test/java/`,涉及本模块的测试:
|
||||
- `OrderServiceWhitelistCompletionTest`
|
||||
- `WhitelistOrderCompletionDefaultsTest`
|
||||
|
||||
---
|
||||
|
||||
## 常见问题 (FAQ)
|
||||
|
||||
### Q: 订单分账失败如何处理?
|
||||
检查 `OrderBasicInfoServiceImpl.realTimeOrderSplit()` 方法,查看分账配置和汇付账户状态
|
||||
|
||||
### Q: 积分发放延迟?
|
||||
积分通过 RabbitMQ 异步发放,检查 `PointsRabbitConfig` 配置和消息队列状态
|
||||
|
||||
### Q: 支付回调未收到?
|
||||
检查支付平台回调地址配置,查看 `WxpayCallbackRecord` 或 `AdapayCallbackRecord` 表
|
||||
|
||||
---
|
||||
|
||||
## 相关文件清单
|
||||
|
||||
```
|
||||
jsowell-pile/
|
||||
├── src/main/java/com/jsowell/
|
||||
│ ├── adapay/ # 汇付支付
|
||||
│ │ ├── config/ # 支付配置
|
||||
│ │ ├── dto/ # 数据传输对象
|
||||
│ │ ├── service/ # 支付服务
|
||||
│ │ └── vo/ # 视图对象
|
||||
│ ├── alipay/ # 支付宝
|
||||
│ ├── wxpay/ # 微信支付
|
||||
│ ├── mq/ # RabbitMQ 消费者
|
||||
│ ├── pile/
|
||||
│ │ ├── domain/ # 实体类
|
||||
│ │ ├── dto/ # DTO
|
||||
│ │ ├── mapper/ # Mapper 接口
|
||||
│ │ ├── service/ # Service 接口
|
||||
│ │ │ └── impl/ # Service 实现
|
||||
│ │ ├── vo/ # VO
|
||||
│ │ ├── jcpp/ # JCPP 协议
|
||||
│ │ ├── rpc/ # RPC 服务
|
||||
│ │ └── transaction/ # 事务服务
|
||||
│ └── thirdparty/ # 第三方服务
|
||||
├── src/main/resources/
|
||||
│ └── mapper/pile/ # Mapper XML (60+ 文件)
|
||||
└── src/main/proto/ # Protobuf 定义
|
||||
```
|
||||
@@ -42,15 +42,20 @@ public class BusinessFinancialServiceImpl implements BusinessFinancialService {
|
||||
|
||||
// 查询账户余额
|
||||
BigDecimal acctBalance = BigDecimal.ZERO;
|
||||
BigDecimal pendingAmount = BigDecimal.ZERO;
|
||||
try {
|
||||
AdapayAccountBalanceVO accountBalanceVO = adapayService.queryAdapayAccountBalance(dto.getMerchantId());
|
||||
if (accountBalanceVO != null && accountBalanceVO.getAcctBalance() != null) {
|
||||
acctBalance = accountBalanceVO.getAcctBalance();
|
||||
}
|
||||
if (accountBalanceVO != null && accountBalanceVO.getPendingAmount() != null) {
|
||||
pendingAmount = accountBalanceVO.getPendingAmount();
|
||||
}
|
||||
} catch (BaseAdaPayException e) {
|
||||
log.error("查询汇付账户余额异常 merchantId:{}", dto.getMerchantId(), e);
|
||||
}
|
||||
result.getMerchantOrderReport().setAcctBalance(acctBalance);
|
||||
result.getMerchantOrderReport().setPendingAmount(pendingAmount);
|
||||
|
||||
// 查询累计提现金额
|
||||
BigDecimal totalWithdraw = BigDecimal.ZERO;
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSON;
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
import com.github.pagehelper.PageHelper;
|
||||
import com.github.pagehelper.PageInfo;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import com.google.common.collect.Sets;
|
||||
@@ -68,7 +69,6 @@ import com.jsowell.pile.vo.uniapp.business.BusinessOrderListVO;
|
||||
import com.jsowell.pile.vo.uniapp.business.BusinessOrderQueryResultVO;
|
||||
import com.jsowell.pile.vo.uniapp.customer.*;
|
||||
import com.jsowell.pile.vo.web.*;
|
||||
import com.jsowell.pile.vo.web.OrderStatisticsVO;
|
||||
import com.jsowell.wxpay.common.WeChatPayParameter;
|
||||
import com.jsowell.wxpay.response.WechatPayRefundRequest;
|
||||
import com.jsowell.wxpay.response.WechatPayRefundResponse;
|
||||
@@ -295,6 +295,9 @@ public class OrderBasicInfoServiceImpl implements OrderBasicInfoService {
|
||||
}
|
||||
dto.setStationDeptIds(authorizedMap.getStationDeptIds());
|
||||
dto.setMerchantDeptIds(authorizedMap.getMerchantDeptIds());
|
||||
if (Objects.nonNull(SecurityUtils.getLoginUser())) {
|
||||
dto.setParams(ImmutableMap.of("roleId", SecurityUtils.getLoginUser().getUserId()));
|
||||
}
|
||||
return selectOrderBasicInfoList(dto);
|
||||
}
|
||||
|
||||
|
||||
@@ -107,6 +107,7 @@ public class UserUtils {
|
||||
if (Objects.isNull(loginUser)) {
|
||||
return resultVO;
|
||||
}
|
||||
resultVO.setLoginUser(loginUser);
|
||||
// 获取登录用户对应的user对象
|
||||
SysUser user = loginUser.getUser();
|
||||
if (Objects.isNull(user)) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.jsowell.pile.vo.base;
|
||||
|
||||
import com.jsowell.common.core.domain.model.LoginUser;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@@ -11,6 +12,10 @@ import java.util.List;
|
||||
@Getter
|
||||
@Setter
|
||||
public class LoginUserDetailVO {
|
||||
/**
|
||||
* 登录用户
|
||||
*/
|
||||
LoginUser loginUser;
|
||||
/**
|
||||
* 有权限的一级运营商idList
|
||||
* 平台级账号有多个一级运营商权限
|
||||
|
||||
@@ -52,4 +52,7 @@ public class OrderReportDetail {
|
||||
*/
|
||||
private BigDecimal totalWithdraw;
|
||||
|
||||
// 在途金额
|
||||
private BigDecimal pendingAmount;
|
||||
|
||||
}
|
||||
|
||||
@@ -2004,6 +2004,9 @@
|
||||
<if test="vinCode != null and vinCode != ''">
|
||||
and t1.vin_code = #{vinCode,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="params != null and params.roleId != null and params.roleId > 2">
|
||||
and t1.review_flag = '1'
|
||||
</if>
|
||||
<if test="plateNumber != null and plateNumber != ''">
|
||||
and t1.plate_number = #{plateNumber,jdbcType=VARCHAR}
|
||||
</if>
|
||||
@@ -2055,6 +2058,9 @@
|
||||
<if test="endTime != null and endTime != ''">
|
||||
and t1.create_time <![CDATA[ <= ]]> #{endTime,jdbcType=VARCHAR}
|
||||
</if>
|
||||
<if test="params != null and params.roleId != null and params.roleId > 2">
|
||||
and t1.review_flag = '1'
|
||||
</if>
|
||||
<if test="startSettleTime != null and startSettleTime != ''">
|
||||
and t1.settlement_time <![CDATA[ >= ]]> #{startSettleTime,jdbcType=VARCHAR}
|
||||
</if>
|
||||
|
||||
137
jsowell-quartz/CLAUDE.md
Normal file
137
jsowell-quartz/CLAUDE.md
Normal file
@@ -0,0 +1,137 @@
|
||||
[根目录](../CLAUDE.md) > **jsowell-quartz**
|
||||
|
||||
# jsowell-quartz 模块
|
||||
|
||||
定时任务模块,基于 Quartz 实现任务调度。
|
||||
|
||||
---
|
||||
|
||||
## 变更记录 (Changelog)
|
||||
|
||||
### 2026-02-03 11:32:30
|
||||
- 初始化模块文档
|
||||
- 识别 19 个 Java 文件
|
||||
|
||||
---
|
||||
|
||||
## 模块职责
|
||||
|
||||
- **任务管理**: 定时任务 CRUD
|
||||
- **任务调度**: Quartz 调度器配置
|
||||
- **任务执行**: 任务执行与日志记录
|
||||
- **业务任务**: 充电桩业务相关定时任务
|
||||
|
||||
---
|
||||
|
||||
## 入口与启动
|
||||
|
||||
本模块为功能模块,无独立启动入口。
|
||||
|
||||
---
|
||||
|
||||
## 对外接口
|
||||
|
||||
### Controller
|
||||
|
||||
| Controller | 路径 | 说明 |
|
||||
|------------|------|------|
|
||||
| `SysJobController` | `/monitor/job/**` | 任务管理 |
|
||||
| `SysJobLogController` | `/monitor/jobLog/**` | 任务日志 |
|
||||
|
||||
### Service
|
||||
|
||||
| Service | 说明 |
|
||||
|---------|------|
|
||||
| `ISysJobService` | 任务服务 |
|
||||
| `ISysJobLogService` | 任务日志服务 |
|
||||
|
||||
### 业务任务
|
||||
|
||||
```java
|
||||
// JsowellTask.java
|
||||
@Component("jsowellTask")
|
||||
public class JsowellTask {
|
||||
// 充电桩业务相关定时任务
|
||||
}
|
||||
|
||||
// RyTask.java
|
||||
@Component("ryTask")
|
||||
public class RyTask {
|
||||
// 示例任务
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 关键依赖与配置
|
||||
|
||||
### Quartz 配置
|
||||
|
||||
```java
|
||||
// ScheduleConfig.java
|
||||
@Configuration
|
||||
public class ScheduleConfig {
|
||||
// Quartz 调度器配置
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 数据模型
|
||||
|
||||
### 核心实体
|
||||
|
||||
| 实体类 | 数据库表 | 说明 |
|
||||
|--------|---------|------|
|
||||
| `SysJob` | `sys_job` | 定时任务 |
|
||||
| `SysJobLog` | `sys_job_log` | 任务日志 |
|
||||
|
||||
### Mapper XML 文件
|
||||
|
||||
位置:`src/main/resources/mapper/quartz/`
|
||||
|
||||
- `SysJobMapper.xml` (111 行)
|
||||
- `SysJobLogMapper.xml` (94 行)
|
||||
|
||||
---
|
||||
|
||||
## 常见问题 (FAQ)
|
||||
|
||||
### Q: 如何添加新的定时任务?
|
||||
1. 创建任务类,使用 `@Component` 注解
|
||||
2. 在管理后台添加任务配置
|
||||
3. 调用目标字符串格式:`beanName.methodName(params)`
|
||||
|
||||
### Q: 任务执行失败如何排查?
|
||||
查看 `sys_job_log` 表的执行日志和异常信息
|
||||
|
||||
---
|
||||
|
||||
## 相关文件清单
|
||||
|
||||
```
|
||||
jsowell-quartz/
|
||||
├── src/main/java/com/jsowell/quartz/
|
||||
│ ├── config/ # Quartz 配置
|
||||
│ │ └── ScheduleConfig.java
|
||||
│ ├── controller/ # 控制器
|
||||
│ │ ├── SysJobController.java
|
||||
│ │ └── SysJobLogController.java
|
||||
│ ├── domain/ # 实体类
|
||||
│ │ ├── SysJob.java
|
||||
│ │ └── SysJobLog.java
|
||||
│ ├── mapper/ # Mapper 接口
|
||||
│ ├── service/ # Service 接口
|
||||
│ │ └── impl/ # Service 实现
|
||||
│ ├── task/ # 业务任务
|
||||
│ │ ├── JsowellTask.java
|
||||
│ │ └── RyTask.java
|
||||
│ └── util/ # 工具类
|
||||
│ ├── AbstractQuartzJob.java
|
||||
│ ├── CronUtils.java
|
||||
│ ├── JobInvokeUtil.java
|
||||
│ └── ScheduleUtils.java
|
||||
├── src/main/resources/
|
||||
│ └── mapper/quartz/ # Mapper XML
|
||||
└── pom.xml
|
||||
```
|
||||
61
jsowell-settlement/CLAUDE.md
Normal file
61
jsowell-settlement/CLAUDE.md
Normal file
@@ -0,0 +1,61 @@
|
||||
[根目录](../CLAUDE.md) > **jsowell-settlement**
|
||||
|
||||
# jsowell-settlement 模块
|
||||
|
||||
结算模块,处理商户结算相关业务(待完善)。
|
||||
|
||||
---
|
||||
|
||||
## 变更记录 (Changelog)
|
||||
|
||||
### 2026-02-03 11:32:30
|
||||
- 初始化模块文档
|
||||
- 模块状态:待完善
|
||||
|
||||
---
|
||||
|
||||
## 模块职责
|
||||
|
||||
- **商户结算**: 商户账单结算
|
||||
- **清算处理**: 清算账单生成
|
||||
|
||||
---
|
||||
|
||||
## 入口与启动
|
||||
|
||||
本模块为业务模块,无独立启动入口。
|
||||
|
||||
---
|
||||
|
||||
## 关键依赖与配置
|
||||
|
||||
### Maven 依赖
|
||||
|
||||
```xml
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.jsowell</groupId>
|
||||
<artifactId>jsowell-pile</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 模块状态
|
||||
|
||||
当前模块处于待完善状态,主要业务逻辑在 `jsowell-pile` 模块中实现:
|
||||
- `ClearingBillInfoServiceImpl` - 清算账单服务
|
||||
- `ClearingBillDetailServiceImpl` - 清算明细服务
|
||||
- `ClearingWithdrawInfoServiceImpl` - 提现服务
|
||||
|
||||
---
|
||||
|
||||
## 相关文件清单
|
||||
|
||||
```
|
||||
jsowell-settlement/
|
||||
├── src/main/resources/
|
||||
│ └── rebel.xml # JRebel 配置
|
||||
└── pom.xml
|
||||
```
|
||||
146
jsowell-system/CLAUDE.md
Normal file
146
jsowell-system/CLAUDE.md
Normal file
@@ -0,0 +1,146 @@
|
||||
[根目录](../CLAUDE.md) > **jsowell-system**
|
||||
|
||||
# jsowell-system 模块
|
||||
|
||||
系统管理模块,提供用户、角色、菜单、字典等基础管理功能。
|
||||
|
||||
---
|
||||
|
||||
## 变更记录 (Changelog)
|
||||
|
||||
### 2026-02-03 11:32:30
|
||||
- 初始化模块文档
|
||||
- 识别 15 个 Mapper XML
|
||||
- 统计 52 个 Java 文件
|
||||
|
||||
---
|
||||
|
||||
## 模块职责
|
||||
|
||||
- **用户管理**: 用户 CRUD、密码管理
|
||||
- **角色管理**: 角色 CRUD、权限分配
|
||||
- **菜单管理**: 菜单 CRUD、路由生成
|
||||
- **部门管理**: 组织架构管理
|
||||
- **字典管理**: 数据字典维护
|
||||
- **岗位管理**: 岗位信息管理
|
||||
- **日志管理**: 操作日志、登录日志
|
||||
|
||||
---
|
||||
|
||||
## 入口与启动
|
||||
|
||||
本模块为基础模块,无独立启动入口。
|
||||
|
||||
---
|
||||
|
||||
## 对外接口
|
||||
|
||||
### Service 接口
|
||||
|
||||
| Service | 说明 |
|
||||
|---------|------|
|
||||
| `SysUserService` | 用户服务 |
|
||||
| `SysRoleService` | 角色服务 |
|
||||
| `SysMenuService` | 菜单服务 |
|
||||
| `SysDeptService` | 部门服务 |
|
||||
| `SysDictTypeService` | 字典类型服务 |
|
||||
| `SysDictDataService` | 字典数据服务 |
|
||||
| `SysPostService` | 岗位服务 |
|
||||
| `SysConfigService` | 系统配置服务 |
|
||||
| `SysOperLogService` | 操作日志服务 |
|
||||
| `SysLogininforService` | 登录日志服务 |
|
||||
|
||||
---
|
||||
|
||||
## 关键依赖与配置
|
||||
|
||||
### Maven 依赖
|
||||
|
||||
```xml
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.jsowell</groupId>
|
||||
<artifactId>jsowell-common</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 数据模型
|
||||
|
||||
### 核心实体
|
||||
|
||||
| 实体类 | 数据库表 | 说明 |
|
||||
|--------|---------|------|
|
||||
| `SysUser` | `sys_user` | 用户信息 |
|
||||
| `SysRole` | `sys_role` | 角色信息 |
|
||||
| `SysMenu` | `sys_menu` | 菜单信息 |
|
||||
| `SysDept` | `sys_dept` | 部门信息 |
|
||||
| `SysDictType` | `sys_dict_type` | 字典类型 |
|
||||
| `SysDictData` | `sys_dict_data` | 字典数据 |
|
||||
| `SysPost` | `sys_post` | 岗位信息 |
|
||||
| `SysConfig` | `sys_config` | 系统配置 |
|
||||
| `SysOperLog` | `sys_oper_log` | 操作日志 |
|
||||
| `SysLogininfor` | `sys_logininfor` | 登录日志 |
|
||||
|
||||
### 关联表
|
||||
|
||||
| 实体类 | 数据库表 | 说明 |
|
||||
|--------|---------|------|
|
||||
| `SysUserRole` | `sys_user_role` | 用户角色关联 |
|
||||
| `SysRoleMenu` | `sys_role_menu` | 角色菜单关联 |
|
||||
| `SysRoleDept` | `sys_role_dept` | 角色部门关联 |
|
||||
| `SysUserPost` | `sys_user_post` | 用户岗位关联 |
|
||||
|
||||
### Mapper XML 文件
|
||||
|
||||
位置:`src/main/resources/mapper/system/`
|
||||
|
||||
- `SysUserMapper.xml` (228 行)
|
||||
- `SysMenuMapper.xml` (195 行)
|
||||
- `SysDeptMapper.xml` (163 行)
|
||||
- `SysRoleMapper.xml` (152 行)
|
||||
- `SysDictDataMapper.xml` (124 行)
|
||||
- `SysPostMapper.xml` (122 行)
|
||||
- `SysConfigMapper.xml` (112 行)
|
||||
- `SysDictTypeMapper.xml` (105 行)
|
||||
|
||||
---
|
||||
|
||||
## 常见问题 (FAQ)
|
||||
|
||||
### Q: 如何添加新的系统配置?
|
||||
在 `sys_config` 表中添加记录,通过 `SysConfigService.selectConfigByKey()` 获取
|
||||
|
||||
### Q: 如何添加新的字典?
|
||||
1. 在 `sys_dict_type` 添加字典类型
|
||||
2. 在 `sys_dict_data` 添加字典数据
|
||||
|
||||
---
|
||||
|
||||
## 相关文件清单
|
||||
|
||||
```
|
||||
jsowell-system/
|
||||
├── src/main/java/com/jsowell/system/
|
||||
│ ├── domain/ # 实体类
|
||||
│ │ ├── SysCache.java
|
||||
│ │ ├── SysConfig.java
|
||||
│ │ ├── SysLogininfor.java
|
||||
│ │ ├── SysNotice.java
|
||||
│ │ ├── SysOperLog.java
|
||||
│ │ ├── SysPost.java
|
||||
│ │ ├── SysRoleDept.java
|
||||
│ │ ├── SysRoleMenu.java
|
||||
│ │ ├── SysUserOnline.java
|
||||
│ │ ├── SysUserPost.java
|
||||
│ │ └── SysUserRole.java
|
||||
│ ├── mapper/ # Mapper 接口
|
||||
│ ├── service/ # Service 接口
|
||||
│ │ └── impl/ # Service 实现
|
||||
│ └── vo/ # 视图对象
|
||||
├── src/main/resources/
|
||||
│ └── mapper/system/ # Mapper XML (15 文件)
|
||||
└── pom.xml
|
||||
```
|
||||
135
jsowell-thirdparty/CLAUDE.md
vendored
Normal file
135
jsowell-thirdparty/CLAUDE.md
vendored
Normal file
@@ -0,0 +1,135 @@
|
||||
[根目录](../CLAUDE.md) > **jsowell-thirdparty**
|
||||
|
||||
# jsowell-thirdparty 模块
|
||||
|
||||
第三方平台对接模块,负责与外部系统的集成。
|
||||
|
||||
---
|
||||
|
||||
## 变更记录 (Changelog)
|
||||
|
||||
### 2026-02-03 11:32:30
|
||||
- 初始化模块文档
|
||||
- 识别 20+ 第三方平台对接
|
||||
|
||||
---
|
||||
|
||||
## 模块职责
|
||||
|
||||
- **政府平台对接**: 中电联、南瑞、各省市监管平台
|
||||
- **地图服务**: 高德地图站点推送
|
||||
- **停车场系统**: 停车场优惠券、车牌识别
|
||||
- **支付通知**: 第三方平台订单通知
|
||||
- **数据同步**: 站点、设备、订单数据同步
|
||||
|
||||
---
|
||||
|
||||
## 入口与启动
|
||||
|
||||
本模块为业务模块,无独立启动入口。
|
||||
|
||||
---
|
||||
|
||||
## 对外接口
|
||||
|
||||
### 第三方平台服务
|
||||
|
||||
| 服务 | 说明 |
|
||||
|------|------|
|
||||
| `ZDLService` | 中电联平台对接 |
|
||||
| `NRService` | 南瑞平台对接 |
|
||||
| `AMapService` | 高德地图服务 |
|
||||
| `LianLianService` | 联联平台 |
|
||||
| `HuaWeiService` | 华为平台 |
|
||||
| `NXJTService` | 宁夏交投平台 |
|
||||
| `LTYTService` | 停车场服务 |
|
||||
| `RJService` | 停车场服务 |
|
||||
| `QcyunsService` | 停车场服务 |
|
||||
|
||||
### 平台工厂
|
||||
|
||||
```java
|
||||
// ThirdPartyPlatformFactory.java
|
||||
public class ThirdPartyPlatformFactory {
|
||||
// 根据平台类型获取对应的服务实现
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 关键依赖与配置
|
||||
|
||||
### Maven 依赖
|
||||
|
||||
```xml
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>com.jsowell</groupId>
|
||||
<artifactId>jsowell-pile</artifactId>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 数据模型
|
||||
|
||||
### 平台通用数据结构
|
||||
|
||||
| 类 | 说明 |
|
||||
|-----|------|
|
||||
| `StationInfo` | 站点信息 |
|
||||
| `ConnectorStatusInfo` | 充电枪状态 |
|
||||
| `ChargeOrderInfo` | 充电订单 |
|
||||
| `AlarmInfo` | 告警信息 |
|
||||
|
||||
### 高德地图数据
|
||||
|
||||
| 类 | 说明 |
|
||||
|-----|------|
|
||||
| `AMapStationInfo` | 高德站点信息 |
|
||||
| `AMapEquipmentInfo` | 高德设备信息 |
|
||||
| `AMapConnectorInfo` | 高德充电枪信息 |
|
||||
| `AMapPriceChargingInfo` | 高德计费信息 |
|
||||
|
||||
---
|
||||
|
||||
## 常见问题 (FAQ)
|
||||
|
||||
### Q: 第三方平台数据同步失败?
|
||||
1. 检查平台配置(`ThirdPartyPlatformConfig`)
|
||||
2. 检查密钥配置(`ThirdpartySecretInfo`)
|
||||
3. 查看同步日志
|
||||
|
||||
### Q: 高德地图站点不显示?
|
||||
1. 检查站点是否已推送
|
||||
2. 检查站点状态是否正常
|
||||
3. 查看 `AMapService` 调用日志
|
||||
|
||||
---
|
||||
|
||||
## 相关文件清单
|
||||
|
||||
```
|
||||
jsowell-thirdparty/
|
||||
├── src/main/java/com/jsowell/thirdparty/
|
||||
│ ├── amap/ # 高德地图
|
||||
│ │ ├── domain/
|
||||
│ │ ├── service/
|
||||
│ │ └── util/
|
||||
│ ├── camera/ # 摄像头
|
||||
│ ├── common/ # 通用服务
|
||||
│ ├── huawei/ # 华为平台
|
||||
│ ├── lianlian/ # 联联平台
|
||||
│ ├── nanrui/ # 南瑞平台
|
||||
│ ├── ningxiajiaotou/ # 宁夏交投
|
||||
│ ├── parking/ # 停车场
|
||||
│ ├── platform/ # 平台通用
|
||||
│ │ ├── common/
|
||||
│ │ ├── domain/
|
||||
│ │ ├── factory/
|
||||
│ │ └── service/
|
||||
│ ├── yongchengboche/ # 永城泊车
|
||||
│ └── zhongdianlian/ # 中电联
|
||||
└── pom.xml
|
||||
```
|
||||
Reference in New Issue
Block a user