浏览代码

refactor(health-data): 重构血糖数据模型以支持统一类型字段

- 将血糖数据表中的多个时间点字段合并为 type 和 value 字段
- 更新血糖数据实体类,使用 type 和 value 替代原有多个血糖值字段
- 修改血糖数据请求和响应 DTO,统一使用 type 和 value 表示血糖类型和数值
- 调整数据库索引,为 type 字段添加索引以提高查询性能
- 更新健康数据 API 文档,反映新的血糖数据结构
- 移除血糖数据枚举设计文档中过时的标准引用
- 简化血糖数据模块设计说明,适配新的数据模型结构
mcbaiyun 2 月之前
父节点
当前提交
d3f92f1ca3

+ 1 - 2
docs/DevDesign/HealthData/BloodGlucoseTypeEnumDesign.md

@@ -242,5 +242,4 @@ public class AddBloodGlucoseDataRequest {
 - WHO糖尿病诊断标准
 - ADA血糖控制目标
 - 中国糖尿病防治指南
-- 国际糖尿病联盟(IDF)标准</content>
-<parameter name="filePath">d:\慢病APP\ChronicDiseaseApp\docs\DevDesign\HealthData\BloodGlucoseTypeEnumDesign.md
+- 国际糖尿病联盟(IDF)标准

+ 5 - 17
docs/DevDesign/HealthData/HealthDataAPIDocument.md

@@ -193,26 +193,15 @@
 - **请求参数**:
 ```json
 {
-    "fastingBloodGlucose": 5.2,
-    "afterBreakfastBloodGlucose": 8.5,
-    "beforeLunchBloodGlucose": 6.1,
-    "afterLunchBloodGlucose": 9.2,
-    "beforeDinnerBloodGlucose": 5.8,
-    "afterDinnerBloodGlucose": 8.9,
-    "beforeBedBloodGlucose": 7.3,
+    "type": "FASTING",
+    "value": 5.2,
     "measureTime": "2024-01-15T10:30:00"
 }
 ```
 - **参数说明**:
-  - `fastingBloodGlucose`: 空腹血糖(mmol/L,早餐前),范围1.0-30.0,可选
-  - `afterBreakfastBloodGlucose`: 早餐后血糖(mmol/L,早餐后2小时),范围1.0-30.0,可选
-  - `beforeLunchBloodGlucose`: 午餐前血糖(mmol/L),范围1.0-30.0,可选
-  - `afterLunchBloodGlucose`: 午餐后血糖(mmol/L,午餐后2小时),范围1.0-30.0,可选
-  - `beforeDinnerBloodGlucose`: 晚餐前血糖(mmol/L),范围1.0-30.0,可选
-  - `afterDinnerBloodGlucose`: 晚餐后血糖(mmol/L,晚餐后2小时),范围1.0-30.0,可选
-  - `beforeBedBloodGlucose`: 睡前血糖(mmol/L),范围1.0-30.0,可选
+  - `type`: 血糖测量类型,枚举值(如`FASTING`、`AFTER_BREAKFAST`等),必填
+  - `value`: 血糖值(mmol/L),范围1.0-30.0,必填
   - `measureTime`: 测量时间,必填
-  - 注意:至少填写一个血糖值
 - **响应示例**:
 ```json
 {
@@ -377,5 +366,4 @@ curl -X GET "http://localhost:8080/physical-data/bmi?height=170.5&weight=65.2" \
 
 - **API版本**: v1.0
 - **文档版本**: 1.0
-- **更新日期**: 2024-01-15</content>
-<parameter name="filePath">d:\慢病APP\ChronicDiseaseApp\docs\HealthDataAPIDocument.md
+- **更新日期**: 2024-01-15

+ 25 - 84
docs/DevDesign/HealthData/HealthDataModuleDesign.md

@@ -169,24 +169,16 @@ CREATE INDEX idx_bp_user_id ON t_blood_pressure_data(user_id);
 CREATE TABLE t_blood_glucose_data (
     id BIGINT PRIMARY KEY COMMENT '主键ID',
     user_id BIGINT NOT NULL COMMENT '用户ID',
-    fasting_blood_glucose DECIMAL(4,2) COMMENT '空腹血糖(mmol/L)',
-    after_breakfast_blood_glucose DECIMAL(4,2) COMMENT '早餐后血糖(mmol/L)',
-    before_lunch_blood_glucose DECIMAL(4,2) COMMENT '午餐前血糖(mmol/L)',
-    after_lunch_blood_glucose DECIMAL(4,2) COMMENT '午餐后血糖(mmol/L)',
-    before_dinner_blood_glucose DECIMAL(4,2) COMMENT '晚餐前血糖(mmol/L)',
-    after_dinner_blood_glucose DECIMAL(4,2) COMMENT '晚餐后血糖(mmol/L)',
-    before_bed_blood_glucose DECIMAL(4,2) COMMENT '睡前血糖(mmol/L)',
     measure_time DATETIME NOT NULL COMMENT '测量时间',
-    create_user BIGINT COMMENT '创建者ID',
-    create_time DATETIME COMMENT '创建时间',
-    update_user BIGINT COMMENT '更新者ID',
-    update_time DATETIME COMMENT '更新时间',
+    type VARCHAR(50) NOT NULL COMMENT '血糖测量类型',
+    value DECIMAL(5, 2) NOT NULL COMMENT '血糖值',
     version INT DEFAULT 0 COMMENT '乐观锁版本号'
 ) COMMENT '血糖数据表';
 
 -- 索引设计
 CREATE INDEX idx_bg_user_measure_time ON t_blood_glucose_data(user_id, measure_time);
 CREATE INDEX idx_bg_user_id ON t_blood_glucose_data(user_id);
+CREATE INDEX idx_bg_type ON t_blood_glucose_data(type);
 ```
 
 ### 心率数据表 (t_heart_rate_data)
@@ -215,7 +207,7 @@ CREATE INDEX idx_hr_user_id ON t_heart_rate_data(user_id);
 - 各模块特有字段:
   - 体格数据:`height`(身高), `weight`(体重)
   - 血压数据:`systolic_pressure`(收缩压), `diastolic_pressure`(舒张压)
-  - 血糖数据:`fasting_blood_glucose`(空腹血糖), `after_breakfast_blood_glucose`(早餐后血糖), `before_lunch_blood_glucose`(午餐前血糖), `after_lunch_blood_glucose`(午餐后血糖), `before_dinner_blood_glucose`(晚餐前血糖), `after_dinner_blood_glucose`(晚餐后血糖), `before_bed_blood_glucose`(睡前血糖)
+  - 血糖数据:`type`(血糖测量类型), `value`(血糖值)
   - 心率数据:`heart_rate`(心率)
 - 继承BaseEntity的公共字段
 
@@ -273,30 +265,15 @@ public class BloodGlucoseData extends BaseEntity {
     @TableField("user_id")
     private Long userId;
 
-    @TableField("fasting_blood_glucose")
-    private BigDecimal fastingBloodGlucose;
-
-    @TableField("after_breakfast_blood_glucose")
-    private BigDecimal afterBreakfastBloodGlucose;
-
-    @TableField("before_lunch_blood_glucose")
-    private BigDecimal beforeLunchBloodGlucose;
-
-    @TableField("after_lunch_blood_glucose")
-    private BigDecimal afterLunchBloodGlucose;
-
-    @TableField("before_dinner_blood_glucose")
-    private BigDecimal beforeDinnerBloodGlucose;
-
-    @TableField("after_dinner_blood_glucose")
-    private BigDecimal afterDinnerBloodGlucose;
-
-    @TableField("before_bed_blood_glucose")
-    private BigDecimal beforeBedBloodGlucose;
-
     @TableField("measure_time")
     private LocalDateTime measureTime;
 
+    @TableField("type")
+    private String type;
+
+    @TableField("value")
+    private BigDecimal value;
+
     // getters and setters
 }
 ```
@@ -436,38 +413,18 @@ public class BloodPressureDataResponse {
 // AddBloodGlucoseDataRequest.java
 @Schema(description = "添加血糖数据请求")
 public class AddBloodGlucoseDataRequest {
-    @Schema(description = "空腹血糖(mmol/L)", minimum = "1.0", maximum = "30.0")
-    @DecimalMin("1.0") @DecimalMax("30.0")
-    private BigDecimal fastingBloodGlucose;
-
-    @Schema(description = "早餐后血糖(mmol/L)", minimum = "1.0", maximum = "30.0")
-    @DecimalMin("1.0") @DecimalMax("30.0")
-    private BigDecimal afterBreakfastBloodGlucose;
-
-    @Schema(description = "午餐前血糖(mmol/L)", minimum = "1.0", maximum = "30.0")
-    @DecimalMin("1.0") @DecimalMax("30.0")
-    private BigDecimal beforeLunchBloodGlucose;
-
-    @Schema(description = "午餐后血糖(mmol/L)", minimum = "1.0", maximum = "30.0")
-    @DecimalMin("1.0") @DecimalMax("30.0")
-    private BigDecimal afterLunchBloodGlucose;
-
-    @Schema(description = "晚餐前血糖(mmol/L)", minimum = "1.0", maximum = "30.0")
-    @DecimalMin("1.0") @DecimalMax("30.0")
-    private BigDecimal beforeDinnerBloodGlucose;
-
-    @Schema(description = "晚餐后血糖(mmol/L)", minimum = "1.0", maximum = "30.0")
-    @DecimalMin("1.0") @DecimalMax("30.0")
-    private BigDecimal afterDinnerBloodGlucose;
-
-    @Schema(description = "睡前血糖(mmol/L)", minimum = "1.0", maximum = "30.0")
-    @DecimalMin("1.0") @DecimalMax("30.0")
-    private BigDecimal beforeBedBloodGlucose;
-
     @Schema(description = "测量时间")
     @NotNull
     private LocalDateTime measureTime;
 
+    @Schema(description = "血糖测量类型")
+    @NotNull
+    private String type;
+
+    @Schema(description = "血糖值", minimum = "1.0", maximum = "30.0")
+    @DecimalMin("1.0") @DecimalMax("30.0")
+    private BigDecimal value;
+
     // getters and setters
 }
 
@@ -477,30 +434,15 @@ public class BloodGlucoseDataResponse {
     @Schema(description = "记录ID")
     private Long id;
 
-    @Schema(description = "空腹血糖(mmol/L)")
-    private BigDecimal fastingBloodGlucose;
-
-    @Schema(description = "早餐后血糖(mmol/L)")
-    private BigDecimal afterBreakfastBloodGlucose;
-
-    @Schema(description = "午餐前血糖(mmol/L)")
-    private BigDecimal beforeLunchBloodGlucose;
-
-    @Schema(description = "午餐后血糖(mmol/L)")
-    private BigDecimal afterLunchBloodGlucose;
-
-    @Schema(description = "晚餐前血糖(mmol/L)")
-    private BigDecimal beforeDinnerBloodGlucose;
-
-    @Schema(description = "晚餐后血糖(mmol/L)")
-    private BigDecimal afterDinnerBloodGlucose;
-
-    @Schema(description = "睡前血糖(mmol/L)")
-    private BigDecimal beforeBedBloodGlucose;
-
     @Schema(description = "测量时间")
     private LocalDateTime measureTime;
 
+    @Schema(description = "血糖测量类型")
+    private String type;
+
+    @Schema(description = "血糖值")
+    private BigDecimal value;
+
     @Schema(description = "创建时间")
     private LocalDateTime createTime;
 
@@ -1035,5 +977,4 @@ public interface HeartRateDataMapper extends BaseMapper<HeartRateData> {
 3. **性能优化**:独立表设计避免了大数据量查询时的性能问题
 4. **医疗专业性**:血糖数据按标准医疗时间点分类,便于医生诊断
 5. **数据一致性**:每种数据类型独立管理,确保数据一致性
-6. **接口清晰**:每个模块提供独立的API,便于前端集成</content>
-<parameter name="filePath">d:\慢病APP\ChronicDiseaseApp\docs\HealthDataModuleDesign.md
+6. **接口清晰**:每个模块提供独立的API,便于前端集成