文档目录
优惠券API

简介

本文件面向营销平台开发者,提供优惠券模块的完整API参考与使用说明。覆盖优惠券创建、发放、领取、使用、核销等生命周期管理;说明优惠券类型(满减券、折扣券、现金券)及适用规则配置;提供用户侧“我的优惠券”列表、状态查询、绑定等能力;并给出后台批量操作、日志审计、统计分析与自动化发放策略的建议方案。同时包含并发控制与防刷机制建议,帮助在高并发场景下稳定运行。

项目结构

本项目采用前后端分离与多入口设计:

  • API层:面向小程序/移动端/第三方系统,暴露REST风格接口
  • Admin层:面向运营后台,提供可视化CRUD与批量操作
  • Service层:业务逻辑封装,统一处理数据访问与领域规则
  • Model/ORM:数据模型与持久化(通过框架ORM访问数据库表)
graph TB
Client["客户端<br/>小程序/APP/第三方"] --> API["API控制器<br/>CouponController / UserController"]
API --> SvcFront["前端服务<br/>Front Service CouponService"]
API --> CoreSvc["核心服务<br/>Core Service CouponService"]
CoreSvc --> DB["数据库<br/>coupon / user_coupon / order_coupon 等"]
Admin["后台管理"] --> AdminCtrl["后台控制器<br/>Admin CouponController / LogController"]
AdminCtrl --> AdminSvc["后台服务<br/>Admin Service"]
AdminSvc --> DB

核心组件

  • API控制器
    • 小程序优惠券控制器:负责领取、返回用户可用券列表
    • 会员中心控制器:负责“我的优惠券”分页列表展示
  • 后台控制器
    • 优惠券管理:列表、新增、编辑、删除、批量动作
    • 领取记录:列表、筛选、批量删除
  • 服务层
    • 核心服务:查询可领/已领券、计算状态、格式化展示数据
    • 前台服务:构建用户券列表数据、分页、链接生成
    • 后台服务:表单校验、CRUD、批量操作、日志聚合

架构总览

优惠券API遵循“控制器→服务→数据源”的分层架构。控制器仅做参数接收与响应组装,核心业务逻辑下沉至服务层,保证可测试性与复用性。

sequenceDiagram
participant C as "客户端"
participant AC as "API控制器"
participant FS as "前台服务"
participant CS as "核心服务"
participant DB as "数据库"
C->>AC : 请求领取优惠券(携带id, ip)
AC->>FS : 调用领取方法(用户ID, id, ip)
FS->>CS : 校验并发/限流/库存
CS->>DB : 检查有效期/状态/已领标记
DB-->>CS : 返回券信息与状态
CS-->>FS : 返回结果(成功/失败)
FS-->>AC : 返回用户券列表
AC-->>C : 响应{coupon_list}

详细组件分析

小程序优惠券控制器

职责

  • 接收领取请求,校验用户身份与参数
  • 调用前台服务完成领取流程
  • 返回用户当前券列表(如领取成功)

关键流程

  • 获取当前用户ID与IP
  • 调用领取方法(含防重与并发控制)
  • 若领取成功,拉取用户券列表并返回
flowchart TD
Start(["进入领取接口"]) --> GetCtx["获取用户ID与IP"]
GetCtx --> CallClaim["调用服务领取方法"]
CallClaim --> CheckResult{"领取成功?"}
CheckResult -- 否 --> ReturnFail["返回错误信息"]
CheckResult -- 是 --> FetchList["获取用户券列表"]
FetchList --> ReturnSuccess["返回{coupon_list}"]

会员中心“我的优惠券”接口

职责

  • 按页返回当前用户的优惠券列表
  • 支持分页参数与路由上下文

关键流程

  • 解析分页参数
  • 调用服务构建列表数据
  • 组装标题、列表、分页、总数后返回
