文档目录
营销服务

简介

本技术文档面向 DouPHP 营销子系统,覆盖优惠券系统、分销系统、分享推广与 VIP 会员四大业务域。文档从系统架构、数据流、处理逻辑、集成点、错误处理与性能特征等维度展开,并结合源码级图示说明营销活动与电商系统的集成方式,提供可操作的配置与扩展建议,帮助开发者快速落地营销功能并评估活动效果与 ROI。

项目结构

营销相关能力分布在多个模块中,采用“控制器-服务-模型/基础库”的分层组织:

  • 优惠券:核心服务在 coupon 模块 core/service,前端入口在 front/controller,资格判定在 CouponEligibility。
  • 分销:核心服务在 distribution 模块 core/service,API 入口在 api/controller,订单支付后联动由 order 模块触发。
  • 分享:前端入口在 share 模块 front/controller,负责展示当前用户的分享记录。
  • VIP:前台服务在 front/service/vip,VIP 状态枚举在 core/foundation/vip。
graph TB
subgraph "优惠券"
CCtrl["前端控制器<br/>CouponController"]
CSvc["核心服务<br/>CouponService"]
CEli["资格判定<br/>CouponEligibility"]
end
subgraph "分销"
DSvc["核心服务<br/>DistributionService"]
DUserCtrl["用户API控制器<br/>UserController"]
OStTrans["订单状态流转<br/>OrderStatusTransition"]
end
subgraph "分享"
SCtrl["分享入口控制器<br/>ShareController"]
end
subgraph "VIP"
VSvc["VIP服务<br/>VipService"]
VStat["VIP状态枚举<br/>VipStatus"]
end
CCtrl --> CSvc
CSvc --> CEli
OStTrans --> DSvc
DUserCtrl --> DSvc
SCtrl --> |"渲染分享列表"| SCtrl
VSvc --> VStat

核心组件

  • 优惠券系统
    • 发放与领取:前端控制器接收领取请求,调用服务完成幂等领取。
    • 使用与折扣:服务根据券类型(满减/比例)计算折扣金额,支持上限控制与条件门槛。
    • 资格判定:基于时间窗口、首单限制、范围匹配(按商品/分类/全量)计算生效金额并判断可用。
  • 分销系统
    • 佣金派发:订单进入已支付/已完成时,按直推/间推比例计算佣金,写入钱包账户,具备去重保护。
    • 奖励比例:读取用户等级对应的直推/间推百分比。
    • 关系树:维护上下级关系链,用于统计与展示;返利派发层级硬封顶为 2 级。
  • 分享推广
    • 分享记录:统一入口展示当前登录用户的分享记录分页。
  • VIP 会员
    • 套餐与记录:获取 VIP 套餐列表与开通记录,结合订单状态展示。
    • 生命周期:通过状态枚举区分生效、过期与无记录三种状态。

架构总览

营销子系统围绕“订单事件驱动 + 领域服务编排”的架构模式:

  • 订单支付成功后,触发会员积分、分销奖励、VIP 等级升级等联动。
  • 优惠券在下单前进行资格校验与折扣计算。
  • 分享与 VIP 作为独立业务域,提供用户侧页面与服务接口。
sequenceDiagram
participant U as "用户"
participant CC as "优惠券控制器"
participant CS as "优惠券服务"
participant CE as "资格判定"
participant OS as "订单状态流转"
participant DS as "分销服务"
participant W as "钱包服务"
U->>CC : 提交领取优惠券
CC->>CS : claimCouponIfNew(...)
CS-->>U : 返回领取结果
U->>OS : 完成支付
OS->>DS : orderReward(order_sn)
DS->>W : createMoney(佣金, from=订单号)
W-->>DS : 入账成功
DS-->>OS : 完成

详细组件分析

优惠券系统

  • 领取流程
    • 前端控制器校验登录态与参数,调用服务执行领取,确保幂等。
  • 使用与折扣
    • 服务根据券类型(满减/比例)与订单金额计算折扣,支持最大折扣上限。
    • 资格判定器依据时间窗口、首单限制、范围匹配计算生效金额并判断是否满足门槛。
  • 状态与过期
    • 服务提供券状态查询与过期判断,便于前端展示与禁用。
flowchart TD
Start(["开始"]) --> CheckTime["检查券有效期"]
CheckTime --> TimeOK{"在有效期内?"}
TimeOK --> |否| EndNo["不可用"]
TimeOK --> |是| CheckFirst["是否限首单?"]
CheckFirst --> FirstOnly{"是首单?"}
FirstOnly --> |否| EndNo
FirstOnly --> |是| CalcScope["计算生效金额"]
CalcScope --> Enough{"达到门槛?"}
Enough --> |否| EndNo
Enough --> |是| ApplyDiscount["应用折扣(满减/比例/上限)"]
ApplyDiscount --> EndYes["可用并返回折扣"]

分销系统

  • 佣金派发
    • 订单进入已支付/已完成时,按直推/间推比例计算佣金,写入钱包账户,以订单号为 from 字段实现幂等。
    • 法律红线:仅派发至直推与间推两级,level>=3 一律不派发。
  • 奖励比例
    • 读取用户等级对应的直推/间推百分比,未命中则返回 0。
  • 关系树
    • 维护上下级关系链,用于统计与展示;写入过程具备环检测与深度上限保护。
