项目介绍


SUEZ 项目介绍

1. 项目概述

项目名称: gep-suez (电动汽车平台 - 苏伊士充电桩管理系统)

项目描述: "Suez"项目是吉利汽车旗下的家用充电桩智能管理平台,旨在通过技术升级和智能化手段提升家用充电桩的使用效率和准确性,实现对充电桩的远程控制和管理。该系统帮助用户更好地管理电动汽车充电过程,缓解电网负荷,提高能源利用效率。

命名寓意: 取名自"苏伊士运河"(Suez Canal),象征连接、便捷与高效。


2. 项目架构与模块划分

2.1 多模块Maven结构

plaintext

gep-suez (父工程)
├── gep-suez-common    # 公共模块 - 工具类、常量、枚举、通用模型
├── gep-suez-server    # 服务端核心模块 - 业务逻辑、数据访问、集成层
├── gep-suez-api       # API接口模块 - REST Controller层
└── gep-suez-starter   # 启动模块 - Spring Boot应用入口、配置

2.2 分层架构设计

API层 (gep-suez-api):

  • 24个REST Controller
  • 按业务域分组: charge(充电), equipment(设备), equip(桩控), user(用户), faq(问答), task(任务), migrate(迁移), oss(对象存储), login(登录)

服务层 (gep-suez-server/service):

  • 核心业务服务接口及实现
  • 策略模式实现 (TokenService)
  • Sea系列服务 (极氪品牌专属服务)

领域层 (gep-suez-server/domain):

  • control: 设备控制领域
  • equipFunction: 设备功能领域
  • common: 通用领域

基础设施层 (gep-suez-server/infrastructure):

  • cache: Redis缓存服务
  • mq: Kafka消息队列生产者和消费者
  • oss: 阿里云OSS对象存储
  • sampling: 采样服务
  • event: 事件发布

集成层 (gep-suez-server/integration):

  • device: 设备集成
  • user: 用户中心集成
  • gbop: GBOP系统集成
  • rcCharge: 充电记录集成
  • yz: LEVC迁移集成

3. 技术栈详情

3.1 核心框架

技术版本说明
Spring Boot2.7.18核心框架
Spring Cloud2021.0.9微服务框架
Spring Cloud Alibaba2021.0.6.0阿里微服务组件
Java1.8JDK版本

3.2 微服务组件

组件版本用途
Nacos-服务注册发现 + 配置中心
OpenFeign11.1声明式HTTP客户端
Spring Cloud LoadBalancer-负载均衡
Spring Cloud Bootstrap3.1.8引导配置加载

3.3 数据库与持久化

技术版本说明
MySQL8.3.0关系型数据库
MyBatis2.2.2 (starter)ORM框架
MyBatis Generator1.3.3代码生成器
Druid1.2.23数据库连接池 + 监控
MapStruct1.2.0.Final对象映射转换

3.4 缓存

技术版本说明
RedisJedis 3.8.0分布式缓存
Caffeine2.7.0本地缓存
Spring Integration Redis5.5.17Redis集成

3.5 消息队列

技术版本说明
Kafkaspring-kafka 2.8.10 / kafka-clients 2.8.2消息中间件

3.6 其他中间件

技术版本用途
Zookeeper3.9.2分布式协调
Curator5.6.0Zookeeper客户端
Netty4.1.27.Final网络通信
Disruptor3.4.4高性能队列

3.7 云服务与存储

技术版本用途
Aliyun OSS3.10.2对象存储服务
InfluxDB2.24时序数据库(可能用于充电数据采集)

3.8 工具库

版本用途
Lombok1.18.4代码简化
Guava32.1.2-jreGoogle工具集
FastJSON2.0.29JSON处理
Apache Commonscollections4 4.4, lang3 3.12.0通用工具
Joda-Time2.13.0日期时间处理
HttpComponents4.5.14HTTP客户端
AspectJ1.8.9AOP切面
Hibernate Validator7.0.1.Final参数校验
Protobuf3.21.9序列化协议

3.9 日志框架

组件版本
Logback1.2.13
SLF4J1.7.36
Log4j22.24.3

3.10 测试框架

框架版本
JUnit-
Hamcrest2.2
DBUnit2.7.2
H2 Database1.4.196
JMockit1.49
Embedded Redis0.7.3
Curator Test5.6.0

4. 核心业务功能模块

4.1 设备管理 (Equipment Management)

Controller: EquipmentManageController, SeaEquipmentManageController

核心功能:

  • 查询我的设备列表 (getMyEquipments)
  • 查询设备详情 (getMyEquipmentDetail)
  • 设备自检 (equipmentCheck)
  • 设备OTA升级 (equipmentOta)
  • 查询设备版本信息
  • 更新设备信息
  • 设置设备首位展示

