日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > php >内容正文

php

thinkphp加锁抢购商品

發布時間:2024/9/30 php 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 thinkphp加锁抢购商品 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<?php namespace Service\Controller;use Base\Webbase;class SeckillController extends Webbase {/*** 預約操作*/public function order(){$cond1 = array('starttime' => array('ELT',time()),'endtime' => array('EGT',time()));M()->startTrans();//開啟事務$plan = M('maskplans')->lock(true)->where($cond1)->find(); // echo M('maskplans')->getLastSql(); // dump($plan);die();if (!$plan || $plan['plan_num']<=$plan['real_num']){$this->weberror(self::THIS_ACTION_ERROR,"當前場次已結束!");}$cond2 = array('idcard'=> $_POST['idcard'],'add_time' => array("EGT",strtotime("-7 day")));$order = M('maskorders')->where($cond2)->find();if ($order){$this->weberror(self::THIS_ACTION_ERROR,"每人7天只能預約1次,請勿重復預約!");}$postData = array( // 'name'=>$_POST['name'], // 'idcard'=>$_POST['idcard'], // 'lat'=>$_POST['lat'] , // 'lon'=>$_POST['lon'] , // 'sku'=>rand(100000,999999), // 'add_time'=>time()'name'=>"a".rand(100,999),'idcard'=>rand(1000000,9999999),'lat'=>1,'lon'=>2,'sku'=>rand(100000,999999),'add_time'=>time());if (!$postData['name'] || !$postData['idcard' || !$postData['lon'] || !$postData['lat']){$this->weberror(self::THIS_ACTION_ERROR,"信息填寫錯誤!");}$status =M('maskplans')->lock(true)->where(array('id'=>$plan['id']))->setInc('real_num');if ($status){$re = M('maskorders')->add($postData);if ($re){$data = array('sku'=>$postData['sku']);M()->commit();//事務提交$this->websuccess(self::OUTPUT_SUCCESS,"預約成功",$data);}}M()->rollback();//回滾$this->weberror(self::THIS_ACTION_ERROR,"預約失敗!");}/*** 我的預約*/public function myAppointment(){$idcard = $_POST['idcard'];$re = M('maskorders')->where(array('idcard'=>$idcard))->order('add_time desc')->select();if ($re){foreach ($re as &$item){$item['add_time'] = date("Y-m-d H:i:s",$item['add_time']);}$this->websuccess(self::OUTPUT_SUCCESS,"成功!",$re);}$this->websuccess(self::OUTPUT_SUCCESS,"暫無數據!");}/*** 預約計劃列表*/public function appointList(){$cond = array('end_time' =>array('GT',time()));$lists = M('maskplans')->where($cond)->select();if ($lists){foreach ($lists as &$item){if ($item['starttime']<time() && $item['endtime'] >time()){$item['show'] = 1;}else{$item['show'] = 0;}$item['starttime'] = date("Y-m-d H:i:s",$item['starttime']);$item['endtime'] = date("Y-m-d H:i:s",$item['endtime']);}$this->websuccess(self::OUTPUT_SUCCESS,"成功!",$lists);}$this->websuccess(self::OUTPUT_SUCCESS,"暫無數據!");} } /*create table yixiang_maskorders( `id` int(11) NOT NULL AUTO_INCREMENT primary key, `name` varchar(255) NOT NULL COMMENT "姓名", `idcard` varchar(255) NOT NULL COMMENT "身份證號", `lat` varchar(255) NOT NULL COMMENT "經度", `lon` varchar(255) NOT NULL COMMENT "緯度", `sku` varchar(255) NOT NULL COMMENT "編號", `add_time` varchar(255) NOT NULL COMMENT "搶購時間", );create table yixiang_maskplans( `id` int(11) NOT NULL AUTO_INCREMENT primary key, `starttime` int(11) NOT NULL COMMENT "計劃投放開始時間", `endtime` int(11) NOT NULL COMMENT "計劃投放結束時間", `plan_locale` varchar(255) NOT NULL COMMENT "地點", `plan_num` int(11) NOT NULL COMMENT "計劃發放量", `real_num` int(11) NOT NULL COMMENT "實際發放量" );

使用ab測試:

效果應該如圖所示

總結

以上是生活随笔為你收集整理的thinkphp加锁抢购商品的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。