rankingModel = new MatchRanking(); } public function getRank($course = 32, $match_id) { switch ($course) { case 32: $limit = 64; break; case 16: $limit = 32; break; case 8: $limit = 8; break; case 4: $limit = 4; break; case 1: $limit = 99; break; } $all_ranking_bast = $this->rankingModel ->where("match_id" , "eq", $match_id) ->where("course", "eq", $course) ->where("bast_performance", 1) ->field("player_name, course, match_id, promoted, fly_num, times, grouping, course, player_id, custom_sorting, group_score") //->order("round_score") ->orderRaw("CASE fly_num WHEN '3' THEN 1 WHEN '2' THEN 2 WHEN '1' THEN 3 WHEN 'DNF' THEN 4 ELSE 5 END") ->order('datetime_value', 'asc') ->limit($limit) ->select(); if (!empty($all_ranking_bast[0]->custom_sorting)) { $last_ages = array_column($all_ranking_bast,'custom_sorting'); array_multisort($last_ages ,SORT_ASC,$all_ranking_bast); } return $all_ranking_bast; } public function getAllRank ($course = 32, $match_id) { $list = $this->rankingModel->where([ 'course' => $course, 'match_id' => $match_id, 'promoted' => self::PROMOTED ])->field("player_name, course, match_id, promoted, fly_num, times, grouping, course, player_id, custom_sorting, group_score") ->order("group_score", "ASC") ->select(); if (!empty($list[0]->custom_sorting)) { $last_ages = array_column($list,'custom_sorting'); array_multisort($last_ages ,SORT_ASC,$list); } return $list; } /** * 根据赛事ID和赛程获取所有选手成绩, 已废弃 * @Author:Soar * @Time:2023/12/13 9:28 * @param $course 赛程 * @param $match_id 赛事id * @return bool|\PDOStatement|string|\think\Collection * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ #[Deprecated] public function getRankAll($course = 32, $match_id = 180) { if (empty($course)) { $course = 32; } $row = $this->rankingModel->where([ 'course' => $course, 'match_id' => $match_id, ])->field("player_name, course, match_id, promoted, fly_num, times, grouping, course, player_id, integral, finals_round, id") ->order("group_score", "ASC") ->select(); $players = new Players(); $user = new User(); foreach ($row as $vals) { $user_info = $user->where(['member_number' => $vals->player_id])->find(); if (!empty($user_info)) { $player_info = $players->where(['member_id' => $user_info->id])->find(); if (!empty( $player_info)) { $vals->style_photo = $player_info->style_photo; $vals->province = $player_info->province; $vals->age = $player_info->age; } } } return $row; } /** * 替换上面的接口 * 根据赛程信息和赛事ID 获取所有选手的信息 * @Author:Soar * @Time:2023/12/13 9:27 * @param int $course 赛程 * @param int $match_id 赛事id * @return array */ public function getRoundAllPlayer(int $course, int $match_id) { $data = $this->rankingModel ->Distinct(true) ->where('match_id', $match_id) ->where("course", $course) ->field('player_id, grouping, player_name') ->select(); $data = collection($data)->toArray(); if ($data) { $players = new Players(); $user = new User(); foreach ($data as $key => $value) { $user_info = $user->where(['member_number' => $value['player_id']])->find(); if ($user_info) { $player_info = $players->where(['member_id' => $user_info->id])->find(); if ($player_info) { $data[$key]['style_photo'] = $player_info->style_photo; $data[$key]['province'] = $player_info->province; $data[$key]['age'] = $player_info->age; $data[$key]['player_name'] = $player_info->real_name; } } } } return $data; } public function getMatchAll($match_id, $course = 32) { if (empty($course)) { $course = 32; } return $this->rankingModel->where([ 'course' => $course, 'match_id' => $match_id, ])->field("player_name, course, match_id, promoted, fly_num, times, grouping, course, player_id") ->select(); } public function getSemiFinals($match_id) { $row = $this->rankingModel->where([ 'course' => 4, 'match_id' => 180, 'promoted' => self::PROMOTED ])->field("player_name, course, match_id, promoted, fly_num, times, grouping, course, player_id") ->select(); $players = new Players(); $user = new User(); foreach ($row as $vals) { $user_info = $user->where(['member_number' => $vals->player_id])->find(); $player_info = $players->where(['member_id' => $user_info->id])->find(); $vals->style_photo = $player_info->style_photo; $vals->province = $player_info->province; $vals->age = $player_info->age; // 获取64进32强数据 $vals->achievement_list = $this->rankingModel->where([ 'match_id' => $vals->match_id, 'player_id' => $vals->player_id, 'player_name' => $vals->player_name ])->field("course, times")->select(); } return $row; } /** * 获取分组选手信息以及成绩列表 * @Author:Soar * @Time:2023/11/20 16:25 * @param $param * @return bool|\PDOStatement|string|\think\Collection * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ public function getRankGroup($param) { $list = $this->rankingModel->where([ 'course' => $param['course'], 'match_id' => $param['match_id'], 'grouping' => $param['group'], 'bast_performance' => 1 ])->field("player_name, course, match_id, promoted, fly_num, times, grouping, player_id, other_round") ->select(); $players = new Players(); $user = new User(); foreach ($list as $val) { $user_info = $user->where(['member_number' => $val->player_id])->find(); if (!empty($user_info)) { $player_info = $players->where(['member_id' => $user_info->id])->find(); if (!empty($player_info)) { if (!empty($player_info->style_photo)) { $val->style_photo = $player_info->style_photo; } else { $val->style_photo = $player_info->player_pic; } $val->age = $player_info->age; $val->province = $player_info->province; } else { $val->style_photo = null; $val->age = null; $val->province = null; } } $val->achievement_list = $this->rankingModel->where([ 'match_id' => $val->match_id, 'player_id' => $val->player_id, 'player_name' => $val->player_name, ])->field("course, times, fly_num, integral, other_round")->select(); } $list_['items'] = $list; $list_['round'] = $this->rankingModel->where("match_id", "eq", $param['match_id']) ->where("course", "eq", $param['course']) ->max("other_round"); return $list_; } public function getRankFinals($match_id,$name = 0) { $collections = $this->rankingModel->where('match_id', 'eq', $match_id) ->where("course", "eq", 4) ->where("bast_performance", 1) ->field("player_name, course, match_id, promoted, fly_num, times, grouping, course, player_id, other_round") ->orderRaw("CASE fly_num WHEN '3' THEN 1 WHEN '2' THEN 2 WHEN '1' THEN 3 WHEN 'DNF' THEN 4 ELSE 5 END") ->order('datetime_value', 'asc') ->limit(4) ->select(); if($name == 1){ //名字加*号 foreach ($collections as &$v){ $str = $v['player_name']; $strlen = mb_strlen($str,'UTF8'); if($strlen == 2){ $real_name=mb_substr($str,0,1,'UTF8').'*'; } if($strlen > 2){ $tmp_str=mb_substr($str,0,$strlen-2,'UTF8').'*'; $real_name=$tmp_str.mb_substr($str,-1,1,'UTF8'); } $v['player_name']= $real_name; } } // exit; // var_dump($collections);exit; $player_ids = array_column($collections, "player_id"); if(empty($collections)) { return []; } $players = new Players(); $user = new User(); foreach ($collections as $val) { // 获取选手所有积分 $val->integral_sum = $this->rankingModel->where('match_id', 'eq', $match_id) ->where("course", "eq", 1) ->where("player_id", "eq", $val->player_id) ->where("other_round", "neq", "加赛") ->sum("integral"); $user_info = $user->where(['member_number' => $val->player_id])->find(); if (!empty($user_info)) { $player_info = $players->where(['member_id' => $user_info->id])->find(); if (!empty($player_info)) { if (!empty($player_info->style_photo)) { $val->style_photo = $player_info->style_photo; } else { $val->style_photo = $player_info->player_pic; } $val->age = $player_info->age; $val->province = $player_info->province; } else { $val->style_photo = null; $val->age = null; $val->province = null; } } $val->achievement_list = $this->rankingModel->where([ 'match_id' => $val->match_id, 'player_id' => $val->player_id, 'bast_performance' => 1 ])->where("course", "neq", 1) ->field("player_name, fly_num, times, integral, finals_round, course, led_color, channel, grouping, other_round") ->order("other_round", "asc") ->select(); } $sort = array_column($collections, "integral_sum"); array_multisort($sort, SORT_DESC, $collections); // var_dump($collections[0]->toArray());exit; foreach ($collections as $key => $values) { // 根据积分总和把加赛的人分到一个数组里 // var_dump($values->player_id);exit; $extra_series_arr[$values->integral_sum][$values->player_id] = $values; } // var_dump($extra_series_arr);exit; // 如果数组不为空,如果没有加赛,那么肯定一个人一条数据 // 如果积分相同的两个人,肯定数组的长度就会小于4,就会进行下列的查询 if (!empty($extra_series_arr) && count($extra_series_arr) < 4) { $extra_series_ranking = 0; // 循环需要判断加赛的数组 foreach ($extra_series_arr as $value) { // 如果该数组里只有一条数组,那么就说明该选手没有参与加赛 if (count($value) > 1) { unset($fly_three); unset($fly_two); unset($fly_one); unset($fly_dnf); // 对此数组进行排列 查询该几人的加赛数据 $extra_series_player_ids = array_column($value, "player_id"); // 查询加赛的数据 $extra_series_list = $this->rankingModel->where('match_id', 'eq', $match_id) ->whereIn("player_id", $extra_series_player_ids) ->where("course", "eq", 1) ->where("other_round", "eq", "加赛") ->order("achievement", "ASC") ->select(); $player_num = 0; // 因为当时没有用到 CASE fly_num // WHEN '3' THEN 1 // WHEN '2' THEN 2 // WHEN '1' THEN 3 // WHEN 'DNF' THEN 4 // ELSE 5 // END 所以只能循环判断圈数,毕竟他们只上传最优的加赛成绩 // 把3>2>1>DNF的数据取出来 if (!empty($extra_series_list)) { foreach ($extra_series_list as $val) { if ($val->fly_num == 3) { $fly_three[] = $val; $player_num++; } elseif ($val->fly_num == 2) { $fly_two[] = $val; $player_num++; } elseif ($val->fly_num == 2) { $fly_one[] = $val; $player_num++; } elseif ($val->fly_num == "DNF") { $fly_dnf[] = $val; $player_num++; } } $winKey = 0; // 下面取出每个圈数的人,根据 achievement 进行排名 // achievement 当初的计算方式 03:01.00 // 03 * 60 * 100; // 01 * 100; // 按照从小到大的排序 if (!empty($fly_three)) { $sort = array_column($fly_three, "achievement"); array_multisort($sort, SORT_ASC, $fly_three); foreach ($fly_three as $val) { if ($winKey == 0) { $value[$val->player_id]->win_extra_series = 1; } $new_collections[$extra_series_ranking] = $value[$val->player_id]; $extra_series_ranking++; $winKey++; } } if (!empty($fly_two)) { $sort = array_column($fly_two, "achievement"); array_multisort($sort, SORT_ASC, $fly_two); foreach ($fly_two as $val) { if ($winKey == 0) { $value[$val->player_id]->win_extra_series = 1; } $new_collections[$extra_series_ranking] = $value[$val->player_id]; $extra_series_ranking++; $winKey++; } } if (!empty($fly_one)) { $sort = array_column($fly_one, "achievement"); array_multisort($sort, SORT_ASC, $fly_one); foreach ($fly_one as $val) { if ($winKey == 0) { $value[$val->player_id]->win_extra_series = 1; } $new_collections[$extra_series_ranking] = $value[$val->player_id]; $extra_series_ranking++; $winKey++; } } if (!empty($fly_dnf)) { $sort = array_column($fly_dnf, "achievement"); array_multisort($sort, SORT_ASC, $fly_dnf); foreach ($fly_dnf as $val) { if ($winKey == 0) { $value[$val->player_id]->win_extra_series = 1; } $new_collections[$extra_series_ranking] = $value[$val->player_id]; $extra_series_ranking++; $winKey++; } } // 如果为空的成绩,那么就会走这里 if (count($value) != $player_num) { foreach ($value as $val) { if (!in_array($val,$new_collections)) { array_push($new_collections, $val); $extra_series_ranking++; } } } } else { // 如果不存在加赛数据,那么就按照顺序排序 foreach ($value as $val) { $new_collections[$extra_series_ranking] = $value[$val->player_id]; $extra_series_ranking++; } } } else { // 走到这里,说明他没有加赛,按照积分从高到低排序的顺序排序 $new_collections[$extra_series_ranking] = array_shift($value); $extra_series_ranking++; } } $collections = $new_collections; } // 获取所有选手的决赛记录 $collections['integral_list'] = $this->rankingModel->where('match_id', 'eq', $match_id) ->where("course", "eq", 1) ->whereIn("player_id", $player_ids) ->field("player_name, player_id, match_id, integral, finals_round, fly_num, times, other_round, other_round as finals_round") ->order("other_round") ->select(); // var_dump($collections['integral_list']);exit; foreach ($collections['integral_list'] as $k => &$v){ // $v['player_name'] = '金志浩'; // var_dump($v['player_name']); } return $collections; } public function getRankFinalsold($match_id) { $collection = $this->rankingModel->where('match_id', 'eq', $match_id) ->where("course", "eq", 1) ->field("player_name, player_id, match_id, sum(integral) as integrals") ->order("integrals", "DESC") ->group("player_name") ->select(); if (count($collection) < 4) { foreach ($collection as $value) { $finalsId[] = $value->player_id; } $collections = $this->rankingModel->where('match_id', 'eq', $match_id) ->where("course", "eq", 4) ->whereNotIn("player_id", $finalsId) ->field("player_name, player_id, match_id, sum(integral) as integrals") ->order("integrals", "DESC") ->group("player_name") ->select(); $collection = array_merge($collection, $collections); } $players = new Players(); $user = new User(); foreach ($collection as $values) { $user_info = $user->where(['member_number' => $values->player_id])->find(); if (!empty($user_info)) { $player_info = $players->where(['member_id' => $user_info->id])->find(); if (!empty($player_info)) { if (!empty($player_info->style_photo)) { $values->style_photo = $player_info->style_photo; } else { $values->style_photo = $player_info->player_pic; } $values->age = $player_info->age; $values->province = $player_info->province; } else { $values->style_photo = null; $values->age = null; $values->province = null; } } $values->achievement_list = $this->rankingModel->where([ 'match_id' => $values->match_id, 'player_id' => $values->player_id, 'player_name' => $values->player_name, ]) ->order("finals_round", "ASC") ->field("player_name, fly_num, times, integral, finals_round")->select(); } return $collection; } /** * 获取单个飞手的本次比赛所有记录 * @Author:Soar * @Time:2023/11/23 10:45 * @param $match_id 赛事ID * @param $player_id 飞手ID * @return void */ public function getPlayerRanking($match_id, $player_id) { // 获取决赛记录 $collection = $this->rankingModel->where('match_id', 'eq', $match_id) ->where("player_id", "eq", $player_id) ->where("course", "eq", 1) ->field("player_name, player_id, match_id, sum(integral) as integrals, other_round") ->order("integrals", "DESC") ->group("player_name") ->select(); // 如果没参加决赛 就获取所有参赛记录 $players = new Players(); $user = new User(); if (empty($collection)) { $user_info = $user->where(['member_number' => $player_id])->find(); if (!empty($user_info)) { $player_info = $players->where(['member_id' => $user_info->id])->find(); if (empty($player_info)) { return null; } $playerInfo['player_id'] = $user_info->member_number; if (!empty($player_info->style_photo)) { $playerInfo['style_photo'] = $player_info->style_photo; } else { $playerInfo['style_photo'] = $player_info->player_pic; } $playerInfo['player_name'] = $player_info->real_name; $playerInfo['age'] = $player_info->age; $playerInfo['province'] = $player_info->province; $playerInfo['achievement_list'] = $this->rankingModel->where([ 'match_id' => $match_id, 'player_id' => $user_info->member_number, ])->order("finals_round", "ASC") ->field("player_name, fly_num, times, integral, finals_round, course, other_round")->select(); return $playerInfo; } } $user_info = $user->where(['member_number' => $player_id])->find(); if (!empty($user_info)) { foreach ($collection as $val) { $player_info = $players->where(['member_id' => $user_info->id])->find(); if (empty($player_info)) { return null; } if (!empty($player_info->style_photo)) { $val->style_photo = $player_info->style_photo; } else { $val->style_photo = $player_info->player_pic; } $val->age = $player_info->age; $val->province = $player_info->province; $val->achievement_list = $this->rankingModel->where([ 'match_id' => $match_id, 'player_id' => $user_info->member_number, ])->where("course", "<>", '1') ->order("finals_round", "ASC") ->field("player_name, fly_num, times, integral, finals_round, course")->select(); return $val; } } } /** * 根据飞手ID、赛事ID、赛程获取飞手比赛记录 * @Author:Soar * @Time:2023/12/12 13:19 * @param int $match_id 赛事id * @param int $course 赛程 * @param int $player_id 飞手id * @return void */ public function getRoundPlayer(int $match_id, int $course, int $player_id) { $res['other'] = $this->rankingModel ->where("match_id", $match_id) ->where("course", $course) ->where("player_id", $player_id) //->orderRaw("CASE fly_num // WHEN '3' THEN 1 // WHEN '2' THEN 2 // WHEN '1' THEN 3 // WHEN 'DNF' THEN 4 // ELSE 5 // END") ->order('other_round', 'asc') ->field("player_name, fly_num, times, integral, finals_round, course, other_round") ->select(); $res['best'] = $this->rankingModel ->where("match_id", $match_id) ->where("course", $course) ->where("player_id", $player_id) ->where("bast_performance", 1) ->field("player_name, fly_num, times, integral, finals_round, course") ->find(); $players = new Players(); $user = new User(); $user_info = $user->where(['member_number' => $player_id])->find(); if (!empty($user_info)) { $player_info = $players->where(['member_id' => $user_info->id])->find(); if (!empty($player_info)) { $res['player_info']['age'] = $player_info->age; $res['player_info']['province'] = $player_info->province; } } return $res; } /** * 首页报名查询飞手所有成绩接口 * @Author:Soar * @Time:2023/12/18 11:17 * @param $match_id * @param $course * @return void */ public function getIndexRanking($match_id, $course) { $list = $this->rankingModel ->where("match_id", $match_id) ->where("course", $course) ->where("bast_performance", 1) ->field("player_name, fly_num, times, integral, finals_round, course, custom_sorting, group_score, grouping, player_id") ->select(); if (!empty($list[0]->custom_sorting)) { $last_ages = array_column($list,'custom_sorting'); array_multisort($last_ages ,SORT_ASC,$list); } return $list; } public function getIndexRankingScore($match_id, $course) { $list = $this->rankingModel ->where("match_id", $match_id) ->where("course", $course) ->where("bast_performance", 1) ->field("player_name, fly_num, times, integral, finals_round, course, custom_sorting, group_score, grouping, player_id") ->order("group_score", "ASC") ->select(); if (!empty($list[0]->custom_sorting)) { $last_ages = array_column($list,'custom_sorting'); array_multisort($last_ages ,SORT_ASC,$list); } return $list; } public function getIndexPlayerRanking ($match_id, $player_id) { // 获取决赛记录 $collection = $this->rankingModel->where('match_id', 'eq', $match_id) ->where("player_id", "eq", $player_id) ->where("course", "eq", 1) ->field("player_name, player_id, match_id, sum(integral) as integrals, other_round") ->order("integrals", "DESC") ->group("player_name") ->select(); // 如果没参加决赛 就获取所有参赛记录 $players = new Players(); $user = new User(); if (empty($collection)) { $user_info = $user->where(['member_number' => $player_id])->find(); if (!empty($user_info)) { $player_info = $players->where(['member_id' => $user_info->id])->find(); if (empty($player_info)) { return null; } $playerInfo['player_id'] = $user_info->member_number; if (!empty($player_info->style_photo)) { $playerInfo['style_photo'] = $player_info->style_photo; } else { $playerInfo['style_photo'] = $player_info->player_pic; } $playerInfo['player_name'] = $player_info->real_name; $playerInfo['age'] = $player_info->age; $playerInfo['province'] = $player_info->province; $playerInfo['achievement_list'] = $this->rankingModel->where([ 'match_id' => $match_id, 'player_id' => $user_info->member_number, ])->order("finals_round", "ASC") ->field("player_name, fly_num, times, integral, finals_round, course, other_round")->select(); return $playerInfo; } } $user_info = $user->where(['member_number' => $player_id])->find(); if (!empty($user_info)) { foreach ($collection as $val) { $player_info = $players->where(['member_id' => $user_info->id])->find(); if (empty($player_info)) { return null; } if (!empty($player_info->style_photo)) { $val->style_photo = $player_info->style_photo; } else { $val->style_photo = $player_info->player_pic; } $val->age = $player_info->age; $val->province = $player_info->province; $val->achievement_list = $this->rankingModel->where([ 'match_id' => $match_id, 'player_id' => $user_info->member_number, ])->where("course", "<>", '1')->where("bast_performance", 1) ->order("finals_round", "ASC") ->field("player_name, fly_num, times, integral, finals_round, course")->select(); return $val; } } } public function getOneRanking(int $match_id, int $player_id, int $course) { return $this->rankingModel ->where('match_id', 'eq', $match_id) ->where("course", $course) ->where("player_id", $player_id) ->where("bast_performance", 1) ->field("player_id, match_id, player_name, grouping, times, fly_num") ->find(); } public function getFinalsIntegral(int $match_id, int $player_id) { return $this->rankingModel ->where('match_id', 'eq', $match_id) ->where("course", 1) ->where("player_id", $player_id) ->field("sum(integral) as sum_integral, player_id, match_id, player_name, grouping") ->group("player_id") ->find(); } public function getPlayerInfo(int $player_id) { $user = new User(); $user_info = $user ->alias("a") ->where("a.member_number", $player_id) ->join("peewee_players b", "a.id = b.member_id", "LEFT") ->find()->toArray(); $player['age'] = $user_info['age']; $player['player_id'] = $user_info['member_number'] ? $user_info['member_number'] : " "; $player['province'] = $user_info['province']; $player['city'] = $user_info['city']; $player['district'] = $user_info['district']; $player['birthday'] = $user_info['birthday']; $player['name'] = $user_info['real_name']; $player['gender'] = $user_info['gender']; $player['member_id'] = $user_info['member_id']; $player['player_pic'] = $user_info['style_photo'] ? $user_info['style_photo'] : $user_info['player_pic']; // if (!empty($player['player_pic'])) { // $player['player_pic'] = config("upload.cdnurl") ? config("upload.cdnurl").$player['player_pic'] : config("upload.uploadurl").$player['player_pic']; // } return $player; } public function getSortRanking ($player_ids, $match_id, $player_id, $sort, $course) { if ($course == 1) { $sort_list = $this->rankingModel ->where("match_id", $match_id) ->where("course", $course) ->whereIn("player_id", $player_ids) ->group("player_id") ->field("player_id, match_id, player_name, led_color, channel, sum(integral) as sum_integral, grouping") ->order("sum_integral", "DESC") ->select(); } else { $sort_list = $this->rankingModel ->where("match_id", $match_id) ->where("bast_performance", 1) ->where("course", $course) ->whereIn("player_id", $player_ids) ->orderRaw("CASE fly_num WHEN '3' THEN 1 WHEN '2' THEN 2 WHEN '1' THEN 3 WHEN 'DNF' THEN 4 ELSE 5 END") ->order('datetime_value', 'asc') ->select(); } $sort_list = collection($sort_list)->toArray(); $ids = array_column($sort_list, "player_id"); if (in_array($player_id, $ids)) { foreach ($sort_list as $value) { if ($player_id != $value['player_id']) { ++$sort; } else { return ++$sort; } } } else { foreach ($player_ids as $key => $val) { foreach ($ids as $value) { if ($val == $value) { unset($player_ids[$key]); } } } sort($player_ids); $sort = count($ids) + $sort; switch ($course) { case 1: $course = 4; break; case 4: $course = 8; break; case 8: $course = 16; break; case 16: $course = 32; break; } return $this->getSortRanking($player_ids, $match_id, $player_id, $sort, $course); } } /** * 获取最优数据 * @Author:Soar * @Time:2023/12/22 15:20 * @param int $match_id * @param int $player_id * @return array */ public function getPlayerBast(int $match_id, int $player_id, $user) { // 获取参赛所有选手 $player_ids = $this->rankingModel ->where('match_id', 'eq', $match_id) ->where("course", 32) ->where("bast_performance", 1) ->field("player_id") ->select(); // 先判断是否参与比赛 $isNull = $this->rankingModel->whereNull("times") ->where("course", 32) ->where('match_id', 'eq', $match_id) ->where("bast_performance", 1) ->where("player_id", $player_id) ->find(); if ($isNull) { $bast_info['sort'] = 0; return $bast_info; } $player_ids = collection($player_ids)->toArray(); $ids = array_column($player_ids, "player_id"); // 获取决赛的数据 $sort = $this->getSortRanking($ids, $match_id, $player_id, 0, 1); // $finals_info = collection($this->getRankFinals($match_id))->toArray(); // unset($finals_info['integral_list']); // 排名之前查询是否有加赛 // $bast_info['course'] = "决赛"; // $bast_info['sort'] = array_search($player_id, array_column($finals_info, 'player_id')) + 1; $bast_info['sort'] = $sort; //$array_column = array_column($finals_info, "player_id"); /* if (!in_array($player_id, $array_column)) { $bast = $this->rankingModel ->where('match_id', 'eq', $match_id) ->where("player_id", $player_id) ->where("bast_performance", 1) ->order('id', "DESC") ->find(); $bast_info['course'] = $bast->course; $bast_info['sort'] = $bast->custom_sorting ? $bast->custom_sorting : $bast->group_score; } */ // 查询是否属于青年组 $today = date('Y-m-d'); // 当前日期 $previousDate = date('Y-01-01', strtotime('-15 years', strtotime($today))); // 十五年前的日期 if ($previousDate <= $user['birthday']) { // 查询青年组符合年龄的 $bastYoung = $this->getYoungSort($previousDate, $match_id, $player_id, true); $bast_info['young_sort'] = $bastYoung; } return $bast_info; } public function getYoungSort($date, $match_id, $player_id, $isApi = false) { // 获取所有这个年龄段的飞手 $players = new Players(); // 按照生日日期获取所有参赛选手 $players_list = $players ->alias("a") ->join('user users', 'users.id = a.member_id', 'LEFT') ->where("a.birthday", ">=", $date) ->field("a.id, users.member_number, a.birthday") ->order("a.birthday") ->select(); $ids = array_column($players_list, "id"); // 获取所有参赛选手 $matchContestant = new \app\common\model\MatchContestant(); // 去报名表查询所有参赛的飞手 $match_list = $matchContestant->whereIn("player_id", $ids) ->where("match_id", "eq", $match_id) ->select(); // 根据参赛选手 加上player_member_id foreach ($match_list as $vals) { foreach ($players_list as $values) { if ($vals->player_id == $values->id) { $vals->player_member_id = $values->member_number; break; } } } $member_number_ids = array_column($match_list, "player_member_id"); // 根据User表中的 member_number 获取比赛信息 权重 决赛 > 半决赛 > 8强 > 16强 > 32强 > 预选赛 // 决赛数据 $rankingService = new \app\index\service\RankingService(); $achievement['finals'] = $rankingService->getRankFinals($match_id); if (empty($achievement['finals'])) { if ($isApi) { return []; } $this->error("决赛暂未结束"); } unset($achievement['finals']['integral_list']); // 遍历查询是否有 foreach ($achievement['finals'] as $key => $item) { if (!in_array($item->player_id, $member_number_ids)) { unset($achievement['finals'][$key]); } else { unset($member_number_ids[array_search($item->player_id, $member_number_ids)]); } } $toArray = collection($achievement['finals'])->toArray(); $array_column = array_column($toArray, "player_id"); if (in_array($player_id,$array_column )) { return array_search($player_id, array_column($toArray, 'player_id')) + 1; } // 初始化model $matchRanking = new MatchRanking(); // 查询 进入半决赛的成绩 $achievement['semifinal'] = $matchRanking->whereIn("player_id", $member_number_ids) ->where("match_id", "eq", $match_id) ->where("bast_performance", 1) ->where("course", "eq", 4) ->order("group_score") ->select(); $toArray = collection($achievement['semifinal'])->toArray(); $array_column = array_column($toArray, "player_id"); if (in_array($player_id,$array_column )) { return array_search($player_id, array_column($toArray, 'player_id')) + 1; } foreach ($achievement['semifinal'] as $val) { unset($member_number_ids[array_search($val->player_id, $member_number_ids)]); } // 查询 进入8强的成绩 $achievement['final_eight'] = $matchRanking->whereIn("player_id", $member_number_ids) ->where("match_id", "eq", $match_id) ->where("bast_performance", 1) ->where("course", "eq", 8) ->order("group_score") ->select(); $toArray = collection($achievement['final_eight'])->toArray(); $array_column = array_column($toArray, "player_id"); if (in_array($player_id,$array_column )) { return array_search($player_id, array_column($toArray, 'player_id')) + 1; } foreach ($achievement['final_eight'] as $val) { unset($member_number_ids[array_search($val->player_id, $member_number_ids)]); } // 查询 进入16强数据 $achievement['final_sixteen'] = $matchRanking->whereIn("player_id", $member_number_ids) ->where("match_id", "eq", $match_id) ->where("bast_performance", 1) ->where("course", "eq", 16) ->order("group_score") ->select(); $toArray = collection($achievement['final_sixteen'])->toArray(); $array_column = array_column($toArray, "player_id"); if (in_array($player_id,$array_column )) { return array_search($player_id, array_column($toArray, 'player_id')) + 1; } foreach ($achievement['final_sixteen'] as $val) { unset($member_number_ids[array_search($val->player_id, $member_number_ids)]); } // 查询 进入32强数据 $achievement['final_thirty_two'] = $matchRanking->whereIn("player_id", $member_number_ids) ->where("match_id", "eq", $match_id) ->where("bast_performance", 1) ->where("course", "eq", 32) ->order("group_score") ->select(); $toArray = collection($achievement['final_thirty_two'])->toArray(); $array_column = array_column($toArray, "player_id"); if (in_array($player_id,$array_column )) { return array_search($player_id, array_column($toArray, 'player_id')) + 1; } foreach ($achievement['final_thirty_two'] as $val) { unset($member_number_ids[array_search($val->player_id, $member_number_ids)]); } return 0; } /** * 计时换算成毫秒 * @Created by PhpStorm. * @Author:Soar * @Time:2023/11/15 15:11 * @param $times * @return float|int|mixed|string */ private function getAllMs($times) { $minute_ms = 0; $second_ms = 0; $ms = 0; // 截取最后的毫秒 $allTime = explode(".", $times); if (count($allTime) != 2) { $this->error("成绩格式有误!"); } $ms = $allTime[1]; // 截取分秒 $minute = explode(":", $allTime[0]); if (count($minute) != 2) { $this->error("成绩格式有误!"); } if ($minute[0] != 00) { // 如果第一位不是 00 则代表每分钟 $minute_ms = $minute[0] * 60 * 100; } if ($minute[1] != 00) { $second_ms = $minute[1] * 100; } return $ms + $second_ms + $minute_ms; } }