📖 项目介绍
家庭健康记录系统是一个功能完善的家庭健康管理平台后端服务,采用 Laravel 12 框架构建,专门为微信小程序提供 RESTful API 接口。系统支持多家庭成员管理、健康数据追踪、AI 智能分析、用药提醒等核心功能,帮助家庭更好地管理成员健康状况。
项目地址:
✨ 核心功能
-
👨👩👧👦 多成员管理 – 支持创建多个家庭,每个家庭可添加多位成员(老人、成人、儿童) -
📊 健康指标监测 – 血压、血糖、心率、体温、体重等多项指标的录入与趋势分析 -
🤖 AI 智能分析 – 基于健康数据的智能分析、风险预测和个性化建议 -
⏰ 健康提醒 – 用药提醒、体检提醒、运动提醒、测量提醒等多维度提醒功能 -
🏥 完整医疗档案 – 体检报告、病史记录、用药记录、疫苗接种记录全生命周期管理 -
🏃 生活习惯追踪 – 睡眠质量、每日步数、饮水量、运动情况等生活方式记录 -
🚨 异常告警 – 健康指标超标自动告警,及时提醒用户关注异常情况 -
💬 微信登录 – 支持微信小程序一键登录(OpenID/UnionID),无需注册 -
🔐 权限控制 – RBAC 角色权限管理,保障家庭成员数据隐私安全 -
📱 移动端优化 – API 响应格式针对小程序优化,支持分页加载和离线缓存
🛠️ 技术栈
|
|
|
|
|---|---|---|
| 后端框架 |
|
|
| 编程语言 |
|
|
| API 认证 |
|
|
| 数据库 |
|
|
| 队列系统 |
|
|
| 缓存系统 |
|
|
| 前端构建 |
|
|
| CSS 框架 |
|
|
📋 环境要求
-
PHP >= 8.2 -
Composer >= 2.0 -
Node.js >= 18.x -
NPM >= 9.x -
MySQL 5.7+ 或 SQLite 3.x -
Git
🚀 快速开始
1️⃣ 克隆项目
git clone https://gitee.com/your-username/family-health.git
cd family-health
2️⃣ 安装依赖
# 安装 PHP 依赖
composer install
# 安装前端依赖
npm install
💡 提示: 如果下载速度慢,可以使用国内镜像源:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
npm config set registry https://registry.npmmirror.com
3️⃣ 配置环境变量
# 复制环境配置文件
cp .env.example .env
# 生成应用密钥
php artisan key:generate
编辑 .env 文件,修改以下配置:
# 应用配置
APP_NAME=家庭健康记录系统
APP_ENV=local
APP_DEBUG=true
APP_URL=http://localhost:8000
# 数据库配置(二选一)
# 方式一:MySQL(推荐生产环境)
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=family_health
DB_USERNAME=root
DB_PASSWORD=your_password
# 方式二:SQLite(适合开发测试)
DB_CONNECTION=sqlite
# DB_DATABASE=/absolute/path/to/database/database.sqlite
# 微信小程序配置(可选,不配置会使用模拟登录)
WECHAT_MINI_APP_ID=wx_your_app_id
WECHAT_MINI_APP_SECRET=your_app_secret
# 队列配置(建议使用 database)
QUEUE_CONNECTION=database
# 缓存配置
CACHE_STORE=database
4️⃣ 初始化数据库
方式一:使用 Laravel Migration(推荐)
# 执行数据库迁移
php artisan migrate
# 填充示例数据(包含 343+ 条测试数据)
php artisan db:seed
方式二:导入 SQL 文件
# 先创建数据库
mysql -u root -p -e "CREATE DATABASE family_health CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
# 导入表结构
mysql -u root -p family_health < database/family_health_database.sql
# 导入示例数据
mysql -u root -p family_health < database/family_health_sample_data.sql
5️⃣ 启动服务
开发模式(推荐)
一键启动所有服务(API + 队列 + 日志监控 + Vite):
composer run dev
单独启动
# 启动 API 服务
php artisan serve
# 启动队列监听(后台运行)
php artisan queue:listen –tries=3 –timeout=0 &
# 启动 Vite 开发服务器(如需前端资源)
npm run dev
访问 http://localhost:8000 即可看到应用。
🧪 快速测试 API
获取访问令牌
curl -X POST http://localhost:8000/api/v1/auth/dev-login \
-H "Content-Type: application/json" \
-d '{"user_id": 1}'
响应示例:
{
"code": 0,
"message": "登录成功",
"data": {
"token": "1|xxxxxxxxxxxxx",
"user": {...}
}
}
获取仪表盘数据
curl -X GET http://localhost:8000/api/v1/dashboard \
-H "Authorization: Bearer 1|xxxxxxxxxxxxx"
查看健康指标列表
curl -X GET http://localhost:8000/api/v1/health-indicators \
-H "Authorization: Bearer 1|xxxxxxxxxxxxx"
🗄️ 数据库说明
数据表概览
系统共包含 30+ 张数据表,按功能模块分类如下:
👤 用户与权限模块(5张表)
|
|
|
|
|---|---|---|
users |
|
|
roles |
|
|
permissions |
|
|
role_user |
|
|
permission_role |
|
|
👨👩👧👦 家庭与成员模块(3张表)
|
|
|
|
|---|---|---|
families |
|
|
family_members |
|
|
relationships |
|
|
📊 健康核心数据模块(5张表)
|
|
|
|
|---|---|---|
health_indicators |
|
|
health_records |
|
|
medical_examinations |
|
|
medical_histories |
|
|
medications |
|
|
📝 健康扩展功能模块(7张表)
|
|
|
|
|---|---|---|
vaccination_records |
|
|
health_reminders |
|
|
lifestyle_records |
|
|
health_diaries |
|
|
health_alerts |
|
|
health_record_shares |
|
|
device_bindings |
|
|
🤖 AI 功能模块(6张表)
|
|
|
|
|---|---|---|
ai_health_analyses |
|
|
ai_health_predictions |
|
|
ai_health_recommendations |
|
|
ai_conversation_logs |
|
|
ai_health_reports |
|
|
ai_data_validations |
|
|
⚙️ 系统基础表(7张表)
password_reset_tokens、sessions、cache、cache_locks、jobs、job_batches、failed_jobs、personal_access_tokens
示例数据说明
系统预置了丰富的示例数据,总计 343+ 条记录,涵盖:
-
✅ 12 个用户 – 包含完整的微信登录信息 -
✅ 8 个家庭 – 覆盖老中青三代不同家庭结构 -
✅ 27 个家庭成员 – 每个成员都有完整健康档案 -
✅ 120 条健康指标记录 – 血压(20)、血糖(20)、心率(10)、体重(10)、体温(10)等 -
✅ 15 条体检记录 – 主要家庭成员的年度体检数据 -
✅ 15 条病史记录 – 高血压、糖尿病等慢性病记录 -
✅ 20 条用药记录 – 降压药、降糖药、维生素等 -
✅ 50 条生活习惯记录 – 连续多天的睡眠、步数、饮水数据 -
✅ 30 条健康日记 – 日常健康状态主观感受 -
✅ 20 条健康告警 – 血压超标、血糖异常等告警 -
✅ 16 条 AI 数据 – 分析、预测、建议、报告、对话记录
详细数据统计请查看 数据优化总结
📡 API 接口文档
基本信息
-
基础路径: /api/v1 -
认证方式: Bearer Token (Laravel Sanctum) -
请求头: Authorization: Bearer {token} -
字符编码: UTF-8 -
响应格式: JSON
统一响应格式
成功响应
{
"code": 0,
"message": "success",
"data": {
// 业务数据
}
}
错误响应
{
"code": 40001,
"message": "未授权访问",
"data": null
}
分页响应
{
"code": 0,
"message": "success",
"data": [
// 数据列表
],
"meta": {
"current_page": 1,
"last_page": 10,
"per_page": 15,
"total": 150,
"has_more": true
}
}
接口模块总览
🔐 认证模块 /api/v1/auth
|
|
|
|
|
|---|---|---|---|
|
|
/wechat-login |
|
|
|
|
/dev-login |
|
|
|
|
/me |
|
|
|
|
/profile |
|
|
|
|
/logout |
|
|
微信登录示例
请求:
POST /api/v1/auth/wechat-login
Content-Type: application/json
{
“code”: “wx_login_code_from_miniprogram”,
“nickname”: “张三”,
“avatar”: “https://example.com/avatar.jpg”
}
响应:
{
"code": 0,
"message": "登录成功",
"data": {
"token": "1|xxxxxxxxxxxxx",
"user": {
"id": 1,
"name": "张三",
"avatar": "https://example.com/avatar.jpg",
"wechat_openid": "oXXXXXX"
}
}
}
💡 提示: 本地开发时如未配置
WECHAT_MINI_APP_ID,系统会使用code生成模拟 openid,方便调试。
📊 仪表盘 /api/v1/dashboard
|
|
|
|
|---|---|---|
|
|
/dashboard |
|
返回数据包含:
-
家庭成员数量 -
今日健康记录数 -
活跃告警列表 -
待完成提醒 -
最近健康记录
👨👩👧👦 家庭与成员
家庭管理
|
|
|
|
|---|---|---|
|
|
/families |
|
|
|
/families |
|
|
|
/families/{id} |
|
|
|
/families/{id} |
|
|
|
/families/{id} |
|
成员管理
|
|
|
|
|---|---|---|
|
|
/members |
?family_id=1 筛选) |
|
|
/members |
|
|
|
/members/{id} |
|
|
|
/members/{id} |
|
|
|
/members/{id} |
|
📈 健康记录
健康指标
|
|
|
|
|---|---|---|
|
|
/health-indicators |
|
|
|
/health-indicators/{id} |
|
查询参数:
-
common_only=true– 仅返回常用指标 -
category=blood– 按分类筛选 -
quick_entry_only=true– 仅返回快捷录入指标
健康记录
|
|
|
|
|---|---|---|
|
|
/health-records |
|
|
|
/health-records |
|
|
|
/health-records/{id} |
|
|
|
/health-records/{id} |
|
|
|
/health-records/trends |
|
查询参数:
-
-
family_member_id=1– 按成员筛选 -
health_indicator_id=1– 按指标筛选 -
start_date=2024-01-01– 开始日期 -
end_date=2024-12-31– 结束日期
-
趋势图参数:
-
family_member_id=1– 必填 -
health_indicator_id=1– 必填 -
days=30– 天数(默认30天)
🏥 医疗档案
|
|
|
|
|---|---|---|
|
|
/medical-examinations |
|
|
|
/medical-histories |
?status=active 筛选 |
|
|
/medications |
?active_only=true |
|
|
/vaccination-records |
|
⏰ 健康提醒与生活
健康提醒
|
|
|
|
|---|---|---|
|
|
/health-reminders |
|
|
|
/health-reminders |
|
|
|
/health-reminders/{id}/complete |
|
|
|
/health-reminders/{id} |
|
生活习惯
|
|
|
|
|---|---|---|
|
|
/lifestyle-records |
|
|
|
/lifestyle-records |
|
健康日记
|
|
|
|
|---|---|---|
|
|
/health-diaries |
|
|
|
/health-diaries |
|
🚨 告警与设备
健康告警
|
|
|
|
|---|---|---|
|
|
/health-alerts |
|
|
|
/health-alerts/{id}/resolve |
|
|
|
/health-alerts/{id}/dismiss |
|
设备绑定
|
|
|
|
|---|---|---|
|
|
/devices |
|
|
|
/devices |
|
|
|
/devices/{id} |
|
|
|
/devices/{id} |
|
🤖 AI 功能
|
|
|
|
|---|---|---|
|
|
/ai/analyses |
|
|
|
/ai/recommendations |
|
|
|
/ai/recommendations/{id}/feedback |
|
|
|
/ai/reports |
|
|
|
/ai/reports/{id} |
|
|
|
/ai/chat |
|
|
|
/ai/predict |
|
AI 对话示例
POST /api/v1/ai/chat
{
"message": "我最近的血压偏高,应该注意什么?",
"family_member_id": 1
}
📚 参考数据
|
|
|
|
|---|---|---|
|
|
/relationships |
|
完整 API 文档请查看 API.md
🧪 测试
# 运行所有测试
php artisan test
# 运行单元测试
php artisan test –testsuite=Unit
# 运行功能测试
php artisan test –testsuite=Feature
# 运行指定测试文件
php artisan test tests/Feature/Api/AuthTest.php
📁 项目结构
Family/
├── app/ # 应用核心代码
│ ├── Http/
│ │ ├── Controllers/
│ │ │ └── Api/V1/ # API v1 控制器(18个)
│ │ ├── Resources/Api/ # API 资源转换器(24个)
│ │ └── Traits/ # 复用 Trait
│ ├── Models/ # Eloquent 模型(27个)
│ ├── Services/ # 业务逻辑服务层
│ │ ├── Ai/ # AI 相关服务(4个)
│ │ ├── Auth/ # 认证服务
│ │ ├── Family/ # 家庭管理服务
│ │ └── Health/ # 健康管理服务(2个)
│ └── Providers/ # 服务提供者
│
├── bootstrap/ # 框架引导文件
├── config/ # 配置文件
│ ├── ai.php # AI 服务配置
│ ├── wechat.php # 微信配置
│ ├── sanctum.php # Sanctum 认证配置
│ └── ... # 其他 Laravel 配置
│
├── database/ # 数据库相关文件
│ ├── migrations/ # 数据库迁移文件(37个)
│ ├── seeders/ # 数据填充器(4个)
│ ├── scripts/ # 数据库优化脚本(3个)
│ ├── factories/ # 模型工厂
│ ├── family_health_database.sql # 完整数据库结构 SQL
│ └── family_health_sample_data.sql # 示例数据 SQL
│
├── docs/ # 项目文档
│ ├── API.md # API 详细文档
│ └── DATA_OPTIMIZATION_SUMMARY.md # 数据优化总结
│
├── routes/ # 路由定义
│ ├── api.php # API 路由(81行)
│ ├── web.php # Web 路由
│ └── console.php # 命令行路由
│
├── resources/ # 视图和资源文件
│ ├── css/ # CSS 源文件
│ ├── js/ # JavaScript 源文件
│ └── views/ # Blade 模板
│
├── storage/ # 存储目录
│ ├── app/ # 应用存储
│ ├── framework/ # 框架存储
│ └── logs/ # 日志文件
│
├── tests/ # 测试文件
│ ├── Feature/Api/ # API 功能测试
│ └── Unit/Services/Ai/ # AI 服务单元测试
│
├── public/ # Web 根目录
├── vendor/ # Composer 依赖
├── artisan # Laravel 命令行工具
├── composer.json # PHP 依赖配置
├── package.json # Node.js 依赖配置
└── vite.config.js # Vite 构建配置
⚙️ 配置说明
关键环境变量
|
|
|
|
|
|---|---|---|---|
APP_NAME |
|
|
|
APP_ENV |
|
|
|
APP_DEBUG |
|
|
|
DB_CONNECTION |
|
|
|
WECHAT_MINI_APP_ID |
|
|
|
WECHAT_MINI_APP_SECRET |
|
|
|
QUEUE_CONNECTION |
|
|
|
CACHE_STORE |
|
|
|
队列配置
对于 AI 分析、健康报告生成等长时任务,建议使用队列异步处理:
# 启动队列工作进程
php artisan queue:work --tries=3 --timeout=0
# 后台运行
nohup php artisan queue:work –tries=3 –timeout=0 > /dev/null 2>&1 &
# 查看队列状态
php artisan queue:monitor
💡 提示: 生产环境建议使用 Redis 作为队列驱动,性能更佳。
📱 微信小程序适配
核心优化点
✅ 响应格式统一 – 采用 code/message/data 标准格式,便于小程序端统一处理
✅ 分页优化 – 返回 has_more 字段,支持下拉加载更多,减少内存占用
✅ 性能优化 – Dashboard 数据 5 分钟缓存,减少数据库查询次数
✅ 数据传输优化 – 精简冗余字段,降低网络传输量,提升加载速度
✅ 图片上传支持 – 支持头像、体检报告等图片上传至服务器
✅ 离线缓存友好 – 数据结构设计支持小程序本地缓存策略
典型应用场景
|
|
|
|
|---|---|---|
|
|
|
GET /dashboard |
|
|
|
GET/POST /health-records |
|
|
|
GET/POST /health-reminders |
|
|
|
GET /medical-examinations |
|
|
|
POST /ai/chat |
|
|
|
GET/POST /members |
小程序端调用示例
// 获取访问令牌
wx.request({
url: 'https://your-domain.com/api/v1/auth/wechat-login',
method: 'POST',
data: {
code: res.code, // wx.login 获取的 code
nickname: userInfo.nickName,
avatar: userInfo.avatarUrl
},
success: (res) => {
if (res.data.code === 0) {
// 保存 token
wx.setStorageSync('token', res.data.data.token)
}
}
})
// 获取仪表盘数据
const token = wx.getStorageSync(‘token’)
wx.request({
url: ‘https://your-domain.com/api/v1/dashboard’,
header: {
‘Authorization’: ‘Bearer ‘ + token
},
success: (res) => {
if (res.data.code === 0) {
console.log(‘仪表盘数据:’, res.data.data)
}
}
})
🔐 安全与权限
RBAC 权限系统
系统实现了完整的基于角色的访问控制(Role-Based Access Control):
预设角色
|
|
|
|
|---|---|---|
|
|
admin |
|
|
|
doctor |
|
|
|
family_member |
|
权限隔离
-
✅ 家庭成员只能查看自己所在家庭的成员数据 -
✅ 敏感健康数据需要相应权限才能访问 -
✅ 健康记录分享功能支持临时授权给医生或其他家庭成员
API 认证机制
-
使用 Laravel Sanctum 进行令牌认证 -
支持个人访问令牌(Personal Access Tokens) -
令牌可设置过期时间和权限范围(abilities) -
每次请求需在 Header 中携带 Authorization: Bearer {token}
创建令牌示例
$token = $user->createToken('my-app-token', ['health-records:view'])->plainTextToken;
⚡ 性能优化
已实施的优化措施
✅ 数据库索引优化 – 为常用查询字段添加复合索引,提升查询效率
✅ Eager Loading – 避免 N+1 查询问题,减少数据库查询次数
✅ 缓存策略 – Dashboard 数据 5 分钟缓存,健康指标列表缓存
✅ 队列异步处理 – AI 分析、报告生成长时任务使用队列异步执行
✅ 软删除机制 – 使用 Laravel 软删除,避免物理删除导致的数据丢失
✅ SQL 优化 – 遵循 Laravel 最佳实践,优化查询语句
性能建议
🚀 Redis 缓存 – 对高频访问数据使用 Redis 缓存,进一步提升响应速度
🚀 数据归档 – 定期归档历史数据(如一年前的健康记录),保持主表轻量化
🚀 CDN 加速 – 静态资源(头像、体检报告图片)使用 CDN 分发
🚀 API 限流 – 实施 API 请求频率限制,防止恶意请求
🚀 监控告警 – 启用 Laravel Telescope 或 Sentry 进行性能监控和错误追踪
数据库优化脚本
项目提供了数据库优化脚本:
# 统计各表数据量
php database/scripts/count_rows.php
# 导出示例 SQL(用于测试)
php database/scripts/export_sample_sql.php
# 优化 SQL 查询
php database/scripts/optimize_sql.php
看完不过瘾,那就自己发一篇吧! 












![表情[nanguo]-寻找资源网](http://www.seekresource.com/wp-content/themes/zibll/img/smilies/nanguo.gif)
![表情[haobang]-寻找资源网](http://www.seekresource.com/wp-content/themes/zibll/img/smilies/haobang.gif)
![表情[shuai]-寻找资源网](http://www.seekresource.com/wp-content/themes/zibll/img/smilies/shuai.gif)
![表情[deyi]-寻找资源网](http://www.seekresource.com/wp-content/themes/zibll/img/smilies/deyi.gif)
![表情[chi]-寻找资源网](http://www.seekresource.com/wp-content/themes/zibll/img/smilies/chi.gif)



暂无评论内容