doge před 1 dnem
rodič
revize
1cc67bbb7f

+ 1 - 1
app/Services/Reporting/ReportReader.php

@@ -69,7 +69,7 @@ class ReportReader
             foreach ($rows as $i => &$row) $row['rank'] = $i + 1; unset($row);
         } else usort($rows, fn ($a, $b) => bccomp((string) $b['bet_amount'], (string) $a['bet_amount'], 10) ?: strcmp($a['group_id'], $b['group_id']));
         $total = count($rows); $rows = array_slice($rows, ((int) $p['page'] - 1) * (int) $p['limit'], (int) $p['limit']);
-        return $result['meta'] + ['total' => $total, 'data' => $rows, 'unallocated' => $result['unallocated'] ?? null];
+        return $result['meta'] + ['total' => $total, 'data' => $rows];
     }
 
     public function funds(array $input): array

+ 1 - 1
docs/前端交付/README.md

@@ -16,7 +16,7 @@
 - [资金流动](bot-28/后台/资金流动-前端接入.md)
 - [龙虎榜](bot-28/后台/龙虎榜-前端接入.md)
 
-三个页面默认全部时间,不传起止日期即可;选择日期后按区间查询,最多366天;页面删除筛选下方统计说明与元数据、黄色完整性提示、列表数据状态列,保留筛选、业务指标、明细和分页。金额或人数为 `null` 时仅显示“—”。
+三个页面默认全部时间,不传起止日期即可;选择日期后按区间查询,最多366天;页面删除筛选下方统计说明与元数据、黄色完整性提示、列表数据状态列,保留筛选、业务指标、明细和分页。龙虎榜和营业报表订单明细只展示列表,不增加“未分配公共资金与成本”区块。金额或人数为 `null` 时仅显示“—”。
 
 ## 阅读入口
 

+ 3 - 3
docs/前端交付/bot-28/后台/报表汇总-前端接入.md

@@ -328,7 +328,7 @@ GET /admin/reporting/summary?report_type=business&start_date=2026-10-26&end_date
 GET /admin/reporting/details?report_type=promotion&start_date=2026-10-26&end_date=2026-10-26&platform=all&category=self:lottery&settlement_status=all&page=1&limit=20
 ```
 
-业务数据包括 `filters`、`currency`、`total`、`data`、`unallocated`;`total=0` 时列表 `data=[]`。`data` 每行拥有第6节同组统计指标,并附以下身份字段:
+业务数据包括 `filters`、`currency`、`total`、`data`;`total=0` 时列表 `data=[]`。`data` 每行拥有第6节同组统计指标,并附以下身份字段:
 
 | 字段 | 类型 | 说明 |
 |---|---|---|
@@ -339,7 +339,7 @@ GET /admin/reporting/details?report_type=promotion&start_date=2026-10-26&end_dat
 | `agent_account` | string \| null | 推广为分组代理;营业/分享为该行人员的代理回显,可能为空 |
 | `inviter_account` | string \| null | 该行人员的邀请人回显,可能为空 |
 
-默认按 `bet_amount` 降序,同额按 `group_id` 字符串升序。接口不提供本页自选排序参数。`unallocated` 为完整筛选下无法分给会员的公共资金/成本对象,使用相同统计字段;`null` 表示没有此类数据。可在分页列表外单独展示“未分配公共资金与成本”,不把它当作一名会员或分页数据行重复加入。
+默认按 `bet_amount` 降序,同额按 `group_id` 字符串升序。接口不提供本页自选排序参数。订单明细只使用 `data.data` 渲染列表,不增加“未分配公共资金与成本”区块、说明或分页外附加行。
 
 分页行金额不能替代完整总计。当前页相加也不能得出总卡;需要总卡时使用相同主筛选的 `summary`。分类下查看资金需遵守第6.2节范围边界。
 
@@ -375,7 +375,7 @@ GET /admin/reporting/orders?report_type=promotion&start_date=2026-10-26&end_date
 GET /admin/reporting/events?report_type=business&start_date=2026-10-26&end_date=2026-10-26&platform=all&category=all&settlement_status=all&group_id=2&kind=deposit&page=1&limit=20
 ```
 
