thinkphp加锁抢购商品
生活随笔
收集整理的這篇文章主要介紹了
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加锁抢购商品的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用PHP+Redis实现延迟任务,实现
- 下一篇: 原生php实现账单功能