GetOddsData.php 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * 获取不同球类默认赔率玩法
  5. * User: Jun.peng
  6. * Date: 2019/4/16
  7. * Time: 9:29
  8. */
  9. namespace Biz\Match;
  10. class GetOddsData {
  11. public function __construct() {
  12. $this->commonFunction = C()->get('commonFunction');
  13. }
  14. /**
  15. * 根据不同球类获取相关赔率数据
  16. */
  17. public function getOddsData($data,$whereDate,$source,$oddsTypeWhere=''){
  18. if($data['search']){
  19. $search = $data['search'];
  20. }
  21. //根据 球类代码 获取相关model
  22. $models = $this->commonFunction->getModels($data['game_code']);
  23. $model_league = $models['model_league'];
  24. $model_match = $models['model_match'];
  25. $model_odds = $models['model_odds'];
  26. $league = lm($model_league, 'Sports')
  27. ->select('lg_id','name_chinese')
  28. ->where($source)
  29. ->where(['lg_id'=>$data['leagueID']])
  30. ->first();
  31. if(empty($league->lg_id)) throw new \Exception(Render([], '10003', lang('Tips','Sports')->get('PARAM_ERROR')));
  32. $matchData = lm($model_match, 'Sports')
  33. ->select('lg_id','match_id','tag','match_date','match_time','home_team','guest_team')
  34. ->where($source)
  35. ->where(['lg_id'=>$data['leagueID']])
  36. ->where($whereDate)
  37. ->where($model_match.'.us_time','>',qgmdate('Y-m-d H:i:s', '', -4))
  38. ->where('status','<',2)
  39. ->where($model_match.'.home_team','<>',null)
  40. ->where($model_match.'.guest_team','<>',null)
  41. ->where(function($query)use ($model_match,$search){
  42. $query->where($model_match.'.home_team','like','%'.$search.'%')
  43. ->orWhere(function($query)use ($model_match,$search) {
  44. $query->where($model_match . '.guest_team', 'like', '%' . $search . '%');
  45. });
  46. })
  47. ->get()->toArray();
  48. if(empty($matchData)) throw new \Exception(Render([], '10004', lang('Tips','Sports')->get('PARAM_ERROR')));
  49. if(empty($matchData)){
  50. Render([], '10006', lang('Tips','Sports')->get('empty'));
  51. }
  52. switch ($data['game_code']){
  53. case 'zq'://获取足球默认赔率数据
  54. $list = $this->getOddsZQ($matchData,$model_odds,$source,$oddsTypeWhere);
  55. break;
  56. case 'lq'://获取篮球默认赔率数据
  57. $list = $this->getOddsLQ($matchData,$model_odds,$source,$oddsTypeWhere);
  58. break;
  59. case 'wq'://获取网球默认赔率数据
  60. $list = $this->getOddsWQ($matchData,$model_odds,$source,$oddsTypeWhere);
  61. break;
  62. case 'bq'://获取棒球默认赔率数据
  63. $list = $this->getOddsBQ($matchData,$model_odds,$source,$oddsTypeWhere);
  64. break;
  65. default:
  66. throw new \Exception(Render([], '10002', lang('Tips','Sports')->get('PARAM_ERROR')));
  67. }
  68. $data = [
  69. 'lg_id'=>$league->lg_id,
  70. 'leagueName'=>$league->name_chinese,
  71. 'matchNum'=>count($list) ,
  72. 'matchData'=>$list,
  73. // 'lang' => lang('OddsTemp','Sports')->getAll(),
  74. ];
  75. return $data;
  76. }
  77. /**
  78. * @param $matchData 赛事数据
  79. * @param $model_odds 赔率model
  80. * @param $source 数据源
  81. * @return array
  82. * @throws \Exception
  83. * 获取足球默认赔率数据
  84. */
  85. public function __getOddsZQ($matchData,$model_odds,$source,$oddsTypeWhere=''){
  86. $list = array();
  87. foreach ($matchData as $key=>$item){
  88. $list[$key] = $item;
  89. $oddsData = lm($model_odds, 'Sports')
  90. ->select('id','p_code','odds_code','status','odds','condition','sort','odds_only')
  91. ->where($source)
  92. // ->where($oddsTypeWhere)
  93. ->where(['match_id'=>$item['match_id'],'type'=>0])
  94. // ->where($model_odds.'.expire_time','>',date("Y-m-d H:i:s"))//追加查询有效时间
  95. ->where(
  96. function($query)use ($model_odds){
  97. $query->where($model_odds.'.odds_code','concede_home')
  98. ->orWhere(function($query)use ($model_odds){
  99. $query->where($model_odds.'.odds_code','concede_guest');
  100. })
  101. ->orWhere(function($query)use ($model_odds){
  102. $query->where($model_odds.'.odds_code','size_home');
  103. })
  104. ->orWhere(function($query)use ($model_odds){
  105. $query->where($model_odds.'.odds_code','size_guest');
  106. });
  107. }
  108. )
  109. ->get()->toArray();
  110. if(!empty($oddsData)){
  111. //根据 排序 获取 最新让球/大小玩法赔率
  112. $sortData = array_column($oddsData,'sort');
  113. array_multisort($sortData,SORT_ASC ,$oddsData);
  114. $list[$key]['oddsData'] = array_slice($oddsData,0,4);//前四条 放入
  115. }else{
  116. $list[$key]['oddsData'] = [];
  117. }
  118. }
  119. return $list;
  120. }
  121. public function getOddsZQ($matchData,$model_odds,$source,$oddsTypeWhere=''){
  122. //获取赛事id 集合
  123. $match_ids = [];
  124. foreach ($matchData as $k=>$v){
  125. $match_ids[] = (int)$v['match_id'];
  126. }
  127. $oddsData = lm($model_odds, 'Sports')
  128. ->select('match_id','id','p_code','odds_code','status','odds','condition','sort','odds_only')
  129. ->whereIn('match_id',$match_ids)
  130. ->where($source)
  131. ->where(
  132. function($query)use ($model_odds){
  133. $query->where($model_odds.'.odds_code','concede_home')
  134. ->orWhere(function($query)use ($model_odds){
  135. $query->where($model_odds.'.odds_code','concede_guest');
  136. })
  137. ->orWhere(function($query)use ($model_odds){
  138. $query->where($model_odds.'.odds_code','goal_size_big');
  139. })
  140. ->orWhere(function($query)use ($model_odds){
  141. $query->where($model_odds.'.odds_code','goal_size_small');
  142. });
  143. }
  144. )
  145. ->get()->toArray();
  146. foreach ($matchData as $kk=>$vv){
  147. //获取赛事下赔率并且分组
  148. $odds = [];
  149. foreach ($oddsData as $kkk=>$vvv) {
  150. if ($vv['match_id'] == $vvv['match_id'] and $vvv['sort']==0) {
  151. $odds[] = $vvv;
  152. }
  153. }
  154. $matchData[$kk]['oddsData'] = $odds;
  155. }
  156. return $matchData;
  157. }
  158. /**
  159. * @param $matchData 赛事数据
  160. * @param $model_odds 赔率model
  161. * @param $source 数据源
  162. * @return array
  163. * @throws \Exception
  164. * 获取篮球默认赔率数据
  165. */
  166. public function __getOddsLQ($matchData,$model_odds,$source,$oddsTypeWhere=''){
  167. $list = array();
  168. foreach ($matchData as $key=>$item){
  169. $list[$key] = $item;
  170. $oddsData = lm($model_odds, 'Sports')
  171. ->select('id','p_code','odds_code','status','odds','condition','sort','odds_only')
  172. ->where($source)
  173. // ->where($oddsTypeWhere)
  174. ->where(['match_id'=>$item['match_id'],'type'=>0])
  175. // ->where($model_odds.'.expire_time','>',date("Y-m-d H:i:s"))//追加查询有效时间
  176. ->where(
  177. function($query)use ($model_odds){
  178. $query->where($model_odds.'.odds_code','concede_home')
  179. ->orWhere(function($query)use ($model_odds){
  180. $query->where($model_odds.'.odds_code','concede_guest');
  181. })
  182. ->orWhere(function($query)use ($model_odds){
  183. $query->where($model_odds.'.odds_code','total_sizes_big');
  184. })
  185. ->orWhere(function($query)use ($model_odds){
  186. $query->where($model_odds.'.odds_code','total_sizes_small');
  187. });
  188. }
  189. )
  190. ->get()->toArray();
  191. if(!empty($oddsData)){
  192. //根据 排序 获取 最新让球/大小玩法赔率
  193. $sortData = array_column($oddsData,'sort');
  194. array_multisort($sortData,SORT_ASC ,$oddsData);
  195. $list[$key]['oddsData'] = array_slice($oddsData,0,4);//前四条 放入
  196. }else{
  197. $list[$key]['oddsData'] = [];
  198. }
  199. }
  200. return $list;
  201. }
  202. public function getOddsLQ($matchData,$model_odds,$source,$oddsTypeWhere=''){
  203. //获取赛事id 集合
  204. $match_ids = [];
  205. foreach ($matchData as $k=>$v){
  206. $match_ids[] = $v['match_id'];
  207. }
  208. $oddsData = lm($model_odds, 'Sports')
  209. ->select('match_id','id','p_code','odds_code','status','odds','condition','sort','odds_only')
  210. ->where($source)
  211. ->whereIn('match_id',$match_ids)
  212. ->where(
  213. function($query)use ($model_odds){
  214. $query->where($model_odds.'.odds_code','concede_home')
  215. ->orWhere(function($query)use ($model_odds){
  216. $query->where($model_odds.'.odds_code','concede_guest');
  217. })
  218. ->orWhere(function($query)use ($model_odds){
  219. $query->where($model_odds.'.odds_code','total_size_big');
  220. })
  221. ->orWhere(function($query)use ($model_odds){
  222. $query->where($model_odds.'.odds_code','total_size_small');
  223. });
  224. }
  225. )
  226. ->get()->toArray();
  227. foreach ($matchData as $kk=>$vv){
  228. //获取赛事下赔率并且分组
  229. $odds = [];
  230. foreach ($oddsData as $kkk=>$vvv) {
  231. if ($vv['match_id'] == $vvv['match_id'] and $vvv['sort']==0) {
  232. $odds[] = $vvv;
  233. }
  234. }
  235. $matchData[$kk]['oddsData'] = $odds;
  236. }
  237. return $matchData;
  238. }
  239. /**
  240. * @param $matchData 赛事数据
  241. * @param $model_odds 赔率model
  242. * @param $source 数据源
  243. * @return array
  244. * @throws \Exception
  245. * 获取网球默认赔率数据
  246. */
  247. public function __getOddsWQ($matchData,$model_odds,$source,$oddsTypeWhere=''){
  248. $list = array();
  249. foreach ($matchData as $key=>$item){
  250. $list[$key] = $item;
  251. $oddsData = lm($model_odds, 'Sports')
  252. ->select('id','p_code','odds_code','status','odds','condition','sort','odds_only')
  253. ->where($source)
  254. // ->where($oddsTypeWhere)
  255. ->where(['match_id'=>$item['match_id'],'type'=>0])
  256. // ->where($model_odds.'.expire_time','>',date("Y-m-d H:i:s"))//追加查询有效时间
  257. ->where(
  258. function($query)use ($model_odds){
  259. $query->where($model_odds.'.odds_code','dishes_home')
  260. ->orWhere(function($query)use ($model_odds){
  261. $query->where($model_odds.'.odds_code','dishes_guest');
  262. })
  263. ->orWhere(function($query)use ($model_odds){
  264. $query->where($model_odds.'.odds_code','kemp_home');
  265. })
  266. ->orWhere(function($query)use ($model_odds){
  267. $query->where($model_odds.'.odds_code','kemp_guest');
  268. });
  269. }
  270. )
  271. ->get()->toArray();
  272. if(!empty($oddsData)){
  273. //根据 排序 获取 最新让球/大小玩法赔率
  274. $sortData = array_column($oddsData,'sort');
  275. array_multisort($sortData,SORT_ASC ,$oddsData);
  276. $list[$key]['oddsData'] = array_slice($oddsData,0,4);//前四条 放入
  277. }else{
  278. $list[$key]['oddsData'] = [];
  279. }
  280. }
  281. return $list;
  282. }
  283. public function getOddsWQ($matchData,$model_odds,$source,$oddsTypeWhere=''){
  284. //获取赛事id 集合
  285. $match_ids = [];
  286. foreach ($matchData as $k=>$v){
  287. $match_ids[] = $v['match_id'];
  288. }
  289. $oddsData = lm($model_odds, 'Sports')
  290. ->select('match_id','id','p_code','odds_code','status','odds','condition','sort','odds_only')
  291. ->where($source)
  292. ->whereIn('match_id',$match_ids)
  293. ->where(
  294. function($query)use ($model_odds){
  295. $query->where($model_odds.'.odds_code','dishes_home')
  296. ->orWhere(function($query)use ($model_odds){
  297. $query->where($model_odds.'.odds_code','dishes_guest');
  298. })
  299. ->orWhere(function($query)use ($model_odds){
  300. $query->where($model_odds.'.odds_code','kemp_home');
  301. })
  302. ->orWhere(function($query)use ($model_odds){
  303. $query->where($model_odds.'.odds_code','kemp_guest');
  304. });
  305. }
  306. )
  307. ->get()->toArray();
  308. foreach ($matchData as $kk=>$vv){
  309. //获取赛事下赔率并且分组
  310. $odds = [];
  311. foreach ($oddsData as $kkk=>$vvv) {
  312. if ($vv['match_id'] == $vvv['match_id'] and $vvv['sort']==0) {
  313. $odds[] = $vvv;
  314. }
  315. }
  316. $matchData[$kk]['oddsData'] = $odds;
  317. }
  318. return $matchData;
  319. }
  320. /**
  321. * @param $matchData 赛事数据
  322. * @param $model_odds 赔率model
  323. * @param $source 数据源
  324. * @return array
  325. * @throws \Exception
  326. * 获取棒球默认赔率数据
  327. */
  328. public function __getOddsBQ($matchData,$model_odds,$source,$oddsTypeWhere=''){
  329. $list = array();
  330. foreach ($matchData as $key=>$item){
  331. $list[$key] = $item;
  332. $oddsData = lm($model_odds, 'Sports')
  333. ->select('id','p_code','odds_code','status','odds','condition','sort','odds_only')
  334. ->where($source)
  335. // ->where($oddsTypeWhere)
  336. ->where(['match_id'=>$item['match_id'],'type'=>0])
  337. // ->where($model_odds.'.expire_time','>',date("Y-m-d H:i:s"))//追加查询有效时间
  338. ->where(
  339. function($query)use ($model_odds){
  340. $query->where($model_odds.'.odds_code','capot_home')
  341. ->orWhere(function($query)use ($model_odds){
  342. $query->where($model_odds.'.odds_code','capot_guest');
  343. });
  344. }
  345. )
  346. ->get()->toArray();
  347. if(!empty($oddsData)){
  348. //根据 排序 获取 最新让球/大小玩法赔率
  349. $sortData = array_column($oddsData,'sort');
  350. array_multisort($sortData,SORT_ASC ,$oddsData);
  351. $list[$key]['oddsData'] = array_slice($oddsData,0,2);//前四条 放入
  352. }else{
  353. $list[$key]['oddsData'] = [];
  354. }
  355. }
  356. return $list;
  357. }
  358. public function getOddsBQ($matchData,$model_odds,$source,$oddsTypeWhere=''){
  359. //获取赛事id 集合
  360. $match_ids = [];
  361. foreach ($matchData as $k=>$v){
  362. $match_ids[] = $v['match_id'];
  363. }
  364. $oddsData = lm($model_odds, 'Sports')
  365. ->select('match_id','id','p_code','odds_code','status','odds','condition','sort','odds_only')
  366. ->where($source)
  367. ->whereIn('match_id',$match_ids)
  368. ->where(
  369. function($query)use ($model_odds){
  370. $query->where($model_odds.'.odds_code','capot_home')
  371. ->orWhere(function($query)use ($model_odds){
  372. $query->where($model_odds.'.odds_code','capot_guest');
  373. });
  374. }
  375. )
  376. ->get()->toArray();
  377. foreach ($matchData as $kk=>$vv){
  378. //获取赛事下赔率并且分组
  379. $odds = [];
  380. foreach ($oddsData as $kkk=>$vvv) {
  381. if ($vv['match_id'] == $vvv['match_id'] and $vvv['sort']==0) {
  382. $odds[] = $vvv;
  383. }
  384. }
  385. $matchData[$kk]['oddsData'] = $odds;
  386. }
  387. return $matchData;
  388. }
  389. }