营销活动中心功能说明

更新日期:2026-05-22。

本文记录后端服务在 WinTradeCloudService 中的营销活动中心能力。当前代码主要分布在 wt-marketwt-businesswt-userwt-clientwt-adminwt-messagewt-quartz

功能范围

营销活动中心把平台运营、商户经营、消费者领券、订单优惠、预算核算和补贴结算串成一条业务链路。

能力 说明 主要入口
平台营销活动 平台创建、启动、暂停、恢复、结束、关闭未使用券、结算归档和取消营销活动 AdminPlatformMarketingActivityController
商户营销活动 商户创建和维护自己的店铺活动,活动状态流转与平台活动一致 MerchantMarketingActivityController
平台活动参与 支持平台批量邀请商户、商户通过报名向导创建或选择商户活动并提交 SKU、平台审核通过或拒绝,审核通过后自动补齐平台活动店铺和 SKU 范围 AdminPlatformMarketingScopeControllerMerchantMarketingScopeController
活动范围 支持按店铺和 SKU 绑定活动参与范围;标准平台活动流程由报名审核生成范围,平台也可手工补录范围用于重点商品预置或运营复核 MarketingActivityScopeResolver
优惠券 支持平台券、商户券、券组、券池、发券记录、用券记录和分摊记录 平台营销接口、商户营销接口、个人卡券钱包接口
活动价 支持平台活动价和商户活动价,商品当前价格试算会优先匹配活动价 MarketingActivityPriceComponent
订单优惠 下单预览、创建、支付、取消、超时和退款链路接入优惠券锁定、使用和释放 MarketingCouponOrderComponent
预算核算 支持平台和商户预算池、充值、冻结、解冻、人工调账、对账、低预算预警和剩余预算退回 MarketingBudgetAccountingComponent
补贴结算 支持营销补贴确认、作废、标记需调账、人工调账完成、异常结案和确认后推进商户结算入账 MarketingSubsidyConfirmComponentMarketingSubsidySettlementAdvanceComponent
成本报表 定时生成活动成本日报,供平台和商户查询 MarketingActivityCostDailyReportTaskComponent

设计目标

目标 说明
活动可配置 平台和商户可以分别配置活动、范围、券池、活动价和预算
优惠可追踪 用户从领券、锁券、用券到释放都有卡券流水和用券记录
成本可核算 平台承担、商户承担、预算预占、预算使用和结算后调整可对账
补贴可治理 营销产生的商户补贴可以人工确认、作废、异常结案和结算推进
状态可恢复 活动、卡券、订单、预算和补贴都有可查询状态,支持异常后继续处理
消息可触达 卡券过期、预算预警、补贴待确认等事件可以进入消息和待办体系

多端入口

端别 基础路径 主要用户 覆盖能力
平台管理端 /api/v1/marketing/admin 平台管理员 平台活动、商户报名、平台券、平台预算、活动价、补贴确认、成本日报、商户券记录查询
商户端 /api/v1/merchant/marketing 商户 商户活动、平台活动报名、商户券、商户预算、商户活动价、平台活动价成本确认、商户侧成本和补贴记录
消费者端 /api/v1/user/personal/coupon-wallet 个人用户 我的卡券、卡券流水、可领取优惠券、领取平台券和商户券
订单端 /api/v1/personal/order 个人用户 购物车和单商品订单预览、可用券查询、带券下单和支付

业务分层

营销活动中心不是单一 Controller,而是跨 wt-marketwt-businesswt-userwt-messagewt-quartz 的组合能力。

层级 主要模块 职责
活动资料层 wt-market 保存平台活动、商户活动、活动范围、优惠券、券池、活动价、预算池、成本报表和补贴记录
交易聚合层 wt-business 在价格试算、订单创建、支付、取消、退款和结算中调用营销组件
用户资产层 wt-user 保存个人卡券钱包、卡券项和卡券流水
消息触达层 wt-message 承接优惠券过期提醒、预算预警、补贴待确认等营销事件
定时调度层 wt-quartz 周期性处理活动到期、券过期、预算预警、预算对账和成本日报

