新增查看显示实时彩金池
This commit is contained in:
@@ -75,5 +75,41 @@ export default {
|
|||||||
url: '/dice/lottery_config/DiceLotteryConfig/destroy',
|
url: '/dice/lottery_config/DiceLotteryConfig/destroy',
|
||||||
data: params
|
data: params
|
||||||
})
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前彩金池(Redis 实例化,无则按 type=0 创建),含 profit_amount 实时值
|
||||||
|
*/
|
||||||
|
getCurrentPool() {
|
||||||
|
return request.get<{
|
||||||
|
id: number
|
||||||
|
name: string
|
||||||
|
safety_line: number
|
||||||
|
t1_weight: number
|
||||||
|
t2_weight: number
|
||||||
|
t3_weight: number
|
||||||
|
t4_weight: number
|
||||||
|
t5_weight: number
|
||||||
|
profit_amount: number
|
||||||
|
}>({
|
||||||
|
url: '/dice/lottery_config/DiceLotteryConfig/getCurrentPool'
|
||||||
|
})
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新当前彩金池:仅 safety_line、t1_weight~t5_weight,不可改 profit_amount
|
||||||
|
*/
|
||||||
|
updateCurrentPool(params: {
|
||||||
|
safety_line?: number
|
||||||
|
t1_weight?: number
|
||||||
|
t2_weight?: number
|
||||||
|
t3_weight?: number
|
||||||
|
t4_weight?: number
|
||||||
|
t5_weight?: number
|
||||||
|
}) {
|
||||||
|
return request.post<any>({
|
||||||
|
url: '/dice/lottery_config/DiceLotteryConfig/updateCurrentPool',
|
||||||
|
data: params
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,29 +7,13 @@
|
|||||||
<!-- 表格头部 -->
|
<!-- 表格头部 -->
|
||||||
<ArtTableHeader v-model:columns="columnChecks" :loading="loading" @refresh="refreshData">
|
<ArtTableHeader v-model:columns="columnChecks" :loading="loading" @refresh="refreshData">
|
||||||
<template #left>
|
<template #left>
|
||||||
<!-- <ElSpace wrap>-->
|
<ElButton
|
||||||
<!-- <ElButton-->
|
v-permission="'dice:lottery_config:index:index'"
|
||||||
<!-- v-permission="'dice:lottery_config:index:save'"-->
|
type="primary"
|
||||||
<!-- @click="showDialog('add')"-->
|
@click="showCurrentPoolDialog"
|
||||||
<!-- v-ripple-->
|
>
|
||||||
<!-- >-->
|
查看当前彩金池
|
||||||
<!-- <template #icon>-->
|
</ElButton>
|
||||||
<!-- <ArtSvgIcon icon="ri:add-fill" />-->
|
|
||||||
<!-- </template>-->
|
|
||||||
<!-- 新增-->
|
|
||||||
<!-- </ElButton>-->
|
|
||||||
<!-- <ElButton-->
|
|
||||||
<!-- v-permission="'dice:lottery_config:index:destroy'"-->
|
|
||||||
<!-- :disabled="selectedRows.length === 0"-->
|
|
||||||
<!-- @click="deleteSelectedRows(api.delete, refreshData)"-->
|
|
||||||
<!-- v-ripple-->
|
|
||||||
<!-- >-->
|
|
||||||
<!-- <template #icon>-->
|
|
||||||
<!-- <ArtSvgIcon icon="ri:delete-bin-5-line" />-->
|
|
||||||
<!-- </template>-->
|
|
||||||
<!-- 删除-->
|
|
||||||
<!-- </ElButton>-->
|
|
||||||
<!-- </ElSpace>-->
|
|
||||||
</template>
|
</template>
|
||||||
</ArtTableHeader>
|
</ArtTableHeader>
|
||||||
|
|
||||||
@@ -71,6 +55,8 @@
|
|||||||
:data="dialogData"
|
:data="dialogData"
|
||||||
@success="refreshData"
|
@success="refreshData"
|
||||||
/>
|
/>
|
||||||
|
<!-- 当前彩金池弹窗 -->
|
||||||
|
<CurrentPoolDialog v-model="currentPoolVisible" @success="refreshData" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
@@ -80,6 +66,7 @@
|
|||||||
import api from '../../api/lottery_config/index'
|
import api from '../../api/lottery_config/index'
|
||||||
import TableSearch from './modules/table-search.vue'
|
import TableSearch from './modules/table-search.vue'
|
||||||
import EditDialog from './modules/edit-dialog.vue'
|
import EditDialog from './modules/edit-dialog.vue'
|
||||||
|
import CurrentPoolDialog from './modules/current-pool-dialog.vue'
|
||||||
|
|
||||||
// 搜索表单
|
// 搜索表单
|
||||||
const searchForm = ref({
|
const searchForm = ref({
|
||||||
@@ -172,14 +159,10 @@
|
|||||||
})
|
})
|
||||||
|
|
||||||
// 编辑配置
|
// 编辑配置
|
||||||
const {
|
const { dialogType, dialogVisible, dialogData, showDialog, handleSelectionChange } = useSaiAdmin()
|
||||||
dialogType,
|
|
||||||
dialogVisible,
|
const currentPoolVisible = ref(false)
|
||||||
dialogData,
|
function showCurrentPoolDialog() {
|
||||||
showDialog,
|
currentPoolVisible.value = true
|
||||||
// deleteRow,
|
}
|
||||||
// deleteSelectedRows,
|
|
||||||
handleSelectionChange
|
|
||||||
// selectedRows
|
|
||||||
} = useSaiAdmin()
|
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -135,4 +135,25 @@ class DiceLotteryConfigController extends BaseController
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前彩金池(Redis 实例化,无则按 type=0 创建)
|
||||||
|
* 返回含 profit_amount 实时值,供前端轮询展示
|
||||||
|
*/
|
||||||
|
#[Permission('色子奖池配置列表', 'dice:lottery_config:index:index')]
|
||||||
|
public function getCurrentPool(Request $request): Response
|
||||||
|
{
|
||||||
|
$data = $this->logic->getCurrentPool();
|
||||||
|
return $this->success($data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新当前彩金池:仅可修改 safety_line、t1_weight~t5_weight,不可修改 profit_amount
|
||||||
|
*/
|
||||||
|
#[Permission('色子奖池配置修改', 'dice:lottery_config:index:update')]
|
||||||
|
public function updateCurrentPool(Request $request): Response
|
||||||
|
{
|
||||||
|
$data = $request->post();
|
||||||
|
$this->logic->updateCurrentPool($data);
|
||||||
|
return $this->success('保存成功');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,16 +6,22 @@
|
|||||||
// +----------------------------------------------------------------------
|
// +----------------------------------------------------------------------
|
||||||
namespace app\dice\logic\lottery_config;
|
namespace app\dice\logic\lottery_config;
|
||||||
|
|
||||||
|
use app\dice\model\lottery_config\DiceLotteryConfig;
|
||||||
use plugin\saiadmin\basic\think\BaseLogic;
|
use plugin\saiadmin\basic\think\BaseLogic;
|
||||||
use plugin\saiadmin\exception\ApiException;
|
use plugin\saiadmin\exception\ApiException;
|
||||||
use plugin\saiadmin\utils\Helper;
|
use plugin\saiadmin\utils\Helper;
|
||||||
use app\dice\model\lottery_config\DiceLotteryConfig;
|
use support\think\Cache;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 色子奖池配置逻辑层
|
* 色子奖池配置逻辑层
|
||||||
*/
|
*/
|
||||||
class DiceLotteryConfigLogic extends BaseLogic
|
class DiceLotteryConfigLogic extends BaseLogic
|
||||||
{
|
{
|
||||||
|
/** Redis 当前彩金池(type=0 实例)key,无则按 type=0 创建 */
|
||||||
|
private const REDIS_KEY_CURRENT_POOL = 'api:game:lottery_pool:default';
|
||||||
|
|
||||||
|
private const EXPIRE = 86400 * 7;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 构造函数
|
* 构造函数
|
||||||
*/
|
*/
|
||||||
@@ -24,4 +30,75 @@ class DiceLotteryConfigLogic extends BaseLogic
|
|||||||
$this->model = new DiceLotteryConfig();
|
$this->model = new DiceLotteryConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取当前彩金池:从 Redis 读取,若无则按 type=0 配置创建并写入 Redis,返回含 profit_amount(ev) 的完整数据
|
||||||
|
*
|
||||||
|
* @return array{id:int,name:string,safety_line:int,t1_weight:int,t2_weight:int,t3_weight:int,t4_weight:int,t5_weight:int,profit_amount:float}
|
||||||
|
*/
|
||||||
|
public function getCurrentPool(): array
|
||||||
|
{
|
||||||
|
$cached = Cache::get(self::REDIS_KEY_CURRENT_POOL);
|
||||||
|
if ($cached && is_string($cached)) {
|
||||||
|
$data = json_decode($cached, true);
|
||||||
|
if (is_array($data)) {
|
||||||
|
$config = DiceLotteryConfig::find($data['id'] ?? 0);
|
||||||
|
$ev = $config && isset($config->ev) ? (float) $config->ev : (float) ($data['profit_amount'] ?? 0);
|
||||||
|
$data['profit_amount'] = $ev;
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$config = DiceLotteryConfig::where('type', 0)->find();
|
||||||
|
if (!$config) {
|
||||||
|
throw new ApiException('未找到 type=0 的奖池配置,请先创建');
|
||||||
|
}
|
||||||
|
$row = $config->toArray();
|
||||||
|
$pool = [
|
||||||
|
'id' => (int) $row['id'],
|
||||||
|
'name' => (string) ($row['name'] ?? ''),
|
||||||
|
'safety_line' => (int) ($row['safety_line'] ?? 0),
|
||||||
|
't1_weight' => (int) ($row['t1_weight'] ?? 0),
|
||||||
|
't2_weight' => (int) ($row['t2_weight'] ?? 0),
|
||||||
|
't3_weight' => (int) ($row['t3_weight'] ?? 0),
|
||||||
|
't4_weight' => (int) ($row['t4_weight'] ?? 0),
|
||||||
|
't5_weight' => (int) ($row['t5_weight'] ?? 0),
|
||||||
|
'profit_amount' => isset($row['ev']) ? (float) $row['ev'] : 0.0,
|
||||||
|
];
|
||||||
|
Cache::set(self::REDIS_KEY_CURRENT_POOL, json_encode($pool), self::EXPIRE);
|
||||||
|
return $pool;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新当前彩金池:仅允许修改 safety_line、t1_weight~t5_weight,不同步 profit_amount(ev)
|
||||||
|
* 同时更新 Redis 与 DB 中 type=0 的记录
|
||||||
|
*
|
||||||
|
* @param array{safety_line?:int,t1_weight?:int,t2_weight?:int,t3_weight?:int,t4_weight?:int,t5_weight?:int} $data
|
||||||
|
*/
|
||||||
|
public function updateCurrentPool(array $data): void
|
||||||
|
{
|
||||||
|
$pool = $this->getCurrentPool();
|
||||||
|
$id = (int) $pool['id'];
|
||||||
|
$config = DiceLotteryConfig::find($id);
|
||||||
|
if (!$config) {
|
||||||
|
throw new ApiException('奖池配置不存在');
|
||||||
|
}
|
||||||
|
$allow = ['safety_line', 't1_weight', 't2_weight', 't3_weight', 't4_weight', 't5_weight'];
|
||||||
|
$update = [];
|
||||||
|
foreach ($allow as $k) {
|
||||||
|
if (array_key_exists($k, $data)) {
|
||||||
|
if ($k === 'safety_line') {
|
||||||
|
$update[$k] = (int) $data[$k];
|
||||||
|
} else {
|
||||||
|
$update[$k] = max(0, min(100, (int) $data[$k]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (empty($update)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DiceLotteryConfig::where('id', $id)->update($update);
|
||||||
|
$pool = array_merge($pool, $update);
|
||||||
|
$refreshed = DiceLotteryConfig::find($id);
|
||||||
|
$pool['profit_amount'] = $refreshed && isset($refreshed->ev) ? (float) $refreshed->ev : (float) ($pool['profit_amount'] ?? 0);
|
||||||
|
Cache::set(self::REDIS_KEY_CURRENT_POOL, json_encode($pool), self::EXPIRE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ use plugin\saiadmin\basic\think\BaseModel;
|
|||||||
* @property $t3_weight T3池权重
|
* @property $t3_weight T3池权重
|
||||||
* @property $t4_weight T4池权重
|
* @property $t4_weight T4池权重
|
||||||
* @property $t5_weight T5池权重
|
* @property $t5_weight T5池权重
|
||||||
|
* @property $ev 池子累计盈利(游戏结算时累加,仅展示不可编辑)
|
||||||
*/
|
*/
|
||||||
class DiceLotteryConfig extends BaseModel
|
class DiceLotteryConfig extends BaseModel
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -107,6 +107,8 @@ Route::group('/core', function () {
|
|||||||
Route::post('/dice/reward_config/DiceRewardConfig/batchUpdateWeights', [\app\dice\controller\reward_config\DiceRewardConfigController::class, 'batchUpdateWeights']);
|
Route::post('/dice/reward_config/DiceRewardConfig/batchUpdateWeights', [\app\dice\controller\reward_config\DiceRewardConfigController::class, 'batchUpdateWeights']);
|
||||||
fastRoute('dice/lottery_config/DiceLotteryConfig', \app\dice\controller\lottery_config\DiceLotteryConfigController::class);
|
fastRoute('dice/lottery_config/DiceLotteryConfig', \app\dice\controller\lottery_config\DiceLotteryConfigController::class);
|
||||||
Route::get('/dice/lottery_config/DiceLotteryConfig/getOptions', [\app\dice\controller\lottery_config\DiceLotteryConfigController::class, 'getOptions']);
|
Route::get('/dice/lottery_config/DiceLotteryConfig/getOptions', [\app\dice\controller\lottery_config\DiceLotteryConfigController::class, 'getOptions']);
|
||||||
|
Route::get('/dice/lottery_config/DiceLotteryConfig/getCurrentPool', [\app\dice\controller\lottery_config\DiceLotteryConfigController::class, 'getCurrentPool']);
|
||||||
|
Route::post('/dice/lottery_config/DiceLotteryConfig/updateCurrentPool', [\app\dice\controller\lottery_config\DiceLotteryConfigController::class, 'updateCurrentPool']);
|
||||||
|
|
||||||
// 数据表维护
|
// 数据表维护
|
||||||
Route::get("/database/index", [\plugin\saiadmin\app\controller\system\DataBaseController::class, 'index']);
|
Route::get("/database/index", [\plugin\saiadmin\app\controller\system\DataBaseController::class, 'index']);
|
||||||
|
|||||||
Reference in New Issue
Block a user