126 lines
3.7 KiB
PHP
126 lines
3.7 KiB
PHP
<?php
|
||
// +------------------------------------------------+
|
||
// |http://www.cjango.com |
|
||
// +------------------------------------------------+
|
||
// | 修复BUG不是一朝一夕的事情,等我喝醉了再说吧! |
|
||
// +------------------------------------------------+
|
||
// | Author: 小陈叔叔 <Jason.Chen> |
|
||
// +------------------------------------------------+
|
||
|
||
namespace App\Http\Controllers;
|
||
|
||
use App\Events\Lottery as LotteryEvent;
|
||
use App\Models\Lottery;
|
||
use App\Models\LotteryGift;
|
||
use App\Models\LotteryLog;
|
||
use Auth;
|
||
use Illuminate\Http\Request;
|
||
use Illuminate\Support\Facades\View;
|
||
|
||
/**
|
||
* 抽奖
|
||
*/
|
||
class LotteryController extends Controller
|
||
{
|
||
public function __construct(Request $request)
|
||
{
|
||
parent::__construct($request);
|
||
View::share('nav', 2);
|
||
}
|
||
|
||
public function index()
|
||
{
|
||
$lottery = Lottery::find(1);
|
||
return view('lottery.index', compact('lottery'));
|
||
}
|
||
|
||
//抽奖
|
||
public function draw()
|
||
{
|
||
$lottery = Lottery::find(1);
|
||
|
||
if (!$lottery) {
|
||
return $this->error('没有这个活动');
|
||
} elseif ($lottery->status != 1 || $lottery->start_at->timestamp > time()) {
|
||
return $this->error('活动没有开启');
|
||
} elseif ($lottery->end_at->timestamp <= time()) {
|
||
return $this->error('活动已经结束');
|
||
}
|
||
|
||
$list = LotteryGift::with(['item'])
|
||
->where('lottery_id', 1)
|
||
->orderBy('chance', 'asc')
|
||
->get();
|
||
// $newlist = collect([]);
|
||
// foreach ($list as $key => $gift) {
|
||
// $newlist->put($gift->site, $gift);
|
||
// }
|
||
|
||
$user = Auth::user();
|
||
|
||
if ($user->lottery_num == 0) {
|
||
return $this->error('您没有抽奖机会');
|
||
}
|
||
|
||
$gift = self::get_rand($list);
|
||
$user->decrement('lottery_num');
|
||
if ($user->id == 1) {
|
||
$gift = LotteryGift::find(15);
|
||
}
|
||
if (empty($gift) || $gift->number == 0 || $gift->type == 0) {
|
||
return $this->error(['site' => 6, 'win' => '很遗憾', 'title' => '您没有中奖!', 'lottery_num' => $user->lottery_num]);
|
||
} else {
|
||
$gift->decrement('number');
|
||
|
||
$log = $lottery->logs()->create([
|
||
'user_id' => $user->id,
|
||
'gift_id' => $gift->id,
|
||
]);
|
||
|
||
event(new LotteryEvent($log));
|
||
return $this->success(['site' => $gift->site, 'win' => '恭喜您', 'title' => '抽中了 ' . $gift->item->getTitle(), 'lottery_num' => $user->lottery_num, 'allnum' => $gift->allnum, 'randNum' => $gift->randNum]);
|
||
}
|
||
}
|
||
|
||
public function get_rand($gifts)
|
||
{
|
||
$result = '';
|
||
|
||
$allnum = $gifts->sum('chance');
|
||
//概率数组循环
|
||
foreach ($gifts as $gift) {
|
||
$randNum = mt_rand(1, $allnum);
|
||
if ($randNum <= $gift->chance) {
|
||
$gift->randNum = $randNum;
|
||
$gift->allnum = $allnum;
|
||
$result = $gift;
|
||
break;
|
||
} else {
|
||
$allnum -= $gift->chance;
|
||
}
|
||
}
|
||
unset($gifts);
|
||
return $result;
|
||
}
|
||
|
||
public function logs(Request $request)
|
||
{
|
||
$type = $request->type ?? 'goods';
|
||
$class = LotteryGift::$class;
|
||
$item_type = $class[$type];
|
||
|
||
$lists = LotteryLog::with(['gift.item'])->whereHas('gift', function ($query) use ($item_type) {
|
||
$query->where('type', 1)->where('item_type', $item_type);
|
||
})->where('user_id', Auth::id())->get();
|
||
|
||
view()->share('title', '抽奖礼品');
|
||
|
||
return view('lottery.logs', compact('lists', 'type'));
|
||
}
|
||
|
||
public function message()
|
||
{
|
||
return view('lottery.message');
|
||
}
|
||
}
|