# eh-HMS **Repository Path**: MISSMYSEIF/eh-hms ## Basic Information - **Project Name**: eh-HMS - **Description**: 基于移动互联网的O2O家政服务平台,连接家政服务提供者与有需求的用户,实现线上预订、接单、派单等O2O闭环交易,为用户提供便捷、高效的家政服务体验。 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-04-21 - **Last Updated**: 2026-09-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # EH HMS 养老服务平台 > 基于微服务架构的O2O养老服务平台,连接养老服务提供者与有需求的用户,实现线上预订、接单、派单等O2O闭环交易。 [![License](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE) [![Java](https://img.shields.io/badge/Java-17-orange.svg)](https://adoptium.net/) [![Spring Boot](https://img.shields.io/badge/Spring%20Boot%203.2-green.svg)](https://spring.io/projects/spring-boot) [![Vue](https://img.shields.io/badge/Vue-3.4-brightgreen.svg)](https://cn.vuejs.org/) [![Node.js](https://img.shields.io/badge/Node.js-18-limegreen.svg)](https://nodejs.org/) [English](README.en.md) | 中文 --- ## 目录 - [项目简介](#项目简介) - [平台端](#平台端) - [技术栈](#技术栈) - [项目结构](#项目结构) - [核心功能](#核心功能) - [快速开始](#快速开始) - [项目文档](#项目文档) - [数据库设计](#数据库设计) - [API接口](#api接口) - [配置说明](#配置说明) - [开源协议](#开源协议) --- ## 项目简介 EH HMS(Elderly Health Management System)是一个面向养老行业的O2O服务平台,旨在连接服务提供方(商户/服务人员)与服务消费方(老人/家属),提供便捷、高效、可信的养老服务对接。 ### 核心优势 - 🚀 **微服务架构**:支持水平扩展,高可用部署 - 🔒 **安全可靠**:JWT认证,数据加密,接口签名 - 📱 **多端适配**:支持Web、App、小程序、鸿蒙等多终端 - 💳 **支付集成**:支持微信支付、支付宝支付 - 🔐 **OAuth登录**:支持微信、支付宝、小程序OAuth登录 --- ## 平台端 | 端 | 项目 | 技术栈 | 运行平台 | |----|------|--------|---------| | 管理端 | o2o-admin-web | Vue3 + Element Plus + TypeScript + Pinia | PC浏览器 | | 用户端 | o2o-customer | Vue3 + Vant + TypeScript + Pinia | PC / H5 / App | | 服务人员端 | o2o-worker-web | Vue3 + Element Plus + TypeScript + Pinia | PC浏览器 | | 机构管理端 | o2o-org-web | Vue3 + Element Plus + TypeScript + Pinia | PC浏览器 | | 鸿蒙端 | o2o-harmony | ArkTS + ArkUI + HarmonyOS | HarmonyOS NEXT | | 服务端 | o2o-server | Spring Boot 3.x + Spring Cloud | 服务端 | --- ## 技术栈 ### 后端 | 技术 | 版本 | 说明 | |------|------|------| | Java | 17 LTS | JDK版本 | | Spring Boot | 3.2.x | 微服务基础框架 | | Spring Cloud Alibaba | 2023.0.x | 微服务治理 | | MyBatis Plus | 3.5.x | ORM框架 | | MySQL / SQLite | 8.0+ / 3.x | 数据库(默认SQLite) | | Redis | 7.x | 缓存/会话/验证码 | | Spring Security + JWT | 6.x | 认证鉴权 | | Knife4j | 4.4.x | API文档 | ### 前端 | 技术 | 版本 | 说明 | |------|------|------| | Vue | 3.4.x | 前端框架 | | TypeScript | 5.x | 类型系统 | | Pinia | 2.x | 状态管理 | | Element Plus | 2.x | 管理端UI组件库 | | Vite | 5.x | 构建工具 | | Axios | 1.x | HTTP客户端 | --- ## 项目结构 ``` eh-hms/ ├── docs/ # 项目文档 │ ├── README.md # 文档导航索引 │ ├── changelog.md # 变更日志 │ ├── user-manual.md # 用户手册 │ ├── architecture/ # 架构设计 │ ├── api/ # API与接口文档 │ ├── database/ # 数据库文档 │ ├── development/ # 开发指南 │ ├── deployment/ # 部署与运维 │ └── integration/ # 第三方对接 ├── tests/ # 测试脚本(Python) │ ├── test_auth.py # 认证模块测试 │ ├── test_user.py # 用户模块测试 │ ├── test_order.py # 订单模块测试 │ ├── test_payment.py # 支付模块测试 │ ├── test_admin.py # 系统管理测试 │ └── test_database.py # 数据库测试 ├── o2o-server/ # 后端微服务(9 个业务服务 + common) │ ├── o2o-gateway/ # API网关 (端口8080) │ ├── o2o-auth/ # 认证服务 (端口8081) │ ├── o2o-user/ # 用户服务 (端口8082) │ ├── o2o-order/ # 订单服务 (端口8083) │ ├── o2o-payment/ # 支付服务 (端口8084) │ ├── o2o-review/ # 评价服务 (端口8085) │ ├── o2o-notification/ # 通知服务 (端口8086) │ ├── o2o-admin/ # 系统管理服务 (端口8087) │ ├── o2o-coupon/ # 优惠券服务 (端口8088) │ └── o2o-common/ # 公共模块(core/security/log/swagger) ├── o2o-admin-web/ # 管理端前端 ├── o2o-customer/ # 用户端前端 ├── o2o-worker-web/ # 服务人员端前端(抢单池/我的订单/评价/资料) ├── o2o-org-web/ # 机构管理端前端(订单派单/服务人员/资料) ├── o2o-harmony/ # 鸿蒙端 ├── o2o-shared/ # 前端共享代码 ├── start.bat # 一键启动脚本 ├── stop.bat # 一键停止脚本 ├── LICENSE # MIT开源协议 └── README.md # 项目说明 ``` --- ## 核心功能 ### 认证与登录 - 手机号 + 短信验证码登录 - 微信开放平台OAuth2.0登录 - 微信小程序静默登录 + 授权登录 - 支付宝OAuth2.0登录 - JWT Token无感刷新(AccessToken 2h + RefreshToken 7d) - 第三方账号绑定/解绑 ### 服务浏览与预订 - 服务分类展示 - 服务项目详情 - 服务人员选择 - 服务时段校验 - 多地址管理 ### 订单管理 - 订单状态机:待支付(0) → 待接单(1) → 待服务(2) → 服务中(3) → 待确认(4) → 已完成(5) - 接单/拒单(服务人员) - **智能派单算法**:距离(40%)+评分(30%)+负载(20%)+经验(10%)多维度匹配 - **订单超时自动取消**:30分钟未支付自动取消 - 订单取消与退款 - **服务人员端自助接单**:抢单池 + 我的订单(接单/开始服务/完成服务) - **机构管理端派单**:归属本机构订单 + 未指派公海单,一键指派旗下服务人员 ### 支付与退款 - 微信支付(JSAPI/APP/Native) - 支付宝支付 - 支付幂等性保证(Redis锁) - 支付回调处理 - 全额退款/审核退款 - **家属代付**:子女可为老人代付订单,30分钟有效 ### 平台管理 - 人员/机构入驻审核 - 服务项目管理 - 运营数据仪表盘(含7天趋势、状态分布) - 系统配置管理 - **优惠券系统**:模板管理、用户发放、领取、使用 - **操作审计日志**:关键操作全链路审计 ### 实时通信 - **WebSocket通知推送**:订单状态变更实时推送 - **服务人员实时定位**:GPS坐标上报、客户端订阅、Redis缓存 ### 安全与监控 - **网关JWT认证过滤器**:白名单放行、Header透传 - **IP限流**:Redis滑动窗口120次/分钟 - **敏感操作二次确认**:短信验证码/密码/令牌三重验证 - **APM链路追踪**:Micrometer自定义业务指标 --- ## 快速开始 ### 环境要求 - JDK 17+ - Maven 3.9+ - Node.js 18+ - Redis 7.x ### 一键启动 ```bash # Windows start.bat # 启动完成后访问: # 管理后台: http://localhost:3000 # 用户端H5(默认): http://localhost:5173 # API网关: http://localhost:8080 # Swagger文档: http://localhost:8080/swagger-ui.html # 默认账号: admin / admin123 ``` ### 手动启动 #### 1. 启动后端服务 ```bash cd o2o-server # 编译项目 mvn clean package -DskipTests # 启动各服务(9 个服务:网关 8080 + 8 个业务服务 8081~8088) java -jar o2o-gateway/target/o2o-gateway-1.0.0.jar java -jar o2o-auth/target/o2o-auth-1.0.0.jar java -jar o2o-user/target/o2o-user-1.0.0.jar java -jar o2o-order/target/o2o-order-1.0.0.jar java -jar o2o-payment/target/o2o-payment-1.0.0.jar java -jar o2o-review/target/o2o-review-1.0.0.jar java -jar o2o-notification/target/o2o-notification-1.0.0.jar java -jar o2o-admin/target/o2o-admin-1.0.0.jar java -jar o2o-coupon/target/o2o-coupon-1.0.0.jar ``` #### 2. 启动前端项目 ```bash # 管理后台 cd o2o-admin-web pnpm install pnpm dev # 用户端 cd o2o-customer pnpm install pnpm dev # 服务人员端(端口 3010) cd o2o-worker-web npm install npm run dev # 机构管理端(端口 3020) cd o2o-org-web npm install npm run dev ``` ### 运行测试 ```bash cd tests pip install -r requirements.txt python run_tests.py ``` --- ## 🚀 后端启动详细教程 ### 环境要求 | 组件 | 最低版本 | 推荐版本 | 说明 | |------|----------|----------|------| | JDK | 17 | 17+ | 必须使用JDK 17或更高版本 | | Maven | 3.8.x | 3.9.x | 项目构建工具 | | MySQL | 8.0 | 8.0+ | 关系型数据库(生产环境) | | Redis | 6.0 | 7.0+ | 缓存服务 | | Node.js | 18.x | 20.x | 前端构建(可选) | ### 快速启动(一键启动) Windows 用户可以直接运行项目根目录下的 `start.bat` 脚本: ```bash # 双击运行或在命令行执行 start.bat ``` 该脚本会自动完成以下操作: 1. 检查 Java、Maven、Node.js、Redis 环境 2. 依次启动 9 个后端服务(网关、认证、用户、订单、支付、评价、通知、管理、优惠券) 3. 启动前端服务(管理后台、消费者端) 4. 等待服务就绪后显示访问地址 ### 手动启动(分步启动) #### 步骤1:准备数据库 ```sql -- 创建数据库 CREATE DATABASE o2o_admin DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- 导入初始数据(如果有SQL文件) -- 执行 o2o-server/o2o-admin/src/main/resources/db/o2o_admin.sql ``` #### 步骤2:配置数据库连接 编辑 `o2o-server/o2o-admin/src/main/resources/application.yml`: ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/o2o_admin?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false username: root password: your_password ``` #### 步骤3:配置Redis ```yaml spring: data: redis: host: localhost port: 6379 password: your_redis_password # 如果没有密码则留空 ``` #### 步骤4:启动服务 按以下顺序启动各个服务(每个服务在新终端中运行): ```bash # 1. 启动网关服务 (端口8080) cd o2o-server/o2o-gateway mvn spring-boot:run # 2. 启动认证服务 (端口8081) cd o2o-server/o2o-auth mvn spring-boot:run # 3. 启动用户服务 (端口8082) cd o2o-server/o2o-user mvn spring-boot:run # 4. 启动订单服务 (端口8083) cd o2o-server/o2o-order mvn spring-boot:run # 5. 启动支付服务 (端口8084) cd o2o-server/o2o-payment mvn spring-boot:run # 6. 启动评价服务 (端口8085) cd o2o-server/o2o-review mvn spring-boot:run # 7. 启动通知服务 (端口8086) cd o2o-server/o2o-notification mvn spring-boot:run # 8. 启动系统管理服务 (端口8087) cd o2o-server/o2o-admin mvn spring-boot:run # 9. 启动优惠券服务 (端口8088) cd o2o-server/o2o-coupon mvn spring-boot:run ``` #### 步骤5:验证服务 ```bash # 检查网关健康状态 curl http://localhost:8080/actuator/health # 检查Swagger文档 # 浏览器访问: http://localhost:8080/swagger-ui.html ``` ### Docker 容器化启动 项目支持 Docker Compose 一键部署: ```bash # 构建并启动所有服务 docker compose up -d --build # 查看服务状态 docker compose ps # 查看日志 docker compose logs -f app # 停止服务 docker compose down ``` 详细部署文档请参考:[Docker 部署教程](docs/deployment/docker-deployment-tutorial.md) ### 服务端口说明 | 服务 | 端口 | 说明 | |------|------|------| | o2o-gateway | 8080 | API 网关 | | o2o-auth | 8081 | 认证服务 | | o2o-user | 8082 | 用户服务 | | o2o-order | 8083 | 订单服务 | | o2o-payment | 8084 | 支付服务 | | o2o-review | 8085 | 评价服务 | | o2o-notification | 8086 | 通知服务 | | o2o-admin | 8087 | 系统管理服务 | | o2o-coupon | 8088 | 优惠券服务 | | MySQL | 3306 | 数据库 | | Redis | 6379 | 缓存 | ### 默认账号 | 角色 | 用户名 | 密码 | |------|--------|------| | 超级管理员 | admin | admin123 | ### 常见问题 **Q: 启动报错 `Port already in use`?** A: 端口被占用,请检查对应端口是否已被其他程序占用,或修改 `application.yml` 中的 `server.port` 配置。 **Q: 启动报错 `Cannot connect to database`?** A: 请检查 MySQL 服务是否已启动,以及 `application.yml` 中的数据库连接配置是否正确。 **Q: 启动报错 `Cannot connect to Redis`?** A: 请检查 Redis 服务是否已启动。如果不需要 Redis,可以注释掉相关配置。 **Q: 如何查看日志?** A: 日志文件位于项目根目录下的 `logs/` 文件夹中,每个服务对应一个日志文件。 **Q: 支付服务如何配置?** A: 支付服务支持 Mock 模式(默认开启),开发环境无需真实商户号。生产环境需要配置真实参数,详见 [支付接入教程](docs/integration/payment-integration-tutorial.md)。 --- ## 项目文档 | 文档 | 路径 | 说明 | |------|------|------| | [文档导航](docs/README.md) | `docs/README.md` | 文档总索引、快速导航 | | 架构设计 | [docs/architecture/architecture.md](docs/architecture/architecture.md) | 系统架构、技术选型、部署架构 | | API文档 | [docs/api/api.md](docs/api/api.md) | 接口定义、请求响应格式 | | 开发指南 | [docs/development/development-guide.md](docs/development/development-guide.md) | 环境搭建、开发规范、调试技巧 | | 部署文档 | [docs/deployment/deployment.md](docs/deployment/deployment.md) | 部署流程、环境配置、监控告警 | | 变更日志 | [docs/changelog.md](docs/changelog.md) | 版本历史、变更记录 | | 数据库文档 | [docs/database/database.md](docs/database/database.md) | 表结构设计、索引设计、数据字典 | | 第三方对接 | [docs/integration/third-party-integration.md](docs/integration/third-party-integration.md) | 微信、支付宝、短信、支付对接教程 | | 支付接入教程 | [docs/integration/payment-integration-tutorial.md](docs/integration/payment-integration-tutorial.md) | 微信支付/支付宝支付接入完整教程 | | Docker部署教程 | [docs/deployment/docker-deployment-tutorial.md](docs/deployment/docker-deployment-tutorial.md) | Docker容器化部署完整教程 | --- ## 数据库设计 ### 数据库选型 - **开发环境**:SQLite(默认,无需安装) - **生产环境**:MySQL 8.0+ ### 核心数据表 | 表名 | 说明 | |------|------| | t_customer | 客户表 | | t_worker | 服务人员表 | | t_admin | 管理员表 | | t_order | 订单表 | | t_oauth_binding | OAuth绑定表 | | t_sys_config | 系统配置表 | | t_sys_dict | 数据字典表 | | t_coupon_template | 优惠券模板表 | | t_user_coupon | 用户优惠券表 | | t_family_member | 家庭成员关系表 | | t_proxy_payment | 代付记录表 | | t_audit_log | 审计日志表 | ### 订单状态机 ``` 待支付(0) ──支付──> 已支付(1) ──开始服务──> 服务中(2) ──完成──> 已完成(3) │ │ └──取消──> 已取消(4) └──申请退款──> 已退款(5) ``` --- ## API接口 ### 统一响应格式 ```json { "code": 200, "message": "操作成功", "data": {}, "timestamp": 1724236800000 } ``` ### 核心接口 | 模块 | 接口 | 说明 | |------|------|------| | 认证 | POST /auth/login/phone | 手机号登录 | | 认证 | POST /auth/login/wechat | 微信登录 | | 认证 | POST /auth/token/refresh | 刷新Token | | 用户 | GET /user/current | 获取当前用户信息 | | 订单 | POST /order | 创建订单 | | 订单 | GET /order/{id} | 查询订单详情 | | 支付 | POST /payment/create | 创建支付订单 | | 管理 | POST /admin/login | 管理员登录 | 详细API文档请参考 [docs/api/api.md](docs/api/api.md)。 --- ## 配置说明 ### 数据库配置 ```yaml # application-dev.yml (开发环境 - SQLite) spring: datasource: driver-class-name: org.sqlite.JDBC url: jdbc:sqlite:data/eh_hms.db # application-prod.yml (生产环境 - MySQL) spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/eh_hms username: ${DB_USERNAME} password: ${DB_PASSWORD} ``` ### 第三方平台配置 通过环境变量注入,无需硬编码: ```bash # 微信配置 WECHAT_APP_ID=your_app_id WECHAT_APP_SECRET=your_app_secret # 支付宝配置 ALIPAY_APP_ID=your_app_id ALIPAY_PRIVATE_KEY=your_private_key # 短信配置 SMS_ACCESS_KEY_ID=your_key_id SMS_ACCESS_KEY_SECRET=your_key_secret ``` --- ## 贡献指南 1. Fork 本仓库 2. 创建特性分支 (`git checkout -b feat/xxx`) 3. 提交代码 (`git commit -m 'feat: 添加新功能'`) 4. 推送分支 (`git push origin feat/xxx`) 5. 创建 Pull Request 请确保代码通过所有测试,并遵循项目的编码规范。 --- ## 开源协议 本项目基于 [MIT](LICENSE) 开源协议发布。 --- ## 联系方式 - 项目地址:https://github.com/your-org/eh-hms - 问题反馈:https://github.com/your-org/eh-hms/issues --- > **注意**:本项目为开源项目,仅供学习交流使用。