一:建表

1:用户表

2:订单表

3:收货地址

4:秒杀的商品表:

二: 微信后台方法

 1     /**
2 * 秒杀接口
3 */
4 public function seckill(Request $request)
5 {
6 //1.接收秒杀商品参数(参数验证),未登录用户不能参与秒杀
7 $params = $request->post();
8 $userID = $request->user_id;
9
10 //2.查询本地还有没有库存,如果没有库存,则提示库存不足
11 $redis = Redis::getInstance();
12 //求出秒杀队列的长度
13 $listName = 'seckill_queue_' . $params['goods_id'];
14 $listLen = $redis->lLen($listName);
15 //如果队列的长度小于等于0,没有库存
16 if ($listLen <= 0) {
17 return failJson('6000', '您手慢了,商品被抢购空了');
18 }
19 //3.如果有库存,进行判断该用户是否已经参与过秒杀,秒杀成功的用户数据存储到哪里的(set集合里的,无序且唯一)
20 $setName = 'seckkill_success_member_' . $params['goods_id'];
21 $bool = $redis->sIsMember($setName, $userID);
22 if ($bool) {
23 return failJson('6001', '您已经秒杀过了,请不要在参与了');
24 }
25 //把秒杀成功的用户id放到集合里
26 $redis->sAdd($setName, $userID);
27 //4.如果set集合里没有该用户的信息,进行减本地库存,然后生成订单
28 $redis->lpop($listName);
29 // 启动事务
30 Db::startTrans();
31 try {
32 //订单数组
33 //去查询秒杀商品的价格
34 $goods = SeckillGoods::getSeckillGoodsDetailByID($params['goods_id']);
35 $orderArr = [
36 'user_id' => $userID,
37 'goods_id' => $params['goods_id'],
38 'goods_nums' => $params['goods_nums'],
39 'order_no' => makeOrderSn(),//唯一的订单号
40 'status' => OrderEnum::$paidStatus,
41 'total_price' => ($goods->sckill_price * 100 * $params['goods_nums']) / 100//商品的价格需要重新计算
42 ];
43 $res = Order::createOrder($orderArr);
44 //5.分布式的数据库,如果以主键id作为key查询数据库,就有可能有问题
45 if ($res) {
46 // 提交事务
47 Db::commit();
48 }
49 //6.返回下单成功与否的状态
50 return successJson(0, '下单成功', $res);
51 } catch (\Exception $exception) {
52 // 回滚事务
53 Db::rollback();
54 throw new Exception($exception->getMessage());
55 }
56 }

最新文章

  1. 通过TStringList保存csv文件,只要循环.Add表格里面的每行记录进去,保存即可
  2. JAVA代码热部署,在线不停服动态更新
  3. jQuery.fn.extend与jQuery.extend到底区别在哪?
  4. VC++ 如何在显示对话框的时候,指定焦点控件!
  5. JavaEE系列之(二)commons-fileupload实现文件上传、下载
  6. 【转载】Linux小白福利:《超容易的Linux系统管理入门书》(三)在虚拟机上安装Linux
  7. POJ 3648-Wedding(2-SAT)
  8. Android 内存管理 &amp;amp;Memory Leak &amp;amp; OOM 分析
  9. (译)Windsor入门教程---第二部分 引用Windsor
  10. 笔记整理——C语言-http
  11. javac编译原理
  12. 独立完成一个移动点餐wap后的小结
  13. 深入浅出mongoose
  14. A1102. Invert a Binary Tree
  15. 避免crontab输出日志
  16. SQL语句--查询任务
  17. 再识ASCII实体、符号实体和字符实体
  18. 不忘初心,方得始终——NOIP2016前的感悟
  19. Http Digest认证协议
  20. springboo 添加logback日志

热门文章

  1. 「BalkanOI 2018 Day2」Parentrises
  2. 1.k8s的前世今生
  3. 我对JavaWeb中中文URL编码的简单总结
  4. PHP版的猴子选大王算法
  5. chmod以数字形式改变文件权限
  6. 社交网络分析的 R 基础:(六)绘图操作
  7. 解决使用putty 连接Windows主机与Linux虚拟机出现提示network error:connection refused问题
  8. fiddler模拟弱网1
  9. 多个UID为0的用户如何实现root用户的免密
  10. MySQL数据库的导入方法