Bläddra i källkod

回水列表:显示当月实时记录,新增 can_grant

当月记录只展示预估,下个月才能发放;补充 F1彩票分类配置说明。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
doge 3 dagar sedan
förälder
incheckning
d58e5a84f7

+ 6 - 2
app/Services/BackflowService.php

@@ -78,13 +78,17 @@ class BackflowService extends BaseService
     public static function paginate(array $search = []): array
     {
 
-        $date = Carbon::now('Asia/Shanghai')->format('Y-m');
+        // 当月(上海时间)的记录也展示实时统计,但要到下个月才能发放,见 RewardGrantService::grant
+        $month = Carbon::now('Asia/Shanghai')->format('Y-m');
         $query = static::$MODEL::join('users', 'users.member_id', '=', 'backflow.member_id')
                 ->where(static::getWhere($search))
-                ->where('backflow.date', '<', $date);
+                ->where('backflow.date', '<=', $month);
 
         $paginator = $query->select("backflow.*", "users.first_name", "users.account", "users.admin_note as user_admin_note")->orderByDesc('date')->orderBy('status')
             ->paginate($search['limit']);
+        foreach ($paginator->items() as $item) {
+            $item['can_grant'] = (int)$item->status === 0 && (string)$item->date < $month;
+        }
 
 //        $count = $query->count();
 //        $query->with(['user'])->orderByDesc('date')->orderBy('status');

+ 3 - 0
docs/总后台/回水规则配置.md

@@ -102,6 +102,7 @@ Content-Type: application/json
 | `loss_amount` | 各分类亏损合计 |
 | `details` | 分类明细数组,每项见下表 |
 | `need_flow` | 需要打码量合计 |
+| `can_grant` | 是否可点“发放”(2026-11-05 新增):未发放且月份早于当月(上海时间)才为 `true` |
 
 `details` 每项:
 
@@ -120,3 +121,5 @@ Content-Type: application/json
 
 - `recharge_amount`、`withdrawal_amount` 仍会记录,仅供展示,不再参与回水计算。
 - 未发放记录的 `amount` 是按当前规则的预估值,发放时会按最新注单和规则重新计算。
+- **2026-11-05 起列表包含当月**(上海时间):投注结算后约 1~2 分钟出现当月记录,`amount` 为实时预估,随注单变化更新;当月记录 `can_grant=false`,前端隐藏或置灰“发放”按钮,下个月才能发放(手动点发放会返回“未到发放时间”)。
+- 规则按游戏分类匹配。F1 自有彩票(六合彩、极速赛车、极速飞艇、28 等)都归在 **F1彩票**(`self:lottery`)分类,需在该分类下配置亏损档位;配在第三方“彩票”(`third:3`)下不会命中。

+ 20 - 0
tests/Integration/AdminListAccountTest.php

@@ -99,6 +99,26 @@ class AdminListAccountTest extends TestCase
         $this->assertSame(['m2' => 'bob'], $this->accounts(BackflowService::paginate(['limit' => 10, 'account' => 'bo'])['data']));
     }
 
+    public function test_backflow_list_shows_the_current_month_but_only_past_unpaid_months_can_be_granted(): void
+    {
+        \Carbon\Carbon::setTestNow(\Carbon\Carbon::parse('2026-11-05 15:00:00', 'Asia/Shanghai'));
+        try {
+            DB::table('backflow')->insert([
+                ['member_id' => 'm1', 'date' => '2026-11', 'status' => 0],
+                ['member_id' => 'm2', 'date' => '2026-10', 'status' => 0],
+                ['member_id' => 'm3', 'date' => '2026-10', 'status' => 1],
+                ['member_id' => 'm1', 'date' => '2026-12', 'status' => 0],
+            ]);
+            $rows = [];
+            foreach (json_decode(json_encode(BackflowService::paginate(['limit' => 10])['data']), true) as $row) {
+                $rows[$row['member_id'] . '|' . $row['date']] = $row['can_grant'];
+            }
+            $this->assertSame(['m1|2026-11' => false, 'm2|2026-10' => true, 'm3|2026-10' => false], $rows);
+        } finally {
+            \Carbon\Carbon::setTestNow();
+        }
+    }
+
     public function test_recharge_list_shows_and_filters_account(): void
     {
         foreach (['m1', 'm2'] as $m) {