营销活动业务逻辑 Mermaid 图
营销活动业务逻辑 Mermaid 图
更新日期:2026-05-22。
1. 营销能力总览
flowchart TB
Marketing["营销活动中心"]
Marketing --> Platform["平台营销"]
Marketing --> Merchant["商户营销"]
Marketing --> User["用户参与"]
Marketing --> Order["订单交易"]
Marketing --> Budget["预算与成本"]
Marketing --> Settlement["补贴与归档"]
Platform --> PlatformActivity["平台活动"]
Platform --> PlatformCoupon["平台券"]
Platform --> PlatformPrice["平台活动价"]
Platform --> PlatformScope["平台活动范围"]
Platform --> Participation["商户报名审核"]
Platform --> BannerAd["Banner / 广告关联"]
Merchant --> MerchantActivity["商户活动"]
Merchant --> MerchantCoupon["商户券"]
Merchant --> MerchantPrice["商户活动价"]
Merchant --> MerchantScope["商户活动范围"]
Merchant --> CostConfirm["平台活动价成本确认"]
User --> ClaimCoupon["领券"]
User --> Wallet["卡券钱包"]
User --> AvailableCoupon["订单可用券"]
User --> AutoPrice["自动命中活动价"]
Order --> Preview["订单试算"]
Order --> LockCoupon["创建订单锁券"]
Order --> PayUse["支付核销"]
Order --> CancelRelease["取消 / 超时释放"]
Order --> RefundReturn["退款退券 / 冲销"]
Budget --> BudgetPool["预算池"]
Budget --> BudgetTx["预算流水"]
Budget --> Allocation["优惠分摊"]
Budget --> CostReport["成本日报"]
Settlement --> SubsidyConfirm["补贴确认"]
Settlement --> SubsidyAdvance["补贴结算推进"]
Settlement --> ActivitySettle["活动结算归档"]
2. 平台活动配置流程
flowchart TD
A["进入平台营销活动配置向导"] --> B["创建活动基础信息"]
B --> C["上传 1:1 / 16:9 / 2:1 主宣传图"]
C --> D{"是否需要平台预置范围?"}
D -->|需要| E["手工补录店铺 / SKU"]
D -->|不需要| F["跳过范围补录"]
E --> G["保存预算池"]
F --> G
G --> H{"是否配置平台券?"}
H -->|是| I["创建券组和券定义"]
I --> J["配置用券策略和目标"]
J --> K["创建券池并绑定预算池"]
H -->|否| L["跳过平台券"]
K --> M{"是否配置活动价?"}
L --> M
M -->|是| N["创建活动价策略"]
N --> O{"是否需要商户承担成本?"}
O -->|是| P["等待商户成本确认"]
O -->|否| Q["进入邀请商家"]
P --> Q
M -->|否| Q
Q --> R["批量邀请商户"]
R --> S["报名页 /merchant-marketing/platform-activity-apply-workflow"]
S --> T["商户提交报名和 SKU"]
T --> U["平台审核通过"]
U --> V["自动补齐平台店铺 / SKU 范围"]
V --> W["发布前检查预算 / 券池 / 范围"]
W --> X["启动活动"]
X --> Y["用户领券或商品命中活动价"]
Y --> Z["订单用券 / 活动价分摊"]
Z --> AA["预算扣减和成本日报"]
AA --> AB["补贴确认"]
AB --> AC["结束活动"]
AC --> AD["关闭未使用券"]
AD --> AE["结算归档"]
3. 商户活动与报名流程
flowchart TD
A["商户营销 / 平台活动报名向导"] --> B["选择已邀请的平台活动"]
B --> C{"商户活动"}
C -->|新建| D["创建商户活动并关联平台活动"]
C -->|已有| E["选择已有商户活动"]
D --> F["选择本店参与 SKU"]
E --> F
F --> G["提交平台活动报名"]
G --> H["等待平台审核"]
H --> I{"审核结果"}
I -->|通过| J["平台范围自动写入店铺 / SKU"]
I -->|拒绝| K["调整 SKU 或资料后重新提交"]
J --> L{"是否配置商户自营优惠?"}
L -->|商户券| M["创建商户券 / 策略 / 券池"]
L -->|商户活动价| N["创建商户活动价"]
L -->|不配置| O["仅参与平台活动"]
M --> P["配置商户预算池"]
N --> P
O --> Q["启动商户活动"]
P --> Q
Q --> R["查看用券、预算、成本日报"]
R --> S["结束活动并归档"]
4. 用户领券和用券流程
sequenceDiagram
participant U as 用户端
participant W as 卡券钱包接口
participant C as 领券组件
participant O as 订单接口
participant M as 营销订单组件
participant B as 预算账务
U->>W: 查询可领取平台券 / 商户券
W->>C: 校验活动、券池、库存、限领、预算
C-->>W: 返回可领取列表和不可领取原因
U->>W: 领取优惠券
W->>C: 创建发券记录
C->>B: 按规则预占预算
C-->>U: 写入个人卡券钱包
U->>O: 订单预览,不传券
O-->>U: 返回基础金额和拆单结果
U->>O: 查询订单可用券
O->>M: 按订单商品筛选钱包券
M-->>U: 返回可用券和推荐优惠金额
U->>O: 带券再次预览
O->>M: 计算平台券和商户券抵扣
M-->>O: 返回优惠后金额
U->>O: 创建订单
O->>M: 锁定所选钱包券
U->>O: 支付订单
O->>M: 支付前校验锁券和活动价
M->>B: 核销预算
M-->>O: 标记优惠券已使用
5. 订单营销优惠生效顺序
flowchart TD
A["订单试算开始"] --> B["校验商品、货架、库存、地址"]
B --> C["计算商品当前价格"]
C --> D{"是否命中活动价?"}
D -->|商户活动价| E["使用商户活动价"]
D -->|平台活动价| F["使用平台活动价"]
D -->|未命中| G["回退原价格策略"]
E --> H["形成订单项价格快照"]
F --> H
G --> H
H --> I{"用户是否选择商户券?"}
I -->|是| J["按店铺校验商户券"]
J --> K["按剩余商品金额分摊商户券"]
I -->|否| L["跳过商户券"]
K --> M{"用户是否选择平台券?"}
L --> M
M -->|是| N["校验平台券和叠加规则"]
N --> O["按剩余商品金额分摊平台券"]
M -->|否| P["跳过平台券"]
O --> Q["汇总订单金额"]
P --> Q
Q --> R["创建订单时锁券"]
R --> S["支付前二次校验"]
S --> T{"支付是否成功?"}
T -->|成功| U["标记券已使用并扣减预算"]
T -->|失败或失效| V["释放券并关闭或提示重试"]
6. 活动状态流转
stateDiagram-v2
[*] --> DRAFT: 创建活动
DRAFT --> RUNNING: 启动
DRAFT --> CANCELED: 取消
WAITING --> RUNNING: 启动
WAITING --> CANCELED: 取消
RUNNING --> PAUSED: 暂停
PAUSED --> RUNNING: 恢复
RUNNING --> ENDED: 手动结束 / 到期自动结束
PAUSED --> ENDED: 手动结束 / 到期自动结束
ENDED --> SETTLED: 结算归档
SETTLED --> [*]
CANCELED --> [*]
note right of RUNNING
允许领券、发券、活动价试算
end note
note right of ENDED
停止领券和活动价
已发未过期钱包券仍可用
end note
note right of SETTLED
不再产生新权益
钱包券、订单、预算、补贴必须已关闭
end note
7. 优惠券生命周期
stateDiagram-v2
[*] --> Claimable: 活动和券池可领取
Claimable --> AVAILABLE: 用户领取 / 后台发放
AVAILABLE --> LOCKED: 创建订单锁券
LOCKED --> USED: 支付成功
LOCKED --> AVAILABLE: 取消 / 超时 / 支付失败且可复用
LOCKED --> EXPIRED: 释放时已过期
AVAILABLE --> EXPIRED: 超过有效期
USED --> AVAILABLE: 退款且可再次使用
USED --> RETURNED: 退款但不可再次使用
USED --> USED: 不可退券
EXPIRED --> [*]
RETURNED --> [*]
8. 数据关系
erDiagram
PLATFORM_ACTIVITY ||--o{ PLATFORM_ACTIVITY_SHOP_REL : covers
PLATFORM_ACTIVITY ||--o{ PLATFORM_ACTIVITY_SKU_REL : covers
PLATFORM_ACTIVITY ||--o{ PLATFORM_COUPON : defines
PLATFORM_ACTIVITY ||--o{ PLATFORM_PRICE_STRATEGY : defines
PLATFORM_ACTIVITY ||--|| PLATFORM_BUDGET_POOL : owns
PLATFORM_ACTIVITY ||--o{ PLATFORM_PARTICIPATION : invites
MERCHANT_ACTIVITY ||--o{ MERCHANT_ACTIVITY_SHOP_REL : covers
MERCHANT_ACTIVITY ||--o{ MERCHANT_ACTIVITY_SKU_REL : covers
MERCHANT_ACTIVITY ||--o{ MERCHANT_COUPON : defines
MERCHANT_ACTIVITY ||--o{ MERCHANT_PRICE_STRATEGY : defines
MERCHANT_ACTIVITY ||--|| MERCHANT_BUDGET_POOL : owns
PLATFORM_COUPON ||--|| PLATFORM_COUPON_STRATEGY : uses
PLATFORM_COUPON ||--o{ PLATFORM_COUPON_POOL : issues
PLATFORM_COUPON_STRATEGY ||--o{ PLATFORM_COUPON_TARGET : targets
MERCHANT_COUPON ||--|| MERCHANT_COUPON_STRATEGY : uses
MERCHANT_COUPON ||--o{ MERCHANT_COUPON_POOL : issues
MERCHANT_COUPON_STRATEGY ||--o{ MERCHANT_COUPON_TARGET : targets
PLATFORM_COUPON_POOL ||--o{ WALLET_ITEM : creates
MERCHANT_COUPON_POOL ||--o{ WALLET_ITEM : creates
WALLET_ITEM ||--o{ COUPON_USE_RECORD : locks_or_uses
COUPON_USE_RECORD ||--o{ COUPON_ALLOCATION : splits
ORDER ||--o{ ORDER_ITEM : contains
ORDER_ITEM ||--o{ COUPON_ALLOCATION : receives
ORDER_ITEM ||--o{ ACTIVITY_PRICE_ALLOCATION : receives
PLATFORM_BUDGET_POOL ||--o{ BUDGET_TRANSACTION : records
MERCHANT_BUDGET_POOL ||--o{ BUDGET_TRANSACTION : records
COUPON_ALLOCATION ||--o{ SUBSIDY_CONFIRM : may_create
ACTIVITY_PRICE_ALLOCATION ||--o{ SUBSIDY_CONFIRM : may_create
9. 预算扣减口径
flowchart TD
A["营销优惠产生"] --> B{"预算池类型"}
B -->|UNLIMITED| C["不限制余额,只记录成本"]
B -->|LIMITED| D{"扣减模式"}
D -->|ISSUE_RESERVE| E["领券 / 发券时预占预算"]
E --> F{"订单是否支付?"}
F -->|支付成功| G["预占转已用"]
F -->|取消 / 超时 / 支付失败| H["释放预占"]
F -->|过期 / 关闭责任| I["释放或转冻结责任"]
D -->|USE_DEDUCT| J["支付成功时直接扣减预算"]
J --> K{"是否退款?"}
K -->|是| L["预算返还或转预占"]
K -->|否| M["形成活动成本"]
G --> M
H --> N["预算回到可用"]
I --> O["等待归档或责任关闭"]
L --> P["冲销成本"]