-不传 `kind` 查询全部类型。`category != all` 时仅保留相同分类代码的资金行,公共资金的 `category=null` 不会分摊到分类。`settlement_status` 不限制资金事件。若追溯总卡中未分配公共资金,可不传 `group_id`;不要将 `unallocated` 字符串当作普通组传入。
+不传 `kind` 查询全部类型。`category != all` 时仅保留相同分类代码的资金行,公共资金的 `category=null` 不会分摊到分类。`settlement_status` 不限制资金事件。
 
 | `kind` | 名称 |
 |---|---|

+ 3 - 2
docs/前端交付/bot-28/后台/报表页面调整-移除三个入口.md

@@ -1,6 +1,6 @@
 # 报表页面调整:移除三个入口
 
-2026-10-26前端修正单,适用于 `bot-28` 后台报表汇总、资金流动和龙虎榜页面。本文件为当前调整要求,可直接修改页面。
+2026-10-27更新的前端修正单,适用于 `bot-28` 后台报表汇总、资金流动和龙虎榜页面。本文件为当前调整要求,可直接修改页面。
 
 ## 功能入口
 
@@ -19,10 +19,11 @@
 1. 筛选区下方整段统计说明与元数据,包括币种、数据更新时间、查询时间、资格门槛政策、活动采集起点、佣金余额快照。
 2. 黄色数据完整性提示区域。
 3. 列表右侧“数据状态/数据不完整”列。
+4. 龙虎榜、营业报表订单明细中的“未分配公共资金与成本”区块,包括“不属于会员排行”“不计入会员或分页行”等说明及页外附加内容。
 
 不增加替代提示、角标、弹窗或独立说明行。接口仍返回 `quality`、`complete`、`known_*` 等字段,页面不渲染,不用已知小计代替最终值;最终值为 `null` 时只显示“—”。`currency` 可用于金额格式,不单独显示说明行。
 
-页面保留筛选、查询/重置、卡片与业务指标、明细及分页。报表汇总保留营业/推广/分享赚钱页签、所有订单与游戏卡片、订单和资金追溯;原有效会员数、活动时长等业务列可保留。请求失败仍按 `code` 展示实际 `msg`。
+会员排行与订单明细只渲染各接口的 `data.data`,分页使用 `total`。页面保留筛选、查询/重置、卡片与业务指标、明细及分页。报表汇总保留营业/推广/分享赚钱页签、所有订单与游戏卡片、订单和资金追溯;原有效会员数、活动时长等业务列可保留。请求失败仍按 `code` 展示实际 `msg`。
 
 ## 默认全部时间
 

+ 2 - 1
docs/前端交付/bot-28/后台/龙虎榜-前端接入.md

@@ -69,6 +69,8 @@ GET /admin/reporting/leaderboard?metric=deposit_amount&page=1&limit=20
 
 业务错误也可能返回 HTTP 200,以 `code` 判断结果。参数错误的 `msg` 是第一条校验文案;报表暂不可用的文案为“报表暂不可用,请稍后重试”。
 
+本页只根据 `data.data` 展示会员排行,不增加“未分配公共资金与成本”区块、说明或额外行。
+
 本页使用的业务对象字段:
 
 | 字段 | 类型 | 说明 |
@@ -77,7 +79,6 @@ GET /admin/reporting/leaderboard?metric=deposit_amount&page=1&limit=20
 | `currency` | string | 金额格式使用的本位币,如 `CNY` |
 | `total` | integer | 当前项目的会员总数 |
 | `data` | array | 当前页列表,完整路径为外层 `data.data` |
-| `unallocated` | object/null | 未分配公共资金与成本;不进入会员列表,不计入 `total` |
 
 主表行字段:
 