classDiagram
class DistributionService {
+orderReward(order_sn) void
+rewardPercent(type, user_id) float
+recordRelation(userId, directUserId) void
+parents(userId) array
+children(parentUserId, level) array
}
class WalletService {
+createMoney(user_id, source, balance, action, money, from, from_user_id) void
}
DistributionService --> WalletService : "调用"

分享推广

  • 分享记录
    • 统一入口展示当前登录用户的分享记录分页,便于用户查看推广明细。
  • 与分销联动
    • 分享行为通常作为分销链路的前置动作,具体转化与佣金结算由分销服务在订单完成后处理。
sequenceDiagram
participant U as "用户"
participant SC as "分享控制器"
participant SS as "分享服务"
U->>SC : 访问 /share
SC->>SS : buildShareListData(userId, page, url)
SS-->>SC : 分享列表+分页
SC-->>U : 渲染分享记录页面

VIP 会员

  • 套餐与记录
    • 获取 VIP 套餐列表与开通记录,结合订单状态展示,便于用户续费与查看历史。
  • 生命周期
    • 通过状态枚举区分生效、过期与无记录,供会员中心展示与续费提示。
stateDiagram-v2
[*] --> 无记录
无记录 --> 生效中 : "购买成功且start_at<=now<end_at"
生效中 --> 已过期 : "end_at<=now"
已过期 --> 无记录 : "清理或不再显示"

依赖关系分析

  • 订单状态流转对营销的驱动
    • 订单支付成功后,触发积分消费与分销奖励派发,保证幂等与并发安全。
  • 优惠券与购物车
    • 资格判定器依赖购物车行结构与券配置,计算生效金额并判断可用性。
  • 分销与钱包
    • 分销服务通过钱包服务写入佣金,使用订单号作为幂等键。
  • 分享与用户中心
    • 分享控制器聚合用户分享记录,服务于用户中心展示。
graph LR
Order["订单状态流转"] --> Point["积分"]
Order --> Dist["分销奖励"]
Cart["购物车"] --> Elig["优惠券资格判定"]
Dist --> Wallet["钱包服务"]
Share["分享控制器"] --> UserCenter["用户中心"]

性能与并发特性

  • 幂等性保障
    • 优惠券领取与使用:通过日志表与状态字段避免重复发放与重复使用。
    • 分销佣金:以订单号为 from 字段,配合钱包写入去重,防止重复入账。
  • 并发安全
    • 订单支付联动在同一事务内对订单行加锁,避免回调与后台重跑并发导致重复发放。
  • 性能优化建议
    • 优惠券资格判定尽量使用索引字段(时间、状态、用户ID)。
    • 分销关系树写入设置深度上限,避免异常数据导致的长链遍历。
    • 分享列表分页加载,减少大结果集传输。

故障排查指南

  • 优惠券无法使用
    • 检查券是否在有效期内、是否限首单、购物车金额是否达到门槛。
    • 参考资格判定器的时间窗口与生效金额计算逻辑。
  • 分销佣金未到账
    • 确认订单状态是否为已支付/已完成,是否存在推荐人及有效等级配置。
    • 检查钱包写入是否因幂等键冲突被跳过。
  • 分享记录为空
    • 确认当前用户是否已登录,分享服务是否正确构建列表数据。
  • VIP 状态异常
    • 核对 VIP 记录的 start_at/end_at 与当前时间,确认状态枚举输出是否符合预期。

结论

DouPHP 营销子系统以订单事件为核心驱动,结合优惠券、分销、分享与 VIP 四大模块,形成完整的拉新、促活、转化与留存闭环。系统在幂等性与并发安全方面做了充分设计,具备较强的可扩展性与可观测性。通过合理的规则配置与数据分析,可有效提升营销活动的转化率与 ROI。

附录:开发示例与最佳实践

  • 配置营销活动
    • 优惠券:设置时间窗口、适用范围(全量/分类/商品)、门槛金额、折扣类型与上限。
    • 分销:为用户等级配置直推/间推百分比,确保推荐关系正确建立。
    • 分享:在用户中心启用分享记录展示,便于追踪推广效果。
    • VIP:配置套餐价格、有效期与权益内容,结合订单状态展示。
  • 处理用户参与
    • 优惠券领取:调用前端控制器接口,确保幂等领取。
    • 分销申请:调用 API 控制器进行业务校验与申请登记。
    • 分享统计:通过分享控制器获取用户分享记录,结合后端统计口径进行分析。
  • 计算营销效果与 ROI
    • 优惠券:统计领取率、核销率、带动 GMV 与折扣成本。
    • 分销:统计佣金支出、新增用户数、复购率与贡献利润。
    • 分享:统计分享次数、点击转化率、最终成交数。
    • VIP:统计购买转化率、续费率与客单价提升。
  • 灵活配置与扩展机制
    • 优惠券范围与门槛可通过配置项与数据库字段灵活调整。
    • 分销奖励比例按用户等级动态读取,便于分层激励。
    • 分享与 VIP 页面可通过模板与路由扩展,适配不同业务场景。
添加日期:2026-10-05