血压数据功能设计文档
概述: 本文档描述系统中血压(Blood Pressure)数据的上报、查询与删除能力,以及相关权限、审计与存储设计。对应代码位置:src/main/java/.../controller/BloodPressureDataController.java、service/BloodPressureDataService、数据库表 t_blood_pressure_data。
目标: 为患者提供上报个人血压(收缩压/舒张压)数据的能力,并允许绑定方(医生/家属)在存在绑定关系时查询患者数据,同时保证访问审计与必要的权限校验。
接口清单:
添加血压数据
POST /blood-pressure/addAddBloodPressureDataRequest (application/json)R 成功/失败返回。成功返回 200 OK 与 message ok。@NotNull, @Min, @Max)。分页查询血压数据(本人)
POST /blood-pressure/listBaseQueryRequest (application/json)BloodPressureDataPageResponse,包含分页 metadata 与 BloodPressureDataResponse 列表。绑定方分页查询患者血压数据
POST /blood-pressure/list-by-bound-userpatientUserId (Long, 必填),bindingType (String, 可选),请求体 BaseQueryRequestboundUserId(从 token / SecurityUtils)UserBindingService.checkUserBinding 验证 boundUserId 与 patientUserId 的绑定关系DATA_ACCESS_DENIED(无权访问)bindingType 为空,则从检查结果中使用绑定类型list,返回 BloodPressureDataPageResponse。删除血压数据
POST /blood-pressure/deleteDeleteBloodPressureDataRequest,包含 id (String,必填)R 成功/失败返回。数据模型 (VO / PO)
请求/响应 VO:
AddBloodPressureDataRequest:systolicPressure : IntegerdiastolicPressure : IntegermeasureTime : LocalDateTimeBloodPressureDataResponse:id : StringsystolicPressure : IntegerdiastolicPressure : IntegermeasureTime : LocalDateTimecreateTime : LocalDateTime持久化表: t_blood_pressure_data(参见 docs/DB/t_blood_pressure_data.txt)
id, user_id, systolic_pressure, diastolic_pressure, measure_time, create_time, update_time, deleted_flag 等校验规则
systolicPressure 非空且在 60-250 mmHg 之间。diastolicPressure 非空且在 40-150 mmHg 之间。measureTime 非空且不晚于当前时间(可在 service 层严格校验)。权限与访问控制
UserBindingService.checkUserBinding),否则返回 DATA_ACCESS_DENIED。审计与日志
list-by-bound-user 接口中记录访问日志:记录访问方 ID、患者 ID、数据类型(blood_pressure)、查询时间范围。错误码
ErrorCode 枚举:
PARAMETER_ERROR (1001):请求参数缺失或校验失败SYSTEM_ERROR (1000):服务器内部错误UNAUTHORIZED (1002):未授权(token 无效)DATA_ACCESS_DENIED (4001):绑定方访问时无权限DATA_NOT_FOUND (4000):删除/查询的记录不存在服务与 Mapper 关系
BloodPressureDataService(负责业务校验、权限判断、持久化调用、分页查询实现)BloodPressureDataMapper) 与 t_blood_pressure_data 表交互兼容性与注意事项
LocalDateTime,前端需按约定时区/格式发送(建议 ISO-8601)。Page,Controller 将其转换为页面友好格式 BloodPressureDataPageResponse。示例
添加请求示例:
{
"systolicPressure": 120,
"diastolicPressure": 80,
"measureTime": "2025-11-20T08:00:00"
}
查询(分页)请求示例:
{
"pageNum": 1,
"pageSize": 20,
"startTime": "2025-11-01T00:00:00",
"endTime": "2025-11-21T23:59:59"
}
响应示例 (分页 records 片段):
{
"records": [
{
"id": "bp-001",
"systolicPressure": 120,
"diastolicPressure": 80,
"measureTime": "2025-11-20T08:00:00",
"createTime": "2025-11-20T08:05:00"
}
],
"total": 1,
"size": 20,
"current": 1
}
后续建议