郑晓宇 6 vuotta sitten
vanhempi
commit
54b657aad9

+ 56 - 2
app/Home/Controllers/IndexController.php

@@ -9,6 +9,8 @@ use App\Model\Option;
 use App\Jobs\Robot;
 use GuzzleHttp\Client;
 use GuzzleHttp\Cookie\CookieJar;
+use Illuminate\Http\Request;
+
 class IndexController extends Controller
 {
 	public function importTimu1()
@@ -185,9 +187,61 @@ class IndexController extends Controller
     /**
      * 测试加入队列
      */
-    public function putJob()
+    public function putJob(Request $request)
     {
-        dump(Robot::dispatch()->onQueue('robot'));
+        $cmcc_id = $request->input('user_id');
+        $mt = $request->input('mt');
+        //请求用户信息
+        $client = new Client([
+            'verify' => false,
+        ]);
+        $ip = '211.139.191.175';
+        $port = '38083';
+        $req_time = date('YmdHis');
+        $sign = md5($cmcc_id . $req_time . $mt);
+        $params['req_param'] = [
+            "pub_info" => [
+                "req_src" => "1",
+                "ver" => "1.0",
+                "mt" => $mt,
+                "user_id" => $cmcc_id,
+                "req_time" => $req_time,
+                "sign" => $sign,
+            ],
+            "page_info" => [
+                // "current_page" => 1,
+                // "page_size" => 10,
+            ],
+            "busi_info" => [
+                "pk_result" => [
+                    [
+                        "robot_flag" => 0,
+                        "user_id" => $cmcc_id,
+                        "score" => 230,
+                    ],
+                    [
+                        "robot_flag" => 1,
+                        "user_id" => "",
+                        "score" => 230,
+                    ],
+                ]
+            ],
+        ];
+        $result = $client->request('POST', "http://{$ip}:{$port}/hgs/uc/pktaskresult",[
+            'json' => $params
+        ]);
+
+        $cmcc_user = json_decode($result->getBody()->getContents());
+        dump($cmcc_user);exit;
+        if($cmcc_user->rsp_param->pub_info->code != "0000"){
+            $response = [];
+            $response['code'] = 400;
+            $response['msg'] = '请求接口返回信息错误';
+            return response()->json($response);
+        }
+        dump($cmcc_user);
+
+        // dump(Robot::dispatch()->onQueue('robot'));
     }
 
     /**

+ 60 - 41
app/Home/Controllers/UserController.php

@@ -19,7 +19,7 @@ class UserController extends Controller
      */
     public function Info(Request $request)
     {
-        $cmcc_id = urldecode($request->input('user_id'));
+        $cmcc_id = $request->input('user_id');
         $mt = $request->input('mt');
         if(!$cmcc_id || !$mt){
             $response['code'] = 400;
@@ -27,46 +27,59 @@ class UserController extends Controller
             return response()->json($response);
         }
 
-        //获取当前系统是否存在
-        $user = User::select('user_id', 'avatar', 'name', 'win_count', 'lose_count')->where("cmcc_id", $cmcc_id)->orWhere("user_id", $cmcc_id)->first();
-        if(!$user){
-            //请求用户信息
-            $client = new Client([
-                'verify' => false,
-            ]);
-            $ip = '211.139.191.175';
-            $port = '38083';
-            $req_time = date('YmdHis');
-            $sign = md5($cmcc_id . $req_time . $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/uc/queryusergameinfo",[
-            //     'form_params' => [
-            //         'username' => $user->name,
-            //     ]
-            // ]);
-            // $cmcc_user = $response->getBody()->getContents();
+        //请求用户信息
+        $client = new Client([
+            'verify' => false,
+        ]);
+        $ip = '211.139.191.175';
+        $port = '38083';
+        $req_time = date('YmdHis');
+        $sign = md5($cmcc_id . $req_time . $mt);
+        $params['req_param'] = [
+            "pub_info" => [
+                "req_src" => "1",
+                "ver" => "1.0",
+                "mt" => $mt,
+                "user_id" => $cmcc_id,
+                "req_time" => $req_time,
+                "sign" => $sign,
+            ],
+            "page_info" => [],
+            "busi_info" => [],
+        ];
+        $result = $client->request('POST', "http://{$ip}:{$port}/hgs/uc/queryusergameinfo",[
+            'json' => $params
+        ]);
 
-            //判断请求结果 todo ...
+        if($result->getStatusCode() != 200){
+            $response['code'] = 400;
+            $response['msg'] = '请求远程接口错误';
+            return response()->json($response);
+        }
+
+        $cmcc_user = json_decode($result->getBody()->getContents());
+        if($cmcc_user->rsp_param->pub_info->code != "0000"){
+            $response['code'] = 400;
+            $response['msg'] = '用户信息错误';
+            return response()->json($response);
+        }
 
+        //是否存在用户
+        $has_user = User::where("cmcc_id", $cmcc_id)->count();
+        if($has_user){
+            //更新信息
+            $update_data['name'] = $cmcc_user->busi_info->user->name;
+            $update_data['avatar'] = $cmcc_user->busi_info->user->portrait_url;
+            $update_data['mt'] = $mt;
+            User::where("cmcc_id", $cmcc_id)->update($update_data);
+        }else{
             //记录用户信息
             $date = date("Y-m-d H:i:s");
             $user_id = User::insertGetId([
-                "name" => $cmcc_id,
-                "avatar" => "https://picsum.photos/200/200/?image=". rand(1, 300),
+                "name" => $cmcc_user->busi_info->user->name,
+                "avatar" => $cmcc_user->busi_info->user->portrait_url,
                 "cmcc_id" => $cmcc_id,
-                "mt" => $cmcc_id,
+                "mt" => $mt,
                 "win_count" => 0,
                 "lose_count" => 0,
                 "is_login" => 0,
@@ -74,22 +87,28 @@ class UserController extends Controller
                 "created_at" => $date,
                 "updated_at" => $date,
             ]);
-            $user = User::select('user_id', 'avatar', 'name', 'win_count', 'lose_count')->where("cmcc_id", $cmcc_id)->first();
-        }     
+        }
+
+        //重新获取用户信息
+        $user = User::select('user_id', 'avatar', 'name', 'win_count', 'lose_count')->where("cmcc_id", $cmcc_id)->orWhere("user_id", $cmcc_id)->first();
+        if(!$user){
+            $response['code'] = 400;
+            $response['msg'] = '获取用户信息错误,请联系管理员';
+            return response()->json($response);
+        }
 
         if($user->win_count == 0 || ($user->win_count == 0 && $user->lose_count == 0)){
             $win_rate = 0;
         }else{
             $win_rate = $user->win_count / ($user->win_count + $user->lose_count);
         }
-
-        //测试固定用户信息
+        //用户信息
         $info['user_id'] = $user->user_id;
         $info['name'] = $user->name;
         $info['avatar'] = $user->avatar;
         $info['win_rate'] = round($win_rate, 2) * 100;
-        $info['play_next'] = 1;
-
+        $info['play_next'] = $cmcc_user->busi_info->user->play_next
+        ,
         //设置session
         $request->session()->put('user_id', $user->user_id);
         $response['code'] = 0;

+ 68 - 36
app/Jobs/Settlement.php

@@ -15,8 +15,10 @@ use App\Model\RoomAnswer;
 use App\Model\RoomQuestion;
 use App\Jobs\Distribute;
 use GuzzleHttp\Client;
+use GuzzleHttp\Cookie\CookieJar;
 use Illuminate\Support\Facades\Redis;
 use GatewayWorker\Lib\Gateway;
+use Illuminate\Support\Facades\Log;
 
 class Settlement implements ShouldQueue
 {
@@ -86,16 +88,71 @@ class Settlement implements ShouldQueue
             ])->get();
             $winer = '';
             $winer_score = 0;
+            $pkresult = [];
             foreach ($players as $k => $player) {
                 if($player->score > $winer_score){
                     $winer = $player->user_id;
                     $winer_score = $player->score;
                 }
+                $user = User::select("user_id", "cmcc_id", "mt", "is_robot")->where("user_id", $player->user_id)->first();
+                if($user->is_robot != 1){
+                    $mt = $user->mt;
+                    $cmcc_id = $user->cmcc_id;
+                }
+                $pkresult[] = [
+                    "robot_flag" => $user->is_robot,
+                    "user_id" => $user->cmcc_id,
+                    "score" => $player->score,
+                ];
             }
-            //通知卓望平台跟用户端
+            //通知平台
+            $user_power = [];
+            if($mt){
+                //上传用户游戏信息
+                $client = new Client([
+                    'verify' => false,
+                ]);
+                $ip = '211.139.191.175';
+                $port = '38083';
+                $req_time = date('YmdHis');
+                $sign = md5($cmcc_id . $req_time . $mt);
+                $params['req_param'] = [
+                    "pub_info" => [
+                        "req_src" => "1",
+                        "ver" => "1.0",
+                        "mt" => $mt,
+                        "user_id" => $cmcc_id,
+                        "req_time" => $req_time,
+                        "sign" => $sign,
+                    ],
+                    "page_info" => [
+                        // "current_page" => 1,
+                        // "page_size" => 10,
+                    ],
+                    "busi_info" => [
+                        "pk_result" => $pktaskresult
+                    ],
+                ];
+
+                Log::info("通知平台放请求信息: \n ". json_encode($params) ."\n");
+
+                $result = $client->request('POST', "http://{$ip}:{$port}/hgs/uc/pktaskresult",[
+                    'json' => $params
+                ]);
+
+                if($result->getStatusCode() == 200){
+                    $cmcc_result = json_decode($result->getBody()->getContents());
+                    if($cmcc_user->rsp_param->pub_info->code == "0000"){
+                        $user_power = $cmcc_result->rsp_param->busi_info->user_power;
+                    }
+                }
+                
+                Log::info("平台返回信息: \n ". json_encode($cmcc_result) ."\n");
+            }
+
+            //给用户发送信息
             foreach ($players as $k => $player) {
                 $is_win = 0;
-                //获取用户令牌
                 $user = User::where("user_id", $player->user_id)->first();
                 if($winer == $player->user_id){
                     //更新胜利局数
@@ -115,42 +172,19 @@ class Settlement implements ShouldQueue
                     "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;
+                $info['play_next'] = 0;
+                $info['power_change'] = 0;
+                foreach ($user_power as $k => $up) {
+                    if(isset($up->user_id) && $up->user_id == $user->cmcc_id){
+                        $info['play_next'] = $up->play_next;
+                        $info['power_change'] = $up->power_change;
+                    }
+                }
 
                 //获取用户星力变化等信息返回
                 $message['info'] = $info;
@@ -158,8 +192,6 @@ class Settlement implements ShouldQueue
                 $message['winer_score'] = $winer_score;
                 $message['type'] = 'game_end';
                 Gateway::sendToUid($user->user_id, json_encode($message));
-                //结束当前房间
-                // Gateway::ungroup($this->room_id);
             }
         }else{
             sleep(3);