validate([ 'start_at' => ['bail', 'required', 'date_format:Y-m-d'], 'end_at' => ['bail', 'required', 'date_format:Y-m-d'], ]); return ClickLogSimpleResource::collection($request->user()->clickLogs()->whereBetween('created_at', [$input['start_at'], $input['end_at']])->get()); } /** * 签到动作 * * @return void */ public function click(Request $request, PointsService $pointsService) { if (Click::isClick($request->user())) { throw new BizException('今天已签到,请明天再来'); } $points = 0; try { DB::beginTransaction(); $user = $request->user(); $click = $user->click()->firstOrCreate([], [ 'continue_click_times' => 1, 'last_click_at' => now(), ]); if (!$click->wasRecentlyCreated) { $click->update([ 'continue_click_times' => $click->last_click_at->isYesterday() ? DB::raw('continue_click_times + 1') : 1, //如果是更新则判断昨天是否签到 'last_click_at' => now(), ]); } $click->refresh(); ClickLog::create([ 'user_id'=>$user->id, ]); //发放当天签到积分 $points = 5; $pointsService->sendPoints(1, $user, $points, '签到奖励'); //发放额外的奖励积分 // $continueClickDays = 7;//默认7天 // $continueClickPoints = 10;//默认10分 // if (($click->continue_click_times % $continueClickDays) == 0) { // $pointsService->sendPoints(1, $user, $continueClickPoints, '连续签到奖励'); // } DB::commit(); } catch (Throwable $th) { DB::rollBack(); report($th); throw new BizException('系统繁忙,请稍后再试'); } return response()->json( ['points'=>$points] ); } }