Sport.php 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. <?php
  2. namespace App\Models;
  3. use App\Models\SportLeague;
  4. use App\Models\SportTeam;
  5. use Illuminate\Support\Facades\Cache;
  6. class Sport extends BaseModel
  7. {
  8. protected $table = 'sport';
  9. protected $fillable = ['data_id', 'home_team_id', 'home_team_en', 'home_team', 'home_team_logo', 'guest_team_id', 'guest_team_en', 'guest_team', 'guest_team_logo', 'half_score', 'rbt',
  10. 'is_roll', 'score', 'league_en','league','odds','state','game_time','status','handicap_limit','over_under_limit','duying_limit','correct_core_limit','odd_even_limit','total_goal_limit',
  11. 'is_handicap', 'is_over_under','is_duying','is_correct_core','is_odd_even','is_total_goal','is_locked','fixture_status','is_send','odd_ids_locked','refund_status','odd_fixture_status',
  12. 'error','odd_values_locked','remark','is_rec'];
  13. protected $hidden = [];
  14. public static function getLongStatus($status){
  15. $long_status = [
  16. 'Time To Be Defined' => '时间待定',
  17. 'Not Started' => '未开赛',
  18. 'First Half' => '上半场',
  19. 'First Half, Kick Off' => '上半场,开球',
  20. 'Halftime' => '中场休息',
  21. 'Second Half' => '下半场',
  22. 'Second Half, 2nd Half Started' => '下半场,已开球',
  23. 'Extra Time' => '加时赛',
  24. 'Break Time' => '休息时间(常规赛与加时赛之间)',
  25. 'Penalty In Progress' => '点球大战进行中',
  26. 'Match Suspended' => '比赛暂停',
  27. 'Match Interrupted' => '比赛中断',
  28. 'Match Finished' => '比赛结束',
  29. 'Match Postponed' => '比赛延期',
  30. 'Match Cancelled' => '比赛取消',
  31. 'Match Abandoned' => '比赛腰斩(废弃)',
  32. 'Technical Loss' => '技术性判负',
  33. 'WalkOver' => '弃权/退赛(对手直接晋级)',
  34. 'In Progress' => '进行中',
  35. ];
  36. return $long_status[$status] ?? $status;
  37. }
  38. public static function addSportTeam($sport_data){
  39. if (!empty($sport_data['home_team_id'])) {
  40. $info = SportTeam::where('team_id', $sport_data['home_team_id'])->first();
  41. if (!$info) {
  42. SportTeam::create([
  43. 'team_id' => $sport_data['home_team_id'],
  44. 'team_name_en' => $sport_data['home_team'],
  45. 'logo' => $sport_data['home_team_logo'],
  46. ]);
  47. }
  48. }
  49. if (!empty($sport_data['guest_team_id'])) {
  50. $info = SportTeam::where('team_id', $sport_data['guest_team_id'])->first();
  51. if (!$info) {
  52. SportTeam::create([
  53. 'team_id' => $sport_data['guest_team_id'],
  54. 'team_name_en' => $sport_data['guest_team'],
  55. 'logo' => $sport_data['guest_team_logo'],
  56. ]);
  57. }
  58. }
  59. return true;
  60. }
  61. public static function addSportLeague($league){
  62. if (!empty($league['name'])) {
  63. $info = SportLeague::where('league_id', $league['id'])->first();
  64. if (!$info) {
  65. $info = SportLeague::where('league_en', $league['name'])->first();
  66. if ($info) {
  67. $info->league_id = $league['id'] ?? '';
  68. $info->logo = $league['logo'] ?? '';
  69. $info->country = $league['country'] ?? '';
  70. $info->season = $league['season'] ?? '';
  71. $info->round = $league['round'] ?? '';
  72. $info->standings = !empty($league['standings']) ? 1 : (isset($league['standings']) ? 0 : null);
  73. $info->save();
  74. }
  75. }
  76. if (!$info) {
  77. SportLeague::create([
  78. 'league_en' => $league['name'],
  79. 'logo' => $league['logo'] ?? '',
  80. 'league_id' => $league['id'] ?? '',
  81. 'country' => $league['country'] ?? '',
  82. 'season' => $league['season'] ?? '',
  83. 'round' => $league['round'] ?? '',
  84. 'standings' => !empty($league['standings']) ? 1 : (isset($league['standings']) ? 0 : null),
  85. ]);
  86. }
  87. }
  88. return true;
  89. }
  90. //翻译赔率
  91. public static function doOdds($odds, $odd_values_locked = []) {
  92. // 1. 获取赔率,缓存数据
  93. $sport_odds = cache('sport_odds');
  94. if (!$sport_odds) {
  95. $sport_odds = SportOdds::where('function_name', '<>', null)->get()->toArray();
  96. Cache::set('sport_odds', $sport_odds, 300); //有效期5分钟
  97. }
  98. $sport_odds = array_column($sport_odds, null,'odd_name_en');
  99. $new_odds = [];
  100. foreach($odds as $k => $item) {
  101. foreach($item['values'] as &$values) {
  102. if ($values['value'] == 'Over 1.5') {
  103. $values['value'] = '1.5 or more';
  104. }
  105. $special_str = self::isSpecialStr($values['value']);
  106. if ($special_str) {
  107. $values['value_text'] = lang($special_str, [str_replace($special_str,'', $values['value'])]);
  108. } else {
  109. $values['value_text'] = lang($values['value']);
  110. }
  111. //判断下注项是否加锁
  112. $odd_id = $item['id'];
  113. $handicap = isset($values['handicap']) ? $values['handicap'] : "";
  114. $vh = $values['value']."_".$handicap;
  115. if ($odd_values_locked && isset($odd_values_locked[$odd_id]) && array_search($vh, $odd_values_locked[$odd_id]) !== false) {
  116. $values['is_locked'] = 1;
  117. } else {
  118. $values['is_locked'] = 0;
  119. }
  120. }
  121. $item['name_en'] = $item['name'];
  122. $item['name'] = isset($sport_odds[$item['name']]) ? $sport_odds[$item['name']]['odd_name'] : $item['name'];
  123. $new_odds[] = $item;
  124. }
  125. return $new_odds;
  126. }
  127. public static function isSpecialStr($value) {
  128. if (stripos($value, 'u/yes ') !== false) {
  129. return 'u/yes ';
  130. } elseif (stripos($value, 'u/no ') !== false) {
  131. return 'u/no ';
  132. } elseif (stripos($value, 'o/yes ') !== false) {
  133. return 'o/yes ';
  134. } elseif (stripos($value, 'o/no ') !== false) {
  135. return 'o/no ';
  136. } elseif (stripos($value, ' or more') !== false) {
  137. return ' or more';
  138. } elseif (stripos($value, 'more ') !== false) {
  139. return 'more ';
  140. } elseif (stripos($value, 'Draw/Over ') !== false) {
  141. return 'Draw/Over ';
  142. } elseif (stripos($value, 'Away/Over ') !== false) {
  143. return 'Away/Over ';
  144. } elseif (stripos($value, 'Home/Over ') !== false) {
  145. return 'Home/Over ';
  146. } elseif (stripos($value, 'Draw/Under ') !== false) {
  147. return 'Draw/Under ';
  148. } elseif (stripos($value, 'Away/Under ') !== false) {
  149. return 'Away/Under ';
  150. } elseif (stripos($value, 'Home/Under ') !== false) {
  151. return 'Home/Under ';
  152. } elseif (stripos($value, 'Over ') !== false) {
  153. return 'Over ';
  154. } elseif (stripos($value, 'Under ') !== false) {
  155. return 'Under ';
  156. }
  157. return '';
  158. }
  159. protected function getOddValuesLockedAttribute($value)
  160. {
  161. return $value ? json_decode($value, true) : [];
  162. }
  163. protected function getOddIdsLockedAttribute($value)
  164. {
  165. return $value ? json_decode($value, true) : [];
  166. }
  167. protected function getLeagueDataAttribute($value)
  168. {
  169. return $value ? json_decode($value, true) : [];
  170. }
  171. }