一、功能概述
优惠券管理是电商平台的重要营销工具,叮咚买菜系统的优惠券管理功能应包含优惠券的创建、发放、使用、统计等全生命周期管理,支持多种优惠券类型和发放策略。
二、核心功能模块
1. 优惠券类型管理
- 满减券:满X元减Y元
- 折扣券:按比例折扣(如8折)
- 无门槛券:直接抵扣指定金额
- 运费券:减免配送费用
- 品类券:限定商品类别使用
- 新人券:首次注册用户专享
2. 优惠券创建与配置
```java
// 优惠券实体类示例
public class Coupon {
private Long id;
private String name; // 优惠券名称
private String type; // 优惠券类型
private BigDecimal discount; // 折扣金额/比例
private BigDecimal minOrder; // 最低消费金额
private Date startTime; // 生效时间
private Date endTime; // 失效时间
private Integer totalCount; // 发放总数
private Integer remaining; // 剩余数量
private String适用范围; // 全场/指定品类/指定商品
private String userScope; // 全用户/新用户/指定用户
// getters & setters
}
```
3. 优惠券发放策略
- 主动领取:用户在APP/小程序领取
- 系统自动发放:满足条件自动发放(如新用户注册)
- 定向发放:通过用户ID或标签定向发放
- 分享发放:用户分享后获得优惠券
4. 优惠券使用流程
1. 用户选择商品加入购物车
2. 结算时系统自动匹配适用优惠券
3. 用户选择使用或放弃优惠券
4. 系统验证优惠券有效性
5. 计算最终支付金额
5. 优惠券状态管理
- 未使用
- 已使用
- 已过期
- 已作废
三、数据库设计
```sql
-- 优惠券表
CREATE TABLE `coupon` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`type` varchar(20) NOT NULL COMMENT 满减/折扣/无门槛等,
`discount` decimal(10,2) NOT NULL,
`min_order` decimal(10,2) DEFAULT NULL COMMENT 最低消费金额,
`start_time` datetime NOT NULL,
`end_time` datetime NOT NULL,
`total_count` int NOT NULL,
`remaining` int NOT NULL,
`scope` varchar(20) DEFAULT NULL COMMENT 全场/品类/商品,
`scope_value` varchar(200) DEFAULT NULL COMMENT 范围ID,逗号分隔,
`user_scope` varchar(20) DEFAULT NULL COMMENT 全用户/新用户/指定用户,
`create_time` datetime NOT NULL,
`update_time` datetime NOT NULL,
PRIMARY KEY (`id`)
);
-- 用户优惠券表
CREATE TABLE `user_coupon` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` bigint NOT NULL,
`coupon_id` bigint NOT NULL,
`status` varchar(20) NOT NULL COMMENT 未使用/已使用/已过期/已作废,
`order_id` bigint DEFAULT NULL COMMENT 关联订单ID,
`get_time` datetime NOT NULL,
`use_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uk_user_coupon` (`user_id`,`coupon_id`)
);
```
四、核心接口设计
1. 创建优惠券接口
```java
@PostMapping("/coupons")
public Result createCoupon(@RequestBody CouponCreateDTO dto) {
// 参数校验
// 保存优惠券信息
// 初始化发放数量
return Result.success();
}
```
2. 发放优惠券接口
```java
@PostMapping("/coupons/{couponId}/issue")
public Result issueCoupon(@PathVariable Long couponId,
@RequestBody IssueRequest request) {
// 检查优惠券是否存在且可发放
// 根据发放策略发放优惠券
// 记录发放日志
return Result.success();
}
```
3. 用户领取优惠券接口
```java
@PostMapping("/coupons/{couponId}/receive")
public Result receiveCoupon(@PathVariable Long couponId,
@RequestParam Long userId) {
// 检查优惠券是否可领取
// 检查用户是否符合领取条件
// 创建用户优惠券记录
return Result.success();
}
```
4. 使用优惠券接口
```java
@PostMapping("/orders/{orderId}/use-coupon")
public Result useCoupon(@PathVariable Long orderId,
@RequestParam Long couponId,
@RequestParam Long userId) {
// 验证优惠券有效性
// 验证订单是否满足使用条件
// 更新优惠券状态
// 重新计算订单金额
return Result.success();
}
```
五、关键业务逻辑实现
1. 优惠券匹配算法
```java
public List matchCoupons(Long userId, BigDecimal orderAmount,
List categoryIds, List productIds) {
// 1. 查询用户所有未使用的优惠券
// 2. 筛选未过期的优惠券
// 3. 筛选适用范围匹配的优惠券
// 4. 筛选最低消费金额 <= orderAmount的优惠券
// 5. 按优先级排序(如到期时间、折扣力度等)
return matchedCoupons;
}
```
2. 优惠券有效性验证
```java
public boolean validateCoupon(Long couponId, Long userId, BigDecimal orderAmount) {
// 1. 检查优惠券是否存在
// 2. 检查优惠券是否属于用户
// 3. 检查优惠券是否未使用
// 4. 检查优惠券是否在有效期内
// 5. 检查订单金额是否满足最低消费
// 6. 检查商品范围是否匹配
return isValid;
}
```
六、前端展示要点
1. 优惠券列表页:
- 分类展示(未使用/已使用/已过期)
- 优惠券有效期倒计时
- 使用门槛和适用范围说明
2. 结算页优惠券选择:
- 自动匹配适用优惠券
- 优惠券叠加使用规则说明
- 使用后金额实时计算
3. 优惠券详情页:
- 详细使用规则
- 适用商品范围
- 有效期提醒
七、安全与风控考虑
1. 防刷机制:
- 限制单个用户领取数量
- 限制领取频率
- 用户行为分析防刷
2. 数据安全:
- 优惠券码加密存储
- 关键操作日志记录
- 敏感操作二次验证
3. 异常处理:
- 并发领取控制
- 幂等性处理
- 分布式锁应用
八、扩展功能建议
1. 优惠券分享功能:
- 生成分享链接/二维码
- 分享奖励机制
- 分享轨迹追踪
2. 优惠券组合使用:
- 支持多张优惠券叠加使用
- 设置叠加使用规则
3. 数据分析:
- 优惠券发放/使用统计
- 优惠券转化率分析
- 用户领券行为分析
4. A/B测试:
- 不同优惠券策略效果对比
- 用户群体差异化测试
九、部署与监控
1. 监控指标:
- 优惠券发放成功率
- 优惠券使用率
- 系统接口响应时间
2. 告警机制:
- 发放失败告警
- 库存不足告警
- 异常使用行为告警
3. 日志记录:
- 优惠券全生命周期操作日志
- 关键业务数据变更审计
通过以上方案实现,叮咚买菜系统的优惠券管理功能可以支持复杂的营销场景,提升用户活跃度和订单转化率,同时保证系统的稳定性和安全性。