1. Query Key-Value Data
ACal API(zh-CN)
  • Get Started
    • 快速入门
    • 对接方案
  • API Functions
    • Accounts
      • README
      • 登录(Auth)
      • 登出
    • DUT
      • README
      • Others
        • 按条件查询被检器具数量
        • 按条件查询被检器具信息
        • 根据ID获取被检器具信息
        • 批量同模板保存仅ID不同的被检器具信息
      • 批量保存或更新被检器具信息
      • 删除被检器具
    • Test Records
      • README
      • Query Key-Value Data
        • Key-Value Data 响应报文规范
        • 按条件查询记录字典数据
          POST
        • 根据ID获取记录字典数据
          POST
        • 查询未同步记录字典数据
          POST
      • Export Record Excel File
        • 按条件导出记录Excel
        • 根据ID导出记录Excel
        • 按模板导出记录Excel
      • Export Record PDF File
        • 按条件导出记录PDF
        • 根据ID导出记录PDF
        • 按模板导出记录PDF
      • Export Certificate Excel File
        • 按条件导出证书Excel
        • 根据ID导出证书Excel
        • 按模板导出证书Excel
      • Export Certificate PDF File
        • 按条件导出证书PDF
        • 根据ID导出证书PDF
        • 按模板导出证书PDF
      • Query Structured Data
        • 按条件查询记录结构化数据
        • 根据ID获取记录结构化数据
        • 查询未同步记录结构化数据
      • Others
        • Data Sync Status
          • 查询未同步记录数量
          • 更新记录同步状态
        • 删除记录
        • 按条件查询记录头信息结构化数据
        • 按条件查询同一校准任务记录字典数据
      • 按条件查询记录数量
        POST
    • Others
      • References
        • 查询满足条件的被检器具
        • 按ID获取被检器具
        • 查询满足条件的被检器具数量
        • 查询标准器具的设备类型
        • 保存或更新DUT信息
        • 删除DUT信息
      • Templates
        • 获取指定被检类型的用户模板列表
      • Reports
        • 按条件查询记录报表数据
        • 按条件导出记录报表CSV
        • 按条件查询记录报表数据数量
  • Releases
    • Changelog
  1. Query Key-Value Data

Key-Value Data 响应报文规范

Key-Value Data 响应报文规范(字段映射表)#

关联接口#

接口名称方法与路径
按条件查询记录字典数据POST /ACal/TestRecordService/QueryMessageByCondition
根据ID获取记录字典数据POST /ACal/TestRecordService/QueryMessageByID
查询未同步记录字典数据POST /ACal/TestRecordService/GetUnsyncRecordMessage
本文档自包含全部参考信息:仪表类型与模板文件的完整字段映射表见附录 A。

1. 概述#

Key-Value Data 报文用于返回检测记录的字典数据。其数据组织方式源自 ACal 的 Excel 导出机制,JSON 节点与 Excel 单元格一一对应:
JSON(报文)Excel(模板 / 导出文件)说明
Key(如 "B6"、"H3")单元格地址列字母 + 行号
Value单元格内容检测数据的实际值
Data 下的节点(BaseInfo、CalData1)工作表(Sheet)节点与工作表一一对应
一句话概括:接口把 Excel 单元格原样搬进了 JSON——Key 是单元格地址,Value 是单元格内容。

2. 数据来源:Excel 导出与隐藏工作表#

ACal 支持将检测记录导出为 Excel 格式(证书/记录)。导出的 Excel 中,所有检测数据都写在一个或多个隐藏工作表(Sheet)中——证书上可见的排版内容只是"壳",真正的数据源是这些隐藏 Sheet。
查看隐藏 Sheet 的方法:在 Excel 底部的工作表标签上点击右键 → "取消隐藏(U)",选择要显示的工作表即可。
隐藏 Sheet 中最关键的两个工作表:
工作表存放内容对应报文节点举例
仪表信息工作表被检仪表、送检机构、检校环境参数、检校机构、检校规范、标准仪表、检校结论等基本信息Data.BaseInfo被检仪表名称保存在 BaseInfo 工作表的 B6 单元格
原始记录工作表各检校项目的结论、检校过程中的原始数据Data.CalData1外观检查结论保存在 CalData1 工作表的 H3 单元格

2.1 单元格地址规则#

模板中的每个数据项都占用一个固定单元格。单元格地址与 Excel 默认引用方式一致:列字母 + 行号(如 B6 即 B 列第 6 行)。在 Excel 中选中任一单元格后,编辑栏左侧的"名称框"会显示其地址,这是确认一个 Key 所指位置最直接的方法。
以压力仪表模板 JJG52-2013.xls 的 BaseInfo 工作表为例,布局示意如下:
A 列B 列...G 列
第 4 行记录编号 ← G4
第 6 行被检仪表名称 ← B6
第 28 行检定结论 ← G28
CalData1 工作表同理:H3 单元格存放外观检查的结论,H60 / I60 存放轻敲后的上、下行程示值。
报文中的 Data.BaseInfo["B6"] 与模板中的 BaseInfo!B6 指向同一单元格——在模板中定位到该地址,即可确定该字段的业务含义。

