Settlement.php 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  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 App\Model\User;
  9. use App\Model\Room;
  10. use App\Model\RoomUser;
  11. use App\Model\RoomQuestion;
  12. use App\Jobs\Distribute;
  13. use GuzzleHttp\Client;
  14. use Illuminate\Support\Facades\Redis;
  15. use GatewayWorker\Lib\Gateway;
  16. class Settlement implements ShouldQueue
  17. {
  18. use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
  19. protected $room_id; //房间ID
  20. /**
  21. * Create a new job instance.
  22. *
  23. * @return void
  24. */
  25. public function __construct($room_id)
  26. {
  27. $this->room_id = $room_id;
  28. }
  29. /**
  30. * Execute the job.
  31. *
  32. * @return void
  33. */
  34. public function handle()
  35. {
  36. //获取当前房间回答情况
  37. $question_id = RoomQuestion::where("room_id", $this->room_id)->whereNull("end_at")->value("question_id");
  38. if(!$question_id){
  39. return 0;
  40. }
  41. //获取当前房间获取问题数
  42. $room_question_count = RoomQuestion::where("room_id", $this->room_id)->count();
  43. //进行结算
  44. if($room_question_count > 4){
  45. //注册gateway地址
  46. Gateway::$registerAddress = '127.0.0.1:1238';
  47. //当前房间结束
  48. $update_data["end_at"] = date("Y-m-d H:i:s");
  49. Room::where("room_id", $this->room_id)->update($update_data);
  50. //获取胜利者
  51. $players = RoomUser::select("user_id","score")->where([
  52. "room_id" => $this->room_id,
  53. ])->get();
  54. $winer = '';
  55. $winer_score = 0;
  56. foreach ($players as $k => $player) {
  57. if($player->score > $winer_score){
  58. $winer = $player->user_id;
  59. $winer_score = $player->score;
  60. }
  61. }
  62. //通知卓望平台跟用户端
  63. foreach ($players as $k => $player) {
  64. $is_win = 0;
  65. //获取用户令牌
  66. $user = User::where("user_id", $player->user_id)->first();
  67. if($winer == $player->user_id){
  68. //更新胜利局数
  69. User::where("user_id", $player->user_id)->increment('win_count', 1);
  70. $is_win = 1;
  71. }else{
  72. User::where("user_id", $player->user_id)->increment('lose_count', 1);
  73. }
  74. //更新用户在房间的信息
  75. unset($update_data);
  76. $update_data['state'] = 2;
  77. $update_data['is_win'] = $is_win;
  78. $update_data['updated_at'] = date("Y-m-d H:i:s");
  79. RoomUser::where([
  80. "user_id" => $player->user_id,
  81. "room_id" => $this->room_id,
  82. ])->update($update_data);
  83. //非机器人上传游戏得分
  84. if($user->is_robot != 1){
  85. $client = new Client([
  86. 'verify' => false,
  87. ]);
  88. $ip = '211.139.191.175';
  89. $port = '38083';
  90. $req_time = date('YmdHis');
  91. $sign = md5($user->cmcc_id . $req_time . $user->mt);
  92. $params['req_param'] = [
  93. "pub_info" => [
  94. "req_src" => 1,
  95. "ver" => "1.0",
  96. "req_time" => $req_time,
  97. "sign" => $sign,
  98. ],
  99. "page_info" => [
  100. "current_page" => 1,
  101. "page_size" => 10,
  102. ],
  103. "busi_info" => [],
  104. ];
  105. // $response = $client->request('POST', "http://{$ip}:{$port}/hgs/biz/pktaskresult",[
  106. // 'form_params' => [
  107. // 'username' => $user->name,
  108. // ]
  109. // ]);
  110. // $result = $response->getBody()->getContents();
  111. }
  112. //测试固定用户信息
  113. $info['user_id'] = $user->user_id;
  114. $info['name'] = $user->name;
  115. $info['avatar'] = $user->avatar;
  116. $info['is_win'] = $is_win;
  117. $info['play_next'] = 1;
  118. //获取用户星力变化等信息返回
  119. $message['info'] = $info;
  120. $message['winer'] = $winer;
  121. $message['winer_score'] = $winer_score;
  122. $message['type'] = 'game_end';
  123. Gateway::sendToUid($user->user_id, $message);
  124. }
  125. }else{
  126. //执行发题
  127. Distribute::dispatch($this->room_id)->onQueue('distribute');
  128. }
  129. }
  130. }