Files
cmautobuy/docs/task/59-统一日期同步与同步记录.md
T
2026-08-09 18:23:33 +08:00

3.8 KiB
Raw Blame History

59 Admin:统一日期范围同步并增加同步记录

  • 类型:需求
  • 父级大工单:#14
  • 所属 MVP / 版本:#15 / MVP
  • 状态:已完成
  • 日期:2026-08-09
  • Gitea 工单:#59

背景与目标

顺运宝数据页原来同时提供自动增量“同步”和“指定日期同步”,采购员需要先判断 应该使用哪个入口,也无法在 Admin 重启后查看以前的执行结果。本任务把日期范围 直接放到主工具条,只保留一个同步入口,并增加可持久化、可分页查看的同步记录。

最终方案

  • 工具条显示开始日期、结束日期、主操作“同步”和次操作“同步记录”。日期按 UTC+8 解释,闭区间最多 31 天。
  • 通常默认最近 3 天;覆盖游标较早时从游标当天连续补齐,长缺口先选择最早 31 天。成功启动后清除 URL 中的旧日期,使下一次刷新按新游标显示下一段。
  • 首次成功同步以所选结束日建立覆盖游标;已有游标时,只有衔接当前覆盖范围并 向后延伸才推进。历史补拉和跳过缺口的范围不推进。
  • 数据库迁移 v8 新增 syb_sync_runs。后台同步开始前写入 running,结束后写入 succeeded 或 failed;Admin 启动时把遗留的 running 改为 interrupted。
  • 同步记录弹窗按开始时间倒序分页,显示状态、日期范围、操作账号、时间、统计、 覆盖游标结果和失败原因。记录不保存凭据、验证码、收件信息或原始响应。
  • 实现与建单方案一致;额外清除了成功启动后的旧日期查询参数,避免长缺口分段时 重复提交刚完成的上一段。

改了哪些

  • admin/repository/db.go、admin/model/model.go、admin/repository/syb.go:增加 v8 迁移、同步记录模型及读写接口。
  • admin/service/syb.go:计算安全默认范围、控制覆盖游标推进、创建和展示同步记录。
  • admin/handler/web/others.go、admin/main.go:接入操作账号、后台执行记录、历史 分页和启动中断恢复。
  • admin/templates/syb/list.html、admin/static/css/app.css:统一同步工具条和同步记录 弹窗。
  • admin/syb/client.go:错误信息不再拼入顺运宝原始行,避免个人信息进入记录。
  • admin/**/*_test.go:补充迁移、游标、记录、分页、跳转和页面烟测。
  • admin/config.example.yaml、docs/admin/03-data-model.md、 docs/admin/05-ui-specification.md、docs/admin/08-顺运宝接口.md:同步配置注释和 Admin 基线文档。

验收结果

验收标准 结果
页面只保留一个同步入口,日期范围在按钮左侧且通常默认最近 3 天 通过
缺口可按最多 31 天连续分段,跳过缺口或历史补拉不错误推进游标 通过
同步开始前建立记录,成功、失败和重启中断状态可持久化 通过
同步记录弹窗可分页查看操作账号、范围、时间、统计、游标和错误 通过
登录、OCR 降级和日期校验过程保留已选日期 通过
同步记录不写入凭据、验证码、收件信息和原始响应 通过
v1 至 v7 数据库均可升级到 v8,重复迁移和 schema 自检通过 通过

测试

  • 执行的命令:在 admin/ 目录执行 $env:GOTOOLCHAIN="go1.23.0"; go build ./...; go test ./... -count=1; go vet ./...; Remove-Item Env:GOTOOLCHAIN
  • 结果:构建通过;全部 Go 测试通过;go vet 通过;git diff --check 通过。
  • 没验证到的部分:未连接真实顺运宝账号执行同步,未在人工浏览器中做视觉验收; 自动化测试使用本地 httptest 假服务端,未发送真实业务请求。

相关提交

  • 05a54b0 统一顺运宝日期同步并记录历史