Admin:档口入库码匹配在会话过期时自动登录 #236

Open
opened 2026-08-15 10:10:07 +08:00 by ila · 1 comment
Owner

基本信息

  • 类型:缺陷
  • 父级大工单:#14
  • 所属 MVP / 版本:#224
  • 阶段:阶段 2:数据导入与确定性匹配

要解决什么

复现步骤:

  1. 顺运宝本地会话超过 24 小时。
  2. 在“档口入库码”页面勾选记录并点击“匹配已选”。
  3. 页面提示“顺运宝会话已过期,请先到‘顺运宝数据’页面登录后再匹配”。

已确认原因:档口入库码匹配只调用 EnsureSybSession 检查本地缓存;会话过期时直接返回。现有 OCR 自动登录只接在“顺运宝数据”的同步入口,导致采购员必须先启动一次同步才能刷新会话。记录数量和匹配数据不是错误原因。

做什么 / 不做什么

  • 做:档口入库码匹配发现本地会话过期时,复用现有 OCR 自动登录;登录成功后继续匹配原选中记录。
  • 做:自动登录成功只建立并缓存会话,不启动顺运宝同步。
  • 做:OCR 未配置、不可达、识别失败或登录失败时明确停止,不读取商品详情、不保存匹配结果,并提供恢复路径。
  • 不做:不增加页面按钮或手工验证码弹窗,不延长 24 小时会话上限,不修改数据库结构,不改变顺运宝同步和远端回写流程。

怎么做

  • admin/handler/web/inner_code.go:把本地会话检查与自动登录编排为可测试的小函数;InnerCodeMatch 在 ErrSybLoginRequired 时调用现有 attemptSybAutoLogin,成功后沿用同一个 syb.Client 继续执行 PlanInnerCodeRecords。
  • 自动登录成功后的提示增加“自动登录成功”;失败提示带失败原因和前往顺运宝数据页面的恢复路径。
  • admin/handler/web/inner_code_test.go:覆盖有效缓存、过期后自动登录成功、自动登录失败和普通会话读取错误。
  • 不调用 startSybSync,不增加路由、迁移或 Client 接口。

验收标准

  • 有效会话直接匹配,不调用自动登录。
  • 过期或缺失会话会尝试一次 OCR 自动登录,成功后继续匹配原选中 ID。
  • 自动登录成功不会创建顺运宝同步记录、不会启动同步任务。
  • OCR 未配置或自动登录失败时不调用顺运宝详情匹配、不修改所选记录,并显示明确恢复提示。
  • 非登录类会话缓存读取错误不会尝试 OCR,仍按内部错误停止。
  • 不改变“匹配已选”、同订单占用保护和安全回写行为。
  • 固定 Go 1.23.0 下 go build ./...、go test ./... -count=1、go vet ./... 通过。

怎么验证

从 admin/ 执行:

$env:GOTOOLCHAIN="go1.23.0"
go build ./...
go test ./... -count=1
go vet ./...
Remove-Item Env:GOTOOLCHAIN

真实环境验收:准备过期会话,勾选两条档口入库码记录并匹配;确认自动登录后只更新这两条匹配结果,syb_sync_runs 没有新增记录。

风险和回退

  • 风险:误复用同步入口可能意外启动同步;本任务只能调用登录函数,禁止调用 startSybSync。
  • 风险:登录成功但缓存写入失败;沿用现有约束,当前请求继续使用内存会话,后续请求再登录。
  • 回退:无数据库迁移,可回退本任务代码提交;已有会话和匹配结果不受影响。
