diff --git a/app/Console/Commands/AutoJob.php b/app/Console/Commands/AutoJob.php index 4c04a17a..24cc785d 100644 --- a/app/Console/Commands/AutoJob.php +++ b/app/Console/Commands/AutoJob.php @@ -13,7 +13,6 @@ use App\Models\Order; use App\Models\User; use App\Models\UserBanedLog; use App\Models\UserHourlyDataFlow; -use App\Models\UserSubscribeLog; use App\Models\VerifyCode; use Cache; use Illuminate\Console\Command; @@ -91,25 +90,25 @@ class AutoJob extends Command { // 封禁访问异常的订阅链接 private function blockSubscribe(): void { if(sysConfig('is_subscribe_ban')){ - $pastSubLogs = UserSubscribeLog::where('request_time', '>=', date("Y-m-d H:i:s", strtotime("-1 days"))) - ->groupBy('user_subscribe_id') - ->selectRaw('count(*) as total, user_subscribe_id') - ->get(); - foreach($pastSubLogs as $log){ - if($log->total >= sysConfig('subscribe_ban_times')){ - $subscribe = $log->subscribe; - $ret = $subscribe->update([ + $subscribe_ban_times = sysConfig('subscribe_ban_times'); + foreach(User::activeUser()->with('subscribe')->get() as $user){ + if(!$user->subscribe || $user->subscribe->status === 0){ // 无订阅链接 或 已封 + continue; + } + // 24小时内不同IP的请求次数 + $request_times = $user->subscribeLogs() + ->where('request_time', '>=', date("Y-m-d H:i:s", strtotime("-1 days"))) + ->distinct() + ->count('request_ip'); + if($request_times >= $subscribe_ban_times){ + $user->subscribe->update([ 'status' => 0, - 'ban_time' => time(), + 'ban_time' => strtotime("+".sysConfig('traffic_ban_time')." minutes"), 'ban_desc' => '存在异常,自动封禁' ]); // 记录封禁日志 - if($ret){ - $this->addUserBanLog($subscribe->user_id, 0, '【完全封禁订阅】-订阅24小时内请求异常'); - }else{ - Log::error('【自动化任务】封禁订阅失败,尝试封禁订阅ID:'.$subscribe->id); - } + $this->addUserBanLog($user->id, 0, '【完全封禁订阅】-订阅24小时内请求异常'); } } } diff --git a/app/Http/Controllers/Admin/SubscribeController.php b/app/Http/Controllers/Admin/SubscribeController.php index 9daaeca4..363fad38 100644 --- a/app/Http/Controllers/Admin/SubscribeController.php +++ b/app/Http/Controllers/Admin/SubscribeController.php @@ -50,7 +50,7 @@ class SubscribeController extends Controller { $query = UserSubscribeLog::with('user:email'); if(isset($id)){ - $query->whereSubscribeId($id); + $query->whereUserSubscribeId($id); } $view['subscribeLog'] = $query->latest()->paginate(20)->appends($request->except('page'));