一、功能概述
优惠券管理是电商平台的重要营销工具,叮咚买菜系统的优惠券功能应支持多种类型优惠券的创建、发放、使用和统计分析,以提升用户活跃度和购买转化率。
二、核心功能模块
1. 优惠券类型管理
- 满减券:满X元减Y元
- 折扣券:按比例折扣(如8折)
- 无门槛券:直接抵扣金额
- 运费券:减免配送费用
- 品类专用券:限定商品类别使用
- 新人专享券:仅新用户可领取
2. 优惠券生命周期管理
- 创建:设置优惠券规则(金额、有效期、使用条件等)
- 发放:
- 主动发放(系统自动发放给特定用户)
- 用户领取(在优惠券中心领取)
- 分享发放(通过分享链接领取)
- 使用:下单时自动匹配可用优惠券
- 过期处理:自动标记为失效状态
3. 优惠券使用规则
- 使用门槛设置(最低消费金额)
- 商品范围限制(全平台/部分商品)
- 用户范围限制(新用户/老用户/会员等级)
- 叠加使用规则(是否可与其他优惠券叠加)
- 有效期设置(固定日期/领取后N天内有效)
三、技术实现方案
1. 数据库设计
```sql
-- 优惠券表
CREATE TABLE coupon (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL COMMENT 优惠券名称,
type TINYINT NOT NULL COMMENT 类型:1满减 2折扣 3无门槛 4运费券,
amount DECIMAL(10,2) COMMENT 金额/折扣比例,
min_order_amount DECIMAL(10,2) DEFAULT 0 COMMENT 最低使用金额,
start_time DATETIME NOT NULL COMMENT 有效期开始时间,
end_time DATETIME NOT NULL COMMENT 有效期结束时间,
total_count INT DEFAULT 0 COMMENT 总发放数量,
remain_count INT DEFAULT 0 COMMENT 剩余数量,
status TINYINT DEFAULT 1 COMMENT 状态:1有效 0无效,
create_time DATETIME NOT NULL,
update_time DATETIME NOT NULL
);
-- 用户优惠券表
CREATE TABLE user_coupon (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL COMMENT 用户ID,
coupon_id BIGINT NOT NULL COMMENT 优惠券ID,
status TINYINT DEFAULT 0 COMMENT 状态:0未使用 1已使用 2已过期,
order_id BIGINT DEFAULT NULL COMMENT 使用订单ID,
get_time DATETIME NOT NULL COMMENT 领取时间,
expire_time DATETIME NOT NULL COMMENT 过期时间,
INDEX idx_user (user_id),
INDEX idx_coupon (coupon_id),
INDEX idx_status (status)
);
-- 优惠券使用范围表
CREATE TABLE coupon_scope (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
coupon_id BIGINT NOT NULL COMMENT 优惠券ID,
scope_type TINYINT NOT NULL COMMENT 范围类型:1商品 2品类 3全平台,
scope_id BIGINT COMMENT 范围ID(商品ID或品类ID),
INDEX idx_coupon (coupon_id)
);
```
2. 核心接口设计
```java
// 优惠券服务接口
public interface CouponService {
// 创建优惠券
Coupon createCoupon(CouponCreateRequest request);
// 发放优惠券(主动发放)
boolean distributeCoupon(Long couponId, List userIds);
// 用户领取优惠券
boolean userClaimCoupon(Long userId, Long couponId);
// 获取用户可用优惠券列表
List getAvailableCoupons(Long userId, BigDecimal orderAmount);
// 使用优惠券
boolean useCoupon(Long userId, Long couponId, Long orderId);
// 优惠券有效性检查
boolean validateCoupon(Long couponId, Long userId, BigDecimal orderAmount);
}
```
3. 业务逻辑实现关键点
1. 优惠券匹配算法:
```java
public List matchCoupons(Long userId, BigDecimal orderAmount, Set excludeCouponIds) {
// 1. 获取用户所有未使用的优惠券
List userCoupons = userCouponMapper.selectByUserAndStatus(userId, 0);
// 2. 过滤掉已排除的优惠券
userCoupons = userCoupons.stream()
.filter(uc -> !excludeCouponIds.contains(uc.getCouponId()))
.collect(Collectors.toList());
// 3. 获取优惠券详情和范围信息
Map couponMap = couponMapper.selectByIds(
userCoupons.stream().map(UserCoupon::getCouponId).collect(Collectors.toList())
).stream().collect(Collectors.toMap(Coupon::getId, Function.identity()));
// 4. 过滤符合条件的优惠券
return userCoupons.stream()
.filter(uc -> {
Coupon coupon = couponMap.get(uc.getCouponId());
// 检查有效期
if (uc.getExpireTime().before(new Date())) {
return false;
}
// 检查最低消费金额
if (coupon.getMinOrderAmount().compareTo(orderAmount) > 0) {
return false;
}
// 检查商品范围(简化版,实际需要查询商品是否在范围内)
// ...
return true;
})
.map(uc -> convertToDTO(uc, couponMap.get(uc.getCouponId())))
.collect(Collectors.toList());
}
```
2. 优惠券使用事务处理:
```java
@Transactional
public boolean useCoupon(Long userId, Long couponId, Long orderId) {
// 1. 检查优惠券是否存在且属于用户
UserCoupon userCoupon = userCouponMapper.selectByUserAndCoupon(userId, couponId);
if (userCoupon == null || userCoupon.getStatus() != 0) {
return false;
}
// 2. 检查优惠券是否过期
if (userCoupon.getExpireTime().before(new Date())) {
return false;
}
// 3. 更新优惠券状态为已使用
int updated = userCouponMapper.updateStatus(couponId, userId, 1, orderId);
if (updated == 0) {
return false;
}
// 4. 可以在这里添加其他业务逻辑,如记录使用日志等
return true;
}
```
四、前端实现要点
1. 优惠券中心页面:
- 分类展示(未使用/已使用/已过期)
- 优惠券标签(满减/折扣/品类专用等)
- 有效期倒计时显示
2. 下单页优惠券选择:
- 自动匹配可用优惠券
- 优惠券使用效果预览(使用后实付金额)
- 优惠券使用限制提示
3. 优惠券领取弹窗:
- 新用户专享提示
- 分享得券功能
- 领取倒计时(限时活动)
五、运营后台功能
1. 优惠券创建:
- 基础信息设置(名称、类型、金额等)
- 发放规则设置(发放数量、用户范围、时间范围)
- 使用规则设置(最低消费、商品范围、叠加规则)
2. 优惠券数据统计:
- 发放数量/领取数量/使用数量统计
- 优惠券核销率分析
- 优惠券带来的GMV提升分析
3. 优惠券活动管理:
- 活动时间设置
- 预算控制
- 效果评估
六、安全与风控考虑
1. 防刷机制:
- 用户领取频率限制
- IP限制
- 设备指纹识别
2. 优惠券滥用防护:
- 异常使用行为监控
- 优惠券使用条件严格校验
- 退款后优惠券状态回滚
3. 数据一致性保障:
- 分布式锁防止优惠券超发
- 事务处理确保状态变更原子性
- 定期数据核对
七、测试要点
1. 功能测试:
- 各种类型优惠券的创建和使用
- 边界条件测试(刚好满足/不满足使用条件)
- 并发领取测试
2. 性能测试:
- 大规模优惠券发放场景
- 高并发下单时优惠券匹配性能
3. 兼容性测试:
- 不同客户端(APP/小程序/H5)的优惠券显示和使用
- 不同支付方式的优惠券兼容性
八、部署与监控
1. 部署方案:
- 优惠券服务独立部署,便于水平扩展
- 数据库分库分表策略(按用户ID或优惠券ID分片)
2. 监控指标:
- 优惠券发放成功率
- 优惠券使用率
- 系统响应时间
- 错误率监控
3. 告警机制:
- 优惠券库存不足告警
- 系统异常告警
- 业务指标异常告警
通过以上方案,叮咚买菜系统可以实现一个完整、高效、安全的优惠券管理体系,支持各种营销活动的开展,提升用户购物体验和平台转化率。