lip 6 روز پیش
والد
کامیت
29628d5c25
3فایلهای تغییر یافته به همراه112 افزوده شده و 14 حذف شده
  1. 87 6
      app/Console/Commands/Sport.php
  2. 24 7
      app/Console/Commands/SportOdds.php
  3. 1 1
      app/Models/ActivityReward.php

+ 87 - 6
app/Console/Commands/Sport.php

@@ -16,7 +16,8 @@ class Sport extends Command
      *
      * @var string
      */
-    protected $signature = 'sport';
+    protected $signature = 'sport {is_live=0}';
+    protected $is_live = 0;
 
     protected  $short_status = [
             'TBD' => 0,
@@ -56,10 +57,85 @@ class Sport extends Command
     {
         
         $this->info('开始执行统计比赛数据任务...');
-        $this->fixtures();
+        
+        $this->is_live = $this->argument('is_live');
+        if ($this->is_live == 1) {
+            //进行中的赛事,定时更新
+            $this->liveFixtures();
+        } else {
+            //未开始的赛事拉取
+            $this->fixtures();
+        }
+        
         $this->info('结束执行统计比赛数据任务');
     }
+    
+    //更新进行中的赛事
+    public function liveFixtures()
+    {
+        $data = SportClientService::fixtures(['live' => 'all']);
+        $data = $data['response'];
+        $tableData = [];
+        $status = $this->short_status;
+        foreach ($data as $item) {
+            $home_statistics = !empty($item['statistics']) ? $item['statistics'][0]['statistics'] : '';
+            $away_statistics = !empty($item['statistics']) ? $item['statistics'][1]['statistics'] : '';
 
+            $sport_data = [
+                'data_id' => $item['fixture']['id'],
+                'home_team_id' => $item['teams']['home']['id'],
+                'home_team_en' => $item['teams']['home']['name'],
+                'home_team' => lang($item['teams']['home']['name']),
+                'home_team_logo' => $item['teams']['home']['logo'],
+                'guest_team_id' => $item['teams']['away']['id'],
+                'guest_team_en' => $item['teams']['away']['name'],
+                'guest_team' => lang($item['teams']['away']['name']),
+                'guest_team_logo' => $item['teams']['away']['logo'],
+                'half_score' => "{$item['score']['halftime']['home']}-{$item['score']['halftime']['away']}",
+                'rbt' => $item['fixture']['timestamp'],
+                'score' => isset($item['score']['fulltime']) ? "{$item['score']['fulltime']['home']}-{$item['score']['fulltime']['away']}":'-',
+                'league' => lang($item['league']['name']),
+                'league_en' => $item['league']['name'],
+                'state' => $status[$item['fixture']['status']['short']],//比赛状态:0未开始1进行中2已完场3延期4取消
+                'game_time' => $item['fixture']['timestamp'],
+                'status' => 1,
+                'updated_at' => now(),
+                'home_statistics' => $home_statistics,
+                'away_statistics' => $away_statistics,
+            ];
+            $sport_data['score'] = $sport_data['score'] == '-' ? '' : $sport_data['score'];
+            $sport_data['half_score'] = $sport_data['half_score'] == '-' ? '' : $sport_data['half_score'];
+
+            if (!SportModel::where('data_id', $item['fixture']['id'])->exists()) {
+                $sport_data['created_at'] = now();
+                $tableData[] = $sport_data;
+            } 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 ($tableData) {
+            SportModel::insert($tableData);
+        }
+        return $tableData;
+    }
+    
     /**
      * 获取指定日期的所有赛事
      *
@@ -68,12 +144,16 @@ class Sport extends Command
     public function fixtures()
     {
         $date = Carbon::tomorrow()->toDateString();
-        $data = SportClientService::fixtures(['date' => $date]);
+        // $date = '2026-03-28';
+  
+        // $data = SportClientService::odds([
+        //     'fixture' => 1461571,
+        // ]);
+        // file_put_contents("1461571-fixtures.json",json_encode($data));
         // $data = SportClientService::fixtures(['live' => 'all']);
-        // print_r($data);
+
+        $data = SportClientService::fixtures(['date' => $date]);
         
-        // file_put_contents("all_fixtures.json",json_encode($data));
-        // die;
         $data = $data['response'];
         $tableData = [];
         $status = $this->short_status;
@@ -102,6 +182,7 @@ class Sport extends Command
                 'updated_at' => now(),
                 'home_statistics' => $home_statistics,
                 'away_statistics' => $away_statistics,
+                'is_send' => 0,
             ];
             $sport_data['score'] = $sport_data['score'] == '-' ? '' : $sport_data['score'];
             $sport_data['half_score'] = $sport_data['half_score'] == '-' ? '' : $sport_data['half_score'];

+ 24 - 7
app/Console/Commands/SportOdds.php

@@ -41,6 +41,17 @@ class SportOdds extends Command
         'WalkOver' => 4,
         'In Progress' => 1,
     ];        
+    
+    protected $fixture_status = [
+        'First Half' => 1,
+        'First Half, Kick Off' => 1,
+        'Halftime' => 1,
+        'Second Half' => 1,
+        'Second Half, 2nd Half Started' => 1,
+        'Extra Time' => 1,
+        'Break Time' => 1,
+        'Penalty In Progress' => 1,
+    ];        
 
     /**
      * 命令描述
@@ -74,6 +85,8 @@ class SportOdds extends Command
             //直播赔率(获取正在直播的所有赛事的赔率)
             if ($is_live == 1) {
                 $data = SportClientService::oddsLive([]);
+                
+                // file_put_contents("oddsLive.json",json_encode($data));
                 $this->updateOddsLive($data);
             } else {
                 //按照日期获取赔率
@@ -107,15 +120,19 @@ class SportOdds extends Command
                 $long_status = $item['fixture']['status']['long']; 
                 $state = isset($this->long_status[$long_status]) ? $this->long_status[$long_status] : null;
                 $odds = $item['odds'];
+                
+                $fixture_status = null;
+                if (isset($item['fixture']['status']['long']) && isset($this->$fixture_status[$item['fixture']['status']['long']])) {
+                    $fixture_status = json_encode($item['fixture']['status']);
+                }
                 $update_data = [
+                    'state' => $state,
                     'odds' => $odds,
+                    'fixture_status' => $fixture_status,
+                    'score' => isset($item['teams']['home']['goals']) ? "{$item['teams']['home']['goals']}-{$item['teams']['away']['goals']}":'-',
+                    'is_send' => 0,
                 ];
-                if ($state) {
-                    $update_data = [
-                        'state' => $state,
-                        'odds' => $odds,
-                    ];
-                }
+                
                 SportModel::where('data_id',$data_id)->update($update_data);
                 echo $data_id.": 更新成功\r\n";
             }
@@ -128,7 +145,7 @@ class SportOdds extends Command
         if (!empty($data['response'][0]['bookmakers'][0]['bets'])) {
             $odds = $data['response'][0]['bookmakers'][0]['bets'];
             echo "更新成功\r\n";
-            SportModel::where('data_id',$data_id)->update(['odds' => json_encode($odds)]);
+            SportModel::where('data_id',$data_id)->update(['odds' => json_encode($odds), 'is_send' => 0]);
         } else {
             echo "更新失败\r\n";
             file_put_contents('odds-error.log', json_encode($data)."\r\n\r\n", FILE_APPEND);

+ 1 - 1
app/Models/ActivityReward.php

@@ -20,7 +20,7 @@ class ActivityReward extends BaseModel
     const STATUS_DOWN = 0;
 
     protected $table = 'activity_rewards';
-    protected $fillable = ['title', 'sub_title', 'detail_image', 'start_time', 'end_time', 'status','type'];
+    protected $fillable = ['title', 'sub_title', 'detail_image', 'start_time', 'end_time', 'status','type','lang'];
 
     public function activityUser(): HasMany
     {