fix(purchase): SYB回填统一会话获取、单worker重登录与状态一致性 #343

Open
opened 2026-09-27 21:41:05 +08:00 by ila · 3 comments
Owner

需求与当前事实

用户于2026-09-27要求先重试今天失败的订单回填,再建立修复工单。今天117条回填中67条成功,48条SYB_SESSION_UNAVAILABLE,2条SYB_ORDER_CONFLICT。已调用既有批量回填接口:19条进入pending,29条因在途租约跳过,冲突不覆盖。

目标与方案

  1. 回填接入统一SYB会话获取机制,复用有效会话,确认失效后自动登录。
  2. 同一SYB账号仅一个worker负责重登录,其他任务等待新会话,避免并发验证码。登录互斥必须覆盖同步与回填调用方;优先复用现有lease,无依据不新增迁移。
  3. 登录成功后执行原回填任务,保留先回读、写入、再回读及幂等保护。
  4. OCR未配置或登录失败保留明确结构化失败状态,允许人工重试;网络超时不能等同于登录失效。
  5. 成功后同步采购任务回填状态与时间,解决not_selected显示不一致。实施前核对最新main的OrderWritebackViews与页面真实数据源,避免将遗留候选字段误判为当前展示来源;若独立回填表才是权威源,优先统一查询映射而非增加双写。

非目标

不修改下单、支付或订单采集,不覆盖已有不同SYB订单号,不批量重置成功记录,不公开密码CookieToken。

依赖、影响与风险

依赖#305/#326/#330现有回填队列、会话存储及SYB OCR配置;主要影响Server会话与回填服务,共享状态契约,必要时Web查询展示。可先独立设计与测试,不与其他权限任务混入。凭据与并发修改及上线须实施前人工授权,迁移如确需另行确认。

验收与验证

有效会话零额外登录;会话过期并发请求仅一次登录,其他任务等待;成功后原任务回填且回读确认;无OCR/登录失败明确失败且保留订单事实;网络错误不清除有效会话;重复提交幂等;冲突不覆盖;详情/列表回填状态一致。覆盖自动化并发、租约过期恢复、登录失败、重试及现有成功/冲突回归,生产未验证项明确记录。

设计证据

非新UI功能,复用当前回填列表/详情交互;设计为会话恢复→等待新会话→原任务先回读→安全写入→回读确认→统一展示状态。开始实施需核对最新main及#330完整范围。

文档影响

更新SYB会话与回填运行契约、业务状态/API说明及运维失败恢复说明;本次仅建工单,不更新长期事实。

工具回退

当前会话未提供Gitea MCP,因此使用已配置Gitea API创建。

## 需求与当前事实 用户于2026-09-27要求先重试今天失败的订单回填,再建立修复工单。今天117条回填中67条成功,48条SYB_SESSION_UNAVAILABLE,2条SYB_ORDER_CONFLICT。已调用既有批量回填接口:19条进入pending,29条因在途租约跳过,冲突不覆盖。 ## 目标与方案 1. 回填接入统一SYB会话获取机制,复用有效会话,确认失效后自动登录。 2. 同一SYB账号仅一个worker负责重登录,其他任务等待新会话,避免并发验证码。登录互斥必须覆盖同步与回填调用方;优先复用现有lease,无依据不新增迁移。 3. 登录成功后执行原回填任务,保留先回读、写入、再回读及幂等保护。 4. OCR未配置或登录失败保留明确结构化失败状态,允许人工重试;网络超时不能等同于登录失效。 5. 成功后同步采购任务回填状态与时间,解决not_selected显示不一致。实施前核对最新main的OrderWritebackViews与页面真实数据源,避免将遗留候选字段误判为当前展示来源;若独立回填表才是权威源,优先统一查询映射而非增加双写。 ## 非目标 不修改下单、支付或订单采集,不覆盖已有不同SYB订单号,不批量重置成功记录,不公开密码CookieToken。 ## 依赖、影响与风险 依赖#305/#326/#330现有回填队列、会话存储及SYB OCR配置;主要影响Server会话与回填服务,共享状态契约,必要时Web查询展示。可先独立设计与测试,不与其他权限任务混入。凭据与并发修改及上线须实施前人工授权,迁移如确需另行确认。 ## 验收与验证 有效会话零额外登录;会话过期并发请求仅一次登录,其他任务等待;成功后原任务回填且回读确认;无OCR/登录失败明确失败且保留订单事实;网络错误不清除有效会话;重复提交幂等;冲突不覆盖;详情/列表回填状态一致。覆盖自动化并发、租约过期恢复、登录失败、重试及现有成功/冲突回归,生产未验证项明确记录。 ## 设计证据 非新UI功能,复用当前回填列表/详情交互;设计为会话恢复→等待新会话→原任务先回读→安全写入→回读确认→统一展示状态。开始实施需核对最新main及#330完整范围。 ## 文档影响 更新SYB会话与回填运行契约、业务状态/API说明及运维失败恢复说明;本次仅建工单,不更新长期事实。 ## 工具回退 当前会话未提供Gitea MCP,因此使用已配置Gitea API创建。
Author
Owner

