README.md 4.4 KB

数智健调系统 · Campus Health

面向校园场景的健康管理 Web 应用,以体重管理为核心模块,覆盖记录、目标、标签、异常检测、可视化全链路。 技术栈:Angular 20 + Node.js/Express/TypeORM + MySQL 8 + Python(数据洞察)。

TypeScript Angular Node MySQL Python


项目亮点

  • 完整分层后端:Controller / Service / DTO / Middleware 四层分离,统一响应格式、全局错误处理、Helmet 安全头、限流、gzip、Winston 日志、优雅关闭。
  • 数据模型设计:6 张核心表(用户 / 体重记录 / 目标 / 标签 / 关联表 / 异常日志),含软删除、外键约束、CHECK 约束、复合索引,并配套用户体重统计视图。
  • 可视化前端:Angular Standalone 组件 + ECharts,体重趋势 / 周变化柱状图 / 体脂散点 / 目标进度环,移动端优先。
  • 数据洞察层(analytics/):独立的 Python 分析脚本,基于 pandas + SQL 完成:
    • 合成数据生成器(180 天减重轨迹 + 标签事件 + 异常点,可复现)
    • 空腹 vs 餐后称重偏差分析
    • 标签事件前后减重速度对比
    • 自动异常扫描(周变化 >2kg、体重降但体脂升)
  • AI 集成:DeepSeek 对话服务,封装为共享 Modal 组件。

目录结构

zrd-nb666/
├── campus_health_app/
│   ├── backend/            # Express + TypeORM 后端
│   │   ├── database/       # init.sql / schema.sql / seed.sql
│   │   └── src/
│   │       ├── config/        # 数据库配置
│   │       ├── controllers/   # 路由处理
│   │       ├── services/      # 业务逻辑(统计/目标/标签)
│   │       ├── entities/      # TypeORM 实体
│   │       ├── dto/          # 请求校验
│   │       └── middlewares/   # 鉴权 / 错误 / 日志
│   ├── frontend/campus-health-app/   # Angular 20 前端
│   │   └── src/app/
│   │       ├── modules/       # weight / diet / exercise / dashboard / monitoring / ...
│   │       ├── shared/       # 通用组件(Modal / AI Chat / CalendarGrid)
│   │       └── services/     # HTTP 与 DeepSeek 服务
│   ├── analytics/          # ⭐ Python 数据分析
│   │   └── analyze.py       # generate / report 两个子命令
│   └── docs/               # 架构图、ER 图、WBS、部署图(HTML)
└── requirements.txt        # Python 依赖

本地启动

1. 数据库

# 启动 MySQL 后
mysql -u root -p < campus_health_app/backend/database/init.sql
mysql -u root -p campus_health < campus_health_app/backend/database/schema.sql

2. 后端

cd campus_health_app/backend
npm install
cp .env.example .env   # 填入 DB_PASSWORD
npm run dev            # http://localhost:3000/api

3. 前端

cd campus_health_app/frontend/campus-health-app
npm install
npm start              # http://localhost:4200

4. 数据分析(Python)

pip install -r requirements.txt

# 让脚本能连上 MySQL
$env:DB_PASSWORD = "你的MySQL密码"   # PowerShell

# 生成 180 天合成数据
python campus_health_app/analytics/analyze.py generate

# 跑分析报告(终端表格 + output/weight_trend.png)
python campus_health_app/analytics/analyze.py report

数据模型

users 1───n weight_records n───n tags
              │
              ├── 1 weight_goals  (每用户当前目标)
              └── n anomaly_logs   (异常事件记录)

完整 ER 图见 docs/diagrams/report-database-er-new.html。

API 一览

Method Path 说明
GET /api/weight/records 体重记录列表(按日期/条件/标签筛选 + 分页)
POST /api/weight/records 新增记录
PUT /api/weight/records/:id 更新记录
DELETE /api/weight/records/:id 软删除
GET/POST/PUT /api/weight/goal 目标管理
GET/POST /api/weight/tags 标签
GET /api/weight/stats 统计汇总(当前体重、周均变化、目标 ETA)

License

MIT