sequenceDiagram
participant U as "用户"
participant UC as "UserController"
participant FS as "前台服务"
U->>UC : GET /route=coupon/user?page=1
UC->>FS : buildCouponListData(userId, page, route)
FS-->>UC : {coupon_list, pager}
UC-->>U : {title, coupon_list, pager, total}

后台优惠券管理

职责

  • 列表查询、新增、编辑、删除、批量动作
  • 与后台服务交互完成表单校验与数据持久化

关键流程

  • 列表:分页+过滤条件
  • 新增/编辑:表单校验→写入→跳转提示
  • 删除:校验ID→执行删除→返回结果
  • 批量动作:根据选择项执行统一动作
flowchart TD
A["后台列表"] --> B["新增/编辑"]
B --> C["表单校验"]
C --> D{"校验通过?"}
D -- 否 --> E["返回错误"]
D -- 是 --> F["保存/更新"]
F --> G["跳转并提示"]
A --> H["删除/批量动作"]
H --> I["执行并返回结果"]

后台领取记录管理

职责

  • 查看领取日志,支持时间范围、券ID、关键词筛选
  • 批量删除记录

关键流程

  • 合并会话中的筛选条件
  • 构建日志列表与分页
  • 支持批量删除
sequenceDiagram
participant OA as "运营人员"
participant LC as "LogController"
participant LS as "后台服务"
OA->>LC : 查询日志(时间/券ID/关键词)
LC->>LS : mergeSessionFilter + buildCouponLogListData
LS-->>LC : {list, pager}
LC-->>OA : 渲染列表
OA->>LC : 批量删除
LC->>LS : action(data)
LS-->>LC : 成功
LC-->>OA : 重定向并提示

核心服务:券列表与状态计算

职责

  • 查询当前有效且开启的券
  • 计算每个券的用户状态(可领/已领/不可用等)
  • 格式化金额与类型标签

复杂度

  • 单次查询为O(n)遍历结果集进行状态计算与格式化

优化建议

  • 对高频列表接口增加缓存(Redis)
  • 将状态判断拆分为独立方法,便于单元测试
flowchart TD
Q["查询有效券集合"] --> L["遍历每条券"]
L --> S["计算用户状态"]
S --> T["格式化类型与金额"]
T --> R["组装列表项"]
R --> End["返回列表"]

依赖关系分析

  • 控制器依赖服务:API控制器依赖前台服务与核心服务;后台控制器依赖后台服务
  • 服务依赖ORM:通过框架ORM访问数据库表(如coupon、user_coupon、order_coupon)
  • 外部依赖:语言包用于文案国际化;中间件用于鉴权、限流与安全头
graph LR
AC["API控制器"] --> FS["前台服务"]
AC --> CS["核心服务"]
AdminC["后台控制器"] --> AdminS["后台服务"]
FS --> ORM["ORM/数据库"]
CS --> ORM
AdminS --> ORM

性能与并发控制

  • 领取接口防刷
    • 基于用户ID+券ID的分布式锁或原子计数,防止重复领取
    • 结合IP与设备指纹进行短期限流(如令牌桶/滑动窗口)
  • 列表接口优化
    • 对“可领券列表”进行缓存(TTL按券有效期动态设置)
    • 分页与索引优化(start_at、end_at、status、sort)
  • 事务与一致性
    • 领取、绑定、使用、核销涉及多表变更时,使用事务保证一致性
    • 幂等键设计(如领取流水号),避免重复提交导致的数据不一致
  • 监控与告警
    • 对高QPS接口进行指标采集(成功率、延迟、错误码分布)
    • 异常阈值触发告警,快速定位热点券或异常流量

故障排查指南

常见问题与定位思路

  • 领取失败
    • 检查券是否过期、状态是否启用、用户是否已领取
    • 核对并发锁与限流策略是否误拦截
  • 列表为空
    • 确认用户是否有权限、是否已绑定到账户
    • 检查缓存是否命中旧数据
  • 后台批量操作失败
    • 校验输入参数与权限
    • 查看事务回滚日志与数据库约束冲突

结论

