营销活动业务逻辑梳理

更新日期:2026-05-22。

本文基于后端 WinTradeCloudService 的营销相关代码梳理,主要覆盖 wt-marketwt-businesswt-userwt-clientwt-adminwt-quartz 中的营销逻辑。它偏业务阅读,帮助先理解平台、商户和用户分别能做什么,以及优惠在订单里如何真正生效。

一句话结论

当前后端营销中心支持的主线是:平台活动、商户活动、平台券、商户券、平台活动价、商户活动价、活动范围、预算池、成本分摊、补贴确认和活动归档。

代码里没有看到独立的秒杀、拼团、团购、满赠、包邮券等专门活动模型。现有“活动”更像一个营销方案容器,里面可以挂优惠券或活动价,再通过店铺、SKU、预算和使用策略控制生效。

后端支持哪些营销活动

类型 发起方 给用户的表现 后端核心对象 当前支持程度
平台活动 平台运营 首页广告、平台券、平台活动价 PlatformMarketingActivity 已支持
商户活动 商铺店家 店铺券、店铺活动价 MerchantMarketingActivity 已支持
平台优惠券 平台运营 用户领取平台券,下单抵扣 PlatformActivityCouponPlatformActivityCouponPool 已支持
商户优惠券 商铺店家 用户领取店铺券,下单抵扣 MerchantActivityCouponMerchantActivityCouponPool 已支持
平台活动价 平台运营 商品直接展示活动价 PlatformActivityPriceStrategy 已支持
商户活动价 商铺店家 店铺商品直接展示活动价 MerchantActivityPriceStrategy 已支持
活动展示资源 平台运营 Banner 或广告跳转活动 BannerAdvertise 已支持,字段可关联平台活动
平台活动商户参与 平台和商户 商户参与平台活动后商品才可命中某些平台规则 PlatformMarketingActivityParticipation 已支持邀请、报名、审核通过和拒绝

核心业务对象

营销中心不是单表逻辑,而是一组对象组合。

对象 作用
活动 定义活动名称、编码、时间、状态和说明,是所有营销能力的容器
活动范围 限定活动覆盖哪些店铺和 SKU;平台活动标准流程由商户报名审核通过后自动生成范围,手工范围主要用于预置和复核
优惠券定义 定义券类型、门槛、优惠金额、折扣比例、有效期和退券策略
券池 控制发放时间、总数量、每人限领、已领取、已发放、已使用和预算额度
用券策略 控制券适用全部、店铺、SPU、SKU,以及是否允许和其他优惠叠加
卡券钱包 用户领取后形成个人资产,状态从可用、锁定、已使用、过期到退回
活动价策略 控制商品命中固定活动价、折扣活动价或阶梯活动价
预算池 控制活动成本,可有限预算,也可无限预算只记账
分摊记录 把优惠金额分摊到订单项,用于成本、报表和补贴
补贴确认 支撑平台或商户承担营销成本后的人工确认和结算推进

平台可以做什么

平台管理员通过 /api/v1/marketing/admin 维护平台侧营销。

  1. 通过平台活动配置向导创建平台活动,填写活动名称、编码、开始时间、结束时间、说明和 1:116:92:1 三张主宣传图。
  2. 按需手工补录活动范围,可以绑定参与店铺和参与 SKU;标准流程也可以等商户报名审核通过后自动生成范围。
  3. 配置展示资源,Banner 和广告位可以关联平台营销活动。
  4. 配置平台优惠券,包括券组、券定义、用券策略、策略目标和券池。
  5. 配置平台活动价,指定商户、店铺、SPU 或 SKU,设置活动价或折扣。
  6. 配置预算池,支持充值、人工调账、冻结、解冻、剩余预算退回和结算后调整。
  7. 查看发券记录、用券记录、分摊记录、活动价分摊、成本日报和补贴记录。
  8. 批量邀请商户报名,审核商户提交的参与记录,审核通过后自动补齐平台活动参与店铺和 SKU。
  9. 推进活动状态,包括启动、暂停、恢复、结束、关闭未使用钱包券、结算归档和取消。

平台活动适合做全站活动、跨店活动、指定店铺活动、指定 SKU 活动和平台补贴类活动。

商铺店家可以做什么

商户通过 /api/v1/merchant/marketing 维护自己的店铺营销。Controller 会按当前商户账号补齐或校验 merchantAccountId,避免操作其他商户数据。

  1. 创建商户活动,绑定自己的商户账号和店铺。
  2. 配置商户活动范围,可以绑定本店店铺范围和 SKU 范围。
  3. 创建商户优惠券组、优惠券、用券策略、策略目标和券池。
  4. 向用户发放商户券,也可以让用户主动领取商户券。
  5. 创建商户活动价,让本店商品直接命中活动价。
  6. 配置商户预算池,商户预存预算可以从商户钱包充值。
  7. 查看本商户的发券、用券、分摊、预算流水、成本日报和补贴推进记录。
  8. 对平台活动价中由商户承担的成本进行确认。

