前面我们介绍了一下商品列表相关的基础信息,本文的话,我们来实现一下具体的商品列表展示查询。
前面我们介绍过商品查询列表是同时包含普通商品和秒杀商品的,因此这里我们要来设计到商品和秒杀商品,这里我们的设计如下:
首先我们有一张正常的商品表,主要是关于商品相关的信息,示例图如下:
备注:
1、这张商品表做的没有真实环境那么细致,因为真实环境涉及到各种SPU,SKU这种父子表。 2、这里的设计仅供参考演示作用。
在这张表里面有一个goods_seckill字段,代表的是当前商品是否参与秒杀,如果参与秒杀,那么就展示秒杀的信息,如果不参与秒杀,则展示商品普通的信息。
接着我们在good是这张表下面再建立一张子表,也就是seckill_goods表,主要用来做秒杀记录信息使用,具体的秒杀信息示例如下:
在这张秒杀商品表里面,我们有相关的商品id和秒杀价格,库存数量等信息,同时还有一个参与秒杀的开始时间和结束时间。
基于上面两个表的整体逻辑是:
1、查询goods表的商品信息,展示到商品列表中。 2、如果goods表对应的商品的goods_seckill字段为1的话,则代表当前的商品属于秒杀状态,那么就在图表上面展示秒杀的倒计时或者显示秒杀未开始或者已结束等信息。
基于上面的逻辑,下面我们用代码演示一下。
一、创建表
这里我们主要是创建goods表和seckill_goods表信息,示例的sql如下:
CREATE TABLE `goods` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `goods_name` varchar(16) DEFAULT NULL COMMENT '商品名称', `goods_title` varchar(64) DEFAULT NULL COMMENT '商品标题', `goods_img` varchar(64) DEFAULT NULL COMMENT '商品图片', `goods_detail` longtext COMMENT '商品介绍详情', `goods_price` decimal(10,2) DEFAULT '0.00' COMMENT '商品单价', `goods_stock` int(11) DEFAULT '0' COMMENT '商品库存,-1表示没有限制', `goods_seckill` tinyint(1) DEFAULT '0' COMMENT '是否参与秒杀,0:不秒杀,1:秒杀', `cts` datetime DEFAULT CURRENT_TIMESTAMP, `uts` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; INSERT INTO `test8`.`goods`(`id`, `goods_name`, `goods_title`, `goods_img`, `goods_detail`, `goods_price`, `goods_stock`, `goods_seckill`, `cts`, `uts`) VALUES (1, 'huawei Mate40Pro', '华为 HUAWEI Mate 40 Pro麒麟9000 SoC芯片', '/img/huawei.jpg', '华为 HUAWEI Mate 40 Pro麒麟9000 SoC芯片', 7268.00, 1000, 1, '2022-09-12 19:06:20', '2023-11-02 10:59:04'); INSERT INTO `test8`.`goods`(`id`, `goods_name`, `goods_title`, `goods_img`, `goods_detail`, `goods_price`, `goods_stock`, `goods_seckill`, `cts`, `uts`) VALUES (2, 'xiaomi 12', '小米12S Pro 骁龙8+处理器 徕卡光学镜头 2K超视感屏 120Hz高刷 120W秒充', '/img/xiaomi.jpg', '小米12S Pro 骁龙8+处理器 徕卡光学镜头 2K超视感屏 120Hz高刷 120W秒充', 2799.00, 100, 1, '2022-09-12 19:06:20', '2023-11-02 10:59:08'); INSERT INTO `test8`.`goods`(`id`, `goods_name`, `goods_title`, `goods_img`, `goods_detail`, `goods_price`, `goods_stock`, `goods_seckill`, `cts`, `uts`) VALUES (3, 'iphone 13', 'Apple 苹果 iPhone 13(A2634)iphone13 苹果13 手机 128G', '/img/iphone.jpg', 'Apple 苹果 iPhone 13(A2634)iphone13 苹果13 手机 128G', 2699.00, 1000, 1, '2022-09-12 19:06:20', '2023-11-02 10:59:11'); INSERT INTO `test8`.`goods`(`id`, `goods_name`, `goods_title`, `goods_img`, `goods_detail`, `goods_price`, `goods_stock`, `goods_seckill`, `cts`, `uts`) VALUES (4, 'oppo find x', ' OPPO R15 oppor15手机全新机限量超薄梦境r15梦镜版r11s find x', '/img/oppo.jpg', ' OPPO R15 oppor15手机全新机限量超薄梦境r15梦镜版r11s find x', 4999.00, 1000, 1, '2022-09-12 19:06:20', '2023-11-02 10:59:13'); CREATE TABLE `seckill_goods` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `goods_id` bigint(20) DEFAULT NULL COMMENT '商品id', `seckill_price` decimal(10,2) DEFAULT NULL COMMENT '秒杀价', `stock_count` int(11) DEFAULT NULL COMMENT '秒杀数量', `start_date` datetime DEFAULT NULL, `end_date` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; INSERT INTO `test8`.`seckill_goods`(`id`, `goods_id`, `seckill_price`, `stock_count`, `start_date`, `end_date`) VALUES (1, 1, 6888.00, 1, '2022-04-27 19:06:20', '2022-04-27 19:06:20'); INSERT INTO `test8`.`seckill_goods`(`id`, `goods_id`, `seckill_price`, `stock_count`, `start_date`, `end_date`) VALUES (2, 2, 2699.00, 100, '2022-09-12 11:13:20', '2022-10-31 11:13:20'); INSERT INTO `test8`.`seckill_goods`(`id`, `goods_id`, `seckill_price`, `stock_count`, `start_date`, `end_date`) VALUES (3, 3, 2599.00, 93, '2022-09-11 00:00:00', '2022-11-14 00:59:20'); INSERT INTO `test8`.`seckill_goods`(`id`, `goods_id`, `seckill_price`, `stock_count`, `start_date`, `end_date`) VALUES (4, 4, 4999.00, 96, '2022-12-17 09:06:20', '2023-12-22 09:06:20');
执行上面的sql语句就代表已经把这两张表创建好了,到目前位置我们只有3张表:
二、创建goods-service项目
接着我们就要编写goods相关的接口了,用于展示goods列表和商品详情。
首先我们创建一个goods-service的项目
然后我们在这里编写2个接口,分别是查询商品列表的接口和查询秒杀信息的接口。
这两个接口已经囊括了所有的商品信息,所以我们可以用这两个接口实现商品列表和商品详情页面的商品展示。如果是普通商品就展示商品的基本属性信息,如果秒杀商品,再ajax请求秒杀商品的属性,展示秒杀信息。
最后我们把项目运行起来,可以看到的效果是:
1)请求商品列表信息:
2)请求商品的秒杀信息
备注:
1、这里我们的商品信息比较简陋,主要做展示用。 2、这里一个商品有两个属性,所以在商品的信息调用的时候,不管是前端,还是后端都要进行核心的判断校验,避免秒杀的时候下订单等使用普通的价格,或者商品为普通状态的时候,使用了秒杀价格。 3、这里由于我们是在商品的属性里面有一个goods_seckill的状态来判断商品是否属于秒杀的状态,真实的情况一般会有定时器或者延迟队列去更改这个状态。比如秒杀开始,更新状态为秒杀状态,秒杀结束,更改状态为非秒杀状态 4、这里我们已经返回了商品相关的信息,所以在商品详情的页面可以直接使用这个信息(仅演示阶段),真实环境中这里的信息还会做一些缓存,特别是商品详情页,由于数据是动态的,我们会做一些伪静态的页面,配合cdn来提高页面的加载速度。
最后按照惯例,附上本案例的源码,登陆后即可下载。
还没有评论,来说两句吧...