推荐按以下顺序理解代码:

  1. 先看 AdminPlatformMarketingActivityControllerMerchantMarketingActivityController,确认平台和商户活动主档状态流转。
  2. 再看 AdminPlatformMarketingScopeControllerMerchantMarketingScopeController,确认平台邀请、商户报名、审核和活动范围。
  3. 再看 PersonalCouponWalletController,确认消费者如何领取和查看卡券。
  4. 再看 OrderAbstractServiceImplMarketingCouponOrderComponent,确认优惠券如何接入订单。
  5. 最后看 MarketingBudgetAccountingComponentMarketingSubsidyConfirmComponent 和定时任务,确认成本、预算和补贴如何闭环。

关键状态

营销活动中心新增多个状态枚举,联调时建议前端按后端枚举展示,不要在前端自行推断状态。

状态对象 代表枚举 常见状态语义
活动状态 MarketingActivityStatus 草稿、待开始、进行中、暂停、已结束、已结算、已取消
平台活动参与状态 MarketingActivityParticipationStatus 已邀请、已申请、已通过、已拒绝、已退出、已移除
优惠券状态 PersonalCouponStatus 可用、已锁定、已使用、已过期、已退回
发券状态 CouponIssueStatus 待发放、发放成功、发放失败
用券状态 CouponUseStatus 已锁定、已使用、已释放、已退回
预算流水状态 ActivityBudgetTransactionStatus 成功、失败、处理中
补贴确认状态 MarketingSubsidyConfirmStatus 待确认、部分确认、已确认、已作废、异常结案
补贴结算推进状态 MarketingSubsidySettlementAdvanceStatus 待推进、已推进、推进失败

活动状态建议按下面口径使用:

动作 前置状态 结果 说明
创建活动 草稿或待开始 具体初始状态以后端 Service 为准
启动活动 未开始或已暂停 进行中 启动前需要活动时间、范围、预算和策略满足要求
暂停活动 进行中 暂停 暂停后不应继续参与价格计算和领券
恢复活动 暂停 进行中 恢复时会重新校验活动有效性
结束活动 进行中或暂停 已结束 到期任务也会自动结束活动
关闭未使用券 已结束 已结束 归档前可提前作废仍可用的钱包券,避免活动归档后继续产生权益
结算归档 已结束 已结算 归档前需要钱包券、订单、预算、补贴和结算推进均满足结清条件
取消活动 未开始且无业务引用 已取消 已被领券、用券或产生成本的活动不应直接取消

平台管理能力

平台管理端新增的营销接口用于运营人员统一维护平台营销活动。

模块 关键动作 说明
平台活动 分页、详情、创建、修改、删除、启动、暂停、恢复、结束、关闭未使用券、结算归档、取消 活动状态由后端 Service 控制,结算归档前会执行结算校验;后台配置向导要求维护 1:116:92:1 三张主宣传图
商户报名 报名分页、详情、批量邀请、审核通过、拒绝 审核通过后自动把商户填报的店铺和 SKU 加入平台活动参与范围;邀请报名页使用 /merchant-marketing/platform-activity-apply-workflow
活动范围 店铺范围、SKU 范围的分页、详情、创建、批量创建、修改和删除 标准流程由商户报名审核生成范围,手工维护主要用于平台预置重点范围或复核修正
活动公告 活动与公告关联的维护 用于把营销活动和公告内容绑定
平台优惠券 券组、券、用券策略、策略目标、券池的维护 券池负责发行额度、可领数量和预算占用
发券和用券记录 平台发券、平台用券、平台分摊、商户发券、商户用券、商户分摊记录查询 用于审计优惠券从发放到使用的全链路
平台预算 预算池、预算流水、预算充值、手工账务、剩余预算退回、结算后调整 平台营销成本进入预算池和流水体系
平台活动价 活动价格策略维护、成本确认记录和活动价分摊记录 当前价格计算会读取生效活动价
补贴确认 补贴确认、作废、标记需调账、人工调账完成、异常结案、动作记录和补贴结算推进 平台可以人工治理营销补贴金额
活动成本日报 成本日报分页和详情 支撑活动成本统计和复核