商户活动适合做店铺满减券、店铺立减券、店铺折扣券、指定商品券、指定 SKU 活动价和店铺自补贴活动。

商户如何参与平台活动

后端存在 PlatformMarketingActivityParticipation 参与关系,状态包括 INVITEDAPPLIEDAPPROVEDREJECTEDWITHDRAWNREMOVED。当前 Controller 已经暴露平台邀请、商户报名、平台审核通过和拒绝的主要动作。

平台活动如果要让某个商户活动承接成本或范围,建议按下面流程操作:

  1. 平台通过 营销中心 / 平台营销活动配置向导 创建平台活动,并通过 /platform/activity-participation/invite/batch 批量邀请目标商户店铺。
  2. 邀请记录里的报名页面地址使用 /merchant-marketing/platform-activity-apply-workflow
  3. 商户通过 商户营销 / 平台活动报名向导 选择 INVITED 平台活动。
  4. 商户在向导中创建新的商户活动,或选择已有商户活动;创建商户活动时会关联 platformActivityId
  5. 商户选择本店参与平台活动的 SKU 后,通过 /platform/activity-participation/apply 提交报名,报名必须包含 SKU。
  6. 平台通过 /platform/activity-participation/{participationId}/approve 审核通过,系统会自动把商户店铺和报名 SKU 写入平台活动范围。
  7. 平台活动范围和商户活动范围会共同校验,店铺和 SKU 必须同时匹配。
  8. 如果平台活动价成本由商户承担,还需要商户创建平台活动价成本确认记录。

需要注意:WITHDRAWNREMOVED 状态已在枚举中存在,但当前显式接口主要覆盖邀请、报名、通过和拒绝,退出和移除仍需要结合后续运营需求确认是否补接口。

活动状态规则

平台活动和商户活动共用一套状态。

状态 含义
DRAFT 草稿,允许编辑和取消
WAITING 待开始,允许启动和取消
RUNNING 进行中,允许领券、发券、活动价生效
PAUSED 已暂停,不允许新增领券和活动价试算
ENDED 已结束,不再领券发券,但已发且未过期的钱包券仍可使用
SETTLED 已结算归档,不再产生新权益
CANCELED 已取消,只允许未开始且无业务引用的活动进入

不同业务动作对活动状态的要求不同。

动作 允许口径
领券或后台发券 活动必须是 RUNNING,在活动时间内,并且启用
活动价试算 活动必须是 RUNNING,在活动时间内,并且启用
钱包券下单和支付核销 活动可以是 RUNNINGENDED,但不能早于活动开始
活动自动结束 到达结束时间后,定时任务会把 RUNNINGPAUSED 活动结束
结算归档 活动必须先 ENDED,且钱包券、订单、预算、补贴和结算推进都关闭
取消活动 只允许 DRAFTWAITING,且不能已有发券、用券或预算流水

活动范围规则

活动范围有两层。

  1. 活动级范围:平台活动或商户活动可以配置参与店铺和参与 SKU。
  2. 优惠券使用范围:优惠券策略可以配置 ALLSHOPSPUSKU 或预留的 CATEGORY

后端的实际判断是交集逻辑。

场景 规则
平台活动 如果配置了 SKU 范围,商品 SKU 必须命中;如果配置了店铺范围,商品店铺必须命中
商户活动 商品必须属于活动绑定的商户店铺,同时满足商户活动的店铺和 SKU 范围
商户承接平台活动 还要存在已审核通过的参与关系,并且平台活动范围也要命中
优惠券策略为 ALL 归属范围内全部商品可用
优惠券策略为 SHOPSPUSKU 必须维护策略目标,订单商品要命中目标
优惠券策略为 CATEGORY 枚举预留,当前订单用券逻辑会提示暂不支持分类券

配置侧需要注意:

  • 平台活动不再要求先手工配置店铺范围和 SKU 范围才能邀请商户。
  • 商户报名审核通过后,会把报名店铺和 SKU 自动写入平台活动范围。
  • 发布前至少需要存在审核通过报名生成的 SKU 范围,或平台已经手工补录有效 SKU 范围。
  • 商户报名不能用空 SKU 表示整店参加。

优惠券规则

当前支持三类券。

