This commit is contained in:
ray zhou
2026-05-29 11:21:40 +08:00
parent 5d6d482efe
commit f71a5c59af
447 changed files with 32245 additions and 116 deletions

View File

@@ -0,0 +1,95 @@
---
name: 定格列表盈利阈值
overview: 在管理后台首充定格统计列表中,按当前页 UID 调用与 game/pop/index 相同的养客配置接口PopService → slot_pwa getDPByPlayers为每行补充 profitthreshold及可选 hasprofitthreshold字段前端新增对应列。
todos:
- id: pop-service-batch
content: PopService 新增 mapDevelopPlayerByUids按 uid 调用 getPageList 并容错
status: completed
- id: logic-enrich
content: FreeCreditsStatsLogic.list 合并 profitthreshold及可选 hasprofitthreshold
status: completed
- id: vue-columns
content: freeCreditsStats/index.vue 增加盈利阈值列与展示格式化
status: completed
- id: verify-pop-parity
content: 抽 12 个 UID 对比养客配置页与定格列表字段一致
status: completed
isProject: false
---
# 首充定格列表增加盈利阈值
## 背景
- 首充定格统计已迁入 [`slot_admin`](backend/slot_admin/app/game/logic/FreeCreditsStatsLogic.php),接口 `GET /game/freeCreditsStats/index` 返回列表 + 顶部汇总。
- 养客配置页 [`game/pop/index`](backend/slot_admin_vue/src/views/game/pop/config/index.vue) 通过 [`PopController::index`](backend/slot_admin/app/game/controller/PopController.php) → [`PopService::getPageList`](backend/slot_admin/app/service/game/PopService.php) → `slot_pwa` `pop/admin/getDPByPlayers` → 游戏侧 `/api/v2/dp/getDPByPlayers`,列表含 `profitthreshold``hasprofitthreshold` 等字段。
- 需求文档 §18.2 未写盈利阈值,属运营侧补充字段;数据源应与养客页一致,**不用** `UserTag.popBalance` 等本地 tag。
## 数据流
```mermaid
flowchart LR
vue[freeCreditsStats/index.vue] --> api["/game/freeCreditsStats/index"]
api --> logic[FreeCreditsStatsLogic.list]
logic --> db[(s_common free_credits_*)]
logic --> wallet[WalletService statistic]
logic --> pop[PopService getPageList]
pop --> pwa[slot_pwa getDPByPlayers]
pwa --> game["/api/v2/dp/getDPByPlayers"]
```
## 实现要点
### 1. PopService按 UID 批量取养客配置(公共封装)
在 [`PopService.php`](backend/slot_admin/app/service/game/PopService.php) 新增方法,例如 `mapDevelopPlayerByUids(array $uids): array<int, array>`
- 对每个 `uid` 调用现有 `getPageList(['userid' => $uid, 'page' => 1, 'limit' => 1])`(与 pop/index 单用户筛选一致;`starttime`/`endtime` 不传,与养客页默认「全量」查询一致)。
- 从返回 `data[0]` 取行;无记录或接口异常时该 uid 映射为 `null`Logic 展示 `-` / 空)。
- 单 uid 失败只 `logger()->warning`**不**拖垮整页列表(与 `fetchTotalRecharge` 容错一致)。
**说明**`getDPByPlayers` 仅支持单 `userid`,每页最多 100 条 ≈ 最多 100 次 HTTP经 pwa 到游戏 API。当前 `limit` 上限 100可接受若后续性能不足再与游戏侧协商批量接口不在本次范围。
### 2. FreeCreditsStatsLogic列表富化
在 [`FreeCreditsStatsLogic::list`](backend/slot_admin/app/game/logic/FreeCreditsStatsLogic.php) 中,在已有 `fetchTotalRecharge` 之后:
- 调用 `PopService` 批量映射;
- 为每行写入(字段名与 pop/index 保持一致,便于前端复用展示逻辑):
- `profitthreshold``int|null`,配置值(养客页原样展示,**不**除 10000
- 若产品确认需要第二列:`hasprofitthreshold`,游戏侧为千分位类整数,展示时与养客页 [`toNum`](backend/slot_admin_vue/src/views/game/pop/config/index.vue) 一致:`Number((val / 10000).toFixed(2))`
无养客配置的用户:`profitthreshold``null`,前端显示 `-`
**分层**:跨服务 HTTP 封装在 `PopService``FreeCreditsStatsLogic` 只编排,不直接拼 `pwaApiHost` URL。
### 3. 前端:新增列
修改 [`freeCreditsStats/index.vue`](backend/slot_admin_vue/src/views/game/freeCreditsStats/index.vue)
- 在「累计充值金额」后(或渠道后)增加列:
- `盈利阈值``profitthreshold`
- (若选两列)`已达盈利阈值``hasprofitthreshold`slot 内 `/10000` 格式化
- 无自定义 slot 时直接显示;`null`/`undefined` 显示 `-`
路由、API 文件 [`freeCreditsStats.js`](backend/slot_admin_vue/src/api/game/freeCreditsStats.js) **不变**
### 4. 不改动的部分
- `statistics` 顶部 7 项汇总不加盈利阈值(无聚合口径)。
- Validate / DTO 无新筛选项。
- `slot_console` innerapi、`slot_sdk` 无需改动(统计已在 admin
## 验证
- 某 UID 在「养客配置」页能查到 `profitthreshold` 时,定格列表同 UID 显示相同值。
- 无养客配置 UID 显示 `-`,列表其余字段正常。
- pop/pwa 不可用时:列表仍可出数,盈利阈值为空;日志有 warning。
- 与迁前对比:除新增列外,筛选、排序、汇总、累计充值口径不变。
## 涉及文件
| 仓库 | 文件 |
|------|------|
| slot_admin | [`PopService.php`](backend/slot_admin/app/service/game/PopService.php)、[`FreeCreditsStatsLogic.php`](backend/slot_admin/app/game/logic/FreeCreditsStatsLogic.php) |
| slot_admin_vue | [`freeCreditsStats/index.vue`](backend/slot_admin_vue/src/views/game/freeCreditsStats/index.vue) |