1.新增游戏管理接口和菜单
2.创建对接第三方文档
This commit is contained in:
@@ -5,6 +5,7 @@ namespace app\api\controller\v1;
|
||||
|
||||
use app\api\logic\UserLogic;
|
||||
use app\api\util\ReturnCode;
|
||||
use app\dice\model\game\DiceGame;
|
||||
use app\dice\model\player\DicePlayer;
|
||||
use plugin\saiadmin\app\model\system\SystemUser;
|
||||
use app\dice\model\play_record\DicePlayRecord;
|
||||
@@ -22,6 +23,53 @@ use app\api\cache\UserCache;
|
||||
*/
|
||||
class GameController extends BaseController
|
||||
{
|
||||
private const GAME_PUBLIC_FIELDS = [
|
||||
'provider',
|
||||
'provider_code',
|
||||
'game_code',
|
||||
'game_key',
|
||||
'game_type',
|
||||
'logo',
|
||||
'game_url',
|
||||
'hall_url',
|
||||
'status',
|
||||
'sort',
|
||||
];
|
||||
|
||||
/**
|
||||
* 获取游戏列表
|
||||
* POST 参数:lang(可选,zh/en,默认 zh)
|
||||
* 当前返回启用中的游戏列表
|
||||
*/
|
||||
public function getGameList(Request $request): Response
|
||||
{
|
||||
$lang = $this->resolveLang($request->post('lang', 'zh'));
|
||||
$games = $this->buildPublicGameList($lang);
|
||||
return $this->success([
|
||||
'game_list' => $games,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取游戏大厅信息(脱敏)
|
||||
* POST 参数:lang(可选,zh/en,默认 zh)
|
||||
*/
|
||||
public function getGameHall(Request $request): Response
|
||||
{
|
||||
$lang = $this->resolveLang($request->post('lang', 'zh'));
|
||||
$games = $this->buildPublicGameList($lang);
|
||||
$hallUrl = '';
|
||||
if (!empty($games)) {
|
||||
$hallUrl = $games[0]['hall_url'] ?? '';
|
||||
}
|
||||
return $this->success([
|
||||
'provider' => 'Dicey Fun',
|
||||
'provider_code' => 'DF',
|
||||
'hall_url' => $hallUrl,
|
||||
'game_list' => $games,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取游戏地址
|
||||
* 根据 username 创建登录 token(JWT),拼接游戏地址返回
|
||||
@@ -310,4 +358,41 @@ class GameController extends BaseController
|
||||
$recordArr['dice_player'] = ['id' => (int) $player->id, 'username' => $player->username ?? '', 'phone' => $player->phone ?? ''];
|
||||
return $this->success($recordArr);
|
||||
}
|
||||
|
||||
private function resolveLang($lang): string
|
||||
{
|
||||
if (!is_string($lang)) {
|
||||
return 'zh';
|
||||
}
|
||||
$langValue = strtolower(trim($lang));
|
||||
if (!in_array($langValue, ['zh', 'en'], true)) {
|
||||
return 'zh';
|
||||
}
|
||||
return $langValue;
|
||||
}
|
||||
|
||||
private function buildPublicGameList(string $lang): array
|
||||
{
|
||||
$rows = DiceGame::where('status', 1)
|
||||
->orderBy('sort', 'asc')
|
||||
->orderBy('id', 'asc')
|
||||
->select(array_merge(self::GAME_PUBLIC_FIELDS, ['game_name', 'game_name_en']))
|
||||
->get()
|
||||
->toArray();
|
||||
if (empty($rows)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$games = [];
|
||||
foreach ($rows as $row) {
|
||||
$game = [];
|
||||
foreach (self::GAME_PUBLIC_FIELDS as $fieldName) {
|
||||
$game[$fieldName] = $row[$fieldName] ?? '';
|
||||
}
|
||||
$gameNameEn = $row['game_name_en'] ?? '';
|
||||
$game['game_name'] = $lang === 'en' && $gameNameEn !== '' ? $gameNameEn : ($row['game_name'] ?? '');
|
||||
$games[] = $game;
|
||||
}
|
||||
return $games;
|
||||
}
|
||||
}
|
||||
|
||||
89
server/app/dice/controller/game/DiceGameController.php
Normal file
89
server/app/dice/controller/game/DiceGameController.php
Normal file
@@ -0,0 +1,89 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | saiadmin [ saiadmin快速开发框架 ]
|
||||
// +----------------------------------------------------------------------
|
||||
namespace app\dice\controller\game;
|
||||
|
||||
use app\dice\logic\game\DiceGameLogic;
|
||||
use app\dice\validate\game\DiceGameValidate;
|
||||
use plugin\saiadmin\basic\BaseController;
|
||||
use plugin\saiadmin\service\Permission;
|
||||
use support\Request;
|
||||
use support\Response;
|
||||
|
||||
/**
|
||||
* 游戏管理控制器
|
||||
*/
|
||||
class DiceGameController extends BaseController
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->logic = new DiceGameLogic();
|
||||
$this->validate = new DiceGameValidate();
|
||||
parent::__construct();
|
||||
}
|
||||
|
||||
#[Permission('游戏管理列表', 'dice:game:index:index')]
|
||||
public function index(Request $request): Response
|
||||
{
|
||||
$where = $request->more([
|
||||
['provider_code', ''],
|
||||
['game_code', ''],
|
||||
['game_type', ''],
|
||||
['status', ''],
|
||||
]);
|
||||
$query = $this->logic->search($where);
|
||||
$data = $this->logic->getList($query);
|
||||
return $this->success($data);
|
||||
}
|
||||
|
||||
#[Permission('游戏管理读取', 'dice:game:index:read')]
|
||||
public function read(Request $request): Response
|
||||
{
|
||||
$id = $request->input('id', '');
|
||||
$model = $this->logic->read($id);
|
||||
if (!$model) {
|
||||
return $this->fail('not found');
|
||||
}
|
||||
$data = is_array($model) ? $model : $model->toArray();
|
||||
return $this->success($data);
|
||||
}
|
||||
|
||||
#[Permission('游戏管理添加', 'dice:game:index:save')]
|
||||
public function save(Request $request): Response
|
||||
{
|
||||
$data = $request->post();
|
||||
$this->validate('save', $data);
|
||||
$result = $this->logic->add($data);
|
||||
if (!$result) {
|
||||
return $this->fail('add failed');
|
||||
}
|
||||
return $this->success('add success');
|
||||
}
|
||||
|
||||
#[Permission('游戏管理修改', 'dice:game:index:update')]
|
||||
public function update(Request $request): Response
|
||||
{
|
||||
$data = $request->post();
|
||||
$this->validate('update', $data);
|
||||
$result = $this->logic->edit($data['id'], $data);
|
||||
if (!$result) {
|
||||
return $this->fail('update failed');
|
||||
}
|
||||
return $this->success('update success');
|
||||
}
|
||||
|
||||
#[Permission('游戏管理删除', 'dice:game:index:destroy')]
|
||||
public function destroy(Request $request): Response
|
||||
{
|
||||
$ids = $request->post('ids', '');
|
||||
if ($ids === '' || $ids === null) {
|
||||
return $this->fail('please select data to delete');
|
||||
}
|
||||
$result = $this->logic->destroy($ids);
|
||||
if (!$result) {
|
||||
return $this->fail('delete failed');
|
||||
}
|
||||
return $this->success('delete success');
|
||||
}
|
||||
}
|
||||
19
server/app/dice/logic/game/DiceGameLogic.php
Normal file
19
server/app/dice/logic/game/DiceGameLogic.php
Normal file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | saiadmin [ saiadmin快速开发框架 ]
|
||||
// +----------------------------------------------------------------------
|
||||
namespace app\dice\logic\game;
|
||||
|
||||
use plugin\saiadmin\basic\eloquent\BaseLogic;
|
||||
use app\dice\model\game\DiceGame;
|
||||
|
||||
/**
|
||||
* 游戏管理逻辑层
|
||||
*/
|
||||
class DiceGameLogic extends BaseLogic
|
||||
{
|
||||
public function __construct()
|
||||
{
|
||||
$this->model = new DiceGame();
|
||||
}
|
||||
}
|
||||
53
server/app/dice/model/game/DiceGame.php
Normal file
53
server/app/dice/model/game/DiceGame.php
Normal file
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | saiadmin [ saiadmin快速开发框架 ]
|
||||
// +----------------------------------------------------------------------
|
||||
namespace app\dice\model\game;
|
||||
|
||||
use plugin\saiadmin\basic\eloquent\BaseModel;
|
||||
|
||||
/**
|
||||
* 游戏管理模型
|
||||
*
|
||||
* dice_game 游戏配置表
|
||||
*/
|
||||
class DiceGame extends BaseModel
|
||||
{
|
||||
protected $primaryKey = 'id';
|
||||
|
||||
protected $table = 'dice_game';
|
||||
|
||||
public $timestamps = true;
|
||||
|
||||
public function searchProviderCodeAttr($query, $value): void
|
||||
{
|
||||
if ($value === '' || $value === null) {
|
||||
return;
|
||||
}
|
||||
$query->where('provider_code', '=', $value);
|
||||
}
|
||||
|
||||
public function searchGameCodeAttr($query, $value): void
|
||||
{
|
||||
if ($value === '' || $value === null) {
|
||||
return;
|
||||
}
|
||||
$query->where('game_code', 'like', '%' . $value . '%');
|
||||
}
|
||||
|
||||
public function searchGameTypeAttr($query, $value): void
|
||||
{
|
||||
if ($value === '' || $value === null) {
|
||||
return;
|
||||
}
|
||||
$query->where('game_type', '=', $value);
|
||||
}
|
||||
|
||||
public function searchStatusAttr($query, $value): void
|
||||
{
|
||||
if ($value === '' || $value === null) {
|
||||
return;
|
||||
}
|
||||
$query->where('status', '=', $value);
|
||||
}
|
||||
}
|
||||
61
server/app/dice/validate/game/DiceGameValidate.php
Normal file
61
server/app/dice/validate/game/DiceGameValidate.php
Normal file
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
// +----------------------------------------------------------------------
|
||||
// | saiadmin [ saiadmin快速开发框架 ]
|
||||
// +----------------------------------------------------------------------
|
||||
namespace app\dice\validate\game;
|
||||
|
||||
use plugin\saiadmin\basic\BaseValidate;
|
||||
|
||||
/**
|
||||
* 游戏管理验证器
|
||||
*/
|
||||
class DiceGameValidate extends BaseValidate
|
||||
{
|
||||
protected $rule = [
|
||||
'provider' => 'require|max:64',
|
||||
'provider_code' => 'require|max:32',
|
||||
'game_code' => 'require|max:64',
|
||||
'game_key' => 'require|max:64',
|
||||
'game_name' => 'require|max:128',
|
||||
'game_name_en' => 'max:128',
|
||||
'game_type' => 'require|max:32',
|
||||
'status' => 'require|in:0,1',
|
||||
'sort' => 'number',
|
||||
];
|
||||
|
||||
protected $message = [
|
||||
'provider' => 'provider 必填',
|
||||
'provider_code' => 'provider_code 必填',
|
||||
'game_code' => 'game_code 必填',
|
||||
'game_key' => 'game_key 必填',
|
||||
'game_name' => 'game_name 必填',
|
||||
'game_type' => 'game_type 必填',
|
||||
'status' => 'status 仅支持 0 或 1',
|
||||
'sort' => 'sort 必须为数字',
|
||||
];
|
||||
|
||||
protected $scene = [
|
||||
'save' => [
|
||||
'provider',
|
||||
'provider_code',
|
||||
'game_code',
|
||||
'game_key',
|
||||
'game_name',
|
||||
'game_name_en',
|
||||
'game_type',
|
||||
'status',
|
||||
'sort',
|
||||
],
|
||||
'update' => [
|
||||
'provider',
|
||||
'provider_code',
|
||||
'game_code',
|
||||
'game_key',
|
||||
'game_name',
|
||||
'game_name_en',
|
||||
'game_type',
|
||||
'status',
|
||||
'sort',
|
||||
],
|
||||
];
|
||||
}
|
||||
Reference in New Issue
Block a user