#240 根据当时客户确认,把同一“业务日期 + 订单号 + 档口 + 规格”的多个单件入库码用英文逗号连接,并把完整字符串写入一个顺运宝商品明细的 innerExpCode。真实操作发现顺运宝不允许在“快递单号”中填写逗号连接的多个码,因此该远端回写假设不成立。
innerExpCode
对用户提供的多件操作 HAR 做脱敏结构分析后确认:
POST /am/stock/detail/createDetail
productQty=1
productPrice=0
productSpec=null
detailId
POST /am/stock/detail/updateDetailCode
当前 applyClaimedInnerCode 仍会把逗号聚合值写入原 detail_id;如果原明细已有第一个目标码,还会先删除它。当前顺运宝客户端对 updateDetailCode 使用 GET,也与 HAR 中的 POST 不一致。
applyClaimedInnerCode
detail_id
updateDetailCode
复现:
码1,码2
inner_code
createDetail
档口第2件-IC<记录ID>
syb_inner_code_records
needs_check
admin/repository/mysql_db.go
remote_items_json
admin/model/inner_code.go
admin/repository/inner_code.go
remote_inner_code
admin/syb/client.go
CreateInnerCodeDetail
id=null
stockId
UpdateDetailCode
stockId/detailId/code/t
t
ErrWriteResultUnknown
admin/service/inner_code_match.go
productQty
admin/service/inner_code_apply.go
RecheckInnerCode
admin/handler/web/inner_code.go
admin/templates/inner_code/list.html
docs/admin/03-data-model.md
docs/admin/08-顺运宝接口.md
码数 - 1
git diff --check
在仓库根目录执行:
$env:GOTOOLCHAIN='go1.23.0' Set-Location admin go test ./service ./repository ./syb ./handler/web -run InnerCode -count=1 go test ./... -count=1 go build ./... go vet ./... Set-Location .. git diff --check Remove-Item Env:GOTOOLCHAIN
使用 httptest 模拟 HAR 中的创建、列表复读和写码顺序,覆���单件、两件、三件、已有人工明细、创建超时、写码超时和进程中断。真实顺运宝验收只选择专用测试货运单,先验证一条两件记录,再允许批量回写;HAR、Cookie、账号、收件信息和原始响应不得写入测试日志、Gitea 或文档。
httptest
???:?? HAR ?? createDetail / updateDetailCode ? POST ??,?? MySQL v27 remote_items_json ???????????????????/????????????????????????????????????????
????,??:????
b8f49fe
103610a
docs/task/250-???????????.md
go test ./... -count=1
go build ./...
go vet ./...
No dependencies set.
The note is not visible to the blocked user.
基本信息
要解决什么
#240 根据当时客户确认,把同一“业务日期 + 订单号 + 档口 + 规格”的多个单件入库码用英文逗号连接,并把完整字符串写入一个顺运宝商品明细的
innerExpCode。真实操作发现顺运宝不允许在“快递单号”中填写逗号连接的多个码,因此该远端回写假设不成立。对用户提供的多件操作 HAR 做脱敏结构分析后确认:
POST /am/stock/detail/createDetail,以productQty=1、productPrice=0、productSpec=null新增“档口第2件”占位明细;detailId,刷新详情后明细数增加,原商品数量和订单金额不变;POST /am/stock/detail/updateDetailCode,���第二个码写入新明细;当前
applyClaimedInnerCode仍会把逗号聚合值写入原detail_id;如果原明细已有第一个目标码,还会先删除它。当前顺运宝客户端对updateDetailCode使用 GET,也与 HAR 中的 POST 不一致。复现:
码1,码2写入原商品明细;做什么 / 不做什么
inner_code,仅把它作为本地单件码列表,远端不再接收聚合字符串。createDetail创建一条数量 1、价格 0、无规格的占位明细,再写入返回的detailId。档口第2件-IC<记录ID>。syb_inner_code_records增加一个 JSON 检查点字段,记录每个单件码、目标detailId、明细来源和执行状态;每个远端步骤前后及时落库。needs_check,绝不自动重发;重新核对读取整张货运单,识别人工已添加或先前已成功的明细,并只更新本地核对结果。怎么做
admin/repository/mysql_db.go:增加下一版 MySQL 迁移,在syb_inner_code_records追加可空 JSON 检查点字段(建议名remote_items_json),补充迁移重放和 schema 自检;不新建业务表。admin/model/inner_code.go、admin/repository/inner_code.go:增加单件远端执行项模型、JSON 读写和步骤检查点更新;detail_id继续表示原始匹配明细,remote_inner_code仅保留可读汇总。admin/syb/client.go:CreateInnerCodeDetail,固定调用POST /am/stock/detail/createDetail,请求体为id=null、稳定标题、productSpec=null、productQty=1、productPrice=0、stockId,并校验返回正整数detailId;UpdateDetailCode按 HAR 改为 POST,stockId/detailId/code/t继续放查询参数,t使用当前毫秒时间戳;ErrWriteResultUnknown分类。admin/service/inner_code_match.go:匹配时保存原始目标并校验多件码数量与顺运宝productQty,数量不一致时明确跳过;不在匹配阶段创建远端明细。admin/service/inner_code_apply.go:RecheckInnerCode改为核验所有目标码是否各出现一次,并可识别人工已完成的额外明细。admin/handler/web/inner_code.go、admin/templates/inner_code/list.html:确认提示和批次结果增加“共 N 个码 / 新增 M 条明细 / 已完成 K 件”的可读反馈,不增加新按钮。docs/admin/03-data-model.md、docs/admin/08-顺运宝接口.md,明确本地聚合与远端逐件明细的区别,并记录 #240 的远端假设已被本工单替代。验收标准
detail_id,写前核验、最多一次写入和写后复读行为不退化。码数 - 1条占位明细,每个目标码在同一货运单中恰好出现一次。createDetail使用 HAR 确认的 POST JSON 契约;updateDetailCode使用 POST 查询参数契约,并校验请求只发送一次。needs_check,后台、重启恢复和重新核对均不自动重发。git diff --check通过。怎么验证
在仓库根目录执行:
使用
httptest模拟 HAR 中的创建、列表复读和写码顺序,覆���单件、两件、三件、已有人工明细、创建超时、写码超时和进程中断。真实顺运宝验收只选择专用测试货运单,先验证一条两件记录,再允许批量回写;HAR、Cookie、账号、收件信息和原始响应不得写入测试日志、Gitea 或文档。风险和回退
createDetail会在顺运宝真实增加商品明细;虽然 HAR 中数量 1、价格 0 的占位明细没有改变订单金额,但结果未知时重复创建会产生多余明细。因此必须在远端步骤前后保存检查点、使用稳定标题,并保持未知结果禁止自动重试。updateDetailCode从 GET 改为 POST 需要通过假服务契约测试并先做单条真实验收,不能直接用大批生产货运单验证。???:?? HAR ?? createDetail / updateDetailCode ? POST ??,?? MySQL v27 remote_items_json ???????????????????/????????????????????????????????????????
????,??:????
b8f49fefix: ??????????? (#250)103610adocs: ???? Admin:多件档口入库码按件创建顺运宝明细回写 (#250)docs/task/250-???????????.mdgo test ./... -count=1?go build ./...?go vet ./...?git diff --check?????