laravel框架实现商品订单加入到rabbitMQ队列

摘要:
phpnamespaceAppJobs;使用AppUsersModel;使用应用客户记忆模型;使用AppProductModel;使用照明支持面板DB;useIlluminateBusQueueable;useIlluminationFoundationBusDispatchable;useIlluminateQueueSerializesModels;使用照明队列与队列交互;使用IlluminationContractsQueueShouldQueue;使用照明支持面板显示;classQueueimplementsShouldQueue{useDispatchable,InteractisWithQueue,Queueable,SerializesModels;private$data;/***队列构造函数。*@param$data*/publicfunction__construct{$this-˃data=$data;}/***执行作业。**@Returnvoid*/publicfunctionhandle(){$id=$this-˃data[0]['id'];//var_dump($id);die;$query=newProductModel();$model=$query-˃info($id; $pro=json_decode//变量泵;死亡$edit=DB::table-˃where-˃update//下订单扣除费用$cus=newCusterModel();$status=$cus-˃状态($id);//如果{echo“订单已成功下单”,则更改状态;}否则{echo“余额不足”;}}}}//变更单状态˂?

一、

创建一个任务类

  1. php artisan make:job QueuedTest  //执行之后app/Jobs目录下生成一个QueuedTest.php

二、创建控制器

  1. php artisan make:controller QueuedController
  2. 执行之后生成app/Http/Controllers/QueuedController.php文件
    修改内容
     1 <?php
     2 namespace AppHttpControllers;
     3 use AppHttpControllersController;
     4 use AppUsersModel;
     5 use AppCustemorModel;
     6 use AppProductModel;
     7 use IlluminateHttpRequest;
     8 use AppHttpRequests;
     9 use AppJobsQueue;
    10 use IlluminateSupportFacadesDB;
    11 use IlluminateSupportFacadesRedis;
    12 use IxudraCurlFacadesCurl;
    13 class QueuedController extends Controller
    14 {
    15 
    16 //点击商品订购跳转
    17  public function goods(Request $request){
    18         $id=$request['id'];
    19         $goods=DB::table('product')->where('id',$id)->get();
    20         $good=json_decode($goods,true);
    21         $data['name']=$good[0]['name'];
    22         $data['price']=$good[0]['price'];
    23         $data['created_at']=time();
    24         $data['updated_at']=time();
    25         DB::table('custemor')->insert($data);
    26         $arr=DB::table('product')->where('id',$id)->get();
    27         $arr1=json_decode($arr,true);
    28         $this->dispatch(new Queue($arr1));//进入队列
    29     }
    30 
    31 
    32 
    33 }


  3. //进入jop/queue.php

    <?php namespace AppJobs; use AppUsersModel; use AppCustemorModel; use AppProductModel; use IlluminateSupportFacadesDB; use IlluminateBusQueueable; use IlluminateFoundationBusDispatchable; use IlluminateQueueSerializesModels; use IlluminateQueueInteractsWithQueue; use IlluminateContractsQueueShouldQueue; use IlluminateSupportFacadesRedis; class Queue implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; private $data; /** * Queue constructor. * @param $data */ public function __construct($data) { $this->data = $data; } /** * Execute the job. * * @return void */ public function handle() { $id=$this->data[0]['id']; // var_dump($id);die; $query=new ProductModel(); $model=$query->info($id); //减去库存 $ids= Redis::get('id');//获取用户id if($model){ $users = DB::table('users') ->select('balance') ->where('id',$ids) ->get(); $user=json_decode($users,true); $pro = DB::table('product') ->select('price') ->where('id',$id) ->get(); $pros=json_decode($pro,true); //var_dump($pros);die; $edit=DB::table('users')->where('id', $ids)->update(['balance' =>(int)$user[0]['balance']-(int)$pros[0]['price']]);//下单进行扣费操作 $cus=new CustemorModel(); $status=$cus->status($id);//更改状态 if($edit && $status){ echo "下单成功"; }else{ echo "余额不足"; } } } }

    //更改订单状态

  4. <?php
    
    namespace App;
    use IlluminateSupportFacadesDB;
    use IlluminateDatabaseEloquentModel;
    
    class CustemorModel extends Model
    {
         protected $table="product";
         public function status($id){
             $query=DB::table('custemor')->where('pid',$id)->update(['status'=>1]);
             return $query;
         }
    }

    //减去商品库存

  5.  1 <?php
     2 namespace App;
     3 use IlluminateSupportFacadesDB;
     4 use IlluminateDatabaseEloquentModel;
     5 class ProductModel extends Model
     6 {
     7     protected $table="product";
     8     public function show(){
     9         $data= DB::table('product')->get();
    10         return $data;
    11     }
    12     //查询商品是否有库存
    13     public function info($id){
    14        $users = DB::table('product')
    15                 ->select('stock_num','price')
    16                 ->where('id',$id)
    17                 ->get();
    18         $user=json_decode($users,true);
    19         if($users <= '0'){
    20                 return "库存不足";
    21          }else{
    22             $edit=DB::table('product')->where('id', $id)->update(['stock_num'=>(int)$user[0]['stock_num']-1]);
    23             return $edit;
    24          }
    25        return $user; 
    26     }
    27     //商品添加
    28     public function add($data){
    29          $query=DB::table('product')->insert($data);
    30          return $query;
    31     }
    32     
    33 }

免责声明:文章转载自《laravel框架实现商品订单加入到rabbitMQ队列》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇element table表格中的数据修改弹出框,点击确定更新后table修改的数据高度位置不变出现“基础链接已关闭,无法链接到远程服务器"错误的解决办法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

handsontable 问题

碰到问题了,去官网上找community:http://docs.handsontable.com/0.16.1/tutorial-quick-start.html 1、 描述:把handson table放在bootstrap tab中,首次没有激活,table没有正常显示。 原因:这种情况下,table invisible,所以不会调用render()...

浅析vue数据绑定

前言:最近团队需要做一个分享,脚进脑子,不知如何分享。最后想着之前一直想研究一下 vue 源码,今天刚好 “借此机会” 研究一下。 网上研究vue数据绑定的文章已经非常多了,但是自己写一遍,敲一遍demo和看别人的文章是完全不同的,so……搬运工来了 目前数据绑定主要有以下三种实现方式: 1.   脏值检查(angular.js)    轮询检测数据变化...

MySQL的锁(1)

    锁机制是数据库系统区别于文件系统的一个关键特性,他可以确保用户能以一致的方式读取和修改数据。     为了保证一致性,必须有锁的介入。MySQL操作缓冲池中的LRU列表,删除、添加、移动LRU列表中的元素等地方也都适用锁,从而允许对多种不同资源的并发访问。     打个比方,我们到淘宝上买一件商品,商品只有一件库存,这个时候如果还有另一个人买,那么...

lua中table的遍历,以及删除

Lua 内table遍历 在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是: 1. ipairs for index, value in ipairs(table) do end 注:这种方式的遍历只会从key为1的地方开始,一直以key递增1的顺序来遍历,若找到一个递增不是1的key就结束遍历,无论后面...

rootkit:实现隐藏进程

实现隐藏进程一般有两个方法: 1,把要隐藏的进程PID设置为0,因为系统默认是不显示PID为0的进程。 2,修改系统调用sys_getdents()。 Linux系统中用来查询文件信息的系统调用是sys_getdents,这一点可以通过strace来观察到,例如strace ls 将列出命令ls用到的系统调用,从中可以发现ls是通过getdents系统调用...

【原创】大数据基础之Hive(5)性能调优Performance Tuning

1 compress & mr hive默认的execution engine是mr hive> set hive.execution.engine;hive.execution.engine=mr 所以针对mr的优化就是hive的优化,比如压缩和临时目录 mapred-site.xml <property>...