SpringBoot+MQ+Redis+BootStrap 秒杀系统(三)秒杀功能设计

项目地址:https://github.com/wannengdek/spring-boot-seckill

如果项目对您有所帮助,麻烦帮忙点亮小⭐⭐

秒杀功能设计

 

1.数据库设计

分为四张表

订单表:

商品表

秒杀商品表:

秒杀订单表:

为什么样这样设计

便于后期扩展新的模块,有些商品可以参加秒杀,有些商品可以参与打折,有些商品可以参加其他活动,然后每种活动都建立新的订单表,方便统计,所有的订单都在订单表,方便查询和统计.

 

2.商品列表页

就是登陆之后跳转到商品页.一个controller + 查询的事. 暂不赘述

3. 商品详情页

页面流程及逻辑

点击url 跳转到商品详情页前,controller 从数据库中查到 这个商品的相关信息,并放入model 中.

将秒杀时间与当前时间进行比较 ,然后来决定秒杀是否进行,结束.

 

4.订单详情页

当我们点击立即秒杀时,应该先判断这个用户是否登录     

如果登录,判断当前产品是否可以进行秒杀,也就是验证库存

如果库存大于0,判断是否秒杀过这个产品,如果有,显示不能重复秒杀,如果没有才允许继续秒杀

orderService.getMiaoshaOrderByUserIdGoodsId(user.getId(), goodsId)    

是判断当前用户对于当前产品是否有秒杀记录,如果有 则order 对象不为空,不为空那就是已经秒杀过,则不允许继续秒杀.

如果没有秒杀记录继续往下执行.

miaoshaService.miaosha(user, goods)

这是一个事务,减库存和下单一起执行.

在这里有个需要注意的地方

就是生成订单之后,我们需要得到订单的id 去当做秒杀订单的属性.

在mybatis 中可以得到执行操作后主键的 id 值.

useGeneratedKeys="true" keyProperty="id"

这个代表的是:

在插入后, 会自动把插入的数据生成的ID

塞入到你这个 keyProperty 后面设置的 ID 这个参数里面。

执行之后 你直接取ID 的值就好了。

参考自:https://blog.csdn.net/tanglin423/article/details/84065835

 

到此我们结束了一个秒杀业务的操作

5. 测试

可以秒杀

数据库

页面:

控制台:

再次点击相同产品不能重复秒杀

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值