平台运营推荐通过 营销中心 / 平台营销活动配置向导 按以下顺序配置:

  1. 创建平台活动,录入活动名称、活动编码、活动时间、活动状态、活动说明和 1:116:92:1 三张主宣传图。
  2. 按需手工补录活动参与店铺和 SKU。标准报名流程可以跳过,等商户报名审核通过后自动生成范围。
  3. 先保存预算池,确保后续券池有明确预算来源。
  4. 如活动包含优惠券,创建券组、券定义、用券策略和券池,券池必须绑定已保存的预算池。
  5. 如活动包含平台活动价,创建平台活动价策略,并确认成本承担方和商户确认规则;没有平台预选 SKU 时可以先跳过,等报名生成 SKU 范围后再补充。
  6. 批量邀请目标商户,报名页面地址使用 /merchant-marketing/platform-activity-apply-workflow
  7. 商户报名后,平台审核通过,系统会把商户填报的店铺和 SKU 同步进入平台活动范围。
  8. 发布前检查预算池、券池、优惠券池预算绑定、审核通过报名或手工 SKU 范围,再启动活动。
  9. 活动运行期间查看发券记录、用券记录、活动价分摊、成本日报和预算流水。
  10. 活动结束后关闭未使用券、执行补贴确认、剩余预算退回、结算后调整和活动归档。

平台端需要重点控制两个边界:

边界 说明
预算边界 预算不足时不应继续放大活动成本,券池发放、活动价使用和补贴确认都需要可追踪预算来源
结算边界 活动归档前需要确认发券、用券、退款、补贴、结算推进和预算退回均有明确状态

商户经营能力

商户端新增营销接口用于商户自主管理店铺营销。

模块 关键动作 说明
商户活动 分页、详情、创建、修改、启动、暂停、恢复、结束、关闭未使用券、结算归档、取消 所有查询和写入会按当前商户账号校验归属
平台活动报名 报名分页、提交报名 商户推荐通过报名向导选择已邀请的平台活动,创建或选择商户活动,选择参与 SKU 后提交报名
活动范围 店铺范围和 SKU 范围维护 商户只能维护自己名下活动和店铺商品
商户优惠券 券组、券、用券策略、策略目标、券池维护 支持商户自发券和用户领券
发券和用券记录 发券记录、用券记录、分摊记录查询 商户可查看本店优惠券使用成本
商户预算 预算池、预算流水、充值、手工账务、剩余预算退回、结算后调整 预存预算可从商户钱包充值进入活动预算池
商户活动价 活动价策略维护、活动价分摊查询 创建和修改时会校验商户活动价合法性
平台活动价成本确认 商户维护平台活动价成本确认记录 用于平台活动价涉及商户成本承担时的确认
补贴记录 补贴确认记录、动作记录和结算推进记录查询 商户只能查看自身补贴数据
成本日报 活动成本日报查询 商户可按自身活动和店铺查看成本

商户运营推荐配置顺序:

  1. 如参与平台活动,进入 商户营销 / 平台活动报名向导,先选择 已邀请 的平台活动。
  2. 在向导中创建新的商户活动,或选择已有商户活动;创建时会带入平台活动和店铺信息。
  3. 选择本店参与活动的 SKU 并提交报名,报名必须包含 SKU。
  4. 等待平台审核通过;通过后系统会把店铺和报名 SKU 写入平台活动范围。
  5. 如活动以优惠券为主,创建商户券、券池和用券策略。
  6. 如活动以价格折扣为主,创建商户活动价策略。
  7. 给商户活动预算池充值,充值资金来自商户钱包。
  8. 启动活动,并在活动期内查看领券、用券、预算流水和成本日报。
  9. 活动结束后查看补贴确认和结算推进记录,核对实际承担成本。

商户侧所有查询和写入都必须限制在当前商户账号下。接口已经在 Controller 中调用 getMerchantAccountId() 并校验归属,前端仍然需要避免把其他商户 ID 混入请求。

消费者卡券能力

个人用户新增卡券钱包,优惠券生命周期从领取进入钱包开始。

