lip 1 неделя назад
Родитель
Сommit
9e51697af0
3 измененных файлов с 115 добавлено и 14 удалено
  1. 100 14
      app/Console/Commands/Sport.php
  2. 9 0
      app/Models/SportStatistics.php
  3. 6 0
      app/Services/SportClientService.php

+ 100 - 14
app/Console/Commands/Sport.php

@@ -6,6 +6,7 @@ use Illuminate\Console\Command;
 use App\Models\Sport as SportModel;
 use App\Models\SportTeam;
 use App\Models\SportLeague;
+use App\Models\SportStatistics;
 use App\Services\SportClientService;
 use Carbon\Carbon;
 use Illuminate\Support\Facades\DB;
@@ -243,20 +244,21 @@ class Sport extends Command
             } else {
                 SportModel::where('data_id', $item['fixture']['id'])->update($sport_data);
             }
-            //比赛结束,插入比赛事件
-            if ($sport_data['state'] == 2 && !empty($item['events'])) {
-                foreach($item['events'] as $event) {
-                    SportEvent::create([
-                        'data_id' => $item['fixture']['id'],
-                        'type' => $event['type'],
-                        'time_elapsed' => $event['time']['elapsed'],
-                        'time' => json_encode($event['time']),
-                        'detail' => $event['detail'],
-                        'player' => $event['player'] ? json_encode($event['player']) : $event['player'],
-                        'team_id' => $event['team']['id'],
-                        'comments' => $event['comments'],
-                        'assist' => $event['assist'] ? json_encode($event['assist']) : $event['assist'],
-                    ]);
+
+            if ($sport_data['state'] == 2 ) {
+                $data_id = $item['fixture']['id'];
+                //比赛结束,插入比赛事件
+                if (!empty($item['events'])) {
+                    $this->insertSportEvents($data_id, $item['events']);
+                }
+                //比赛结束,插入比赛事件
+                if (!empty($item['statistics'])) {
+                    $this->insertSportStatistics($data_id, $item['statistics']);
+                } else {
+                    $data = SportClientService::statistics(['fixture' => $data_id]);
+                    file_put_contents("fixturesStatistics.json", json_encode($data));
+                    $statistics = empty($data['response'][0]['statistics']) ? [] : $data['response'][0]['statistics'];
+                    $this->insertSportStatistics($data_id, $statistics);
                 }
             }
         }
@@ -399,4 +401,88 @@ class Sport extends Command
         SportModel::where('status', 1)->where('state', 1)->where('game_time', '<=', time() - 60*60*3)->where('updated_at', '<=', $end_time)->update(['state' =>2]);
         return true;
     }
+
+    //插入比赛事件数据
+    public function insertSportEvents($data_id, $events)
+    { 
+        foreach($events as $event) {
+            SportEvent::create([
+                'data_id' => $data_id,
+                'type' => $event['type'],
+                'time_elapsed' => $event['time']['elapsed'],
+                'time' => json_encode($event['time']),
+                'detail' => $event['detail'],
+                'player' => $event['player'] ? json_encode($event['player']) : $event['player'],
+                'team_id' => $event['team']['id'],
+                'comments' => $event['comments'],
+                'assist' => $event['assist'] ? json_encode($event['assist']) : $event['assist'],
+            ]);
+        }
+    }
+
+    //插入比赛统计数据
+    public function insertSportStatistics($data_id, $statistics)
+    { 
+        $insertData = [];
+        foreach($statistics as $item) {
+            if (!empty($item['type'])) {
+                switch ($item['type']) {
+                    case 'Shots on Goal':
+                        $insertData['shots_on_goal'] = $item['value'];
+                        break;
+                    case 'Shots off Goal':
+                        $insertData['shots_off_goal'] = $item['value'];
+                        break;
+                    case 'Shots insidebox':
+                        $insertData['shots_insidebox'] = $item['value'];
+                        break;
+                    case 'Shots outsidebox':
+                        $insertData['shots_outsidebox'] = $item['value'];
+                        break;
+                    case 'Total Shots':
+                        $insertData['total_shots'] = $item['value'];
+                        break;
+                    case 'Blocked Shots':
+                        $insertData['blocked_shots'] = $item['value'];
+                        break;
+                    case 'Fouls':
+                        $insertData['fouls'] = $item['value'];
+                        break;
+                    case 'Corner Kicks':
+                        $insertData['corner_kicks'] = $item['value'];
+                        break;
+                    case 'Offsides':
+                        $insertData['offsides'] = $item['value'];
+                        break;
+                    case 'Ball Possession':
+                        $insertData['ball_possession'] = $item['value'];
+                        break;
+                    case 'Yellow Cards':
+                        $insertData['yellow_cards'] = $item['value'];
+                        break;
+                    case 'Red Cards':
+                        $insertData['red_cards'] = $item['value'];
+                        break;
+                    case 'Goalkeeper Saves':
+                        $insertData['goalkeeper_saves'] = $item['value'];
+                        break;
+                    case 'Total passes':
+                        $insertData['total_passes'] = $item['value'];
+                        break;
+                    case 'Passes accurate':
+                        $insertData['passes_accurate'] = $item['value'];
+                        break;
+                    case 'Passes %':
+                        $insertData['passes_percent'] = $item['value'];
+                        break;
+                    default:
+                        break;
+                }
+            }
+            if ($insertData) {
+                $insertData['data_id'] = $data_id;
+                SportStatistics::create($insertData);
+            }
+        }
+    }
 }

+ 9 - 0
app/Models/SportStatistics.php

@@ -0,0 +1,9 @@
+<?php
+
+namespace App\Models;
+
+class SportStatistics extends BaseModel
+{
+    protected $table = 'sport_statistics';
+    protected $fillable = ['data_id', 'shots_on_goal', 'shots_off_goal', 'shots_insidebox', 'shots_outsidebox', 'total_shots', 'blocked_shots', 'fouls', 'corner_kicks', 'offsides', 'ball_possession', 'yellow_cards', 'red_cards', 'goalkeeper_saves', 'total_passes', 'passes_accurate', 'passes_percent'];
+}

+ 6 - 0
app/Services/SportClientService.php

@@ -89,4 +89,10 @@ class SportClientService
     {
         return self::get('fixtures', $params);
     }
+
+    //赛事统计数据
+    public static function statistics($params = [])
+    {
+        return self::get('statistics', $params);
+    }
 }