3. 报文结构解析#

报文自外向内共四层:响应外层 → Reports[] → Content(转义 JSON 字符串)→ Data(单元格键值对):
响应报文
├── StatusCode
└── Reports[]                        ← 记录数组,每条记录一个对象
    ├── ID / RecordNo / CertNo ...   ← 常规业务字段(可直接使用)
    └── Content                      ← 转义的 JSON 字符串 ★
        └── 反转义后
            ├── ID                   ← 记录标识
            ├── DUTClassID           ← 仪表类别编号
            ├── DUTTypeID           ← 被检仪表类型编号 ★ 查映射表的钥匙
            └── Data
                ├── BaseInfo        ← 基本信息(Key = 单元格地址)
                └── CalData1        ← 检校数据(Key = 单元格地址)

3.1 外层:Reports[] 业务字段#

字段类型说明
IDstring记录唯一标识
RecordNostring记录编号
CertNostring证书编号
FactoryNostring出厂编号
SampleNostring样品编号
OrderNostring委托单编号
ReserveNoOne / ReserveNoTwostring预留字段,可能为 null
Contentstring检测数据主体,转义的 JSON 字符串

3.2 Content:转义与反转义#

检定数据整体作为一个带转义符的 JSON 字符串返回,Key 为 Content。主要结构如下所示:
{
  "StatusCode": 0,
  "Reports": [
    {
      "ID": "0EC295E5BC324A978B079FB534BA6745",
      "RecordNo": "D26090094",
      "CertNo": "R26090094",
      "FactoryNo": "WK-2208-3125",
      "SampleNo": "SMP-0100",
      "OrderNo": "CN-0100",
      "ReserveNoOne": null,
      "ReserveNoTwo": null,
      "Content": "{\"ID\":\"0EC295E5BC324A978B079FB534BA6745\",\"DUTClassID\":100,\"DUTTypeID\":100100,\"Data\":{\"BaseInfo\":{\"B4\":..."
    }
  ]
}
Content 在三个阶段的形态对比:
阶段形态示例
系统内部JSON 对象{"ID":"...","Data":{...}}
报文传输转义字符串(Content 的值)"{\"ID\":\"...\",\"Data\":{..."
客户端处理后JSON 对象(反转义 / 二次解析)同系统内部
处理方式:解析外层 JSON 后,对 Content 的值再做一次反序列化。以 JavaScript 为例:

3.3 内层:反转义后的 Content#

反转义后的结构如下(值仅为示意,实际为该单元格的内容):
{
  "ID": "0EC295E5BC324A978B079FB534BA6745",
  "DUTClassID": 100,
  "DUTTypeID": 100100,
  "Data": {
    /* 基本信息 */
    "BaseInfo": {
      "B6": "被检仪表名称",
      "B8": "型号/规格",
      "B10": "出厂编号",
      "G4": "记录编号",
      "G6": "证书编号",
      "G28": "检定结论"
    },
    /* 校准数据 */
    "CalData1": {
      "H3": "外观检查结论",
      "C25": "设定点",
      "H60": "轻敲后示值上行程",
      "I60": "轻敲后示值下行程"
    }
  }
}
顶层字段说明:
字段说明
DUTClassID仪表类别编号(100 压力仪表 / 200 温度仪表),用于查附录 A 映射表
DUTTypeID被检仪表类型编号,查映射表确定模板文件的主键
Data.BaseInfo基本信息键值对,与模板"仪表信息工作表"对应
Data.CalData1检校数据键值对,与模板"原始记录工作表"对应

3.4 Data 节点与模板工作表的对应关系#

Data 下以单元格地址为 Key 的节点对应模板中的工作表。以压力仪表为例:
Data 节点内容对应模板工作表(压力仪表)
BaseInfo基本信息BaseInfo
CalData1检校项目数据记录1 / 电接点记录1 / 记录(因被检仪表类型而异)
不同仪表类别对应的工作表名不同(如温度仪表的仪表信息工作表为 Info),完整对应关系见附录 A。

4. 查表规则(四步搞定)#

开发人员拿到 Key-Value 报文后,按以下 4 步即可确定每个 JSON 节点的含义。

第 1 步:反转义 Content#

解析外层报文后,对 Content 字符串做一次反转义(unescape)并解析为 JSON 对象(见 3.2 节)。

第 2 步:解析 Content,进入 Data 节点#

读取 DUTClassID / DUTTypeID,并定位 Data 下的 BaseInfo、CalData1 节点(见 3.3 节)。

第 3 步:把 Key 当作单元格地址定位#

