58 lines
1.5 KiB
PHP
58 lines
1.5 KiB
PHP
<?php
|
|
|
|
namespace App\Services;
|
|
|
|
use App\Exceptions\BizException;
|
|
use App\Models\DrawActivity;
|
|
use App\Models\DrawTicket;
|
|
use App\Models\DrawTicketLog;
|
|
use App\Models\User;
|
|
|
|
class DrawTicketService
|
|
{
|
|
/**
|
|
* 增加/扣除 用户在给定活动中的抽奖机会
|
|
*
|
|
* @param \App\Models\User $user
|
|
* @param \App\Models\DrawActivity $drawActivity
|
|
* @param int $number
|
|
* @param string|null $remark
|
|
* @return void
|
|
*
|
|
* @throws \App\Exceptions\BizException
|
|
*/
|
|
public function change(User $user, DrawActivity $drawActivity, int $number, ?string $remark = null): void
|
|
{
|
|
if ($number === 0) {
|
|
throw new BizException('抽奖次数不能为 0');
|
|
}
|
|
|
|
if ($number < 0) {
|
|
$drawTicket = DrawTicket::where([
|
|
'draw_activity_id' => $drawActivity->id,
|
|
'user_id' => $user->id,
|
|
])->first();
|
|
|
|
if ($drawTicket === null || $drawTicket->number + $number < 0) {
|
|
throw new BizException('抽奖次数不足');
|
|
}
|
|
} else {
|
|
$drawTicket = DrawTicket::firstOrCreate([
|
|
'draw_activity_id' => $drawActivity->id,
|
|
'user_id' => $user->id,
|
|
], [
|
|
'number' => 0,
|
|
]);
|
|
}
|
|
|
|
$drawTicket->increment('number', $number);
|
|
|
|
DrawTicketLog::create([
|
|
'draw_activity_id' => $drawActivity->id,
|
|
'user_id' => $user->id,
|
|
'number' => $number,
|
|
'remark' => $remark,
|
|
]);
|
|
}
|
|
}
|