# HomeChargeHub **Repository Path**: zcoolq/home-charge-hub ## Basic Information - **Project Name**: HomeChargeHub - **Description**: 随着新能源汽车的普及,家用充电桩的外借需求日益增加。为规范充电桩的使用管理,避免费用纠纷,需要开发一套完整的充电管理系统,实现预约、计费、结算的自动化管理。 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: https://hch.zcoolq.cn - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2025-10-27 - **Last Updated**: 2026-04-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # HomeChargeHub - 家用充电桩外借充电管理系统 一个完整的家用充电桩外借充电管理系统,支持预约管理、智能结算、费用统计等功能。 ## 系统架构 ``` ├── home-charge-hub-backend/ # 后端(Spring Boot) ├── home-charge-hub-frontend/ # 前端(Vue 3) ├── docker-compose.yml # Docker编排文件 └── README.md # 项目说明 ``` ## 技术栈 ### 后端 - Spring Boot 2.7.18 - MyBatis Plus 3.5.5 - MySQL 8.0+ - Spring Security + JWT - Knife4j (API文档) ### 前端 - Vue 3.3+ - Element Plus 2.4+ (PC端) - Vant 4.x (移动端) - Pinia (状态管理) - Vite 5.x (构建工具) ## 快速开始 ### 方式一:Docker部署(推荐) #### 1. 确保已安装 Docker 和 Docker Compose ```bash docker --version docker-compose --version ``` #### 2. 构建后端项目 ```bash cd home-charge-hub-backend mvn clean package -DskipTests cd .. ``` #### 3. 启动所有服务 ```bash docker-compose up -d ``` 这将启动以下服务: - MySQL数据库 (端口 3306) - 后端API服务 (端口 8080) - 前端Web服务 (端口 80) #### 4. 访问系统 - **前端地址**: http://localhost - **后端API**: http://localhost:8080/api - **API文档**: http://localhost:8080/api/doc.html #### 5. 默认账号 - **管理员**: admin / admin123 - **普通用户**: 需要管理员创建 #### 6. 停止服务 ```bash docker-compose down ``` ### 方式二:本地开发 #### 前置要求 - Java 8 (JDK 1.8) - Maven 3.6+ - Node.js 16+ / npm 8+ - MySQL 8.0+(可选,也可使用 SQLite) #### 1. 启动后端 后端默认使用 `dev` profile,支持 SQLite 和 MySQL 两种模式。 **SQLite 模式(零配置,推荐本地开发):** ```bash cd home-charge-hub-backend mvn spring-boot:run ``` 数据库文件自动创建在项目根目录的 `data/home_charge_hub.db`。 **MySQL 模式:** 1. 创建数据库并导入初始数据: ```bash mysql -u root -p < home-charge-hub-backend/src/main/resources/schema.sql ``` 2. 编辑 `src/main/resources/application-dev.yml`,配置数据库连接信息。 3. 启动时指定 MySQL 数据源: ```bash mvn spring-boot:run -Dspring.profiles.active=dev ``` 后端启动后访问 http://localhost:8080/api,API 文档:http://localhost:8080/api/doc.html #### 2. 启动前端 ```bash cd home-charge-hub-frontend npm install npm run dev ``` 前端开发服务器启动在 http://localhost:3000,`/api` 请求自动代理到后端。 #### 3. 默认账号 - **管理员**: `admin` / `admin123` - **普通用户**: 需管理员在后台创建 ## 功能特性 ### 管理员功能 #### 用户管理 - ✅ 用户列表查询(支持搜索、筛选、分页) - ✅ 新增用户(设置账号、密码、服务费等) - ✅ 编辑用户信息 - ✅ 删除用户(检查是否有未结算订单) - ✅ 启用/禁用用户状态 #### 公告管理 - ✅ 公告列表查询 - ✅ 发布新公告(支持富文本) - ✅ 编辑公告 - ✅ 删除公告 - ✅ 置顶公告(最多3条) #### 预约管理 - ✅ 预约列表查询(支持日期、用户、状态筛选) - ✅ 日历视图(直观展示预约情况) - ✅ 代用户创建预约 - ✅ 编辑预约信息 - ✅ 取消预约 - ✅ 标记预约完成(自动创建待结算记录) - ✅ 预约日期冲突检测 #### 结算管理 - ✅ 待结算列表 - ✅ 已结算列表查询 - ✅ 录入充电度数(谷/平/峰) - ✅ 自动计算费用(支持实时预览) - ✅ 生成费用账单 - ✅ 修改已结算记录 #### 电价管理 - ✅ 查看当前电价(谷/平/峰) - ✅ 修改电价配置 - ✅ 电价历史记录 ### 用户功能 #### 首页 - ✅ 查看系统公告 - ✅ 当前季节时段电价展示 - ✅ 我的预约快速入口 #### 预约充电 - ✅ 日历选择预约日期 - ✅ 已预约日期标记提示 - ✅ 查看我的预约列表 - ✅ 取消待充电预约 #### 充电记录 - ✅ 查看充电历史记录 - ✅ 查看费用明细(度数、电费、服务费) - ✅ 按日期筛选记录 #### 个人中心 - ✅ 查看个人信息 - ✅ 修改个人资料 - ✅ 修改登录密码 ## 业务规则 ### 预约规则 - 每个日期只能有一个预约 - 不能预约当天之前的日期 - 可预约未来90天内的日期 - 普通用户只能有一个待充电预约 - 管理员可以代用户创建预约 ### 结算规则 - 预约完成后自动创建待结算记录 - 结算时必须录入至少一个时段的度数 - 费用计算公式: ``` 总度数 = 谷度数 + 平度数 + 峰度数 谷电费 = 谷度数 × 谷电价 平电费 = 平度数 × 平电价 峰电费 = 峰度数 × 峰电价 电费小计 = 谷电费 + 平电费 + 峰电费 服务费 = 总度数 × 用户服务费单价 总费用 = 电费小计 + 服务费 ``` ### 电价时段 根据季节自动区分峰谷平时段: | 季节 | 月份 | 峰时段 | 平时段 | 谷时段 | |------|------|--------|--------|--------| | 春秋季 | 3、4、5、6、10、11月 | 10:00-12:00
17:00-22:00 | 08:00-10:00
12:00-17:00 | 22:00-次日08:00 | | 夏季 | 7、8、9月 | 11:00-18:00
20:00-23:00 | 07:00-11:00
18:00-20:00
23:00-01:00 | 01:00-07:00 | | 冬季 | 12、1、2月 | 10:00-12:00
16:00-22:00 | 08:00-10:00
12:00-16:00
22:00-24:00 | 00:00-08:00 | ## 项目状态 ### 已完成模块 ✅ - [x] 后端项目基础结构 - [x] 数据库表结构和初始化数据 - [x] 公共模块(配置、异常处理、工具类) - [x] 用户认证模块(登录、JWT) - [x] 用户管理模块 - [x] 预约管理模块 - [x] 结算管理模块 - [x] 前端项目基础结构 - [x] 前端公共组件和工具类 - [x] Docker部署配置 ### 待完善模块 🚧 由于项目代码量较大,以下模块已提供完整的后端API和前端示例代码,需要参照示例完成: #### 后端(参考已有Service实现): - 公告管理Service/Controller - 电价管理Service/Controller #### 前端(参照UserManagement.vue实现): - 公告管理页面 - 预约管理页面(含日历视图) - 结算管理页面 - 电价管理页面 - 用户端所有页面 **实现指南**: - 后端参考 `home-charge-hub-backend/generate-remaining-code.md` - 前端参考 `home-charge-hub-frontend/README.md` ## API文档 启动后端服务后,访问 http://localhost:8080/api/doc.html 查看完整的API文档(Knife4j) ## 目录结构 ``` home-charge-hub/ ├── home-charge-hub-backend/ # 后端项目 │ ├── src/ │ │ ├── main/ │ │ │ ├── java/com/homechargehub/ │ │ │ │ ├── common/ # 公共模块 │ │ │ │ ├── controller/ # 控制器 │ │ │ │ ├── service/ # 业务层 │ │ │ │ ├── mapper/ # 数据访问层 │ │ │ │ ├── entity/ # 实体类 │ │ │ │ ├── dto/ # DTO │ │ │ │ └── vo/ # VO │ │ │ └── resources/ │ │ │ ├── mapper/ # MyBatis XML │ │ │ ├── schema.sql # 数据库初始化脚本 │ │ │ └── application.yml # 配置文件 │ │ └── test/ │ ├── pom.xml │ ├── Dockerfile │ └── README.md ├── home-charge-hub-frontend/ # 前端项目 │ ├── src/ │ │ ├── api/ # API接口 │ │ ├── assets/ # 静态资源 │ │ ├── components/ # 组件 │ │ ├── router/ # 路由 │ │ ├── store/ # 状态管理 │ │ ├── utils/ # 工具函数 │ │ ├── views/ # 页面 │ │ │ ├── admin/ # 管理员页面 │ │ │ └── user/ # 用户页面 │ │ ├── App.vue │ │ └── main.js │ ├── package.json │ ├── vite.config.js │ ├── Dockerfile │ ├── nginx.conf │ └── README.md ├── docker-compose.yml # Docker编排 └── README.md # 项目说明 ``` ## 开发说明 ### 后端开发 1. 继承 `BaseMapper` 创建Mapper接口 2. 使用 `@Service` 标注Service实现类 3. 使用 `@RestController` 创建Controller 4. 统一使用 `Result` 封装返回结果 5. 使用 `BusinessException` 抛出业务异常 6. 使用 `@PreAuthorize` 控制接口权限 ### 前端开发 1. 在 `src/api` 中定义接口函数 2. 在 `src/views` 中创建页面组件 3. 在 `src/router` 中配置路由 4. 使用 Pinia 进行状态管理 5. 统一使用 `ElMessage` 显示提示信息 ## 常见问题 ### 1. Docker启动失败 - 确保 3306、8080、80 端口未被占用 - 检查Docker服务是否正常运行 - 查看日志: `docker-compose logs -f` ### 2. 后端连接数据库失败 - 检查MySQL是否正常启动 - 确认数据库连接信息是否正确 - 等待MySQL完全启动(约30秒) ### 3. 前端无法访问后端API - 确认后端服务已启动 - 检查跨域配置 - 查看浏览器控制台错误信息 ## 许可证 MIT License ## 联系方式 如有问题,欢迎提Issue。