Prechádzať zdrojové kódy

googleplay引导打开h5

Tree 12 hodín pred
rodič
commit
4d7d8d1b66

+ 1 - 0
app/Game/Services/OuroGameService.php

@@ -18,6 +18,7 @@ class OuroGameService
 {
     const REASON_updateAccount=83;
     const REASON_PwaBonus=82;
+    const REASON_GoogleRedirectH5Bonus=84;
     const REASON_RedEnvelope=12;
     const REASON_BindPhone=21;
     const REASON_AgentBonus=2;

+ 19 - 11
app/Game/WebChannelConfig.php

@@ -5,17 +5,20 @@ namespace App\Game;
 use App\Game\Services\RouteService;
 use Illuminate\Database\Eloquent\Model;
 use Illuminate\Support\Facades\Redis;
-define('SPECIAL_MODE_GUEST', 1);
-define('SPECIAL_MODE_ZERO_MONEY', 2);//注册不送钱
-define('SPECIAL_DISABLE_PROMOTE_INSTALL', 4);//提示安装
-//define('SPECIAL_MODE_ENABLE_INSURE_SCORE', 8);//直接启用第二货币  GameScoreInfo InsureScore
-define('SPECIAL_MODE_REG_TO_REALMONEY', 16);//默认注册送的钱是真钱不是第二货币
-define('SPECIAL_MODE_MAIL_BONUS', 32);//MAIL验证送钱
-define('SPECIAL_MODE_FIRSTPAY_OFF30', 64);//首冲打开30%bonus
-define('SPECIAL_MODE_DEBUG_EVENT', 128);//是否开启事件日志上保
-define('SPECIAL_MODE_REGION_UNIQUE', 256);//是否开启区域独立模式
-define('SPECIAL_MODE_FB_JUMP_LATER', 512);//fb内浏览器弹出时机靠后
-define('SPECIAL_MODE_FB_JUMP_LATER2', 1024);//fb内浏览器弹出时机靠后
+
+define('SPECIAL_MODE_GUEST',                0b1);
+define('SPECIAL_MODE_ZERO_MONEY',           0b10);              //注册不送钱
+define('SPECIAL_DISABLE_PROMOTE_INSTALL',   0b100);             //提示安装
+//define('SPECIAL_MODE_ENABLE_INSURE_SCORE', 0b1000);           //直接启用第二货币  GameScoreInfo InsureScore
+define('SPECIAL_MODE_REG_TO_REALMONEY',     0b10000);           //默认注册送的钱是真钱不是第二货币
+define('SPECIAL_MODE_MAIL_BONUS',           0b100000);          //MAIL验证送钱
+define('SPECIAL_MODE_FIRSTPAY_OFF30',       0b1000000);         //首冲打开30%bonus
+define('SPECIAL_MODE_DEBUG_EVENT',          0b10000000);        //是否开启事件日志上保
+define('SPECIAL_MODE_REGION_UNIQUE',        0b100000000);       //是否开启区域独立模式
+define('SPECIAL_MODE_FB_JUMP_LATER',        0b1000000000);      //fb内浏览器弹出时机靠后
+define('SPECIAL_MODE_FB_JUMP_LATER2',       0b10000000000);     //fb内浏览器弹出时机靠后
+define('SPECIAL_MODE_JUMP_APK1',            0b100000000000);    //安卓包开启无脑跳转引导
+define('SPECIAL_MODE_JUMP_APK2',            0b1000000000000);   //安卓包开启付费后引导跳转
 class WebChannelConfig extends Model
 {
     protected $table = 'webgame.WebChannelConfig';
@@ -92,6 +95,11 @@ class WebChannelConfig extends Model
         if(($this->SpecialMode&SPECIAL_MODE_FB_JUMP_LATER)==SPECIAL_MODE_FB_JUMP_LATER)return 1;
         return 0;
     }
+    public function isApkJump(){
+        if(($this->SpecialMode&SPECIAL_MODE_JUMP_APK2)==SPECIAL_MODE_JUMP_APK2)return 2;
+        if(($this->SpecialMode&SPECIAL_MODE_JUMP_APK1)==SPECIAL_MODE_JUMP_APK1)return 1;
+        return 0;
+    }
     public function isRegionUnique()
     {
         if(($this->SpecialMode&SPECIAL_MODE_REGION_UNIQUE)==SPECIAL_MODE_REGION_UNIQUE&&!empty($this->RegionID)){

+ 2 - 0
app/Http/Controllers/Admin/WebChannelConfigController.php

@@ -33,6 +33,8 @@ class WebChannelConfigController
         256 => 'REGION_UNIQUE (是否开启区域独立模式)',
         512 => 'FB_JUMP_LATER (fb内浏览器弹出时机在绑定手机后)',
         1024 => 'FB_JUMP_LATER2 (fb内浏览器弹出在点击提现后)',
+        2048 => 'JUMP_APK1 (安卓包开启无脑跳转引导)',
+        4096 => 'JUMP_APK2 (安卓包开启付费后引导跳转)',
     ];
 
     public function index(Request $request)

+ 102 - 0
app/Http/Controllers/Game/HacksawController.php

@@ -31,6 +31,108 @@ class HacksawController extends Controller
         '1328' => '1.43.0',   // Hi-Lo
         '1126' => '1.135.0',  // Mines
         '1154' => '1.68.1',   // Boxes
+        '1042' => '1.47.0',
+        '1043' => '1.44.16',
+        '1048' => '1.58.1',
+        '1049' => '1.50.4',
+        '1055' => '1.60.1',
+        '1058' => '1.42.2',
+        '1059' => '1.66.3',
+        '1066' => '1.43.0',
+        '1067' => '1.70.2',
+        '1069' => '1.56.3',
+        '1070' => '1.32.0',
+        '1071' => '1.50.1',
+        '1081' => '1.32.0',
+        '1083' => '1.52.2',
+        '1084' => '1.64.0',
+        '1087' => '1.44.3',
+        '1091' => '1.36.3',
+        '1093' => '1.41.5',
+        '1096' => '1.16.1',
+        '1099' => '1.23.1',
+        '1102' => '1.35.2',
+        '1117' => '1.29.0',
+        '1127' => '1.33.5',
+        '1131' => '1.34.2',
+        '1135' => '1.45.2',
+        '1140' => '1.28.2',
+        '1144' => '1.46.2',
+        '1160' => '1.48.0',
+        '1164' => '1.75.1',
+        '1168' => '1.43.0',
+        '1172' => '1.48.1',
+        '1176' => '1.39.1',
+        '1181' => '1.74.1',
+        '1185' => '1.11.2',
+        '1189' => '1.14.3',
+        '1193' => '1.50.5',
+        '1197' => '1.31.2',
+        '1201' => '1.40.3',
+        '1205' => '1.21.2',
+        '1209' => '1.29.0',
+        '1213' => '1.39.1',
+        '1217' => '1.35.3',
+        '1221' => '1.21.1',
+        '1225' => '1.46.2',
+        '1229' => '1.25.1',
+        '1233' => '1.33.2',
+        '1237' => '1.20.2',
+        '1243' => '1.29.1',
+        '1247' => '1.47.1',
+        '1251' => '1.21.0',
+        '1259' => '1.21.4',
+        '1263' => '1.15.2',
+        '1267' => '1.10.3',
+        '1271' => '1.14.0',
+        '1275' => '1.21.3',
+        '1279' => '1.22.7',
+        '1305' => '1.22.4',
+        '1309' => '1.22.0',
+        '1314' => '1.19.1',
+        '1340' => '1.14.2',
+        '1344' => '1.16.6',
+        '1348' => '1.25.0',
+        '1352' => '1.23.1',
+        '1356' => '1.26.0',
+        '1360' => '1.18.0',
+        '1364' => '1.16.1',
+        '1372' => '1.17.4',
+        '1392' => '1.29.2',
+        '1396' => '1.19.0',
+        '1400' => '1.33.0',
+        '1404' => '1.18.6',
+        '1408' => '1.58.1',
+        '1422' => '1.47.3',
+        '1426' => '1.37.0',
+        '1430' => '1.10.3',
+        '1434' => '1.28.5',
+        '1438' => '1.31.0',
+        '1442' => '1.26.1',
+        '1452' => '1.63.2',
+        '1456' => '1.30.0',
+        '1460' => '1.17.0',
+        '1474' => '1.15.0',
+        '1478' => '1.23.5',
+        '1482' => '1.43.2',
+        '1490' => '1.24.3',
+        '1494' => '1.19.1',
+        '1508' => '1.31.0',
+        '1514' => '1.16.3',
+        '1530' => '1.35.5',
+        '1534' => '1.37.1',
+        '1554' => '1.10.5',
+        '1558' => '1.28.1',
+        '1562' => '1.46.0',
+        '1570' => '1.17.1',
+        '1580' => '1.32.2',
+        '1584' => '1.28.7',
+        '1602' => '1.45.0',
+        '1608' => '1.39.1',
+        '1612' => '1.24.5',
+        '1616' => '1.27.7',
+        '1620' => '1.37.0',
+        '1689' => '1.31.0',
     ];
 
     /**

+ 11 - 0
app/Http/Controllers/Game/LoginController.php

@@ -25,6 +25,7 @@ use App\Models\SystemStatusInfo;
 use App\Models\Treasure\GameScoreInfo;
 use App\Notification\TelegramBot;
 use App\Services\ApkService;
+use App\Services\GoogleRedirectH5BonusService;
 use App\Services\StoredProcedure;
 use App\Services\VipService;
 use App\Util;
@@ -677,6 +678,16 @@ class LoginController extends Controller
 
     }
 
+    public static function claimGoogleRedirectH5Bonus(Request $request)
+    {
+        $user = $request->user();
+        $config = RouteService::getChannelConfig($request);
+
+        return response()->json(
+            GoogleRedirectH5BonusService::claim($request, $user, $config->BONUS_PWA())
+        );
+    }
+
     private function isSequentialOrRepetitive($phoneNumber)
     {
         // 移除国家代码和非数字字符

+ 12 - 0
app/Http/Controllers/Game/WebRouteController.php

@@ -6,6 +6,7 @@ namespace App\Http\Controllers\Game;
 use App\Facade\TableName;
 use App\Game\Block;
 use App\Game\Config\GameBasicConfig;
+use App\Services\GoogleRedirectH5BonusService;
 use Carbon\Carbon;
 use App\Game\GameCard;
 use App\Game\GlobalUserInfo;
@@ -293,6 +294,11 @@ class WebRouteController extends Controller
         }
 
         $spe_key=$request->input('s_k', 0);
+        $googleRedirectH5Bonus = GoogleRedirectH5BonusService::routePayload(
+            $user['UserID'] ?? 0,
+            $spe_key,
+            $config->BONUS_PWA()
+        );
         $data['conf']=[
             'hall'=>env("CONFIG_24680_HALL")??GameBasicConfig::$HallServer,
             'DOLLAR'=>env("CONFIG_24680_DOLLAR")??GameBasicConfig::$DOLLAR,
@@ -327,6 +333,7 @@ class WebRouteController extends Controller
             'popBindPhone'=>1,
             'popPwaBonus'  => $popPwaBonus,
             'jumplater'    => $config->isFbJumpLater(),
+            'jumpapk'      => $config->isApkJump(),
             'download'=>['light'=>$config->LightApk,'full'=>$config->FullApk,'bonus'=>$config->BONUS_PWA()],
             'registerOpen'=>$config->RegOpen??env('CONFIG_REG_OPEN','sms,mail'),//id,phone,sms,mail,guest
             'loginOpen'=>$config->LoginOpen??'id,phone,sms,mail,guest',
@@ -338,6 +345,8 @@ class WebRouteController extends Controller
             's_k' => $this->quickLoad($spe_key, $user['UserID']??0, $FPID, $FF, $request->input('cookie', ''))??'',
 
             'weight1234' => WeightConfigController::getConfig(),
+            'googleRedirectH5Bonus' => $googleRedirectH5Bonus,
+
 
         ];
 
@@ -583,6 +592,9 @@ class WebRouteController extends Controller
         Redis::set($key, json_encode($data));
         Redis::expire($key, 7200);
 
+        GoogleRedirectH5BonusService::recordPending($request, $UserID, $url_sign, $spe_key);
+
+
         Util::WriteLog("saveQuick", $data);
 
         return apiReturnSuc(['s_k'=>$spe_key]);

+ 2 - 2
app/Http/logic/admin/WithdrawalLogic.php

@@ -201,8 +201,8 @@ class WithdrawalLogic extends BaseLogicController
                 $val->withdraw_fee_display = number_float(($val->withdraw_fee ?? 0) / NumConfig::NUM_VALUE);
                 $val->sameNameNum=$accountsInfo->sameWithDrawBankName($val->BankUserName);
                 $val->sameEmailNum=$accountsInfo->sameWithDrawEmail($val->EmailAddress);
-                $val->sameMac=$accountsInfo->sameLoginMacCount($val->UserID);
-                $val->sameCpfCount=Cpf::getCpfCount($val->UserID);
+                $val->sameMac=0;
+                $val->sameCpfCount=0;
                 $val->sameIP=$accountsInfo->sameRegisterIPCount($val->RegisterIP);
 //                $val->sameLIP=$accountsInfo->sameLoginIPCount($val->UserID);
 

+ 142 - 0
app/Services/GoogleRedirectH5BonusService.php

@@ -0,0 +1,142 @@
+<?php
+
+namespace App\Services;
+
+use App\Game\Services\OuroGameService;
+use App\Utility\SetNXLock;
+use Illuminate\Http\Request;
+use Illuminate\Support\Facades\Redis;
+
+class GoogleRedirectH5BonusService
+{
+    const SCENE = 'google_redirect_h5';
+    const TRIGGER = 'popup_click';
+    const TTL = 600;
+
+    public static function pendingKey($userId, $sKey)
+    {
+        return 'google_redirect_h5_bonus:' . $userId . ':' . $sKey;
+    }
+
+    public static function claimedKey($userId)
+    {
+        return 'google_redirect_h5_bonus_claimed:' . $userId;
+    }
+
+    public static function shouldRecord(Request $request)
+    {
+        return $request->input('scene') === self::SCENE;
+    }
+
+    public static function recordPending(Request $request, $userId, $channel, $sKey)
+    {
+        if (!$userId || !$sKey || !self::shouldRecord($request)) {
+            return false;
+        }
+
+        if (Redis::exists(self::claimedKey($userId))) {
+            return false;
+        }
+
+        $data = [
+            'scene' => $request->input('scene', self::SCENE),
+            'trigger' => $request->input('trigger', self::TRIGGER),
+            'UserID' => (int)$userId,
+            'Channel' => (int)$channel,
+            's_k' => (string)$sKey,
+            'gaid' => $request->input('gaid', ''),
+            'device_fp' => $request->input('device_fp', ''),
+            'target_h5_url' => $request->input('target_h5_url', ''),
+            'ip' => $request->ip(),
+            'user_agent' => $request->userAgent(),
+            'created_at' => date('Y-m-d H:i:s'),
+            'expired_at' => date('Y-m-d H:i:s', time() + self::TTL),
+        ];
+
+        Redis::setex(self::pendingKey($userId, $sKey), self::TTL, json_encode($data));
+
+        return $data;
+    }
+
+    public static function routePayload($userId, $sKey, $amount)
+    {
+        $claimed = $userId ? Redis::exists(self::claimedKey($userId)) : false;
+        $pendingKey = ($userId && $sKey) ? self::pendingKey($userId, $sKey) : '';
+        $ttl = $pendingKey ? Redis::ttl($pendingKey) : -2;
+        $show = !$claimed && $amount > 0 && $ttl > 0;
+
+        return [
+            'show' => $show ? 1 : 0,
+            'claimed' => $claimed ? 1 : 0,
+            'amount' => (int)$amount,
+            's_k' => (string)$sKey,
+            'expire_in' => $show ? $ttl : 0,
+        ];
+    }
+
+    public static function claim(Request $request, $user, $amount)
+    {
+        $userId = $user->UserID ?? 0;
+        $sKey = $request->input('s_k', '');
+
+        if (!$userId) {
+            return apiReturnFail(['google_redirect_h5_bonus.login_required', 'Login required']);
+        }
+
+        if (!$sKey) {
+            return apiReturnFail(['google_redirect_h5_bonus.missing_s_k', 'Missing s_k']);
+        }
+
+        if ($amount <= 0) {
+            return apiReturnFail(['google_redirect_h5_bonus.no_bonus', 'No bonus configured']);
+        }
+
+        if (Redis::exists(self::claimedKey($userId))) {
+            return apiReturnFail(['google_redirect_h5_bonus.already_claimed', 'Already claimed'], [
+                'claimed' => true,
+            ]);
+        }
+
+        $lockKey = 'google_redirect_h5_bonus_claim_lock:' . $userId;
+        if (!SetNXLock::getExclusiveLock($lockKey, 5)) {
+            return apiReturnFail(['google_redirect_h5_bonus.try_again_later', 'Please try again later']);
+        }
+
+        try {
+            $pendingKey = self::pendingKey($userId, $sKey);
+            $pending = Redis::get($pendingKey);
+            if (!$pending) {
+                return apiReturnFail(['google_redirect_h5_bonus.expired', 'Bonus expired or already claimed'], [
+                    'claimed' => false,
+                ]);
+            }
+
+            [$orgScore, $nowScore] = OuroGameService::AddFreeScore(
+                $userId,
+                (int)$amount,
+                OuroGameService::REASON_GoogleRedirectH5Bonus,
+                false
+            );
+
+            Redis::set(self::claimedKey($userId), json_encode([
+                'UserID' => (int)$userId,
+                's_k' => (string)$sKey,
+                'amount' => (int)$amount,
+                'org_score' => $orgScore,
+                'now_score' => $nowScore,
+                'claimed_at' => date('Y-m-d H:i:s'),
+            ]));
+            Redis::del($pendingKey);
+
+            return apiReturnSuc([
+                'amount' => (int)$amount,
+                'org_score' => $orgScore,
+                'now_score' => $nowScore,
+                'Score' => $nowScore,
+                'claimed' => true,
+            ], ['google_redirect_h5_bonus.success', 'Bonus claimed successfully!']);
+        } finally {
+            SetNXLock::release($lockKey);
+        }
+    }
+}

+ 35 - 23
app/dao/RecordPlatformData/RecordPlatformData.php

@@ -166,7 +166,7 @@ class RecordPlatformData
     }
 
     /**
-     * 老付费用户当日有充值:先锁定用户集,再按 UserID+DateID 关联局数(避免全表聚合)
+     * 老付费用户当日有充值:按用户取当天已聚合局数。
      */
     private function perUserGameCountForRechargedOldPayers($dateID, $registerBefore)
     {
@@ -174,38 +174,31 @@ class RecordPlatformData
             ->table(DB::raw(TableName::QPRecordDB() . 'RecordUserDataStatisticsNew as rn WITH (NOLOCK)'))
             ->join(DB::raw(TableName::QPAccountsDB() . 'AccountsInfo as ai WITH (NOLOCK)'), 'rn.UserID', '=', 'ai.UserID')
             ->join(DB::raw(TableName::QPAccountsDB() . 'YN_VIPAccount as va WITH (NOLOCK)'), 'rn.UserID', '=', 'va.UserID')
-            ->leftJoin(DB::raw(TableName::QPRecordDB() . 'RecordUserGameDayCount as rd WITH (NOLOCK)'), function ($join) use ($dateID) {
-                $join->on('rn.UserID', '=', 'rd.UserID')->where('rd.DateID', '=', $dateID);
-            })
             ->where('rn.DateID', $dateID)
             ->where('rn.Recharge', '>', 0)
             ->where('ai.RegisterDate', '<', $registerBefore)
             ->where('va.Recharge', '>', 0)
             ->groupBy('ai.Channel', 'rn.UserID')
-            ->selectRaw('ai.Channel, ISNULL(SUM(rd.Cnt), 0) as TotalCnt');
+            ->selectRaw('ai.Channel, ISNULL(SUM(rn.Rounds), 0) as TotalCnt');
     }
 
     /**
-     * 老付费用户当日无充值且当日有玩游戏:从当日 rd 出发,只扫描 DateID 分区后再过滤用户
+     * 老付费用户当日无充值且当日有玩游戏:按用户取当天已聚合局数。
      */
     private function perUserGameCountForNonRechargedOldPayers($dateID, $registerBefore)
     {
         return DB::connection('sqlsrv')
-            ->table(DB::raw(TableName::QPRecordDB() . 'RecordUserGameDayCount as rd WITH (NOLOCK)'))
+            ->table(DB::raw(TableName::QPRecordDB() . 'RecordUserDataStatisticsNew as rn WITH (NOLOCK)'))
             ->join(DB::raw(TableName::QPAccountsDB() . 'YN_VIPAccount as va WITH (NOLOCK)'), function ($join) {
-                $join->on('rd.UserID', '=', 'va.UserID')->where('va.Recharge', '>', 0);
-            })
-            ->join(DB::raw(TableName::QPAccountsDB() . 'AccountsInfo as ai WITH (NOLOCK)'), 'rd.UserID', '=', 'ai.UserID')
-            ->leftJoin(DB::raw(TableName::QPRecordDB() . 'RecordUserDataStatisticsNew as rn WITH (NOLOCK)'), function ($join) use ($dateID) {
-                $join->on('rd.UserID', '=', 'rn.UserID')->where('rn.DateID', '=', $dateID);
+                $join->on('rn.UserID', '=', 'va.UserID')->where('va.Recharge', '>', 0);
             })
-            ->where('rd.DateID', $dateID)
+            ->join(DB::raw(TableName::QPAccountsDB() . 'AccountsInfo as ai WITH (NOLOCK)'), 'rn.UserID', '=', 'ai.UserID')
+            ->where('rn.DateID', $dateID)
+            ->where('rn.Rounds', '>', 0)
             ->where('ai.RegisterDate', '<', $registerBefore)
-            ->where(function ($query) {
-                $query->whereNull('rn.Recharge')->orWhere('rn.Recharge', '<=', 0);
-            })
-            ->groupBy('ai.Channel', 'rd.UserID')
-            ->selectRaw('ai.Channel, SUM(rd.Cnt) as TotalCnt');
+            ->where('rn.Recharge', '<=', 0)
+            ->groupBy('ai.Channel', 'rn.UserID')
+            ->selectRaw('ai.Channel, SUM(rn.Rounds) as TotalCnt');
     }
 
     private function avgGameCountByChannel($perUserQuery, $fieldAlias)
@@ -218,6 +211,23 @@ class RecordPlatformData
         return $this->avgFromSubSql($perUserQuery->toSql(), $perUserQuery->getBindings(), false, $fieldAlias);
     }
 
