2026-08-19 档口入库码回写全部失败,典型错误:
已确认 0/1 件;写入第 1 个单件入库码失败,系统不会自动重试: 顺运宝接口 /am/stock/detail/updateDetailCode 业务失败: msg=Can not parse the parameter "1787108752485" to Integer value. code="-1"
"1787108752485" 换算为 2026-08-19 11:05:52.485 CST,就是请求发出时的毫秒时间戳,不是档口入库码,也不是货运单 id。
"1787108752485"
2026-08-19 11:05:52.485 CST
根因:#250 把 updateDetailCode 的查询参数 t 从 #234 的 "0" 改成 time.Now().UnixMilli()。顺运宝把 t 绑成 Java Integer(上限 2147483647)。当前毫秒是 13 位,必然溢出,所以每条回写都在真正写 code 之前被拒。远端一码都没写上,所以是「已确认 0/1 件」。
updateDetailCode
t
#234
"0"
time.Now().UnixMilli()
Integer
2147483647
code
时间线:
GET .../updateDetailCode?t=0&id=...
POST
「系统不会自动重试」是既定门禁,不是第二处故障。
UpdateDetailCode
docs/admin/08-顺运宝接口.md
t=0
createDetail
deleteInnerCode
已确认方案:恢复 #234 的 t=0,保留 #250 的 POST。
#250
预计修改文件:
admin/syb/client.go
UnixMilli()
admin/syb/client_test.go
t=="0"
不动数据库,不改 Admin/Client HTTP 契约,不改采购下单。
UnixMilli
Unix
POST /am/stock/detail/updateDetailCode
id
detailId
GOTOOLCHAIN=go1.23.0
go test ./syb -count=1
go test ./... -count=1
go build ./...
go vet ./...
全部从 admin/ 执行:
admin/
$env:GOTOOLCHAIN="go1.23.0" go test ./syb -run InnerCodeWrite -count=1 go test ./... -count=1 go build ./... go vet ./... Remove-Item Env:GOTOOLCHAIN
预期:UpdateDetailCode 相关测试通过,且失败输出里不能再出现 t 为 13 位数字。本工单不连生产顺运宝、不部署。
client.go
08
代码已按工单改完,尚未提交、尚未部署。
改动:
验证(admin/,GOTOOLCHAIN=go1.23.0):
go test ./syb -run InnerCodeWrite -count=1 → ok go test ./... -count=1 → ok go build ./... → 通过 go vet ./... → 通过
未验证:未向真实顺运宝发送写请求;未改 19 号失败记录状态;未部署生产。修复上线后由操作员重新勾选回写,不自动重试。
用户已验收。实现提交 417cd73,归档 1cf0995。随后按部署工单发布生产。
417cd73
1cf0995
已随 #279 发布到生产 1cf0995。19 号失败记录不会自动重试,需重新勾选回写。
No dependencies set.
The note is not visible to the blocked user.
基本信息
要解决什么
2026-08-19 档口入库码回写全部失败,典型错误:
"1787108752485"换算为2026-08-19 11:05:52.485 CST,就是请求发出时的毫秒时间戳,不是档口入库码,也不是货运单 id。根因:#250 把
updateDetailCode的查询参数t从#234的"0"改成time.Now().UnixMilli()。顺运宝把t绑成 JavaInteger(上限2147483647)。当前毫秒是 13 位,必然溢出,所以每条回写都在真正写code之前被拒。远端一码都没写上,所以是「已确认 0/1 件」。时间线:
GET .../updateDetailCode?t=0&id=...,t固定"0"。POST,t改为当前毫秒。「系统不会自动重试」是既定门禁,不是第二处故障。
做什么 / 不做什么
UpdateDetailCode的t改回固定"0",并让测试断言就是"0",不能只断言非空。docs/admin/08-顺运宝接口.md的写码契约,写明t必须能进 Java Integer,以及 #250 毫秒时间戳为什么不能再用。t改成 Unix 秒。秒目前能进 Integer,但 2038 年仍会溢出;防缓存不是这个写接口的契约,t=0才是 #234 已通过参数绑定的值。t。#234 一直带t=0;省略可能走到另一个绑定路径,没有生产证据。t,避免把方法和时间戳两个契约混在一次最小修复里。createDetail、deleteInnerCode、匹配、排队、检查点、数据库、页面和 Client 接口。怎么做
已确认方案:恢复
#234的t=0,保留#250的 POST。预计修改文件:
admin/syb/client.go:UpdateDetailCode把t从UnixMilli()改回"0",注释写清防的是 Integer 溢出,不是优化。admin/syb/client_test.go:写码请求必须断言t=="0";13 位毫秒时间戳视为失败。docs/admin/08-顺运宝接口.md:契约改回t=0,并记录 #250 回归原因。不动数据库,不改 Admin/Client HTTP 契约,不改采购下单。
验收标准
UpdateDetailCode发出的查询参数t固定为"0",不再调用UnixMilli或Unix。POST /am/stock/detail/updateDetailCode的t等于"0";只断言非空不算通过。id、detailId、code和方法仍为 POST,单次发送门禁不变。docs/admin/08-顺运宝接口.md写明t=0及不得再传毫秒时间戳的理由。GOTOOLCHAIN=go1.23.0下go test ./syb -count=1、go test ./... -count=1、go build ./...、go vet ./...通过。怎么验证
全部从
admin/执行:预期:
UpdateDetailCode相关测试通过,且失败输出里不能再出现t为 13 位数字。本工单不连生产顺运宝、不部署。风险和回退
t做防缓存,改回t=0后理论上可能被中间层缓存;当前失败已经证明毫秒t进不了 Integer,而#234的t=0能完成参数绑定。client.go、测试和08文档的三处修改即可,无数据库迁移。实施记录
代码已按工单改完,尚未提交、尚未部署。
改动:
admin/syb/client.go:UpdateDetailCode的t改回固定"0"。admin/syb/client_test.go:断言t=="0",不再只检查非空。docs/admin/08-顺运宝接口.md:契约改回t=0,并写明 Integer 溢出原因。验证(
admin/,GOTOOLCHAIN=go1.23.0):未验证:未向真实顺运宝发送写请求;未改 19 号失败记录状态;未部署生产。修复上线后由操作员重新勾选回写,不自动重试。
用户已验收。实现提交
417cd73,归档1cf0995。随后按部署工单发布生产。已随 #279 发布到生产
1cf0995。19 号失败记录不会自动重试,需重新勾选回写。