Implementation & Verification · v1.0

江西体科所 InBody 数据中心接入与体重管理实施方案

以 datacenter 为设备中转,完整数据写入 kxxl 设备结果表,核心指标投影至体重管理,并以江西专属适配器和回归门禁保护既有客户。

PASS开发环境端到端自测
225已验证 InBody 指标映射
16体重管理投影字段
2目标仓库已实现
代码已实现开发环境通过待用户复核
当前结论225 个 InBody 字段已在 datacenter 与 kxxl 完整落库;体重投影、历史补传保护、失败隔离、组织结构 ID 列和导出已实现并自测通过。业务仓库代码未提交、未推送,等待用户审核。

1. 评审结论

方案已在 datacenter 与 kxxl 当前任务分支完成实现,并通过 PHP 5.6、前端构建和开发数据库端到端自测。

InBody770 已经完成设备对接。本次不重新设计设备协议、请求格式、鉴权、重试或脱敏规则,只增加江西项目的业务处理分支。

实现口径:USER_ID = staff.id;使用开发环境;设备数据优先;同日多测沿用现状;权限继续使用后台配置;kxxl 一期不展示报告图片。

2. 已确认事实

事项结论状态
datacenter InBody 接口已有人员查询、数据上传、报告图片上传三个接口已确认
广东参考实现sxtyj/gdtks_develop 使用标准设备结果主表与扩展表已确认
江西设备数据表kxxl 开发库已存在 8 张设备相关表已确认
InBody 指标映射relation_type=23,共 225 条,k1~k225 连续已确认
InBody 设备system_number=1、relation_type=23已确认
体重管理菜单、列表、趋势图、新增、编辑、导入、导出均已存在已确认
体重管理数据源当前页面只读取 ydy_body_composition,不读取 equipment_result*已确认
人员摘要当前体重管理会更新 ydy_staff.weight、weight_date已确认
江西配置datacenter dev/prod 已有 business=jxtks 配置已确认
联调环境用户确认直接使用开发环境,不建设独立 test 配置已确认

3. 系统边界

3.1 本期范围

3.2 本期非目标

4. 目标架构

InBody 设备
    │
    ├─ 查询人员
    ▼
