优化中奖权重计算方式

This commit is contained in:
2026-03-12 17:17:00 +08:00
parent 064ce06393
commit 7e4ba86afa
25 changed files with 2344 additions and 403 deletions

View File

@@ -8,6 +8,7 @@ namespace app\dice\controller\reward_config;
use plugin\saiadmin\basic\BaseController;
use app\dice\logic\reward_config\DiceRewardConfigLogic;
use app\dice\logic\reward\DiceRewardLogic;
use app\dice\validate\reward_config\DiceRewardConfigValidate;
use plugin\saiadmin\service\Permission;
use support\Request;
@@ -124,20 +125,21 @@ class DiceRewardConfigController extends BaseController
}
/**
* T1-T5、BIGWIN 权重配比:按档位分组返回配置列表
* T1-T5、BIGWIN 权重配比:按档位分组返回配置列表(含顺时针/逆时针权重,来自 dice_reward
* @param Request $request
* @return Response
*/
#[Permission('奖励配置列表', 'dice:reward_config:index:index')]
public function weightRatioList(Request $request): Response
{
$data = $this->logic->getListGroupedByTier();
$rewardLogic = new DiceRewardLogic();
$data = $rewardLogic->getListGroupedByTierWithDirection();
return $this->success($data);
}
/**
* T1-T5、BIGWIN 权重配比:批量更新权重(单条 weight 1-10000各档位权重和不限制
* 保存后 Logic 会重新实例化奖励配置表缓存DiceRewardConfig::refreshCache
* T1-T5、BIGWIN 权重配比:按 DiceReward 主键 id 批量更新 weight写入 dice_reward修改后刷新缓存
* items: [ { id: DiceReward.id, weight: 1-10000 }, ... ]
* @param Request $request
* @return Response
*/
@@ -149,13 +151,32 @@ class DiceRewardConfigController extends BaseController
return $this->fail('参数 items 必须为数组');
}
try {
$this->logic->batchUpdateWeights($items);
$rewardLogic = new DiceRewardLogic();
$rewardLogic->batchUpdateWeights($items);
return $this->success('保存成功');
} catch (\plugin\saiadmin\exception\ApiException $e) {
return $this->fail($e->getMessage());
}
}
/**
* 创建奖励对照:按当前 dice_reward_config 为两种方向顺时针0、逆时针1生成所有色子可能对应的 dice_reward 记录
* 权重默认 1可在「奖励对照」页的权重编辑弹窗中调整
* @param Request $request
* @return Response
*/
#[Permission('奖励配置修改', 'dice:reward_config:index:update')]
public function createRewardReference(Request $request): Response
{
try {
$rewardLogic = new DiceRewardLogic();
$result = $rewardLogic->createRewardReferenceFromConfig();
return $this->success($result, '创建奖励对照成功');
} catch (\plugin\saiadmin\exception\ApiException $e) {
return $this->fail($e->getMessage());
}
}
/**
* 权重配比测试:仅模拟落点统计,不创建游玩记录。按当前配置在内存中模拟 N 次抽奖,返回各 grid_number 落点次数,可选保存到 dice_reward_config_record。
* @param Request $request test_count: 100|500|1000, save_record: bool, lottery_config_id: int|null 奖池配置ID用于设定 T1-T5 概率