From 901b37a8cba8642bc2f2047b992722f1cc5aa3ad Mon Sep 17 00:00:00 2001 From: chengma Date: Thu, 13 Aug 2026 10:40:16 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=BD=92=E6=A1=A3=E4=BB=BB=E5=8A=A1=20?= =?UTF-8?q?#203=20#204=20#205?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/task/203-syb补全蝦皮店铺和图片.md | 47 +++++++++++++++++++++++ docs/task/204-syb确定性解析蝦皮规格.md | 50 +++++++++++++++++++++++++ docs/task/205-蝦皮商品软删除和恢复.md | 52 ++++++++++++++++++++++++++ 3 files changed, 149 insertions(+) create mode 100644 docs/task/203-syb补全蝦皮店铺和图片.md create mode 100644 docs/task/204-syb确定性解析蝦皮规格.md create mode 100644 docs/task/205-蝦皮商品软删除和恢复.md diff --git a/docs/task/203-syb补全蝦皮店铺和图片.md b/docs/task/203-syb补全蝦皮店铺和图片.md new file mode 100644 index 0000000..099e3ea --- /dev/null +++ b/docs/task/203-syb补全蝦皮店铺和图片.md @@ -0,0 +1,47 @@ +# 203 Admin:SYB 同步低优先级补全蝦皮店铺和图片 + +- 类型:需求 +- 父级大工单:#14 +- 所属 MVP / 版本:#15 后续版本 +- 状态:已完成,待用户验收 +- 日期:2026-08-13 +- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/203 + +## 背景与目标 + +SYB 明细已经提供蝦皮店铺名和无需登录即可访问的图片 URL,但此前只保存在货运单表, +由 SYB 补建的蝦皮商品缺少这两项。目标是在不覆盖人工和商品目录权威字段的前提下补全。 + +## 最终方案 + +同步写入蝦皮商品骨架时,非空店铺和图片按字段级 `syb` 低优先级来源写入;只补空值 +或更新同来源新观测。商品目录接口可以把 `syb` 值提升为权威来源。MySQL v15 按每个 +商品最新非空观测回填历史数据,迁移可重放。图片仍只保存外部 URL,不代理或缓存。 + +## 改了哪些 + +- `admin/repository/syb.go`:统一 SYB 商品元数据写入和历史回填。 +- `admin/repository/catalog_import.go`:允许目录来源替换 `syb` 低优先级字段。 +- `admin/repository/mysql_db.go`:增加 MySQL v15 迁移与自检。 +- `admin/repository/syb_test.go`:覆盖同来源更新、接口来源和人工字段保护。 +- `docs/admin/`:更新需求、数据来源优先级和界面基线。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 新同步商品可从 SYB 补全店铺和图片 | 通过 | +| 空值、人工值和接口权威值不被 SYB 覆盖 | 通过 | +| 历史记录通过 v15 幂等回填 | 代码与迁移测试已补,待独立 MySQL 8.4 库实跑 | +| 图片继续使用原始 URL,不落二进制 | 通过 | + +## 测试 + +- 执行的命令:`$env:GOTOOLCHAIN="go1.23.0"; go vet ./...; go build ./...; go test ./... -count=1` +- 结果:通过;未配置 MySQL 集成测试开关时,隔离库测试按设计跳过。 +- **没验证到的部分**:真实 MySQL 8.4 首次建库、重复迁移和 v14 升级实跑。已尝试 + 使用 `autobuy_test`,但现有 `buy` 账号无该隔离库权限;未使用生产 `autobuy` 代测。 + +## 相关提交 + +- `ad1ccc2` 完善 SYB 蝦皮主数据与软删除 diff --git a/docs/task/204-syb确定性解析蝦皮规格.md b/docs/task/204-syb确定性解析蝦皮规格.md new file mode 100644 index 0000000..e60dd21 --- /dev/null +++ b/docs/task/204-syb确定性解析蝦皮规格.md @@ -0,0 +1,50 @@ +# 204 Admin:确定性解析 SYB 规格并补建蝦皮 SKU + +- 类型:需求 +- 父级大工单:#14 +- 所属 MVP / 版本:#15 后续版本 +- 状态:已完成,待用户验收 +- 日期:2026-08-13 +- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/204 + +## 背景与目标 + +SYB 货运单已有蝦皮商品 ID 和颜色尺码原文,但此前只作为只读观测展示,商品主数据 +缺少对应 SKU。目标是只解析格式明确的数据,避免猜测污染主数据。 + +## 最终方案 + +新增纯函数解析“颜色,尺码【建议】”二维格式,兼容全角逗号和常见标准尺码;额外维度、 +未知尺码、空字段或括号不完整时返回失败且不写 SKU。成功记录使用商品 ID 与 +`spec_key` 生成稳定内部主键,真实蝦皮 SKU ID 保持空,来源标为 `syb`。后续目录接口 +按同一规格身份补真实 ID,并可把各字段来源提升为权威来源。MySQL v16 回填历史数据。 + +## 改了哪些 + +- `admin/spec/shopee_spec.go`:确定性解析器。 +- `admin/service/syb.go`、`admin/repository/syb.go`:同步和历史补建入口。 +- `admin/repository/catalog_import.go`:同规格权威来源升级。 +- `admin/repository/mysql_db.go`:增加 MySQL v16 迁移与自检。 +- `admin/spec/shopee_spec_test.go`、`admin/repository/syb_test.go`:解析与合并测试。 +- `docs/admin/`:更新“SYB 只读观测”的旧基线。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 明确的颜色、尺码和建议可解析 | 通过 | +| 不明确格式不猜测、不写结构化 SKU | 通过 | +| 重复同步使用同一内部记录 | 通过 | +| 商品目录可补真实 SKU ID 并升级低优先级字段 | 通过 | +| v16 可回填历史 SYB 规格 | 代码与迁移测试已补,待独立 MySQL 8.4 库实跑 | + +## 测试 + +- 执行的命令:`$env:GOTOOLCHAIN="go1.23.0"; go vet ./...; go build ./...; go test ./... -count=1` +- 结果:解析器和非 MySQL 回归通过;MySQL 集成测试因未启用隔离库而跳过。 +- **没验证到的部分**:真实 MySQL 8.4 v15→v16 历史回填和重放。`buy` 无 + `autobuy_test` 权限,未使用生产库代测。 + +## 相关提交 + +- `ad1ccc2` 完善 SYB 蝦皮主数据与软删除 diff --git a/docs/task/205-蝦皮商品软删除和恢复.md b/docs/task/205-蝦皮商品软删除和恢复.md new file mode 100644 index 0000000..8948483 --- /dev/null +++ b/docs/task/205-蝦皮商品软删除和恢复.md @@ -0,0 +1,52 @@ +# 205 Admin:实现蝦皮商品软删除、恢复和批量选择修复 + +- 类型:缺陷 / 需求 +- 父级大工单:#14 +- 所属 MVP / 版本:#15 后续版本 +- 状态:已完成,待用户验收 +- 日期:2026-08-13 +- Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/205 + +## 背景与目标 + +蝦皮页面已有删除按钮但后端固定返回 501,而且删除表单收不到属于采集表单的勾选值。 +目标是实现管理员可恢复的软删除,保留 SKU、PDD 关联和历史,并修正批量表单归属。 + +## 最终方案 + +MySQL v17 增加删除时间、删除管理员、索引和用户外键。默认业务查询排除软删除商品; +管理员可切换到“已删除”范围恢复。删除前按商品检查进行中的采集和采购任务,命中时 +整批拒绝。删除、恢复和批量采集共用一个标准表单,通过按钮 `formaction` 选择接口, +确认文案明确数量、可恢复和保留内容。SYB 同步与商品目录导入不会清除删除标记。 + +## 改了哪些 + +- `admin/repository/shopee.go`:默认过滤、任务拦截、软删除和恢复写入。 +- `admin/service/shopee_delete.go`:管理员权限、批量去重和事务边界。 +- `admin/handler/web/shopee.go`、`web.go`:管理员路由和提示。 +- `admin/templates/shopee/list.html`、`static/js/app.js`:已删除筛选、恢复、共享表单和状态保持。 +- `admin/repository/mysql_db.go`:增加 MySQL v17 迁移与自检。 +- `admin/service/shopee_delete_test.go`、`admin/main_test.go`:软删除和界面契约测试。 +- `docs/admin/`:更新权限、交互和数据模型基线。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 只有管理员显示并可调用删除、恢复 | 通过 | +| 删除后默认列表和业务入口不可见,SKU/PDD 关联保留 | 通过 | +| 有进行中任务时整批拒绝 | 通过 | +| 已删除列表可恢复且不重建数据 | 通过 | +| 勾选值能提交到采集、删除和恢复接口 | 通过 | +| v17 可首次创建、重放和从旧版升级 | 代码与迁移测试已补,待独立 MySQL 8.4 库实跑 | + +## 测试 + +- 执行的命令:`$env:GOTOOLCHAIN="go1.23.0"; go vet ./...; go build ./...; go test ./... -count=1` +- 结果:通过;模板、路由、服务和仓储回归均通过,MySQL 测试按隔离库门禁跳过。 +- **没验证到的部分**:真实 MySQL 8.4 v16→v17 DDL、外键和索引实跑,以及浏览器人工 + 点击验收。现有 `buy` 账号无 `autobuy_test` 权限,未对生产库执行测试迁移。 + +## 相关提交 + +- `ad1ccc2` 完善 SYB 蝦皮主数据与软删除