能力 路径 说明
我的卡券钱包 GET /api/v1/user/personal/coupon-wallet 查询或创建当前个人账户的钱包
我的卡券分页 GET /api/v1/user/personal/coupon-wallet/item/page 查询个人卡券列表
我的卡券详情 GET /api/v1/user/personal/coupon-wallet/item/{walletItemId} 查询单张卡券详情并校验归属
卡券流水分页 GET /api/v1/user/personal/coupon-wallet/log/page 查询领取、锁定、使用、释放、过期等流水
可领取平台券 GET /api/v1/user/personal/coupon-wallet/claimable/platform/page 查询当前用户可领取的平台券池
可领取商户券 GET /api/v1/user/personal/coupon-wallet/claimable/merchant/page 查询当前用户可领取的商户券池
领取平台券 POST /api/v1/user/personal/coupon-wallet/claim/platform/{couponPoolId} 领取平台活动优惠券
领取商户券 POST /api/v1/user/personal/coupon-wallet/claim/merchant/{couponPoolId} 领取商户活动优惠券

消费者卡券生命周期:

阶段 触发动作 结果
可领取 活动、券池、时间、库存和用户领取限制满足条件 出现在可领取平台券或商户券列表
已领取 用户调用领取接口 生成 PersonalCouponWalletItem 和领取流水
已锁定 用户创建订单并选择该券 卡券绑定订单,避免重复使用
已使用 订单支付成功 生成用券记录和分摊记录
已释放 订单取消、支付失败或待支付超时 卡券回到可用或按释放策略结束
已过期 超过有效期且未使用 定时任务置为过期,并可触发过期提醒
已退回 退款或售后完成 按退款策略处理卡券和预算成本

卡券展示建议至少包含:券名称、优惠类型、优惠金额或折扣、适用范围、有效期、状态、来源活动、所属商户店铺、是否即将过期。

订单接入逻辑

订单链路现在支持平台券和商户券。

  1. 订单预览时,前端可以传入 platformCouponWalletItemIdmerchantCouponWalletItems
  2. 后端先完成商品价格、库存、运费和地址试算。
  3. MarketingCouponOrderComponent 在试算结果上叠加优惠券优惠金额。
  4. 创建正式订单时,系统锁定本次使用的优惠券。
  5. 支付前会校验已锁定优惠券仍然有效,校验失败会在新事务中释放优惠券。
  6. 支付成功后,优惠券标记为已使用,并生成用券记录和分摊记录。
  7. 订单取消、支付失败、待支付超时或退款完成时,系统按释放原因处理优惠券。
  8. 支付成功后会创建待确认营销补贴,后续由补贴确认和结算推进流程处理。

涉及字段:

对象 新增字段 用途
订单创建请求 platformCouponWalletItemId 使用一张平台券
订单创建请求 merchantCouponWalletItems 跨店订单按店铺使用商户券
订单试算结果 couponDiscountAmount 优惠券总优惠金额
订单试算结果 platformCouponAmount 平台承担优惠金额
订单试算结果 merchantCouponAmount 商户承担优惠金额
订单项 merchantSettlementBaseAmount 商户结算基数
订单项 promotionIdpromotionData 营销活动快照

订单请求约束:

字段 约束
platformCouponWalletItemId 一个订单最多使用一张平台券
merchantCouponWalletItems 跨店订单按店铺传入,每个 merchantShopId 最多一张商户券
merchantCouponWalletItems[].merchantShopId 必须属于本次订单实际成功试算的店铺
merchantCouponWalletItems[].walletItemId 必须属于当前个人账户,且状态为可用
accountAddressId 参与运费试算,优惠券适用门槛应以试算后的订单金额为准

订单金额口径:

金额字段 说明
totalPrice 商品货架原总金额
totalDiscountPrice 价格策略或活动价产生的商品优惠
couponDiscountAmount 优惠券产生的优惠总额
platformCouponAmount 平台承担的优惠券金额
merchantCouponAmount 商户承担的优惠券金额
totalPayPrice 用户最终应付金额,包含商品、运费和优惠结果
merchantSettlementBaseAmount 商户结算时的基数,活动价和商户承担优惠会影响该值

活动价计算

