Appearance
营销中心表结构如下
1.优惠券
1.1 优惠券模版
优惠劵模版,由卖家在管理后台配置,提供给买家领取成优惠劵
CREATE TABLE `promotion_coupon_template` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '模板编号,自增唯一。',
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '优惠劵名',
`status` tinyint NOT NULL COMMENT '状态',
`take_type` tinyint NOT NULL COMMENT '领取方式',
`total_count` int NOT NULL COMMENT '发放数量, -1 - 则表示不限制',
`take_limit_count` tinyint NOT NULL COMMENT '每人限领个数, -1 - 则表示不限制',
`take_count` int NOT NULL DEFAULT '0' COMMENT '领取优惠券的数量',
`use_count` int NOT NULL DEFAULT '0' COMMENT '使用优惠券的次数',
`use_price` int NOT NULL COMMENT '是否设置满多少金额可用,单位:分',
`product_scope` tinyint NOT NULL COMMENT '商品范围',
`product_scope_values` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '商品范围编号的数组',
`validity_type` tinyint NOT NULL COMMENT '生效日期类型',
`valid_start_time` datetime DEFAULT NULL COMMENT '固定日期-生效开始时间',
`valid_end_time` datetime DEFAULT NULL COMMENT '固定日期-生效结束时间',
`fixed_start_term` int DEFAULT NULL COMMENT '领取日期-开始天数',
`fixed_end_term` int DEFAULT NULL COMMENT '领取日期-结束天数',
`discount_type` int NOT NULL COMMENT '优惠类型:1-代金劵;2-折扣劵\n',
`discount_percent` tinyint DEFAULT NULL COMMENT '折扣百分比',
`discount_price` int DEFAULT NULL COMMENT '优惠金额,单位:分',
`discount_limit_price` int DEFAULT NULL COMMENT '折扣上限,仅在 discount_type 等于 2 时生效',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='优惠劵模板';
① status 字段:优惠劵模版状态,由 CommonStatusEnum 枚举,只有开启、禁用两个状态。禁用时,无法领取。
② 【领取限制】take_type 字段:领取方式,由 CouponTemplateTakeTypeEnum 枚举,分成 3 种情况: 1、直接领取:展示在 uni-app 的 [首页]、[领劵中心]、[商品详情],由用户主动领取。如下图所示:
2、指定发放:管理员在管理后台,指定用户发放。如下图所示: 3、新人券:买家在注册时,自动发放,由 CouponTakeByRegisterConsumer 消息消费者实现
③ 【使用条件】product_scope 字段:商品范围,由 PromotionProductScopeEnum 枚举,分成 3 种情况:
1、通用券:全部商品 2、商品券:指定商品,由 product_scope_values 字段指定商品编号的数组 3、品类券:指定品类,由 product_scope_values 字段指定品类编号的数组 ④ 【有效期】validity_type 字段:生效日期类型,由 CouponTemplateValidityTypeEnum 枚举,分成 2 种情况:
1、固定日期:由 valid_start_time、valid_end_time 字段指定生效时间范围 2、领取日期:由 fixed_start_term、fixed_end_term 字段指定领取后多少天生效 ⑤ 【优惠金额】discount_type 字段:优惠类型,由 PromotionDiscountTypeEnum 枚举,分成 2 种情况:
1、代金劵:由 discount_price 字段指定优惠金额 2、折扣劵:由 discount_percent 字段指定折扣百分比,由 discount_limit_price 字段指定折扣上限
1.2 优惠券
优惠劵,会员领取优惠劵模版来"生成"
CREATE TABLE `promotion_coupon` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '优惠劵编号',
`template_id` bigint NOT NULL COMMENT '优惠劵模板编号',
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '优惠劵名',
`use_price` int NOT NULL COMMENT '是否设置满多少金额可用,单位:分',
`take_type` tinyint NOT NULL COMMENT '领取方式',
`valid_start_time` datetime NOT NULL COMMENT '生效开始时间',
`valid_end_time` datetime NOT NULL COMMENT '生效结束时间',
`product_scope` tinyint NOT NULL COMMENT '商品范围',
`product_scope_values` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '商品范围编号的数组',
`discount_type` tinyint NOT NULL COMMENT '折扣类型',
`discount_percent` tinyint DEFAULT NULL COMMENT '折扣百分比',
`discount_price` int DEFAULT NULL COMMENT '优惠金额,单位:分',
`discount_limit_price` int DEFAULT NULL COMMENT '折扣上限',
`user_id` bigint NOT NULL COMMENT '用户编号',
`status` tinyint NOT NULL COMMENT '优惠码状态;1-未使用;2-已使用;3-已失效',
`use_order_id` bigint DEFAULT NULL COMMENT '使用订单号',
`use_time` datetime DEFAULT NULL COMMENT '使用时间',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='优惠劵';
字段虽然也蛮多,但是都是从 promotion_coupon_template 中复制过来的,所以更多讲讲差异的地方。
① 【优惠劵模版】从 template_id 开始到 discount_limit_price 结束,都是从 promotion_coupon_template 中复制过来的,用于记录优惠劵模版的信息。
要注意,如果 promotion_coupon_template 中的信息发生变化,promotion_coupon 中的信息不会变化,因为买家已经领取了,不能随意变更。
② 【用户】user_id 字段:用户编号,就是领取的买家。
③ 【状态】status 字段:优惠码状态,由 CouponStatusEnum 枚举,分成 3 种情况:未使用、已使用、已失效。
如果已使用,会记录 use_order_id、use_time 字段,表示使用的订单编号、使用时间。
优惠劵的过期,由 CouponExpireJob 定时任务实现。
2.积分商城
一个积分活动,对应一条 promotion_point_activity 表记录,对应一个商品 SPU。而每个商品 SKU 在该活动下可以单独配置兑换价格,所以会有多条 promotion_point_product 子表记录。
CREATE TABLE `promotion_point_activity` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '积分商城活动编号',
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
`sort` int NOT NULL COMMENT '排序',
`spu_id` bigint NOT NULL COMMENT '商品 SPU ID',
`status` int NOT NULL COMMENT '活动状态',
`stock` int NOT NULL COMMENT '积分商城活动库存(剩余库存积分兑换时扣减)',
`total_stock` int NOT NULL COMMENT '积分商城活动总库存',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='积分商城活动';
① spu_id 字段:商品 SPU ID,对应商品 SPU 表的 id 字段。
注意:一个积分活动,只能对应一个商品 SPU,不能对应多个商品 SPU!!!
② status 字段:活动状态,由 CommonStatusEnum 枚举,只有开启、禁用两个状态。禁用时,无法参与积分兑换。
③ stock、total_stock 字段:积分商城活动库存,自定义参与积分兑换的数量。目前它是 promotion_point_product 表的 stock 字段的总和。
CREATE TABLE `promotion_point_product` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '积分商城商品编号',
`activity_id` bigint NOT NULL COMMENT '积分商城活动 id',
`activity_status` int NOT NULL COMMENT '积分商城商品状态',
`spu_id` bigint NOT NULL COMMENT '商品 SPU 编号',
`sku_id` bigint NOT NULL COMMENT '商品 SKU 编号',
`count` int NOT NULL COMMENT '可兑换次数',
`stock` int NOT NULL COMMENT '积分商城商品库存',
`point` int NOT NULL COMMENT '所需兑换积分',
`price` int NOT NULL COMMENT '所需兑换金额,单位:分',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ROW_FORMAT=DYNAMIC COMMENT='积分商城商品';
① 【活动信息】activity_id 字段:积分商城活动 id,对应 promotion_point_activity 表的 id 字段。
② 【SKU 信息】spu_id、sku_id 字段:商品 SPU 编号、商品 SKU 编号。
count 字段:可兑换次数,例如说,每个用户最多兑换 1 次。stock 字段:积分商城商品库存。 point 字段:所需兑换积分。price 字段:所需兑换金额,单位:分。 如果想要支持纯积分兑换商品,那么 price 字段可以设置为 0。
3.拼图活动
3.1 拼团活动
包括两部分:拼团活动、拼团记录。如下图所示:
一个拼团活动,对应一条 promotion_combination_activity 表记录,对应一个商品 SPU。而每个商品 SKU 在该拼团下可以单独配置拼团价格,所以会有多条 promotion_combination_activity_sku 子表记录。
CREATE TABLE `promotion_combination_activity` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '活动编号',
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '拼团名称',
`spu_id` bigint NOT NULL COMMENT '商品 SPU ID',
`status` tinyint NOT NULL DEFAULT '0' COMMENT '活动状态:0开启 1关闭',
`total_limit_count` int NOT NULL COMMENT '总限购数量',
`single_limit_count` int NOT NULL COMMENT '单次限购数量',
`start_time` datetime NOT NULL COMMENT '开始时间',
`end_time` datetime NOT NULL COMMENT '结束时间',
`user_size` int DEFAULT NULL COMMENT '购买人数',
`virtual_group` int NOT NULL COMMENT '虚拟成团',
`limit_duration` int NOT NULL COMMENT '限制时长(小时)',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='拼团活动';
① spu_id 字段:商品 SPU ID,对应商品 SPU 表的 id 字段。
注意:一个拼团活动,只能对应一个商品 SPU,不能对应多个商品 SPU!!!
② status 字段:活动状态,由 CommonStatusEnum 枚举,只有开启、禁用两个状态。禁用时,无法参与拼团。
③ user_size 字段:每个拼团需要的人数,例如说,3 人团、5 人团。
如果超过 limit_duration 时长,还没凑齐人数,就会自动拼团失败。当然,如果希望虚拟成团,则可以设置 virtual_group 字段,此时只要 user_size - virtual_group 人即可拼团成功。这块逻辑,由 CombinationRecordExpireJob 定时任务实现。
CREATE TABLE `promotion_combination_product` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`activity_id` bigint DEFAULT NULL COMMENT '拼团活动编号',
`activity_status` tinyint NOT NULL DEFAULT '0' COMMENT '拼团商品状态',
`activity_start_time` datetime NOT NULL COMMENT '活动开始时间点',
`activity_end_time` datetime NOT NULL COMMENT '活动结束时间点',
`spu_id` bigint DEFAULT NULL COMMENT '商品 SPU 编号',
`sku_id` bigint DEFAULT NULL COMMENT '商品 SKU 编号',
`combination_price` int NOT NULL DEFAULT '0' COMMENT '拼团价格,单位分',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=32 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='拼团商品';
① 【活动信息】activity_id 字段:拼团活动编号,对应 promotion_combination_activity 表的 id 字段。其它 activity_* + spu_id 字段,都是冗余字段,方便查询。
② 【SKU 信息】sku_id 字段:商品 SKU 编号,对应商品 SKU 表的 id 字段。combination_price 字段:拼团价格,单位分。
3.2 拼团记录
拼团记录,由买家参与拼团时生成,分成团长和团员
CREATE TABLE `promotion_combination_record` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`activity_id` bigint DEFAULT NULL COMMENT '拼团活动编号',
`spu_id` bigint DEFAULT NULL COMMENT '商品 SPU 编号',
`pic_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '商品图片',
`spu_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '商品名称',
`sku_id` bigint DEFAULT NULL COMMENT '商品 SKU 编号',
`count` int DEFAULT NULL COMMENT '购买的商品数量',
`combination_price` int NOT NULL COMMENT '拼团商品单价,单位分',
`user_size` int NOT NULL COMMENT '可参团人数',
`user_id` bigint DEFAULT NULL COMMENT '用户编号',
`nickname` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '用户昵称',
`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '用户头像',
`status` tinyint NOT NULL DEFAULT '0' COMMENT '参与状态:1进行中 2已完成 3未完成',
`head_id` bigint DEFAULT NULL COMMENT '团长编号',
`user_count` int NOT NULL COMMENT '已参团人数',
`virtual_group` bit(1) DEFAULT NULL COMMENT '是否虚拟拼团',
`expire_time` datetime NOT NULL COMMENT '过期时间',
`start_time` datetime DEFAULT NULL COMMENT '开始时间 (订单付款后开始的时间)',
`end_time` datetime DEFAULT NULL COMMENT '结束时间(成团时间/失败时间)',
`order_id` bigint DEFAULT NULL COMMENT '订单编号',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='拼团记录';
① 【活动信息】activity_id 字段:拼团活动编号,对应 promotion_combination_activity 表的 id 字段。
其它 spu_id、pic_url、spu_name、sku_id、count、combination_price、user_size 字段,都是冗余字段,方便查询。
② 【用户信息】user_id 字段:用户编号,就是拼团的买家。
其它 nickname、avatar 字段,都是冗余字段,方便查询。
③ 【拼团信息】status 字段:参与状态,由 CombinationRecordStatusEnum 枚举,分成 3 种情况:进行中、拼团成功、拼团失败。
head_id 字段:团长"编号"。分成两种情况:
团长:则该字段为 0,表示它是团长的拼团记录。 团员:则该字段为团队拼团记录的 id,表示它是团长的拼团记录的团员。 其它 user_count、virtual_group、expire_time、start_time、end_time 字段,就是拼团的一些信息。
④ 【订单信息】order_id 字段:订单编号,对应订单表的 id 字段。每个拼团记录,都会生成一个订单。
4.秒杀活动
4.1 秒杀配置
包括两部分:秒杀配置(场次)、秒杀活动。如下图所示:
CREATE TABLE `promotion_seckill_config` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '秒杀时段名称',
`start_time` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '开始时间点',
`end_time` varchar(25) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '结束时间点',
`slider_pic_urls` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '秒杀主图',
`status` tinyint NOT NULL DEFAULT '0' COMMENT '活动状态',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='秒杀时段';
4.2 秒杀活动
一个秒杀活动,对应一条 promotion_seckill_activity 表记录,对应一个商品 SPU。而每个商品 SKU 在该秒杀下可以单独配置秒杀价格、库存,所以会有多条 promotion_seckill_product 子表记录
CREATE TABLE `promotion_seckill_activity` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '秒杀活动编号',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '秒杀活动名称',
`sort` int NOT NULL DEFAULT '0' COMMENT '排序',
`remark` varchar(1000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '备注',
`config_ids` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '秒杀时段 id 数组',
`spu_id` bigint NOT NULL DEFAULT '0' COMMENT '秒杀活动商品',
`status` tinyint NOT NULL DEFAULT '0' COMMENT '活动状态',
`total_limit_count` int DEFAULT '0' COMMENT '总限购数量',
`single_limit_count` int DEFAULT '0' COMMENT '单次限够数量',
`start_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '活动开始时间',
`end_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '活动结束时间',
`stock` int DEFAULT '0' COMMENT '秒杀库存',
`total_stock` int DEFAULT '0' COMMENT '秒杀总库存',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='秒杀活动';
① config_ids 字段:秒杀时段 id 数组,由 promotion_seckill_config 表的 id 字段组成的数组。
② spu_id 字段:商品 SPU ID,对应商品 SPU 表的 id 字段。
注意:一个秒杀活动,只能对应一个商品 SPU,不能对应多个商品 SPU!!!
③ status 字段:活动状态,由 CommonStatusEnum 枚举,只有开启、禁用两个状态。禁用时,无法参与秒杀。
④ stock、total_stock 字段:秒杀库存、秒杀总库存。业务上考虑秒杀价格可能较低,一般少量库存参与秒杀。
CREATE TABLE `promotion_seckill_product` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '秒杀参与商品编号',
`activity_id` bigint NOT NULL DEFAULT '0' COMMENT '秒杀活动 id',
`config_ids` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '0' COMMENT '秒杀时段 id 数组',
`activity_status` tinyint NOT NULL DEFAULT '0' COMMENT '秒杀商品状态',
`activity_start_time` datetime NOT NULL COMMENT '活动开始时间点',
`activity_end_time` datetime NOT NULL COMMENT '活动结束时间点',
`spu_id` bigint NOT NULL DEFAULT '0' COMMENT '商品 spu_id',
`sku_id` bigint NOT NULL DEFAULT '0' COMMENT '商品 sku_id',
`seckill_price` int NOT NULL DEFAULT '0' COMMENT '秒杀金额,单位:分',
`stock` int NOT NULL DEFAULT '0' COMMENT '秒杀库存',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=81 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='秒杀参与商品';
① 【活动信息】activity_id 字段:秒杀活动编号,对应 promotion_seckill_activity 表的 id 字段。其它 activity_* + spu_id 字段,都是冗余字段,方便查询。
② 【SKU 信息】sku_id 字段:商品 SKU 编号,对应商品 SKU 表的 id 字段。seckill_price 字段:秒杀价格,单位分。stock 字段:秒杀库存。
5.砍价活动
5.1 砍价活动
包括三部分:砍价活动、砍价助力。如下图所示:
CREATE TABLE `promotion_bargain_activity` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '砍价活动编号',
`name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '砍价活动名称',
`spu_id` bigint NOT NULL DEFAULT '0' COMMENT '商品 SPU 编号',
`sku_id` bigint NOT NULL COMMENT '商品 SKU 编号',
`status` int NOT NULL DEFAULT '0' COMMENT '活动状态',
`total_limit_count` int NOT NULL DEFAULT '0' COMMENT '总限购数量',
`start_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '活动开始时间',
`end_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '活动结束时间',
`bargain_first_price` int NOT NULL DEFAULT '0' COMMENT '砍价起始价格,单位分',
`bargain_min_price` int NOT NULL DEFAULT '0' COMMENT '砍价底价,单位:分',
`help_max_count` int NOT NULL DEFAULT '0' COMMENT '砍价人数',
`bargain_count` int NOT NULL DEFAULT '0' COMMENT '最大帮砍次数',
`random_min_price` int NOT NULL DEFAULT '0' COMMENT '用户每次砍价的最小金额,单位:分',
`random_max_price` int NOT NULL DEFAULT '0' COMMENT '用户每次砍价的最大金额,单位:分',
`stock` int NOT NULL DEFAULT '0' COMMENT '砍价库存',
`total_stock` int NOT NULL DEFAULT '0' COMMENT '砍价总库存',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='砍价活动';
① spu_id、sku_id 字段:对应的商品 SPU 编号、商品 SKU 编号。
注意:一个砍价活动,只能对应一个商品 SKU,不能对应多个商品 SPU 或者 SKU!!!
② status 字段:活动状态,由 CommonStatusEnum 枚举,只有开启、禁用两个状态。禁用时,无法参与砍价。
③ stock、total_stock 字段:砍价库存,自定义参与砍价的数量。
④ bargain_first_price、bargain_min_price 字段:砍价起始价格、砍价最低价格。比如商品原价 100 元,砍价起始价格 80 元,砍价底价 50 元,那么用户发起砍价时的价格为 80 元,最多邀请好友砍价到 50 元。
help_max_count 字段:砍价人数,需要多少人,砍价才能成功。如果不砍价成功,则该砍价记录不允许下单支付。
help_max_count 字段:单个活动,用户可以帮砍的次数。例如说:帮砍次数为 1 时,A 和 B 同时将该活动链接发给 C,C 只能帮其中一个人砍价。
random_min_price、random_max_price 字段:用户每次砍价的最小金额、最大金额。比如用户每次砍价的金额为 1 元到 10 元之间的随机数。
5.2 砍价记录
CREATE TABLE `promotion_bargain_record` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '砍价记录编号',
`activity_id` bigint NOT NULL COMMENT '砍价活动编号',
`spu_id` bigint NOT NULL DEFAULT '0' COMMENT '商品 SPU 编号',
`sku_id` bigint NOT NULL COMMENT '商品 SKU 编号',
`user_id` bigint NOT NULL COMMENT '用户编号',
`status` int NOT NULL DEFAULT '0' COMMENT '砍价状态',
`bargain_first_price` int NOT NULL DEFAULT '0' COMMENT '砍价起始价格,单位:分',
`bargain_price` int NOT NULL DEFAULT '0' COMMENT '当前砍价,单位:分',
`end_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '结束时间',
`order_id` bigint DEFAULT NULL COMMENT '订单编号',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='砍价记录表';
① 【活动信息】activity_id 字段:砍价活动编号,对应 promotion_bargain_activity 表的 id 字段。其它 spu_id、sku_id 字段,都是冗余字段,方便查询。
② 【用户信息】user_id 字段:用户编号,就是砍价发起的买家。
③ 【砍价信息】status 字段:砍价状态,由 BargainRecordStatusEnum 枚举,分成 3 种情况:砍价中、砍价成功、砍价失败。
bargain_first_price、bargain_price 字段:砍价起始价格、当前砍价。
④ 【订单信息】order_id 字段:订单编号,对应订单表的 id 字段。砍价记录的 status 为砍价成功时,才可以创建并支付订单。
5.3 砍价助力
CREATE TABLE `promotion_bargain_help` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '砍价助力编号',
`user_id` bigint NOT NULL COMMENT '用户编号',
`activity_id` bigint NOT NULL COMMENT '砍价活动名称',
`record_id` bigint NOT NULL DEFAULT '0' COMMENT '砍价记录编号',
`reduce_price` int NOT NULL DEFAULT '0' COMMENT '减少砍价,单位:分',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='砍价助力表';
比较简单,主要是一些关联的字段
6.满减送活动
CREATE TABLE `promotion_reward_activity` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '活动编号',
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '活动标题',
`start_time` datetime NOT NULL COMMENT '开始时间',
`end_time` datetime NOT NULL COMMENT '结束时间',
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '备注',
`status` tinyint NOT NULL DEFAULT '-1' COMMENT '活动状态',
`product_scope` tinyint NOT NULL COMMENT '商品范围',
`product_scope_values` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '商品范围编号的数组',
`condition_type` tinyint NOT NULL DEFAULT '-1' COMMENT '条件类型',
`rules` varchar(2000) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '优惠规则的数组',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='满减送活动';
① status 字段:活动状态,由 CommonStatusEnum 枚举,只有开启、禁用两个状态。禁用时,无法参与满减送活动。
② product_scope 字段:商品范围,商品范围,由 PromotionProductScopeEnum 枚举,分成 3 种情况:
1、通用券:全部商品 2、商品券:指定商品,由 product_scope_values 字段指定商品编号的数组 3、品类券:指定品类,由 product_scope_values 字段指定品类编号的数组 ③ condition_type 字段:条件类型,由 PromotionConditionTypeEnum 枚举,分成 2 种情况:满 N 元、满 N 件。
rules 字段:优惠规则的数组,支持多层级,可配置优惠金额、包邮、赠送积分、优惠劵。
7.限时折扣
一个限时折扣活动,可以有多个商品参与,所以它有一个 promotion_discount_activity 活动主表,和 promotion_discount_activity_product 活动商品子表
CREATE TABLE `promotion_discount_activity` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '活动编号',
`name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '活动标题',
`status` tinyint NOT NULL DEFAULT '-1' COMMENT '活动状态',
`start_time` datetime NOT NULL COMMENT '开始时间',
`end_time` datetime NOT NULL COMMENT '结束时间',
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '备注',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='限时折扣活动';
7.1 限时折扣商品
CREATE TABLE `promotion_discount_product` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号,主键自增',
`activity_id` bigint NOT NULL COMMENT '活动编号',
`activity_status` tinyint NOT NULL DEFAULT '0' COMMENT '秒杀商品状态',
`activity_start_time` datetime NOT NULL COMMENT '活动开始时间点',
`activity_end_time` datetime NOT NULL COMMENT '活动结束时间点',
`spu_id` bigint NOT NULL DEFAULT '-1' COMMENT '商品 SPU 编号',
`sku_id` bigint NOT NULL COMMENT '商品 SKU 编号',
`discount_type` int NOT NULL COMMENT '优惠类型;1-代金劵;2-折扣劵',
`discount_percent` tinyint DEFAULT NULL COMMENT '折扣百分比',
`discount_price` int DEFAULT NULL COMMENT '优惠金额,单位:分',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='限时折扣商品\n';
① activity_id 字段:活动编号,对应 promotion_discount_activity 表的 id 字段。而 activity_* 开头字段,是为了方便查询,冗余存储的。
② spu_id、sku_id 字段:对应的商品 SPU 编号、商品 SKU 编号。
③ discount_type 字段:优惠类型,由 DiscountTypeEnum 枚举,分成 2 种情况:
满减:配合 discount_price 字段,表示优惠多少金额 折扣:配合 discount_percent 字段,表示折扣百分比
8.内容管理
8.1 文章分类
CREATE TABLE `promotion_article_category` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '文章分类编号',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '分类名称',
`pic_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '图标地址',
`status` tinyint NOT NULL DEFAULT '1' COMMENT '状态',
`sort` int NOT NULL DEFAULT '99999' COMMENT '排序',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文章分类表';
8.2 文章内容
CREATE TABLE `promotion_article` (
`id` bigint unsigned NOT NULL AUTO_INCREMENT COMMENT '文章管理编号',
`category_id` bigint NOT NULL COMMENT '分类编号',
`title` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文章标题',
`author` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '文章作者',
`content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文章内容',
`pic_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '文章封面图片地址',
`introduction` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '文章简介',
`sort` int unsigned NOT NULL DEFAULT '0' COMMENT '排序',
`status` tinyint unsigned NOT NULL DEFAULT '0' COMMENT '状态',
`recommend_hot` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否热门(小程序)',
`recommend_banner` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否轮播图(小程序)',
`browse_count` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '浏览次数',
`spu_id` bigint NOT NULL DEFAULT '0' COMMENT '关联商品编号',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='文章管理表';
8.2 轮播图
CREATE TABLE `promotion_banner` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'Banner 编号',
`title` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'Banner 标题',
`pic_url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '图片 URL',
`url` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '跳转地址',
`status` tinyint NOT NULL DEFAULT '-1' COMMENT '活动状态',
`sort` int DEFAULT NULL COMMENT '排序',
`position` tinyint NOT NULL COMMENT '位置',
`memo` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '描述',
`browse_count` int DEFAULT NULL COMMENT 'Banner 点击次数',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='Banner 广告位';