Quellcode durchsuchen

推荐游戏配置
banner排序

Tree vor 1 Monat
Ursprung
Commit
9f5d0e86cb

+ 1 - 1
app/Game/PageModule.php

@@ -67,7 +67,7 @@ class PageModule extends Model
     }
     public function banners()
     {
-        return Banner::where('link_module',$this->id)->whereRaw(RouteService::getStateToWhereRaw());
+        return Banner::where('link_module',$this->id)->whereRaw(RouteService::getStateToWhereRaw())->orderBy('b_order','desc');
 //        return $this->hasMany(Banner::class, 'link_module', 'id');
     }
     // 返回特定模块类型的结构化数据

+ 242 - 0
app/Http/Controllers/Admin/GameNumberMappingController.php

@@ -0,0 +1,242 @@
+<?php
+
+namespace App\Http\Controllers\Admin;
+
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\DB;
+use Illuminate\Support\Facades\Validator;
+
+class GameNumberMappingController
+{
+    /**
+     * 数字游戏映射列表
+     */
+    public function index(Request $request)
+    {
+        // 从 SQL Server 查询所有映射关系
+        $mappings = DB::connection('write')
+            ->table('agent.dbo.game_number_mapping')
+            ->select('id', 'number', 'game_id')
+            ->orderBy('number', 'asc')
+            ->get();
+
+        // 获取所有游戏ID
+        $gameIds = $mappings->pluck('game_id')->unique()->toArray();
+
+        // 从 MySQL 查询游戏信息
+        $games = [];
+        if (!empty($gameIds)) {
+            $gamesData = DB::connection('mysql')
+                ->table('webgame.games')
+                ->whereIn('id', $gameIds)
+                ->select('id', 'brand', 'title')
+                ->get();
+            
+            // 转换为以 game_id 为键的数组
+            foreach ($gamesData as $game) {
+                $games[$game->id] = $game;
+            }
+        }
+
+        // 合并数据
+        foreach ($mappings as $mapping) {
+            if (isset($games[$mapping->game_id])) {
+                $mapping->brand = $games[$mapping->game_id]->brand;
+                $mapping->title = $games[$mapping->game_id]->title;
+            } else {
+                $mapping->brand = null;
+                $mapping->title = null;
+            }
+        }
+
+        return view('admin.game_number_mapping.index', compact('mappings'));
+    }
+
+    /**
+     * 添加映射页面
+     */
+    public function add(Request $request)
+    {
+        if ($request->isMethod('post')) {
+            // 手动检查数字是否已存在
+            $exists = DB::connection('write')
+                ->table('agent.dbo.game_number_mapping')
+                ->where('number', $request->number)
+                ->exists();
+            
+            if ($exists) {
+                return apiReturnFail('该数字已被使用');
+            }
+            
+            // 从 MySQL 检查游戏是否存在
+            $gameExists = DB::connection('mysql')
+                ->table('webgame.games')
+                ->where('id', $request->game_id)
+                ->exists();
+            
+            if (!$gameExists) {
+                return apiReturnFail('选择的游戏不存在');
+            }
+            
+            $validator = Validator::make($request->all(), [
+                'number' => 'required|integer|min:0|max:9',
+                'game_id' => 'required|integer',
+            ], [
+                'number.required' => '数字不能为空',
+                'number.integer' => '数字必须是0-9之间的整数',
+                'number.min' => '数字必须在0-9之间',
+                'number.max' => '数字必须在0-9之间',
+                'game_id.required' => '请选择游戏',
+            ]);
+
+            if ($validator->fails()) {
+                return apiReturnFail($validator->errors()->first());
+            }
+
+            try {
+                DB::connection('write')
+                    ->table('agent.dbo.game_number_mapping')
+                    ->insert([
+                        'number' => $request->number,
+                        'game_id' => $request->game_id,
+                        'created_at' => now(),
+                        'updated_at' => now(),
+                    ]);
+
+                return apiReturnSuc('添加成功');
+            } catch (\Exception $e) {
+                return apiReturnFail('添加失败:' . $e->getMessage());
+            }
+        }
+
+        // 从 MySQL 获取所有游戏列表
+        $games = DB::connection('mysql')
+            ->table('webgame.games')
+            ->select('id', 'brand', 'title')
+            ->where('state', '>', 0)
+            ->orderBy('brand')
+            ->orderBy('title')
+            ->get();
+
+        // 获取已使用的数字
+        $usedNumbers = DB::connection('write')
+            ->table('agent.dbo.game_number_mapping')
+            ->pluck('number')
+            ->toArray();
+
+        return view('admin.game_number_mapping.add', compact('games', 'usedNumbers'));
+    }
+
+    /**
+     * 修改映射页面
+     */
+    public function update(Request $request, $id)
+    {
+        $mapping = DB::connection('write')
+            ->table('agent.dbo.game_number_mapping')
+            ->where('id', $id)
+            ->first();
+
+        if (!$mapping) {
+            return apiReturnFail('映射不存在');
+        }
+
+        if ($request->isMethod('post')) {
+            // 手动检查数字是否已被其他记录使用
+            $exists = DB::connection('write')
+                ->table('agent.dbo.game_number_mapping')
+                ->where('number', $request->number)
+                ->where('id', '!=', $id)
+                ->exists();
+            
+            if ($exists) {
+                return apiReturnFail('该数字已被使用');
+            }
+            
+            // 从 MySQL 检查游戏是否存在
+            $gameExists = DB::connection('mysql')
+                ->table('webgame.games')
+                ->where('id', $request->game_id)
+                ->exists();
+            
+            if (!$gameExists) {
+                return apiReturnFail('选择的游戏不存在');
+            }
+            
+            $validator = Validator::make($request->all(), [
+                'number' => 'required|integer|min:0|max:9',
+                'game_id' => 'required|integer',
+            ], [
+                'number.required' => '数字不能为空',
+                'number.integer' => '数字必须是0-9之间的整数',
+                'number.min' => '数字必须在0-9之间',
+                'number.max' => '数字必须在0-9之间',
+                'game_id.required' => '请选择游戏',
+            ]);
+
+            if ($validator->fails()) {
+                return apiReturnFail($validator->errors()->first());
+            }
+
+            try {
+                DB::connection('write')
+                    ->table('agent.dbo.game_number_mapping')
+                    ->where('id', $id)
+                    ->update([
+                        'number' => $request->number,
+                        'game_id' => $request->game_id,
+                        'updated_at' => now(),
+                    ]);
+
+                return apiReturnSuc('修改成功');
+            } catch (\Exception $e) {
+                return apiReturnFail('修改失败:' . $e->getMessage());
+            }
+        }
+
+        // 从 MySQL 获取游戏信息
+        $game = DB::connection('mysql')
+            ->table('webgame.games')
+            ->where('id', $mapping->game_id)
+            ->first();
+
+        // 从 MySQL 获取所有游戏列表
+        $games = DB::connection('mysql')
+            ->table('webgame.games')
+            ->select('id', 'brand', 'title')
+            ->where('state', '>', 0)
+            ->orderBy('brand')
+            ->orderBy('title')
+            ->get();
+
+        // 获取已使用的数字(排除当前记录)
+        $usedNumbers = DB::connection('write')
+            ->table('agent.dbo.game_number_mapping')
+            ->where('id', '!=', $id)
+            ->pluck('number')
+            ->toArray();
+
+        return view('admin.game_number_mapping.update', compact('mapping', 'game', 'games', 'usedNumbers'));
+    }
+
+    /**
+     * 删除映射
+     */
+    public function delete(Request $request, $id)
+    {
+        try {
+            $deleted = DB::connection('write')
+                ->table('agent.dbo.game_number_mapping')
+                ->where('id', $id)
+                ->delete();
+
+            if ($deleted) {
+                return apiReturnSuc('删除成功');
+            } else {
+                return apiReturnFail('删除失败,记录不存在');
+            }
+        } catch (\Exception $e) {
+            return apiReturnFail('删除失败:' . $e->getMessage());
+        }
+    }
+}

