血糖数据功能设计文档
概述: 本文档描述系统中血糖(Blood Glucose)数据的接入、查询、删除能力及相关权限、审计和存储设计。对应代码位置:src/main/java/.../controller/BloodGlucoseDataController.java、service/BloodGlucoseDataService、数据库表 t_blood_glucose_data。
目标: 为移动端(患者)和绑定方(医生/家属)提供血糖测量记录的上报与查询能力,同时确保基于绑定关系的访问控制与审计记录。
接口清单:
添加血糖数据
POST /blood-glucose/addAddBloodGlucoseDataRequest (application/json)fasting、postprandial 等),必填R 成功/失败返回。成功返回 200 OK 与 message ok。@NotNull, @DecimalMin, @DecimalMax)。分页查询血糖数据(本人)
POST /blood-glucose/listBaseQueryRequest (application/json)BloodGlucoseDataPageResponse,包含分页 metadata 与 BloodGlucoseDataResponse 列表。绑定方分页查询患者血糖数据
POST /blood-glucose/list-by-bound-userpatientUserId (Long, 必填),bindingType (String, 可选),请求体 BaseQueryRequestboundUserId(从 token / SecurityUtils)UserBindingService.checkUserBinding 验证 boundUserId 与 patientUserId 的绑定关系DATA_ACCESS_DENIED(无权访问)bindingType 为空,则从检查结果中使用绑定类型list,返回 BloodGlucoseDataPageResponse。删除血糖数据
POST /blood-glucose/deleteDeleteBloodGlucoseDataRequest,包含 id (String,必填)R 成功/失败返回。数据模型 (VO / PO)
请求/响应 VO:
AddBloodGlucoseDataRequest:type : Stringvalue : BigDecimalmeasureTime : LocalDateTimeBloodGlucoseDataResponse:id : StringmeasureTime : LocalDateTimetype : Stringvalue : BigDecimalcreateTime : LocalDateTime持久化表: t_blood_glucose_data(参见 docs/DB/t_blood_glucose_data.txt)
id, user_id, type, value, measure_time, create_time, update_time, deleted_flag 等校验规则
type 非空。value 在 1.0 至 30.0 mmol/L 之间。measureTime 非空且不晚于当前时间(可在 service 层严格校验)。权限与访问控制
UserBindingService.checkUserBinding),否则返回 DATA_ACCESS_DENIED。审计与日志
list-by-bound-user 接口中记录访问日志:记录访问方 ID、患者 ID、数据类型(blood_glucose)、查询时间范围。错误码
ErrorCode 枚举:
PARAMETER_ERROR (1001):请求参数缺失或校验失败SYSTEM_ERROR (1000):服务器内部错误UNAUTHORIZED (1002):未授权(token 无效)DATA_ACCESS_DENIED (4001):绑定方访问时无权限DATA_NOT_FOUND (4000):删除/查询的记录不存在服务与 Mapper 关系
BloodGlucoseDataService(负责业务校验、权限判断、持久化调用、分页查询实现)BloodGlucoseDataMapper) 直接与 t_blood_glucose_data 表交互兼容性与注意事项
list-by-bound-user 的参数 bindingType 可由前端传入,也可在后端根据绑定关系重用检查结果中的绑定类型,保证行为向后兼容。LocalDateTime,前端需按照约定时区/格式发送(建议 ISO-8601)。Page,Controller 将其转换为页面友好格式 BloodGlucoseDataPageResponse。示例
添加请求示例:
{
"type": "fasting",
"value": 5.6,
"measureTime": "2025-11-20T07:30:00"
}
查询(分页)请求示例:
{
"pageNum": 1,
"pageSize": 20,
"startTime": "2025-11-01T00:00:00",
"endTime": "2025-11-21T23:59:59"
}
响应示例 (分页 records 片段):
{
"records": [
{
"id": "abc123",
"measureTime": "2025-11-20T07:30:00",
"type": "fasting",
"value": 5.6,
"createTime": "2025-11-20T07:35:00"
}
],
"total": 1,
"size": 20,
"current": 1
}
后续建议
DATA_SAVE_FAILED)