+    private function sumFromSubSql($sql, array $bindings, $byChannel, $fieldAlias)
+    {
+        $query = DB::connection('sqlsrv')->table(DB::raw("({$sql}) as u"));
+        foreach ($bindings as $binding) {
+            $query->addBinding($binding, 'select');
+        }
+
+        if ($byChannel) {
+            return $query
+                ->selectRaw("u.Channel, SUM(CAST(u.TotalCnt AS BIGINT)) as {$fieldAlias}")
+                ->groupBy('u.Channel')
+                ->get();
+        }
+
+        return $query->selectRaw("SUM(CAST(u.TotalCnt AS BIGINT)) as {$fieldAlias}")->first();
+    }
+
     private function avgFromSubSql($sql, array $bindings, $byChannel, $fieldAlias)
     {
         $query = DB::connection('sqlsrv')->table(DB::raw("({$sql}) as u"));
@@ -236,7 +246,9 @@ class RecordPlatformData
     }
 
     /**
-     * 一次返回 PayGameCount / PaySecond 的分渠道与全渠道结果(共 2 次 DB 查询)
+     * 一次返回 PayGameCount / PaySecond 的分渠道与全渠道结果。
+     *
+     * RecordPlatformData 中这两个字段按总量保存,展示层再除以付费人数计算平均值。
      */
     public function oldPayUserAvgGameCountStatBundle($dateID, $date)
     {
@@ -251,10 +263,10 @@ class RecordPlatformData
         $nonRechargedBindings = $nonRechargedPerUser->getBindings();
 
         return [
-            'withRecharge' => $this->avgFromSubSql($rechargedSql, $rechargedBindings, true, 'PayGameCount'),
-            'withRechargeAll' => $this->avgFromSubSql($rechargedSql, $rechargedBindings, false, 'PayGameCount'),
-            'withoutRecharge' => $this->avgFromSubSql($nonRechargedSql, $nonRechargedBindings, true, 'PaySecond'),
-            'withoutRechargeAll' => $this->avgFromSubSql($nonRechargedSql, $nonRechargedBindings, false, 'PaySecond'),
+            'withRecharge' => $this->sumFromSubSql($rechargedSql, $rechargedBindings, true, 'PayGameCount'),
+            'withRechargeAll' => $this->sumFromSubSql($rechargedSql, $rechargedBindings, false, 'PayGameCount'),
+            'withoutRecharge' => $this->sumFromSubSql($nonRechargedSql, $nonRechargedBindings, true, 'PaySecond'),
+            'withoutRechargeAll' => $this->sumFromSubSql($nonRechargedSql, $nonRechargedBindings, false, 'PaySecond'),
         ];
     }
 

+ 1 - 0
routes/game.php

@@ -214,6 +214,7 @@ Route::group([
     $route->any('/apk/savenew', 'Game\WebRouteController@saveEnv');
     $route->any('/apk/loadnew', 'Game\WebRouteController@checkApkInstall');
     $route->any('/quickSave', 'Game\WebRouteController@quickSave');
+    $route->any('/googleRedirectH5Bonus/claim', 'Game\LoginController@claimGoogleRedirectH5Bonus');
 
     $route->any('/test_change', 'Game\WebRouteController@testScoreChange');