IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> laravel7接口与微信小程序秒杀功能 -> 正文阅读

[PHP知识库]laravel7接口与微信小程序秒杀功能

这边不讲思路只是部分代码实现过程

首先进入秒杀详情

<l-countdown time-type="second" time="{{time}}" bind:linend="stop" />
<l-card  type="primary" 
           l-img-class="right-card" 
           position="left" 
           image="{{details.detail.pic}}"
    title="{{details.detail.name}}">
    <view class="content">
      <view>{{details.detail.pice}}</view>
      <l-button type="error" disabled="{{disabled}}" bind:lintap="go" data-goods_id="{{details.goods_id}}">去抢</l-button>
    </view>
  </l-card>

渲染的值就自己改就好了

用了一些样式库 变量名和属性觉得不对就换成自己的见名思意就好

js

data: {
                details:[],
                time:0,
                disabled:false
        },
let id=options.id
requestReq.request(
        'show',
        {id}
).then(res=>{
        this.setData({
                details:res.data.data,
        })
        this.times()
})

按钮:(防抖动格式)网上一大堆封装引入就不写了

go:debounce(e=> {
                console.log(e[0])
                let goods_id=e[0].currentTarget.dataset.goods_id
                requestReq.request('go',{goods_id}).then(res=>{
                        console.log(res);
                        let code = res.statusCode.toString()
                        if (!code.startsWith('2')){
                        wx.showToast({
                         title: '异常!',
                         icon:1
                        })
                        }
                        if(res.data.code == 200){
                                wx.redirectTo({
                                  url: '/pages/order/order',
                                })
                        }else{
                                wx.showToast({
                                  title: res.data.msg,
                                })
                        }
                })
        }),

按钮接口:

public function go(Request $request)
    {
        //获取token
        $token=explode(' ',$request->header('authorization'))[1];
        //进行查看
        $user=Cache::get($token);
        //商品id
        $goods_id=$request->input('goods_id');
        //对应商品库存队列
        $redisKey = 'goods_list_'.$goods_id;
        //对应商品抢购成功用户集合 {1,3,4}
        $successUser='success_user'.$user['id'];
        //进行判断当前用户是否在抢成功的队列里面
        $res=Redis::sismember($successUser,$user['id']);
        if ($res){
            return response()->json(['code'=>203,'data'=>'','msg'=>'已经抢购过了']);
        }
        $count=Redis::lpop($redisKey);
        if (!$count){
            return response()->json(['code'=>202,'data'=>'','msg'=>'已经抢光了哦']);
        }
        $success = Redis::sadd($successUser, $user['id']);
        if (!$success){
            Redis::lpuch($redisKey,1);
            return  response()->json(['code'=>201,'data'=>'','msg'=>'已经抢购过了']);
        }
        return response()->json(['code' => 200, 'data' => '', 'msg' => '秒杀成功']);
    }

倒计时:

times(e){
                var starttime=this.data.details.start_time;
                console.log(starttime);
                var times = Date.parse(new Date())/1000;
                console.log(times);
                var timestamp=starttime-times
                console.log(timestamp);
                if(timestamp>0){
                        this.setData({
                                time:timestamp,
                                disabled:true
                                
                        })
                }
                if(timestamp<=0){
                        this.setData({
                                disabled:false
                        })
                }
                

        },

时间结束触发事件:

stop(){
                this.setData({
                        disabled:false 
                })
        },

秒杀成功后的生成订单

    public function order(Request $request)
    {
        //获取token
        $token=explode(' ',$request->header('authorization'))[1];
        //商品id
        $user=Cache::get($token);
        //商品id
        $goods_id=$request->input('goods_id');
        //对应商品抢购成功用户集合 {1,3,4}
        $successUser='success_user'.$user['id'];
        //进行判断当前用户是否在抢成功的队列里面
        $res=Redis::sismember($successUser,$user['id']);
        //如果你在这里面,就抢完了
        if (!$res){
            //如果抢购成功 返回状态码,进行下单
            return response()->json(['code' => 2003, 'data' => '', 'msg' => '手慢了!']);
        }
        DB::beginTransaction();
        try{
            //减库存

            //生成订单

            DB::commit();
            //下单成功,跳转支付页面
            return response()->json(['code' => 200, 'data' => '', 'msg' => '下单成功!']);
        }catch (\Exception $e){
            DB::rollBack();
        }
    }

后台接口

库存预热:

在后台添加秒杀时的库存预热

public function createList(Request $request)
    {
        //查出所有参与秒杀活动列表
        $data=Details::with(['detail'])->where('goods_id',1)->first()->toArray();
        //库存
        $count = $data['num'];
        //生成对应商品库存队列
        $redisKey = 'goods_list_'.$data['goods_id'];
        for ($i = 1; $i <= $count; $i++) {
            Redis::rpush($redisKey, 1);
        }
    }

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-07-10 14:19:19  更:2021-07-10 14:20:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 11:06:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码