123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142 |
- <?php
- namespace App\Jobs;
- use Illuminate\Bus\Queueable;
- use Illuminate\Queue\SerializesModels;
- use Illuminate\Queue\InteractsWithQueue;
- use Illuminate\Contracts\Queue\ShouldQueue;
- use Illuminate\Foundation\Bus\Dispatchable;
- use App\Model\User;
- use App\Model\Room;
- use App\Model\RoomUser;
- use App\Model\RoomQuestion;
- use App\Jobs\Distribute;
- use GuzzleHttp\Client;
- use Illuminate\Support\Facades\Redis;
- use GatewayWorker\Lib\Gateway;
- class Settlement implements ShouldQueue
- {
- use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
- protected $room_id; //房间ID
- /**
- * Create a new job instance.
- *
- * @return void
- */
- public function __construct($room_id)
- {
- $this->room_id = $room_id;
- }
- /**
- * Execute the job.
- *
- * @return void
- */
- public function handle()
- {
- //获取当前房间回答情况
- $question_id = RoomQuestion::where("room_id", $this->room_id)->whereNull("end_at")->value("question_id");
- if(!$question_id){
- return 0;
- }
- //获取当前房间获取问题数
- $room_question_count = RoomQuestion::where("room_id", $this->room_id)->count();
- //进行结算
- if($room_question_count > 4){
- //注册gateway地址
- Gateway::$registerAddress = '127.0.0.1:1238';
- //当前房间结束
- $update_data["end_at"] = date("Y-m-d H:i:s");
- Room::where("room_id", $this->room_id)->update($update_data);
- //获取胜利者
- $players = RoomUser::select("user_id","score")->where([
- "room_id" => $this->room_id,
- ])->get();
- $winer = '';
- $winer_score = 0;
- foreach ($players as $k => $player) {
- if($player->score > $winer_score){
- $winer = $player->user_id;
- $winer_score = $player->score;
- }
- }
- //通知卓望平台跟用户端
- foreach ($players as $k => $player) {
- $is_win = 0;
- //获取用户令牌
- $user = User::where("user_id", $player->user_id)->first();
- if($winer == $player->user_id){
- //更新胜利局数
- User::where("user_id", $player->user_id)->increment('win_count', 1);
- $is_win = 1;
- }else{
- User::where("user_id", $player->user_id)->increment('lose_count', 1);
- }
-
- //更新用户在房间的信息
- unset($update_data);
- $update_data['state'] = 2;
- $update_data['is_win'] = $is_win;
- $update_data['updated_at'] = date("Y-m-d H:i:s");
- RoomUser::where([
- "user_id" => $player->user_id,
- "room_id" => $this->room_id,
- ])->update($update_data);
- //非机器人上传游戏得分
- if($user->is_robot != 1){
- $client = new Client([
- 'verify' => false,
- ]);
- $ip = '211.139.191.175';
- $port = '38083';
- $req_time = date('YmdHis');
- $sign = md5($user->cmcc_id . $req_time . $user->mt);
- $params['req_param'] = [
- "pub_info" => [
- "req_src" => 1,
- "ver" => "1.0",
- "req_time" => $req_time,
- "sign" => $sign,
- ],
- "page_info" => [
- "current_page" => 1,
- "page_size" => 10,
- ],
- "busi_info" => [],
- ];
- // $response = $client->request('POST', "http://{$ip}:{$port}/hgs/biz/pktaskresult",[
- // 'form_params' => [
- // 'username' => $user->name,
- // ]
- // ]);
- // $result = $response->getBody()->getContents();
- }
- //测试固定用户信息
- $info['user_id'] = $user->user_id;
- $info['name'] = $user->name;
- $info['avatar'] = $user->avatar;
- $info['is_win'] = $is_win;
- $info['play_next'] = 1;
- //获取用户星力变化等信息返回
- $message['info'] = $info;
- $message['winer'] = $winer;
- $message['winer_score'] = $winer_score;
- $message['type'] = 'game_end';
- Gateway::sendToUid($user->user_id, $message);
- }
- }else{
- //执行发题
- Distribute::dispatch($this->room_id)->onQueue('distribute');
- }
- }
- }
|