营销活动业务逻辑 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["冲销成本"]