实施状态(2026-09-18):v1已确认,#305/#306已合并main并完成线上迁移、权限对账及Server/Web发布。运行代码7e257ca,发布记录65d1f34;健康/资源/认证接口验证通过,真实SYB回填端到端待用户验收。
update_syb_pdd_order_number.har
Gitea MCP 在本会话未提供可调用工具,本工单按仓库规则回退到 Gitea API 创建;凭据仅从本机安全环境读取,未写入工单或仓库。
paid
purchase_task
pdd_order_no
order_submitted_at
syb_product_id
syb_product
stock_id
detail_id
sybclient.Client
{status,msg,data,code}
writeback_status
tracking_no
POST /am/stock/detail/updateDetailPurchaseCode ?code=<PDD订单号> &type=pdd &created= &cost=0 &id=<stock.id> &detailId=<details[].id>
status=true
msg=更新成功
POST /am/stock/detail/listByStock?hist=0
stock.id
details[].id
purchaseCode
purchasePlatform=pdd
purchaseStatus=1
purchaseTime
order_created
DetailListByStock
不得复用物流 writeback_status。采用独立、可持久化的 PDD 采购单号回填记录或等价的独立字段,至少保存:
purchase_task_id
pending / running / succeeded / failed / conflict / unknown
具体使用独立表还是 purchase_task 独立字段,在实施前按现有迁移兼容性确定;不得改变 #37 字段语义。
pending
payment_review_status
新增 sybclient 方法(命名按代码风格确定),参数使用:
sybclient
id = SYBProduct.StockID
detailId = SYBProduct.DetailID
code = strings.TrimSpace(PurchaseTask.PDDOrderNo)
type = pdd
created = ""
cost = 0
校验正整数 ID、订单号非空且不超过现有任务字段长度;不根据单个 HAR 样本硬编码订单号正则。
每条任务独立执行:
listByStock
stockId + detailId
conflict
purchasePlatform
unknown
这是现有采购管理页的小范围列表/工具栏变更,不要求完整新页面原型。实施前需补充并由用户确认一份标注截图或低保真图,至少覆盖:
最终路径遵循现有 Admin API 风格,至少提供等价能力:
requestId
purchaseTaskIds[]
同一 requestId 必须幂等;重复请求返回原结果,不重复调 SYB 写接口。
stock_id + detail_id
detailId
purchaseStatus
stockId
长期契约发生变化,实施完成后需要更新线上 Wiki 并回读 revision,再同步镜像:
SYB-ERP-Interface
docs/12-syb-erp-interface.md
updateDetailPurchaseCode
Deployment-and-Operations
用户本轮要求“先实施#305”。已核对 #306 分支 07a3817(基线main 9194fd6)的采购结果、订单回填、旧物流候选和采购管理页面。当前尚无本单代码、数据库迁移或真实SYB写入。本会话无Gitea MCP,按规则使用API回退。
两个自动入口共用“确保回填记录存在”,在本地事务内持久化pending,由独立worker在事务提交后处理SYB。不得先提交订单后仅发易丢失的内存通知;SYB失败不撤销已取得的PDD订单事实。实付金额缺失/冲突不影响单号回填,金额不上传SYB。#306未部署不阻塞设计与mock开发,发布时单独核验其迁移依赖。
复用现有采购管理列表,不新建页面:
采购管理 [现有查询条件……] [查询] [重置] 已选 3 条 [重试采购(1)] [批量回填 SYB(2)] 选择 | 任务 | …… | 订单 / 支付 | SYB 单号回填 | 操作 [√] | 示例-A | …… | 示例订单-A | 待回填 | 详情 [ ] | 示例-B | …… | 示例订单-B | 回填中 | 详情 [ ] | 示例-C | …… | 示例订单-C | 已回填 | 详情 [√] | 示例-D | …… | 示例订单-D | 失败 · 会话失效 | 详情 [ ] | 示例-E | …… | 示例订单-E | 单号冲突 · 查看原因 | 详情 [ ] | 示例-F | …… | 示例订单-F | 结果待核对 | 详情 [√] | 示例-G | …… | 尚未取得 | 待取得订单号 | 详情
标注:
订单与人工处理 [订单:示例订单-A,下单时间,实付价格(原样保留)] [支付复核(原样保留)] [物流(原样保留)] [现有物流回填区域(保持原业务,避免与本单混淆)] SYB 单号回填 状态:失败 / 结果待核对 / 已回填 /…… 原因:会话失效,请恢复SYB登录后重试 完成时间:— [重新回填 SYB] (仅失败/结果待核对;未发起时为“回填 SYB”)
失败/unknown重试都先回读远端。同值直接成功;不同值保持冲突,不盲目覆盖。成功状态只表示已经回读确认目标明细purchaseCode和purchasePlatform=pdd,不表示付款。
2026-09-18 用户确认 #305 v1 设计通过,开始实施。设计依据 comment-8314;基于 #306 的 07a3817 建立 feat/305-syb-order-writeback 隔离工作区,保留原目录改动。覆盖正常采购与手动订单回填两个入队入口、独立持久状态、SYB单次写入/前后回读、Admin批量补偿。只用fake/mock及隔离数据库验证;未授权真实SYB写入、业务库迁移、权限写入或发布,不执行。当前无Gitea MCP,沿用API回退。
07a3817
用户已于本轮确认 v1,设计依据 comment-8314,确认记录 comment-8316。采用线上 Markdown 低保真,无 QuantUX App ID,不导出原型或任务快照。本会话无可用 Gitea MCP,继续使用 API 回退。
分支 feat/305-syb-order-writeback,基于 #306 的07a3817:
通过:
已有基线失败,未掩盖/删除/放宽:
每次Wiki写入显式带原title并对revision/正文回读校验,未重命名页面。未创建任务归档或额外文档。
2026-09-18 用户明确授权“合并main,迁移,把最新代码部署到线上服务器”。已将#305及#306依赖快进合并main并推送7e257ca;线上185.216.248.75当前二进制标记60c7526,迁移51项已执行,仅缺1789800100000和1789800200000。上线前采集/采购执行中计数均0。沿用既有Nginx/systemd拓扑,先服务器内受限备份,再执行两项迁移、启动权限对账及Server/Web发布;保留任务开关,不批量排入历史回填,不付款。发现旧release static/var相互循环链接,新release将直接链接已确认存在的真实旧资源目录,不删除或改写历史资源。当前无Gitea MCP,按规则API回退。
No dependencies set.
The note is not visible to the blocked user.
原始需求摘要
update_syb_pdd_order_number.har。HAR 含真实业务标识,只作为本地分析证据,不得提交 Git、工单或 Wiki。目标
非目标
paid门禁。当前事实与接口证据
代码事实
purchase_task已保存pdd_order_no、order_submitted_at,并关联syb_product_id。syb_product已保存 SYBstock_id和detail_id,可精确定位货运单内的商品明细。sybclient.Client已持久化并恢复 SYB Cookie 会话,所有请求统一解析{status,msg,data,code}。writeback_status、tracking_no用于 #37 物流回填,不得复用为本工单的 PDD 订单号回填状态。HAR 实测事实
status=true、msg=更新成功。POST /am/stock/detail/listByStock?hist=0回读中:目标stock.id、details[].id精确命中,purchaseCode与提交值一致,purchasePlatform=pdd,purchaseStatus=1,purchaseTime由 SYB 生成。前置依赖与并行性
order_created结果落库、SYB 会话恢复、DetailListByStock查询能力。影响范围
方案
1. 独立状态与持久任务
不得复用物流
writeback_status。采用独立、可持久化的 PDD 采购单号回填记录或等价的独立字段,至少保存:purchase_task_id(唯一关联);pending / running / succeeded / failed / conflict / unknown;具体使用独立表还是
purchase_task独立字段,在实施前按现有迁移兼容性确定;不得改变 #37 字段语义。2. 自动触发
order_created结果完成本地事务后,仅把符合条件的任务置为pending,不得在 Agent 回调事务中同步调用 SYB。syb_product_id、有效pdd_order_no、任务已进入order_created。payment_review_status。3. SYB 写入契约
新增
sybclient方法(命名按代码风格确定),参数使用:id = SYBProduct.StockIDdetailId = SYBProduct.DetailIDcode = strings.TrimSpace(PurchaseTask.PDDOrderNo)type = pddcreated = ""cost = 0校验正整数 ID、订单号非空且不超过现有任务字段长度;不根据单个 HAR 样本硬编码订单号正则。
4. 写前与写后回读
每条任务独立执行:
listByStock回读并按stockId + detailId精确定位。purchaseCode与目标相同且purchasePlatform=pdd:不写,直接成功。conflict,不得静默覆盖。purchaseCode和purchasePlatform一致时记成功。unknown/失败并等待人工批量补偿。5. Admin 交互
设计证据
这是现有采购管理页的小范围列表/工具栏变更,不要求完整新页面原型。实施前需补充并由用户确认一份标注截图或低保真图,至少覆盖:
API 契约建议
最终路径遵循现有 Admin API 风格,至少提供等价能力:
requestId、purchaseTaskIds[];requestId;同一
requestId必须幂等;重复请求返回原结果,不重复调 SYB 写接口。验收标准
order_created后,符合条件的任务自动进入独立回填队列,无支付审核门禁。stock_id + detail_id更新对应 SYB 商品明细,不误写同一货运单的其他商品。purchaseCode和purchasePlatform=pdd。验证要求
sybclient单元测试:参数、成功信封、业务失败、会话失效、网络结果未知;断言写请求最多一次。detailId。风险
purchaseStatus、purchasePlatform和purchaseTime,不是单字段写入。stockId更新。文档影响
长期契约发生变化,实施完成后需要更新线上 Wiki 并回读 revision,再同步镜像:
SYB-ERP-Interface(对应docs/12-syb-erp-interface.md):补充updateDetailPurchaseCode请求、响应、写入副作用和结果未知规则。Deployment-and-Operations。#305 v1 轻量低保真与实施前核验(2026-09-18,待用户确认)
用户本轮要求“先实施#305”。已核对 #306 分支 07a3817(基线main 9194fd6)的采购结果、订单回填、旧物流候选和采购管理页面。当前尚无本单代码、数据库迁移或真实SYB写入。本会话无Gitea MCP,按规则使用API回退。
必须接全的入口
两个自动入口共用“确保回填记录存在”,在本地事务内持久化pending,由独立worker在事务提交后处理SYB。不得先提交订单后仅发易丢失的内存通知;SYB失败不撤销已取得的PDD订单事实。实付金额缺失/冲突不影响单号回填,金额不上传SYB。#306未部署不阻塞设计与mock开发,发布时单独核验其迁移依赖。
v1 列表低保真(仅合成占位,不含真实订单)
复用现有采购管理列表,不新建页面:
标注:
v1 详情低保真
失败/unknown重试都先回读远端。同值直接成功;不同值保持冲突,不盲目覆盖。成功状态只表示已经回读确认目标明细purchaseCode和purchasePlatform=pdd,不表示付款。
后端具体方案(随v1一起确认)
设计审核与停止点
2026-09-18 用户确认 #305 v1 设计通过,开始实施。设计依据 comment-8314;基于 #306 的
07a3817建立 feat/305-syb-order-writeback 隔离工作区,保留原目录改动。覆盖正常采购与手动订单回填两个入队入口、独立持久状态、SYB单次写入/前后回读、Admin批量补偿。只用fake/mock及隔离数据库验证;未授权真实SYB写入、业务库迁移、权限写入或发布,不执行。当前无Gitea MCP,沿用API回退。#305 实施完成,待验收(2026-09-18)
用户已于本轮确认 v1,设计依据 comment-8314,确认记录 comment-8316。采用线上 Markdown 低保真,无 QuantUX App ID,不导出原型或任务快照。本会话无可用 Gitea MCP,继续使用 API 回退。
实现与提交
分支 feat/305-syb-order-writeback,基于 #306 的07a3817:
验收项对应验证
执行结果
通过:
已有基线失败,未掩盖/删除/放宽:
长期文档与回读 revision
每次Wiki写入显式带原title并对revision/正文回读校验,未重命名页面。未创建任务归档或额外文档。
未验证与下一步授权边界
2026-09-18 用户明确授权“合并main,迁移,把最新代码部署到线上服务器”。已将#305及#306依赖快进合并main并推送7e257ca;线上185.216.248.75当前二进制标记60c7526,迁移51项已执行,仅缺1789800100000和1789800200000。上线前采集/采购执行中计数均0。沿用既有Nginx/systemd拓扑,先服务器内受限备份,再执行两项迁移、启动权限对账及Server/Web发布;保留任务开关,不批量排入历史回填,不付款。发现旧release static/var相互循环链接,新release将直接链接已确认存在的真实旧资源目录,不删除或改写历史资源。当前无Gitea MCP,按规则API回退。
已授权合并、迁移与线上发布完成(2026-09-18)