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

7.5 KiB
Raw Blame History

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-frameworkjsowell-pilejsowell-nettyjsowell-thirdparty
  • jsowell-pile 依赖 jsowell-framework(核心业务逻辑)
  • jsowell-netty 依赖 jsowell-pilejsowell-thirdparty(设备通信)
  • jsowell-framework 依赖 jsowell-systemjsowell-common(基础框架)

核心业务流程

充电桩通信架构

系统通过 Netty 实现与充电桩设备的实时通信:

  1. TCP 服务器jsowell-netty 模块启动 TCP 服务器监听充电桩连接
  2. 协议处理
    • 云快充协议:com.jsowell.netty.handler.yunkuaichong.*Handler50+ 个处理器)
    • 电动自行车协议:com.jsowell.netty.handler.electricbicycles.*Handler
  3. MQTT 支持BootNettyMqttChannelInboundHandler 处理 MQTT 协议
  4. 业务服务
    • YKCBusinessService:云快充业务逻辑
    • EBikeBusinessService:电动自行车业务逻辑
    • CameraBusinessService:摄像头业务逻辑

支付与结算流程

支持多种支付方式:

  • 微信支付WechatPayServiceV3 API
  • 支付宝支付AliAppletRemoteService
  • 汇付支付AdapayMemberAccountService

结算相关:

  • 订单分账:OrderSplitRecordService
  • 清算账单:ClearingBillInfoService
  • 商户结算:SettleOrderReportService

第三方平台对接

jsowell-thirdparty 模块对接多个第三方平台:

  • 高德地图AMapService(充电站信息同步)
  • 停车场系统QcyunsServiceLTYTServiceRJService
  • 充电平台ZDLService(中电联)、NRService(南瑞)、XDTService(新电途)

常用开发命令

构建与运行

# 编译整个项目
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-Plusjsowell-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.xmlXML
  • 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 TokenTokenService 管理 Token 生成和验证
  • 密码加密:使用 BCrypt 加密
  • 权限验证PermissionServiceSysPermissionService
  • 登录限制:密码错误 5 次锁定 10 分钟

缓存策略

使用 Redis 缓存:

  • 用户登录信息
  • 字典数据
  • 配置参数
  • 充电桩在线状态

文件上传

  • 本地存储:配置 jsowell.profile 路径
  • 阿里云 OSS:配置在 aliyunoss 节点
  • Minio:可选的对象存储方案

测试说明

测试文件位置:jsowell-admin/src/test/java/

现有测试:

  • SpringBootTestController.javaSpring 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(使用自定义数据源配置)