Files
dafuweng-saiadmin6.x/server/app/dice/controller/player/DicePlayerController.php

257 lines
9.1 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
// +----------------------------------------------------------------------
// | saiadmin [ saiadmin快速开发框架 ]
// +----------------------------------------------------------------------
// | Author: your name
// +----------------------------------------------------------------------
namespace app\dice\controller\player;
use app\dice\helper\AdminScopeHelper;
use app\dice\model\lottery_pool_config\DiceLotteryPoolConfig;
use plugin\saiadmin\app\model\system\SystemUser;
use plugin\saiadmin\basic\BaseController;
use app\dice\logic\player\DicePlayerLogic;
use app\dice\validate\player\DicePlayerValidate;
use plugin\saiadmin\service\Permission;
use support\Request;
use support\Response;
use app\api\cache\UserCache;
use app\dice\model\player\DicePlayer;
/**
* 玩家控制器
*/
class DicePlayerController extends BaseController
{
/**
* 构造函数
*/
public function __construct()
{
$this->logic = new DicePlayerLogic();
$this->validate = new DicePlayerValidate;
parent::__construct();
}
/**
* 获取彩金池配置选项id、name
* @param Request $request
* @return Response
*/
#[Permission('玩家列表', 'dice:player:index:index')]
public function getLotteryConfigOptions(Request $request): Response
{
$list = DiceLotteryPoolConfig::field('id,name')->order('id', 'asc')->select();
$data = $list->map(function ($item) {
return ['id' => (int) $item['id'], 'name' => (string) ($item['name'] ?? '')];
})->toArray();
return $this->success($data);
}
/**
* 获取后台管理员选项id、username、realname
* @param Request $request
* @return Response
*/
#[Permission('玩家列表', 'dice:player:index:index')]
public function getSystemUserOptions(Request $request): Response
{
$query = SystemUser::field('id,username,realname')->where('status', 1)->order('id', 'asc');
if (isset($this->adminInfo['id']) && (int) $this->adminInfo['id'] > 1) {
$deptList = $this->adminInfo['deptList'] ?? [];
if (!empty($deptList)) {
$query->auth($deptList);
}
}
$list = $query->select();
$data = $list->map(function ($item) {
$label = trim((string) ($item['realname'] ?? '')) ?: (string) ($item['username'] ?? '');
return [
'id' => (int) $item['id'],
'username' => (string) ($item['username'] ?? ''),
'realname' => (string) ($item['realname'] ?? ''),
'label' => $label ?: (string) $item['id'],
];
})->toArray();
return $this->success($data);
}
/**
* 数据列表
* @param Request $request
* @return Response
*/
#[Permission('玩家列表', 'dice:player:index:index')]
public function index(Request $request): Response
{
$where = $request->more([
['username', ''],
['name', ''],
['phone', ''],
['status', ''],
['coin', ''],
['lottery_config_id', ''],
]);
$query = $this->logic->search($where);
AdminScopeHelper::applyAdminScope($query, $this->adminInfo ?? null);
$query->with(['diceLotteryPoolConfig']);
$data = $this->logic->getList($query);
return $this->success($data);
}
/**
* 读取数据
* @param Request $request
* @return Response
*/
#[Permission('玩家读取', 'dice:player:index:read')]
public function read(Request $request): Response
{
$id = $request->input('id', '');
$model = $this->logic->read($id);
if (!$model) {
return $this->fail('not found');
}
$allowedIds = AdminScopeHelper::getAllowedAdminIds($this->adminInfo ?? null);
if ($allowedIds !== null && !in_array((int) ($model->admin_id ?? 0), $allowedIds, true)) {
return $this->fail('no permission to view this record');
}
$data = is_array($model) ? $model : $model->toArray();
return $this->success($data);
}
/**
* 保存数据
* @param Request $request
* @return Response
*/
#[Permission('玩家添加', 'dice:player:index:save')]
public function save(Request $request): Response
{
$data = $request->post();
$this->validate('save', $data);
// 类型转化
if (empty($data['admin_id']) && isset($this->adminInfo['id']) && (int) $this->adminInfo['id'] > 0) {
$data['admin_id'] = (int) $this->adminInfo['id'];
}
$result = $this->logic->add($data);
if ($result && isset($result['id'])) {
// 出于安全:删除该玩家缓存,后续 API 按需重建
UserCache::deleteUser($result['id']);
$player = DicePlayer::find($result['id']);
if ($player && $player->username !== '') {
UserCache::deletePlayerByUsername($player->username);
}
return $this->success('add success');
}
return $this->fail('add failed');
}
/**
* 更新数据
* @param Request $request
* @return Response
*/
#[Permission('玩家修改', 'dice:player:index:update')]
public function update(Request $request): Response
{
$data = $request->post();
$this->validate('update', $data);
$model = $this->logic->read($data['id'] ?? 0);
if ($model) {
$allowedIds = AdminScopeHelper::getAllowedAdminIds($this->adminInfo ?? null);
if ($allowedIds !== null && !in_array((int) ($model->admin_id ?? 0), $allowedIds, true)) {
return $this->fail('no permission to update this record');
}
}
$result = $this->logic->edit($data['id'], $data);
if ($result) {
// 出于安全:删除该玩家缓存,后续 API 按需重建
UserCache::deleteUser($data['id']);
$player = DicePlayer::find($data['id']);
if ($player && $player->username !== '') {
UserCache::deletePlayerByUsername($player->username);
}
return $this->success('update success');
}
return $this->fail('update failed');
}
/**
* 更新状态
* @param Request $request
* @return Response
*/
#[Permission('玩家状态修改', 'dice:player:index:update')]
public function updateStatus(Request $request): Response
{
$id = $request->input('id');
$status = $request->input('status');
if ($id === null || $id === '') {
return $this->fail('missing parameter id');
}
if ($status === null || $status === '') {
return $this->fail('missing parameter status');
}
$model = $this->logic->read($id);
if ($model) {
$allowedIds = AdminScopeHelper::getAllowedAdminIds($this->adminInfo ?? null);
if ($allowedIds !== null && !in_array((int) ($model->admin_id ?? 0), $allowedIds, true)) {
return $this->fail('no permission to update this record');
}
}
$this->logic->edit($id, ['status' => (int) $status]);
// 出于安全:删除该玩家缓存,后续 API 按需重建
UserCache::deleteUser($id);
$player = DicePlayer::find($id);
if ($player && $player->username !== '') {
UserCache::deletePlayerByUsername($player->username);
}
return $this->success('update success');
}
/**
* 删除数据
* @param Request $request
* @return Response
*/
#[Permission('玩家删除', 'dice:player:index:destroy')]
public function destroy(Request $request): Response
{
$ids = $request->post('ids', '');
if (empty($ids)) {
return $this->fail('please select data to delete');
}
$ids = is_array($ids) ? $ids : explode(',', (string) $ids);
$allowedIds = AdminScopeHelper::getAllowedAdminIds($this->adminInfo ?? null);
if ($allowedIds !== null) {
$models = $this->logic->model->whereIn('id', $ids)->column('admin_id', 'id');
$validIds = [];
foreach ($ids as $id) {
$adminId = (int) ($models[$id] ?? 0);
if (in_array($adminId, $allowedIds, true)) {
$validIds[] = $id;
}
}
$ids = $validIds;
if (empty($ids)) {
return $this->fail('no permission to delete selected data');
}
}
$result = $this->logic->destroy($ids);
if ($result) {
// 出于安全:删除相关玩家缓存,后续 API 按需重建
foreach ($ids as $id) {
UserCache::deleteUser($id);
$player = DicePlayer::find($id);
if ($player && $player->username !== '') {
UserCache::deletePlayerByUsername($player->username);
}
}
return $this->success('delete success');
}
return $this->fail('delete failed');
}
}