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

77 lines
4.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 196 Admin:按允许店铺筛选顺运宝同步入库
- 类型:需求
- 父级大工单:#14
- 所属 MVP / 版本:#15 / 顺运宝同步店铺准入
- 状态:已完成
- 日期:2026-08-12
- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/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` 按允许店铺筛选顺运宝同步