EverydayOneCat
🛏️🐈💨❌
📖🐈🌃✅
秒杀解决方案
1.需求分析
所谓“秒杀”,就是网络卖家发布一些超低价格的商品,所有买家在同一时间网上抢购的一种销售方式。通俗一点讲就是网络商家为促销等目的组织的网上限时抢购活动。由于商品价格低廉,往往一上架就被抢购一空,有时只用一秒钟。
秒杀商品通常有两种限制:库存限制、时间限制。
需求:
(1)商家提交秒杀商品申请,录入秒杀商品数据,主要包括:商品标题、原价、秒杀价、商品图片、介绍等信息
(2)运营商审核秒杀申请
(3)秒杀频道首页列出秒杀商品(进行中的)点击秒杀商品图片跳转到秒杀商品详细页。
(4)商品详细页显示秒杀商品信息,点击立即抢购实现秒杀下单,下单时扣减库存。当库存为0或不在活动期范围内时无法秒杀。
(5)秒杀下单成功,直接跳转到支付页面(微信扫码),支付成功,跳转到成功页,填写收货地址、电话、收件人等信息,完成订单。
(6)当用户秒杀下单5分钟内未支付,取消预订单,调用微信支付的关闭订单接口,恢复库存。
2.秒杀实现思路
秒杀技术实现核心思想是运用缓存减少数据库瞬间的访问压力!读取商品详细信息时运用缓存,当用户点击抢购时减少缓存中的库存数量,当库存数为0时或活动期结束时,同步到数据库。 产生的秒杀预订单也不会立刻写到数据库中,而是先写到缓存,当用户付款成功后再写入数据库。
3.秒杀频道首页
3.1服务层
返回当前正在参与秒杀的商品SeckillGoodsServiceImpl.java
1 |
|
3.2控制层
SeckillGoodsController.java
1 | /** |
3.3前端实现
创建seckillGoodsService.js
1 | //服务层 |
创建seckillGoodsController.js
1 | //控制层 |
3.4缓存处理
1 |
|
4.秒杀详细页
4.1显示详细页信息
SeckillGoodsServiceImpl.java根据ID获取实体(从缓存中读取)
1 |
|
SeckillGoodsController
1 |
|
seckillGoodsService.js
1 | this.findOne=function(id){ |
seckillGoodsController.js ,引入$location服务
1 | //查询实体 |
4.2秒杀倒计时效果
在AngularJS中$interval服务用来处理间歇性处理一些事情
格式为: $interval(执行的函数,间隔的毫秒数,运行次数);
运行次数可以缺省,如果缺省则无限循环执行
取消执行用cancel方法: $interval.cancel(time);
修改seckillGoodsController.js ,实现
1 | $scope.findOne=function(){ |
修改页面seckill-item.html ,显示time的值
1 | <span class="overtime"> 距离结束:{{timeString}}</span> |
5.秒杀下单
商品详细页点击立即抢购实现秒杀下单,下单时扣减库存。当库存为0或不在活动期范围内时无法秒杀。
5.1服务层
SeckillOrderServiceImpl.java实现提交订单方法
1 |
|
5.2控制层
SeckillOrderController.java
1 |
|
5.3前端实现
seckillGoodsService.js
1 | //提交订单 |
seckillGoodsController.js
1 | //提交订单 |
6.秒杀支付
用户成功下单后,跳转到支付页面。支付页显示微信支付二维码。用户完成支付后,保存订单到数据库。如果用户订单超时并未支付,应该释放订单,增加库存。
6.1生成支付二维码
SeckillOrderServiceImpl.java
1 | /** |
PayController.java
1 | /** |
6.2支付成功保存订单
SeckillOrderServiceImpl.java实现支付成功保存订单方法
1 |
|
PayController.java在支付成功后增加保存订单的方法
调用查询的方法,参见pinyougou-cart-web工程。
6.3订单超时处理
(1)删除缓存中的订单
SeckillOrderServiceImpl.java从缓存中删除订单
1 |
|
(2)关闭微信订单
WeixinPayServiceImpl
1 |
|
(3)超时调用服务
PayController.java
1 | /** |
结语
“征服之海,青铜三段!”
wegame上有些刺眼的几个大字,大叔面无表情,唇角有着一抹自嘲,紧握的手掌,因为大力,而导致略微尖锐的指甲深深的刺进了掌心之,带来一阵阵钻心的疼痛…
“韩金龙,征服之海,青铜三段!分数:38!”直播间的一位中年男子,看了一眼显示出来的信息,语气漠然的将之公布了出来…
中年男紫话刚刚脱口,便是不出意外的在直播间带起了一阵嘲讽的骚动。
“青铜?嘿嘿,果然不出我所料,这个“老师”段位真高!”
“哎,这废物真是把斗鱼的脸都给丢光了。”
“要不是他孝子多,这种废物,早就被驱赶出斗鱼,任其自生自灭了,哪还有机会待在这里混吃等死。”
“唉,昔年那名闻lol的金牌讲师,如今怎么落魄成这般模样了啊?”
“谁知道呢,或许做了什么亏心事,惹得神灵降怒了吧…”
周围传来的不屑嘲笑以及惋惜轻叹,落在那如木桩待在原地的少年耳,恍如一根根利刺狠狠的扎在心脏一般,让得大叔呼吸微微急促。