feat(pricing): 开发定价方案
This commit is contained in:
@@ -41,6 +41,8 @@
|
||||
|
||||
`product_variant_platform_listings` 同时引用平台发布配置(profile)和通用 SKU(variant),但必须强制:`variant.product_id = profile.product_id`。同一条归属链也适用于属性、报价、发布任务项和在线镜像映射。
|
||||
|
||||
2026-09-28:迁移 `043`~`045` 已补齐报价的同商品、同 profile、同门店/平台归属,以及已选候选属于当前报价的复合外键;确认快照不可更新。跨 SKU 和跨租户测试已通过。
|
||||
|
||||
实施时优先选用可维护的复合外键/冗余 `product_id` 加一致性约束;如 PostgreSQL 外键表达能力不足,再使用约束触发器。不得只依赖服务层校验。
|
||||
|
||||
### 2. 类目切换后未映射属性的持久化
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
# SKU 定价实现与验证记录
|
||||
|
||||
日期:2026-09-28。方案:[SKU 定价工作流](../product/sku-pricing-workflow-proposal.md)。接口:[定价 API](../api/pricing.md)。
|
||||
|
||||
## 实现范围
|
||||
|
||||
- SKU 采购价失焦/回车自动计算,可关闭自动计算;支持按钮计算和批量计算,手动售价保留。
|
||||
- 明细弹窗支持费用、汇率、包装、运输方式比较;取消不改草稿,应用仅回填当前 SKU,保存商品才确认报价。
|
||||
- 独立试算与 SKU 共用服务端 Decimal 计算器;门店方案支持创建、编辑、默认、归档和参数另存,另存后列表立即更新。
|
||||
- 商品保存事务核对预览归属、期限、输入和规则;确认任一 SKU 失败则全部回滚。新 SKU 使用 client_key 映射真实 ID。
|
||||
- 报价与候选不可变,输入改变使有效标记失效;未定价允许保存草稿,首次发布预检要求有效报价。
|
||||
- Worker 增加 CBR 官方参考汇率同步、并发锁及过期预览清理。
|
||||
|
||||
跨领域影响:Web 交互、API 计算/确认、Worker 同步、contracts DTO、database 约束与初始化,以及开发构建依赖。现有 `.env.example` 用户改动未修改。
|
||||
|
||||
## 自动验证
|
||||
|
||||
| 验证 | 结果 |
|
||||
| --- | --- |
|
||||
| 定价引擎单元测试 | 9 项通过:十进制、币种舍入、体积重、边界、规则适用性、负利润及输入规范化 |
|
||||
| 定价 HTTP/PostgreSQL 集成测试 | 11 项通过:幂等、租户与 SKU 归属、原子确认、并发、失效、不可变快照、方案管理 |
|
||||
| 既有商品编辑集成测试 | 12 项通过 |
|
||||
| 系统物流费率审核 HTTP/PostgreSQL 集成测试 | 1 项通过:管理员鉴权、六类账单复算、重复账单拒绝、并发幂等、已审核版本和规则归属不可改写;与上述测试合计 33 项 |
|
||||
| CBR 解析测试 | 2 项通过:面额换算与非法响应 |
|
||||
| contracts、API、API 测试、Web、Worker 类型检查 | 通过 |
|
||||
| contracts、database、API、Worker 构建及 Web 生产构建 | 通过;Web 仍有较大 bundle 提示 |
|
||||
| Turbo dev dry-run | API/Worker 先构建 contracts/database,Web/扩展先构建 contracts |
|
||||
| git diff --check | 通过 |
|
||||
|
||||
CBR 官方公开接口实际请求成功,解析得到生效日期 `2026-09-26`、CNY/RUB `12.5355000000`。同步函数检测到数据库两小时内已有官方记录而跳过重复抓取;本轮未强制改写既有汇率。
|
||||
|
||||
## 浏览器联调
|
||||
|
||||
使用隔离工作空间、临时平台、门店及标明测试用途的费率,真实调用本地 API:
|
||||
|
||||
- 采购价变化自动回填售价与利润;手动售价 90 在采购价变化后保持。
|
||||
- 明细取消保留原草稿,应用后保存并重读显示“已确认”。
|
||||
- 批量计算保留手动售价,缺采购价的 SKU 单独提示,允许其保存未定价草稿。
|
||||
- 独立试算样例采购 28 CNY,包装 380 g / 220×160×90 mm,返回售价 77.44 CNY、利润 14 CNY。
|
||||
- 参数另存弹窗成功保存,方案管理列表立即显示新方案。
|
||||
- Ozon 正式上下文没有审核费率时显示明确空状态。
|
||||
- 2026-09-28 补充:目录返回待复核费率卡;试算与方案页明确显示草稿版本及新建方案的阻断原因,并向系统管理员提供审核页入口。
|
||||
- 2026-09-28 后续补齐:系统管理新增物流费率审核页及管理员 API。账单样本按正式计费函数复算,审核记录和启用状态同事务保存;普通用户 403、差额不符 422、成功/幂等/重复审核由 PostgreSQL 集成测试覆盖。CEL 正式草稿仍保持待审核,未使用测试账单启用。
|
||||
- 管理员真实会话浏览器联调通过:菜单可进入审核页,展示 Ozon CEL 六种产品类型与 16 条规则;审核表单具备六类样本输入与可滚动区域,定价页可直达入口。未提交正式资费审核。
|
||||
|
||||
联调发现并修复 contracts 开发导出缺失、JSONB 键顺序/金额末尾零导致报价误失效、弹窗应用后自动重算覆盖候选和方案列表未即时更新。最终自动回归以修复后的正式测试文件为准;过程中旧临时夹具出现的失败不计入通过结果。
|
||||
|
||||
## 本地操作与清理
|
||||
|
||||
- 迁移器应用原先待执行的 `033`~`042` 及本次 `043`~`051`。新增迁移已应用,不应再编辑其内容。
|
||||
- 维护者 Web `8100`、API `8200` 继续运行;未主动停止这两个服务,开发监听器随文件修改自动重载。
|
||||
- 临时测试应用已退出;测试平台、门店及工作空间数据已清理,查询临时平台剩余数为 0。
|
||||
- 临时测试代码和凭证文件已删除,浏览器恢复 Ozon 平台,任务页面已关闭。
|
||||
- 审核测试创建的未来生效 QA 费率已清理(剩余 0);CEL 正式版本 `cel-rfbs-review-2026-09` 仍为 draft,16 条规则仍为 draft,审核时间为空。
|
||||
|
||||
## 后续业务工作
|
||||
|
||||
1. 按真实账单审核 CEL 费率和适用边界,补齐正式类目佣金映射。本次 CEL 种子保持 draft,测试费率没有进入正式平台。
|
||||
2. 使用真实商品、CNY/RUB 门店回归费用与利润;产品中的净利润是已配置费用下的预估值。
|
||||
3. 将 Ozon 首次发布 job、import 提交和结果轮询接到已有发布预检及报价快照。当前预检 ready 不等于已发布。
|
||||
|
||||
现在可直接运行 `pnpm dev`,无需每次手工先执行完整 `pnpm build`。部署仍须按顺序执行迁移和生产构建。
|
||||
Reference in New Issue
Block a user