【day13】营销系统:优惠券核销流程
营销系统:优惠券核销流程设计
优惠券核销是营销系统中的核心功能之一,涉及用户使用优惠券、系统验证优惠券有效性、更新优惠券状态等步骤。以下是优惠券核销的详细流程设计:
1. 核销流程概述
- 用户提交核销请求:用户在支付或结算时选择使用优惠券。
- 系统验证优惠券:检查优惠券的有效性、适用条件等。
- 核销优惠券:更新优惠券状态,记录核销信息。
- 返回核销结果:通知用户核销成功或失败。
2. 详细流程设计
2.1 用户提交核销请求
- 触发条件:
- 用户在支付页面选择使用优惠券。
- 用户扫描优惠券二维码或输入优惠券码。
- 请求参数:
- 用户 ID(
user_id
) - 优惠券码(
coupon_code
) - 订单信息(
order_id
、order_amount
等)
- 用户 ID(
- 示例请求:
{ "user_id": "12345", "coupon_code": "DISCOUNT2023", "order_id": "ORDER67890", "order_amount": 100.00 }
2.2 系统验证优惠券
- 验证步骤:
- 检查优惠券是否存在:
- 查询数据库,验证优惠券码是否有效。
- 检查优惠券状态:
- 确保优惠券未被使用、未过期。
- 检查适用条件:
- 验证订单金额是否满足优惠券的最低消费要求。
- 验证商品或服务是否在优惠券的适用范围内。
- 检查用户资格:
- 验证用户是否满足优惠券的使用条件(如新用户专享、指定用户组等)。
- 检查优惠券是否存在:
- 验证逻辑示例:
SELECT * FROM coupons WHERE code = 'DISCOUNT2023' AND status = 'active' AND start_date <= NOW() AND end_date >= NOW() AND min_order_amount <= 100.00;
2.3 核销优惠券
- 更新优惠券状态:
- 将优惠券状态标记为“已使用”。
- 记录核销时间、订单 ID、用户 ID 等信息。
- 更新订单信息:
- 将优惠券抵扣金额应用到订单中。
- 示例 SQL 更新:
UPDATE coupons SET status = 'used', used_at = NOW(), order_id = 'ORDER67890', user_id = '12345' WHERE code = 'DISCOUNT2023';
2.4 返回核销结果
- 成功响应:
- 返回核销成功信息及优惠券抵扣金额。
- 示例响应:
{ "status": "success", "message": "优惠券核销成功", "discount_amount": 20.00 }
- 失败响应:
- 返回失败原因(如优惠券无效、不满足条件等)。
- 示例响应:
{ "status": "error", "message": "优惠券不满足使用条件", "error_code": "COUPON_INVALID" }
3. 数据库设计
3.1 优惠券表(coupons
)
字段名 | 类型 | 描述 |
---|---|---|
id | BIGINT | 优惠券 ID(主键) |
code | VARCHAR(50) | 优惠券码 |
status | ENUM | 状态(active/used/expired) |
discount_type | ENUM | 折扣类型(fixed/percentage) |
discount_value | DECIMAL(10,2) | 折扣金额或百分比 |
min_order_amount | DECIMAL(10,2) | 最低订单金额 |
start_date | DATETIME | 优惠券生效时间 |
end_date | DATETIME | 优惠券过期时间 |
user_id | BIGINT | 使用用户 ID |
order_id | VARCHAR(50) | 关联订单 ID |
used_at | DATETIME | 核销时间 |
3.2 订单表(orders
)
字段名 | 类型 | 描述 |
---|---|---|
id | VARCHAR(50) | 订单 ID(主键) |
user_id | BIGINT | 用户 ID |
total_amount | DECIMAL(10,2) | 订单总金额 |
discount_amount | DECIMAL(10,2) | 优惠券抵扣金额 |
final_amount | DECIMAL(10,2) | 实际支付金额 |
4. 异常处理
- 优惠券无效:
- 返回错误码
COUPON_INVALID
,提示用户优惠券不可用。
- 返回错误码
- 优惠券已使用:
- 返回错误码
COUPON_USED
,提示用户优惠券已被使用。
- 返回错误码
- 不满足使用条件:
- 返回错误码
COUPON_CONDITION_NOT_MET
,提示用户订单金额不足或商品不适用。
- 返回错误码
- 系统错误:
- 返回错误码
SYSTEM_ERROR
,记录日志并提示用户稍后重试。
- 返回错误码
5. 性能优化
- 缓存优惠券信息:
- 使用 Redis 缓存热门优惠券信息,减少数据库查询压力。
- 批量核销支持:
- 支持批量核销优惠券,提高高并发场景下的处理效率。
- 异步处理:
- 将核销记录写入消息队列,异步更新数据库。
6. 测试用例
6.1 正向测试
- 测试用例:使用有效的优惠券核销。
- 预期结果:核销成功,返回折扣金额。
6.2 异常测试
- 测试用例:使用已过期的优惠券。
- 预期结果:核销失败,返回错误码
COUPON_EXPIRED
。
6.3 边界测试
- 测试用例:订单金额刚好满足最低消费要求。
- 预期结果:核销成功,返回折扣金额。
7. 总结
优惠券核销流程是营销系统中的关键功能,设计时需注意:
- 验证逻辑的完备性:确保优惠券的有效性、适用条件和用户资格。
- 性能优化:通过缓存、异步处理等手段提高系统性能。
- 异常处理:提供清晰的错误提示,提升用户体验。
通过以上设计,可以确保优惠券核销流程的高效性和可靠性。
- List item