<?php
namespace App\Http\Controllers;
use App\Models\Goods;
use App\Models\MsSkuStore;
use App\Models\Rtc;
use Facade\FlareClient\View;
use Illuminate\Http\Request;
use Illuminate\Http\ResponseTrait;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Redis;
use Volc\Service\Vod\Models\Request\VodGetPlayInfoRequest;
use Volc\Service\Vod\Models\Response\VodGetPlayInfoResponse;
use Volc\Service\Vod\Vod;
class TestController extends Controller
{
public $user_num = 50;
public function index(Request $request)
{
$uid = mt_rand(1, 9999);
// $uid = $request->input('uid');
$goods_id = 1;
$key = 'sku_num_' . $goods_id;//商品库存key
$key_user = 'key_user' . $goods_id;
Redis::watch($key);
//库存
$store = Redis::get($key);
// dd($store);
//校验一个商品
$key_user_exits = Redis::sismember($key_user, $uid);
if ($key_user_exits) {
return '用户已抢购该商品';
}
if ($store) {
Redis::multi();
Redis::decr($key);
Redis::sadd($key_user, $uid);
$res = Redis::exec();
if ($res) {
try {
DB::beginTransaction();
$sale = Goods::where('id', $goods_id)->value('sale');
Goods::where('id', $goods_id)->where('sale',$sale)->decrement('sku',1,['sale'=>DB::raw('sale + 1')]);
MsSkuStore::create([
'uid' => $uid,
'goods_id' => $goods_id
]);
DB::commit();
return '成功';
} catch (\Exception $e) {
DB::rollBack();
Log::info('抢购异常' . $e->getMessage());
return '抢购异常,请重试!';
}
} else {
return '抢购失败,请重试!';
}
} else {
return '商品已卖完';
}
}
/**
* 查看抢到结果
*/
public function pushMs()
{
$uid =mt_rand(100,9999);
$goods_id =1;
$key = 'push_key_'.$goods_id;
$key_user = 'key_user';
$exists = Redis::sismember($key_user,$uid);
if($exists){
return '用户已经抢过';
}
$pop = Redis::rpop($key);
if(!$pop){
return '商品活动已结束';
}
Redis::sadd($key_user,$uid);
$success = 'success_key';
$content = '用户'.$uid.'成功抢到'.$goods_id.'商品数'.$pop;
Redis::lpush($success,$content);
try {
DB::beginTransaction();
$sale = Goods::where('id', $goods_id)->value('sale');
Goods::where('id', $goods_id)->where('sale',$sale)->decrement('sku',1,['sale'=>DB::raw('sale + 1')]);
MsSkuStore::create([
'uid' => $uid,
'goods_id' => $goods_id
]);
DB::commit();
return '成功';
} catch (\Exception $e) {
DB::rollBack();
Log::info('抢购异常' . $e->getMessage());
return '抢购异常,请重试!';
}
}
public function check()
{
$uid =mt_rand(100,9999);
$goods_id =1;
$key = 'sku_'.$goods_id;//库存
$store = Redis::get($key);
if(!$store){
return '活动已结束';
}
$key_success = 'success_is';
$is_nx = Redis::setnx($key_success,1);
if($is_nx){
//入库
Redis::decr($key);
try{
DB::beginTransaction();
Goods::where('id',$goods_id)->decrement('sku',1,['sale'=>DB::raw('sale+1')]);
MsSkuStore::create([
'uid'=>$uid,
'goods_id'=>$goods_id,
]);
Redis::del($key_success);
DB::commit();
return '抢购成功';
}catch (\Exception $e){
Log::info('入库异常'.$e->getMessage());
DB::rollBack();
return '入库异常';
}
}else{
'系统繁忙,请重试';
}
}
}