商品当前价格计算新增活动价优先逻辑。

  1. 查询 SKU 所属 SPU、店铺货架和库存。
  2. 先通过 MarketingActivityPriceComponent 查找匹配的平台活动价或商户活动价。
  3. 若命中活动价,则写入活动价、优惠金额、结算基数和 promotionData
  4. 若未命中活动价,则回退到原有会员价、阶梯价、促销价等价格策略。
  5. 最后叠加国内和国际运费,得到 totalPayPrice

活动价会记录成本承担方、结算扣减规则和活动来源,便于后续预算核算和补贴处理。

活动价匹配建议按以下维度排查:

维度 排查点
活动有效性 活动状态、开始时间、结束时间、是否暂停、是否已结算或取消
范围有效性 店铺是否在活动范围内,SKU 是否在活动范围内
策略有效性 活动价策略是否启用、是否人工关闭、是否在生效时间内
数量条件 阶梯或最小购买数量是否满足
成本规则 成本承担方、是否影响商户结算基数、是否需要商户确认
冲突处理 同一 SKU 命中多个活动价时,需要以后端排序和冲突组规则为准

预算和补贴

营销预算用于控制活动成本,补贴用于承接商户结算中的营销补偿。

能力 说明
预算池 平台和商户分别有预算池实体,记录总额、余额、预占、已用、冻结和已退回金额
预算流水 所有充值、预占、使用、释放、冻结、解冻、调账、退回和结算后调整都落流水
预算充值 平台预算从平台交易钱包划转,商户预存预算从商户钱包扣款
预算对账 定时检查预算池金额和流水汇总是否一致
低预算预警 定时检查低预算池并触发提醒能力
成本日报 汇总活动成本,形成按日成本报表
补贴确认 对营销产生的待确认补贴进行人工确认、作废或异常结案
结算推进 补贴确认完成后,可以推进店铺级结算入账

预算流水建议按业务类型核对:

业务类型 核对方式
充值 核对平台交易钱包或商户钱包是否同步扣款或划转
预占 核对券池发券、订单锁券或活动价使用前是否冻结预算
使用 核对订单支付成功后预算是否从预占转为已用
释放 核对订单取消、超时或支付失败后预算是否释放
退回 核对活动结清后剩余预算是否退回到对应钱包
结算后调整 核对活动归档后退款或人工复核差异是否形成冲销流水

补贴治理建议:

  1. 支付成功后生成待确认补贴记录。
  2. 平台查看补贴确认列表,核对订单、订单项、活动、预算池、商户、店铺和应收补贴金额。
  3. 金额无误时执行确认,写入确认人、确认时间和确认流水。
  4. 金额异常但仍需人工追踪时执行作废或异常结案,并记录治理说明。
  5. 补贴确认完成后,执行补贴结算推进,把补贴纳入店铺级结算入账。
  6. 后续发生退款或复核差异时,通过结算后调整记录成本冲销。

定时任务

任务类 方法 作用
MarketingActivityTask endExpiredActivities 自动结束已到期活动
MarketingCouponTask expireCoupons 将已过期卡券置为过期
MarketingCouponTask remindExpiringCoupons 对即将过期卡券生成提醒
MarketingOrderTask closeTimeoutPendingPaymentOrders 关闭超时未支付订单并释放优惠券
MarketingBudgetTask warnLowBudgets 低预算预警
MarketingBudgetTask reconcileBudgets 预算池对账
MarketingBudgetTask generateDailyCostReport 生成活动成本日报

定时任务联调时需要确认调度参数和运行频率。当前任务类只提供可被 Quartz 调用的方法,具体 cron 表达式需要在系统定时任务配置中维护。

数据模型概览

新增数据模型分布在 wt-marketwt-userwt-business

