6
0
Fork 0

抽奖活动 每人每月至少一次抽奖机会

base
panliang 2026-05-16 10:03:50 +08:00
parent 8f28128f53
commit 0df36161d8
2 changed files with 23 additions and 9 deletions

View File

@ -10,6 +10,7 @@ use App\Models\DrawActivity;
use App\Models\DrawLog;
use App\Models\DrawTicket;
use App\Services\DrawActivityService;
use App\Services\DrawTicketService;
use Illuminate\Contracts\Cache\LockTimeoutException;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
@ -29,16 +30,24 @@ class DrawActivityController extends Controller
if ($user = $request->user()) {
// 当前用户的抽奖机会
$drawTicket = DrawTicket::where('draw_activity_id', $drawActivity->id)
->where('user_id', $user->id)
->first();
$drawTicket = DrawTicket::where('draw_activity_id', $drawActivity->id)->where('user_id', $user->id)->first();
// 保证每个用户, 每月至少一次 抽奖机会
if ($drawActivity->send_ticket_type == 2) {
$service = DrawTicketService::make();
if (!$drawTicket || ($drawTicket->updated_at->lt(now()->startOfMonth()) && $drawTicket->number <= 0)) {
$service->change($user, $drawActivity, 1, '活动赠送');
$drawTicket = DrawTicket::where('draw_activity_id', $drawActivity->id)->where('user_id', $user->id)->first();
}
}
// 当前用户未填写收货地址的实物奖品
$drawLog = DrawLog::whereRelation('prize', 'type', DrawPrizeType::Goods->value)
->where('draw_activity_id', $drawActivity->id)
->where('user_id', $user->id)
->whereNull('consignee_name')
->first();
// $drawLog = DrawLog::whereRelation('prize', 'type', DrawPrizeType::Goods->value)
// ->where('draw_activity_id', $drawActivity->id)
// ->where('user_id', $user->id)
// ->whereNull('consignee_name')
// ->first();
}
return response()->json([

View File

@ -10,6 +10,11 @@ use App\Models\User;
class DrawTicketService
{
public static function make(...$params)
{
return new static(...$params);
}
/**
* 增加/扣除 用户在给定活动中的抽奖机会
*
@ -21,7 +26,7 @@ class DrawTicketService
*
* @throws \App\Exceptions\BizException
*/
public function change(User $user, DrawActivity $drawActivity, int $number, ?string $remark = null): void
public function change(User $user, DrawActivity $drawActivity, int $number, ?string $remark = null)
{
if ($number === 0) {
throw new BizException('抽奖次数不能为 0');