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