| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183 |
- <?php
- namespace app\common\model;
- /**
- * 游戏多端绑定关系表(游戏组管理)
- * @author Administrator
- */
- class GameBand extends \think\Model
- {
- protected $pk = 'id';
- protected $table = 'nw_game_band';
- protected $dateFormat = false; //时间戳格式不自动转换
- // 状态常量
- const STATUS_DISABLE = 0; // 禁用
- const STATUS_ENABLE = 1; // 启用
- /**
- * 获取分组列表(关联游戏名称,使用 ThinkPHP 分页)
- *
- * @param array $filters keyword, id, game_id, status, platform
- */
- public function getGroupList($filters = [])
- {
- if (!is_array($filters)) {
- $filters = ['keyword' => (string)$filters];
- }
- $keyword = trim($filters['keyword'] ?? '');
- $groupId = (int)($filters['id'] ?? 0);
- $gameId = (int)($filters['game_id'] ?? 0);
- $status = $filters['status'] ?? '';
- $platform = trim($filters['platform'] ?? '');
- $query = $this->alias('gb')
- ->field('gb.*,
- ag.name as android_game_name,
- ig.name as ios_game_name,
- hg.name as h5_game_name')
- ->join('cy_game ag', 'ag.id = gb.android_game_id', 'LEFT')
- ->join('cy_game ig', 'ig.id = gb.ios_game_id', 'LEFT')
- ->join('cy_game hg', 'hg.id = gb.h5_game_id', 'LEFT')
- ->order('gb.id desc');
- if ($groupId > 0) {
- $query->where('gb.id', $groupId);
- }
- if ($gameId > 0) {
- $query->where(function ($q) use ($gameId) {
- $q->where('gb.android_game_id', $gameId)
- ->whereOr('gb.ios_game_id', $gameId)
- ->whereOr('gb.h5_game_id', $gameId);
- });
- }
- if ($status !== '' && $status !== null) {
- $query->where('gb.status', (int)$status);
- }
- switch ($platform) {
- case 'android':
- $query->where('gb.android_game_id', '>', 0);
- break;
- case 'ios':
- $query->where('gb.ios_game_id', '>', 0);
- break;
- case 'h5':
- $query->where('gb.h5_game_id', '>', 0);
- break;
- case 'unbound':
- $query->where('gb.android_game_id', 0)
- ->where('gb.ios_game_id', 0)
- ->where('gb.h5_game_id', 0);
- break;
- }
- if ($keyword !== '') {
- if (ctype_digit($keyword)) {
- $query->where(function ($q) use ($keyword) {
- $q->where('gb.id', (int)$keyword)
- ->whereOr('gb.android_game_id', (int)$keyword)
- ->whereOr('gb.ios_game_id', (int)$keyword)
- ->whereOr('gb.h5_game_id', (int)$keyword)
- ->whereOr('gb.game_name|ag.name|ig.name|hg.name', 'like', "%{$keyword}%");
- });
- } else {
- $query->where('gb.game_name|ag.name|ig.name|hg.name', 'like', "%{$keyword}%");
- }
- }
- $list = $query->paginate(20, false, ['query' => request()->param()]);
- $list->each(function ($item) {
- $item['display_name'] = self::resolveDisplayName($item);
- $item['bind_count'] = self::countBindings($item);
- return $item;
- });
- return $list;
- }
- /**
- * 获取单个分组详情
- */
- public function getGroupDetail($id)
- {
- $detail = $this->alias('gb')
- ->field('gb.*,
- ag.name as android_game_name,
- ig.name as ios_game_name,
- hg.name as h5_game_name')
- ->join('cy_game ag', 'ag.id = gb.android_game_id', 'LEFT')
- ->join('cy_game ig', 'ig.id = gb.ios_game_id', 'LEFT')
- ->join('cy_game hg', 'hg.id = gb.h5_game_id', 'LEFT')
- ->where('gb.id', $id)
- ->find();
- if ($detail) {
- $detail['display_name'] = self::resolveDisplayName($detail);
- }
- return $detail;
- }
- /**
- * 解析展示名称:优先 game_name,否则从已绑定游戏名推导
- */
- public static function resolveDisplayName($row)
- {
- $name = trim($row['game_name'] ?? '');
- if ($name !== '') {
- return $name;
- }
- foreach (['android_game_name', 'ios_game_name', 'h5_game_name'] as $field) {
- $gameName = trim($row[$field] ?? '');
- if ($gameName === '') {
- continue;
- }
- $clean = preg_replace('/\s*[\((](?:安卓|Android|IOS|ios|iOS|H5|h5)[\))]\s*$/iu', '', $gameName);
- $clean = preg_replace('/\s*[-—]?\s*(安卓|Android|IOS|ios|iOS|H5|h5)\s*$/iu', '', $clean);
- $clean = trim($clean);
- if ($clean !== '') {
- return $clean;
- }
- }
- return '未命名游戏组#' . ($row['id'] ?? 0);
- }
- /**
- * 统计已绑定平台数量
- */
- public static function countBindings($row)
- {
- $count = 0;
- if (!empty($row['android_game_id'])) {
- $count++;
- }
- if (!empty($row['ios_game_id'])) {
- $count++;
- }
- if (!empty($row['h5_game_id'])) {
- $count++;
- }
- return $count;
- }
- /**
- * 获取状态文本
- */
- public function getStatusTextAttr($value, $data)
- {
- $status = [
- self::STATUS_DISABLE => '禁用',
- self::STATUS_ENABLE => '启用',
- ];
- return $status[$data['status']] ?? '未知';
- }
- }
|