name('task_center')->where(['shows' => 1])->order('type', 'asc')->order('sort', 'asc')->select()->toArray(); $data = []; $day_date = date('Y-m-d 00:00:00'); foreach ($rask_arr as $k => $task) { $task_reward_arr = $db->name('task_center_reward')->field('type,number')->where(['task_id' => $task['id']])->select()->toArray(); $todaySign = true; $signCount = null; // 默认值 $rask_arr[$k]['disabled'] = true; $rask_arr[$k]['discNumber'] = 0; if(empty($task_reward_arr)) { continue; } $number = 0; $task_reward = []; foreach ($task_reward_arr as $tk => $tv) { $number += $tv['number']; $t_type = $tv['type']; } $task_reward[$t_type] = $number; switch ($task['type']) { //签到任务 case 2: if($task['number'] == 1) { $order_db = DatabaseRoute::getDb('orders', $user_id); $dayOrderNum = $order_db->where(['status' => 1, 'pay_way' => 9])->where('create_time', '>', $day_date)->count(); if($dayOrderNum < 3) { $rask_arr[$k]['discNumber'] = $dayOrderNum; $rask_arr[$k]['number'] = 3; $todaySign = false; }elseif (UserSignRecord::getTaskCenterRecordCount($user_id, $task['id'], $day_date) > 0) { $rask_arr[$k]['buttonTitle'] = '已领取'; $rask_arr[$k]['number'] = null; }else { $rask_arr[$k]['discNumber'] = 0; $rask_arr[$k]['number'] = null; $rask_arr[$k]['jumpType'] = 0; } }else { // 周任务 if($task['number'] > 1 && $task['number'] < 8) { if(!empty($task_reward[9])) { $disc_spi_count = DatabaseRoute::getDb('disc_spinning_record', $user_id)->where(['source' => 'taskW'])->count(); if($disc_spi_count > 0) { continue 2; } $isBreak = false; // 抽奖次数 $taskWCount = UserSignRecord::getTaskWCount($user_id, $task_reward[9]); if($taskWCount) { foreach ($taskWCount as $taskWCount_K => $taskWCount_v) { if($taskWCount_v > 0) { $isBreak = true; break; } } if($isBreak) { $rask_arr[$k]['discNumber'] = null; $rask_arr[$k]['number'] = null; break; } } } $wSignCount = UserSignRecord::getWSignCount($user_id); $wSignCount_s = $todaySign ? 1 : 0; if(!$wSignCount || ($wSignCount + $wSignCount_s) < $rask_arr[$k]['number']) { $rask_arr[$k]['discNumber'] = !$wSignCount?0:$wSignCount; $rask_arr[$k]['disabled'] = false; }else { continue 2; } }elseif ($task['number'] > 7 && $task['number'] < 32) { if(!$signCount) { $signCount = UserSignRecord::getUserSignCount($user_id); } if($signCount + ($todaySign ? 1 : 0) < $rask_arr[$k]['number']) { $rask_arr[$k]['discNumber'] = $signCount; $rask_arr[$k]['disabled'] = false; }else { if(!empty($task_reward[9])) { $spinningCount = DatabaseRoute::getDb('disc_spinning_record', $user_id)->where(['source' => 'taskW', 'source_id' => $tv['id']])->count(); if ($spinningCount == null || $task_reward[9] - $spinningCount > 0) { $rask_arr[$k]['discNumber'] = null; $rask_arr[$k]['number'] = null; break; } else { continue 2; } }else { if(UserSignRecord::getTaskCenterRecordCount($user_id, $task['id'], $day_date) > 0) { $rask_arr[$k]['buttonTitle'] = '已领取'; $rask_arr[$k]['disabled'] = false; $rask_arr[$k]['number'] = null; $rask_arr[$k]['discNumber'] = null; }else { $rask_arr[$k]['number'] = null; $rask_arr[$k]['discNumber'] = null; } } } } } break; // 一次性任务 case 3: if($task['id'] == 1) { // $inviteAchievement = Db::connect(DatabaseRoute::getConnection('invite_achievement', ['user_id' => $user_id]))->name('invite_achievement') // ->where(['target_user_id' => $user_id])->find(); $inviteAchievement = DatabaseRoute::getDb('invite_achievement', $target_user_id) ->where('target_user_id', $user_id) ->find(); if($inviteAchievement && !empty($inviteAchievement['tasks'])) { $splitTasks = explode(',', $inviteAchievement['tasks']); $isOver = false; foreach ($splitTasks as $tasks) { $isEqual = trim($tasks) === '1'; if($isEqual) { $isOver = true; break; } } if($isOver) { unset($rask_arr[$k]); continue 2; } } $userinfo = DatabaseRoute::getDb('user_info', $user_id)->find(); if($userinfo && !empty($userinfo['cert_name']) && !empty($userinfo['cert_no'])) { $users = UserInfo::getUsersByNameAndCertNo($userinfo['cert_name'], $userinfo['cert_no']); if(UserSignRecord::getTaskCenterRecordCountUserIdAll($users, $task['id']) > 0) { if($inviteAchievement) { // Db::connect(DatabaseRoute::getConnection('invite_achievement', ['user_id' => $user_id], true))->name('invite_achievement') // ->where(['id' => $inviteAchievement['id']]) // ->update(['tasks' => empty($inviteAchievement['tasks']) ? '1' : $inviteAchievement['tasks'] . ',1']); DatabaseRoute::getDb('invite_achievement', $user_id, true, true) ->where(['id' => $inviteAchievement['id']]) ->update(['tasks' => empty($inviteAchievement['tasks']) ? '1' : $inviteAchievement['tasks'] . ',1']); } unset($rask_arr[$k]); continue 2; } } if(UserSignRecord::getTaskCenterRecordCount($user_id, $task['id'], null) > 0) { unset($rask_arr[$k]); continue 2; } $sumOrderNum = 0; if($inviteAchievement) { $sumOrderNum = $inviteAchievement['count']; } if($sumOrderNum != null && $sumOrderNum < $rask_arr[$k]['number']) { $rask_arr[$k]['discNumber'] = $sumOrderNum; }else { $rask_arr[$k]['discNumber'] = null; $rask_arr[$k]['number'] = null; $rask_arr[$k]['jumpType'] = 0; } } break; } } return returnSuccessData(convertToCamelCase($rask_arr)); } public static function addBlackUser(int $userId, string $behavior) { Log::info("异常用户id, 异常操作: {$userId},{$behavior}"); $db = Db::connect(DatabaseRoute::getConnection('tb_user', ['user_id' => $userId], true)); $userInfo = $db->name('user_info')->where('user_id', $userId)->find(); if (!empty($userInfo) && !empty($userInfo['cert_no'])) { Db::name('tb_user_blacklist')->insert([ 'real_name' => $userInfo['cert_name'], 'id_card_no' => $userInfo['cert_no'] ]); } $db->name('tb_user')->where('user_id', $userId) ->update([ 'status' => 0, 'platform' => $behavior, 'update_time' => date('Y-m-d H:i:s') ]); } // 任务领取 public static function taskReceive($userId, $id, $target_id) { $user_id_slave_db = Db::connect(DatabaseRoute::getConnection('tb_user', ['user_id' => $userId])); $user_id_master_db = Db::connect(DatabaseRoute::getConnection('tb_user', ['user_id' => $userId], true)); // 查询任务中心记录 $taskCenter = Db::name('task_center')->find($id); if (empty($taskCenter) || $taskCenter['shows'] != 1) { return ['code' => -1, 'msg' => '领取失败']; } // 查询邀请成就记录 $inviteAchievement = DatabaseRoute::getDb('invite_achievement', $target_id) ->where('target_user_id', $userId) ->find(); // 处理类型为2的任务 if ($taskCenter['type'] == 2) { // 统计今日订单数量 $todayStart = date('Y-m-d') . ' 00:00:00'; $dayOrderNum = $user_id_slave_db->name('orders') ->where('user_id', $userId) ->where('create_time', '>=', $todayStart) ->count(); if ($taskCenter['number'] == 1) { // 查询昨日签到记录 $yesterday = date('Y-m-d', strtotime('-1 day')); $yesterdaySign = $user_id_slave_db->name('user_sign_record') ->where('user_id', $userId) ->where('sign_day', $yesterday) ->find(); // 构建今日签到记录 $signRecord = [ 'user_id' => $userId, 'sign_day' => date('Y-m-d'), 'create_time' => date('Y-m-d H:i:s'), 'day' => 1 // 默认连续1天 ]; // 计算连续签到天数 if (!empty($yesterdaySign) && $yesterdaySign['day'] != 7) { $signRecord['day'] = $yesterdaySign['day'] + 1; } // 检查领取条件 if ($dayOrderNum < 3) { return ['code' => -1, 'msg' => '领取失败,未达成领取条件']; } // 检查是否已领取 $recordCount = $user_id_slave_db->name('task_center_record') ->where('user_id', $userId) ->where('task_id', $taskCenter['id']) ->where('create_time', '>=', $todayStart) ->count(); if ($recordCount > 0) { return ['code' => -1, 'msg' => '不可重复领取']; } // 保存签到记录 $user_id_master_db->name('user_sign_record')->insert($signRecord); } else { return ['code' => -1, 'msg' => '异常领取,已记录']; } } // 处理类型为3且id=1的任务 elseif ($taskCenter['type'] == 3 && $taskCenter['id'] == 1) { $sumOrderNum = 0; // 检查是否已领取过该任务 if (!empty($inviteAchievement) && !empty($inviteAchievement['tasks'])) { $tasks = explode(',', $inviteAchievement['tasks']); if (in_array('1', array_map('trim', $tasks))) { return ['code' => -1, 'msg' => '不可重复领取']; } } // 获取订单总数 if (!empty($inviteAchievement)) { $sumOrderNum = $inviteAchievement['count']; } // 检查订单数量是否达标 if ($sumOrderNum !== null && $sumOrderNum < $taskCenter['number']) { return ['code' => -1, 'msg' => '领取失败,未达成领取条件']; } else { // 检查用户实名信息 $userInfo = $user_id_slave_db->name('user_info') ->where('user_id', $userId) ->find(); if (empty($userInfo) || empty($userInfo['cert_no']) || empty($userInfo['cert_name'])) { return ['code' => -1, 'msg' => '请实名后领取']; } // 检查同一实名是否已领取 $users = $user_id_slave_db->name('user_info') ->where('cert_name', $userInfo['cert_name']) ->where('cert_no', $userInfo['cert_no']) ->select() ->toArray(); $courseIds = array_column($users, 'user_id'); $recordCount = $user_id_slave_db->name('task_center_record') ->whereIn('user_id', $courseIds) ->where('task_id', $taskCenter['id']) ->count(); if ($recordCount > 0) { return ['code' => -1, 'msg' => '同一实名算一个新用户,不可重复领取']; } } } else { return ['code' => -1, 'msg' => '异常领取,已记录']; } // 处理奖励发放 $records = []; $targetId = null; // 查询任务奖励列表 $rewards = Db::name('task_center_reward') ->where('task_id', $id) ->select() ->toArray(); foreach ($rewards as $reward) { switch ($reward['type']) { // 金币奖励 case 1: $moneyDetail = [ 'user_id' => $userId, 'title' => '[任务中心]', 'classify' => 7, 'type' => 1, 'state' => 2, 'money' => $reward['number'], 'content' => $taskCenter['title'] . "任务完成,金币奖励" . $reward['number'], 'money_type' => 2, 'source_id' => $reward['task_id'], 'create_time' => date('Y-m-d H:i:s') ]; // 更新用户金币 UserMoney::updateMoney($userId, $reward['number']); // 保存金币明细 $targetId = $user_id_master_db->name('user_money_details')->insertGetId($moneyDetail); break; // 现金奖励 case 2: $cashDetail = [ 'user_id' => $userId, 'title' => '[任务中心]', 'classify' => 7, 'type' => 1, 'state' => 2, 'money' => $reward['number'], 'content' => $taskCenter['title'] . "任务完成,现金奖励" . $reward['number'], 'money_type' => 1, 'source_id' => $reward['task_id'], 'create_time' => date('Y-m-d H:i:s') ]; // 更新用户现金 UserMoney::updateAmount($userId, $reward['number']); // 保存现金明细 $targetId = $user_id_master_db->name('user_money_details')->insertGetId($cashDetail); break; } // 构建任务记录 $records[] = [ 'user_id' => $userId, 'task_id' => $id, 'type' => $reward['type'], 'number' => $reward['number'], 'name' => $taskCenter['title'], 'target_id' => $targetId, 'create_time' => date('Y-m-d H:i:s'), 'update_time' => date('Y-m-d H:i:s') ]; } // 批量保存任务记录 if (!empty($records)) { $user_id_master_db->name('task_center_record')->insertAll($records); } // 更新邀请成就任务记录 if (!empty($inviteAchievement) && $id == 1) { $tasks = $inviteAchievement['tasks'] ?? ''; $newTasks = empty($tasks) ? '1' : $tasks . ',1'; $user_id_master_db->name('invite_achievement') ->where('user_id', $inviteAchievement['user_id']) ->where('id', $inviteAchievement['id']) ->update(['tasks' => $newTasks]); } return returnSuccessData(); } }