Files
cmautobuy/docs/task/196-顺运宝同步店铺准入.md
2026-08-12 18:49:09 +08:00

4.1 KiB
Raw Permalink Blame History

196 Admin:按允许店铺筛选顺运宝同步入库

  • 类型:需求
  • 父级大工单:#14
  • 所属 MVP / 版本:#15 / 顺运宝同步店铺准入
  • 状态:已完成
  • 日期:2026-08-12
  • Gitea 工单:#196

背景与目标

顺运宝日期范围可能包含多个店铺,原同步会为所有货运单拉取明细并入库。本任务增加 管理员维护的全局允许店铺列表,使后续同步只接收目标店铺,同时保留原始全量容量、 分页和游标完整性保护。

最终方案

  • MySQL schema 追加 v14:新增 syb_allowed_shops,同步记录新增接受数、店铺跳过数 和店铺快照哈希;历史记录按“接受=原始、店铺跳过=0”回填。
  • 管理员可在顺运宝页进入“同步店铺”,新增、停用和重新启用店铺;采购员只看到 当前启用数量。所有写操作使用 POST、管理员权限和 CSRF。
  • 店铺名去除首尾空白后精确匹配,不做模糊、正则或大小写折叠;停用代替硬删除。
  • 同步入口在会话、OCR 和验证码请求前检查空白名单,后台启动后再次读取一次启用 店铺并固定为本次快照。
  • 同步仍先校验原始货运单总量、分页页长、分页前后总数和唯一 ID,之后才筛选; 非允许店铺不请求明细、不入库。明细店铺变化时再次核对。
  • 不删除历史非白名单货运单,不改变 Client 四接口或任务逻辑。
  • SQLite→MySQL 历史迁移工具补齐旧同步记录的新增统计,保持旧数据语义。

改了哪些

  • admin/repository/mysql_db.go:MySQL v14 可重放迁移和 schema 自检。
  • admin/model/model.go、admin/repository/syb.go:店铺模型、参数化读写和同步记录字段。
  • admin/service/syb_allowed_shop.go:管理员权限、表单校验和启用状态管理。
  • admin/service/syb.go:空白名单门禁、固定快照、全量校验后过滤和统计。
  • admin/handler/web/syb_shop.go、admin/handler/web/others.go、admin/handler/web/web.go: 管理页路由、同步前置门禁和页面数据。
  • admin/templates/syb/shops.html、admin/templates/syb/list.html:店铺管理页、入口和启用数。
  • admin/repository/sqlite_to_mysql.go:历史同步记录新增字段归一化。
  • admin/service/*test.go、admin/repository/mysql_db_integration_test.go:准入、权限、筛选、 空白名单、明细二次拦截及 v13→v14 测试。
  • docs/admin/03-data-model.md、05-ui-specification.md、08-顺运宝接口.md:更新基线。

验收结果

验收标准 结果
管理员新增、停用和重新启用,采购员禁止管理 通过(代码和自动化测试)
空白名单在任何顺运宝请求前阻止同步 通过(入口门禁及服务测试)
原始全量容量和分页完整性校验先于店铺过滤 通过
非允许店铺不拉明细、不入库,首尾空白可匹配 通过(自动化测试)
明细店铺变化或为空时再次拦截 通过(单元测试)
同一次同步使用启动时固定快照 通过
同步记录区分原始、接受、店铺跳过和数量跳过 通过
历史顺运宝数据不删除,Client 接口不改变 通过
MySQL v14 首建、升级、重放和自检 测试用例已补充;真实 MySQL 环境未执行
固定 Go 1.23.0 build、vet、test 通过

测试

  • 执行的命令:
    • $env:GOTOOLCHAIN="go1.23.0"; go vet ./...; go build ./...; go test ./... -count=1
    • go version
    • git diff --check
  • 结果:Go 1.23.0 windows/amd64 下全部通过;代码提交 8a8fff8。
  • 没验证到的部分:当前环境未配置名称以 _test 结尾的 MySQL 8.4 测试库, 因此新增真实 MySQL 集成测试被测试基础设施跳过;未启动浏览器执行 1366×768 视觉、 键盘焦点和人工权限验收;未部署生产,也未在生产执行 v14。

遗留问题

生产升级后白名单初始为空,必须先由管理员配置并启用至少一个店铺,之后才能同步。

相关提交

  • 8a8fff8 按允许店铺筛选顺运宝同步