06 · 开发 · 回写

金蝶里出现了两张一样的草稿

集成工程师保证回写只记一次。重试如果换了新单号,外部系统就会诚实地记两笔。本地库存事务不归他。

两套系统之间的接口调试
情况 本地 外部
尚未发送 待回写 无单
超时不知结果 保持待回写,用原幂等号查询 有则认,无则再发同号
明确成功 记下外部单号 一张草稿
明确拒绝 待人工,停止自动重试 不继续堆草稿

集成工程师对得上字段,也对得上「只记一次」

方案规定了留和写。集成工程师把写做成可重复执行的同步:字段映射、方向、幂等号、失败分类。岗位特点是不把超时当成失败后立刻新建。超时的意思是不知道对方记没记。再插入一次,就会出现两张草稿。他用业务单号或专门的幂等号作为外部单据的唯一键,对方若返回已存在,就绑定已有单号,而不是报错后人工再录。

映射表要写清主数据以谁为准。物料编码以金蝶为准时,本地没有的编码直接失败,不在集成层临时创建。临时创建会绕过数据治理专员。金额、税率、仓库编码的精度和空值也要写上。空仓库如果被映射成默认总仓,货会进错地方且接口看起来成功。

人和队列

自动重试只用于不确定结果和对方暂时不可用。业务拒绝,例如期间已关账、物料停用,进入人工队列并通知财务,停止重试。人工处理完要能用同一幂等号继续,不能另起一单。集成工程师提供查询页:本地单号、外部单号、最后一次错误原文、已重试次数。没有这页,实施只能查数据库。

双草稿是怎么出现的

完工入库回写金蝶。第一次请求超时,任务被标记失败并立刻换新号重发。金蝶实际上两张草稿都收下了。财务几乎审核了其中一张。集成工程师改为超时不改号,先按幂等号查询,查到就绑定,查不到才发同一号。已经产生的双草稿列出清单,财务作废其中一张,本地绑定留下的那张。关账类错误不再重试。

之后用拔网线的方式和关账的物料各测一次。两次行为必须符合表里的两行,集成才算交付。对方接口升级时,集成工程师先在预发跑一张完工入库和一张超时重试。字段少了一个也要失败得明显,不能把缺失税率当成零。零税率的草稿一旦审核,就是一张错的凭证。对方返回的成功如果只是受理,不代表已生成草稿。他要区分受理号和业务单号,绑定必须等业务单号出现。把受理号当成业务单号,财务会在金蝶里找不到那张单子。每天第一次回写前,他看队列里最老一条的年龄和上一次明确成功的单号。年龄突然变长,先停自动重试,查对方是否关账或网络是否中断。让队列盲目地一遍遍重发,只会把受理号堆高。

恢复之后按原幂等号逐条确认,确认一条绑定一条。绑定关系没建立前,本地不允许把状态改成已回写。状态先改、绑定后补,财务会在两边都找不到完整证据。

映射变更也走版本。财务改了税率字段的位置,集成工程师先在预发对一张完工单,确认草稿税额,再换生产。直接在生产改映射,会把当晚所有回写写成错税。错税的草稿一旦被审核,就只能红冲,不是再调一次接口能盖住的。

回到时间线

哪一张单会写进已经在用的系统

集成按这张单设计重试。