# EVChargingSystem **Repository Path**: calljj/evcharging-system ## Basic Information - **Project Name**: EVChargingSystem - **Description**: 充电桩管理小程序 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-25 - **Last Updated**: 2025-11-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 充电桩推荐与管理系统 基于Spring Boot + uni-app的充电桩推荐与管理系统 ## 项目简介 本项目是一个学生期末作业项目,实现了充电桩的智能推荐、在线预约、订单管理等核心功能。 ### 项目亮点 - 智能找桩:多维度筛选与排序(距离/价格/评分/充电类型)。 - 个性化推荐:基于收藏与历史行为的简化协同过滤,未登录时提供热门推荐。 - 地图一致性:统一使用 GCJ-02 坐标系,前端展示(腾讯底图)与后端计算(百度服务)完全对齐。 - 全流程体验:预约 -> 模拟充电 -> 计费 -> 支付 -> 评价,流程可演示且稳定。 - 管理后台:充电站/充电桩/订单/统计一体化管理,支持地图选点录入。 ## 技术栈 ### 后端 - Spring Boot 3.5.8 - MyBatis-Plus 3.5.5 - MySQL 8.0 - JWT(用户认证) - Hutool(工具类) - FastJSON2(JSON处理) ### 前端 - uni-app(Vue3) - 微信小程序地图组件(腾讯底图) + 百度地图API(后端地理服务) - 坐标系统一:GCJ-02 ## 项目结构 ``` EVChargingSystem/ ├── src/main/java/com/jsh/evchargingsystem/ │ ├── common/ # 公共类(统一返回、异常处理) │ ├── config/ # 配置类(MyBatis-Plus、跨域) │ ├── controller/ # 控制器层 │ ├── service/ # 业务层 │ ├── mapper/ # 数据访问层 │ ├── entity/ # 实体类 │ ├── dto/ # 数据传输对象 │ ├── vo/ # 视图对象 │ └── util/ # 工具类 ├── src/main/resources/ │ ├── mapper/ # MyBatis XML映射文件 │ ├── application.yml # 主配置文件 │ └── application-dev.yml # 开发环境配置 ├── EVChargingSystem_front/ # 前端uni-app项目 │ ├── pages/ # 页面 │ ├── api/ # API接口封装 │ ├── utils/ # 工具函数 │ └── static/ # 静态资源 └── db.sql # 数据库脚本 ``` ## 快速开始 ### 环境准备 - JDK 17+ - MySQL 8.0+ - Maven 3.8+ - HBuilderX 或 微信开发者工具(推荐用于小程序预览) - Node.js 16+(可选,供部分前端工具链使用) ### 1. 数据库配置 **创建数据库并导入数据** ```bash # 使用MySQL客户端执行db.sql文件 mysql -u root -p < db.sql ``` **修改数据库配置** 编辑 `src/main/resources/application-dev.yml`: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/ev_charging_system username: root password: your_password # 修改为你的数据库密码 ``` ### 2. 后端启动 **方式一:使用IDE运行** - 打开IDEA - 运行 `EvChargingSystemApplication.java` **方式二:使用Maven命令** ```bash # 进入项目根目录 cd d:/proIDEA/jsh/EVChargingSystem # 清理并编译 mvn clean install # 启动项目 mvn spring-boot:run ``` 后端服务将在 `http://localhost:8080/api` 启动 ### 3. 前端启动 **使用HBuilderX** 1. 打开HBuilderX 2. 导入项目:`EVChargingSystem_front` 3. 运行到浏览器或微信开发者工具 **使用微信开发者工具(可选)** - 在 HBuilderX 运行到小程序后,自动生成目录:`EVChargingSystem_front/unpackage/dist/dev/mp-weixin` - 打开微信开发者工具,导入上述目录即可预览。 - 如需调试定位,请在开发者工具的“传感器/Geolocation”中设置模拟经纬度。 **修改API地址** 编辑 `EVChargingSystem_front/utils/request.js`: ```javascript const BASE_URL = 'http://localhost:8080/api' // 根据实际情况修改 ``` ### 4. 百度地图配置 **申请百度地图AK** 1. 访问 [百度地图开放平台](https://lbsyun.baidu.com/) 2. 注册并创建应用 3. 获取AK密钥 **配置AK** 编辑 `src/main/resources/application.yml`: ```yaml baidu: map: ak: YOUR_BAIDU_MAP_AK # 替换为你的AK ``` 说明: - 后端已强制使用 GCJ-02 坐标(ret_coordtype=gcj02ll / coordtype=gcj02ll),确保与微信地图一致。 - 建议使用服务端 AK(Server AK),不要在前端暴露私密密钥。 ## 核心功能 ### 后台管理系统 1. **用户管理** - 用户列表、启用/禁用、新增用户 2. **充电站管理** - 充电站CRUD、地图定位 3. **充电桩管理** - 充电桩CRUD、状态管理 4. **订单管理** - 订单列表、详情查看 5. **数据统计** - 订单量、收入统计 ### 用户端小程序 1. **智能找桩** - 地图展示、多维度筛选排序 2. **个性化推荐** - 基于收藏和历史行为推荐 3. **在线预约** - 查看桩况、预约充电 4. **充电流程** - 扫码充电、自动计费、模拟支付 5. **订单管理** - 历史订单、订单详情、评价 ## 使用指南(面向演示) - 管理端 1. 登录后台,进入“充电站管理”点击“添加充电站”。 2. 使用“地图选点”确定经纬度(自动采用 GCJ-02,无需关心坐标系)。 3. 保存后在“充电桩管理”为该站添加若干快充/慢充桩,并设置状态。 - 用户端 1. 首页进入“地图找桩”,允许定位权限后显示附近站点(可按距离/价格/评分排序)。 2. 进入站点详情,选择空闲充电桩进行预约,按流程完成充电与支付(模拟)。 3. 订单完成后可进行评价,数据将用于推荐算法优化。 ## 数据库表说明 | 表名 | 说明 | |------|------| | sys_user | 用户表 | | user_vehicle | 用户车辆信息表 | | charging_station | 充电站表 | | charging_pile | 充电桩表 | | charging_order | 充电订单表 | | user_favorite | 用户收藏表 | | station_review | 充电站评价表 | | sys_config | 系统配置表 | ## 默认账号 **管理员账号** - 用户名:admin - 密码:admin123 **测试用户** - 用户名:user001 - 密码:123456 > 注意:首次运行需要在代码中对密码进行加密处理 ## API接口文档 ### 认证接口 **登录** ``` POST /api/auth/login Content-Type: application/json { "username": "admin", "password": "admin123" } ``` **注册** ``` POST /api/auth/register Content-Type: application/json { "username": "test", "password": "123456", "nickname": "测试用户", "phone": "13800138000" } ``` ### 充电站接口 **获取附近充电站** ``` GET /api/station/nearby?lng=116.4&lat=39.9&radius=5&sortBy=distance&chargeType=0 参数: - lng / lat:当前位置经纬度(GCJ-02)。 - radius:搜索半径,单位公里(默认5)。 - sortBy:distance | price | rating(默认 distance)。 - chargeType:0-快充,1-慢充,可选。 ``` **获取充电站详情** ``` GET /api/station/{id} ``` ## 开发规范 1. **代码规范** - 企业级规范,每行详细注释 2. **前端规范** - 禁止使用玻璃效果、渐变元素和emoji 3. **配置规范** - 禁止硬编码,采用动态配置 4. **注解优先** - 后端优先使用注解 5. **针对性修改** - 严禁过度修改和打补丁式修复 ## 注意事项 1. **密码加密** - 首次运行需要更新数据库中的密码为加密后的值 2. **端口占用** - 确保8080端口未被占用 3. **数据库版本** - 建议使用MySQL 8.0+ 4. **JDK版本** - 需要JDK 17+ 5. **百度地图** - 需要申请百度地图AK才能使用地图功能 ## 常见问题 FAQ - 为什么页面显示“腾讯地图”,但文档写了“百度地图API”? - 小程序前端遵循微信平台规范,地图底图由腾讯提供;后端集成百度地图的地理编码/逆地理/距离计算能力。我们通过坐标统一(GCJ-02)把两者无缝融合,既保证体验,又保证精度。 - 为什么定位与我实际位置有偏差? - 电脑端开发者工具的定位为模拟值;真机室内定位依赖 WiFi/基站可能有几十到数百米偏差。建议在真机室外测试,并确保授予“精确定位”权限。 - 附近充电站显示 0 个? - 说明当前定位附近没有样例数据。可在管理端用“地图选点”快速添加一个站点,或在开发者工具里设置模拟经纬度到样例城市(如北京 39.928889, 116.473611)。 - 如何切换为百度地图前端底图? - 微信小程序前端底图固定为腾讯,属于平台限制不可切换。若需百度底图可采用 H5 网页版或 App 形态。当前方案通过坐标统一(GCJ-02)确保展示和计算一致。 - 坐标系是否统一?历史数据会不会偏移? - 系统已统一 GCJ-02;后端调用百度API时启用 ret_coordtype/coordtype=gcj02ll。历史若存在 BD-09 坐标的数据,可能有少量偏移,建议通过“地图选点”重新保存一次坐标。 - 下单/修改状态返回 401 或“请先登录”? - 原因多为 Token 过期或未携带 Authorization 头。请重新登录;前端 `utils/request.js` 会自动注入本地 token。 - 删除失败或提示有关联数据? - 充电桩/站点若存在关联订单或业务记录,基于外键/业务约束将限制删除。请先清理关联记录或将对象“停用/离线”。 - 支付是否真实扣款? - 演示环境为模拟支付流程,不接入真实支付通道,仅用于功能演示与联调。 - 推荐结果不理想能否关闭? - 可在 `sys_config` 中将 `recommend.algorithm.enabled=false` 关闭个性化推荐;未登录时系统自动回退为热门站点。 - 如何切换接口地址到线上环境? - 修改 `EVChargingSystem_front/utils/request.js` 中 `BASE_URL`。建议结合环境变量或配置中心以区分开发/测试/生产。 - 如何部署到服务器? - 后端:JDK17+、MySQL8、开启 8080;前端:小程序上传或 H5 静态资源部署;Nginx 反向代理 `/api` 到后端服务。小程序需在“业务域名/请求域名白名单”配置合法域名。 - 提示“组件已支持同层渲染,建议使用 view 代替 cover-view 渲染”? - 代码已改为使用 `view`。若仍出现,多为开发者工具提示,不影响线上功能,可忽略。 - 中心点图标丢失/加载失败如何处理? - 已改为纯 CSS 绘制标记(无需图片)。如需自定义样式,修改 `pages/map/map-select.vue` 中 `.marker-pin` 即可。 ## 后续开发计划 - [ ] 完善充电站管理功能 - [ ] 实现地图找桩功能 - [ ] 开发推荐算法 - [ ] 完善订单流程 - [ ] 添加数据统计图表 - [ ] 实现评价功能