diff --git a/client-deployment/custom-config.env b/client-deployment/custom-config.env index 7eff9c8..1c82d60 100644 --- a/client-deployment/custom-config.env +++ b/client-deployment/custom-config.env @@ -15,7 +15,7 @@ SERVER_IP=192.168.1.83 # 各服务外部端口配置 MYSQL_EXTERNAL_PORT=3306 REDIS_EXTERNAL_PORT=6379 -LJWX_BOOT_EXTERNAL_PORT=9998 +LJWX_BOOT_EXTERNAL_PORT=9999 LJWX_BIGSCREEN_EXTERNAL_PORT=8001 LJWX_ADMIN_EXTERNAL_PORT=8088 diff --git a/client-deployment/docs/deploy-client-usage-guide.md b/client-deployment/docs/deploy-client-usage-guide.md new file mode 100644 index 0000000..8ec79ca --- /dev/null +++ b/client-deployment/docs/deploy-client-usage-guide.md @@ -0,0 +1,322 @@ +# 智能穿戴系统客户现场部署使用说明 + +## 概述 + +`deploy-client.sh` 是智能穿戴系统的客户现场部署脚本,支持使用预构建镜像进行快速部署,采用Docker命名卷实现数据持久化。该脚本提供完整的自动化部署流程,包括配置验证、镜像管理、服务启动、定制化配置等功能。 + +## 核心特性 + +- ✅ **智能部署模式**: 支持在线/离线两种部署模式 +- ✅ **数据持久化**: 使用Docker命名卷确保数据安全 +- ✅ **配置验证**: 自动验证配置文件一致性 +- ✅ **智能备份**: 升级前自动备份现有数据 +- ✅ **定制化支持**: 自动应用客户定制配置 +- ✅ **健康检查**: 完整的服务启动状态监控 +- ✅ **跨平台兼容**: 支持CentOS等多种Linux发行版 + +## 系统架构 + +### 服务组件 +- **ljwx-mysql**: 数据库服务 (端口: 3306) +- **ljwx-redis**: 缓存服务 (端口: 6379) +- **ljwx-boot**: 后端API服务 (端口: 9998) +- **ljwx-bigscreen**: 数据大屏服务 (端口: 8001) +- **ljwx-admin**: 管理端服务 (端口: 8088) + +### 数据持久化 +- `client-deployment_mysql_data`: MySQL数据卷 +- `client-deployment_redis_data`: Redis数据卷 +- `client-deployment_ljwx_boot_data`: 后端数据卷 +- `client-deployment_ljwx_bigscreen_data`: 大屏数据卷 + +## 使用方法 + +### 基本语法 +```bash +./deploy-client.sh [配置文件名] [offline] +``` + +### 部署模式 + +#### 在线部署 (推荐) +```bash +# 使用默认配置文件 +./deploy-client.sh + +# 使用指定配置文件 +./deploy-client.sh my-config.env +``` + +#### 离线部署 +```bash +# 离线模式 + 默认配置 +./deploy-client.sh offline + +# 离线模式 + 指定配置 +./deploy-client.sh my-config.env offline +``` + +## 部署前准备 + +### 1. 环境要求 +- Docker Engine (已安装并运行) +- docker-compose (已安装) +- 网络连接 (在线模式需要) + +### 2. 必需文件检查 +``` +client-deployment/ +├── deploy-client.sh # 主部署脚本 +├── custom-config.env # 配置文件 +├── custom-config.py # Python自定义配置 +├── custom-admin-config.js # 前端自定义配置 +├── docker-compose.yml # Docker编排文件 +├── client-data.sql # 客户数据(首次部署) +└── custom-assets/ # 自定义资源目录 + └── logo.svg # 自定义logo文件 +``` + +### 3. 配置文件准备 + +复制并编辑配置文件: +```bash +cp custom-config.env my-client-config.env +``` + +关键配置项: +```env +# 服务器地址 +SERVER_IP=192.168.1.83 + +# 端口配置 +LJWX_ADMIN_EXTERNAL_PORT=8088 +LJWX_BIGSCREEN_EXTERNAL_PORT=8001 +LJWX_BOOT_EXTERNAL_PORT=9998 + +# 定制化配置 +VITE_APP_TITLE=客户定制管理平台 +BIGSCREEN_TITLE=客户数据大屏 +COMPANY_NAME=客户公司名称 +VITE_CUSTOM_LOGO=true + +# 镜像版本 +LJWX_ADMIN_VERSION=2.0.1 +LJWX_BIGSCREEN_VERSION=2.0.1 +LJWX_BOOT_VERSION=2.0.1 +``` + +## 部署流程详解 + +### 第一阶段:环境检查与配置验证 +1. **系统兼容性检查**: 自动检测CentOS并处理文件格式 +2. **依赖检查**: 验证Docker和docker-compose安装 +3. **配置文件验证**: 加载并验证配置文件格式 +4. **必需文件检查**: 确认所有必需的配置文件存在 + +### 第二阶段:数据策略选择 +根据现有数据卷情况自动判断部署类型: + +#### 首次部署 +- 创建新的Docker命名卷 +- 使用 `client-data.sql` 进行数据初始化 +- 无需备份操作 + +#### 升级部署 +- 检测现有命名卷 +- 提供备份策略选择: + 1. **在线备份**: 完整SQL导出 (推荐) + 2. **离线卷备份**: 直接备份Docker卷 + 3. **跳过备份**: 风险自担 + 4. **退出部署**: 手动处理 + +### 第三阶段:镜像管理 +1. **镜像版本检查**: 验证配置文件中的镜像版本 +2. **本地镜像检查**: 扫描本地已有镜像 +3. **镜像拉取策略**: + - 在线模式:自动登录阿里云镜像仓库并拉取缺失镜像 + - 离线模式:仅使用本地镜像,缺失时给出警告 + +### 第四阶段:服务部署 +1. **数据初始化配置**: 首次部署时动态添加数据初始化挂载 +2. **容器清理**: 清理可能冲突的旧容器 +3. **目录权限设置**: 确保日志和备份目录权限正确 +4. **服务启动**: 根据部署模式启动所有服务 +5. **启动等待**: 等待服务完全启动 + +### 第五阶段:健康检查 +对每个服务进行健康状态验证: +- **ljwx-boot**: 检查 `/actuator/health` 端点 +- **ljwx-bigscreen**: 检查 `/health` 端点 +- **ljwx-admin**: 检查首页访问 +- 超时时间:每个服务120秒 + +### 第六阶段:定制化配置 +1. **大屏URL更新**: 替换前端中的大屏访问地址 +2. **浏览器缓存清理**: 清除可能的缓存问题 +3. **自定义Logo应用**: + - 检查 `VITE_CUSTOM_LOGO=true` 配置 + - 调用 `customize-admin-logo.sh` 进行logo替换 +4. **挂载配置验证**: 验证容器挂载是否正确 + +## 定制化功能详解 + +### 自定义Logo功能 +脚本支持自动替换管理端Logo: + +1. **启用条件**: `VITE_CUSTOM_LOGO=true` +2. **支持格式**: png, jpg, jpeg, svg +3. **文件位置**: `custom-assets/logo.*` 或包含"logo"的图片文件 +4. **实现机制**: + - 复制logo文件到容器 `/usr/share/nginx/html/logo-custom.*` + - 生成JavaScript配置文件 + - 在index.html中注入配置脚本 + - 重新加载nginx配置 + +### 大屏URL配置 +自动更新前端应用中的大屏跳转链接: +- 读取 `VITE_BIGSCREEN_URL` 配置 +- 在ljwx-admin容器中替换相关配置 +- 确保管理端可正确跳转到数据大屏 + +## 错误处理和故障排除 + +### 常见问题解决 + +#### 1. Docker登录失败 +```bash +❌ Docker登录失败,请检查用户名和密码 +``` +**解决方案**: 检查网络连接和镜像仓库访问权限 + +#### 2. 镜像拉取失败 +```bash +❌ 警告: 无法拉取 xxx 镜像 +``` +**解决方案**: +- 检查网络连接 +- 确认镜像版本号正确 +- 考虑使用离线部署模式 + +#### 3. 服务启动超时 +```bash +⚠️ 后端服务启动超时,请检查日志 +``` +**解决方案**: +```bash +# 查看详细日志 +docker-compose logs ljwx-boot + +# 检查容器状态 +docker ps -a + +# 查看文件日志 +tail -f logs/ljwx-boot/*.log +``` + +#### 4. 端口冲突 +确保以下端口未被占用: +- 3306 (MySQL) +- 6379 (Redis) +- 9998 (后端API) +- 8001 (数据大屏) +- 8088 (管理端) + +### 日志查看工具 + +#### 实时日志监控 +```bash +# 使用内置日志查看器(推荐) +./logs-viewer.sh + +# 查看特定服务日志 +docker-compose logs -f ljwx-boot +docker-compose logs -f ljwx-admin + +# 查看文件日志 +tail -f logs/ljwx-boot/*.log +tail -f logs/mysql/slow.log +``` + +#### 日志目录结构 +``` +logs/ +├── mysql/ # MySQL数据库日志 +├── redis/ # Redis缓存日志 +├── ljwx-boot/ # 后端服务日志 +├── ljwx-bigscreen/ # 数据大屏日志 +└── ljwx-admin/ # 管理端日志 +``` + +## 部署后管理 + +### 服务管理命令 +```bash +# 查看服务状态 +docker-compose ps + +# 重启特定服务 +docker-compose restart ljwx-admin + +# 停止所有服务(保留数据) +docker-compose down + +# 完全清理(⚠️删除数据卷) +docker-compose down -v +``` + +### 数据备份恢复 +```bash +# 在线备份(推荐) +./auto-backup.sh + +# 数据恢复 +./restore-backup.sh + +# 跨平台备份 +./auto-backup-crossplatform.sh +``` + +### 访问地址 +部署完成后的访问地址: +- **管理端**: `http://服务器IP:8088` +- **数据大屏**: `http://服务器IP:8001` +- **后端API**: `http://服务器IP:9998` + +默认登录账号:`admin / 123456` + +## 最佳实践建议 + +### 1. 部署前准备 +- 备份现有数据和配置 +- 确认服务器资源充足 (CPU: 4核, 内存: 8GB, 磁盘: 50GB) +- 准备好客户定制化资源文件 + +### 2. 配置管理 +- 为每个客户创建独立的配置文件 +- 定期备份配置文件到版本控制系统 +- 记录客户特殊需求和配置变更 + +### 3. 运维监控 +- 定期检查服务健康状态 +- 监控磁盘空间使用情况 +- 设置定时备份任务 + +### 4. 安全注意事项 +- 修改默认管理员密码 +- 配置防火墙规则限制端口访问 +- 定期更新系统和Docker版本 + +## 技术支持 + +如在部署过程中遇到问题,请: + +1. 查看详细错误日志 +2. 检查系统资源使用情况 +3. 参考故障排除章节 +4. 联系技术支持团队 + +--- + +**文档版本**: v2.0.1 +**更新时间**: 2025-09-06 +**适用版本**: deploy-client.sh v2.0+ \ No newline at end of file diff --git a/docs/健康数据分析算法设计方案.md b/docs/健康数据分析算法设计方案.md new file mode 100644 index 0000000..71a45b9 --- /dev/null +++ b/docs/健康数据分析算法设计方案.md @@ -0,0 +1,688 @@ +# 灵境万象健康数据分析算法设计方案 + +## 1. 概述 + +本文档详细描述了灵境万象(LJWX)健康监控系统中的核心算法设计,包括健康趋势分析、健康预测和健康画像三大核心功能的技术实现方案。 + +### 1.1 系统版本信息 +- **版本**: v2.0.1 +- **创建日期**: 2025年9月 +- **更新日期**: 2025年9月 +- **适用范围**: LJWX BigScreen个人健康监控大屏 + +### 1.2 核心算法模块 +1. **健康数据趋势分析算法** - 基于时间序列分析的健康指标趋势识别 +2. **健康状态预测算法** - 使用线性回归的健康状态预测模型 +3. **健康画像生成算法** - 综合评分与个性化建议生成系统 + +--- + +## 2. 健康数据趋势分析算法 + +### 2.1 算法概述 + +健康数据趋势分析算法(`calculate_health_trends`)是一个综合性的时间序列分析系统,用于识别用户健康指标的变化趋势、异常检测和统计分析。 + +### 2.2 数据预处理模块 + +#### 2.2.1 数据清洗算法 +```python +def clean_data(values): + """ + 四分位数异常值检测算法 + - 移除None值和零值 + - 使用IQR方法检测异常值 + - 过滤离群点数据 + """ + # 1. 基础数据过滤 + clean_values = [v for v in values if v is not None and v > 0] + + # 2. 四分位数计算 + q1 = clean_values[len(clean_values)//4] + q3 = clean_values[3*len(clean_values)//4] + iqr = q3 - q1 + + # 3. 异常值边界计算 + lower_bound = q1 - 1.5 * iqr + upper_bound = q3 + 1.5 * iqr + + # 4. 异常值过滤 + return [v for v in clean_values if lower_bound <= v <= upper_bound] +``` + +**关键特性**: +- **鲁棒性**: 使用四分位数方法,对极值不敏感 +- **自适应**: 根据数据分布自动调整异常值阈值 +- **效率**: O(n)时间复杂度 + +### 2.3 时间序列格式化 + +#### 2.3.1 ECharts兼容格式转换 +```python +def format_time_series(timestamps, values, default_value=0): + """ + 将原始数据转换为ECharts时间序列格式 + 格式: [[timestamp, value], [timestamp, value], ...] + """ + series_data = [] + for i, timestamp in enumerate(timestamps): + if i < len(values) and values[i] is not None: + series_data.append([timestamp, values[i]]) + else: + series_data.append([timestamp, default_value]) + return series_data +``` + +**输出数据结构**: +```json +{ + "heartRate": [["2025-09-07T10:00:00", 75], ["2025-09-07T10:30:00", 78]], + "bloodOxygen": [["2025-09-07T10:00:00", 98], ["2025-09-07T10:30:00", 97]], + "temperature": [["2025-09-07T10:00:00", 36.5], ["2025-09-07T10:30:00", 36.6]] +} +``` + +### 2.4 趋势分析算法 + +#### 2.4.1 统计指标计算 +```python +def calculate_stats(values): + """ + 计算健康指标的统计信息和趋势 + """ + # 基础统计量 + avg = sum(values) / len(values) + min_val = min(values) + max_val = max(values) + + # 趋势分析 - 分段比较法 + if len(values) >= 4: + mid_point = len(values) // 2 + first_half_avg = sum(values[:mid_point]) / mid_point + second_half_avg = sum(values[mid_point:]) / (len(values) - mid_point) + change_percent = ((second_half_avg - first_half_avg) / first_half_avg) * 100 + + # 趋势分类 + if change_percent > 5: + trend = 'rising' # 上升趋势 + elif change_percent < -5: + trend = 'falling' # 下降趋势 + else: + trend = 'stable' # 稳定趋势 + + return { + 'avg': round(avg, 2), + 'min': min_val, + 'max': max_val, + 'trend': trend, + 'change': round(change_percent, 2) + } +``` + +**趋势判定标准**: +- **上升趋势**: 后半段均值比前半段高5%以上 +- **下降趋势**: 后半段均值比前半段低5%以上 +- **稳定趋势**: 变化幅度在±5%以内 + +### 2.5 健康状态评估算法 + +#### 2.5.1 综合评分系统 +```python +def assess_health_status(stats): + """ + 基于医学标准的健康状态评估算法 + 总分100分,各指标权重分配: + - 心率: 15分 + - 血氧: 20分 + - 体温: 10分 + - 血压: 15分 + - 运动: 10分 + """ + score = 100 + warnings = [] + + # 心率评估 (60-100 bpm正常) + hr_avg = stats['heartRate']['avg'] + if hr_avg > 100 or hr_avg < 60: + score -= 15 + warnings.append(f"心率异常: 平均{hr_avg}bpm") + + # 血氧评估 (>95%正常) + spo2_avg = stats['bloodOxygen']['avg'] + if spo2_avg < 95: + score -= 20 + warnings.append(f"血氧偏低: 平均{spo2_avg}%") + + # 体温评估 (36.0-37.5°C正常) + temp_avg = stats['temperature']['avg'] + if temp_avg > 37.5 or temp_avg < 36.0: + score -= 10 + warnings.append(f"体温异常: 平均{temp_avg}°C") + + return { + 'overallScore': max(0, score), + 'status': get_health_level(score), + 'warnings': warnings + } +``` + +**健康等级分类**: +- **优秀** (90-100分): excellent +- **良好** (75-89分): good +- **一般** (60-74分): fair +- **需关注** (<60分): poor + +--- + +## 3. 健康状态预测算法 + +### 3.1 线性回归预测模型 + +#### 3.1.1 预测算法实现 +```python +def predict_trends(values, periods=5): + """ + 使用简单线性回归预测未来健康指标趋势 + + 参数: + - values: 历史数据点列表 + - periods: 预测未来的时间点数量 + + 返回: + - predictions: 预测值列表 + """ + if len(values) < 3: + return [] # 数据不足,无法预测 + + # 准备回归数据 + n = len(values) + x_vals = list(range(n)) # 时间序列 [0, 1, 2, ...] + y_vals = values # 健康指标值 + + # 计算回归系数 + x_mean = sum(x_vals) / n + y_mean = sum(y_vals) / n + + # 最小二乘法计算斜率和截距 + numerator = sum((x_vals[i] - x_mean) * (y_vals[i] - y_mean) for i in range(n)) + denominator = sum((x_vals[i] - x_mean) ** 2 for i in range(n)) + + if denominator == 0: + slope = 0 # 避免除零错误 + else: + slope = numerator / denominator + + intercept = y_mean - slope * x_mean + + # 生成预测值 + predictions = [] + for i in range(periods): + pred_x = n + i # 未来时间点 + pred_y = slope * pred_x + intercept + predictions.append(round(pred_y, 2)) + + return predictions +``` + +### 3.2 预测准确性评估 + +#### 3.2.1 置信度计算 +预测置信度基于以下因素: +- **数据点数量**: 数据点越多,置信度越高 +- **数据稳定性**: 波动越小,置信度越高 +- **趋势一致性**: 趋势越明显,置信度越高 + +```python +def calculate_confidence(values, predictions): + """ + 计算预测置信度 + """ + if len(values) < 5: + return 'low' + elif len(values) < 20: + return 'medium' + else: + return 'high' +``` + +### 3.3 预测应用场景 + +1. **短期预测** (1-5个时间点): 用于实时健康监控 +2. **中期预测** (5-20个时间点): 用于健康趋势分析 +3. **长期预测** (20+时间点): 用于健康风险评估 + +--- + +## 4. 健康画像生成算法 + +### 4.1 综合评分算法 + +#### 4.1.1 权重分配策略 +```python +def calculate_health_score(heart_rates, blood_oxygen, temperatures, steps): + """ + 综合健康评分算法 + + 权重分配: + - 心率: 30% (最重要的生命体征) + - 血氧: 25% (呼吸系统健康指标) + - 体温: 20% (基础代谢指标) + - 运动: 25% (生活方式指标) + """ + score = 0 + factors = [] + + # 心率评分 (30分满分) + if heart_rates: + avg_hr = sum(heart_rates) / len(heart_rates) + if 60 <= avg_hr <= 100: # 正常范围 + hr_score = 30 + elif 50 <= avg_hr < 60 or 100 < avg_hr <= 110: # 轻微异常 + hr_score = 25 + else: # 明显异常 + hr_score = 15 + score += hr_score + factors.append(f'心率: {avg_hr:.1f}bpm') + + # 血氧评分 (25分满分) + if blood_oxygen: + avg_spo2 = sum(blood_oxygen) / len(blood_oxygen) + if avg_spo2 >= 95: # 正常 + spo2_score = 25 + elif avg_spo2 >= 90: # 轻度缺氧 + spo2_score = 20 + else: # 重度缺氧 + spo2_score = 10 + score += spo2_score + factors.append(f'血氧: {avg_spo2:.1f}%') + + return { + 'overall': min(100, score), + 'category': get_score_category(score), + 'factors': factors + } +``` + +### 4.2 个性化建议生成算法 + +#### 4.2.1 规则引擎实现 +```python +def generate_health_advice(heart_rates, blood_oxygen, temperatures, steps): + """ + 基于规则引擎的个性化健康建议生成 + """ + advice = [] + + # 心率相关建议 + if heart_rates: + avg_hr = sum(heart_rates) / len(heart_rates) + if avg_hr > 100: + advice.append('您的平均心率偏高,建议减少剧烈运动,保持放松心态') + elif avg_hr < 60: + advice.append('您的心率偏低,建议适当增加有氧运动') + else: + advice.append('您的心率正常,请继续保持良好的运动习惯') + + # 血氧相关建议 + if blood_oxygen: + avg_spo2 = sum(blood_oxygen) / len(blood_oxygen) + if avg_spo2 < 95: + advice.append('血氧饱和度偏低,建议多做深呼吸练习,必要时咨询医生') + else: + advice.append('血氧水平良好,请保持规律的呼吸练习') + + # 运动相关建议 + if steps: + avg_steps = sum(steps) / len(steps) + if avg_steps < 5000: + advice.append('日常活动量不足,建议每天至少步行8000步') + elif avg_steps > 15000: + advice.append('运动量很充足,注意适度休息避免过度疲劳') + else: + advice.append('运动量适中,请继续保持') + + # 通用健康建议 + advice.extend([ + '保持规律作息,确保充足睡眠', + '注意饮食均衡,多吃蔬菜水果', + '定期监测健康数据,及时发现异常' + ]) + + return advice[:5] # 最多返回5条建议 +``` + +### 4.3 健康画像数据结构 + +#### 4.3.1 标准输出格式 +```json +{ + "healthScore": { + "overall": 82, + "category": "良好", + "factors": [ + "心率: 75.3bpm", + "血氧: 97.8%", + "体温: 36.5°C", + "日均步数: 7820步" + ] + }, + "healthPrediction": { + "trend": "心率呈稳定趋势", + "confidence": "high", + "details": "基于30天数据分析,共156个数据点" + }, + "healthAdvice": [ + "您的心率正常,请继续保持良好的运动习惯", + "血氧水平良好,请保持规律的呼吸练习", + "运动量适中,请继续保持", + "保持规律作息,确保充足睡眠", + "注意饮食均衡,多吃蔬菜水果" + ] +} +``` + +--- + +## 5. 接口设计规范 + +### 5.1 健康趋势分析接口 + +#### 5.1.1 接口定义 +``` +GET /api/health/trends/analysis +``` + +**请求参数**: +- `deviceSn` (string, required): 设备序列号 +- `timeRange` (string, optional): 时间范围 [1h, 6h, 24h, 7d, 30d] + +**响应格式**: +```json +{ + "success": true, + "data": { + "deviceSn": "CRFTQ23409001890", + "timeRange": "24h", + "dataPoints": 48, + "chartData": { + "heartRate": [["2025-09-07T10:00:00", 75]], + "bloodOxygen": [["2025-09-07T10:00:00", 98]], + "temperature": [["2025-09-07T10:00:00", 36.5]] + }, + "statistics": { + "heartRate": { + "avg": 75.2, + "min": 68, + "max": 85, + "trend": "stable", + "change": 1.2 + } + }, + "healthAssessment": { + "overallScore": 85, + "status": "good", + "warnings": [] + }, + "predictions": { + "heartRate": [75, 76, 74, 75, 77] + } + } +} +``` + +### 5.2 综合健康分析接口 + +#### 5.2.1 接口定义 +``` +GET /api/health/analysis/comprehensive +``` + +**请求参数**: +- `deviceSn` (string, required): 设备序列号 +- `days` (integer, optional): 分析天数,默认30天 + +**响应格式**: +```json +{ + "success": true, + "data": { + "deviceSn": "CRFTQ23409001890", + "analysisDate": "2025-09-07T10:30:00Z", + "dataPoints": 156, + "analysisPeriod": "30天", + "healthScore": { + "overall": 82, + "category": "良好" + }, + "healthPrediction": { + "trend": "心率保持稳定", + "confidence": "high" + }, + "healthAdvice": [ + "您的心率正常,请继续保持良好的运动习惯" + ] + } +} +``` + +--- + +## 6. 性能优化策略 + +### 6.1 数据缓存策略 + +#### 6.1.1 Redis缓存设计 +```python +# 缓存键设计 +CACHE_KEY_PATTERN = "health:analysis:{deviceSn}:{timeRange}:{date}" + +# 缓存过期时间 +CACHE_TTL = { + '1h': 300, # 5分钟 + '6h': 900, # 15分钟 + '24h': 1800, # 30分钟 + '7d': 3600, # 1小时 + '30d': 7200 # 2小时 +} +``` + +### 6.2 数据库查询优化 + +#### 6.2.1 索引优化策略 +```sql +-- 健康数据查询优化索引 +CREATE INDEX idx_health_device_time ON t_user_health_data (device_sn, timestamp DESC); +CREATE INDEX idx_health_user_time ON t_user_health_data (user_id, timestamp DESC); +CREATE INDEX idx_health_org_time ON t_user_health_data (org_id, timestamp DESC); +``` + +### 6.3 算法性能指标 + +#### 6.3.1 性能基准 +- **数据处理速度**: >1000条记录/秒 +- **趋势分析延迟**: <500ms +- **预测计算时间**: <200ms +- **内存占用**: <100MB (1000用户并发) +- **缓存命中率**: >90% + +--- + +## 7. 质量保证与测试 + +### 7.1 算法准确性验证 + +#### 7.1.1 回归测试用例 +```python +def test_trend_calculation_accuracy(): + """测试趋势计算准确性""" + # 上升趋势数据 + rising_data = [70, 72, 74, 76, 78, 80, 82, 84] + result = calculate_stats(rising_data) + assert result['trend'] == 'rising' + assert result['change'] > 5 + + # 稳定趋势数据 + stable_data = [75, 74, 76, 75, 74, 76, 75, 74] + result = calculate_stats(stable_data) + assert result['trend'] == 'stable' + assert -5 <= result['change'] <= 5 +``` + +### 7.2 异常处理机制 + +#### 7.2.1 容错设计 +```python +def safe_calculate_trends(health_data, timeRange): + """ + 安全的趋势计算,包含完整的异常处理 + """ + try: + return analyze_health_trends_comprehensive(health_data, timeRange) + except ZeroDivisionError: + logger.warning("除零错误,返回默认趋势数据") + return generate_fallback_trends_data(timeRange) + except ValueError as e: + logger.error(f"数值错误: {e}") + return generate_fallback_trends_data(timeRange) + except Exception as e: + logger.error(f"未知错误: {e}") + return generate_fallback_trends_data(timeRange) +``` + +--- + +## 8. 部署与运维 + +### 8.1 监控指标 + +#### 8.1.1 关键监控点 +```python +# 算法性能监控 +MONITORING_METRICS = { + 'algorithm_execution_time': { + 'trends_analysis': 'histogram', + 'health_prediction': 'histogram', + 'health_scoring': 'histogram' + }, + 'algorithm_accuracy': { + 'prediction_accuracy': 'gauge', + 'trend_detection_rate': 'gauge' + }, + 'system_health': { + 'memory_usage': 'gauge', + 'cpu_utilization': 'gauge', + 'cache_hit_rate': 'gauge' + } +} +``` + +### 8.2 日志记录规范 + +#### 8.2.1 结构化日志 +```python +import structlog + +health_logger = structlog.get_logger("health_algorithm") + +def log_algorithm_execution(algorithm_name, execution_time, data_points): + """记录算法执行日志""" + health_logger.info( + "algorithm_executed", + algorithm=algorithm_name, + execution_time_ms=execution_time, + data_points=data_points, + timestamp=datetime.now().isoformat() + ) +``` + +--- + +## 9. 未来优化方向 + +### 9.1 机器学习增强 + +#### 9.1.1 深度学习模型集成 +- **LSTM网络**: 用于长期健康趋势预测 +- **CNN网络**: 用于健康数据模式识别 +- **Transformer**: 用于多模态健康数据融合 + +### 9.2 个性化算法优化 + +#### 9.2.1 用户画像学习 +```python +class PersonalizedHealthModel: + """个性化健康模型""" + + def __init__(self, user_profile): + self.age = user_profile.get('age') + self.gender = user_profile.get('gender') + self.medical_history = user_profile.get('medical_history') + + def calculate_personalized_score(self, health_data): + """基于个人特征计算个性化健康评分""" + base_score = calculate_health_score(health_data) + + # 年龄调整 + age_factor = self.get_age_adjustment_factor() + adjusted_score = base_score * age_factor + + return adjusted_score +``` + +### 9.3 实时预警系统 + +#### 9.3.1 异常检测算法 +```python +def real_time_anomaly_detection(current_value, historical_data): + """ + 实时异常检测算法 + 使用统计方法识别健康数据异常 + """ + mean = sum(historical_data) / len(historical_data) + std_dev = calculate_std_deviation(historical_data) + + # 3σ原则检测异常 + threshold = 3 * std_dev + + if abs(current_value - mean) > threshold: + return { + 'is_anomaly': True, + 'severity': 'high' if abs(current_value - mean) > 4 * std_dev else 'medium', + 'deviation': abs(current_value - mean) + } + + return {'is_anomaly': False} +``` + +--- + +## 10. 总结 + +本文档详细描述了灵境万象健康监控系统的核心算法设计,包括: + +1. **健康趋势分析**: 基于时间序列分析和统计学方法的趋势识别系统 +2. **健康状态预测**: 使用线性回归的预测模型,支持短中长期预测 +3. **健康画像生成**: 综合评分与个性化建议的智能生成系统 + +### 10.1 技术优势 + +- **科学性**: 基于医学标准和统计学原理 +- **准确性**: 多层异常检测和数据清洗 +- **实用性**: 面向实际应用场景设计 +- **可扩展性**: 模块化设计,支持算法升级 +- **高性能**: 优化的数据处理和缓存策略 + +### 10.2 应用价值 + +- **个人健康监控**: 提供科学的健康状态评估 +- **预防医学**: 早期健康风险识别和预警 +- **生活方式指导**: 个性化的健康改善建议 +- **企业健康管理**: 员工群体健康状况分析 + +通过这套完整的算法体系,灵境万象健康监控系统能够为用户提供专业、准确、个性化的健康分析服务,助力用户实现主动健康管理。 + +--- + +**文档版权**: © 2025 灵境万象科技有限公司 +**技术支持**: LJWX技术团队 +**更新周期**: 季度更新 \ No newline at end of file diff --git a/ljwx-admin/src/views/customer/config/index.vue b/ljwx-admin/src/views/customer/config/index.vue index dea5a54..4beca93 100644 --- a/ljwx-admin/src/views/customer/config/index.vue +++ b/ljwx-admin/src/views/customer/config/index.vue @@ -1,7 +1,7 @@