微信小程序结合 tp实现秒杀
一:建表

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 }
微信小程序结合 tp实现秒杀的更多相关文章
- 微信小程序----团购或秒杀的批量倒计时实现
效果图 实现思路微信小程序实现倒计时,可以将倒计时的时间进行每一秒的计算和渲染! JS模拟商品列表数据 goodsList:在 onLoad 周期函数中对活动结束时间进行提取:建立时间格式化函数 ti ...
- 微信小程序商城构建全栈应用 Thinkphp5
课程——微信小程序商城构建全栈应用[目录]第1章 前言:不同的时代,不同的Web第2章 环境,工具与准备工作第3章 模块,路由与获取请求参数第4章 构建验证层第5章 REST与RESTFul第6章 A ...
- 开发一个微信小程序项目教程
一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可.2.注册成功后进入首页,在 小程序发布流程->小程序开 ...
- 3个微信小程序体验报告
1.小程序摩拜单车.腾讯视频.JD的体报告 2.小程序的入口存在不公平 3.小程序2.0会怎么样?WSO浅谈 KEVIN常用的APP是以摩拜单车与JD商城和大众点评等,那么今天也就通过这上个进行对比 ...
- 微信小程序语音识别服务搭建全过程解析(项目开源在github)
silk v3录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) ## 重要的写在前面 重要事项一: 目前本文中提到的API已支持微信小程序录音文件格式:silk v ...
- 微信小程序语音识别服务搭建全过程解析(https api开放,支持新接口mp3录音、老接口silk录音)
silk v3(或新录音接口mp3)录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) 重要的写在前面 重要事项一: 所有相关更新,我优先更新到我个人博客中,其它地方 ...
- 微信小程序:微信登陆(ThinkPHP作后台)
https://www.jianshu.com/p/340b1ba5245e QQ截图20170320170136.png 微信小程序官方给了十分详细的登陆时序图,当然为了安全着想,应该加上签名加 ...
- 移动开发之【微信小程序】的原理与权限问题以及相关的简易教程
这几天圈子里到处都在传播着这样一个东西,微信公众平台提供了一种新的开放能力,开发者可以快速开发一个小程序,取名曰:微信公众平台-小程序 据说取代移动开发安卓和苹果,那这个东东究竟是干吗用的?但很多人觉 ...
- 开发一个微信小程序实例教程
一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可.2.注册成功后进入首页,在 小程序发布流程->小程序开 ...
随机推荐
- 后缀自动机 (SAM)
后缀自动机 定义 定义 SAM 为一个有限状态自动机,接受且仅接受 \(S\) 的一个后缀. 同时,SAM 是这样的自动机中最小的那个,其中状态数至多为 \(2n - 1\),转移数至多为 \(3n ...
- MySQL 数据库的tab 补全功能 (懒人必备)
MySQL 数据库的tab补全功能 跟着步骤走~~ 懒人养成第一步 不仅帮你补全 甚至预判你的预判,就问你可怕不可怕 1.安装相关依赖软件(需要配置yum官方 ...
- 12、Linux基础--挂载磁盘步骤、流处理工具awk(正则 比较 逻辑 算数表达式 流程控制)
笔记 1.晨考 1.用两种方法,实现将文件中的以# 开头的行把# 去掉 sed -r 's/^#//g' /etc/fstab cat /etc/fstab | tr -d '^#' 2.将文件中的H ...
- C# 实例解释面向对象编程中的开闭原则
在面向对象编程中,SOLID 是五个设计原则的首字母缩写,旨在使软件设计更易于理解.灵活和可维护.这些原则是由美国软件工程师和讲师罗伯特·C·马丁(Robert Cecil Martin)提出的许多原 ...
- Note - 千年食谱颂
其实是兔子收集的各种下饭操作与名菜食谱.( 零·策略篇 多校 NOIP 2021.11.05: 这个真的是,我每次打毛毛虫剖分都是 rush 状态 qwq.像这种 已知代码难度大.不便于调试的 ...
- MyBatis中执行器Executor框架
与JDK提供的Executor框架类似,MyBatis也提供了一套Executor框架,具体如下图: 其为Mybatis提供与数据库交互的功能,是一个典型的装饰器模式的应用--对JDBC功能的封装,同 ...
- Java的泛型机制
Java的泛型机制 泛型是 Java 从 JDK5 开始引入的新特性,本质上是参数化类型,即所操作的数据类型被指定为一个参数.这意味着编写的代码可以被很多不同类型的对象所重用. 1. 泛型的使用方式 ...
- 【Kotlin】初识Kotlin(二)
[Kotlin]初识Kotlin(二) 1.Kotlin的流程控制 流程控制是一门语言中最重要的部分之一,从最经典的if...else...,到之后的switch,再到循环控制的for循环和while ...
- Python-Flask框架之"图书管理系统"项目,附详解源代码及页面效果截图
该图书管理系统要实现的功能如下: 1. 可以通过添加窗口添加书籍或作者,如果要添加的作者和书籍已存在于书架上, 则给出相应的提示: 2. 如果要添加的作者存在,而要添加的书籍书架上没有,则将该书籍添加 ...
- MySQL explain结果Extra中"Using Index"与"Using where; Using index"区别探究
问题背景 最近用explain命令分析查询sql执行计划,时而能看到Extra中显示为"Using index"或者"Using where; Using Index&q ...