功能概述
优惠券管理是电商系统中的重要组成部分,叮咚买菜系统的优惠券管理功能应包括优惠券的创建、发放、使用、统计等全生命周期管理。
核心功能模块
1. 优惠券类型设计
- 满减券:满指定金额减固定金额
- 折扣券:按比例折扣(如8折)
- 无门槛券:可直接使用的固定金额券
- 运费券:减免配送费用的专用券
- 品类券:限定商品品类使用的优惠券
2. 优惠券创建与管理
后端实现(Java示例)
```java
// 优惠券实体类
public class Coupon {
private Long id;
private String name; // 优惠券名称
private String type; // 优惠券类型
private BigDecimal amount; // 优惠金额/折扣比例
private BigDecimal minOrder; // 最低消费金额
private Date startTime; // 生效时间
private Date endTime; // 失效时间
private Integer totalCount; // 发放总数
private Integer remaining; // 剩余数量
private String scope; // 使用范围(全平台/特定品类)
private String description; // 描述
// getters & setters
}
// 优惠券服务接口
public interface CouponService {
// 创建优惠券
boolean createCoupon(Coupon coupon);
// 更新优惠券信息
boolean updateCoupon(Coupon coupon);
// 获取优惠券详情
Coupon getCouponById(Long id);
// 分页查询优惠券列表
Page
listCoupons(CouponQuery query); } ``` 3. 优惠券发放功能 发放方式 - 系统自动发放:新用户注册、特定节日等自动发放 - 用户领取:在优惠券中心主动领取 - 分享发放:用户分享活动后获得 - 订单完成后发放:如评价后赠送 发放实现(数据库设计) ```sql CREATE TABLE user_coupon ( id BIGINT PRIMARY KEY AUTO_INCREMENT, user_id BIGINT NOT NULL, coupon_id BIGINT NOT NULL, status TINYINT DEFAULT 0 COMMENT 0-未使用 1-已使用 2-已过期, order_id BIGINT COMMENT 关联订单ID, get_time DATETIME NOT NULL, use_time DATETIME, expire_time DATETIME NOT NULL, FOREIGN KEY (coupon_id) REFERENCES coupon(id) ); ``` 4. 优惠券使用流程 1. 用户选择优惠券:在结算页选择可用优惠券 2. 系统验证: - 验证优惠券是否有效(未过期) - 验证是否满足使用条件(最低消费金额、品类限制等) - 验证用户是否符合使用资格 3. 应用优惠:计算最终支付金额 4. 记录使用:更新优惠券状态为已使用 核心验证逻辑 ```java public class CouponValidator { public boolean validateCoupon(UserCoupon userCoupon, Order order) { // 1. 检查是否过期 if (userCoupon.getExpireTime().before(new Date())) { return false; } // 2. 检查是否已使用 if (userCoupon.getStatus() == 1) { return false; } // 3. 检查最低消费金额 Coupon coupon = couponService.getCouponById(userCoupon.getCouponId()); if (order.getTotalAmount().compareTo(coupon.getMinOrder()) < 0) { return false; } // 4. 检查商品范围(如果有) if (StringUtils.isNotBlank(coupon.getScope())) { // 验证订单商品是否在优惠券适用范围内 } return true; } } ``` 5. 优惠券统计与分析 - 发放统计:按时间、类型统计发放数量 - 使用统计:使用率、使用时间分布 - 效果分析:优惠券带来的订单增长、客单价变化 - 用户行为分析:哪些用户更倾向于使用优惠券 前端实现要点 优惠券中心页面 ```javascript // Vue组件示例 export default { data() { return { coupons: [], // 用户可用的优惠券列表 selectedCoupon: null // 用户选择的优惠券 } }, methods: { async fetchCoupons() { const res = await api.getUserCoupons(); this.coupons = res.data.filter(c => c.status === 0); // 只显示未使用的 }, applyCoupon() { if (!this.selectedCoupon) return; // 计算优惠后的金额 this.$emit(coupon-applied, this.selectedCoupon); } }, mounted() { this.fetchCoupons(); } } ``` 结算页优惠券选择 ```html 可用优惠券 :class="[coupon-item, selectedCoupon?.id === coupon.id ? selected : ]"
@click="selectCoupon(coupon)">
¥{{ coupon.amount }} 满¥{{ coupon.minOrder }}可用
有效期至: {{ formatDate(coupon.expireTime) }}
使用优惠券 ``` 技术实现建议 1. 高并发处理:优惠券发放可能面临高并发,建议使用: - 分布式锁防止超发 - 队列异步处理发放逻辑 - 预生成优惠券码(对于需要码的场景) 2. 缓存策略: - 用户可用优惠券列表缓存 - 热门优惠券信息缓存 3. 定时任务: - 定期清理过期优惠券 - 定时发放计划优惠券 4. 安全考虑: - 防止优惠券刷取 - 优惠券使用防重放攻击 - 敏感操作日志记录 扩展功能 1. 优惠券分享:用户可分享优惠券给好友 2. 优惠券组合:支持多张优惠券叠加使用(需设置规则) 3. 优惠券推荐:根据用户购买历史推荐合适优惠券 4. AB测试:不同用户群体发放不同优惠券测试效果 通过以上功能的实现,叮咚买菜系统可以构建一个完善的优惠券管理体系,提升用户活跃度和购买转化率。