lip пре 1 недеља
родитељ
комит
bdf53e8c9b
3 измењених фајлова са 41 додато и 9 уклоњено
  1. 22 6
      app/Console/Commands/SportOdds.php
  2. 10 3
      app/Http/Controllers/admin/Sport.php
  3. 9 0
      app/Models/Sport.php

+ 22 - 6
app/Console/Commands/SportOdds.php

@@ -115,13 +115,18 @@ class SportOdds extends Command
             $data = $data['response'];
             foreach($data as $item) {
                 $data_id = $item['fixture']['id'];
-                $odds = $this->doOdds($item['odds']);
+                $sport_info = SportModel::where('data_id',$data_id)->select('odds','odd_ids_locked')->first();
+                $old_odd_ids_locked = $sport_info['odd_ids_locked'];
+                $odds_data = $this->doOdds($item['odds'], $sport_info['odds']);
+                $odds = $odds_data['odds'];
                 $odds = !empty($odds) ? json_encode($odds) : null;
+                $odd_ids_locked = array_merge($old_odd_ids_locked, $odds_data['odd_ids_locked']);
                 
                 $update_data = [
                     'is_send' => 0,
                     'is_roll' => 1,
                     'is_locked' => 0,
+                    'odd_ids_locked' => array_unique($odd_ids_locked),
                     'odds' => $odds,
                     'error' => 0, //异常类型:0正常;1直播赔率的赛事时异常
                 ];
@@ -129,7 +134,6 @@ class SportOdds extends Command
                 if (isset($item['fixture']['status']['long']) ) {
                     // $long = $item['fixture']['status']['long'];
                     // if (isset($this->fixture_status[$long])) {
-                        
                         $sport_info = SportModel::where('data_id',$data_id)->first();
                         $fixture_status = $sport_info['fixture_status'] ? json_decode($sport_info['fixture_status'],true) : [];
                         
@@ -147,9 +151,7 @@ class SportOdds extends Command
                                 $update_data['error'] = 0;
                             }
                         }
-                        
                     // } 
-                    
                 }
                 
                 //锁盘
@@ -191,13 +193,15 @@ class SportOdds extends Command
     }
 
     //去掉无效的赔率
-    private function doOdds($odds) {
+    private function doOdds($odds, $old_odds) {
         // 1. 获取赔率,缓存数据
         $sport_odds = cache('sport_odds');
         if (!$sport_odds) {
             $sport_odds = SportOddsModel::where('function_name', '<>', null)->get()->toArray();
             Cache::set('sport_odds', $sport_odds, 300); //有效期5分钟
         }
+        $old_odds = $old_odds ? json_decode($old_odds, true) : [];
+        $odds_ids = []; //新的玩法id集合
 
         $sport_odds = array_column($sport_odds, null,'odd_name_en');
         $new_odds = [];
@@ -206,8 +210,20 @@ class SportOdds extends Command
                 continue;
             }
             $new_odds[] = $item;
+            $odds_ids[] = $item['id'];
+        }
+        $odd_ids_locked = [];
+        foreach($old_odds as $item) {
+            if (!in_array($item['id'], $odds_ids)) {
+                $new_odds[] = $item;
+                //历史玩法如果没有了,数据保存,加锁
+                $odd_ids_locked[] = $item['id'];
+            }
         }
-        return $new_odds;
+        return [
+            'odds' => $new_odds,
+            'odd_ids_locked' => $odd_ids_locked,
+        ];
     }
 
 }

+ 10 - 3
app/Http/Controllers/admin/Sport.php

@@ -34,6 +34,7 @@ class Sport extends Controller
                 'start_time' => ['nullable', 'string'],
                 'end_time' => ['nullable', 'string'],
                 'error' => ['nullable', 'integer'],
+                'odds' => ['nullable', 'integer'],
             ]);
             $page = request()->input('page', 1);
             $limit = request()->input('limit', 15);
@@ -74,6 +75,13 @@ class Sport extends Controller
                 $query = $query->where('error', $params['error']);
                 $order = 'desc';
             }
+            if (isset($params['odds'])) {
+                if ($params['odds'] == 1) {
+                    $query = $query->whereNotNull('odds');
+                } elseif ($params['odds'] == 0) {
+                    $query = $query->whereNull('odds');
+                }
+            }
 
             $count = $query->count();
             $list = $query
@@ -114,9 +122,8 @@ class Sport extends Controller
             $info['rbt'] = date('Y-m-d H:i:s', $info['rbt']);
             $info['fixture_status'] = json_decode($info['fixture_status'], true);
             $info['odds'] = $info['odds'] ? json_decode($info['odds'], true) : null;
-            $info['odds'] = $info['odds'] ? SportModel::doOdds($info['odds']) : null;
+            $info['odds'] = $info['odds'] ? SportModel::doOdds($info['odds'], $info['odd_values_locked']) : null;
             $info['event'] = SportEvent::where('data_id', $info['data_id'])->get();
-            $info['odd_ids_locked'] = $info['odd_ids_locked'] ? json_decode($info['odd_ids_locked'], true) : [];
 
             $info['home_team'] = SportTeam::getTeamName($info['home_team_id']) ?? $info['home_team_en'];
             $info['guest_team'] = SportTeam::getTeamName($info['guest_team_id']) ?? $info['guest_team_en'];
@@ -169,7 +176,7 @@ class Sport extends Controller
             $info = SportModel::where('id', $id)->first();
             if (!$info) throw new Exception('赛事不存在');
 
-            $odd_ids_locked = $info->odd_ids_locked ? json_decode($info->odd_ids_locked, true) : [];
+            $odd_ids_locked = $info->odd_ids_locked;
             if (empty($params['odd_id'])) {
                 if (empty($odd_ids_locked) && !empty($info->odds)) {
                     $odds = json_decode($info->odds, true);

+ 9 - 0
app/Models/Sport.php

@@ -150,4 +150,13 @@ class Sport extends BaseModel
         }
         return '';
     }
+
+    protected function getOddValuesLockedAttribute($value): string
+    {
+        return $value ? json_decode($value, true) : [];
+    }
+    protected function getOddIdsLockedAttribute($value): string
+    {
+        return $value ? json_decode($value, true) : [];
+    }
 }