mirror of
https://github.com/RaisFast/raisfast.git
synced 2026-09-24 00:02:28 +00:00
286 lines
8.4 KiB
Markdown
286 lines
8.4 KiB
Markdown
# 电商系统现状与路线图
|
||
|
||
> 最后更新:2026-05-18
|
||
|
||
## 一、已实现能力
|
||
|
||
### 数据表(14 张)
|
||
|
||
| 表 | 说明 | 状态 |
|
||
|---|------|------|
|
||
| `products` | 商品主表(含变体标记、库存、成本价、售价) | ✅ |
|
||
| `product_variants` | SKU/变体(独立价格、库存、属性) | ✅ |
|
||
| `categories` | 分类 | ✅ |
|
||
| `cart_items` | 购物车(支持变体级唯一) | ✅ |
|
||
| `orders` | 订单(含税、优惠券ID、地址ID) | ✅ |
|
||
| `order_items` | 订单明细(含变体、SKU、税额) | ✅ |
|
||
| `user_addresses` | 地址簿(收货/账单、默认地址) | ✅ |
|
||
| `payment_channels` | 支付渠道配置 | ✅ |
|
||
| `payment_orders` | 支付单 | ✅ |
|
||
| `payment_transactions` | 支付流水 | ✅ |
|
||
| `payment_refunds` | 退款单 | ✅ |
|
||
| `wallets` | 钱包 | ✅ |
|
||
| `wallet_transactions` | 钱包流水 | ✅ |
|
||
| `wallet_outbox` | 钱包事件发件箱 | ✅ |
|
||
|
||
### 功能覆盖
|
||
|
||
| 能力 | 说明 |
|
||
|------|------|
|
||
| 商品管理 | 多类型(custom/download)、多规格变体、分类、排序、上下架 |
|
||
| 购物车 | 变体级加购、数量管理、清空、一键结算 |
|
||
| 订单流程 | 完整生命周期(pending → paid → shipped → completed / refunded) |
|
||
| 支付 | 多渠道、钱包余额、第三方支付、退款 |
|
||
| 地址簿 | 收货/账单地址、默认地址、租户隔离 |
|
||
|
||
---
|
||
|
||
## 二、覆盖度评估
|
||
|
||
### 适用场景
|
||
|
||
- ✅ **虚拟商品电商**(充值卡、课程、数字下载)
|
||
- ✅ **小型 B2C**(简单实物,固定运费,无促销)
|
||
- ⚠️ **中型 B2C**(服装、3C)— 核心链路有,运营能力缺
|
||
|
||
### 关键缺失
|
||
|
||
| 缺失 | 影响程度 | 说明 |
|
||
|------|---------|------|
|
||
| **运费模板** | 🔴 高 | `orders.shipping_amount` 只是字段,无按重量/地区/件数计算的运费模板 |
|
||
| **优惠券/促销** | 🔴 高 | `orders.coupon_id` 有字段无表,无法满减、折扣码、限时促销 |
|
||
| **发货/物流** | 🔴 高 | `orders.tracking_no` 只是文本,无多包裹发货、物流商对接、物流追踪 |
|
||
| **退货/换货** | 🔴 高 | 退款有,退货流程无(买家寄回→商家验货→退款/换货) |
|
||
| **库存锁定** | 🔴 高 | `stock` 只是数字,下单时不预扣/锁定,并发超卖风险 |
|
||
| **评价系统** | 🟡 中 | 无商品评分/评价/追评,影响 SEO 和转化率 |
|
||
| **商品多分类** | 🟡 中 | products 只有单个 `category_id`,无法一品多类 |
|
||
| **商品图片库** | 🟡 中 | `image_ids` 是 JSON 字符串,无独立图片表(排序、裁剪、标签) |
|
||
| **税率配置** | 🟢 低 | `tax_amount` 有字段但无税率配置表,无法按地区/品类自动计算 |
|
||
| **秒杀/拼团** | 🟢 低 | 有 `min_purchase`/`max_purchase` 字段但无活动/库存抢占机制 |
|
||
| **供应商** | 🟢 低 | 无供应商管理,无法多供应商入驻 |
|
||
| **售后工单** | 🟢 低 | 无售后沟通记录,退款/退货缺乏买卖家交互流程 |
|
||
|
||
---
|
||
|
||
## 三、待建表规划
|
||
|
||
### Phase 2:核心运营能力(优先级 🔴)
|
||
|
||
#### 3.1 运费模板
|
||
|
||
```sql
|
||
-- 运费模板
|
||
shipping_methods (
|
||
id, document_id, tenant_id,
|
||
name, -- "顺丰标快"
|
||
provider, -- "sf" / "yto" / "sto" / "custom"
|
||
type, -- "by_weight" / "by_piece" / "fixed" / "free"
|
||
base_fee, -- 首重/首件费用(分)
|
||
base_unit, -- 首重克数 / 首件数
|
||
additional_fee, -- 续重/续件费用(分)
|
||
additional_unit, -- 续重克数 / 续件数
|
||
free_threshold, -- 满额包邮(分),NULL 表示不包邮
|
||
is_active,
|
||
sort_order,
|
||
created_at, updated_at
|
||
)
|
||
|
||
-- 运费区域规则(覆盖偏远地区加价等)
|
||
shipping_rates (
|
||
id, document_id, tenant_id,
|
||
shipping_method_id,
|
||
region_type, -- "province" / "city" / "district"
|
||
region_code, -- "XZ" / "540000"
|
||
base_fee, -- 覆盖模板默认值
|
||
additional_fee,
|
||
created_at
|
||
)
|
||
```
|
||
|
||
#### 3.2 优惠券
|
||
|
||
```sql
|
||
coupons (
|
||
id, document_id, tenant_id,
|
||
code, -- "SUMMER2026"
|
||
title, -- "夏季满减"
|
||
type, -- "percent" / "fixed" / "shipping_free"
|
||
value, -- 折扣百分比 / 固定金额(分)
|
||
min_order_amount, -- 最低订单金额(分)
|
||
max_discount, -- 最大优惠上限(分),用于 percent 类型
|
||
total_count, -- 发放总量
|
||
used_count, -- 已使用量
|
||
per_user_limit, -- 每人限领
|
||
starts_at, expires_at,
|
||
is_active,
|
||
created_at, updated_at
|
||
)
|
||
|
||
coupon_usages (
|
||
id, tenant_id,
|
||
coupon_id, user_id, order_id,
|
||
used_at
|
||
)
|
||
```
|
||
|
||
#### 3.3 发货/物流
|
||
|
||
```sql
|
||
shipments (
|
||
id, document_id, tenant_id,
|
||
order_id,
|
||
tracking_no,
|
||
carrier, -- "sf" / "yto" / "jd"
|
||
status, -- "pending" / "shipped" / "delivered"
|
||
shipped_at, delivered_at,
|
||
created_at, updated_at
|
||
)
|
||
|
||
shipment_items (
|
||
id, shipment_id, order_item_id,
|
||
quantity
|
||
)
|
||
|
||
-- 物流轨迹(可选,对接快递100等)
|
||
shipment_tracks (
|
||
id, shipment_id,
|
||
location, description,
|
||
tracked_at
|
||
)
|
||
```
|
||
|
||
#### 3.4 退货/换货
|
||
|
||
```sql
|
||
order_returns (
|
||
id, document_id, tenant_id,
|
||
order_id, user_id,
|
||
type, -- "refund" / "exchange" / "refund_and_return"
|
||
reason, -- "defective" / "wrong_item" / "not_as_described" / "other"
|
||
description,
|
||
status, -- "requested" / "approved" / "rejected" / "shipping_back" / "received" / "completed" / "cancelled"
|
||
refund_amount, -- 退款金额(分)
|
||
tracking_no, -- 买家退货物流单号
|
||
carrier,
|
||
admin_remark,
|
||
requested_at, approved_at, received_at, completed_at,
|
||
created_at, updated_at
|
||
)
|
||
|
||
order_return_items (
|
||
id, order_return_id, order_item_id,
|
||
quantity,
|
||
reason
|
||
)
|
||
|
||
order_return_photos (
|
||
id, order_return_id,
|
||
url, sort_order
|
||
)
|
||
```
|
||
|
||
#### 3.5 库存锁定
|
||
|
||
不需要新表,在现有流程中增加:
|
||
|
||
- `product_variants.stock` 下单时预扣(`stock - locked`)
|
||
- 新增 `stock_locked` 字段到 `product_variants` 和 `products`
|
||
- 订单取消/超时时释放锁定
|
||
- 订单完成时确认扣减
|
||
|
||
```sql
|
||
-- products 和 product_variants 各加两列
|
||
ALTER TABLE products ADD COLUMN stock_locked INTEGER NOT NULL DEFAULT 0;
|
||
ALTER TABLE product_variants ADD COLUMN stock_locked INTEGER NOT NULL DEFAULT 0;
|
||
-- 可用库存 = stock - stock_locked
|
||
```
|
||
|
||
### Phase 3:增强运营能力(优先级 🟡)
|
||
|
||
#### 3.6 评价系统
|
||
|
||
```sql
|
||
product_reviews (
|
||
id, document_id, tenant_id,
|
||
product_id, variant_id, user_id, order_item_id,
|
||
rating, -- 1-5
|
||
title,
|
||
content,
|
||
images, -- JSON array of URLs
|
||
is_anonymous,
|
||
status, -- "pending" / "approved" / "rejected" / "hidden"
|
||
admin_reply,
|
||
replied_at,
|
||
created_at, updated_at
|
||
)
|
||
```
|
||
|
||
#### 3.7 商品多分类
|
||
|
||
```sql
|
||
-- junction table
|
||
product_category_junction (
|
||
product_id,
|
||
category_id,
|
||
sort_order,
|
||
PRIMARY KEY (product_id, category_id)
|
||
)
|
||
```
|
||
|
||
#### 3.8 商品图片库
|
||
|
||
```sql
|
||
product_images (
|
||
id, document_id, tenant_id,
|
||
product_id,
|
||
url,
|
||
alt,
|
||
sort_order,
|
||
is_cover,
|
||
created_at
|
||
)
|
||
```
|
||
|
||
#### 3.9 税率配置
|
||
|
||
```sql
|
||
tax_rates (
|
||
id, document_id, tenant_id,
|
||
name, -- "中国增值税"
|
||
rate, -- 0.13 (百分比,存 TEXT 精度)
|
||
region_code, -- 适用地区
|
||
product_type, -- 适用商品类型,NULL 表示全部
|
||
is_active,
|
||
created_at, updated_at
|
||
)
|
||
```
|
||
|
||
### Phase 4:营销与高级能力(优先级 🟢)
|
||
|
||
- 秒杀/限时购(`flash_sales` + `flash_sale_items`)
|
||
- 拼团(`group_buys` + `group_buy_participants`)
|
||
- 供应商入驻(`suppliers` + 供应商商品关联)
|
||
- 售后工单(`support_tickets` + `support_messages`)
|
||
- 商品收藏/浏览历史
|
||
- 积分系统
|
||
|
||
---
|
||
|
||
## 四、实施建议
|
||
|
||
### 优先级排序
|
||
|
||
```
|
||
Phase 2.5 库存锁定 → Phase 2.1 运费模板 → Phase 2.2 优惠券
|
||
→ Phase 2.3 发货物流 → Phase 2.4 退货换货 → Phase 3 按需
|
||
```
|
||
|
||
### 原则
|
||
|
||
1. **只建表不写死逻辑** — 表结构先行,业务逻辑渐进
|
||
2. **所有金额存分** — `INTEGER`,展示时 / 100
|
||
3. **无 ON DELETE CASCADE** — 应用层处理级联
|
||
4. **decimal 存 TEXT** — SQLite 下保持精度
|
||
5. **variant_id 可选** — 无变体商品 `variant_id = NULL`,有变体商品必须指定
|
||
6. **三套 schema 同步** — SQLite / PG / MySQL 结构对齐
|