+ 2 - 2
docs/前端交付/bot-28/后台/龙虎榜资金流动与报表-接口.md

@@ -1,6 +1,6 @@
 # 报表汇总、资金流动、龙虎榜:前端接入文档目录
 
-2026-10-26更新。以下三份为完整前端接入文档,各自包含接口、请求参数、返回字段、示例和页面交互,可直接转发。
+2026-10-27更新。以下三份为完整前端接入文档,各自包含接口、请求参数、返回字段、示例和页面交互,可直接转发。
 
 | 页面 | 完整文档 | 主接口 |
 |---|---|---|
@@ -10,7 +10,7 @@
 
 服务项目为 `bot-28`,使用后台 API 域名和管理员 Token。
 
-三个页面默认查询全部时间,不传起止日期;选择日期后按区间查询。页面保留筛选、查询/重置、卡片与业务指标、明细及分页;去掉筛选下方统计说明与元数据、黄色完整性提示、列表数据状态列,不新增替代提示。
+三个页面默认查询全部时间,不传起止日期;选择日期后按区间查询。页面保留筛选、查询/重置、卡片与业务指标、明细及分页;去掉筛选下方统计说明与元数据、黄色完整性提示、列表数据状态列,不新增替代提示。龙虎榜和营业报表订单明细也不展示“未分配公共资金与成本”区块。
 
 三个页面均去掉“有效会员最低存款设置”“收付款核对”“数据质量”按钮及关联弹窗。有效会员人数直接使用接口结果;条件管理仍在现有分享赚钱设置。
 

+ 18 - 12
docs/前端交付/交付清单.json

@@ -70,9 +70,9 @@
       "role": "后台",
       "kind": "目录",
       "git_status": "M",
-      "source_sha256": "bc2e73e53cbf7859be218b0da0e4d7a03fe33f52268f716025d18f0a49d449e2",
-      "delivery_sha256": "bc2e73e53cbf7859be218b0da0e4d7a03fe33f52268f716025d18f0a49d449e2",
-      "revised_on": "2026-10-26"
+      "source_sha256": "0327c1acea952dd327529260066f3541e86f345e0ce23e98ac86e1a6e6dc97e6",
+      "delivery_sha256": "0327c1acea952dd327529260066f3541e86f345e0ce23e98ac86e1a6e6dc97e6",
+      "revised_on": "2026-10-27"
     },
     {
       "project": "bot-28",
@@ -115,9 +115,9 @@
       "kind": "正文",
       "git_status": "??",
       "scope_reason": "按用户要求重新整理的完整前端接入文档",
-      "revised_on": "2026-10-26",
-      "source_sha256": "8f604172df704a46c14217073bda6039391e1f701c1c135ce3b66706626f6ae1",
-      "delivery_sha256": "8f604172df704a46c14217073bda6039391e1f701c1c135ce3b66706626f6ae1"
+      "revised_on": "2026-10-27",
+      "source_sha256": "4cdd9cd2741aeb5d70411971888f41b796621ce9f8f8e9e7b0760b23e5faea24",
+      "delivery_sha256": "4cdd9cd2741aeb5d70411971888f41b796621ce9f8f8e9e7b0760b23e5faea24"
     },
     {
       "project": "bot-28",
@@ -139,9 +139,9 @@
       "kind": "正文",
       "git_status": "??",
       "scope_reason": "按用户要求重新整理的完整前端接入文档",
-      "revised_on": "2026-10-26",
-      "source_sha256": "fc2846111a9155b83e3603e81ecf714d5cd58328382c48ceec4f02a8b676fa05",
-      "delivery_sha256": "fc2846111a9155b83e3603e81ecf714d5cd58328382c48ceec4f02a8b676fa05"
+      "revised_on": "2026-10-27",
+      "source_sha256": "842c78b254cbf6e76ac84f2ffbf23528980d9ab4d99f9c55b5d3d9e87b7ed5d5",
+      "delivery_sha256": "842c78b254cbf6e76ac84f2ffbf23528980d9ab4d99f9c55b5d3d9e87b7ed5d5"
     },
     {
       "project": "bot-28",
@@ -151,9 +151,9 @@
       "kind": "修正单",
       "git_status": "??",
       "scope_reason": "用户明确取消三个报表入口并统一有效会员规则的独立修正单",
-      "source_sha256": "021078202c13f747b6812664d5ad490a5e6aebc78608395a5eb48aaca6365724",
-      "delivery_sha256": "021078202c13f747b6812664d5ad490a5e6aebc78608395a5eb48aaca6365724",
-      "revised_on": "2026-10-26"
+      "source_sha256": "26bf5796bb2fa7daad79537e323b53e1de840b35022555ccb575ef913dd5f6ce",
+      "delivery_sha256": "26bf5796bb2fa7daad79537e323b53e1de840b35022555ccb575ef913dd5f6ce",
+      "revised_on": "2026-10-27"
     },
     {
       "project": "melbet_sport-api",
@@ -326,6 +326,12 @@
       "project": "bot-28",
       "head_commit": "1af7230324a6ad5b753a02d3fd1a715e9e79ddf6",
       "description": "按用户确认,报表默认查询全部时间,无需all_time请求参数;不传日期为全部,传入日期按区间筛选,前端默认与重置清空日期"
+    },
+    {
+      "date": "2026-10-27",
+      "project": "bot-28",
+      "head_commit": "23a69f51ca35f09750f4acb3f6c2b475abb1147c",
+      "description": "按用户要求取消龙虎榜和营业报表订单明细的未分配公共资金与成本区块;列表接口不再返回unallocated独立对象,汇总成本与净收益计算保留"
     }
   ]
 }

