DrawController.php 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. namespace App\Http\Controllers;
  3. use Illuminate\Http\Request;
  4. use App\Models\CheckIn;
  5. use App\Models\Prize;
  6. use App\Models\Recipients;
  7. use App\Models\Activity;
  8. class DrawController extends Controller
  9. {
  10. public function draw_user_by_region(Request $request)
  11. {
  12. return CheckIn::where('is_checked_in', 'true')
  13. ->whereTime('check_ins.updated_at', '<=', $request->deadline)
  14. ->whereIn('region', $request->region)
  15. ->get()
  16. ->random($request->number);
  17. }
  18. public function draw(Request $request)
  19. {
  20. $activity = Activity::where('id', $request->activity_id)->first();
  21. $users = CheckIn::where('check_ins.activity_id', $request->activity_id)
  22. ->where('is_checked_in', 'true')
  23. ->whereTime('check_ins.updated_at', '<=', $activity->deadline)
  24. ->whereIn('region', $request->region)
  25. ->inRandomOrder()
  26. ->get()
  27. ->random($request->number);
  28. $prize = Prize::where('id', $request->prize_id)->first();
  29. if ($prize->count >= $request->number) {
  30. $prize->update([
  31. 'count' => $prize->count - $request->number,
  32. 'updated_at' => now(),
  33. ]);
  34. $data = [];
  35. $output = [];
  36. foreach ($users as $user) {
  37. array_push($data, [
  38. 'prize_id' => $request->prize_id,
  39. 'user_id' => $user->user_id,
  40. 'is_claimed' => false,
  41. 'created_at' => now(),
  42. 'updated_at' => now(),
  43. ]);
  44. array_push($output, [
  45. 'user_id' => $user->user_id,
  46. 'user_name' => $user->name,
  47. 'department_id' => $user->department_id,
  48. ]);
  49. }
  50. Recipients::insert($data);
  51. return $output;
  52. }
  53. return false;
  54. }
  55. }