券类型 计算规则
FULL_REDUCTION 满减券,订单适用商品金额达到门槛后抵扣固定金额
DIRECT_REDUCTION 立减券,无门槛或弱门槛,直接抵扣固定金额
DISCOUNT 折扣券,按用户支付比例计算折扣,可配置最大抵扣金额

优惠券还有这些关键规则:

规则 说明
有效期 支持固定起止时间,或领取、发放后若干天有效
退券策略 支持可退并可再次使用、不可退、可退但不可再次使用
券池库存 totalQuantity 控制总数量,claimedQuantitygrantedQuantity 共同占用数量
每人限领 perUserLimit 控制单个用户能领取或被发放的数量
幂等号 当每人可多次领券时,领券请求必须带 requestNo
预算绑定 券池必须绑定预算池,否则领券或用券会失败;后台向导要求先保存预算池,再创建或绑定券池
使用策略 每张券必须显式配置启用的用券策略,即使是全场券也要配置 ALL
预算预占 如果预算池扣减模式是 ISSUE_RESERVE,领券或发券时预占预算
支付扣减 如果预算池扣减模式是 USE_DEDUCT,支付核销时扣减预算

活动价规则

活动价会在商品当前价格计算时生效,发生在优惠券之前。

活动价类型 计算规则
FIXED_PRICE 固定活动价
DISCOUNT_PRICE 折扣活动价,discountRate 表示用户支付比例
TIERED_PRICE 阶梯活动价,按购买数量区间匹配

匹配活动价时,后端会校验这些条件:

  1. 策略已审核通过。
  2. 策略、活动维度和人工开关都启用。
  3. 币种必须是 CNY
  4. 商品命中指定 SPU 或 SKU。
  5. 数量满足最小和最大购买数量。
  6. 当前时间在策略生效时间内。
  7. 活动本身处于活动价可用状态。
  8. 商品命中活动范围。
  9. 如果平台活动价由商户承担成本,商户必须有已通过的平台活动参与关系和成本确认记录。

活动价优先级目前是:先找商户活动价,再找平台活动价;同一层内选择用户单价最低的策略。命中活动价后,订单项会保存 promotionIdpromotionData,用于后续分摊、预算和补贴。

优惠叠加规则

订单里优惠的叠加顺序大致是:

  1. 当前价格先算商品原价、活动价和运费。
  2. 用户选择商户券后,先按店铺维度扣商户券。
  3. 用户选择平台券后,再基于剩余商品金额扣平台券。
  4. 最终重新汇总订单金额。

关键限制如下:

限制 说明
平台券数量 一个订单最多使用一张平台券
商户券数量 购物车跨店下单时,每个店铺最多一张商户券
SKU 直购 最多只能使用一张当前店铺商户券
重复使用 同一张钱包券不能在同一订单里重复传入
平台券和商户券叠加 平台券策略和所有商户券策略都必须允许 allowPlatformMerchantStack
活动价和优惠券叠加 策略字段预留了是否允许与活动价叠加,但当前订单校验主要落在平台券和商户券叠加上
金额分摊 优惠金额按适用商品的剩余商品金额比例分摊,四舍五入差额落到金额最大的商品
商户结算基数 商户券或商户承担活动价如果是结算扣减模式,会减少 merchantSettlementBaseAmount

用户端如何参与

用户端有两类参与方式:主动领券和自动命中活动价。

领券流程

  1. 用户查询可领取平台券:GET /api/v1/user/personal/coupon-wallet/claimable/platform/page
  2. 用户查询可领取商户券:GET /api/v1/user/personal/coupon-wallet/claimable/merchant/page
  3. 后端返回是否可领取、不可领取原因、活动名、券名、有效期、限领数量和已领数量。
  4. 用户领取平台券:POST /api/v1/user/personal/coupon-wallet/claim/platform/{couponPoolId}
  5. 用户领取商户券:POST /api/v1/user/personal/coupon-wallet/claim/merchant/{couponPoolId}
  6. 领取成功后生成个人卡券钱包项和卡券流水。

下单用券流程

  1. 用户先做订单预览,不传优惠券,拿基础金额和店铺拆单。
  2. 用户查询该订单可用券:
    • 购物车:POST /api/v1/personal/order/cart/available-coupon
    • SKU 直购:POST /api/v1/personal/order/available-coupon
  3. 后端从用户可用钱包券中筛选可用于当前订单的券,并估算优惠金额。
  4. 用户选择平台券和商户券后,再调用订单预览接口,传入 platformCouponWalletItemIdmerchantCouponWalletItems
  5. 后端重新计算优惠后的金额。
  6. 用户确认下单,创建订单时后端锁定所选优惠券。
  7. 用户支付时,后端再次校验锁定券、活动状态、预算和活动价锁价。
  8. 支付成功后,卡券变为已使用,生成用券记录、分摊记录、预算流水和待确认补贴。