+ 19 - 1
app/Http/Controllers/Game/WebRouteController.php

@@ -172,7 +172,25 @@ class WebRouteController extends Controller
             ->where('StatusName', 'Telegram')
             ->first();
 
-        $recommendGame = '/game/931';
+        // 默认推荐游戏
+        $defaultGameId = 931;
+        $recommendGame = '/game/' . $defaultGameId;
+        
+        // 如果用户信息存在,根据GameID的最后一位数字查询映射关系
+        if ($user && isset($user['GameID'])) {
+            $gameId = (string)$user['GameID'];
+            $lastDigit = (int)substr($gameId, -1); // 获取最后一位数字
+            
+            // 查询映射关系
+            $mapping = DB::connection('write')
+                ->table('agent.dbo.game_number_mapping')
+                ->where('number', $lastDigit)
+                ->first();
+            
+            if ($mapping && $mapping->game_id) {
+                $recommendGame = '/game/' . $mapping->game_id;
+            }
+        }
 
         $data['conf']=[
             'bb'=>$bb,

+ 90 - 0
resources/views/admin/game_number_mapping/add.blade.php

@@ -0,0 +1,90 @@
+@extends('base.base')
+@section('base')
+    <!-- 内容区域 -->
+    <div class="main-panel">
+        <div class="content-wrapper">
+            <div class="row">
+                <div class="col-12 grid-margin stretch-card">
+                    <div class="card">
+                        <div class="card-body">
+                            <h4 class="card-title">添加数字游戏映射</h4>
+
+                            <form class="forms-sample" id="form">
+                                <div class="form-group">
+                                    <label for="number">*用户ID最后一位 (0-9)</label>
+                                    <select class="form-control required" name="number" id="number">
+                                        <option value="">请选择数字</option>
+                                        @for($i = 0; $i <= 9; $i++)
+                                            <option value="{{ $i }}" {{ in_array($i, $usedNumbers) ? 'disabled' : '' }}>
+                                                {{ $i }}{{ in_array($i, $usedNumbers) ? ' (已使用)' : '' }}
+                                            </option>
+                                        @endfor
+                                    </select>
+                                    <small class="form-text text-muted">选择0-9之间的数字,已使用的数字将不可选</small>
+                                </div>
+
+                                <div class="form-group">
+                                    <label for="game_id">*选择游戏</label>
+                                    <select class="form-control required" name="game_id" id="game_id">
+                                        <option value="">请选择游戏</option>
+                                        @foreach($games as $game)
+                                            <option value="{{ $game->id }}" data-brand="{{ $game->brand }}" data-title="{{ $game->title }}">
+                                                {{ $game->brand }}-{{ $game->title }} (ID: {{ $game->id }})
+                                            </option>
+                                        @endforeach
+                                    </select>
+                                    <small class="form-text text-muted">从游戏列表中选择要映射的游戏</small>
+                                </div>
+
+                                <button type="button" onclick="commit()" class="btn btn-sm btn-gradient-primary btn-icon-text">
+                                    <i class="mdi mdi-file-check btn-icon-prepend"></i>
+                                    提交
+                                </button>
+                                <button type="button" onclick="cancel()" class="btn btn-sm btn-gradient-warning btn-icon-text">
+                                    <i class="mdi mdi-reload btn-icon-prepend"></i>
+                                    取消
+                                </button>
+                            </form>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <script>
+        function commit() {
+            if (!checkForm()) {
+                return false;
+            }
+
+            var data = $("#form").serializeObject();
+            var number = data.number;
+            var game_id = data.game_id;
+
+            if (!number || number === '') {
+                layer.msg('请选择数字');
+                return false;
+            }
+
+            if (!game_id || game_id === '') {
+                layer.msg('请选择游戏');
+                return false;
+            }
+
+            myRequest("/admin/game-number-mapping/add", "post", {number, game_id}, function(res) {
+                if (res.code == '200') {
+                    layer.msg(res.msg);
+                    setTimeout(function() {
+                        parent.location.reload();
+                    }, 1500);
+                } else {
+                    layer.msg(res.msg);
+                }
+            });
+        }
+
+        function cancel() {
+            parent.layer.closeAll();
+        }
+    </script>
+@endsection

+ 104 - 0
resources/views/admin/game_number_mapping/index.blade.php

@@ -0,0 +1,104 @@
+@extends('base.base')
+@section('base')
+<div class="main-panel">
+    <div class="content-wrapper">
+        <div class="page-header">
+            <h3 class="page-title">
+                <span class="page-title-icon bg-gradient-primary text-white mr-2">
+                    <i class="mdi mdi-numeric"></i>
+                </span>
+                数字游戏映射管理
+            </h3>
+            <nav aria-label="breadcrumb">
+                <button class="btn btn-sm btn-gradient-primary" onclick="add()">
+                    <i class="mdi mdi-plus"></i> 添加映射
+                </button>
+            </nav>
+        </div>
+        <div class="row">
+            <div class="col-lg-12 grid-margin stretch-card">
+                <div class="card">
+                    <div class="card-body">
+                        <h4 class="card-title">映射列表</h4>
+                        <div class="table-responsive">
+                            <table class="table table-bordered">
+                                <thead>
+                                    <tr>
+                                        <th>ID</th>
+                                        <th>用户ID最后一位</th>
+                                        <th>游戏ID</th>
+                                        <th>游戏名称 (brand-title)</th>
+                                        <th>操作</th>
+                                    </tr>
+                                </thead>
+                                <tbody>
+                                    @if(count($mappings) > 0)
+                                        @foreach($mappings as $mapping)
+                                        <tr>
+                                            <td>{{ $mapping->id }}</td>
+                                            <td><strong>{{ $mapping->number }}</strong></td>
+                                            <td>{{ $mapping->game_id }}</td>
+                                            <td>
+                                                @if($mapping->brand && $mapping->title)
+                                                    {{ $mapping->brand }}-{{ $mapping->title }}
+                                                @else
+                                                    <span style="color: #999;">游戏不存在</span>
+                                                @endif
+                                            </td>
+                                            <td>
+                                                <button class="btn btn-sm btn-gradient-info" onclick="update({{ $mapping->id }})">修改</button>
+                                                <button class="btn btn-sm btn-gradient-danger" onclick="del({{ $mapping->id }})">删除</button>
+                                            </td>
+                                        </tr>
+                                        @endforeach
+                                    @else
+                                        <tr>
+                                            <td colspan="5" style="text-align: center; color: #999;">暂无数据</td>
+                                        </tr>
+                                    @endif
+                                </tbody>
+                            </table>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+</div>
+<script>
+    function add() {
+        layer.open({
+            type: 2,
+            title: '添加数字游戏映射',
+            shadeClose: true,
+            shade: 0.8,
+            area: ['60%', '70%'],
+            content: '/admin/game-number-mapping/add'
+        });
+    }
+
+    function update(id) {
+        layer.open({
+            type: 2,
+            title: '修改数字游戏映射',
+            shadeClose: true,
+            shade: 0.8,
+            area: ['60%', '70%'],
+            content: '/admin/game-number-mapping/update/' + id
+        });
+    }
+
+    function del(id) {
+        myConfirm('确定要删除这条映射吗?', function() {
+            myRequest('/admin/game-number-mapping/delete/' + id, 'post', {}, function(res) {
+                layer.msg(res.msg);
+                if (res.code == '200') {
+                    setTimeout(function() {
+                        window.location.reload();
+                    }, 1500);
+                }
+            });
+        });
+    }
+</script>
+@endsection

+ 100 - 0
resources/views/admin/game_number_mapping/update.blade.php

@@ -0,0 +1,100 @@
+@extends('base.base')
+@section('base')
+    <!-- 内容区域 -->
+    <div class="main-panel">
+        <div class="content-wrapper">
+            <div class="row">
+                <div class="col-12 grid-margin stretch-card">
+                    <div class="card">
+                        <div class="card-body">
+                            <h4 class="card-title">修改数字游戏映射</h4>
+
+                            <form class="forms-sample" id="form">
+                                <div class="form-group">
+                                    <label for="number">*用户ID最后一位 (0-9)</label>
+                                    <select class="form-control required" name="number" id="number">
+                                        <option value="">请选择数字</option>
+                                        @for($i = 0; $i <= 9; $i++)
+                                            <option value="{{ $i }}" 
+                                                {{ $mapping->number == $i ? 'selected' : '' }}
+                                                {{ (in_array($i, $usedNumbers) && $mapping->number != $i) ? 'disabled' : '' }}>
+                                                {{ $i }}{{ (in_array($i, $usedNumbers) && $mapping->number != $i) ? ' (已使用)' : '' }}
+                                            </option>
+                                        @endfor
+                                    </select>
+                                    <small class="form-text text-muted">选择0-9之间的数字,已使用的数字将不可选</small>
+                                </div>
+
+                                <div class="form-group">
+                                    <label for="game_id">*选择游戏</label>
+                                    <select class="form-control required" name="game_id" id="game_id">
+                                        <option value="">请选择游戏</option>
+                                        @foreach($games as $game)
+                                            <option value="{{ $game->id }}" 
+                                                {{ $mapping->game_id == $game->id ? 'selected' : '' }}
+                                                data-brand="{{ $game->brand }}" 
+                                                data-title="{{ $game->title }}">
+                                                {{ $game->brand }}-{{ $game->title }} (ID: {{ $game->id }})
+                                            </option>
+                                        @endforeach
+                                    </select>
+                                    <small class="form-text text-muted">从游戏列表中选择要映射的游戏</small>
+                                    @if($game)
+                                        <div class="mt-2">
+                                            <small class="text-info">当前映射:{{ $game->brand }}-{{ $game->title }} (ID: {{ $game->id }})</small>
+                                        </div>
+                                    @endif
+                                </div>
+
+                                <button type="button" onclick="commit({{ $mapping->id }})" class="btn btn-sm btn-gradient-primary btn-icon-text">
+                                    <i class="mdi mdi-file-check btn-icon-prepend"></i>
+                                    提交
+                                </button>
+                                <button type="button" onclick="cancel()" class="btn btn-sm btn-gradient-warning btn-icon-text">
+                                    <i class="mdi mdi-reload btn-icon-prepend"></i>
+                                    取消
+                                </button>
+                            </form>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </div>
+    <script>
+        function commit(id) {
+            if (!checkForm()) {
+                return false;
+            }
+
+            var data = $("#form").serializeObject();
+            var number = data.number;
+            var game_id = data.game_id;
+
+            if (!number || number === '') {
+                layer.msg('请选择数字');
+                return false;
+            }
+
+            if (!game_id || game_id === '') {
+                layer.msg('请选择游戏');
+                return false;
+            }
+
+            myRequest("/admin/game-number-mapping/update/" + id, "post", {number, game_id}, function(res) {
+                if (res.code == '200') {
+                    layer.msg(res.msg);
+                    setTimeout(function() {
+                        parent.location.reload();
+                    }, 1500);
+                } else {
+                    layer.msg(res.msg);
+                }
+            });
+        }
+
+        function cancel() {
+            parent.layer.closeAll();
+        }
+    </script>
+@endsection

+ 6 - 0
routes/web.php

@@ -731,6 +731,12 @@ Route::group([
         $route->any('/game-some-config', 'Admin\GameSomeConfigController@index')->name('admin.game-some-config');
         $route->post('/game-some-config/update', 'Admin\GameSomeConfigController@update')->name('admin.game-some-config.update');
         
+        // 数字游戏映射管理
+        $route->get('/game-number-mapping', 'Admin\GameNumberMappingController@index')->name('admin.game-number-mapping');
+        $route->any('/game-number-mapping/add', 'Admin\GameNumberMappingController@add')->name('admin.game-number-mapping.add');
+        $route->any('/game-number-mapping/update/{id}', 'Admin\GameNumberMappingController@update')->name('admin.game-number-mapping.update');
+        $route->post('/game-number-mapping/delete/{id}', 'Admin\GameNumberMappingController@delete')->name('admin.game-number-mapping.delete');
+        
         // Bonus购买回报配置
         $route->any('/game-buy-bonus-config', 'Admin\GameBuyBonusConfigController@index')->name('admin.game-buy-bonus-config');
         $route->post('/game-buy-bonus-config/update', 'Admin\GameBuyBonusConfigController@update')->name('admin.game-buy-bonus-config.update');