Files
dukang/docs/杜康好客-v3.5.4-开发文档.md
T
jacy 22cd00da42
CI / verify (pull_request) Waiting to run
v3.5.5版本上传
2026-08-23 12:26:57 +08:00

146 lines
6.5 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.
# 杜康好客 · v3.5.4 开发文档
> **2026-08-21** · mini-user / admin-web / h5-partner / API / Prisma
> **生产 commit**`5fdddae`(规格主图与门店使用规则合并入 `main`)及后续客户端版本号 `3.5.4`
> **主题**:商品规格(SPU + SKU)上线 + 同批次发票 / 文案 / 门店详情体验
---
## 1. 版本目标
1. 商品由单规格升级为 **SPU + 多 SKU**:价格、权益、69 码、履约、上下架、主图按规格。
2. 箱装按 **瓶当量** 起购与物流,不改城市起购阈值口径。
3. **旧客户端兼容**:不传 `skuId` 仍可下单;无 SKU 回落 SPU,禁止「商品暂无可售规格」误伤。
4. 同批次补齐:发票品类、权益文案、收银台 logo、门店详情「使用规则」、C 端版本号。
**不做**:SKU 库存、把现有酒祖 10/15/20 合并为一个 SPU。
---
## 2. 功能清单(完整)
### 2.1 商品规格(核心)
| # | 模块 | 交付说明 |
|---|------|----------|
| 1 | 数据模型 | `common_product_item` 作 SPU;新增 `spec_attr` / `spec_value` / `sku` / `sku_spec`;订单快照 `sku_id` / `sale_unit` / `bottles_per_unit` |
| 2 | 存量迁移 | 每商品默认 1 个瓶装 SKU;SQL `migrate-product-sku-v354.sql`;脚本 `backfill-product-skus.ts` |
| 3 | Catalog | 列表 `specEnabled`/`saleUnit`;详情 `specAttrs`/`skus`/`defaultSkuId`;旧字段拍平保留 |
| 4 | Trade | preview/create 可选 `skuId`;有可售 SKU → 默认/唯一;**0 可售 → 回落 SPU**;订单 `sku_id` 可空 |
| 5 | Domain | 起购/大单/物流按 `quantity × bottlesPerUnit` 瓶当量 |
| 6 | Admin | `PUT .../specs``PUT .../skus`;抽屉加宽;「填写」弹窗;规格轴 + SKU 矩阵 |
| 7 | mini-user | 详情规格 chips;确认页带 `skuId`;箱装数量文案;选规格切主图 |
| 8 | 代下单 | HQ / 合伙人可选规格 SKU |
### 2.2 SKU 码与 69 码
| # | 项 | 说明 |
|---|----|------|
| 9 | SKU 码 | 系统生成 `DK` + 6 位数字,后台不可手填;脚本 `rewrite-sku-codes-dk.ts` 改存量 |
| 10 | 69 码 | **每规格独立**;同商品内 + 跨商品唯一;不可与其它 SKU 冲突 |
### 2.3 规格主图
| # | 项 | 说明 |
|---|----|------|
| 11 | DB | `common_product_sku.image_url``migrate-sku-image.sql` |
| 12 | Admin | 弹窗可为每 SKU 上传主图 |
| 13 | C 端 | 选规格优先 SKU 主图,空则回落商品封面 |
### 2.4 发票(同批次)
| # | 项 | 说明 |
|---|----|------|
| 14 | 品类 | `user_invoice.invoice_category``LIQUOR` 酒水类 / `CATERING` 餐饮类 |
| 15 | C 端申请 | 票种写死「增值税普通发票」;类型选酒水/餐饮;备注写入申请 |
| 16 | 抬头 | 必填项打 `*`;强调邮箱必填 |
| 17 | Admin | 发票列表展示品类;专票仍可走后台 |
### 2.5 文案与 UI(同批次)
| # | 位置 | 变更 |
|---|------|------|
| 18 | 全局权益文案 | 「好客权益券」→「好客权益」 |
| 19 | 首页角标 | 「享{amount}好客权益」,去掉门店 icon |
| 20 | 商品详情 | 规格区与「好客权益」说明加大间距 |
| 21 | 待支付/收银台 | 顶部 logo 用 `logo2.png`(杜康印章) |
| 22 | 门店详情 | 「使用规则」红色,置于「门店详情」上方;详情正文限高可滚动 |
| 23 | 客户端版本号 | `package.json` + `client-version.ts`**3.5.4**(「我的」页展示) |
---
## 3. 兼容规则(线上)
- 不改 `/api/v1`**只增字段,不删旧字段语义**。
- 旧客户端不传 `skuId`
- ≥1 个可售 SKU → 默认(或第一个)可售 SKU
- **0 个可售 SKU → 回落 SPU,照常下单**
- 新客户端传 `skuId` → 按该 SKU 校验。
- 旧 admin 不传规格:仅同步**唯一**默认 SKU;不覆盖已生成的 DK 码。
- SPU 上 `sku_code` / `barcode_69` 唯一约束下沉到 SKU;SPU 列保留冗余。
---
## 4. 发版与生产执行记录
按序在目标库执行(先测后产)。本机脚本只打本地 `.env`
| 步骤 | 动作 | 生产状态(2026-08-21 |
|------|------|------------------------|
| 1 | `migrate-product-sku-v354.sql` / Prisma sync | ✅ `db push` 已对齐 |
| 2 | `backfill-product-skus.ts` | ✅ 回填 9 个默认 SKU(扫 10 商品) |
| 3 | `migrate-sku-image.sql` / schema `image_url` | ✅ |
| 4 | `rewrite-sku-codes-dk.ts` | ✅ 13 条均已 DK,改写 0 |
| 5 | `migrate-invoice-category.sql` | ✅ schema 已含 |
| 6 | 发 API + mini-user H5 + admin | ✅ `mini-user 200` / `api 200` |
| 7 | 微信小程序 weapp 上传 | ⚠️ 需单独上传后「我的」页才见 v3.5.4 |
运营注意:新包上线前**不要**给商品加第二规格;上线后再配「单瓶 / 整箱」。
---
## 5. 起购与物流
- `bottleQty = quantity × bottlesPerUnit`
- 城市起购仍按瓶;箱装(`bottlesPerUnit=6`)数量 1 即可过同城 2 / 跨城 6
- 大单拦截、承运商 `goodsNum` 用瓶当量
---
## 6. 关键表 / 字段摘要
- `common_product_spec_attr` / `common_product_spec_value`
- `common_product_sku``sale_unit``bottles_per_unit``image_url`
- `common_product_sku_spec`
- `user_order.sku_id` / `sale_unit` / `bottles_per_unit`
- `user_invoice.invoice_category`
---
## 7. 关键路径(便于排查)
| 域 | 路径 |
|----|------|
| Prisma / 脚本 | `server/dukang-api/prisma/migrate-product-sku-v354.sql``backfill-product-skus.ts``rewrite-sku-codes-dk.ts``migrate-sku-image.sql``migrate-invoice-category.sql` |
| 规格工具 | `server/.../catalog/product-sku.util.ts` |
| Admin 规格 | `apps/admin-web/src/components/ProductSpecsEditor.tsx` |
| C 端详情 | `apps/mini-user/src/pages/product-detail/` |
| 版本号 | `apps/mini-user/src/lib/client-version.ts` |
| 门店详情 | `apps/mini-user/src/pages/store-detail/` |
| 发票 | `apps/mini-user/src/pages/invoice-apply/``invoice-titles/` |
---
## 8. 验收清单
- [ ] 未配规格:旧端下单与现网一致(无 SKU 也能下)
- [ ] 多规格:选规格后价格/权益/履约/主图变化;漏选 400
- [ ] 整箱:数量 1 过起购;订单 `bottles_per_unit=6`
- [ ] 详情 API 仍含 `id/name/price/spec/skuCode/...`
- [ ] 后台 SKU 码 DK 开头不可手填;每规格独立 69 码与主图
- [ ] 无「好客权益券」;首页角标「享{金额}好客权益」无门店 icon
- [ ] 门店详情「使用规则」红色且在详情上方;详情超长可滚
- [ ] 待支付页为 logo2 印章
- [ ] 发票:普票固定 + 酒水/餐饮品类 + 邮箱必填
- [ ] 「我的」页版本 **杜康好客 v3.5.4**(需 weapp 新包)