活动价参与流程

用户不需要主动选择活动价。商品当前价格接口或订单试算会自动调用活动价匹配逻辑,命中后直接影响商品单价、优惠金额、订单项快照和商户结算基数。

订单取消、超时和退款

场景 后端处理
待支付订单取消 释放锁定优惠券,释放或关闭对应预算责任
待支付超时 定时任务关闭订单,并释放订单已锁定的营销权益
支付前营销失效 释放优惠券,关闭待支付订单,提示用户重新试算下单
支付成功后退款 根据退券策略决定券是否回到可用、退回不可用或不退券
活动价退款 回滚活动价分摊、预算和补贴相关责任
补贴异常 进入补贴确认、作废、需调账或异常结案流程

预算和成本规则

预算池分平台和商户两套,但账务组件统一处理。

预算模式 说明
LIMITED 有限预算,必须保证可用、预占、已用、冻结、已退回之间平衡
UNLIMITED 无限预算,只记录成本,不实际限制余额
ISSUE_RESERVE 领券或发券时先预占预算
USE_DEDUCT 支付核销时直接扣减预算

预算流水支持充值、预占、释放预占、核销预占、直接核销、退款返还、退回预占、退回剩余预算、结算后调整、冻结、解冻和日终对账。

活动成本主要来自三类:

  1. 平台券抵扣。
  2. 商户券抵扣。
  3. 平台或商户活动价优惠。

这些成本都会尽量分摊到订单项,再进入预算流水、成本日报和补贴确认。

配置示例

平台满减券活动

  1. 平台创建平台活动。
  2. 配置活动店铺和 SKU 范围,或不配表示全范围。
  3. 创建平台优惠券,类型选 FULL_REDUCTION,设置门槛和抵扣金额。
  4. 创建用券策略,范围选 ALL 或指定目标。
  5. 创建券池,设置发放时间、总量、每人限领和预算池。
  6. 如预算有限,给预算池充值并设置扣减模式。
  7. 启动活动。
  8. 用户领取平台券,下单时选择平台券。

商户店铺券活动

  1. 商户创建商户活动,并选择本店。
  2. 配置参与 SKU。
  3. 创建商户优惠券和用券策略。
  4. 创建商户券池,绑定商户预算池。
  5. 商户预算池充值。
  6. 启动活动。
  7. 用户领取商户券,在该店铺下单时使用。

商品活动价

  1. 平台或商户创建活动。
  2. 配置活动范围。
  3. 创建活动价策略,指定 SPU 或 SKU。
  4. 选择固定活动价、折扣活动价或阶梯活动价。
  5. 平台活动价如果由商户承担成本,需要商户确认。
  6. 启动活动。
  7. 商品当前价格自动命中活动价,用户无需领券。

目前需要关注的缺口

缺口 说明
秒杀、拼团、团购 未看到独立模型和接口,当前不能按专门活动规则处理
分类券 枚举已预留,但订单用券逻辑当前提示暂不支持分类券
平台活动退出和移除 状态枚举已预留,但当前显式接口主要覆盖邀请、报名、审核通过和拒绝
活动价与优惠券叠加 字段预留较完整,但订单侧显式叠加校验主要覆盖平台券和商户券
前端运营 SOP 补贴确认、异常结案、结算后调整这类人工治理动作还需要业务口径

阅读代码时的入口

主题 主要代码
平台营销接口 AdminPlatformMarketingActivityControllerAdminPlatformMarketingScopeControllerAdminPlatformMarketingCouponControllerAdminPlatformMarketingPriceControllerAdminPlatformMarketingBudgetControllerAdminMarketingSubsidyController
商户营销接口 MerchantMarketingActivityControllerMerchantMarketingScopeControllerMerchantMarketingCouponControllerMerchantMarketingPriceControllerMerchantMarketingBudgetControllerMerchantMarketingSubsidyController
用户卡券 PersonalCouponWalletControllerMarketingCouponIssueComponentPersonalCouponWalletComponent
订单可用券 PersonalOrderTransactionControllerMarketingOrderAvailableCouponComponent
订单锁券和核销 OrderAbstractServiceImplMarketingCouponOrderComponent
活动价 ProductCurrentPriceServiceImplMarketingActivityPriceComponent
活动状态和范围 MarketingActivityEffectiveComponentMarketingActivityScopeResolver
预算账务 MarketingBudgetAccountingComponent
归档和定时任务 MarketingActivitySettlementComponentMarketingActivitySettlementGuardComponentMarketingActivityTaskMarketingCouponTaskMarketingOrderTaskMarketingBudgetTask