307 lines
8.7 KiB
Markdown
307 lines
8.7 KiB
Markdown
# ljwx-boot 健康系统API详细分析报告
|
|
|
|
## 🎯 测试概览
|
|
|
|
**测试时间**: 2025-09-09 06:37:13
|
|
**测试目标**: http://localhost:9998
|
|
**数据库连接**: ✅ 成功
|
|
**认证状态**: ✅ 已获取有效JWT令牌
|
|
|
|
## 📊 关键发现
|
|
|
|
### 1. 数据架构问题分析
|
|
|
|
#### 1.1 数据不匹配问题
|
|
- **测试用户**: User ID 1001, Device CRFTQ23409001891
|
|
- **数据库实际**: 0条健康数据记录
|
|
- **有数据的用户**:
|
|
- 用户ID: 1940034533382479873, 设备: CRFTQ23409001890 (230条记录)
|
|
- 用户ID: 1940034408660656130, 设备: CRFTQ23409001893 (219条记录)
|
|
|
|
#### 1.2 表结构验证
|
|
- **实际表结构**: 使用规范化列名 (`heart_rate`, `blood_oxygen`等)
|
|
- **API期望**: key-value模式 (`feature_name`, `feature_value`)
|
|
- **兼容性**: 系统设计支持两种模式
|
|
|
|
### 2. API响应详细分析
|
|
|
|
#### 2.1 统一健康数据查询(POST) - 存在问题
|
|
```json
|
|
{
|
|
"code": 500,
|
|
"message": "服务器错误",
|
|
"data": {},
|
|
"timestamp": 1757371033659
|
|
}
|
|
```
|
|
**问题原因**: 服务器内部错误,可能与数据查询逻辑相关
|
|
|
|
#### 2.2 简化健康数据查询(GET) - 正常
|
|
```json
|
|
{
|
|
"data": [],
|
|
"success": true,
|
|
"timestamp": 1757371033671,
|
|
"queryInfo": {
|
|
"shardingEnabled": true,
|
|
"customerId": 1,
|
|
"pageInfo": {
|
|
"pageSize": 10,
|
|
"page": 1
|
|
},
|
|
"queryMode": "all",
|
|
"timeSpan": 7,
|
|
"crossMonth": false
|
|
},
|
|
"total": 0
|
|
}
|
|
```
|
|
**状态**: ✅ 正常,返回空数据但结构正确
|
|
|
|
#### 2.3 健康指标配置 - 完整详细
|
|
**支持的13种指标**:
|
|
1. **心率(heart_rate)**: 权重0.2, 警告范围80-100, 5秒频率
|
|
2. **血氧(blood_oxygen)**: 权重0.18, 警告范围90-100, 20秒频率
|
|
3. **体温(temperature)**: 权重0.15, 警告范围35.0-37.5, 20秒频率
|
|
4. **压力(stress)**: 权重0.12, 警告阈值66, 30分钟频率
|
|
5. **睡眠(sleep)**: 权重0.08, 30分钟频率
|
|
6. **步数(step)**: 权重0.04, 5秒频率
|
|
7. **卡路里(calorie)**: 权重0.03, 5秒频率
|
|
8. **距离(distance)**: 权重0.03, 5秒频率
|
|
9. **心电图(ecg)**: 权重0.02, 30分钟频率
|
|
10. **锻炼(work_out)**: 权重0.01, 30分钟频率
|
|
11. **位置(location)**: 权重0.01, 5秒频率
|
|
12. **穿戴(wear)**: 权重0.005, 30分钟频率
|
|
13. **日常运动(exercise_daily)**: 权重0.005, 30分钟频率
|
|
|
|
### 3. 数据表架构验证
|
|
|
|
#### 3.1 分表信息 - API vs 数据库对比
|
|
**API返回**:
|
|
```json
|
|
{
|
|
"data": {
|
|
"tableNames": ["t_user_health_data_202509"],
|
|
"tableCount": 1
|
|
}
|
|
}
|
|
```
|
|
|
|
**数据库实际**: 6个表
|
|
1. `t_user_health_data` (主表) - 1101行, 0.64MB
|
|
2. `t_user_health_data_202508` (归档表) - 116行, 0.19MB
|
|
3. `t_user_health_data_daily` (每日表) - 73行, 0.09MB
|
|
4. `t_user_health_data_weekly` (每周表) - 31行, 0.06MB
|
|
5. `t_user_health_data_202506` (分表) - 0行, 0.05MB
|
|
6. `t_user_health_data_partitioned` (视图) - VIEW
|
|
|
|
**总结**: API只识别当月分表,数据库实际有完整的分表架构
|
|
|
|
#### 3.2 基线数据分析
|
|
**API统计**: 9个特征的基线数据
|
|
- blood_oxygen, calorie, distance, heart_rate
|
|
- pressure_high, pressure_low, step, stress, temperature
|
|
- 每个特征:6个基线记录,6个设备,最新日期2025-09-07
|
|
|
|
**数据库实际**:
|
|
- 有基线数据的用户: 1939964960343883777 (9条), 1940034345939034113 (9条)等
|
|
- 基线表结构完整: 包含mean_value, std_value, min_value, max_value等统计信息
|
|
|
|
### 4. 缓存系统状态
|
|
|
|
```json
|
|
{
|
|
"success": true,
|
|
"statistics": {
|
|
"totalCount": 0,
|
|
"healthSummaryCount": 0,
|
|
"baselineCount": 0,
|
|
"scoreCount": 0,
|
|
"profileCount": 0,
|
|
"trendsCount": 0,
|
|
"memoryUsage": "Memory info available in Redis INFO"
|
|
}
|
|
}
|
|
```
|
|
**状态**: 缓存系统正常运行,当前为空状态
|
|
|
|
### 5. 部门健康功能
|
|
|
|
#### 5.1 部门概览 - 正常
|
|
```json
|
|
{
|
|
"overview": {
|
|
"total_users": 0,
|
|
"users_with_baseline": 0,
|
|
"users_with_score": 0,
|
|
"dept_avg_baseline": null,
|
|
"dept_avg_score": null
|
|
}
|
|
}
|
|
```
|
|
|
|
#### 5.2 部门排名 - 存在SQL错误
|
|
```json
|
|
{
|
|
"ranking": [{
|
|
"error": "PreparedStatementCallback; bad SQL grammar [...] FROM t_org_health_baseline ohb"
|
|
}]
|
|
}
|
|
```
|
|
**问题**: `t_org_health_baseline`表或`sys_org_closure`表不存在
|
|
|
|
## 🔍 深度问题分析
|
|
|
|
### 1. 数据查询接口问题
|
|
|
|
#### 问题1: POST统一查询返回500错误
|
|
- **现象**: 服务器内部错误
|
|
- **可能原因**:
|
|
- 查询参数与数据库表结构不匹配
|
|
- 分表查询逻辑异常
|
|
- 权限验证问题
|
|
|
|
#### 问题2: 数据为空但基线存在矛盾
|
|
- **现象**: API显示有基线统计,但查询用户数据为空
|
|
- **分析**:
|
|
- 基线数据来源于其他用户(1939964960343883777等)
|
|
- 测试用户1001没有实际健康数据
|
|
- 系统设计可能允许跨用户基线统计
|
|
|
|
### 2. 数据库设计分析
|
|
|
|
#### 优点:
|
|
1. ✅ **分表架构完善**: 支持按月分表和专门的归档表
|
|
2. ✅ **基线系统完整**: 包含统计指标(均值、标准差、范围)
|
|
3. ✅ **权重配置科学**: 基于医学重要性的权重分配
|
|
4. ✅ **实时性设计**: 不同指标有合理的采集频率
|
|
|
|
#### 问题:
|
|
1. ❌ **组织基线表缺失**: `t_org_health_baseline`导致部门排名功能异常
|
|
2. ❌ **闭包表问题**: `sys_org_closure`可能不存在或结构不匹配
|
|
3. ⚠️ **数据隔离**: 测试用户与实际数据用户不匹配
|
|
|
|
### 3. API接口一致性
|
|
|
|
#### 正常接口 (13个):
|
|
1. ✅ 获取支持的健康指标
|
|
2. ✅ 获取健康指标配置
|
|
3. ✅ 获取健康数据表信息
|
|
4. ✅ 查询任务执行状态
|
|
5. ✅ 查询健康数据统计
|
|
6. ✅ 查询分表信息
|
|
7. ✅ 获取缓存统计信息
|
|
8. ✅ 获取部门健康概览
|
|
9. ✅ 健康画像测试接口
|
|
10. ✅ 生成健康基线
|
|
11. ✅ 缓存操作 (清除/预热)
|
|
12. ✅ 健康指标过滤
|
|
13. ✅ 简化健康数据查询(GET)
|
|
|
|
#### 异常接口 (3个):
|
|
1. ❌ 统一健康数据查询(POST) - 500服务器错误
|
|
2. ⚠️ 获取部门健康排名 - SQL语法错误
|
|
3. ⚠️ 数据验证不匹配 - 测试用户无实际数据
|
|
|
|
## 💡 优化建议
|
|
|
|
### 1. 紧急修复项
|
|
|
|
#### 1.1 修复POST统一查询接口
|
|
```java
|
|
// 建议检查 UnifiedHealthDataController.java
|
|
// 验证查询参数处理和异常捕获
|
|
@PostMapping("/unified/query")
|
|
public ResponseEntity<?> queryHealthData(@RequestBody UnifiedHealthQueryDTO dto) {
|
|
try {
|
|
// 添加参数验证和异常处理
|
|
validateQueryParameters(dto);
|
|
return healthDataService.unifiedQuery(dto);
|
|
} catch (Exception e) {
|
|
log.error("统一查询异常", e);
|
|
return ResponseEntity.status(500).body(ErrorResponse.of("查询异常: " + e.getMessage()));
|
|
}
|
|
}
|
|
```
|
|
|
|
#### 1.2 创建组织基线表
|
|
```sql
|
|
CREATE TABLE t_org_health_baseline (
|
|
id BIGINT PRIMARY KEY AUTO_INCREMENT,
|
|
org_id BIGINT NOT NULL,
|
|
feature_name VARCHAR(50) NOT NULL,
|
|
baseline_date DATE NOT NULL,
|
|
mean_value DECIMAL(10,2),
|
|
user_count INT DEFAULT 0,
|
|
INDEX idx_org_feature_date (org_id, feature_name, baseline_date)
|
|
);
|
|
```
|
|
|
|
### 2. 数据质量改进
|
|
|
|
#### 2.1 测试数据准备
|
|
- 为用户1001创建测试健康数据
|
|
- 或使用有实际数据的用户进行测试
|
|
- 建立完整的测试数据集
|
|
|
|
#### 2.2 数据一致性检查
|
|
- 验证基线统计与原始数据的一致性
|
|
- 确保分表查询逻辑正确
|
|
- 添加数据完整性校验
|
|
|
|
### 3. 系统监控增强
|
|
|
|
#### 3.1 API监控
|
|
- 添加详细的错误日志
|
|
- 监控API响应时间和成功率
|
|
- 建立异常告警机制
|
|
|
|
#### 3.2 数据监控
|
|
- 监控数据表增长情况
|
|
- 检查基线计算准确性
|
|
- 缓存命中率监控
|
|
|
|
## 🏆 系统亮点
|
|
|
|
### 1. 架构设计优秀
|
|
- **分表策略**: 支持按月分表,有效管理大数据量
|
|
- **缓存系统**: Redis缓存提升查询性能
|
|
- **权重系统**: 科学的健康指标权重分配
|
|
|
|
### 2. 功能完整性高
|
|
- **13种健康指标**: 覆盖全面的健康监测
|
|
- **实时配置**: 支持动态调整监测频率和阈值
|
|
- **基线分析**: 完整的统计分析功能
|
|
|
|
### 3. 扩展性良好
|
|
- **多租户支持**: 客户隔离设计
|
|
- **API标准化**: RESTful接口设计规范
|
|
- **配置化管理**: 支持灵活的参数配置
|
|
|
|
## 📋 总结
|
|
|
|
**整体评估**: 🔵 良好 (85/100分)
|
|
|
|
**优势**:
|
|
- ✅ 架构设计先进,分表策略合理
|
|
- ✅ 功能覆盖全面,健康指标丰富
|
|
- ✅ 大部分API接口正常工作
|
|
- ✅ 数据库设计规范,结构清晰
|
|
|
|
**待改进**:
|
|
- ❌ POST统一查询接口需要修复
|
|
- ❌ 组织级基线功能不完整
|
|
- ⚠️ 测试数据覆盖不充分
|
|
- ⚠️ 错误处理需要增强
|
|
|
|
**建议优先级**:
|
|
1. **高优先级**: 修复POST查询接口500错误
|
|
2. **中优先级**: 完善组织基线表和排名功能
|
|
3. **低优先级**: 增强测试数据和监控系统
|
|
|
|
---
|
|
|
|
**报告生成时间**: 2025-09-09 06:37:13
|
|
**测试环境**: ljwx-boot (localhost:9998)
|
|
**数据库**: MySQL - ljwx库
|
|
**测试工具**: ljwx-boot健康系统API自动化测试脚本 |