4. 数据模型设计:TMS轨迹表与ERP签收表结构及关联键

一致性校验测试的核心基础是数据模型。TMS(运输管理系统)的轨迹节点与ERP(企业资源计划系统)的签收记录,在表结构设计上存在天然差异。本章将详细定义两张核心表的结构、字段含义,并设计用于关联校验的键(运单号、订单号),为后续的校验规则与测试脚本奠定数据基础。

4.1 TMS轨迹表结构设计

TMS轨迹表用于记录运输过程中每个节点的状态变更,包括时间、地点、操作人及异常信息。每一条记录代表一个轨迹节点。

字段名 数据类型 主键/外键 说明
track_id BIGINT 主键 轨迹记录唯一标识,自增
waybill_no VARCHAR(64) 关联键 运单号,TMS内部唯一
order_no VARCHAR(64) 关联键 订单号,与ERP系统共享
node_code VARCHAR(32) — 节点编码,如 PICKUP、ARRIVE_HUB、DELIVERED
node_name VARCHAR(128) — 节点中文名称,如“已揽收”、“到达分拨中心”、“已签收”
operate_time DATETIME — 节点操作时间,精确到秒
location VARCHAR(256) — 操作地点描述,如“上海市浦东新区XX路XX号”
operator VARCHAR(64) — 操作人姓名或工号
remark TEXT — 备注信息,用于记录异常原因或特殊说明
create_time DATETIME — 记录创建时间
设计要点: TMS轨迹表采用“事件驱动”模型,每个节点独立成行。运单号 waybill_no 在TMS内部唯一,而订单号 order_no 用于跨系统关联。节点编码 node_code 应使用枚举值,避免自由文本带来的校验歧义。

4.2 ERP签收表结构设计

ERP签收表记录最终签收环节的确认信息,通常只包含一次签收动作,但可能包含多次拒收或部分签收的明细。

字段名 数据类型 主键/外键 说明
sign_id BIGINT 主键 签收记录唯一标识
order_no VARCHAR(64) 关联键 订单号,与TMS系统共享
waybill_no VARCHAR(64) 关联键 运单号,用于与TMS轨迹匹配
sign_status TINYINT — 签收状态:1-正常签收,2-拒收,3-部分签收
sign_time DATETIME — 签收时间,精确到秒
sign_person VARCHAR(64) — 签收人姓名
sign_company VARCHAR(128) — 签收单位名称
reject_reason VARCHAR(512) — 拒收原因,仅当 sign_status=2 时有效
update_time DATETIME — 最后更新时间
注意: ERP签收表通常不记录运输过程中的中间节点,只保留最终签收结果。因此,校验测试需要将TMS的“已签收”节点与ERP的签收记录进行比对,而非逐节点匹配。

4.3 关联键设计:运单号与订单号

关联键是跨系统数据一致性的桥梁。本课程采用双关联键策略:运单号(waybill_no) 和 订单号(order_no)。

  • 运单号(waybill_no):在TMS内唯一标识一次运输任务。ERP侧可能通过接口回传或手动录入获得该号。
  • 订单号(order_no):在ERP内唯一标识一笔销售订单。TMS在接收运输任务时,必须携带该订单号。

关联规则如下:

  1. 正向匹配:使用 waybill_no 作为主关联键,order_no 作为辅助校验键。当运单号一致时,再验证订单号是否匹配。
  2. 反向追溯:当运单号匹配失败时,使用 order_no 进行二次关联,查找是否存在订单号一致但运单号不一致的记录。
  3. 异常处理:若两个关联键均无法匹配,则标记为“孤立记录”,需人工介入核查。
校验测试核心逻辑: 对于同一笔订单,TMS轨迹表中必须存在一个节点编码为 DELIVERED 或 SIGNED 的记录,且该记录的 operate_time 与ERP签收表中的 sign_time 时间差应在允许阈值内(通常为 ±5 分钟)。
TMS轨迹表与ERP签收表关联模型 TMS 轨迹表 track_id (主键) waybill_no (关联键) order_no (关联键) node_code / node_name operate_time / location operator / remark ERP 签收表 sign_id (主键) order_no (关联键) waybill_no (关联键) sign_status (1/2/3) sign_time / sign_person reject_reason / update_time waybill_no order_no 双关联键:运单号为主,订单号为辅,互为校验

4.4 关联键校验逻辑与示例

在实际测试中,关联键的匹配并非总是完美。以下列出三种典型场景及对应的SQL校验逻辑。

4.4.1 场景一:完全匹配

TMS轨迹表中存在 waybill_no 和 order_no 均与ERP签收表一致的记录,且节点编码为“已签收”。

-- 查找完全匹配的记录
SELECT t.waybill_no, t.order_no, t.operate_time AS tms_time, e.sign_time AS erp_time
FROM tms_track t
INNER JOIN erp_sign e ON t.waybill_no = e.waybill_no AND t.order_no = e.order_no
WHERE t.node_code = 'DELIVERED'
  AND ABS(TIMESTAMPDIFF(SECOND, t.operate_time, e.sign_time)) <= 300;

4.4.2 场景二:运单号匹配但订单号不匹配

可能由于系统间数据同步延迟或人工录入错误导致。此时需要标记为“订单号不一致”异常。

-- 查找运单号一致但订单号不一致的记录
SELECT t.waybill_no, t.order_no AS tms_order, e.order_no AS erp_order
FROM tms_track t
INNER JOIN erp_sign e ON t.waybill_no = e.waybill_no
WHERE t.order_no != e.order_no;

4.4.3 场景三:孤立记录

某张运单在TMS中存在轨迹,但在ERP中完全找不到对应的签收记录。

-- 查找TMS中存在但ERP中不存在的运单
SELECT t.waybill_no, t.order_no, MAX(t.operate_time) AS last_time
FROM tms_track t
LEFT JOIN erp_sign e ON t.waybill_no = e.waybill_no
WHERE e.sign_id IS NULL
GROUP BY t.waybill_no, t.order_no;
关联键校验流程 开始校验 步骤1:按 waybill_no 匹配 匹配? 步骤2:校验 order_no 步骤3:按 order_no 匹配 一致? 匹配? 一致:通过校验 不一致:标记异常 双键校验确保数据关联的鲁棒性

4.5 数据模型设计总结

本章定义的数据模型是后续所有校验测试的基石。核心要点如下:

  • TMS轨迹表:事件驱动,多行记录,包含完整运输链路。
  • ERP签收表:结果驱动,单行记录,聚焦最终签收状态。
  • 关联键:采用 waybill_no + order_no 双键策略,提高匹配容错率。
  • 时间阈值:TMS签收节点时间与ERP签收时间允许 ±5 分钟偏差,超出则视为异常。
测试建议: 在准备测试数据时,应覆盖完全匹配、部分匹配、不匹配以及孤立记录四种情况。建议使用数据生成工具构造至少 100 条包含各种边界条件的测试记录,以充分验证校验逻辑的健壮性。