一:建表

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实现秒杀的更多相关文章

  1. 微信小程序----团购或秒杀的批量倒计时实现

    效果图 实现思路微信小程序实现倒计时,可以将倒计时的时间进行每一秒的计算和渲染! JS模拟商品列表数据 goodsList:在 onLoad 周期函数中对活动结束时间进行提取:建立时间格式化函数 ti ...

  2. 微信小程序商城构建全栈应用 Thinkphp5

    课程——微信小程序商城构建全栈应用[目录]第1章 前言:不同的时代,不同的Web第2章 环境,工具与准备工作第3章 模块,路由与获取请求参数第4章 构建验证层第5章 REST与RESTFul第6章 A ...

  3. 开发一个微信小程序项目教程

    一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可.2.注册成功后进入首页,在 小程序发布流程->小程序开 ...

  4. 3个微信小程序体验报告

    1.小程序摩拜单车.腾讯视频.JD的体报告 2.小程序的入口存在不公平 3.小程序2.0会怎么样?WSO浅谈 KEVIN常用的APP是以摩拜单车与JD商城和大众点评等,那么今天也就通过这上个进行对比 ...

  5. 微信小程序语音识别服务搭建全过程解析(项目开源在github)

    silk v3录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) ## 重要的写在前面 重要事项一: 目前本文中提到的API已支持微信小程序录音文件格式:silk v ...

  6. 微信小程序语音识别服务搭建全过程解析(https api开放,支持新接口mp3录音、老接口silk录音)

    silk v3(或新录音接口mp3)录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) 重要的写在前面 重要事项一: 所有相关更新,我优先更新到我个人博客中,其它地方 ...

  7. 微信小程序:微信登陆(ThinkPHP作后台)

      https://www.jianshu.com/p/340b1ba5245e QQ截图20170320170136.png 微信小程序官方给了十分详细的登陆时序图,当然为了安全着想,应该加上签名加 ...

  8. 移动开发之【微信小程序】的原理与权限问题以及相关的简易教程

    这几天圈子里到处都在传播着这样一个东西,微信公众平台提供了一种新的开放能力,开发者可以快速开发一个小程序,取名曰:微信公众平台-小程序 据说取代移动开发安卓和苹果,那这个东东究竟是干吗用的?但很多人觉 ...

  9. 开发一个微信小程序实例教程

    一.注册小程序账号 1.进入微信公众平台(https://mp.weixin.qq.com/),注册小程序账号,根据提示填写对应的信息即可.2.注册成功后进入首页,在 小程序发布流程->小程序开 ...

随机推荐

  1. Dart 2.16 现已发布

    文 / Michael Thomsen, Dart 产品经理 Dart 2.16 正式发布 Dart 2.16 正式版已于上周发布.尽管没有新的语言特性加入,但本次版本发布包含了数个问题修复 (包括对 ...

  2. Rock Pi开发笔记(一):Rock Pi系列arm产品方案快速落地方案介绍

    前言   开发RK3399等相关的项目和产品做评估,最近发现Rock Pi4是一个很好的评估版,价格合适,能满足评估的开发,像树莓派一样留出来引脚接口,是很好的快速落地arm系列产品和项目的较好方案选 ...

  3. 性能测试之监控--zabbix通过jmx监控tomcat

    前提: 已经安装好了zabbix server 实验环境 Centos 7 Zabbix 3.0 Tomcat 7.0 JDK 1.8 安装JDK tar -zxvf jdk-8u181-linux- ...

  4. 网管必须必须知道的知识!ARP攻击与欺骗的原理!

    ARP攻击与ARP欺骗原理及应用 1.ARP概述以及攻击原理 2.ARP欺骗原理 3.ARP故障处理 1.什么是ARP协议?将一个已知的IP地址解析成MAC地址.无论是ARP攻击还是ARP欺骗,它们都 ...

  5. 带你掌握Java各种日志框架

    一:日志基本概念及框架 1:什么是日志 Java程序员在开发项目时都是依赖Eclipse/IDEA等集成开发工具的Debug调试功能来跟踪解决Bug,但项目打包部署发布到了测试环境和生产环境怎么办?难 ...

  6. 微服务从代码到k8s部署应有尽有系列(七、支付服务)

    我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...

  7. Kubernetes集群使用CentOS 7.6系统时kubelet日志含有“Reason:KubeletNotReady Message:PLEG is not healthy:”信息

    问题描述 Kubernetes集群使用CentOS 7.6版本的系统时,kubelet日志中可能存在以下告警信息. Reason:KubeletNotReady Message:PLEG is not ...

  8. Spring Boot 学习-基础

    一.Spring Boot 概述 SpringBoot 定义 Spring Boot 并不是用来替代 Spring 的新框架,而是和 Spring 框架紧密结合用于提升 Spring 开发者体验的工具 ...

  9. ensp练习:防火墙安全策略配置

    一.实验目的:1. 了解华为防火墙安全策略.2. 掌握华为防火墙安全策略的配置.二.实验仪器:计算机.华为ensp模拟器.华为防火墙三.实验内容:在这里插入图片描述根据网络拓扑图如上(交换机不需要配置 ...

  10. c# 编程学习(四)

    逻辑AND(逻辑与)操作符(用&&表示)和逻辑OR(逻辑或) 操作符(用||表示).这两个操作符统称条件逻辑操作符.只有作为操作数的两个布尔表达式都为 true.操作符&&am ...