开发设计laravel-shop电商

07 优惠券模块

2019-08-04  本文已影响13人  阳光的小mi

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 支付模块

上一篇下一篇

猜你喜欢

热点阅读