6
0
Fork 0
jiqu-library-server/app/Services/DrawTicketService.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,
]);
}
}