This commit is contained in:
ray zhou
2026-06-29 14:51:55 +08:00
parent 225fb2bd28
commit 2dd9f17da9
319 changed files with 29461 additions and 9412 deletions

View File

@@ -0,0 +1,80 @@
<!-- 740abbc4-5a59-41be-9318-5927550e6875 -->
---
todos:
- id: "sql"
content: "新建 slot_console/db/migrate_vip_bet_bonus_rate.sqlALTER 加列 bet_bonus_rate decimal(5,2) + UPDATE 写入 VIP1-15 初始值"
status: pending
- id: "console-logic"
content: "改 UserGameStatistics::switchBonus() 按 VIP 等级取 bet_bonus_rateVIP0/空配置不转换,补日志上下文"
status: pending
- id: "console-model"
content: "slot_console UserVipConfigModel 补 @property bet_bonus_rate"
status: pending
- id: "admin-model-validate"
content: "slot_admin UserVipConfigModel @property + UserVipConfigValidate rule/message/scene 增加 bet_bonus_rate"
status: pending
- id: "vue"
content: "slot_admin_vue edit.vue 与 index.vue 增加解锁流速字段与列"
status: pending
- id: "verify"
content: "按门禁跑 verify-slot-backend.sh 与 docker php -l输出检测报告"
status: pending
isProject: false
---
## 背景
`slot_console` 每日统计在用户亏损时把冻结金额转为可领取金额,当前用全局固定费率:
```147:148:slot_console/app/command/UserGameStatistics.php
$gameBaseInfo = ConfigService::getInstance()->getGroupData('game_base');
$bonus = intval($gameBaseInfo['bet_bonus_rate'] * $lose/100);
```
需求:解锁流速按 VIP 等级阶梯VIP1=0.5% … VIP15=2.0%),后台可配置。`user_vip_config` 现无此字段(已有的 `lose_rate` 是「亏损奖励」另一活动,不复用)。
## 决策(已确认)
- 全栈实现DB 列 + slot_admin/vue 后台可配 + slot_console 按等级取值。
- 新列 `bet_bonus_rate``decimal(5,2)`,单位 %。
- VIP0 比例为 0不再转换冻结金额
## 改动点
### 1. DB 迁移(新建 SQL
新建 [slot_console/db/migrate_vip_bet_bonus_rate.sql](slot_console/db/migrate_vip_bet_bonus_rate.sql)
- `ALTER TABLE s_common.user_vip_config ADD COLUMN bet_bonus_rate decimal(5,2) NOT NULL DEFAULT 0 COMMENT '冻结金额解锁流速(%)按VIP等级' AFTER lose_rate;`
- 按需求 `UPDATE` 写入 VIP1-15 初始值0.5/0.6/.../1.8/2.0VIP15=2.0)。
### 2. slot_console 取值逻辑
改 `switchBonus()`[slot_console/app/command/UserGameStatistics.php](slot_console/app/command/UserGameStatistics.php)
- 用 `VipService::getVipLevelConfig($userInfoEntity->vip_level)` 取 VIP 配置(已有 Redis 缓存)。
- VIP0 / 配置为空 / 费率<=0 直接 return不转换
- `$bonus = intval($vipConfig->bet_bonus_rate * $lose / 100);` 取代 game_base 读取。
- 日志补 `vip_level`、`bet_bonus_rate`。
模型 PHPDoc 加 `@property` 字段:[slot_console/app/model/UserVipConfigModel.php](slot_console/app/model/UserVipConfigModel.php)。
### 3. slot_admin 后台
- [model/UserVipConfigModel.php](backend/slot_admin/app/model/UserVipConfigModel.php)`@property` 增加 `bet_bonus_rate`。
- [validate/UserVipConfigValidate.php](backend/slot_admin/app/game/validate/UserVipConfigValidate.php)`rule`/`message`/`scene(save,update)` 增加 `bet_bonus_rate => require`。
- 该字段为百分比小数,直接存储,不走 `setNumberFormat`(控制器 `format()` 无需改)。
### 4. slot_admin_vue 前端
- [edit.vue](backend/slot_admin_vue/src/views/game/userVipConfig/edit.vue)`formData` + `rules` + 新增「解锁流速(%)」`a-form-item field="bet_bonus_rate"`。
- [index.vue](backend/slot_admin_vue/src/views/game/userVipConfig/index.vue)`columns` 增加「解锁流速」列。
## 数据流
```mermaid
flowchart LR
admin[slot_admin 配置bet_bonus_rate] --> db[(s_common.user_vip_config)]
admin --> cache[(redis vip:config:level:*)]
console[slot_console switchBonus] --> vipsvc[VipService.getVipLevelConfig]
vipsvc --> cache
vipsvc --> db
console --> wallet[switchBonus 转可领取]
```
## 注意
- `game_base.bet_bonus_rate` 配置改为不再被 `switchBonus` 使用(保留配置项,不删除)。
- Redis 缓存存 `model->toArray()`新列自动随后台保存刷新TTL 600s
- 完成前按门禁跑 `verify-slot-backend.sh` 与 docker `php -l`,并对照 php-clean-code 输出检测报告。