会员权益 — 应用库设计(oemsaasapp)
库:oemsaasapp 独立 MySQL(非商城 cn01_db)。
商城侧表:见 design.md、membership_tables.sql。
DDL: membership_app_tables.sql
1. 存储分工总览
| 配置 / 数据 | 存储位置 | 应用职责 |
|---|---|---|
| 自动升级(开关 + 条件 + 级别门槛) | 应用库 o_membership_upgrade_rule | UI 读写 |
| 升级流水 | 应用库 o_membership_upgrade_log | Webhook 处理后写入 |
| 应用安装 / Webhook | 商城 o_my_app、o_webhook | 安装时注册,应用库不建表 |
| 会员折扣 | 商城 o_level_product_discount | UI → 调商城 API 写 |
| 积分加权 | 商城 o_point_rule.member_points_weight | UI → 调商城 API 写 |
| 会员日 | 商城 o_store_config | UI → 调商城 API 写 |
| 运费扩展 | 商城 o_shipping_discount 等 | UI → 调商城 API 写 |
| 顾客级别定义 | 商城 o_customer_level | 只读引用 level_id |
| 顾客当前级别 | 商城 customer.level_id | Webhook 升级后 回写 |
应用库仅 2 张表;折扣/积分/会员日/运费不在应用库存储。
2. 表结构
2.1 o_membership_upgrade_rule — 店铺设置 + 级别门槛(单表)
用 level_id 区分行类型:
| level_id | 含义 | 使用字段 |
|---|---|---|
| 0 | 店铺级设置(每店固定 1 行) | auto_upgrade_enabled、upgrade_condition_type |
| >0 | 各级别门槛 | amount_threshold 或 order_count_threshold |
| 字段 | 说明 |
|---|---|
store_id | 商城店铺 ID |
level_id | 0=店铺设置;>0=o_customer_level.id |
auto_upgrade_enabled | 仅 level_id=0;默认 1 |
upgrade_condition_type | 仅 level_id=0;amount / order_count 二选一 |
amount_threshold | 仅 level_id>0 且条件=金额 |
order_count_threshold | 仅 level_id>0 且条件=笔数 |
约束:UNIQUE(store_id, level_id)。
业务约定:
- 不做自动降级
- 切换
upgrade_condition_type时,清空所有level_id>0行中未使用维度的字段 - 判升级时:先读
level_id=0行,再读level_id>0行 + 商城o_customer_level.weight排序
级别联动
| 商城事件 | 应用侧处理 |
|---|---|
| 新增顾客级别 | INSERT 一行 level_id=新 id(门槛默认 NULL/0) |
| 删除顾客级别 | DELETE level_id=该 id 的行 |
| 首次安装 | INSERT level_id=0 默认行 + 各级别门槛行 |
示例
| store_id | level_id | auto_upgrade | condition_type | amount_threshold | order_count_threshold |
|---|---|---|---|---|---|
| 100 | 0 | 1 | amount | NULL | NULL |
| 100 | 1 | — | — | 0.00 | NULL |
| 100 | 2 | — | — | 1000.00 | NULL |
| 100 | 3 | — | — | 5000.00 | NULL |
2.2 o_membership_upgrade_log — 升级流水
Webhook 成功升级后 INSERT;未升级不写。
| 字段 | 说明 |
|---|---|
from_level_id / to_level_id | 仅升级时 to 权重更高 |
metric_value | 判定时 total_spent 或 orders_count |
order_id / order_number | 触发订单 |
webhook_trace_id | 排障 |
3. 安装与 Webhook(商城侧,无应用表)
| 项 | 存储 |
|---|---|
| 是否已安装 | 商城 o_my_app |
| Webhook 订阅 | 商城 o_webhook(orders/paid,delay_time=300) |
安装流程概要:
- 商城应用中心安装 → 应用识别
store_id - 应用库 INSERT
o_membership_upgrade_rule:level_id=0+ 各级别行 - 调商城 API 注册 Webhook;不在应用库记录 webhook_id
4. 升级算法(应用实现参考)
输入:store_id, customer_id, order(Webhook body)
1. 读 level_id=0 行 → auto_upgrade_enabled=0 则结束
2. 读 upgrade_condition_type
3. 读顾客 level_id, total_spent, orders_count
4. 读 level_id>0 规则 + 商城 level weight
5. 按 weight 升序找最高可达级别 target
6. target.weight <= current.weight → 结束
7. 调商城 API 更新 customer.level_id
8. INSERT o_membership_upgrade_log
5. 配置页与表对应
| 原型页面 | 应用库 | 商城库 |
|---|---|---|
| 应用会员配置 / 升级规则 | o_membership_upgrade_rule | — |
| 会员指定折扣方案 | — | o_level_product_discount |
| 积分配置 | — | o_point_rule.member_points_weight |
| 会员日 | — | o_store_config |
| 运费折扣 | — | o_shipping_discount |
6. 部署
mysql -h ... -u ... membership_app_db < docs/sql/membership_app_tables.sql7. 变更记录
| 日期 | 说明 |
|---|---|
| 2026-06-08 | 初版:4 张应用表 |
| 2026-06-08 | 合并 upgrade_setting + upgrade_rule;删除 o_membership_store |