feat: 迁移渠道与游戏统计及全量汇总

This commit is contained in:
Yvan
2026-11-04 01:08:33 +08:00
parent 6703a66f0d
commit fc27120950
31 changed files with 1492 additions and 6 deletions
@@ -0,0 +1,56 @@
{
"scope": "真实 sw7 会话,只读请求;完整统计及权限口径另由隔离 TCP HTTP 测试验证。",
"checks": [
{
"path": "/sw/channelData/list?sourceDb=lx,hw,yq&pageNum=1&pageSize=10",
"http": 200,
"code": 0,
"msg": "成功",
"passed": true,
"available": false,
"total": 0,
"begin": "2026-11-04",
"end": "2026-11-04"
},
{
"path": "/sw/channelData/list?beginTime=bad&endTime=2026-11-04",
"http": 200,
"code": 7,
"msg": "统计周期格式错误,应为 yyyy-MM-dd",
"passed": true
},
{
"path": "/sw/channelData/list?beginTime=2026-11-05&endTime=2026-11-04",
"http": 200,
"code": 7,
"msg": "统计开始日期不能晚于结束日期",
"passed": true
},
{
"path": "/sw/gameData/list?sourceDb=lx,hw,yq&pageNum=1&pageSize=10",
"http": 200,
"code": 0,
"msg": "成功",
"passed": true,
"available": false,
"total": 0,
"begin": "2026-11-04",
"end": "2026-11-04"
},
{
"path": "/sw/gameData/list?beginTime=bad&endTime=2026-11-04",
"http": 200,
"code": 7,
"msg": "统计周期格式错误,应为 yyyy-MM-dd",
"passed": true
},
{
"path": "/sw/gameData/list?beginTime=2026-11-05&endTime=2026-11-04",
"http": 200,
"code": 7,
"msg": "统计开始日期不能晚于结束日期",
"passed": true
}
],
"passed": true
}
@@ -0,0 +1,25 @@
{
"method": "真实 Chrome 渲染,受控业务数据;未写入真实数据",
"reports": [
{
"kind": "channel",
"passed": true,
"fullSummaryAcrossPages": true,
"filtersResetPage": true,
"platformAndGameFilters": true,
"noInventedExport": true,
"missingDataNotZero": true,
"pageErrors": []
},
{
"kind": "game",
"passed": true,
"fullSummaryAcrossPages": true,
"filtersResetPage": true,
"platformAndGameFilters": true,
"noInventedExport": true,
"missingDataNotZero": true,
"pageErrors": []
}
]
}
+28
View File
@@ -0,0 +1,28 @@
# 渠道统计与游戏分析核对
核对基线至旧后端 main 最终代码中的 `ChannelDataServiceImpl`、`GameDataServiceImpl`、`BusinessBindScopeServiceImpl`、`ReportQueryScopes` 及日汇总/身份键 Mapper;页面直接核对旧 `ChannelDataStatistics.vue` 与 `GameAnalytics.vue`。
## 数据与范围
- 数据来自 `tab_sw_report_day` 和 `tab_sw_report_day_key`,金额固定 `dedup_mode=0`,人数按查看者的身份证偏好。金额用精确十进制处理,保留两位。
- 渠道查询保留本人/下级绑定范围和“包含下级渠道”开关;模糊查询匹配账号,不匹配昵称。开启下级时,命中的下级扩展到同根渠道树,再与原权限范围、类型筛选取交集。
- 金额根渠道:一级用自身,否则正 top ID,再否则自身。人数根渠道沿用旧 SQL 的 `COALESCE(NULLIF(top_promote_id,0),promote_id)`;两者在异常历史层级数据上可能不同,不能擅自统一。
- 超管全平台、包含下级且无渠道筛选时包含官方 0 号和已无渠道资料的历史行;普通商务只返回允许展示的根渠道。
- 游戏分组按平台+游戏 ID,过滤 `game_id > 0`。游戏名称筛选使用报表中的历史名,展示使用 `tab_game` 当前名。
- 渠道商务名称先用平台商务账号,否则 SW 用户名;此处不追加画像/明细页面使用的括号用户名。
## 汇总与计算
- 游戏 summary 累加全部筛选后游戏行,与当前页无关。相同身份出现在不同游戏时分别计数,不做全局去重。
- 普通商务渠道 summary 累加可见行。超管渠道 summary 使用筛选范围内全局去重;模式 0 按平台前缀区分身份,模式 1 跨平台去重。
- 付费率=充值人数÷活跃人数×100,ARPU=充值金额÷活跃人数,ARPPU=充值金额÷充值人数。分母为零时为零。
- 保留原逐行人数的 Java int 上限,游戏汇总改用 int64 避免相加溢出。相同排序值使用平台、ID 稳定排序。
- 后端任一日期缺失时周期为上海当天;前端默认近 30 天含今天。后端页长缺失、非正或超过上限时为 500,页面显式传 10。
- 缺少必要数据表时 `available=false`、`summary=null`,顶部指标为 null,不把缺表当成零。
## 验证与优化
- 使用聚合查询和批量资料查询代替逐行查询,不改变业务口径。日期非法或倒置返回明确错误。
- 隔离 TCP HTTP 和仓储测试覆盖全量汇总与分页、跨平台同号、官方/孤立渠道、根渠道树去重、类型交集、历史游戏名过滤、当前资料展示、偏好切换及空范围。
- 领域测试覆盖大金额精确排序、分母和人数上限。前端检查筛选回第一页、30 天默认值、汇总不随分页变化、缺数据提示、没有额外导出入口。
- 真实 sw7 库只做只读请求;当前缺少完整业务报表,最终旧库复制与同源数据比较仍未开始。
+3 -1
View File
@@ -25,7 +25,7 @@
| 2 | 平台绑定、商务/渠道可见范围、外部平台与 OA 数据源、商务列表及抽屉 | 进行中;绑定、旗下渠道、商务/SDK 画像、OA 激活只读接口已接入;外部数据源及审核实库联调待完成 |
| 3 | 预警规则、记录与状态机、操作日志、附件、消息、任务注册与调度 | 进行中;规则、记录和工作流已接入;任务待迁移,消息盒子已确认属于未改动框架代码 |
| 4 | 渠道列表及新增、渠道激活、推广游戏等业务接口与页面 | 功能已接入;包含渠道画像,完整业务数据和源平台联调仍待最终验收 |
| 5 | 日汇总构建、充值/注册明细、渠道/游戏/区服报表、排行、画像与仪表盘 | 进行中;画像、注册/充值明细及导出已接入,其余统计与任务待迁移 |
| 5 | 日汇总构建、充值/注册明细、渠道/游戏/区服报表、排行、画像与仪表盘 | 进行中;画像、注册/充值明细及导出、渠道/游戏统计已接入,区服、排行、仪表盘业务数据与任务待迁移 |
| 6 | 静态接口核对、后端测试、前端构建和页面验证 | 随阶段推进,最终全量复核 |
| 7 | 用户确认源数据库,复制至隔离库,执行迁移,启动并逐接口核对数据 | 未开始,必须等待用户确认 |
@@ -90,3 +90,5 @@
- 注册/充值明细、两个 XLSX 导出及游戏下拉共五个接口已接入。注册保留 puid=0、同平台玩家全部历史成功充值;充值合计只算成功单,不随列表状态改变。渠道精确匹配、商务文字筛选、官方/未知渠道和跨平台同号均按旧口径处理。
- 修复注册游戏关联跨平台、超过200个渠道后放宽筛选的问题,批量补充当前页资料。导出超过10000条提前拒绝,保留数字/文本类型及原字段顺序。页面使用 Kra 表格、筛选、日期控件与下载,保留近30天默认显示和大额行高亮;注册导出权限与接口一致。
- 明细批次通过全量 Go、前端 ESLint/构建、隔离 TCP HTTP、工作簿内容校验和浏览器筛选/下载。真实 sw7 请求及空查询工作簿验证记录见 `ledger-http-2026-11-04.json`、`ledger-page-2026-11-04.json`,没有导出或修改真实业务行;详细边界见 `ledger-source-notes.md`。
- 渠道/游戏统计两个接口与 Kra 页面已接入,保留游戏筛选、渠道账号/类型筛选、平台、日期、排序、分页及全量汇总。金额固定模式 0,人数按当前身份证偏好;游戏汇总累加各游戏,渠道超管汇总全局去重、普通商务累加可见渠道,不互相替代。渠道模糊匹配扩到可见同树渠道,并保持类型交集;超管全平台范围包含官方和历史孤立渠道。
- 统计批次通过全量 Go、隔离数据库真实 TCP HTTP、领域/仓储测试、ESLint/生产构建;真实 sw7 请求和 Chrome 检查见 `analytics-http-2026-11-04.json`、`analytics-page-2026-11-04.json`。分页不改变汇总,缺表明确未接入;非法日期/倒置周期明确报错。没有添加旧统计页面不存在的导出按钮。详细口径与优化见 `analytics-source-notes.md`。
+18
View File
@@ -162,3 +162,21 @@
| 缺业务表 | 保留能读取的基本资料,明确提示未接入,不生成假零分层 |
验证:`channel-portrait-http-2026-11-03.json`、`channel-portrait-page-2026-11-03.json`、隔离数据真实 TCP HTTP 和完整 Go/前端构建检查。
## 渠道统计与游戏分析
来源及统计细节见 `analytics-source-notes.md`。
| 旧页面行为 | 新页面状态 |
| --- | --- |
| 平台默认全选,游戏多选、日期近 30 天,搜索/查询 | 已实现,查询和筛选回到第一页 |
| 渠道另有账号模糊、个人/公会类型筛选 | 已实现,文案明确按账号匹配 |
| 渠道顶部渠道数、注册、金额、付费率四卡片 | 已实现,使用全量后端汇总,与当前分页无关 |
| 渠道表平台、渠道、归属商务、注册/活跃/充值人数、新付费、金额和付费率 | 已实现,沿用 Kra 表格样式 |
| 游戏表平台、游戏、注册/活跃/付费人数、新付费、金额、付费率、ARPU、ARPPU | 已实现,游戏 ID 无无效排序箭头 |
| 游戏表尾汇总来自全部筛选结果 | 已实现,跨页保留全量 summary;渠道页使用顶部卡片 |
| 列排序和分页 | 已实现,服务器排序,同值增加平台/ID 保证稳定 |
| 旧页面无导出接口/按钮 | 不增加导出入口 |
| 缺报表数据 | 明确显示未接入,清空过期汇总,指标不伪造零 |
验证:`analytics-http-2026-11-04.json`、`analytics-page-2026-11-04.json`;Chrome 使用受控业务数据,完整计算和权限使用隔离数据库的真实 TCP HTTP 验证。