77 lines
4.1 KiB
Markdown
77 lines
4.1 KiB
Markdown
# 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` 按允许店铺筛选顺运宝同步
|