关键实体:

  • EquipmentOwnerInfo: 设备所有者信息
  • EquipmentVersion: 设备版本信息
  • EquipmentCheckInfo: 设备检查信息
  • EquipmentConfigInfo: 设备配置信息

4.2 充电管理 (Charge Management)

Controller: ChargeController, SeaChargeController

核心功能:

  • 启动充电 (startCharge)
  • 停止充电 (stopCharge)
  • 查询充电状态 (getChargeStatus)
  • 查询充电订单 (getEquipmentChargeOrder)
  • 查询充电统计 (getEquipmentChargeOrderCalc)
  • 预约充电 (setBookCharge, getBookCharge)
  • 查询充电用户信息

Handler处理:

  • NotificationStartChargeResultHandler: 启动充电结果处理
  • NotificationStopChargeResultHandler: 停止充电结果处理
  • NotificationChargingStatusHandler: 充电状态通知处理
  • ChargeTimeConfigHandler: 充电时间配置处理

4.3 设备绑定与分享 (Equipment Binding & Sharing)

Controller: EquipmentOwnerController, SeaEquipmentOwnerController

核心功能:

  • 绑定家桩 (bindMyEquipment)
  • 解绑家桩 (cancelBindMyEquipment)
  • 分享家桩 (shareMyEquipment)
  • 取消分享 (cancelShareMyEquipment)
  • 查询分享记录 (getMyEquipmentShares)
  • 发送绑定验证码

关键实体:

  • EquipmentOwnerShareInfo: 设备分享信息
  • EquipmentVinInfo: 设备VIN码绑定信息

4.4 设备功能控制 (Equipment Function Control)

Controller: EquipCommandController, EquipFunctionController, SeaEquipmentOperateController

核心功能:

  • 开启/关闭鉴权 (authEquipment, cancelAuthEquipment)
  • 开启/关闭即插即充 (PnC - Plug and Charge)
  • 开启/关闭按键开盖
  • 绑定/解绑VIN码
  • 设备绑卡/解绑卡
  • 查询设备绑定卡片
  • 设置设备颜色

Handler处理:

  • EquipAuthOpHandler: 鉴权操作
  • EquipKeyCapOpHandler: 按键开盖操作
  • EquipPacOpHandler: PnC操作
  • EquipVinOpHandler: VIN码操作
  • EquipCardOpHandler: 卡片操作
  • EquipColorOpHandler: 颜色设置操作

4.5 用户认证与Token管理 (User Authentication)

Controller: LoginController, UserController

策略模式实现:

  • TokenStrategy: 策略上下文
  • TokenService: 策略接口
  • JiliTokenServiceImpl: 吉利品牌Token服务
  • JiheTokenServiceImpl: 几何品牌Token服务
  • LingkeTokenServiceImpl: 领克品牌Token服务
  • YinheTokenService: 银河品牌Token服务
  • ZeekrUserService: 极氪用户服务

支持的品牌:

  • 吉利 (Jili)
  • 几何 (Jihe)
  • 领克 (Lingke)
  • 银河 (Yinhe)
  • 极氪 (Zeekr)

4.6 FAQ问答系统

Controller: FaqController, EquipFaqController

核心功能:

  • 业务FAQ管理
  • 设备FAQ管理

关键实体:

  • BusinessFaqInfo: 业务FAQ信息
  • EquipmentFaq: 设备FAQ

4.7 数据迁移 (Migration)

Controller: MigrateController, EquipMigrationController

核心功能:

  • 设备数据迁移
  • LEVC迁移支持
  • 迁移白名单管理

4.8 定时任务 (Scheduled Tasks)

Controller: EquipmentOwnerTaskController, EquipmentOwnerAndSharerCacheTaskController, EquipmentOwnerSharerVinSyncTaskController

核心功能:

  • 设备所有者和分享者缓存同步
  • VIN信息同步
  • 设备关系信息同步

5. 数据库设计

5.1 核心数据表

根据Mapper文件和实体类推断的主要表结构:

表名说明主要字段
equipment_owner_info设备所有者信息id, provider_no, equipment_id, equipment_name, user_id, user_name, bind_status, source_type_key, data_source
equipment_owner_share_info设备分享信息id, equipment_id, owner_user_id, sharer_user_id, share_status
equipment_vin_info设备VIN绑定信息id, equipment_id, vin, vin_type
equipment_book_charge充电预约id, equipment_id, user_id, start_time, end_time, fully_charge, status
equipment_version设备版本信息id, equipment_id, version_info, ota_status
equipment_config_info设备配置信息id, equipment_id, config_type, config_value
equipment_check_info设备检查信息id, equipment_id, check_result, check_time
equipment_fault_info设备故障信息id, equipment_id, fault_code, fault_status
equip_function设备功能配置id, equipment_id, function_id, function_status
business_faq_info业务FAQid, source_type_key, scene_code, faq_id, title, content, status
equipment_faq设备FAQid, equipment_id, faq_content