datacenter /jxtks/Inbody770/*
    │
    ├─ 保存完整原始指标
    │    ├─ datacenter.equipment_result
    │    └─ datacenter.equipment_result_extend
    │
    ├─ 同步江西业务设备数据
    │    ├─ kxxl.equipment_result
    │    └─ kxxl.equipment_result_extend
    │
    └─ 投影体重管理数据
         ├─ kxxl.body_composition
         └─ 更新 kxxl.staff.weight / weight_date
                    │
                    ▼
          机能监控 → 体重管理页面

数据职责:

5. 主流程

  1. InBody 使用 USER_ID 调用 /jxtks/Inbody770/getUserInfo。
  2. datacenter 只在江西适配器中匹配有效运动员,并返回设备所需人员资料。
  3. 设备完成测试,调用 /jxtks/Inbody770/setInbodyData 上传测试时间与指标。
  4. datacenter 校验必填字段、时间、类型、范围、商户和设备。
  5. datacenter 按现有 InBody770 行为新增中央设备结果记录。
  6. datacenter 在 kxxl 业务库事务中写入 equipment_result 与 equipment_result_extend,成功后立即提交设备数据。
  7. 设备数据提交后,独立写入或更新 body_composition。
  8. 体重投影成功后,独立更新 staff.weight、weight_date。
  9. 接口以设备数据保存成功为主;体重投影失败不得回滚已经保存的设备数据。
  10. 用户进入“机能监控 → 体重管理”,查看趋势、列表和详情。

6. 业务规则

BR-001 人员唯一标识

使用 InBody.USER_ID = ydy_staff.id:不补零、不截断,不使用已确认存在重复的 personnel_umber。

江西按 staff.id 精确查询人员。只要 ID 匹配到人员即可测试,不附加 is_show、is_athlete 或其他状态条件;只有 ID 不存在时返回失败。

BR-002 完整设备数据

每次设备上传都按现有 InBody770 行为完整保存到 datacenter 和 kxxl 的 equipment_result、equipment_result_extend。本次不新增设备结果去重规则;同一报文重传时设备明细仍按现有行为新增,体重管理投影继续按人员和测试日期覆盖当天记录。

BR-003 体重管理指标投影

InBody 字段kxxl body_composition 字段
USER_HEIGHTheight
WTweight
PBFph_fat_rate
BMIbmi
TBWph_wat_qua
BFMph_fat_qua
SLMMusl
PROTEINprotein
LLALarmMuscle
LRARarmMuscle
LTBtrunkMuscle
LLLLlagMuscle
LRLRlagMuscle
BMRbmr
VFAInprotein
WHRWHR

禁止照搬现有江苏适配中的不兼容字段:

BR-004 人员最新体重

写入体成分后,必须重新查询该人员 ExamTime 最新记录,再更新 staff.weight、weight_date。历史补传不得把当前体重回退成历史值。

BR-005 同日多次测试

沿用现有处理方式:

该规则已由用户确认:江西沿用现有 InBody 体重管理逻辑。

BR-006 组织结构人员 ID 展示与导出

7. 既有 API(保持不变)

API ID方法路径必填输入成功响应幂等与重试
API-INBODY-01沿用现状/jxtks/Inbody770/getUserInfoUSER_IDIsResult、INBODY_USER_INFO、ErrorMsg查询无副作用
API-INBODY-02沿用现状/jxtks/Inbody770/setInbodyDataUSER_ID、DATETIMES、指标IsResult、ErrorMsg设备结果每次上传新增;同日体重投影覆盖
API-INBODY-03沿用现状/jxtks/Inbody770/setInbodyImageUSER_ID、DATETIMES、INBODY_IMAGEIsResult、ErrorMsg沿用现有图片关联方式

三个接口及其方法、Content-Type、字符集、时间格式、图片、失败响应、重试和鉴权全部保持现状。本次只在接口内部增加江西业务落库逻辑,不改变设备请求与响应。

8. 保存顺序与失败处理

kxxl 业务库只有设备主表和扩展表处于同一事务:

  1. equipment_result
  2. equipment_result_extend

body_composition 和 staff.weight/weight_date 是设备数据提交后的业务投影,不加入设备数据事务。

处理优先级固定为:datacenter 设备数据 → kxxl 设备数据 → body_composition → staff。设备数据保存成功后,即使体重投影或人员摘要更新失败,也不得删除、回滚或判废设备数据;记录投影失败信息,后续可依据设备结果重新执行投影。

接口设备上传结果以设备数据是否保存成功为准,避免体重管理投影异常导致设备重复上传。

业务接口接收和处理真实原始报文;应用日志不得复制完整图片、身份证、数据库凭据或整份设备报文,只记录排障必需的字段摘要、traceId 和结果 ID。

9. 既有客户零影响

江西逻辑必须仅在 business=jxtks 时生效。在现有 InBody770 处理中增加最小化的江西业务分支,不新增设备接口和设备端配置。

保护规则:

必须覆盖的旧客户回归:默认人员编号客户、广东体科所、江苏体科所、秦皇岛特殊设备表客户。回归必须使用隔离测试库或固定夹具,不对真实客户库发起写请求。

10. 实施计划

阶段一:datacenter 江西业务适配(已完成)

阶段二:体重管理投影(已完成)

阶段三:组织结构人员 ID 展示与导出(已完成)

阶段四:开发环境验收与旧客户回归(已完成自动化与数据层自测)

11. 测试与验收

分类必测场景通过标准
人员查询使用现有接口传入存在或不存在的江西 staff.id存在即返回正确人员;不存在返回失败
数据上传正常上传一条 InBody770 结果datacenter 与 kxxl 设备主表、扩展表均有完整数据
体重投影正常上传、同日再次上传body_composition 按现有逻辑新增或覆盖
人员体重正常上传、历史补传staff.weight/weight_date 始终对应最新体成分记录
重复上传相同测试重复上传设备明细沿用现有新增行为;同日体重投影保持一条并覆盖
设备事务设备主表成功、扩展表失败kxxl 设备主表与扩展表一起回滚
投影隔离body_composition 或 staff 更新失败设备数据保留,上传不被判废,并记录投影失败
页面体重列表、趋势和详情能看到设备写入的数据且数值一致
组织结构列表查看任意人员“ID”显示 staff.id,位置在现有“编号”前
组织结构导出导出筛选结果导出文件包含“ID”列,值与列表及数据库一致
回归广东、江苏、默认客户、特殊表客户旧响应和数据库行为不变

12. 实现与自测结果

代码已落在两个仓库的当前任务分支,未提交、未推送,保留给用户审核。开发环境自测结果:

详细记录见 jxtks-inbody-self-test-20260916.md。

真实联调使用真实设备请求和真实业务数据,不修改或脱敏接口报文。仅当个人信息或凭据被复制到聊天、文档、截图等外部材料时,才保护该材料中的敏感值;这不属于业务接口处理。

13. 已确认实施口径

实现与开发环境自测已经完成,下一步由用户审核代码与页面;未执行提交、推送、流水线或生产部署。