07 优惠券模块

作者: 阳光的小mi | 来源:发表于2019-08-04 17:17 被阅读13次

1. 前言

发放优惠券是一种运营手段,由系统(运营人员)创建,用户使用。课程中详细讲述了优惠券的创建、使用、与订单的关联。
优惠券从创建到使用,整个的生命周期如下:

优惠券生命周期-流程图
课程传送门

2. 需求分析

优惠券的功能包括:

  • 运营人员在后台创建/修改优惠券,可查看优惠券信息及使用情况;
  • 用户下单使用优惠券;
    功能需求可归纳为以下几点:
  • 优惠券有 满减、折扣两种类型,可设置有效期、最低订单金额等使用规则,可设置优惠券状态;
  • 同一用户不可重复使用同一优惠券;


    后台管理-优惠券列表-效果图
    使用优惠券下单-效果图

3. 表设计

3.1 实现逻辑

优惠券的创建/修改/查看逻辑都很简单,按照需求新建一个优惠券表,记录优惠券的类型、使用规则等属性,用laravel-admin可快速实现。优惠券的使用关系到订单金额的重新计算,需要在订单表中关联使用的优惠券。

3.2 表设计

# 优惠券表
CREATE TABLE `coupon_codes` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT, # 自增ID
  `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 优惠券标题
  `code` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 优惠码
  `type` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 优惠券类型
  `value` decimal(8,2) NOT NULL, # 折扣值,根据不同类型含义不同
  `total` int(10) unsigned NOT NULL, # 可兑换数量
  `used` int(10) unsigned NOT NULL DEFAULT '0', # 已兑换数量
  `min_amount` decimal(10,2) NOT NULL, # 使用规则:最低订单金额
  `not_before` datetime DEFAULT NULL, # 使用规则:使用优惠券的开始时间
  `not_after` datetime DEFAULT NULL, # 使用规则:使用优惠券的结束时间
  `enabled` tinyint(1) NOT NULL, # 使用规则:优惠券是否生效
  `created_at` timestamp NULL DEFAULT NULL, # 创建时间
  `updated_at` timestamp NULL DEFAULT NULL, # 更新时间
  PRIMARY KEY (`id`),
  UNIQUE KEY `coupon_codes_code_unique` (`code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

# 订单表增加优惠券ID字段
 ALTER TABLE `orders` ADD `coupon_code_id` int(10) unsigned DEFAULT NULL;
 ALTER TABLE `orders` ADD CONSTRAINT `orders_coupon_code_id_foreign` FOREIGN KEY (`coupon_code_id`) REFERENCES `coupon_codes` (`id`) ON DELETE SET NULL;

4. 代码借鉴

这一节的功能也比较简单,在订单创建对优惠券的校验部分,创建订单前对优惠券进行了一次状态检查,创建订单时又做了一次规则校验,逻辑严谨。
从需求来讲,优惠券从创建到用户使用,中间还有一个优惠券发放的功能,再做一个用户优惠券列表,下单时选择,这里可以拓展完善一下。

上一节: 06 支付模块

相关文章

网友评论

    本文标题:07 优惠券模块

    本文链接:https://www.haomeiwen.com/subject/jwiqrctx.html