5.2 数据库特性

  • 使用MyBatis Generator自动生成Mapper代码
  • 采用Repository模式封装数据访问
  • 使用PO (Persistent Object) 和 Entity分离
  • 使用Transfer进行对象转换 (MapStruct)

6. 消息队列设计

6.1 Kafka主题 (Topics)

消费的主题:

  • GEP_DEVICE4H_NOTIFY_CONNECTOR_STATUS: 连接器状态通知
  • GEP_DEVICE4H_NOTIFY_CHARGING_STATUS: 充电状态通知
  • GEP_DEVICE4H_NOTIFY_START_CHARGE_RESULT: 启动充电结果
  • GEP_DEVICE4H_NOTIFY_STOP_CHARGE_RESULT: 停止充电结果
  • GEP_DEVICE4H_NOTIFY_DEVICE_SHADOW: 设备影子通知
  • GEP_DEVICE4H_NOTIFY_ORDINARY_EVENT_RESULT: 普通事件结果
  • GEP_NOTIFY_EVENT_H: 通用事件通知(新集群)
  • GEP_NOTIFY_EVENT: 通用事件通知(旧集群)
  • TOPIC_EQUIPMENT_SYNC_H: 设备同步事件

Listener实现:

  • NotificationConnectorStatusListener
  • NotificationChargingStatusListener
  • NotificationStartChargeResult4PushListener
  • NotificationStopChargeResult4PushListener
  • NotificationDeviceShadowListener
  • NotificationOrdinaryEventListener
  • GepCommonEventHListener
  • GepCommonEventListener
  • EquipmentSyncEventListener

6.2 Kafka配置

  • 支持高频率和普通频率两种消费模式
  • 并发度: 3 (普通), 4 (核心)
  • 最大拉取记录: 100 (普通), 500 (高频)
  • 自动提交偏移量
  • Session超时: 30秒

7. 缓存设计

7.1 Redis缓存

缓存服务: RedisCacheService, EquipmentCacheService

缓存内容:

  • 设备认证操作缓存 (EquipAuthenticationOpCacheModel)
  • 设备命令缓存 (EquipCommandCacheModel)
  • 设备OTA缓存 (EquipOtaCacheModel)
  • 启动充电缓存 (EquipStartChargeCacheModel)
  • VIN操作缓存 (EquipVinOpCacheModel)
  • PnC操作缓存 (EquipPncOpCacheModel)
  • 按键开盖缓存 (EquipKeyOnOpCacheModel)
  • 预约充电缓存 (EquipBookChargeOpCacheModel)
  • 卡片操作缓存 (EquipCardOpCacheModel)
  • 颜色设置缓存 (EquipmentColorOpCacheModel)
  • 充电数据缓存 (ChargeDataModel)

Redis锁: RedisLock - 分布式锁实现

7.2 Caffeine本地缓存

  • 配置在 CaffeineConfiguration
  • 用于高频读取的本地缓存

8. 设计模式与架构决策

8.1 设计模式应用

  1. 策略模式 (Strategy Pattern)
    • TokenStrategy + TokenService 实现多品牌Token获取策略
    • 支持吉利、几何、领克、银河等不同品牌的差异化认证
  2. 门面模式 (Facade Pattern)
    • FacadeService 统一对外提供服务接口
    • 封装复杂的业务逻辑
  3. 仓储模式 (Repository Pattern)
    • Domain层使用Repository封装数据访问
    • 例如: EquipmentOwnerInfoRepository, EquipmentBookChargeRepository
  4. 管理器模式 (Manager Pattern)
    • Domain层使用Manager封装业务逻辑
    • 例如: EquipmentOwnerInfoManager, EquipmentBookChargeManager
  5. 处理器模式 (Handler Pattern)
    • Kafka消息使用Handler处理
    • 例如: NotificationConnectorStatusHandler, EquipVinOpHandler
  6. DTO/VO/PO分离
    • PO: 持久化对象 (数据库映射)
    • DTO: 数据传输对象
    • VO: 视图对象
    • 使用MapStruct进行对象转换

8.2 架构特点

  1. DDD领域驱动设计思想
    • 清晰的Domain层划分
    • Entity, Repository, Manager, Transfer分层
  2. 多租户/多品牌支持
    • 通过 sourceTypeKey 区分不同品牌
    • 策略模式实现品牌差异化
  3. 设备迁移架构
    • 支持从旧系统到新系统的平滑迁移
    • 白名单机制控制迁移范围
    • 强制迁移开关
  4. 事件驱动架构
    • Kafka消息驱动的状态更新
    • Spring Event内部事件发布
  5. 配置外部化
    • Nacos配置中心管理业务配置
    • @RefreshScope 支持动态刷新

9. 性能优化措施

9.1 JVM优化 (Dockerfile)

