心率数据功能设计文档
概述: 本文档描述系统中心率(Heart Rate)数据的上报、查询与删除能力,以及相关权限、审计与存储设计。对应代码位置:src/main/java/.../controller/HeartRateDataController.java、service/HeartRateDataService、数据库表 t_heart_rate_data(若尚未建立,请参考 docs/DB 中的数据字典)。
目标: 允许患者上报心率(次/分钟)测量值;允许绑定方(医生/家属)在存在绑定关系时查询患者心率数据;保证访问受限并记录必要审计日志。
接口清单:
添加心率数据
POST /heart-rate/addAddHeartRateDataRequest (application/json)R 成功/失败返回;成功返回 200 OK 与 message ok。@NotNull, @Min, @Max)。分页查询心率数据(本人)
POST /heart-rate/listBaseQueryRequest (application/json)HeartRateDataPageResponse,包含分页 metadata 与 HeartRateDataResponse 列表。绑定方分页查询患者心率数据
POST /heart-rate/list-by-bound-userpatientUserId (Long, 必填),bindingType (String, 可选),请求体 BaseQueryRequestboundUserId(从 token / SecurityUtils)UserBindingService.checkUserBinding 验证绑定关系DATA_ACCESS_DENIED(无权访问)bindingType 为空,则使用检查结果中的绑定类型list,返回 HeartRateDataPageResponse。删除心率数据
POST /heart-rate/deleteDeleteHeartRateDataRequest,包含 id (String,必填)R 成功/失败返回。数据模型 (VO / PO)
请求/响应 VO:
AddHeartRateDataRequest:heartRate : IntegermeasureTime : LocalDateTimeHeartRateDataResponse:id : StringheartRate : IntegermeasureTime : LocalDateTimecreateTime : LocalDateTime持久化表: t_heart_rate_data(建议字段)
id, user_id, heart_rate, measure_time, create_time, update_time, deleted_flag 等校验规则
heartRate 非空且在 30-200 次/分钟之间。measureTime 非空且应不晚于服务器当前时间(service 层可加强校验)。权限与访问控制
UserBindingService.checkUserBinding),否则返回 DATA_ACCESS_DENIED。审计与日志
list-by-bound-user 接口中记录访问日志:记录访问方 ID、患者 ID、数据类型(heart_rate)、查询时间范围。错误码
ErrorCode 枚举:
PARAMETER_ERROR (1001):请求参数缺失或校验失败SYSTEM_ERROR (1000):服务器内部错误UNAUTHORIZED (1002):未授权(token 无效)DATA_ACCESS_DENIED (4001):绑定方访问时无权限DATA_NOT_FOUND (4000):删除/查询的记录不存在服务与 Mapper 关系
HeartRateDataService(负责业务校验、权限判断、持久化调用、分页查询实现)HeartRateDataMapper) 与 t_heart_rate_data 表交互兼容性与注意事项
LocalDateTime,前端需按约定时区/格式发送(建议 ISO-8601)。Page,Controller 将其转换为页面友好格式 HeartRateDataPageResponse。示例
添加请求示例:
{
"heartRate": 72,
"measureTime": "2025-11-20T08:30:00"
}
查询(分页)请求示例:
{
"pageNum": 1,
"pageSize": 20,
"startTime": "2025-11-01T00:00:00",
"endTime": "2025-11-21T23:59:59"
}
响应示例 (分页 records 片段):
{
"records": [
{
"id": "hr-001",
"heartRate": 72,
"measureTime": "2025-11-20T08:30:00",
"createTime": "2025-11-20T08:35:00"
}
],
"total": 1,
"size": 20,
"current": 1
}
后续建议