Prechádzať zdrojové kódy

首充任务下注任务从累计下注量改成累计下注次数

Tree 1 deň pred
rodič
commit
3668596769

+ 66 - 33
app/Http/Controllers/Game/PayRechargeController.php

@@ -240,18 +240,23 @@ class PayRechargeController extends Controller
         
         // ========== 已购买礼包:返回任务进度(无倒计时) ==========
         
-        // 获取用户当前累计下注(从统计表)
+        // 获取用户当前累计下注次数(从RecordUserGameCount表)
+        $currentTotalBetCount = DB::table(TableName::QPRecordDB() . 'RecordUserGameCount')
+            ->where('UserID', $user->UserID)
+            ->sum('Cnt') ?? 0;
+        
+        // 获取用户当前累计下注金额(从统计表,用于下注任务)
         $userStats = DB::table('QPRecordDB.dbo.RecordUserTotalStatistics')
             ->where('UserID', $user->UserID)
             ->first();
         
-        $currentTotalBet = $userStats->TotalBet ?? 0;
+        $currentTotalBetAmount = $userStats->TotalBet ?? 0;
         
-        // 更新下注进度到礼包记录
+        // 更新下注进度到礼包记录(betting_current_bet存储下注次数,用于下注奖励)
         DB::table('agent.dbo.first_pay_gift_records')
             ->where('user_id', $user->UserID)
             ->update([
-                'betting_current_bet' => $currentTotalBet / NumConfig::NUM_VALUE,
+                'betting_current_bet' => $currentTotalBetCount,
                 'updated_at' => date('Y-m-d H:i:s')
             ]);
         
@@ -265,6 +270,11 @@ class PayRechargeController extends Controller
         $bettingBonusData = $giftRecord->betting_bonus_data ? json_decode($giftRecord->betting_bonus_data, true) : null;
         $bettingTaskData = $giftRecord->betting_task_data ? json_decode($giftRecord->betting_task_data, true) : null;
         
+        // 计算当前是购买后的第几天(所有任务都需要用到)
+        $purchaseDate = date('Y-m-d', strtotime($giftRecord->created_at));
+        $today = date('Y-m-d');
+        $daysPassed = floor((strtotime($today) - strtotime($purchaseDate)) / 86400);
+        
         // 构建返回数据
         $giftInfo = [
             'gift_id' => $giftRecord->gift_id,
@@ -276,10 +286,6 @@ class PayRechargeController extends Controller
         
         // 每日奖励进度
         if ($dayRewardsData) {
-            // 计算当前是购买后的第几天
-            $purchaseDate = date('Y-m-d', strtotime($giftRecord->created_at));
-            $today = date('Y-m-d');
-            $daysPassed = floor((strtotime($today) - strtotime($purchaseDate)) / 86400);
             
             $startDay = $dayRewardsData['start_day'] ?? 1;
             $bonusDay = $dayRewardsData['bonus_day'] ?? 0;
@@ -322,11 +328,11 @@ class PayRechargeController extends Controller
             ];
         }
         