-Xms4g -Xmx4g           # 堆内存4GB
-Xss512k                 # 线程栈512KB
-XX:MetaspaceSize=256m   # 元空间初始256MB
-XX:MaxMetaspaceSize=512m # 元空间最大512MB
-XX:+UseConcMarkSweepGC  # CMS垃圾收集器
-XX:CMSInitiatingOccupancyFraction=70 # CMS触发阈值70%
-XX:+HeapDumpOnOutOfMemoryError # OOM时生成堆转储

9.2 数据库优化

  • Druid连接池配置:
    • 初始连接数: 3
    • 最小空闲: 3
    • 最大活跃: 20
    • 最大等待: 10秒
    • 连接验证查询: SELECT 'x'
    • 空闲检测: 60秒

9.3 缓存优化

  • 多级缓存: Caffeine本地缓存 + Redis分布式缓存
  • 缓存开关可配置 (equip.info.cache.switch)

9.4 消息队列优化

  • 高低频消息分离
  • 批量拉取配置优化
  • 并发消费者配置

9.5 采样机制

  • 高频事件采样 (SamplingService)
  • 可配置采样点数和总数
  • 减少数据存储压力

10. 安全与认证机制

10.1 认证方式

  • 多品牌Token认证体系
  • 策略模式实现差异化认证
  • 支持手机号、用户ID等多种认证方式

10.2 授权机制

  • 设备所有者权限控制
  • 分享者权限控制
  • VIN绑定验证

10.3 数据安全

  • 用户手机号脱敏存储
  • OSS签名URL访问
  • GBOP签名头工具 (GbopSignHeaderUtil)

10.4 参数校验

  • Hibernate Validator参数校验
  • Fluent Validation流式校验

11. 部署与运维

11.1 容器化部署

  • Docker镜像基于吉利内部基础镜像
  • 时区设置为 Asia/Shanghai
  • 健康检查通过Spring Actuator

11.2 配置管理

  • Nacos配置中心
  • 配置文件:
    • bootstrap.yaml: Nacos连接配置
    • application.yaml: 应用配置
    • application-local.yaml: 本地开发配置
    • Nacos扩展配置: gep-suez.yaml, gep-suez-business.properties

11.3 监控

  • Spring Boot Actuator
  • Druid监控
  • 日志: Logback + SLS (阿里云日志服务)

11.4 CI/CD

  • Maven构建
  • Nexus仓库管理
  • 快照版本发布

12. 关键配置项

12.1 业务配置 (Nacos)

  • newMqtt.switch: MQTT开关
  • key.management.strategy: IoT设备密钥策略
  • equipment_migration_switch: 设备迁移总开关
  • equipment_force_migration_switch: 强制迁移开关
  • equipment_migration_whitelist_config: 迁移白名单
  • equip.info.cache.switch: 设备信息缓存开关
  • sampling.suez.high_frequency_event.points: 高频事件采样点数

12.2 中间件配置

  • Redis: host, port, database, password, pool配置
  • Kafka: producer/consumer servers, retries, batch.size
  • Feign: connectTimeout, readTimeout, httpclient配置
  • SchedulerX2: 阿里云分布式任务调度

13. 外部系统集成

13.1 Feign客户端

  • GepDeviceClient: 设备服务调用
  • GepNormandyClient: Normandy服务
  • RcHChargeMgmtClient: 充电管理服务
  • RcHChargerIntegrationClient: 充电器集成
  • RcHChargerIntegrationEquipmentClient: 设备集成
  • RcBaseDataClient: 基础数据服务
  • GepOrderSuezClient: 订单服务

13.2 集成服务

  • GBOP (吉利业务开放平台)
  • 用户中心 (多品牌)
  • RC充电系统
  • 设备物联网平台
  • LEVC迁移系统

14. 总结

GEP-SUEZ 是一个成熟的、企业级的家用充电桩管理平台,具有以下特点:

技术先进: 采用Spring Cloud微服务架构,支持多品牌、多租户 ✅ 架构清晰: DDD领域驱动设计,分层明确,职责清晰 ✅ 高性能: 多级缓存、消息队列异步处理、JVM优化 ✅ 可扩展: 策略模式支持新品牌快速接入,配置外部化 ✅ 可靠性: 分布式锁、消息重试、迁移白名单机制 ✅ 安全性: 多品牌认证、参数校验、数据脱敏

核心业务领域:

  1. 设备管理 (绑定、分享、OTA、自检)
  2. 充电管理 (启停充电、预约充电、充电记录)
  3. 设备控制 (鉴权、PnC、VIN绑定、卡片管理)
  4. 用户认证 (多品牌Token策略)
  5. 数据迁移 (平滑迁移支持)

这是一个典型的IoT+车联网应用场景,展示了吉利在新能源汽车充电领域的技术实力。

SpringBoot
SpringCloud