|
@@ -602,11 +602,17 @@ class ActivityController extends Controller
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- $stage3_task1_status = 0; // 不能领取
|
|
|
|
|
|
|
+ $stage3_reward_status = 0; // 不能领取
|
|
|
if ($taskData['stage2_completed']) { // 阶段3需要阶段2完成才能解锁
|
|
if ($taskData['stage2_completed']) { // 阶段3需要阶段2完成才能解锁
|
|
|
- // 循环任务:基于累计下注判断是否可领取(不使用已领取状态)
|
|
|
|
|
- if (($taskData['stage3_current_bet'] ?? 0) >= 6000) {
|
|
|
|
|
- $stage3_task1_status = 1; // 待领取
|
|
|
|
|
|
|
+ // 循环任务:需要充值总额和下注流水两个条件都完成才能领取
|
|
|
|
|
+ $rechargeTarget = $taskData['stage3_recharge_target'] ?? 200;
|
|
|
|
|
+ $betTarget = $taskData['stage3_bet_target'] ?? 1000;
|
|
|
|
|
+ $rechargeProgress = $taskData['stage3_recharge_progress'] ?? 0;
|
|
|
|
|
+ $betProgress = $taskData['stage3_bet_progress'] ?? 0;
|
|
|
|
|
+
|
|
|
|
|
+ // 两个条件都完成才能领取奖励
|
|
|
|
|
+ if ($rechargeProgress >= $rechargeTarget && $betProgress >= $betTarget) {
|
|
|
|
|
+ $stage3_reward_status = 1; // 待领取
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -683,28 +689,44 @@ class ActivityController extends Controller
|
|
|
// 'title' => '阶段任务3(循环任务)',
|
|
// 'title' => '阶段任务3(循环任务)',
|
|
|
'title' => __('messages.web.vip_task.stage3_title'), // 阶段任务3(循环任务)
|
|
'title' => __('messages.web.vip_task.stage3_title'), // 阶段任务3(循环任务)
|
|
|
|
|
|
|
|
|
|
+ 'reward' => $taskConfig['stage3']['tasks'][0]['reward'] ?? 20,
|
|
|
'unlocked' => $taskData['stage2_completed'],
|
|
'unlocked' => $taskData['stage2_completed'],
|
|
|
|
|
+ 'completed' => ($taskData['stage3_task1'] ?? false) && ($taskData['stage3_task2'] ?? false),
|
|
|
|
|
+ 'reward_status' => $stage3_reward_status,
|
|
|
|
|
+// 'reward_status_text' => ['不能领取', '待领取', '已领取'][$stage3_reward_status],
|
|
|
|
|
+ 'reward_status_text' => [__('messages.web.vip_task.cannot_claim'), __('messages.web.vip_task.can_claim'), __('messages.web.vip_task.claimed')][$stage3_reward_status], // 不能领取, 待领取, 已领取
|
|
|
|
|
+
|
|
|
|
|
+ 'can_claim' => $stage3_reward_status === 1,
|
|
|
'is_loop' => true,
|
|
'is_loop' => true,
|
|
|
'current_loop' => $taskData['stage3_loop_count'],
|
|
'current_loop' => $taskData['stage3_loop_count'],
|
|
|
- 'tasks' => array_map(function($taskCfg) use ($taskData, $stage3_task1_status) {
|
|
|
|
|
|
|
+ 'tasks' => array_map(function($taskCfg) use ($taskData) {
|
|
|
$taskKey = $taskCfg['id'];
|
|
$taskKey = $taskCfg['id'];
|
|
|
- $progressKey = $taskCfg['progress_key'];
|
|
|
|
|
- $completed = $taskData[$taskKey] ?? false;
|
|
|
|
|
- $rewardStatus = $taskKey === 'stage3_task1' ? $stage3_task1_status : 0;
|
|
|
|
|
|
|
+ $progressKey = $taskCfg['progress_key'] ?? '';
|
|
|
|
|
+ $targetKey = $taskCfg['target_key'] ?? '';
|
|
|
|
|
+
|
|
|
|
|
+ // 获取当前进度和目标值
|
|
|
|
|
+ $currentProgress = $taskData[$progressKey] ?? 0;
|
|
|
|
|
+ $currentTarget = $targetKey ? ($taskData[$targetKey] ?? $taskCfg['target']) : $taskCfg['target'];
|
|
|
|
|
+
|
|
|
|
|
+ // 判断是否完成
|
|
|
|
|
+ $completed = $currentProgress >= $currentTarget;
|
|
|
|
|
+
|
|
|
|
|
+ // 动态生成任务标题(使用模板替换目标值)
|
|
|
|
|
+ $title = $taskCfg['title_template'] ?? $taskCfg['title'] ?? '';
|
|
|
|
|
+ if (!empty($title) && strpos($title, '{target}') !== false) {
|
|
|
|
|
+ $title = str_replace('{target}', $currentTarget, $title);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
return [
|
|
return [
|
|
|
'id' => $taskCfg['id'],
|
|
'id' => $taskCfg['id'],
|
|
|
- 'title' => $taskCfg['title'],
|
|
|
|
|
|
|
+ 'title' => $title,
|
|
|
'type' => $taskCfg['type'],
|
|
'type' => $taskCfg['type'],
|
|
|
- 'reward' => $taskCfg['reward'],
|
|
|
|
|
'completed' => $completed,
|
|
'completed' => $completed,
|
|
|
- 'reward_status' => $rewardStatus,
|
|
|
|
|
-// 'reward_status_text' => ['不能领取', '待领取', '可重复领取'][$rewardStatus],
|
|
|
|
|
- 'reward_status_text' => [__('messages.web.vip_task.cannot_claim'), __('messages.web.vip_task.can_claim'), __('messages.web.vip_task.repeatable')][$rewardStatus], // 不能领取, 待领取, 可重复领取
|
|
|
|
|
-
|
|
|
|
|
- 'can_claim' => $rewardStatus === 1,
|
|
|
|
|
- 'progress' => intval(min($taskData[$progressKey] ?? 0,$taskCfg['target'])),
|
|
|
|
|
- 'target' => $taskCfg['target']
|
|
|
|
|
|
|
+ 'status' => $completed ? 1 : 0,
|
|
|
|
|
+// 'status_text' => $completed ? '已完成' : '未完成',
|
|
|
|
|
+ 'status_text' => $completed ? __('messages.web.vip_task.completed') : __('messages.web.vip_task.not_completed'), // 已完成 : 未完成
|
|
|
|
|
+ 'progress' => intval(min($currentProgress, $currentTarget)),
|
|
|
|
|
+ 'target' => $currentTarget
|
|
|
];
|
|
];
|
|
|
}, $taskConfig['stage3']['tasks'])
|
|
}, $taskConfig['stage3']['tasks'])
|
|
|
]
|
|
]
|
|
@@ -771,18 +793,42 @@ class ActivityController extends Controller
|
|
|
}
|
|
}
|
|
|
// 阶段3
|
|
// 阶段3
|
|
|
elseif ($stage === 3) {
|
|
elseif ($stage === 3) {
|
|
|
- $taskId = 'stage3_task1';
|
|
|
|
|
- if ($taskId === 'stage3_task1') {
|
|
|
|
|
- // 每满600可领取20,领取后扣除600下注进度
|
|
|
|
|
- if (($taskData['stage3_current_bet'] ?? 0) < 6000) {
|
|
|
|
|
- Redis::del($redisLockKey);
|
|
|
|
|
- return apiReturnFail('任务未完成');
|
|
|
|
|
- }
|
|
|
|
|
- $rewardAmount = 20;
|
|
|
|
|
- $this->updateTaskProgress($userId, 'stage3_current_bet', max(0, ($taskData['stage3_current_bet'] - 6000)));
|
|
|
|
|
- } else {
|
|
|
|
|
|
|
+ $taskId = $request->input('task_id', 'stage3_task1');
|
|
|
|
|
+
|
|
|
|
|
+ // 检查两个条件是否都完成
|
|
|
|
|
+ $rechargeTarget = $taskData['stage3_recharge_target'] ?? 200;
|
|
|
|
|
+ $betTarget = $taskData['stage3_bet_target'] ?? 1000;
|
|
|
|
|
+ $rechargeProgress = $taskData['stage3_recharge_progress'] ?? 0;
|
|
|
|
|
+ $betProgress = $taskData['stage3_bet_progress'] ?? 0;
|
|
|
|
|
+
|
|
|
|
|
+ if ($rechargeProgress < $rechargeTarget || $betProgress < $betTarget) {
|
|
|
Redis::del($redisLockKey);
|
|
Redis::del($redisLockKey);
|
|
|
- return apiReturnFail(['web.vip_task.invalid_task', __('messages.web.vip_task.invalid_task')]); // 无效的任务
|
|
|
|
|
|
|
+ return apiReturnFail(['web.vip_task.task_not_completed', __('messages.web.vip_task.task_not_completed')]); // 任务未完成
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ $rewardAmount = 20;
|
|
|
|
|
+
|
|
|
|
|
+ // 领取后刷新任务:充值目标+100,下注目标+1000
|
|
|
|
|
+ $newRechargeTarget = $rechargeTarget + 100;
|
|
|
|
|
+ $newBetTarget = $betTarget + 1000;
|
|
|
|
|
+ $newLoopCount = ($taskData['stage3_loop_count'] ?? 0) + 1;
|
|
|
|
|
+
|
|
|
|
|
+ // 更新任务数据
|
|
|
|
|
+ $redisKey = "vip_withdraw_task_{$userId}";
|
|
|
|
|
+ $data = Redis::get($redisKey);
|
|
|
|
|
+ if ($data) {
|
|
|
|
|
+ $taskData = json_decode($data, true);
|
|
|
|
|
+ $taskData['stage3_recharge_target'] = $newRechargeTarget;
|
|
|
|
|
+ $taskData['stage3_bet_target'] = $newBetTarget;
|
|
|
|
|
+ $taskData['stage3_loop_count'] = $newLoopCount;
|
|
|
|
|
+ $taskData['stage3_task1'] = false;
|
|
|
|
|
+ $taskData['stage3_task2'] = false;
|
|
|
|
|
+
|
|
|
|
|
+ // 保存到数据库
|
|
|
|
|
+ $this->saveUserTaskData($userId, $taskData);
|
|
|
|
|
+
|
|
|
|
|
+ // 更新Redis缓存
|
|
|
|
|
+ Redis::setex($redisKey, 86400, json_encode($taskData));
|
|
|
}
|
|
}
|
|
|
} else {
|
|
} else {
|
|
|
Redis::del($redisLockKey);
|
|
Redis::del($redisLockKey);
|
|
@@ -992,11 +1038,21 @@ class ActivityController extends Controller
|
|
|
'tasks' => [
|
|
'tasks' => [
|
|
|
[
|
|
[
|
|
|
'id' => 'stage3_task1',
|
|
'id' => 'stage3_task1',
|
|
|
- 'title' => 'Bet amount reaches 6000',
|
|
|
|
|
|
|
+ 'title_template' => 'Deposit amount reaches {target}', // 使用模板,动态替换目标值
|
|
|
|
|
+ 'type' => 'recharge',
|
|
|
|
|
+ 'target' => 200,
|
|
|
|
|
+ 'reward' => 20,
|
|
|
|
|
+ 'progress_key' => 'stage3_recharge_progress',
|
|
|
|
|
+ 'target_key' => 'stage3_recharge_target'
|
|
|
|
|
+ ],
|
|
|
|
|
+ [
|
|
|
|
|
+ 'id' => 'stage3_task2',
|
|
|
|
|
+ 'title_template' => 'Bet amount reaches {target}', // 使用模板,动态替换目标值
|
|
|
'type' => 'bet_amount',
|
|
'type' => 'bet_amount',
|
|
|
- 'target' => 6000,
|
|
|
|
|
|
|
+ 'target' => 1000,
|
|
|
'reward' => 20,
|
|
'reward' => 20,
|
|
|
- 'progress_key' => 'stage3_current_bet'
|
|
|
|
|
|
|
+ 'progress_key' => 'stage3_bet_progress',
|
|
|
|
|
+ 'target_key' => 'stage3_bet_target'
|
|
|
]
|
|
]
|
|
|
]
|
|
]
|
|
|
]
|
|
]
|
|
@@ -1025,8 +1081,13 @@ class ActivityController extends Controller
|
|
|
|
|
|
|
|
// 阶段3任务(循环)
|
|
// 阶段3任务(循环)
|
|
|
'stage3_task1' => false,
|
|
'stage3_task1' => false,
|
|
|
|
|
+ 'stage3_task2' => false,
|
|
|
'stage3_task1_withdrawn' => false,
|
|
'stage3_task1_withdrawn' => false,
|
|
|
'stage3_loop_count' => 0,
|
|
'stage3_loop_count' => 0,
|
|
|
|
|
+ 'stage3_recharge_target' => 200, // 充值目标(初始200,每次+100)
|
|
|
|
|
+ 'stage3_bet_target' => 1000, // 下注目标(初始1000,每次+1000)
|
|
|
|
|
+ 'stage3_recharge_progress' => 0, // 当前充值总额
|
|
|
|
|
+ 'stage3_bet_progress' => 0, // 当前下注流水
|
|
|
'stage3_current_bet' => 0,
|
|
'stage3_current_bet' => 0,
|
|
|
'stage3_available_amount' => 0,
|
|
'stage3_available_amount' => 0,
|
|
|
|
|
|
|
@@ -1113,7 +1174,25 @@ class ActivityController extends Controller
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 阶段3累计下注:基于总下注的增量进行累加(非时间周期)
|
|
|
|
|
|
|
+ // 阶段3任务进度更新
|
|
|
|
|
+ if ($taskData['stage2_completed'] ?? false) {
|
|
|
|
|
+ // 获取充值总额(从 RecordUserTotalStatistics)
|
|
|
|
|
+ $rechargeTotal = $userTotalStatistics ? ($userTotalStatistics->Recharge) : 0;
|
|
|
|
|
+ $taskData['stage3_recharge_progress'] = $rechargeTotal;
|
|
|
|
|
+
|
|
|
|
|
+ // 获取下注流水(使用 total_bet)
|
|
|
|
|
+ $taskData['stage3_bet_progress'] = $taskData['total_bet'] ?? 0;
|
|
|
|
|
+
|
|
|
|
|
+ // 初始化目标值(如果不存在)
|
|
|
|
|
+ if (!isset($taskData['stage3_recharge_target'])) {
|
|
|
|
|
+ $taskData['stage3_recharge_target'] = 200;
|
|
|
|
|
+ }
|
|
|
|
|
+ if (!isset($taskData['stage3_bet_target'])) {
|
|
|
|
|
+ $taskData['stage3_bet_target'] = 1000;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 保留原有的 stage3_current_bet 逻辑(用于兼容)
|
|
|
if (!isset($taskData['stage3_current_bet'])) {
|
|
if (!isset($taskData['stage3_current_bet'])) {
|
|
|
$taskData['stage3_current_bet'] = 0;
|
|
$taskData['stage3_current_bet'] = 0;
|
|
|
}
|
|
}
|
|
@@ -1151,9 +1230,15 @@ class ActivityController extends Controller
|
|
|
$taskData['stage2_task3'];
|
|
$taskData['stage2_task3'];
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // 阶段3任务检查(循环):基于累计下注,不使用时间周期
|
|
|
|
|
|
|
+ // 阶段3任务检查(循环):需要充值总额和下注流水两个条件都完成
|
|
|
if ($taskData['stage2_completed']) {
|
|
if ($taskData['stage2_completed']) {
|
|
|
- $taskData['stage3_task1'] = ($taskData['stage3_current_bet'] ?? 0) >= 6000;
|
|
|
|
|
|
|
+ $rechargeTarget = $taskData['stage3_recharge_target'] ?? 200;
|
|
|
|
|
+ $betTarget = $taskData['stage3_bet_target'] ?? 1000;
|
|
|
|
|
+ $rechargeProgress = $taskData['stage3_recharge_progress'] ?? 0;
|
|
|
|
|
+ $betProgress = $taskData['stage3_bet_progress'] ?? 0;
|
|
|
|
|
+
|
|
|
|
|
+ $taskData['stage3_task1'] = $rechargeProgress >= $rechargeTarget;
|
|
|
|
|
+ $taskData['stage3_task2'] = $betProgress >= $betTarget;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|