-        // 下注奖励进度
+        // 下注奖励进度(使用下注次数)
         if ($bettingBonusData) {
-            $perBet = $bettingBonusData['per_bet'] ?? 100;  // 每次下注要求
+            $perBet = $bettingBonusData['per_bet'] ?? 100;  // 每次下注次数要求
             $perBetBonus = $bettingBonusData['per_bet_bonus'] ?? 2;  // 每次奖励金额(不是百分比)
-            $currentBet = $giftRecord->betting_current_bet;  // 当前累计下注
+            $currentBetCount = $giftRecord->betting_current_bet;  // 当前累计下注次数
             $totalBonusLimit = $giftRecord->betting_bonus_total;  // 总奖励上限
             $claimedAmount = $giftRecord->betting_bonus_claimed;  // 已领取金额
             $remainingBonus = $totalBonusLimit - $claimedAmount;  // 剩余可领取金额
@@ -334,8 +340,8 @@ class PayRechargeController extends Controller
             // 每次可领取的金额(直接使用配置的值,不是百分比计算)
             $perReward = (float)$perBetBonus;
             
-            // 根据当前下注计算已达成的次数
-            $completedTimes = floor($currentBet / $perBet);
+            // 根据当前下注次数计算已达成的次数
+            $completedTimes = floor($currentBetCount / $perBet);
             
             // 已领取的次数
             $claimedTimes = $claimedAmount > 0 ? floor($claimedAmount / $perReward) : 0;
@@ -348,11 +354,11 @@ class PayRechargeController extends Controller
             // 当前可领取金额
             $canClaimAmount = min($canClaimTimes * $perReward, $remainingBonus);
             
-            // 计算下次领取需要的下注金额
+            // 计算下次领取需要的下注次数
             $nextClaimBet = 0;
             if ($remainingBonus > 0 && $canClaimTimes == 0) {
-                // 还有剩余奖励但当前不能领取,计算还需下注多少
-                $nextClaimBet = ($claimedTimes + 1) * $perBet - $currentBet;
+                // 还有剩余奖励但当前不能领取,计算还需下注多少
+                $nextClaimBet = ($claimedTimes + 1) * $perBet - $currentBetCount;
             }
             
             // 判断下注奖励状态
@@ -367,31 +373,31 @@ class PayRechargeController extends Controller
             } elseif ($canClaimAmount > 0) {
                 $bettingBonusStatus = 1;  // 可领取
             } else {
-                $bettingBonusStatus = 0;  // 不可领取(下注不足)
+                $bettingBonusStatus = 0;  // 不可领取(下注次数不足)
             }
             
             $giftInfo['betting_bonus'] = [
                 'total_bonus' => (float)$totalBonusLimit,  // 总奖励上限
-                'per_bet' => $perBet,  // 每次下注要求
+                'per_bet' => $perBet,  // 每次下注次数要求
                 'per_bet_bonus' => $perReward,  // 每次奖励金额(实际金额)
 //                'per_reward' => $perReward,  // 每次奖励金额(保持兼容)
-                'current_bet' => (float)$currentBet,  // 当前累计下注
+                'current_bet' => (float)$currentBetCount,  // 当前累计下注次数
                 'claimed_amount' => (float)$claimedAmount,  // 已领取金额
                 'remaining_bonus' => (float)$remainingBonus,  // 剩余可领金额
                 'can_claim_amount' => (float)$canClaimAmount,  // 当前可领取金额
                 'can_claim_times' => max(0, $canClaimTimes),  // 当前可领取次数
-                'next_claim_bet' => max(0, $nextClaimBet),  // 下次领取还需下注
-                'progress' => round($currentBet, 2) . '/' . round($claimedTimes * $perBet + $perBet, 2),  // 当前进度/下次领取目标
+                'next_claim_bet' => max(0, $nextClaimBet),  // 下次领取还需下注次数
+                'progress' => round($currentBetCount, 0) . '/' . round($claimedTimes * $perBet + $perBet, 0),  // 当前进度/下次领取目标(次数)
                 'status' => $bettingBonusStatus,  // 0=不可领取, 1=可领取, 2=已领取, 3=过期
                 'status_text' => ['不可领取', '可领取', '已领取', '过期'][$bettingBonusStatus] ?? '未知'
             ];
         }
         
-        // 下注任务进度
+        // 下注任务进度(使用下注金额)
         if ($bettingTaskData) {
             $betPayTimes = $bettingTaskData['bet_pay_times'] ?? 60;
             $requiredBet = $giftRecord->pay_amount * $betPayTimes;
-            $currentProgress = $giftRecord->betting_current_bet;
+            $currentProgress = $currentTotalBetAmount / NumConfig::NUM_VALUE;  // 使用下注金额,不是次数
             $taskCompleted = $currentProgress >= $requiredBet;
             $isClaimed = $giftRecord->betting_task_claimed == 1;
             
@@ -511,16 +517,28 @@ class PayRechargeController extends Controller
                         'updated_at' => date('Y-m-d H:i:s')
                     ]);
             }
