瀏覽代碼

会员彩金:变动类型新增笔笔返、回水

后台发放笔笔返与回水的入账记录原先被彩金筛选过滤,下拉也没有这两项。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
doge 1 天之前
父節點
當前提交
9975d5fc5c

+ 2 - 2
app/Services/MemberBonusLogService.php

@@ -11,7 +11,7 @@ use Illuminate\Support\Facades\Schema;
 /** 会员彩金的展示类型与筛选共用映射,资金账本仍保留原记账类型。 */
 final class MemberBonusLogService
 {
-    public const LEDGER_TYPES = ['即充即送', '老用户回归', '余额宝利息', '注册赠送', '优惠活动', '充值返现'];
+    public const LEDGER_TYPES = ['即充即送', '老用户回归', '余额宝利息', '注册赠送', '优惠活动', '充值返现', '笔笔返', '回水'];
     private const PROMOTIONS = [
         PromotionRules::LOSS => '净亏邀请',
         PromotionRules::FIRST_DEPOSIT => '首充奖励',
@@ -31,7 +31,7 @@ final class MemberBonusLogService
     public static function types(): array
     {
         return ['即充即送', '转盘', '老用户回归', '余额宝利息', '净亏邀请', '首充奖励',
-            '邀请升级奖励', '充值渠道赠送', '注册赠送', '优惠活动', '充值返现'];
+            '邀请升级奖励', '充值渠道赠送', '注册赠送', '优惠活动', '充值返现', '笔笔返', '回水'];
     }
 
     private function promotionLogs(?int $type = null): QueryBuilder

+ 1 - 1
docs/前端交付/bot-28/后台/README.md

@@ -17,7 +17,7 @@
 | 报表页面修正:移除三个入口,统一有效会员条件 | [报表页面调整-移除三个入口](报表页面调整-移除三个入口.md) |
 | 报表汇总:营业/推广/分享页签及明细 | [报表汇总-前端接入](报表汇总-前端接入.md) |
 | 提现打码量与冻结金额:会员列表打码量、上下分打码量、冻结/解冻、冻结记录(2026-11-04) | [打码量与冻结金额-后台接口](打码量与冻结金额-后台接口.md) |
-| 会员彩金:统一变动类型筛选、变动前/变动金额/变动后、余额宝利息直接进余额(2026-11-05) | [会员彩金-前端接入](会员彩金-前端接入.md) |
+| 会员彩金:统一变动类型筛选、变动前/变动金额/变动后、余额宝利息直接进余额,新增笔笔返、回水(2026-11-05) | [会员彩金-前端接入](会员彩金-前端接入.md) |
 | 活动列表:到期自动下架、状态筛选与列表展示(2026-11-05) | [活动列表-到期自动下架](活动列表-到期自动下架.md) |
 | 会员列表:默认按注册时间倒序,钱包/三方/冻结/余额宝/投注/打码量列服务端排序(2026-11-05) | [会员列表-默认排序与列排序](会员列表-默认排序与列排序.md) |
 | 菜单角标:列表新增/编辑/删除,三语角标(2026-11-05) | [菜单角标配置-后台接口](菜单角标配置-后台接口.md) |

+ 3 - 1
docs/前端交付/bot-28/后台/会员彩金-前端接入.md

@@ -28,9 +28,11 @@ GET /admin/balance/log?is_fancai=1&change_type=净亏邀请&page=1&limit=10
 变动类型下拉选项为字符串数组:
 
 ```json
-["即充即送", "转盘", "老用户回归", "余额宝利息", "净亏邀请", "首充奖励", "邀请升级奖励", "充值渠道赠送", "注册赠送", "优惠活动", "充值返现"]
+["即充即送", "转盘", "老用户回归", "余额宝利息", "净亏邀请", "首充奖励", "邀请升级奖励", "充值渠道赠送", "注册赠送", "优惠活动", "充值返现", "笔笔返", "回水"]
 ```
 
+2026-11-05 补充:新增 `笔笔返`、`回水`,为后台发放(含自动发放)笔笔返与回水奖励的入账记录,前端无需额外处理,下拉直接取 `data.change_types`。
+
 下拉显示文字、提交的筛选值、列表返回的 `change_type` 使用同一个中文值。例如选择“转盘”,提交 `change_type=转盘`,返回的每行 `change_type` 也为 `转盘`。
 
 ## 2. 返回字段与列表渲染

+ 20 - 0
tests/Integration/AdminBonusLogTest.php

@@ -81,6 +81,24 @@ class AdminBonusLogTest extends TestCase
         $this->assertSame(2,$this->records(['is_fancai'=>1,'change_type'=>'余额宝利息'])['total']);
     }
 
+    public function test_rebate_and_backflow_grants_are_bonus_types(): void
+    {
+        DB::table('balance_logs')->insert([
+            ['id'=>20,'member_id'=>'m1','type'=>1,'change_type'=>'笔笔返','amount'=>'12','created_at'=>'2026-11-05 12:00:00'],
+            ['id'=>21,'member_id'=>'m1','type'=>1,'change_type'=>'回水','amount'=>'30','created_at'=>'2026-11-05 12:00:00'],
+        ]);
+        $all = $this->records(['is_fancai'=>1]);
+        $this->assertContains('笔笔返', $all['change_types']);
+        $this->assertContains('回水', $all['change_types']);
+        $this->assertSame(7, $all['total']);
+        foreach (['笔笔返' => [20, '12.00'], '回水' => [21, '30.00']] as $type => [$id, $sum]) {
+            $data = $this->records(['is_fancai'=>1, 'change_type'=>$type]);
+            $this->assertSame([$id], array_column($data['data'], 'id'));
+            $this->assertSame($sum, $data['total_amount']);
+            $this->assertSame($type, $data['data'][0]['change_type']);
+        }
+    }
+
     public function test_regular_balance_type_filter_remains_effective(): void
     {
         $this->assertSame(2,$this->records(['type'=>2])['total']);
@@ -110,6 +128,8 @@ class AdminBonusLogTest extends TestCase
         $this->log(103, '老用户回归');
         $this->log(104, '注册赠送');
         $this->log(105, '充值返现');
+        $this->log(106, '笔笔返');
+        $this->log(107, '回水');
         // Unclaimed/coupon rewards and zero-valued channel rewards have no credited log.
         DB::table('promotion_rewards')->insert(['activity_id'=>9,'credited_log_id'=>null]);
         DB::table('recharge_bonus_rewards')->insert(['credited_log_id'=>null]);