服务端解析与写表
把离线填报的导出结果解析为业务数据,并完成主子表、明细、签名与附件的正式入库。
导出结果回到活字格后,还需要服务端命令把它解析为业务数据并写入数据表。解析工作越依赖“表单定义”而不是“字段外观”,后续就越稳定。
解析原则
- 用
patternId或schemaVersion找到对应表单定义,再按定义把itemId映射到业务字段;不要依赖itemId中下划线的数量或固定位置去猜测表关系。 - 顶层字段(如
PDA_Inspection_TaskNo)通常是主表数据;子表、主子表拆分应依据表单定义或服务端映射配置完成。 listItem返回的是 JSON 字符串,需先反序列化再逐行写入子表。signatureItem返回的是 JSON 字符串,反序列化后可按用户逐个处理签名。status、isRead、createdTime、updatedTime可原样保存为填报记录元数据;是否为“已上传”以业务写表结果为准,不应依赖 HAC 的本地状态。- 图片与文件的
values是服务器附件临时文件标识,只有完成写表后附件才正式归属业务记录。
图片占位
itemId 到业务字段的映射示意
建议准备一张映射图:左侧列出导出结果中的 itemId,中间是表单定义或服务端映射配置,右侧标出它应写入的主表、子表或附件字段。
示例可用 PDA_Inspection_TaskNo 与 PDA_Inspection_Issues_Description,分别指向主表任务号和问题子表描述。
主数据解析
导出的每条记录通常对应业务主表中的一条数据。解析时可以按下面步骤处理:
- 从
records中取出一条记录,recordId可作为设备端流水标识。 - 使用
patternId找到当前记录使用的表单定义版本。 - 读取
values,把表单定义中属于主表的itemId映射为主表字段。 - 把
recordId、createdTime、updatedTime等元数据按需要存入主表,便于后续核对与追溯。
itemId 示例:
| 导出结果 key | 可能的业务含义 | 建议的处理方式 |
|---|---|---|
PDA_Inspection_TaskNo | 巡检任务编号 | 写入主表字段 |
PDA_Inspection_TaskDate | 巡检日期 | 写入主表字段 |
PDA_Inspection_Issues_Description | 问题明细中的问题描述 | 作为 listItem 子项写入子表 |
注意,这里的“可能含义”只是示例。实际项目必须由表单定义或服务端映射配置决定,禁止靠 itemId 文本特征推断。
主子表与明细列表
明细列表在导出结果中保持 JSON 字符串。假设配置了一个“问题列表”listItem,其回传值可能类似:
"[{\"description\":\"挡鼠板破损\",\"level\":\"high\"}]"写入时按以下步骤处理:
- 先找到该
listItem的children模板,确认每一行包含哪些子field。 - 反序列化列表字符串,得到行数组。
- 建立子表记录,并写入主表记录 ID 作为外键。
- 逐行把子
field的itemId映射到子表字段。
listItem 本身不参与字段级解析,因此服务端需要自行完成反序列化、行循环和子表写入。
签名处理
signatureItem 的回传值同样是 JSON 字符串,上传完成后 fileName 会被替换为服务器附件临时文件标识。示例:
"[{\"userName\":\"张三\",\"fileName\":\"TEMP_SIGNATURE_ID_0001\",\"updateTime\":46372.6046875}]"服务端处理签名时:
- 反序列化签名字符串。
- 逐个读取签名人员的
userName与签名文件fileName。 - 在需要保存签名的业务表中写入对应字段,或在单独的签名子表中按人员保存。
附件正式归属
导出阶段上传的图片、文件和签名只得到附件临时文件标识。把附件从“临时”变为“正式”,需要在业务写表时完成。
常见做法是:
- 写表前先创建主表或子表记录。
- 通过附件临时文件标识读取活字格服务器临时目录中的文件。
- 将附件移动到业务附件目录,并更新业务表中存储的附件路径或标识。
- 只有业务记录已经成功写入,才允许后续删除设备上对应的已读记录。
图片占位
附件从临时目录到正式归属的时序
建议准备一张时序或流程图,展示上传命令把附件放到临时目录、服务端解析导出结果、写表后附件正式归属、设备记录标记并清理。
图中可强调“写表成功前不删除设备记录”,用红色或警示色标出禁止提前删除的边界。
回传后的确认动作
业务写表完成并确认数据安全后,再回到“上传离线表单”命令完成设备数据维护:
- 使用“标记离线记录已导出”,传入
项目编号与记录编号。 - 数据确认安全落库后,使用“删除已读离线记录”清理已读记录。
- 整个项目确认不再需要时,再使用“删除离线表单项目”。