## 基本信息 - 类型:缺陷 - 父级大工单:#14 - 所属 MVP / 版本:#224 - 阶段:阶段 2:数据导入与确定性匹配 ## 要解决什么 复现步骤: 1. 顺运宝本地会话超过 24 小时。 2. 在“档口入库码”页面勾选记录并点击“匹配已选”。 3. 页面提示“顺运宝会话已过期,请先到‘顺运宝数据’页面登录后再匹配”。 已确认原因:档口入库码匹配只调用 `EnsureSybSession` 检查本地缓存;会话过期时直接返回。现有 OCR 自动登录只接在“顺运宝数据”的同步入口,导致采购员必须先启动一次同步才能刷新会话。记录数量和匹配数据不是错误原因。 ## 做什么 / 不做什么 - 做:档口入库码匹配发现本地会话过期时,复用现有 OCR 自动登录;登录成功后继续匹配原选中记录。 - 做:自动登录成功只建立并缓存会话,不启动顺运宝同步。 - 做:OCR 未配置、不可达、识别失败或登录失败时明确停止,不读取商品详情、不保存匹配结果,并提供恢复路径。 - 不做:不增加页面按钮或手工验证码弹窗,不延长 24 小时会话上限,不修改数据库结构,不改变顺运宝同步和远端回写流程。 ## 怎么做 - `admin/handler/web/inner_code.go`:把本地会话检查与自动登录编排为可测试的小函数;`InnerCodeMatch` 在 `ErrSybLoginRequired` 时调用现有 `attemptSybAutoLogin`,成功后沿用同一个 `syb.Client` 继续执行 `PlanInnerCodeRecords`。 - 自动登录成功后的提示增加“自动登录成功”;失败提示带失败原因和前往顺运宝数据页面的恢复路径。 - `admin/handler/web/inner_code_test.go`:覆盖有效缓存、过期后自动登录成功、自动登录失败和普通会话读取错误。 - 不调用 `startSybSync`,不增加路由、迁移或 Client 接口。 ## 验收标准 - [ ] 有效会话直接匹配,不调用自动登录。 - [ ] 过期或缺失会话会尝试一次 OCR 自动登录,成功后继续匹配原选中 ID。 - [ ] 自动登录成功不会创建顺运宝同步记录、不会启动同步任务。 - [ ] OCR 未配置或自动登录失败时不调用顺运宝详情匹配、不修改所选记录,并显示明确恢复提示。 - [ ] 非登录类会话缓存读取错误不会尝试 OCR,仍按内部错误停止。 - [ ] 不改变“匹配已选”、同订单占用保护和安全回写行为。 - [ ] 固定 Go 1.23.0 下 `go build ./...`、`go test ./... -count=1`、`go vet ./...` 通过。 ## 怎么验证 从 `admin/` 执行: ```powershell $env:GOTOOLCHAIN="go1.23.0" go build ./... go test ./... -count=1 go vet ./... Remove-Item Env:GOTOOLCHAIN ``` 真实环境验收:准备过期会话,勾选两条档口入库码记录并匹配;确认自动登录后只更新这两条匹配结果,`syb_sync_runs` 没有新增记录。 ## 风险和回退 - 风险:误复用同步入口可能意外启动同步;本任务只能调用登录函数,禁止调用 `startSybSync`。 - 风险:登录成功但缓存写入失败;沿用现有约束,当前请求继续使用内存会话,后续请求再登录。 - 回退:无数据库迁移,可回退本任务代码提交;已有会话和匹配结果不受影响。
Author
Owner

状态:已实现,待用户验收。

实现结果:

  • 档口入库码匹配发现本地顺运宝会话过期或缺失时,调用现有 OCR 自动登录。
  • 登录成功后沿用同一个 syb.Client 继续处理原来勾选的记录,并显示“顺运宝自动登录成功”。
  • 此路径没有调用 startSybSync,不会主动启动顺运宝同步。
  • OCR 未配置或自动登录失败时,在详情读取和计划保存前停止并显示恢复提示。
  • 有效缓存不调用 OCR;普通缓存读取错误也不会误触发登录。

验证:

  • 固定 GOTOOLCHAIN=go1.23.0:go build ./...、go test ./... -count=1、go vet ./... 全部通过。
  • 未验证:真实 OCR/顺运宝端到端登录与匹配、生产 syb_sync_runs 前后计数核对。

提交:

  • 7b328b5 fix: 档口入库码匹配自动恢复顺运宝会话 (#236)
  • 3bd2473 docs: 归档任务 #236

归档:docs/task/236-档口入库码匹配自动登录.md

状态:已实现,待用户验收。 实现结果: - 档口入库码匹配发现本地顺运宝会话过期或缺失时,调用现有 OCR 自动登录。 - 登录成功后沿用同一个 `syb.Client` 继续处理原来勾选的记录,并显示“顺运宝自动登录成功”。 - 此路径没有调用 `startSybSync`,不会主动启动顺运宝同步。 - OCR 未配置或自动登录失败时,在详情读取和计划保存前停止并显示恢复提示。 - 有效缓存不调用 OCR;普通缓存读取错误也不会误触发登录。 验证: - 固定 `GOTOOLCHAIN=go1.23.0`:`go build ./...`、`go test ./... -count=1`、`go vet ./...` 全部通过。 - 未验证:真实 OCR/顺运宝端到端登录与匹配、生产 `syb_sync_runs` 前后计数核对。 提交: - `7b328b5` fix: 档口入库码匹配自动恢复顺运宝会话 (#236) - `3bd2473` docs: 归档任务 #236 归档:`docs/task/236-档口入库码匹配自动登录.md`
Sign in to join this conversation.
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: chengma/cmautobuy#236