ok
This commit is contained in:
80
plans/VIP-740abbc4.plan.md
Normal file
80
plans/VIP-740abbc4.plan.md
Normal file
@@ -0,0 +1,80 @@
|
||||
<!-- 740abbc4-5a59-41be-9318-5927550e6875 -->
|
||||
---
|
||||
todos:
|
||||
- id: "sql"
|
||||
content: "新建 slot_console/db/migrate_vip_bet_bonus_rate.sql:ALTER 加列 bet_bonus_rate decimal(5,2) + UPDATE 写入 VIP1-15 初始值"
|
||||
status: pending
|
||||
- id: "console-logic"
|
||||
content: "改 UserGameStatistics::switchBonus() 按 VIP 等级取 bet_bonus_rate,VIP0/空配置不转换,补日志上下文"
|
||||
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.0,VIP15=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 输出检测报告。
|
||||
Reference in New Issue
Block a user