+ 1 - 1
docs/前端交付/交付清单.md

@@ -2,7 +2,7 @@
 
 按用户指定Git范围收录接口资料,并按后续要求补充后台公告、信息管理、维护以及报表修订文档。交付副本采用当前文档版本,链接均在本目录内。
 
-本轮重新整理的[报表汇总](bot-28/后台/报表汇总-前端接入.md)、[资金流动](bot-28/后台/资金流动-前端接入.md)、[龙虎榜](bot-28/后台/龙虎榜-前端接入.md)为三份完整前端接入文档,可直接转发。原合并文件作为目录入口保留。三页已补充全部时间查询,并统一移除统计说明与元数据、完整性提示和列表数据状态列。
+本轮重新整理的[报表汇总](bot-28/后台/报表汇总-前端接入.md)、[资金流动](bot-28/后台/资金流动-前端接入.md)、[龙虎榜](bot-28/后台/龙虎榜-前端接入.md)为三份完整前端接入文档,可直接转发。原合并文件作为目录入口保留。三页已补充全部时间查询,并统一移除统计说明与元数据、完整性提示和列表数据状态列。龙虎榜及营业报表订单明细也已取消“未分配公共资金与成本”区块。
 
 共21个来源文件:bot-28后台12个,melbet_sport-api前台9个;其中16份正文、3份目录、1份修正单、1份示例数据。状态列保留整理时的Git状态,后续修订见JSON的revisions。
 

+ 3 - 3
docs/总后台/报表汇总-前端接入.md

