| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- <?php
- namespace App\Services;
- use App\Services\BaseService;
- use App\Models\Timezone;
- use App\Models\Country;
- use App\Models\League;
- class SyncFootballDataService extends BaseService
- {
- // 同步时区数据
- public static function syncTimezone()
- {
- $result = app('api-football')->timezone();
- $response = $result['response'] ?? [];
-
- if (empty($response)) {
- return $result;
- }
- // 先将所有时区设为无效
- Timezone::query()->update(['status' => Timezone::STATUS_NO]);
-
- foreach ($response as $code) {
- // 使用 firstOrCreate 简化代码
- $timezone = Timezone::firstOrCreate(
- ['code' => $code],
- [
- 'code' => $code,
- 'status' => Timezone::STATUS_YES
- ]
- );
-
- // 如果已存在,更新状态
- if (!$timezone->wasRecentlyCreated) {
- $timezone->update(['status' => Timezone::STATUS_YES]);
- }
- }
- return $result;
- }
- // 同步国家/地区数据
- public static function syncCountry()
- {
- $result = app('api-football')->countries();
- $response = $result['response'] ?? [];
-
- if (empty($response)) {
- return $result;
- }
- // 先将所有国家/地区设为无效
- Country::query()->update(['status' => Country::STATUS_NO]);
- foreach ($response as $item) {
- // 使用 firstOrCreate 简化代码
- $country = Country::firstOrCreate(
- ['name' => $item['name']],
- [
- 'name' => $item['name'],
- 'code' => $item['code'],
- 'flag' => $item['flag'],
- 'status' => Country::STATUS_YES
- ]
- );
-
- // 如果已存在,更新状态和其他字段
- if (!$country->wasRecentlyCreated) {
- $country->update([
- 'code' => $item['code'],
- 'flag' => $item['flag'],
- 'status' => Country::STATUS_YES
- ]);
- }
- }
-
- return $result;
- }
- public static function syncLeagues($params = [])
- {
- $result = app('api-football')->leagues($params);
- // $result = json_decode(file_get_contents(storage_path('logs/leagues.log')), true);
- $response = $result['response'] ?? [];
-
- if (empty($response)) {
- return $result;
- }
- // // 先将所有联赛设为无效
- // League::query()->update(['status' => League::STATUS_NO]);
- foreach ($response as $item) {
- $is_active = League::IS_ACTIVE_NOT;
- foreach ($item['seasons'] as $season) {
- // 处理赛季数据
- if ($season['current']) {
- $is_active = League::IS_ACTIVE_YES;
- }
- }
- // 使用 updateOrCreate 简化代码
- $league = League::updateOrCreate(
- ['league_id' => $item['league']['id']],
- [
- 'name' => $item['league']['name'],
- 'type' => $item['league']['type'],
- 'logo' => $item['league']['logo'],
- 'country_name' => $item['country']['name'],
- 'country_code' => $item['country']['code'],
- 'country_flag' => $item['country']['flag'],
- 'seasons' => json_encode($item['seasons'] ?? []),
- 'is_active' => $is_active,
- 'last_synced_at' => now(),
- ]
- );
-
- // // 如果已存在,更新状态和其他字段
- // if (!$league->wasRecentlyCreated) {
- // $league->update([
- // 'name' => $item['league']['name'],
- // 'type' => $item['league']['type'],
- // 'logo' => $item['league']['logo'],
- // 'country_name' => $item['country']['name'],
- // 'country_code' => $item['country']['code'],
- // 'country_flag' => $item['country']['flag'],
- // 'seasons' => json_encode($item['seasons'] ?? []),
- // 'is_active' => $is_active,
- // ]);
- // }
- }
-
- return $result;
- }
- }
|