|
|
@@ -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);
|
|
|
}
|
|
|
|