StBqResult.php 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. <?php
  2. namespace App\Http\Model;
  3. use Illuminate\Database\Eloquent\Model;
  4. use App\Http\Response\Response;
  5. use Illuminate\Support\Facades\DB;
  6. use App\Lib\Biz\Sport\Common as commonFunction;
  7. /**
  8. * Class StBqResult
  9. * @package App\Http\Model
  10. * 棒球 赛事 结果
  11. */
  12. class StBqResult extends Model
  13. {
  14. protected $table = 'st_bq_result';
  15. public $timestamps = false;
  16. public static function BQresult_v1($model){
  17. //获取赛事表7天内所有赛事
  18. $matchData = $model['model_match']::select('id','home_team','guest_team','lg_id','status','tag','match_date','match_time')
  19. ->where([['match_date','>',date('Y-m-d',strtotime("-2 day"))],['status','=',2]])
  20. ->get()
  21. ->toArray();
  22. //获取赛事结果表 一天内
  23. $matchData_r = $model['model_result']::select('match_id')
  24. ->where([['ctime','>',date('Y-m-d H:i:s', strtotime("-2 day"))]])
  25. ->get()
  26. ->toArray();
  27. if(!empty($matchData_r)){
  28. //如果结果表有数据,则获取结果表没有的赛事
  29. foreach ($matchData as $k => $v) {
  30. foreach ($matchData_r as $kk => $vv) {
  31. if ($v['id'] == $vv['match_id']) {
  32. unset($matchData[$k]);
  33. }
  34. }
  35. }
  36. }
  37. //没有数据,无需操作
  38. if(empty($matchData)) return Response::success();
  39. //获取赛事id 用于获取赛事对应结果比分
  40. $match_ids = [];
  41. foreach($matchData as $k =>$v){
  42. //只获取赛事已结束的
  43. if($v['status'] == 2){
  44. $match_ids[] = $v['id'];
  45. }
  46. }
  47. $match_ids_str = implode(",", $match_ids);
  48. // 组装sql
  49. $sql_result = "select a.match_id,a.home_score,a.guest_score,a.match_time as a_time,a.match_process,a.all_inning,a.first_score,a.last_score,a.match_score,a.match_winer,a.home_rate,a.guest_rate,a.result_mark from st_bq_result_record a,
  50. (select match_id,max(id) id from st_bq_result_record where match_id IN ($match_ids_str) group by match_id)b
  51. where a.match_id = b.match_id and a.id = b.id ";
  52. //赛事最终结果
  53. $match_result = DB::select($sql_result);
  54. //拼装赛事结果数据
  55. $set_match_r = [];
  56. if(!empty($match_result)){
  57. foreach($matchData as $k =>$v ){
  58. //获取开赛时间
  59. $start_time = ($v['match_date'].' '.$v['match_time']);
  60. $time = time()-strtotime($v['match_time']);
  61. $match_time = self::secTime($time);
  62. //获取赛事每节的赛果
  63. $resultData = commonFunction::filter_by_value($match_result,'match_id',$v['id']);
  64. if(!empty($resultData)){
  65. //获取赛果json
  66. $result_mark = json_decode($resultData['result_mark'],true);
  67. //获取进程
  68. $match_process = $resultData['match_process'];
  69. //获胜球员
  70. $match_winer = '';
  71. if($result_mark['game_num_H'] > $result_mark['game_num_C']){
  72. $match_winer = $v['home_team'];
  73. }else{
  74. $match_winer = $v['guest_team'];
  75. }
  76. //组装输赢结果json
  77. $inning = [
  78. 1=>[
  79. "home"=>$result_mark['sc_1th_H'],
  80. "guest"=>$result_mark['sc_1th_C'],
  81. ],
  82. 2=>[
  83. "home"=>$result_mark['sc_2th_H'],
  84. "guest"=>$result_mark['sc_2th_C'],
  85. ],
  86. 3=>[
  87. "home"=>$result_mark['sc_3th_H'],
  88. "guest"=>$result_mark['sc_3th_C'],
  89. ],
  90. 4=>[
  91. "home"=>$result_mark['sc_4th_H'],
  92. "guest"=>$result_mark['sc_4th_C'],
  93. ],
  94. 5=>[
  95. "home"=>$result_mark['sc_5th_H'],
  96. "guest"=>$result_mark['sc_5th_C'],
  97. ],
  98. 6=>[
  99. "home"=>$result_mark['sc_6th_H'],
  100. "guest"=>$result_mark['sc_6th_C'],
  101. ],
  102. 7=>[
  103. "home"=>$result_mark['sc_7th_H'],
  104. "guest"=>$result_mark['sc_7th_C'],
  105. ],
  106. 8=>[
  107. "home"=>$result_mark['sc_8th_H'],
  108. "guest"=>$result_mark['sc_8th_C'],
  109. ],
  110. 9=>[
  111. "home"=>$result_mark['sc_9th_H'],
  112. "guest"=>$result_mark['sc_9th_C'],
  113. ],
  114. "other"=>[//加时
  115. "home"=>$result_mark['OT_H'],
  116. "guest"=>$result_mark['OT_C'],
  117. ]
  118. ];
  119. //上半场主队进球
  120. $u_home_score = $result_mark['sc_1th_H']+$result_mark['sc_2th_H']+$result_mark['sc_3th_H']+$result_mark['sc_4th_H']+$result_mark['sc_5th_H'];
  121. //上半场客队进球
  122. $u_guest_score = $result_mark['sc_1th_C']+$result_mark['sc_2th_C']+$result_mark['sc_3th_C']+$result_mark['sc_4th_C']+$result_mark['sc_5th_C'];
  123. //赛事比分
  124. $match_score = $result_mark['game_num_H'].':'.$result_mark['game_num_C'];
  125. //总进球数
  126. $all_goal = $result_mark['game_num_H'] + $result_mark['game_num_C'];
  127. //赛事待写入赛果数据
  128. $set_match_r[] = [
  129. "match_id"=> $v['id'],
  130. "home_team"=>$v['home_team'],
  131. "guest_team"=>$v['guest_team'],
  132. "lg_id"=>$v['lg_id'],
  133. "status"=>$v['status'],
  134. "tag"=> $v['tag'],
  135. 'match_time'=>$resultData['a_time']?:0,
  136. "ctime"=>date('Y-m-d H:i:s'),
  137. "update_time"=>date('Y-m-d H:i:s'),
  138. "start_time"=>date('Y-m-d H:i:s',strtotime($start_time)),
  139. "home_rate"=> $resultData['home_rate']?:0, //主队让球
  140. "guest_rate"=> $resultData['guest_rate']?:0, //客队让球
  141. "home_score"=> $result_mark['game_num_H']?:0, //主队进球
  142. "guest_score"=> $result_mark['game_num_C']?:0, //客队进球
  143. "all_goal"=> $all_goal?:0, //总局数
  144. // "first_score"=> $resultData['first_score']?:'', //最先得分
  145. // "last_score"=> $resultData['last_score']?:'', //最后得分
  146. "match_score"=> $match_score?:'',//赛事比分
  147. "match_winer"=> $match_winer?:'',//获胜队员
  148. "match_process"=> $match_process?:'',//比赛进程
  149. "u_home_score"=> $u_home_score,//上半场主队进球
  150. "u_guest_score"=> $u_guest_score ,//上半场客队进球
  151. "match_score_t"=> json_encode($inning)?:'',//每局输赢结果
  152. ];
  153. }
  154. }
  155. }
  156. //写入赛果
  157. if(!empty($set_match_r)){
  158. $ret = $model['model_result']::insert($set_match_r);
  159. if($ret != true) throw new \Exception( Response::generate('',Response::ADD_MATCH_R_ERROR));
  160. }
  161. return 1;
  162. }
  163. /**
  164. * 获取自动赛事结果
  165. * 只更新已结束+未手动修改的赛事结果
  166. * $match_id 本地赛事id 为0时 则用于后台手动刷新赛果
  167. */
  168. public static function BQresult_v2($model,$match_id=0){
  169. //如果有赛事id 则只更新当前赛事结果
  170. if($match_id > 0){
  171. $match_ids_str = $match_id;
  172. $match_ids = [$match_id];
  173. }else{
  174. //获取两天内的结束赛事
  175. $matchData = $model['model_match']
  176. ->join('st_bq_result','st_bq_result.match_id','=','st_bq_competition.id')
  177. ->select('st_bq_competition.id','is_correct')
  178. ->where([['st_bq_competition.match_date','>',date('Y-m-d', strtotime("-2 day"))],['st_bq_competition.status','=',2],['st_bq_result.is_correct','=',-1]])
  179. ->get()
  180. ->toArray();
  181. //没有数据,无需操作
  182. if(empty($matchData)) return Response::success();
  183. //获取需更新结果的赛事ID
  184. $match_ids = [];
  185. foreach($matchData as $k =>$v){
  186. //未手动修改比分
  187. if($v['is_correct'] == 0){
  188. $match_ids[] = $v['id'];
  189. }
  190. }
  191. if(empty($match_ids)) return Response::success();
  192. $match_ids_str = implode(",", $match_ids);
  193. }
  194. //如果有赛事id 获取结果中的手动数据
  195. if(!empty($match_ids)){
  196. $manual_result_data = self::select('match_id','manual_result')
  197. ->whereIn('match_id',$match_ids)
  198. ->get()
  199. ->toArray();
  200. }
  201. // 组装sql
  202. $sql_result = "select a.match_id,a.home_team,a.guest_team,a.home_score,a.guest_score,a.match_time as a_time,a.match_process,a.all_inning,a.first_score,a.last_score,a.match_score,a.match_winer,a.home_rate,a.guest_rate,a.result_mark from st_bq_result_record a,
  203. (select match_id,max(id) id from st_bq_result_record where match_id IN ($match_ids_str) group by match_id)b
  204. where a.match_id = b.match_id and a.id = b.id ";
  205. //赛事最终结果
  206. $match_result = DB::select($sql_result);
  207. if(!empty($match_result)){
  208. foreach($match_result as $k=>$v){
  209. //获取赛事每节的赛果
  210. $resultData = commonFunction::filter_by_value($match_result,'match_id',$v->match_id);
  211. if(!empty($resultData)){
  212. //获取赛果json
  213. $result_mark = json_decode($resultData['result_mark'],true);
  214. //获取进程
  215. $match_process = $resultData['match_process'];
  216. //获胜球员
  217. $match_winer = '';
  218. if($result_mark['game_num_H'] > $result_mark['game_num_C']){
  219. $match_winer = $v->home_team;
  220. }else{
  221. $match_winer = $v->guest_team;
  222. }
  223. //组装输赢结果json
  224. $inning = [
  225. 1=>[
  226. "home"=>$result_mark['sc_1th_H'],
  227. "guest"=>$result_mark['sc_1th_C'],
  228. ],
  229. 2=>[
  230. "home"=>$result_mark['sc_2th_H'],
  231. "guest"=>$result_mark['sc_2th_C'],
  232. ],
  233. 3=>[
  234. "home"=>$result_mark['sc_3th_H'],
  235. "guest"=>$result_mark['sc_3th_C'],
  236. ],
  237. 4=>[
  238. "home"=>$result_mark['sc_4th_H'],
  239. "guest"=>$result_mark['sc_4th_C'],
  240. ],
  241. 5=>[
  242. "home"=>$result_mark['sc_5th_H'],
  243. "guest"=>$result_mark['sc_5th_C'],
  244. ],
  245. 6=>[
  246. "home"=>$result_mark['sc_6th_H'],
  247. "guest"=>$result_mark['sc_6th_C'],
  248. ],
  249. 7=>[
  250. "home"=>$result_mark['sc_7th_H'],
  251. "guest"=>$result_mark['sc_7th_C'],
  252. ],
  253. 8=>[
  254. "home"=>$result_mark['sc_8th_H'],
  255. "guest"=>$result_mark['sc_8th_C'],
  256. ],
  257. 9=>[
  258. "home"=>$result_mark['sc_9th_H'],
  259. "guest"=>$result_mark['sc_9th_C'],
  260. ],
  261. "other"=>[//加时
  262. "home"=>$result_mark['OT_H'],
  263. "guest"=>$result_mark['OT_C'],
  264. ]
  265. ];
  266. //上半场主队进球
  267. $u_home_score = $result_mark['sc_1th_H']+$result_mark['sc_2th_H']+$result_mark['sc_3th_H']+$result_mark['sc_4th_H']+$result_mark['sc_5th_H'];
  268. //上半场客队进球
  269. $u_guest_score = $result_mark['sc_1th_C']+$result_mark['sc_2th_C']+$result_mark['sc_3th_C']+$result_mark['sc_4th_C']+$result_mark['sc_5th_C'];
  270. //赛事比分
  271. $match_score = $result_mark['game_num_H'].':'.$result_mark['game_num_C'];
  272. //总进球数
  273. $all_goal = $result_mark['game_num_H'] + $result_mark['game_num_C'];
  274. //===追加获取手动结果数据===
  275. $manual_result_json = commonFunction::getManual_result($manual_result_data,$inning,$v->match_id);
  276. //赛事待写入赛果数据
  277. $set_match_r = [
  278. "match_id"=> $v->match_id,
  279. "status"=>2,
  280. "update_time"=>date('Y-m-d H:i:s'),
  281. "home_rate"=> $resultData['home_rate']?:0, //主队让球
  282. "guest_rate"=> $resultData['guest_rate']?:0, //客队让球
  283. "home_score"=> $result_mark['game_num_H']?:0, //主队进球
  284. "guest_score"=> $result_mark['game_num_C']?:0, //客队进球
  285. "all_goal"=> $all_goal?:0, //总局数
  286. // "first_score"=> $resultData['first_score']?:'', //最先得分
  287. // "last_score"=> $resultData['last_score']?:'', //最后得分
  288. "match_score"=> $match_score?:'',//赛事比分
  289. "match_winer"=> $match_winer?:'',//获胜队员
  290. "match_process"=> $match_process?:'',//比赛进程
  291. "u_home_score"=> $u_home_score,//上半场主队进球
  292. "u_guest_score"=> $u_guest_score ,//上半场客队进球
  293. "match_score_t"=> json_encode($inning)?:'',//每局输赢结果
  294. "is_correct"=> -1,//自动比分
  295. "manual_result"=> $manual_result_json,//手动结果
  296. ];
  297. $ret = $model['model_result']::where(['match_id' => $v->match_id,'is_correct'=>-1])
  298. ->update($set_match_r);
  299. // if($ret < 1) throw new \Exception( Response::generate('',Response::ADD_MATCH_R_ERROR));
  300. }
  301. }
  302. }
  303. return 1;
  304. }
  305. //计算滚球 赛事进行时间
  306. public static function secTime($sec=0){
  307. $min = floor($sec/60);
  308. $res = $min.':'.($sec-$min*60);
  309. return $res;
  310. }
  311. }