Distribute.php 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace App\Jobs;
  3. use Illuminate\Bus\Queueable;
  4. use Illuminate\Queue\SerializesModels;
  5. use Illuminate\Queue\InteractsWithQueue;
  6. use Illuminate\Contracts\Queue\ShouldQueue;
  7. use Illuminate\Foundation\Bus\Dispatchable;
  8. use Illuminate\Support\Facades\Redis;
  9. use App\Model\Question;
  10. use App\Model\Option;
  11. use App\Model\RoomQuestion;
  12. use GatewayWorker\Lib\Gateway;
  13. class Distribute implements ShouldQueue
  14. {
  15. use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
  16. protected $room_id; //房间ID
  17. /**
  18. * Create a new job instance.
  19. *
  20. * @return void
  21. */
  22. public function __construct($room_id)
  23. {
  24. $this->room_id = $room_id;
  25. }
  26. /**
  27. * Execute the job.
  28. *
  29. * @return void
  30. */
  31. public function handle()
  32. {
  33. if(!$this->room_id){
  34. echo "找不到房间ID";
  35. return 0;
  36. }
  37. //获取当前房间是否还有未结算题目
  38. $has_not_settlement_question = RoomQuestion::where("room_id", $this->room_id)->whereNull("end_at")->count();
  39. if($has_not_settlement_question){
  40. echo "当前房间还有未结算题目";
  41. return 0;
  42. }
  43. //获取当前房间题目数
  44. $questions_id = RoomQuestion::where("room_id", $this->room_id)->pluck("question_id");
  45. if(count($questions_id) < 5){
  46. //注册地址
  47. Gateway::$registerAddress = '127.0.0.1:1238';
  48. //获取题目
  49. $question = Question::inRandomOrder()->select('question_id','title')->where("is_released",1)->whereNotIn("question_id", $questions_id)->first();
  50. $options = Option::select('option_id','title')->where("question_id",$question->question_id)->get($question->question_id);
  51. //记录题目
  52. $date = date('Y-m-d H:i:s');
  53. $next_date = date('YmdHis', strtotime("{$date} +10 seconds"));
  54. RoomQuestion::insert([
  55. "room_id" => $this->room_id,
  56. "question_id" => $question->question_id,
  57. "title" => $question->title,
  58. "start_at" => $date,
  59. "created_at" => $date,
  60. "updated_at" => $date,
  61. ]);
  62. //发送题目
  63. $info['question'] = $question;
  64. $info['options'] = $options;
  65. $info['start_at'] = $date;
  66. $info['sequence'] = count($questions_id) + 1;
  67. $message = [
  68. "type" => 'question',
  69. "msg" => "获取题目成功",
  70. "info" => $info,
  71. ];
  72. echo "发送题目到房间 {$this->room_id} \n";
  73. Gateway::sendToGroup($this->room_id, json_encode($message));
  74. //设置下次结算固定时间
  75. $room_list = Redis::rpush("Game_settlement_{$next_date}", $this->room_id);
  76. }
  77. }
  78. }