[接口v1]对接平台API-新增接口

This commit is contained in:
2026-03-09 14:35:55 +08:00
parent e726fc3041
commit fbf8f9d39d
2 changed files with 224 additions and 2 deletions

View File

@@ -5,15 +5,18 @@ namespace app\api\controller\v1;
use app\api\logic\UserLogic;
use app\api\util\ReturnCode;
use app\dice\model\player\DicePlayer;
use app\dice\model\play_record\DicePlayRecord;
use app\dice\model\player_wallet_record\DicePlayerWalletRecord;
use app\dice\model\player_ticket_record\DicePlayerTicketRecord;
use support\think\Db;
use plugin\saiadmin\basic\OpenController;
use support\Request;
use support\Response;
/**
* 平台 v1 游戏接口
* 获取进入游戏:/api/v1/getGameUrl
* 请求头auth-token
* POST 参数username, password默认123456, time
*/
class GameController extends OpenController
{
@@ -52,4 +55,218 @@ class GameController extends OpenController
'url' => $url,
]);
}
/**
* 获取用户信息
* POST 参数username
* 返回 DicePlayer 中非敏感信息
*/
public function getPlayerInfo(Request $request): Response
{
$username = trim((string) ($request->post('username', '')));
if ($username === '') {
return $this->fail('username 不能为空', ReturnCode::PARAMS_ERROR);
}
$player = DicePlayer::where('username', $username)->find();
if (!$player) {
return $this->fail('用户不存在', ReturnCode::NOT_FOUND);
}
$hidden = ['password', 'lottery_config_id', 't1_weight', 't2_weight', 't3_weight', 't4_weight', 't5_weight', 'delete_time'];
$info = $player->hidden($hidden)->toArray();
return $this->success($info);
}
/**
* 获取游戏记录
* POST 参数username非必填没填则不按用户筛选, start_create_time, end_create_time非必填没填则不筛选时间
* 返回 DicePlayRecord 中非敏感信息
*/
public function getPlayerGameRecord(Request $request): Response
{
$username = trim((string) ($request->post('username', '')));
$startCreateTime = trim((string) ($request->post('start_create_time', '')));
$endCreateTime = trim((string) ($request->post('end_create_time', '')));
$page = (int) $request->post('page', 1);
$limit = (int) $request->post('limit', 20);
if ($page < 1) {
$page = 1;
}
if ($limit < 1 || $limit > 100) {
$limit = 20;
}
$query = DicePlayRecord::order('id', 'desc');
if ($username !== '') {
$player = DicePlayer::where('username', $username)->find();
if (!$player) {
return $this->success([]);
}
$query->where('player_id', (int) $player->id);
}
if ($startCreateTime !== '') {
$query->where('create_time', '>=', $startCreateTime);
}
if ($endCreateTime !== '') {
$query->where('create_time', '<=', $endCreateTime);
}
$list = $query->page($page, $limit)->select()->toArray();
return $this->success($list);
}
/**
* 获取钱包流水
* POST 参数username非必填没填则不按用户筛选, start_create_time, end_create_time非必填没填则不筛选时间
* 返回 DicePlayerWalletRecord 中非敏感信息
*/
public function getPlayerWalletRecord(Request $request): Response
{
$username = trim((string) ($request->post('username', '')));
$startCreateTime = trim((string) ($request->post('start_create_time', '')));
$endCreateTime = trim((string) ($request->post('end_create_time', '')));
$page = (int) $request->post('page', 1);
$limit = (int) $request->post('limit', 20);
if ($page < 1) {
$page = 1;
}
if ($limit < 1 || $limit > 100) {
$limit = 20;
}
$query = DicePlayerWalletRecord::order('id', 'desc');
if ($username !== '') {
$player = DicePlayer::where('username', $username)->find();
if (!$player) {
return $this->success([]);
}
$query->where('player_id', (int) $player->id);
}
if ($startCreateTime !== '') {
$query->where('create_time', '>=', $startCreateTime);
}
if ($endCreateTime !== '') {
$query->where('create_time', '<=', $endCreateTime);
}
$list = $query->page($page, $limit)->select()->toArray();
return $this->success($list);
}
/**
* 获取用户中奖券获取记录
* POST 参数username非必填没填则不按用户筛选, start_create_time, end_create_time非必填没填则不筛选时间
* 返回 DicePlayerTicketRecord 中非敏感信息
*/
public function getPlayerTicketRecord(Request $request): Response
{
$username = trim((string) ($request->post('username', '')));
$startCreateTime = trim((string) ($request->post('start_create_time', '')));
$endCreateTime = trim((string) ($request->post('end_create_time', '')));
$page = (int) $request->post('page', 1);
$limit = (int) $request->post('limit', 20);
if ($page < 1) {
$page = 1;
}
if ($limit < 1 || $limit > 100) {
$limit = 20;
}
$query = DicePlayerTicketRecord::order('id', 'desc');
if ($username !== '') {
$player = DicePlayer::where('username', $username)->find();
if (!$player) {
return $this->success([]);
}
$query->where('player_id', (int) $player->id);
}
if ($startCreateTime !== '') {
$query->where('create_time', '>=', $startCreateTime);
}
if ($endCreateTime !== '') {
$query->where('create_time', '<=', $endCreateTime);
}
$list = $query->page($page, $limit)->select()->toArray();
return $this->success($list);
}
/**
* 钱包转入转出
* POST 参数username必填, coin转入>0 或 转出<0
* 创建 DicePlayerWalletRecordtype: 0=充值(coin>0), 1=提现(coin<0)
* 返回创建的记录
*/
public function setPlayerWallet(Request $request): Response
{
$username = trim((string) ($request->post('username', '')));
$coin = $request->post('coin');
if ($username === '') {
return $this->fail('username 不能为空', ReturnCode::PARAMS_ERROR);
}
if ($coin === null || $coin === '') {
return $this->fail('coin 不能为空', ReturnCode::PARAMS_ERROR);
}
$coinVal = (float) $coin;
if ($coinVal === 0.0) {
return $this->fail('coin 不能为 0', ReturnCode::PARAMS_ERROR);
}
$player = DicePlayer::where('username', $username)->find();
if (!$player) {
return $this->fail('用户不存在', ReturnCode::NOT_FOUND);
}
$walletBefore = (float) ($player->coin ?? 0);
$walletAfter = $walletBefore + $coinVal;
if ($coinVal < 0 && $walletBefore < -$coinVal) {
return $this->fail('余额不足,无法转出', ReturnCode::BUSINESS_ERROR);
}
$type = $coinVal > 0 ? 0 : 1;
$remark = $coinVal > 0 ? '充值' : '提现';
try {
Db::startTrans();
$player->coin = $walletAfter;
$player->save();
$record = DicePlayerWalletRecord::create([
'player_id' => (int) $player->id,
'coin' => $coinVal,
'type' => $type,
'wallet_before' => $walletBefore,
'wallet_after' => $walletAfter,
'total_ticket_count' => 0,
'paid_ticket_count' => 0,
'free_ticket_count' => 0,
'remark' => $remark,
'user_id' => 0,
]);
Db::commit();
} catch (\Throwable $e) {
Db::rollback();
return $this->fail('操作失败:' . $e->getMessage(), ReturnCode::SERVER_ERROR);
}
return $this->success($record->toArray());
}
}