已完成实现并提交 934a7be(分支 fix/343-syb-writeback-session,尚未合并/发布)。\n\n实现:\n- 新增 syb_session_auth_lease,同步与订单回填共用会话获取器;有效会话直接复用,明确失效时单 worker OCR 登录。\n- 其他 worker 等待会话刷新,不重复触发验证码;登录成功后继续原回填,保留回读、幂等和冲突保护。\n- OCR 未配置/登录失败保持结构化失败;网络错误不清除会话。\n- 回填创建时同步采购任务为 pending;终态同步 succeeded/failed 与 writeback_at。\n- 新增迁移 1789801400000_syb_session_auth_lease.go。\n\n验证:\n- go test ./app/goauto/purchase ./app/goauto/sybclient ./cmd/migrate/migration/version-local 通过。\n- go test ./app/goauto/... ./cmd/migrate/... 中既有 sybimport 解析/AI 测试仍有基线失败,与本工单无关;采购、sybclient、迁移相关测试通过。\n\n当前停在待验收,未执行线上迁移、合并或重启。

已完成实现并提交 `934a7be`(分支 `fix/343-syb-writeback-session`,尚未合并/发布)。\n\n实现:\n- 新增 `syb_session_auth_lease`,同步与订单回填共用会话获取器;有效会话直接复用,明确失效时单 worker OCR 登录。\n- 其他 worker 等待会话刷新,不重复触发验证码;登录成功后继续原回填,保留回读、幂等和冲突保护。\n- OCR 未配置/登录失败保持结构化失败;网络错误不清除会话。\n- 回填创建时同步采购任务为 `pending`;终态同步 `succeeded/failed` 与 `writeback_at`。\n- 新增迁移 `1789801400000_syb_session_auth_lease.go`。\n\n验证:\n- `go test ./app/goauto/purchase ./app/goauto/sybclient ./cmd/migrate/migration/version-local` 通过。\n- `go test ./app/goauto/... ./cmd/migrate/...` 中既有 `sybimport` 解析/AI 测试仍有基线失败,与本工单无关;采购、sybclient、迁移相关测试通过。\n\n当前停在待验收,未执行线上迁移、合并或重启。
Author
Owner

2026-09-27 用户授权后已将分支快进合入远端main(abdf907,实现934a7be)。线上迁移1789801400000执行成功:新增1个,跳过64个。发布目录/home/goauto/releases/20260927-343-934a7be,systemd goauto.service active;8010和9527健康接口200,9527首页返回现有Admin HTML。本单仅Server变化,沿用上一发布Web静态资源,未修改Nginx。部署期间首次构建目标/平台不正确,迁移未执行,后改为根main入口Linux amd64构建,确认ELF后执行迁移成功。当前回填统计仍67成功、48会话失败、2冲突,未将健康检查当作业务回填验收,未批量重置历史失败项。待验收。长期Wiki同步闭环尚未完成,之前直接修改镜像不符合Wiki-first,需后续纠正,不宣称文档闭环已完成。

2026-09-27 用户授权后已将分支快进合入远端main(abdf907,实现934a7be)。线上迁移1789801400000执行成功:新增1个,跳过64个。发布目录/home/goauto/releases/20260927-343-934a7be,systemd goauto.service active;8010和9527健康接口200,9527首页返回现有Admin HTML。本单仅Server变化,沿用上一发布Web静态资源,未修改Nginx。部署期间首次构建目标/平台不正确,迁移未执行,后改为根main入口Linux amd64构建,确认ELF后执行迁移成功。当前回填统计仍67成功、48会话失败、2冲突,未将健康检查当作业务回填验收,未批量重置历史失败项。待验收。长期Wiki同步闭环尚未完成,之前直接修改镜像不符合Wiki-first,需后续纠正,不宣称文档闭环已完成。
Author
Owner

线上已按授权重试2026-09-27的48条 SYB_SESSION_UNAVAILABLE 回填:批量接口全部返回 pending。约30秒后 worker 状态为:44条 pending、4条仍为原失败、22条再次失败(错误消息为会话恢复网络/其他,未触发写入),67条原成功和2条冲突未改动。回填仍在串行处理,当前未宣称成功。

线上已按授权重试2026-09-27的48条 `SYB_SESSION_UNAVAILABLE` 回填:批量接口全部返回 pending。约30秒后 worker 状态为:44条 pending、4条仍为原失败、22条再次失败(错误消息为会话恢复网络/其他,未触发写入),67条原成功和2条冲突未改动。回填仍在串行处理,当前未宣称成功。
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: OPC/goauto#343