feat(zy): 实现比赛报名和自动分组功能
- 新增比赛报名逻辑,支持单双打和团队赛 - 实现自动分组算法,根据比赛规则生成对阵表 - 添加下一轮对阵安排功能,支持淘汰赛制 - 优化比赛结果处理,自动计算排名和得分 - 新增参赛人员列表接口,支持多种查询条件
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
<?php
|
||||
|
||||
namespace format;
|
||||
|
||||
use app\admin\model\zy\game\Game;
|
||||
/*
|
||||
赛制文件
|
||||
|
||||
@@ -17,12 +19,128 @@ interface GameInterface
|
||||
// 赛制说明
|
||||
public function describe(): string;
|
||||
|
||||
// 首轮对阵安排
|
||||
public function match($game, $users): array;
|
||||
|
||||
// 下一轮对阵安排
|
||||
public function next($game, $math): array;
|
||||
/**首轮对阵安排
|
||||
*
|
||||
入参:
|
||||
$game = Array
|
||||
(
|
||||
[id] => 1 //比赛id
|
||||
[pid] => 0 //主比赛id
|
||||
[act_id] => 1 //活动id
|
||||
[gym_id] => 1 //球馆id
|
||||
[club_id] => 4 //俱乐部id
|
||||
[name] => 聚点第八届年终团体赛 //比赛名称
|
||||
[team_type] => 1 //团队类型,1双打,2单打,3团队
|
||||
[rule_type] => 7 //规则类型,1八人转,2超八转,3混双转,4固搭转,5固定擂,6活动擂,7转转,8分区转,9擂台赛,10守擂赛,11追分赛,12固搭追分赛,13大循环群内赛,14两队PK赛,15战队淘汰赛,16单项淘汰赛,17分区循环淘汰赛
|
||||
[date] => 2025-05-17 //比赛日期
|
||||
[week] => 2 //周几
|
||||
[start_time] => 09:00:00 //开始时间
|
||||
[end_time] => 12:30:00 //结束时间
|
||||
[public_time] => 2025-05-02 09:00:00 //公布时间
|
||||
[join_start_time] => 2025-05-03 09:00:00 //报名开始时间
|
||||
[join_end_time] => 2025-05-04 09:00:00 //报名结束时间
|
||||
[quit_time] => 2025-05-04 08:00:00 //免费退坑时间
|
||||
[game_time] => 3.5 //比赛时长
|
||||
[address] => 泰新路88号 //地址
|
||||
[field] => 22 //场地号
|
||||
[position] => //位置
|
||||
[cost] => {"type":"1","man":"84","woman":"56","extra":"10","server":"1"} //费用
|
||||
[limit_num] => 30 //报名人数限制
|
||||
[join_num] => 0 //已报名人数
|
||||
[attention] => 0 //关注人数
|
||||
[status] => 0 //状态,-1取消,0未开始,1报名中,2进行中,3已结束
|
||||
[describe] => 活动介绍 //介绍
|
||||
[img] => /assets/img/qrcode.png //图片
|
||||
[game_rule] => 比赛规则 //规则
|
||||
[is_public] => 1 //是否公开,0否,1是
|
||||
[bring_num] => 2 //可带人数
|
||||
[is_bring] => 1 //是否可带人,0否,1是
|
||||
[referee] => 1,2 //裁判用户id
|
||||
[create_time] => 2025-04-30 10:45:58
|
||||
[update_time] => 2025-05-26 10:34:14
|
||||
)
|
||||
$users = Array(
|
||||
[
|
||||
[id] => 1 // 比赛参与id
|
||||
[user_id] => 1 //用户id
|
||||
[name] => Yam Lai Yan //昵称
|
||||
[avatar] => /assets/img/qrcode.png //头像
|
||||
[gender] => 0 //性别,0女,1男
|
||||
[game_join_id] => 1 //报名记录id
|
||||
[game_id] => 1 //比赛id
|
||||
[team] => //本次比赛团队
|
||||
[order] => 1 //本次比赛顺序
|
||||
[rank] => 0 //本次比赛排名
|
||||
[mark] => //备注
|
||||
[status] => 1 //状态,0候补,1正常,2退坑
|
||||
[signin] => 0 //签到状态,0未签到,1已签到
|
||||
[score] => 0 //得分
|
||||
[net_score] => 0 //净得分
|
||||
[win] => 0 //胜局
|
||||
[create_time] => 2025-04 - 24 05: 35:00
|
||||
[update_time] => 2025-05 - 26 15:08: 55
|
||||
],
|
||||
)
|
||||
出参:
|
||||
return $math = Array(
|
||||
[
|
||||
[gym_id] => 1 //球馆id
|
||||
[club_id] => 4 //俱乐部id
|
||||
[act_id] => 1 //活动id
|
||||
[game_id] => 1 //比赛id
|
||||
[level] => 1 //轮次
|
||||
[turn] => 1 //场次
|
||||
[teamA] => {"name":"team01","user":[{"user_id":1,"gender":0,"avatar":"\/assets\/img\/qrcode.png","name":"Yam Lai Yan"},{"user_id":2,"gender":1,"avatar":"\/assets\/img\/qrcode.png","name":"Yuen Wai San"}]} //队伍A
|
||||
[teamB] => {"name":"team23","user":[{"user_id":3,"gender":0,"avatar":"xjgH6E5VkQ","name":"Mo Ming Sze"},{"user_id":4,"gender":1,"avatar":"hSuH5AZVxt","name":"Chan Ka Keung"}]} //队伍B
|
||||
],
|
||||
)
|
||||
*/
|
||||
public function match(Game $game, array $users): array;
|
||||
|
||||
|
||||
/**下一轮对阵安排
|
||||
*
|
||||
入参:
|
||||
$maths = Array(
|
||||
[
|
||||
[id] => 1
|
||||
[gym_id] => 1
|
||||
[club_id] => 4
|
||||
[act_id] => 1
|
||||
[game_id] => 1
|
||||
[level] => 1
|
||||
[turn] => 1
|
||||
[teamA] => {"name":"team01","user":[{"user_id":1,"gender":0,"avatar":"\/assets\/img\/qrcode.png","name":"admin1"},{"user_id":2,"gender":1,"avatar":"\/assets\/img\/qrcode.png","name":"admin2"}]}
|
||||
[teamB] => {"name":"team23","user":[{"user_id":3,"gender":0,"avatar":"\/assets\/img\/qrcode.png","name":"admin3"},{"user_id":4,"gender":1,"avatar":"\/assets\/img\/qrcode.png","name":"admin4"}]}
|
||||
[round1] => {"addedA":"3","addedB":"0","scoreA":"15","scoreB":"24"}
|
||||
[round2] => {"addedA":"3","addedB":"0","scoreA":"15","scoreB":"24"}
|
||||
[round3] => {"addedA":"3","addedB":"0","scoreA":"15","scoreB":"24"}
|
||||
[scoreA] => 0
|
||||
[scoreB] => 3
|
||||
[winner] => {"name":"team23","user":[{"user_id":3,"gender":0,"avatar":"\/assets\/img\/qrcode.png","name":"admin3"},{"user_id":4,"gender":1,"avatar":"\/assets\/img\/qrcode.png","name":"admin4"}]}
|
||||
[create_time] => 2025-05-30 15:24:28
|
||||
[update_time] => 2025-05-30 15:54:34
|
||||
],
|
||||
)
|
||||
$level 设定为第几轮数
|
||||
出参:
|
||||
return $math = Array(
|
||||
[
|
||||
[gym_id] => 1 //球馆id
|
||||
[club_id] => 4 //俱乐部id
|
||||
[act_id] => 1 //活动id
|
||||
[game_id] => 1 //比赛id
|
||||
[level] => 1 //轮次
|
||||
[turn] => 1 //场次
|
||||
[teamA] => {"name":"team01","user":[{"user_id":1,"gender":0,"avatar":"\/assets\/img\/qrcode.png","name":"Yam Lai Yan"},{"user_id":2,"gender":1,"avatar":"\/assets\/img\/qrcode.png","name":"Yuen Wai San"}]} //队伍A
|
||||
[teamB] => {"name":"team23","user":[{"user_id":3,"gender":0,"avatar":"xjgH6E5VkQ","name":"Mo Ming Sze"},{"user_id":4,"gender":1,"avatar":"hSuH5AZVxt","name":"Chan Ka Keung"}]} //队伍B
|
||||
],
|
||||
)
|
||||
如return $math 为空则比赛结束
|
||||
*/
|
||||
public function nextLevel(Game $game, array $maths, int $level): array;
|
||||
|
||||
// 奖金分配
|
||||
public function prize($rank): array;
|
||||
public function prize(array $rank): array;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user