Data.BaseInfo / Data.CalData1 下的每个 Key(如 B6、H3)就是Excel 单元格地址。按 工作表名 + 单元格地址 即可在 Excel 中定位:
Data.BaseInfo["B6"] → 打开对应模板 Excel 的 BaseInfo 工作表,看 B6 单元格 → "被检仪表名称";
Data.CalData1["H3"] → 打开 CalData1 工作表,看 H3 单元格 → "外观检查结论"。

第 4 步:按 DUTTypeID 查映射表,确定用哪个模板文件#

不同仪表类型使用不同的证书模板 Excel,单元格布局随模板而异。必须先用报文中的 DUTTypeID 在附录 A 的映射表中查出"模板文件"和"工作表名",再用第 3 步的单元格地址到该模板中查含义。

4.1 端到端示例#

以 DUTTypeID = 100100(普通指针压力表)为例:
步骤操作结果
1反转义 Content得到 JSON 对象
2读取 DUTTypeID100100
3查附录 A 映射表模板 JJG52-2013.xls;仪表信息工作表 BaseInfo;原始记录工作表 记录1
4定位 Data.BaseInfo["B6"]模板 BaseInfo!B6 → 被检仪表名称
4定位 Data.CalData1["H3"]模板 记录1!H3 → 外观检查结论

4.2 处理时序#

模板文件获取路径:【配置中心】→【用户模板中心】→【导出】→【系统模板】,模板目录见映射表(如 Templates\Certificate\Verification\Pressure)。

5. 仪表类型编号体系#

编号体系说明:
DataTypeID / DUTClassID:仪表类别编号(100 压力仪表 / 200 温度仪表);
DUTTypeID:被检仪表类型编号,与 DUTClassID 前缀对应(压力 100xxx、温度 2xxxxx),与模板文件一一对应,完整对应关系以附录 A为准。
仪表类别DataTypeID / DUTClassIDDUTTypeID 范围模板目录
压力仪表100100100 ~ 100400Templates\Certificate\Verification\Pressure
温度仪表200200000 ~ 220020Templates\Certificate\Verification\Temperature

6. 注意事项#

Q1:为什么检定数据是一个字符串,而不是 JSON 对象?
Content 的值是转义后的 JSON 字符串。客户端解析外层报文后,需对 Content 再做一次反序列化(见 3.2 节)。
Q2:可以直接用 JSON 节点名当工作表名吗?
不可以。Data 下的节点对应模板中的工作表,但工作表名因仪表类别和被检仪表类型而异(如温度仪表的仪表信息工作表为 Info,压力仪表的原始记录工作表名为 记录1 / 电接点记录1 / 记录)。节点与模板工作表名的对应关系以附录 A 映射表为准,定位时不要直接套用节点名作为工作表名。
Q3:不同仪表类型的报文,同一个 Key 含义相同吗?
不一定。单元格布局随模板文件而异,DUTTypeID 不同则模板可能不同。必须先按 DUTTypeID 查映射表确定模板文件,再按单元格地址到该模板中定位含义。
Q4:模板文件从哪里获取?
【配置中心】→【用户模板中心】→【导出】→【系统模板】,模板目录见附录 A 映射表(如 Templates\Certificate\Verification\Pressure)。

7. 查表规则总结#

一句话规则:Key = 单元格地址,工作表 = Data 下的节点名,模板文件由 DUTTypeID 查映射表确定。

附录 A:仪表类型与字段映射模板完整对应关系#

查表规则见第 4 节;编号体系说明见第 5 节。
仪表类别被检仪表类型DataTypeIDDUTClassIDDUTTypeID模板文件模板目录仪表信息工作表原始记录工作表
压力仪表普通指针压力表100100100100JJG52-2013.xlsTemplates\Certificate\Verification\PressureBaseInfo记录1
压力仪表电接点指针压力表100100100105JJG52-2013.xls同上BaseInfo电接点记录1
压力仪表精密指针压力表100100100110JJG49-2013.xls同上BaseInfo记录1
压力仪表数字压力表100100100200JJG875-2019.xls同上BaseInfo记录1
压力仪表压力变送器100100100300JJG882-2019.xls同上BaseInfo记录1
压力仪表压力开关100100100400JJG544-2011.xls同上BaseInfo记录
温度仪表贵金属热电偶200200200000JJG141-2013.xlsTemplates\Certificate\Verification\TemperatureInfo记录
温度仪表廉金属热电偶200200200100JJF1637-2017.xls同上Info记录
温度仪表热电阻200200200200JJG229-2010.xls同上Info记录
温度仪表温度变送器200200220010JJF1183-2007.xls同上Info记录
温度仪表温度开关200200220020JJF1632-2017.xls同上Info记录
温度仪表玻璃液体温度计200200210000JJG130-2011.xls同上Info记录
温度仪表双金属温度计200200210020JJF1908-2021.xls同上Info记录
模板目录导出步骤:【配置中心】→【用户模板中心】→【导出】→【系统模板】。
修改于 2026-09-24 09:43:11
上一页
README
下一页
按条件查询记录字典数据
Built with