# 数智健调系统 · Campus Health > 面向校园场景的健康管理 Web 应用,以**体重管理**为核心模块,覆盖记录、目标、标签、异常检测、可视化全链路。 > 技术栈:Angular 20 + Node.js/Express/TypeORM + MySQL 8 + Python(数据洞察)。 ![TypeScript](https://img.shields.io/badge/TypeScript-5.3-blue) ![Angular](https://img.shields.io/badge/Angular-20-red) ![Node](https://img.shields.io/badge/Node-18-green) ![MySQL](https://img.shields.io/badge/MySQL-8.0-orange) ![Python](https://img.shields.io/badge/Python-3.14-yellow) --- ## 项目亮点 - **完整分层后端**: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. 数据库 ```bash # 启动 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. 后端 ```bash cd campus_health_app/backend npm install cp .env.example .env # 填入 DB_PASSWORD npm run dev # http://localhost:3000/api ``` ### 3. 前端 ```bash cd campus_health_app/frontend/campus-health-app npm install npm start # http://localhost:4200 ``` ### 4. 数据分析(Python) ```bash 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`](campus_health_app/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