Files
medical-mall/doc_mall/consumer/backup_doc_full/推销模式功能需求文档.md

297 lines
9.6 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.
# 商城推销模式功能需求文档
## 一、功能概述
本文档描述商城消费者端的推销模式功能,**该功能为商家级别功能**,即:
- **商家可自主开启/关闭**自己店铺的推销模式
- 只有**开启了推销模式的商家**,其店铺订单才会显示"分享免单"按钮
- **会员等级系统**为全局功能,适用于所有商家
- **经销点返利系统**为商家级别功能,由商家自行配置
### 1.1 核心变更说明
| 功能模块 | 作用范围 | 说明 |
|---------|---------|------|
| 分享免单系统 | 商家级别 | 商家开启后,其订单才显示分享免单入口 |
| 会员等级系统 | 全局 | 所有用户统一等级体系 |
| 经销点返利系统 | 商家级别 | 商家自行创建和管理经销点 |
| 用户余额系统 | 商家级别 | 每个商家有独立的用户余额池 |
---
## 二、商家推销模式配置
### 2.1 商家推销设置表 ml_merchant_promotion_config
| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | UUID | 主键 |
| merchant_id | UUID | 商家ID关联ml_shops.merchant_id |
| promotion_enabled | BOOLEAN | 是否开启推销模式默认false |
| share_free_enabled | BOOLEAN | 是否开启分享免单默认false |
| distribution_enabled | BOOLEAN | 是否开启经销点返利默认false |
| required_count | INT | 分享免单所需购买数默认4 |
| reward_type | VARCHAR(20) | 奖励类型product_price-商品价格fixed-固定金额 |
| fixed_reward_amount | DECIMAL(10,2) | 固定奖励金额reward_type=fixed时使用 |
| created_at | TIMESTAMPTZ | 创建时间 |
| updated_at | TIMESTAMPTZ | 更新时间 |
### 2.2 商家用户余额表 ml_merchant_user_balance
> 每个商家的用户余额独立计算,用户在不同商家有不同余额
| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | UUID | 主键 |
| merchant_id | UUID | 商家ID |
| user_id | UUID | 用户ID |
| balance | DECIMAL(10,2) | 当前余额 |
| frozen_balance | DECIMAL(10,2) | 冻结余额 |
| total_earned | DECIMAL(10,2) | 累计获得 |
| total_withdrawn | DECIMAL(10,2) | 累计提现 |
| updated_at | TIMESTAMPTZ | 更新时间 |
| UNIQUE(merchant_id, user_id) | | 联合唯一约束 |
---
## 三、分享免单系统
### 3.1 功能描述
用户购买商品后,可分享商品链接给其他用户(二级用户)。当二级用户通过分享链接购买该商品累计达到指定数量时,原用户可获得免单奖励。
**重要变更:**
- 只有开启了分享免单功能的商家,其订单才显示分享免单入口
- 分享免单所需购买数由商家自行设置默认4人
- 奖励金额可以是商品价格或固定金额
### 3.2 业务流程
```
商家开启推销模式 → 用户购买商品 → 订单详情显示"分享免单"按钮
用户点击创建分享记录
分享给好友B/C/D
好友通过分享码购买
累计购买数量达标
用户获得免单奖励
奖励存入该商家下的用户余额
```
### 3.3 数据库设计
#### 3.3.1 分享记录表 ml_share_records
| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | UUID | 主键 |
| merchant_id | UUID | 商家ID新增 |
| user_id | UUID | 分享用户ID |
| product_id | UUID | 商品ID |
| order_id | UUID | 关联订单ID |
| share_code | VARCHAR(20) | 分享码(唯一) |
| required_count | INT | 需要的购买数量 |
| current_count | INT | 当前已购买数量 |
| status | INT | 状态0-进行中1-已完成2-已失效 |
| reward_amount | DECIMAL(10,2) | 奖励金额 |
| created_at | TIMESTAMPTZ | 创建时间 |
| completed_at | TIMESTAMPTZ | 完成时间 |
#### 3.3.2 二级购买记录表 ml_secondary_purchases
| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | UUID | 主键 |
| share_record_id | UUID | 关联分享记录ID |
| buyer_id | UUID | 购买用户ID |
| order_id | UUID | 订单ID |
| quantity | INT | 购买数量 |
| created_at | TIMESTAMPTZ | 创建时间 |
#### 3.3.3 免单奖励记录表 ml_free_order_rewards
| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | UUID | 主键 |
| merchant_id | UUID | 商家ID新增 |
| user_id | UUID | 获得奖励的用户ID |
| share_record_id | UUID | 关联分享记录ID |
| amount | DECIMAL(10,2) | 奖励金额 |
| status | INT | 状态0-待处理1-已发放2-已清零 |
| cleared_at | TIMESTAMPTZ | 清零时间 |
| cleared_by | UUID | 清零操作人 |
| created_at | TIMESTAMPTZ | 创建时间 |
### 3.4 前端逻辑变更
#### 3.4.1 订单列表页/订单详情页
```typescript
// 判断是否显示分享免单按钮
async function checkShareFreeEnabled(merchantId: string): Promise<boolean> {
const config = await supabaseService.getMerchantPromotionConfig(merchantId)
return config?.promotion_enabled && config?.share_free_enabled
}
// 在订单卡片中
<view v-if="order.status >= 2 && order.status <= 4 && isShareFreeEnabled(order.merchant_id)"
class="share-free-row" @click="shareForFree(order)">
<text>🎁 </text>
</view>
```
#### 3.4.2 我的余额页
- 需要按商家分组显示余额
- 或显示总余额,点击查看各商家余额明细
---
## 四、会员等级系统
### 4.1 功能描述
会员等级系统为**全局功能**,用户等级在所有商家通用。用户可通过累计消费金额自动升级,或由商家手动设置等级。
### 4.2 等级设置(全局配置)
| 等级 | 名称 | 升级条件 | 折扣 |
|------|------|---------|------|
| 0 | 普通会员 | 注册即可 | 无折扣 |
| 1 | 铜牌会员 | 累计消费500元 | 98折 |
| 2 | 银牌会员 | 累计消费2000元 | 95折 |
| 3 | 金牌会员 | 累计消费5000元 | 92折 |
| 4 | 钻石会员 | 累计消费10000元 | 88折 |
| 5 | VIP会员 | 商家手动设置 | 85折 |
### 4.3 数据库设计
保持原有设计不变,会员等级为全局配置。
---
## 五、经销点返利系统
### 5.1 功能描述
商家可创建多个经销点,每个经销点有独立的推广码。经销点通过推广码产生的订单可获得返利。
**重要变更:**
- 经销点返利为商家级别功能
- 商家需先开启经销点功能才能使用
### 5.2 数据库设计
#### 5.2.1 经销点表 ml_distribution_points
| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | UUID | 主键 |
| merchant_id | UUID | 商家ID新增 |
| name | VARCHAR(100) | 经销点名称 |
| contact_name | VARCHAR(50) | 联系人 |
| contact_phone | VARCHAR(20) | 联系电话 |
| invite_code | VARCHAR(20) | 邀请码(唯一) |
| owner_id | UUID | 负责人用户ID |
| status | INT | 状态0-禁用1-启用 |
| total_orders | INT | 累计订单数 |
| total_rebate | DECIMAL(10,2) | 累计返利 |
| balance | DECIMAL(10,2) | 可提现余额 |
| created_at | TIMESTAMPTZ | 创建时间 |
---
## 六、余额变动记录表
### 6.1 ml_balance_records按商家区分
| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | UUID | 主键 |
| merchant_id | UUID | 商家ID新增 |
| user_id | UUID | 用户ID |
| type | VARCHAR(50) | 类型 |
| amount | DECIMAL(10,2) | 变动金额 |
| balance_before | DECIMAL(10,2) | 变动前余额 |
| balance_after | DECIMAL(10,2) | 变动后余额 |
| related_id | UUID | 关联ID |
| description | VARCHAR(200) | 描述 |
| operator_id | UUID | 操作人 |
| created_at | TIMESTAMPTZ | 创建时间 |
---
## 七、API 接口变更
### 7.1 新增接口
| 接口 | 方法 | 说明 |
|------|------|------|
| /api/merchant/promotion-config | GET | 获取商家推销配置 |
| /api/merchant/user-balance | GET | 获取用户在某商家的余额 |
| /api/merchant/user-balance-list | GET | 获取用户所有商家余额列表 |
### 7.2 修改接口
| 接口 | 变更说明 |
|------|---------|
| /api/share/create | 新增merchant_id参数 |
| /api/share/my-records | 按merchant_id筛选 |
| /api/balance/info | 新增merchant_id参数 |
---
## 八、前端页面变更
### 8.1 消费者端
| 页面 | 变更说明 |
|------|---------|
| 订单列表/详情 | 根据商家配置显示分享免单按钮 |
| 我的余额 | 按商家分组显示余额,或显示余额列表 |
| 我的分享 | 按商家筛选分享记录 |
### 8.2 商家端(新增)
| 页面 | 说明 |
|------|------|
| 推销模式设置 | 开启/关闭分享免单、经销点功能 |
| 用户余额管理 | 查看用户余额、清零操作 |
| 经销点管理 | 创建、编辑经销点 |
---
## 九、开发优先级
### 第一阶段
1. 商家推销配置表SQL
2. 修改用户余额表结构(按商家区分)
3. 修改分享记录表结构添加merchant_id
4. 前端:根据商家配置显示分享免单按钮
### 第二阶段
1. 商家端推销模式设置页面
2. 用户余额按商家分组显示
3. 经销点返利系统
---
## 十、SQL变更清单
需要执行以下SQL变更
1. **新增商家推销配置表** `ml_merchant_promotion_config`
2. **修改用户余额表** 添加merchant_id字段改为联合唯一约束
3. **修改分享记录表** 添加merchant_id字段
4. **修改余额记录表** 添加merchant_id字段
5. **修改免单奖励表** 添加merchant_id字段
6. **修改经销点表** 添加merchant_id字段
详细SQL语句见`promotion_system_tables_v2.sql`