@@ -328,7 +328,7 @@ GET /admin/reporting/summary?report_type=business&start_date=2026-10-26&end_date
 GET /admin/reporting/details?report_type=promotion&start_date=2026-10-26&end_date=2026-10-26&platform=all&category=self:lottery&settlement_status=all&page=1&limit=20
 ```
 
-业务数据包括 `filters`、`currency`、`total`、`data`、`unallocated`;`total=0` 时列表 `data=[]`。`data` 每行拥有第6节同组统计指标,并附以下身份字段:
+业务数据包括 `filters`、`currency`、`total`、`data`;`total=0` 时列表 `data=[]`。`data` 每行拥有第6节同组统计指标,并附以下身份字段:
 
 | 字段 | 类型 | 说明 |
 |---|---|---|
@@ -339,7 +339,7 @@ GET /admin/reporting/details?report_type=promotion&start_date=2026-10-26&end_dat
 | `agent_account` | string \| null | 推广为分组代理;营业/分享为该行人员的代理回显,可能为空 |
 | `inviter_account` | string \| null | 该行人员的邀请人回显,可能为空 |
 
-默认按 `bet_amount` 降序,同额按 `group_id` 字符串升序。接口不提供本页自选排序参数。`unallocated` 为完整筛选下无法分给会员的公共资金/成本对象,使用相同统计字段;`null` 表示没有此类数据。可在分页列表外单独展示“未分配公共资金与成本”,不把它当作一名会员或分页数据行重复加入。
+默认按 `bet_amount` 降序,同额按 `group_id` 字符串升序。接口不提供本页自选排序参数。订单明细只使用 `data.data` 渲染列表,不增加“未分配公共资金与成本”区块、说明或分页外附加行。
 
 分页行金额不能替代完整总计。当前页相加也不能得出总卡;需要总卡时使用相同主筛选的 `summary`。分类下查看资金需遵守第6.2节范围边界。
 
@@ -375,7 +375,7 @@ GET /admin/reporting/orders?report_type=promotion&start_date=2026-10-26&end_date
 GET /admin/reporting/events?report_type=business&start_date=2026-10-26&end_date=2026-10-26&platform=all&category=all&settlement_status=all&group_id=2&kind=deposit&page=1&limit=20
 ```
 
-不传 `kind` 查询全部类型。`category != all` 时仅保留相同分类代码的资金行,公共资金的 `category=null` 不会分摊到分类。`settlement_status` 不限制资金事件。若追溯总卡中未分配公共资金,可不传 `group_id`;不要将 `unallocated` 字符串当作普通组传入。
+不传 `kind` 查询全部类型。`category != all` 时仅保留相同分类代码的资金行,公共资金的 `category=null` 不会分摊到分类。`settlement_status` 不限制资金事件。
 
 | `kind` | 名称 |
 |---|---|

+ 3 - 2
docs/总后台/报表页面调整-移除三个入口.md

@@ -1,6 +1,6 @@
 # 报表页面调整:移除三个入口
 
-2026-10-26前端修正单,适用于 `bot-28` 后台报表汇总、资金流动和龙虎榜页面。本文件为当前调整要求,可直接修改页面。
+2026-10-27更新的前端修正单,适用于 `bot-28` 后台报表汇总、资金流动和龙虎榜页面。本文件为当前调整要求,可直接修改页面。
 
 ## 功能入口
 
@@ -19,10 +19,11 @@
 1. 筛选区下方整段统计说明与元数据,包括币种、数据更新时间、查询时间、资格门槛政策、活动采集起点、佣金余额快照。
 2. 黄色数据完整性提示区域。
 3. 列表右侧“数据状态/数据不完整”列。
+4. 龙虎榜、营业报表订单明细中的“未分配公共资金与成本”区块,包括“不属于会员排行”“不计入会员或分页行”等说明及页外附加内容。
 
 不增加替代提示、角标、弹窗或独立说明行。接口仍返回 `quality`、`complete`、`known_*` 等字段,页面不渲染,不用已知小计代替最终值;最终值为 `null` 时只显示“—”。`currency` 可用于金额格式,不单独显示说明行。
 
-页面保留筛选、查询/重置、卡片与业务指标、明细及分页。报表汇总保留营业/推广/分享赚钱页签、所有订单与游戏卡片、订单和资金追溯;原有效会员数、活动时长等业务列可保留。请求失败仍按 `code` 展示实际 `msg`。
+会员排行与订单明细只渲染各接口的 `data.data`,分页使用 `total`。页面保留筛选、查询/重置、卡片与业务指标、明细及分页。报表汇总保留营业/推广/分享赚钱页签、所有订单与游戏卡片、订单和资金追溯;原有效会员数、活动时长等业务列可保留。请求失败仍按 `code` 展示实际 `msg`。
 
 ## 默认全部时间
 

