From 8481d8ef0ca6df4a4a785a8df4380c182f2438ba Mon Sep 17 00:00:00 2001 From: xiadc <251308692@qq.com> Date: Tue, 20 May 2025 17:25:44 +0800 Subject: [PATCH] refactor(shopro): game --- addons/shopro/controller/zy/Game.php | 120 ++++++++++++++++++--------- 1 file changed, 80 insertions(+), 40 deletions(-) diff --git a/addons/shopro/controller/zy/Game.php b/addons/shopro/controller/zy/Game.php index 9d6e82b..0205f78 100644 --- a/addons/shopro/controller/zy/Game.php +++ b/addons/shopro/controller/zy/Game.php @@ -2,8 +2,13 @@ namespace addons\shopro\controller\zy; +use think\Db; +use think\Exception; use app\admin\model\zy\Club; use app\admin\model\zy\Stadium; +use think\exception\PDOException; +use app\admin\model\zy\game\GameJoin; +use think\exception\ValidateException; use app\admin\model\zy\game\Participant; @@ -73,47 +78,82 @@ class Game extends Base public function getMacth() { $params = $this->request->param(); - $game = $this->model->get($params['id'] ?? NULL); - if (empty($game)) { - $this->error('比赛不存在'); - } - $participant = Participant::where('game_id', $game['id'])->where('status', 1)->select(); - - - if ($game['team_type'] == 1) { //双打 - // 转转 4-16 每个人与其他人各搭档1次,决出个人排名 人数 4 ≦ n ≦ 16 (Default:8) - // 轮数 3 ≦ m<n (Default:7) 报名费 0 ≦ m ≦ 10 元 (Default: 5) - // 由前几名按比例瓜分 (可调 Default:40%/30%/20%/10%) - // 混双转 4-32 - // (偶数) 每男与每女各搭档1次,分别决出男女排名 人数 4 ≦ n ≦ 32 (Default:16) - // 轮数2 ≦ m ≦ n/2 (Default:8) 报名费 0 ≦ m ≦ 10 元 (Default: 5) - // 由前几名按比例瓜分 (可调 Default:40%/30%/20%/10%) - // 固搭转 4-32 - // (偶数) 固定组合,分别与其他组合对战一次,决出组合排名 人数 4 ≦ n ≦ 32 (Default:16) - // 轮数 2 ≦ m ≦ n/2-1 (Default:7) 报名费 0 ≦ m ≦ 10 元 (Default: 5) - // 由前几名按比例瓜分 (可调 Default:40%/30%/20%/10%) - // 分区转 4-32 - // (偶数) 分为AB两区,A区与B区各搭档1次,分别决出AB区排名 人数 4 ≦ n ≦ 32 (Default:16) - // 轮数2 ≦ m ≦ n/2 (Default:8) 报名费 0 ≦ m ≦ 10 元 (Default: 5) - // 由前几名按比例瓜分 (可调 Default:40%/30%/20%/10%) - // 擂台赛 8-44 由擂主决定出战组合,攻擂者按组合报名(不重复报名,但可兼项) 擂主人数 2 ≦ k ≦ 4 (Default:2) - // 总攻擂数4 ≦ n ≦ 5k(Default:8) 攻擂报名费 0 ≦ m ≦ 10 (Default:5) - // 擂主报名费 2n/k (不可调) - // 攻擂者赢局获得2m元(不可调) - // 由擂主分摊盈亏 - // 守擂赛 4-32 - // (偶数) 选手组合报名(不可重复报名),抽签决定对战顺序,相邻顺序对战,连赢m局进入决赛,决赛为淘汰赛,决出冠亚季 人数 4 ≦ n ≦ 32 (Default:16) - // 连赢 1 ≦ m ≦ 3 (Default:2) 报名费0 ≦ k ≦ 10 (Default:5) - // 由前几名按比例瓜分 (可调 Default:40%/30%/20%/10%) - if ($game['rule_type'] == 1) { //转转 - foreach ($participant as $key => $value) { - - } + Db::startTrans(); + try { + $game = $this->model->get($params['id'] ?? NULL); + if (empty($game)) { + $this->error('比赛不存在'); } - } elseif ($game['team_type'] == 2) { //单打 - - } elseif ($game['team_type'] == 3) { //团队 - + $dataTime = date('Y-m-d H:i:s'); + $startTime = $game['date'] . ' ' . $game['start_time']; + if ($dataTime < $startTime) { + $this->error('比赛时间未开始'); + } + $endTime = $game['date'] . ' ' . $game['end_time']; + if ($dataTime > $endTime) { + $this->error('比赛时间已结束'); + } + $participant = Participant::where('game_id', $game['id'])->where('status', 1)->select(); + if (empty($participant)) { + $join = GameJoin::where('game_id', $game['id'])->where('status', 1)->select(); + $order = 1; + $participant = []; + foreach ($join as $j) { + $users = json($j['users'], true); + foreach ($users as $u) { + $participant[] = [ + 'user_id' => $u['user_id'], + 'gender' => $u['gender'], + 'avatar' => $u['avatar'], + 'name' => $u['name'], + 'game_join_id' => $j['id'], + 'game_id' => $game['id'], + 'order' => $order, + 'status' => 1, + ]; + $order++; + } + } + $this->model->saveAll($participant); + } + if ($game['team_type'] == 1) { //双打 + // 转转 4-16 每个人与其他人各搭档1次,决出个人排名 人数 4 ≦ n ≦ 16 (Default:8) + // 轮数 3 ≦ m<n (Default:7) 报名费 0 ≦ m ≦ 10 元 (Default: 5) + // 由前几名按比例瓜分 (可调 Default:40%/30%/20%/10%) + // 混双转 4-32 + // (偶数) 每男与每女各搭档1次,分别决出男女排名 人数 4 ≦ n ≦ 32 (Default:16) + // 轮数2 ≦ m ≦ n/2 (Default:8) 报名费 0 ≦ m ≦ 10 元 (Default: 5) + // 由前几名按比例瓜分 (可调 Default:40%/30%/20%/10%) + // 固搭转 4-32 + // (偶数) 固定组合,分别与其他组合对战一次,决出组合排名 人数 4 ≦ n ≦ 32 (Default:16) + // 轮数 2 ≦ m ≦ n/2-1 (Default:7) 报名费 0 ≦ m ≦ 10 元 (Default: 5) + // 由前几名按比例瓜分 (可调 Default:40%/30%/20%/10%) + // 分区转 4-32 + // (偶数) 分为AB两区,A区与B区各搭档1次,分别决出AB区排名 人数 4 ≦ n ≦ 32 (Default:16) + // 轮数2 ≦ m ≦ n/2 (Default:8) 报名费 0 ≦ m ≦ 10 元 (Default: 5) + // 由前几名按比例瓜分 (可调 Default:40%/30%/20%/10%) + // 擂台赛 8-44 由擂主决定出战组合,攻擂者按组合报名(不重复报名,但可兼项) 擂主人数 2 ≦ k ≦ 4 (Default:2) + // 总攻擂数4 ≦ n ≦ 5k(Default:8) 攻擂报名费 0 ≦ m ≦ 10 (Default:5) + // 擂主报名费 2n/k (不可调) + // 攻擂者赢局获得2m元(不可调) + // 由擂主分摊盈亏 + // 守擂赛 4-32 + // (偶数) 选手组合报名(不可重复报名),抽签决定对战顺序,相邻顺序对战,连赢m局进入决赛,决赛为淘汰赛,决出冠亚季 人数 4 ≦ n ≦ 32 (Default:16) + // 连赢 1 ≦ m ≦ 3 (Default:2) 报名费0 ≦ k ≦ 10 (Default:5) + // 由前几名按比例瓜分 (可调 Default:40%/30%/20%/10%) + if ($game['rule_type'] == 1) { //转转 + foreach ($participant as $key => $value) { + } + } + } elseif ($game['team_type'] == 2) { //单打 + + } elseif ($game['team_type'] == 3) { //团队 + + } + Db::commit(); + } catch (ValidateException | PDOException | Exception $e) { + Db::rollback(); + $this->error($e->getMessage(), $e); } $this->success('Success', ['list' => $participant]);