FixtureService.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <?php
  2. namespace App\Services;
  3. use App\Models\Sport;
  4. use App\Services\ApiFootball\Client;
  5. use Carbon\Carbon;
  6. class FixtureService extends BaseService
  7. {
  8. /**
  9. * 将进行中的赛事 更新赔率
  10. * 5秒更新一次
  11. * @return void
  12. */
  13. static function updateOdds()
  14. {
  15. $list = Client::oddsLive();
  16. foreach ($list['response'] as $item) {
  17. $sport = Sport::where('data_id', $item['fixture']['id'])->first();
  18. $sport->odds = json_encode($item['odds']);
  19. $sport->state = 1;
  20. $score = $item['teams']['home']['goals'];
  21. $score .= "-";
  22. $score .= $item['teams']['away']['goals'];
  23. if ($item['fixture']['status']['long'] == 'First Half') {
  24. $sport->half_score = $score;
  25. }
  26. $sport->score = $score;
  27. $sport->save();
  28. }
  29. }
  30. /**
  31. * 将第二天的赛事插入到数据库
  32. * @return array
  33. */
  34. static function index()
  35. {
  36. $date = Carbon::tomorrow()->toDateString();
  37. $data = Client::fixtures(['date' => $date]);
  38. $data = $data['response'];
  39. $tableData = [];
  40. $status = ['NS' => 0, '1H' => 1, 'HT' => 1, '2H' => 1, 'ET' => 1, 'BT' => 1, 'P' => 1, 'SUSP' => 1, 'INT' => 1, 'LIVE' => 1, 'FT' => 2, 'AET' => 2, 'PEN' => 2, 'PST' => 3, 'CANC' => 4, 'ABD' => 4,];
  41. foreach ($data as $item) {
  42. if (!Sport::where('data_id', $item['fixture']['id'])->exists()) {
  43. $tableData[] = [
  44. 'data_id' => $item['fixture']['id'],
  45. 'home_team_id' => $item['teams']['home']['id'],
  46. 'home_team_en' => $item['teams']['home']['name'],
  47. 'home_team' => lang($item['teams']['home']['name']),
  48. 'home_team_logo' => $item['teams']['home']['logo'],
  49. 'guest_team_id' => $item['teams']['away']['id'],
  50. 'guest_team_en' => $item['teams']['away']['name'],
  51. 'guest_team' => lang($item['teams']['away']['name']),
  52. 'guest_team_logo' => $item['teams']['away']['logo'],
  53. 'half_score' => "{$item['score']['halftime']['home']}-{$item['score']['halftime']['away']}",
  54. 'rbt' => $item['fixture']['timestamp'],
  55. 'score' => "{$item['goals']['home']}-{$item['goals']['away']}",
  56. 'league' => lang($item['league']['name']),
  57. 'league_en' => $item['league']['name'],
  58. 'state' => $status[$item['fixture']['status']['short']],//比赛状态:0未开始1进行中2已完场3延期4取消
  59. 'game_time' => $item['fixture']['timestamp'],
  60. ];
  61. }
  62. }
  63. Sport::insert($tableData);
  64. return $tableData;
  65. }
  66. }