+ 2 - 1
docs/总后台/龙虎榜-前端接入.md

@@ -69,6 +69,8 @@ GET /admin/reporting/leaderboard?metric=deposit_amount&page=1&limit=20
 
 业务错误也可能返回 HTTP 200,以 `code` 判断结果。参数错误的 `msg` 是第一条校验文案;报表暂不可用的文案为“报表暂不可用,请稍后重试”。
 
+本页只根据 `data.data` 展示会员排行,不增加“未分配公共资金与成本”区块、说明或额外行。
+
 本页使用的业务对象字段:
 
 | 字段 | 类型 | 说明 |
@@ -77,7 +79,6 @@ GET /admin/reporting/leaderboard?metric=deposit_amount&page=1&limit=20
 | `currency` | string | 金额格式使用的本位币,如 `CNY` |
 | `total` | integer | 当前项目的会员总数 |
 | `data` | array | 当前页列表,完整路径为外层 `data.data` |
-| `unallocated` | object/null | 未分配公共资金与成本;不进入会员列表,不计入 `total` |
 
 主表行字段:
 

+ 2 - 2
docs/总后台/龙虎榜资金流动与报表-接口.md

@@ -1,6 +1,6 @@
 # 报表汇总、资金流动、龙虎榜:前端接入文档目录
 
-2026-10-26更新。以下三份为完整前端接入文档,各自包含接口、请求参数、返回字段、示例和页面交互,可直接转发。
+2026-10-27更新。以下三份为完整前端接入文档,各自包含接口、请求参数、返回字段、示例和页面交互,可直接转发。
 
 | 页面 | 完整文档 | 主接口 |
 |---|---|---|
@@ -10,7 +10,7 @@
 
 服务项目为 `bot-28`,使用后台 API 域名和管理员 Token。
 
-三个页面默认查询全部时间,不传起止日期;选择日期后按区间查询。页面保留筛选、查询/重置、卡片与业务指标、明细及分页;去掉筛选下方统计说明与元数据、黄色完整性提示、列表数据状态列,不新增替代提示。
+三个页面默认查询全部时间,不传起止日期;选择日期后按区间查询。页面保留筛选、查询/重置、卡片与业务指标、明细及分页;去掉筛选下方统计说明与元数据、黄色完整性提示、列表数据状态列,不新增替代提示。龙虎榜和营业报表订单明细也不展示“未分配公共资金与成本”区块。
 
 三个页面均去掉“有效会员最低存款设置”“收付款核对”“数据质量”按钮及关联弹窗。有效会员人数直接使用接口结果;条件管理仍在现有分享赚钱设置。
 

+ 8 - 1
tests/Integration/ReportingTest.php

@@ -423,7 +423,14 @@ class ReportingTest extends TestCase
         $this->assertSame('17.0000000000', $row['share_accrual']); $this->assertSame('5.0000000000', $row['share_commission']);
         $this->assertSame('9.0000000000', $row['agent_accrual']); $this->assertSame('7.0000000000', $row['agent_commission']);
         $this->assertSame('28.0000000000', $row['company_profit']);
-        $details = $this->reader->details($this->today()); $this->assertSame('7.0000000000', $details['unallocated']['agent_commission']);
+        foreach ([false, true] as $ranking) {
+            $details = $this->reader->details($this->today(), $ranking);
+            $this->assertArrayNotHasKey('unallocated', $details);
+            $this->assertNotContains('unallocated', array_column($details['data'], 'group_id'));
+            $this->assertSame(2, $details['total']);
+        }
+        $this->assertSame('7.0000000000', $this->reader->summary($this->today())['summary']['agent_commission']);
+        $this->assertSame('28.0000000000', $this->reader->summary($this->today())['summary']['company_profit']);
         $this->assertSame('5.0000000000', $this->reader->summary(['report_type' => 'sharing'])['summary']['share_commission']);
     }