RacingLiveController.class.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. <?php
  2. namespace Home\Controller;
  3. use Common\Cache\RedisCache;
  4. use Common\Controller\HomeBaseController as Base;
  5. /**
  6. * 比赛实况
  7. * @author: huangch
  8. * @package Home\Controller
  9. */
  10. class RacingLiveController extends Base
  11. {
  12. public function index() {
  13. $type = (int)I('get.type', 1); //1单圈 2总时间
  14. $server_id = (int)I('get.server_id', 0);
  15. $session = (int)I('get.session', 0);
  16. $this->assign('server_id', $server_id);
  17. $this->assign('session', $session);
  18. if ($type == 1) {
  19. $this->display('single_lap');
  20. } else {
  21. $this->display('all_lap');
  22. }
  23. }
  24. /**
  25. * 最快单圈排行
  26. * @author: huangch
  27. */
  28. public function fastest_lap() {
  29. $server_id = I('get.server_id');
  30. $page_size = I('get.page_size') ? I('get.page_size') : 2;
  31. $page_num = I('get.page_num') ? I('get.page_num') : 1;
  32. $racing_result_mod = M('racing_result');
  33. $racing_sign_mod = M('racing_sign');
  34. $racing_server_mod = M('racing_server');
  35. $user_mod = M('user');
  36. $event_id = $racing_server_mod->where(['id' => $server_id])->getfield('event_id');
  37. //最快单圈
  38. $redis = new RedisCache();
  39. $zset_key = 'r_server_'.$server_id;
  40. $count = $redis->zCard($zset_key);
  41. $start = $page_size * ($page_num - 1) ;
  42. $end = $page_size * $page_num - 1;
  43. $rank_list = $redis->zRange($zset_key,$start,$end);
  44. //dump($rank_list);exit;
  45. foreach ($rank_list as $key => $val) {
  46. $ms = $redis->zScore($zset_key,$val);
  47. $sort = $redis->zRank($zset_key,$val) + 1;
  48. $fastest_res['pos'] = $sort;
  49. $fastest_res['time'] = $this->ms2time($ms);
  50. $res = $racing_result_mod->where(['uid' => $val,'mark' => 4,'server_id' => $server_id])->field('racer,car_name')->find();
  51. $name = $racing_sign_mod->where(['event_id' => $event_id,'uid' => $val,'status' => 1])->getfield('name');
  52. $icon = $user_mod->where(['id' => $val])->getfield('icon');
  53. $fastest_res['racer'] = $res['racer'];
  54. $fastest_res['icon'] = $icon;
  55. $fastest_res['name'] = $name ? $name : $res['racer'];
  56. $fastest_res['car_name'] = $res['car_name'];
  57. $fastest_list[] = $fastest_res;
  58. unset($res);
  59. unset($fastest_res);
  60. unset($ms);
  61. unset($icon);
  62. }
  63. $this->apiListSuccess($fastest_list);
  64. }
  65. public function ms2time($ms) {
  66. $str1 = "." . sprintf("%03d", $ms % 1000);
  67. $seconds = intval($ms / 1000);
  68. $str = ":" . sprintf("%02d", $seconds % 60);//"%02d" 格式化为整数,2位,不足2位,左边补0
  69. $minutes = intval($seconds / 60);
  70. $str = sprintf("%02d", $minutes % 60) . $str;
  71. $hours = intval($minutes / 60);
  72. if ($hours) {
  73. $str = $hours.':'.$str.$str1;
  74. } else {
  75. $str = $str.$str1;
  76. }
  77. return $str;
  78. }
  79. /**
  80. * 总圈速排行
  81. * @author: huangch
  82. */
  83. public function total_fastest_lap() {
  84. $server_id = I('get.server_id');
  85. $session = I('get.session');
  86. $page_size = I('get.page_size') ? I('get.page_size') : 2;
  87. $page_num = I('get.page_num') ? I('get.page_num') : 1;
  88. $racing_result_mod = M('racing_result');
  89. $racing_sign_mod = M('racing_sign');
  90. $racing_server_mod = M('racing_server');
  91. $user_mod = M('user');
  92. $event_id = $racing_server_mod->where(['id' => $server_id])->getfield('event_id');
  93. //总成绩
  94. $server = M('racing_server')->where(['id' => $server_id,'session' => $session])->field('qualify_laps,race_laps')->find();
  95. if ($session == 1) $laps = $server['qualify_laps'];
  96. if ($session == 2) $laps = $server['race_laps'];
  97. $map['server_id'] = $server_id;
  98. $map['session'] = $session;
  99. if($laps) $map['laps'] = ['elt',$laps];
  100. $total_time_list = M('racing_result')->where($map)->order('laps desc,time asc')->page($page_num,$page_size)->select();
  101. foreach ($total_time_list as $key => $val) {
  102. $name = $racing_sign_mod->where(['event_id' => $event_id,'uid' => $val['uid'],'status' => 1])->getfield('name');
  103. $icon = $user_mod->where(['id' => $val['uid']])->getfield('icon');
  104. $sort = $page_size * ($page_num - 1) + $key + 1;
  105. $total_time['pos'] = $sort;
  106. $total_time['laps'] = (int)$val['laps'];
  107. $total_time['time'] = $this->ms2time($val['time']);
  108. $total_time['racer'] = $val['racer'] ? $val['racer'] : '';
  109. $total_time['icon'] = $icon ? $icon :'';
  110. $total_time['name'] = $name ? $name : $val['racer'];
  111. $total_time['car_name'] = $val['car_name'] ? $val['car_name'] : '';
  112. $total_time_res[] = $total_time;
  113. unset($name);
  114. unset($icon);
  115. }
  116. $this->apiListSuccess($total_time_res);
  117. }
  118. /**
  119. * api数据列表成功返回
  120. * @param type $param 返回值
  121. * @return string
  122. */
  123. public function apiListSuccess($param) {
  124. $ret['code'] = SUCCESS;
  125. $ret['data']['count'] = count($param);
  126. $ret['data']['items'] = $param ? $param : array();
  127. die(json_encode($ret));
  128. }
  129. }