本模块以清晰的分层架构实现了优惠券的核心能力:领取、列表展示、后台管理与日志审计。通过服务层抽象,保证了业务规则的集中管理与可扩展性。建议在现有基础上完善并发控制、缓存策略与统计报表,以满足大规模营销活动的高可用与可观测性需求。

附录:接口清单与示例

小程序API

  • 领取优惠券

    • 路径:/route=coupon(POST)
    • 参数:id(券ID)、ip(可选,用于风控)
    • 返回:成功时包含coupon_list(用户券列表)
    • 说明:内部调用前台服务完成领取与并发控制
    • 参考实现:领取流程:49-73
  • 我的优惠券列表

    • 路径:/route=coupon/user(GET)
    • 参数:page(默认1)
    • 返回:title、coupon_list、pager、total
    • 说明:分页展示当前用户券列表
    • 参考实现:列表流程:43-63

后台管理API

  • 优惠券列表

    • 路径:/admin/route=coupon(GET)
    • 参数:page
    • 返回:列表与分页
    • 参考实现:列表:54-73
  • 新增优惠券

    • 路径:/admin/route=admin.coupon.create(POST)
    • 参数:表单字段(名称、简介、类型、面额、门槛、起止时间等)
    • 返回:成功后跳转到编辑页
    • 参考实现:新增:91-104
  • 编辑优惠券

    • 路径:/admin/route=admin.coupon.edit(GET/PUT)
    • 参数:id、表单字段
    • 返回:成功后停留在编辑页
    • 参考实现:编辑/更新:106-142
  • 删除优惠券

    • 路径:/admin/route=coupon(DELETE)
    • 参数:id
    • 返回:删除结果
    • 参考实现:删除:144-158
  • 批量动作

    • 路径:/admin/route=coupon/action(POST)
    • 参数:批量操作数据
    • 返回:重定向并提示
    • 参考实现:批量动作:160-171
  • 领取记录列表

    • 路径:/admin/route=coupon.log(GET)
    • 参数:coupon_id、time_start、time_end、page、key
    • 返回:日志列表与分页
    • 参考实现:日志列表:55-87
  • 批量删除记录

    • 路径:/admin/route=coupon.log/action(POST)
    • 参数:批量操作数据
    • 返回:重定向并提示
    • 参考实现:批量删除:104-113

优惠券类型与规则

  • 类型
    • 满减券:满足门槛减免固定金额
    • 折扣券:按比例打折
    • 现金券:无门槛或低门槛直接抵扣
  • 规则配置要点
    • 生效时间:start_at、end_at
    • 门槛:condition(最低消费金额)
    • 面额:money或百分比(percent)
    • 状态:status(启用/禁用)
    • 排序:sort(影响列表顺序)
  • 参考实现:类型与金额格式化:37-68

使用与核销

  • 使用
    • 下单时选择可用券,计算优惠金额
    • 订单关联券(order_coupon),记录抵扣金额
  • 核销
    • 订单完成后标记券为已使用
    • 记录核销时间与订单号,便于审计
  • 参考实现:订单中券汇总:264-288

统计与分析

  • 指标建议
    • 领取量、使用率、核销率、ROI(活动投入产出比)
    • 分券维度:领取/使用/核销趋势
    • 分渠道:不同推广渠道的效果对比
  • 数据来源
    • 领取日志(coupon_log)
    • 订单关联(order_coupon)
    • 券模板(coupon)
  • 实施建议
    • 建立定时任务汇总指标
    • 提供后台报表与导出功能

自动化发放策略

  • 触发方式
    • 新用户注册赠送
    • 指定活动页面分享领取
    • 购物车满额自动发放
  • 策略配置
    • 目标人群:标签/等级/地域
    • 发放频率:每日/每周上限
    • 风控:同一设备/IP限制
  • 实施建议
    • 使用消息队列异步发放
    • 幂等键避免重复发放
    • 灰度发布与A/B测试
添加日期:2026-10-05