|
|
@@ -41,6 +41,40 @@ class Sport extends Command
|
|
|
'WO' => 4,
|
|
|
'LIVE' => 1,
|
|
|
];
|
|
|
+ protected $long_status = [
|
|
|
+ 'Time To Be Defined' => 0,
|
|
|
+ 'Not Started' => 0,
|
|
|
+ '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,
|
|
|
+ 'Match Suspended' => 1,
|
|
|
+ 'Match Interrupted' => 1,
|
|
|
+ 'Match Finished' => 2,
|
|
|
+ 'Match Finished' => 2,
|
|
|
+ 'Match Finished' => 2,
|
|
|
+ 'Match Postponed' => 3,
|
|
|
+ 'Match Cancelled' => 4,
|
|
|
+ 'Match Abandoned' => 4,
|
|
|
+ 'Technical Loss' => 4,
|
|
|
+ '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,
|
|
|
+ ];
|
|
|
|
|
|
|
|
|
/**
|
|
|
@@ -56,35 +90,57 @@ class Sport extends Command
|
|
|
*/
|
|
|
public function handle()
|
|
|
{
|
|
|
- // $data = SportClientService::odds([
|
|
|
- // 'fixture' => 1517485,
|
|
|
- // ]);
|
|
|
-
|
|
|
-
|
|
|
- // $data = SportClientService::oddsLive();
|
|
|
- // // file_put_contents("1517485.json", json_encode($data));
|
|
|
- // print_r($data);
|
|
|
- // die;
|
|
|
-
|
|
|
- $this->info('开始执行统计比赛数据任务...');
|
|
|
-
|
|
|
+ // $this->info('开始执行统计比赛数据任务...');
|
|
|
$this->is_live = $this->argument('is_live');
|
|
|
if ($this->is_live == 1) {
|
|
|
//进行中的赛事,定时更新
|
|
|
$this->liveFixtures();
|
|
|
- } else {
|
|
|
+ } elseif ($this->is_live == 0) {
|
|
|
//未开始的赛事拉取
|
|
|
$this->fixtures();
|
|
|
- }
|
|
|
+ } elseif ($this->is_live == 2){
|
|
|
+ // $data = SportClientService::fixtures([
|
|
|
+ // 'id' => 1534923,
|
|
|
+ // ]);
|
|
|
+ // $data = SportClientService::fixtures(['live' => 'all']);
|
|
|
+ // // $data = SportClientService::oddsLive();
|
|
|
+ // file_put_contents("1534923.json", json_encode($data));
|
|
|
+ // print_r($data);
|
|
|
+ // die;
|
|
|
+
|
|
|
+ $this->checkLiveFixtures();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //进行中超过3分钟没有更新数据的赛事,检查比赛是否结束
|
|
|
+ public function checkLiveFixtures()
|
|
|
+ {
|
|
|
+ //体育赛事结束前几(分钟)锁盘,90分钟结束
|
|
|
+ $sport_locked = Config::where('field', 'sport_locked')->first()->val ?? 1;
|
|
|
+
|
|
|
+ $end_time = date("Y-m-d H:i:s", time() - 180);
|
|
|
+
|
|
|
+ $ids = SportModel::where('status', 1)->where('state', 1)->where('updated_at', '<=', $end_time)->pluck('data_id')->toArray();
|
|
|
+ $ids = implode('-', $ids);
|
|
|
|
|
|
- $this->info('结束执行统计比赛数据任务');
|
|
|
+ echo $end_time."\r\n";
|
|
|
+ echo $ids;
|
|
|
+ $data = SportClientService::fixtures(['ids' => $ids]);
|
|
|
+ $this->updateOrCreateSport($data, $sport_locked, 1);
|
|
|
}
|
|
|
|
|
|
//更新进行中的赛事
|
|
|
public function liveFixtures()
|
|
|
{
|
|
|
+ //体育赛事结束前几(分钟)锁盘,90分钟结束
|
|
|
+ $sport_locked = Config::where('field', 'sport_locked')->first()->val ?? 1;
|
|
|
$data = SportClientService::fixtures(['live' => 'all']);
|
|
|
file_put_contents("fixturesLive.json", json_encode($data));
|
|
|
+ $this->updateOrCreateSport($data, $sport_locked);
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ private function updateOrCreateSport($data, $sport_locked, $is_check = 0) {
|
|
|
$data = $data['response'];
|
|
|
$tableData = [];
|
|
|
$status = $this->short_status;
|
|
|
@@ -104,7 +160,7 @@ class Sport extends Command
|
|
|
'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']}":'-',
|
|
|
+ 'score' => isset($item['goals']) ? "{$item['goals']['home']}-{$item['goals']['away']}":'-',
|
|
|
'extra_score' => isset($item['score']['extratime']) ? "{$item['score']['extratime']['home']}-{$item['score']['extratime']['away']}" : "",//加时赛比分
|
|
|
'league' => lang($item['league']['name']),
|
|
|
'league_en' => $item['league']['name'],
|
|
|
@@ -113,7 +169,28 @@ class Sport extends Command
|
|
|
'updated_at' => now(),
|
|
|
'home_statistics' => $home_statistics,
|
|
|
'away_statistics' => $away_statistics,
|
|
|
+ 'is_send' => 0,
|
|
|
];
|
|
|
+
|
|
|
+ $fixture_status = null;
|
|
|
+ if (isset($item['fixture']['status']['long']) ) {
|
|
|
+ $long = $item['fixture']['status']['long'];
|
|
|
+ if (isset($this->fixture_status[$long])) {
|
|
|
+ $fixture_status = json_encode($item['fixture']['status']);
|
|
|
+ $sport_data['fixture_status'] = $fixture_status;
|
|
|
+ }
|
|
|
+ if (isset($this->long_status[$long])) {
|
|
|
+ $sport_data['state'] = $this->long_status[$long];
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //提前锁盘(比赛进行时长,分钟)
|
|
|
+ if (isset($item['fixture']['status']['elapsed'])) {
|
|
|
+ $elapsed = $item['fixture']['status']['elapsed'];
|
|
|
+ if ((int)$elapsed >= 90 - $sport_locked ) {
|
|
|
+ $sport_data['is_locked'] = 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
$sport_data['score'] = $sport_data['score'] == '-' ? '' : $sport_data['score'];
|
|
|
$sport_data['half_score'] = $sport_data['half_score'] == '-' ? '' : $sport_data['half_score'];
|
|
|
$sport_data['extra_score'] = $sport_data['extra_score'] == '-' ? '' : $sport_data['extra_score'];
|
|
|
@@ -126,12 +203,18 @@ class Sport extends Command
|
|
|
if (isset($item['fixture']['status']['finished']) && $item['fixture']['status']['finished']) {
|
|
|
$sport_data['state'] = 2;
|
|
|
}
|
|
|
-
|
|
|
- if (!SportModel::where('data_id', $item['fixture']['id'])->exists()) {
|
|
|
+
|
|
|
+ $info = SportModel::where('data_id', $item['fixture']['id'])->first();
|
|
|
+ if (!$info) {
|
|
|
$sport_data['created_at'] = now();
|
|
|
$sport_data['status'] = 1;
|
|
|
$tableData[] = $sport_data;
|
|
|
} else {
|
|
|
+ //比赛开始前一分钟,锁盘
|
|
|
+ if ($info->is_locked == 0 && $info->is_roll == 0 && $info->game_time < time() - 60) {
|
|
|
+ $sport_data['is_locked'] = 1;
|
|
|
+ }
|
|
|
+
|
|
|
SportModel::where('data_id', $item['fixture']['id'])->update($sport_data);
|
|
|
}
|
|
|
//比赛结束,插入比赛事件
|
|
|
@@ -149,13 +232,12 @@ class Sport extends Command
|
|
|
'assist' => $event['assist'] ? json_encode($event['assist']) : $event['assist'],
|
|
|
]);
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
if ($tableData) {
|
|
|
SportModel::insert($tableData);
|
|
|
}
|
|
|
- return $tableData;
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -238,8 +320,6 @@ class Sport extends Command
|
|
|
|
|
|
return true;
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
public function initOdds(){
|
|
|
$page = 1;
|
|
|
$limit = 10;
|