-            // 下注奖励领取
+            // 下注奖励领取(使用下注次数)
             elseif ($rewardType === 'betting_bonus') {
                 $bettingBonusData = json_decode($giftRecord->betting_bonus_data, true);
                 if (!$bettingBonusData) {
                     return apiReturnFail('没有下注奖励配置');
                 }
                 
-                $perBet = $bettingBonusData['per_bet'] ?? 100;  // 每次下注要求
+                // 检查是否过期(购买后7天)
+                $purchaseDate = date('Y-m-d', strtotime($giftRecord->created_at));
+                $currentDate = date('Y-m-d');
+                $daysPassed = floor((strtotime($currentDate) - strtotime($purchaseDate)) / 86400);
+                if ($daysPassed >= 7) {
+                    return apiReturnFail('下注奖励已过期');
+                }
+                
+                // 获取最新的下注次数
+                $currentBetCount = DB::table(TableName::QPRecordDB() . 'RecordUserGameCount')
+                    ->where('UserID', $userId)
+                    ->sum('Cnt') ?? 0;
+                
+                $perBet = $bettingBonusData['per_bet'] ?? 100;  // 每次下注次数要求
                 $perBetBonus = $bettingBonusData['per_bet_bonus'] ?? 2;  // 每次奖励金额(不是百分比)
-                $currentBet = $giftRecord->betting_current_bet;  // 当前累计下注
                 $totalBonusLimit = $giftRecord->betting_bonus_total;  // 总奖励上限
                 $claimedAmount = $giftRecord->betting_bonus_claimed;  // 已领取金额
                 $remainingBonus = $totalBonusLimit - $claimedAmount;  // 剩余可领金额
@@ -533,8 +551,8 @@ class PayRechargeController extends Controller
                 // 每次可领取的金额(直接使用配置的值,不是百分比计算)
                 $perReward = (float)$perBetBonus;
                 
-                // 根据当前下注计算已达成的次数
-                $completedTimes = floor($currentBet / $perBet);
+                // 根据当前下注次数计算已达成的次数
+                $completedTimes = floor($currentBetCount / $perBet);
                 
                 // 已领取的次数
                 $claimedTimes = $claimedAmount > 0 ? floor($claimedAmount / $perReward) : 0;
@@ -544,7 +562,7 @@ class PayRechargeController extends Controller
                 
                 // 检查是否可以领取
                 if ($canClaimTimes <= 0) {
-                    return apiReturnFail('下注金额不足,还需下注 ' . (($claimedTimes + 1) * $perBet - $currentBet) . ' 才能领取');
+                    return apiReturnFail('下注次数不足,还需下注 ' . (($claimedTimes + 1) * $perBet - $currentBetCount) . ' 才能领取');
                 }
                 
                 // ✅ 一次性领取所有已达成的奖励(但不能超过剩余总额)
@@ -552,11 +570,12 @@ class PayRechargeController extends Controller
                 $rewardAmount = min($totalCanClaimAmount, $remainingBonus);  // 实际领取金额(不超过剩余总额)
                 $actualClaimTimes = floor($rewardAmount / $perReward);  // 实际领取次数
                 
-                // 更新记录
+                // 更新记录(同时更新下注次数)
                 DB::table('agent.dbo.first_pay_gift_records')
                     ->where('user_id', $userId)
                     ->update([
                         'betting_bonus_claimed' => $giftRecord->betting_bonus_claimed + $rewardAmount,
+                        'betting_current_bet' => $currentBetCount,  // 更新最新下注次数
                         'updated_at' => date('Y-m-d H:i:s')
                     ]);
                 
@@ -567,7 +586,7 @@ class PayRechargeController extends Controller
                     'reward_amount' => $rewardAmount
                 ]);
             }
-            // 下注任务领取
+            // 下注任务领取(使用下注金额)
             elseif ($rewardType === 'betting_task') {
                 if ($giftRecord->betting_task_claimed == 1) {
                     return apiReturnFail('下注任务奖励已领取');
@@ -578,11 +597,25 @@ class PayRechargeController extends Controller
                     return apiReturnFail('没有下注任务配置');
                 }
                 
+                // 检查是否过期(购买后7天)
+                $purchaseDate = date('Y-m-d', strtotime($giftRecord->created_at));
+                $currentDate = date('Y-m-d');
+                $daysPassed = floor((strtotime($currentDate) - strtotime($purchaseDate)) / 86400);
+                if ($daysPassed >= 7) {
+                    return apiReturnFail('下注任务奖励已过期');
+                }
+                
+                // 获取最新的下注金额
+                $userStats = DB::table('QPRecordDB.dbo.RecordUserTotalStatistics')
+                    ->where('UserID', $userId)
+                    ->first();
+                
+                $currentBetAmount = ($userStats->TotalBet ?? 0) / NumConfig::NUM_VALUE;
+                
                 $betPayTimes = $bettingTaskData['bet_pay_times'] ?? 60;
                 $requiredBet = $giftRecord->pay_amount * $betPayTimes;
-                $currentBet = $giftRecord->betting_current_bet;
                 
-                if ($currentBet < $requiredBet) {
+                if ($currentBetAmount < $requiredBet) {
                     return apiReturnFail('下注金额不足,需要下注 ' . $requiredBet);
                 }