模块 代表实体 说明
活动 PlatformMarketingActivityMerchantMarketingActivity 平台活动和商户活动
活动范围 PlatformMarketingActivityShopRelPlatformMarketingActivitySkuRelMerchantMarketingActivityShopRelMerchantMarketingActivitySkuRel 活动参与店铺和 SKU
优惠券 PlatformActivityCouponMerchantActivityCouponPlatformActivityCouponPoolMerchantActivityCouponPool 券定义和发放池
用券策略 PlatformCouponUseStrategyMerchantCouponUseStrategyPlatformCouponUseStrategyTargetMerchantCouponUseStrategyTarget 优惠券适用规则和目标
用券记录 PlatformCouponIssueRecordMerchantCouponIssueRecordPlatformCouponUseRecordMerchantCouponUseRecord 发券和用券审计
预算 PlatformActivityBudgetPoolMerchantActivityBudgetPoolPlatformActivityBudgetTransactionMerchantActivityBudgetTransaction 预算池和预算流水
活动价 PlatformActivityPriceStrategyMerchantActivityPriceStrategyMarketingActivityPriceUseAllocationRecord 活动价策略和分摊记录
补贴 MarketingSubsidyConfirmRecordMarketingSubsidyConfirmActionRecordMarketingSubsidySettlementAdvanceRecord 补贴确认和结算推进
卡券钱包 PersonalCouponWalletPersonalCouponWalletItemPersonalCouponWalletLog 个人优惠券钱包、卡券和流水

数据关系

flowchart LR Activity["营销活动"] --> Scope["活动范围"] Activity --> Coupon["优惠券"] Coupon --> Pool["券池"] Pool --> WalletItem["个人卡券"] WalletItem --> Order["订单"] Activity --> Price["活动价"] Price --> Order Order --> Allocation["分摊记录"] Allocation --> Budget["预算流水"] Order --> Subsidy["补贴确认"] Subsidy --> Settlement["结算推进"]

核心关系说明:

关系 说明
活动与范围 活动通过店铺范围和 SKU 范围限制生效对象
活动与券池 券池决定优惠券发行数量、每人限制、预算占用和发放时间
卡券与订单 卡券被订单锁定后不能重复使用,支付成功后变成已使用
订单与分摊 平台券、商户券和活动价优惠需要分摊到订单项,支撑成本统计
分摊与预算 分摊金额进入预算流水,用于活动成本和预算余额核算
订单与补贴 商户需要补贴的营销优惠会生成补贴确认记录
补贴与结算 补贴确认完成后推进到商户结算,形成入账依据

联调注意事项

  • 这次后端提交新增了大量实体和 Repository,需要确认数据库迁移脚本已经同步,否则可能出现缺表或缺字段。
  • 前端下单必须区分平台券和商户券,跨店订单每个店铺最多传一张商户券。
  • 商品价格展示应以后端当前价格接口为准,不要在前端自行重算活动价或优惠券金额。
  • 预算充值和剩余预算退回会影响钱包和预算流水,联调时需要同时核对钱包流水、预算流水和活动成本数据。
  • 补贴确认是人工治理流程,作废和异常结案不会自动释放结算入账,需要运营明确后续处理口径。

验收清单

场景 验收口径
平台活动 平台能创建活动、绑定范围、配置券池或活动价、充值预算并启动活动
商户活动 商户只能操作自己的活动、券、预算和活动价,不能访问其他商户数据
用户领券 用户能看到可领取券,领取后卡券钱包新增卡券和流水
可用券查询 订单试算后能返回符合金额、范围、时间和状态的可用券
带券下单 创建订单后卡券进入锁定状态,重复使用同一张券会失败
支付用券 支付成功后卡券变为已使用,用券记录、分摊记录和预算流水完整
取消释放 取消、支付失败或超时关闭后卡券和预算能按规则释放
活动价 命中活动价的商品当前价格包含活动快照和结算基数
预算对账 预算池余额、预占、已用、冻结、退回与流水汇总一致
补贴确认 补贴确认、作废、异常结案和结算推进都有动作记录
成本日报 活动结束后能按日查询平台和商户活动成本

待完善事项

事项 说明
数据库迁移 当前后端新增大量实体,需要确认建表和字段迁移脚本同步
前端页面 adminclient 和商户端需要补齐营销活动、卡券钱包、预算和补贴页面
权限菜单 新增 admin:marketing:*client:merchant:marketing-* 权限需要配置菜单和角色
消息模板 优惠券过期、预算预警、补贴待确认需要补齐消息模板和路由
运营规则 补贴作废、异常结案、结算后调整等人工治理动作需要明确 SOP