项目地址: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. 测试
可以秒杀
数据库
页面:
控制台:
再次点击相同产品不能重复秒杀