add job RemoveUserVipStatus + RemoveUserDonorStatus + RemoveUserWarning

This commit is contained in:
xiaomlove
2026-01-30 15:03:52 +07:00
parent 50259367d6
commit f3a6d366d8
7 changed files with 294 additions and 86 deletions

View File

@@ -6,6 +6,9 @@ use App\Jobs\CheckCleanup;
use App\Jobs\CheckQueueFailedJobs;
use App\Jobs\MaintainPluginState;
use App\Jobs\ManagePlugin;
use App\Jobs\RemoveUserDonorStatus;
use App\Jobs\RemoveUserVipStatus;
use App\Jobs\RemoveUserWarning;
use App\Jobs\SaveIpLogCacheToDB;
use App\Jobs\UpdateIsSeedBoxFromUserRecordsCache;
use App\Utils\ThirdPartyJob;
@@ -53,6 +56,9 @@ class Kernel extends ConsoleKernel
$schedule->job(new UpdateIsSeedBoxFromUserRecordsCache())->everySixHours();
$schedule->job(new CheckCleanup())->everyFifteenMinutes();
$schedule->job(new SaveIpLogCacheToDB())->hourly();
$schedule->job(new RemoveUserWarning())->everyTwentySeconds();
$schedule->job(new RemoveUserVipStatus())->everyMinute();
$schedule->job(new RemoveUserDonorStatus())->everyMinute();
}

View File

@@ -0,0 +1,63 @@
<?php
namespace App\Jobs;
use App\Enums\ModelEventEnum;
use App\Models\Message;
use App\Models\User;
use App\Models\UserModifyLog;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
class RemoveUserDonorStatus
{
/**
* Create a new job instance.
*/
public function __construct()
{
//
}
/**
* Execute the job.
*/
public function handle(): void
{
$users = User::query()
->with('language')
->where('donor', 'yes')
->whereNotNull('donoruntil')
->where('donoruntil', '!=', '0000-00-00 00:00:00')
->where('donoruntil', '<', now())
->get();
$userModifyLogs = [];
foreach ($users as $user) {
$locale = $user->locale;
$userModifyLogs[] = [
'user_id' => $user->id,
'content' => "donor status removed by - AutoSystem",
'created_at' => now(),
'updated_at' => now(),
];
$user->donor = 'no';
do_log(sprintf("update user %s => %s", $user->id, json_encode($user->getDirty())));
$user->save();
clear_user_cache($user->id);
publish_model_event(ModelEventEnum::USER_UPDATED, $user->id);
$subject = sqlesc(nexus_trans("cleanup.msg_donor_status_removed", [], $locale));
$msg = sqlesc(nexus_trans("cleanup.msg_donor_status_removed_body", [], $locale));
Message::add([
'sender' => 0,
'receiver' => $user->id,
'added' => now(),
'subject' => $subject,
'msg' => $msg,
]);
}
if (!empty($userModifyLogs)) {
UserModifyLog::query()->insert($userModifyLogs);
}
do_log("remove donor status if time's up, success handle user count: " . $users->count());
}
}

View File

@@ -0,0 +1,69 @@
<?php
namespace App\Jobs;
use App\Enums\ModelEventEnum;
use App\Models\Message;
use App\Models\User;
use App\Models\UserModifyLog;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
class RemoveUserVipStatus
{
/**
* Create a new job instance.
*/
public function __construct()
{
//
}
/**
* Execute the job.
*/
public function handle(): void
{
$users = User::query()
->with('language')
->where('vip_added', 'yes')
->where('vip_until', '<', now())
->get();
$userModifyLogs = [];
foreach ($users as $user) {
$locale = $user->locale;
$userModifyLogs[] = [
'user_id' => $user->id,
'content' => "VIP status removed by - AutoSystem",
'created_at' => now(),
'updated_at' => now(),
];
$message = [];
$user->vip_added = 'no';
$user->vip_until = null;
if ($user->class <= User::CLASS_VIP) {
$user->class = User::CLASS_USER;
$subject = sqlesc(nexus_trans("cleanup.msg_vip_status_removed", [], $locale));
$msg = sqlesc(nexus_trans("cleanup.msg_vip_status_removed_body", [], $locale));
$message = [
'sender' => 0,
'receiver' => $user->id,
'added' => now(),
'subject' => $subject,
'msg' => $msg,
];
}
do_log(sprintf("update user %s => %s", $user->id, json_encode($user->getDirty())));
$user->save();
clear_user_cache($user->id);
publish_model_event(ModelEventEnum::USER_UPDATED, $user->id);
if (!empty($message)) {
Message::add($message);
}
}
if (!empty($userModifyLogs)) {
UserModifyLog::query()->insert($userModifyLogs);
}
do_log("remove VIP status if time's up, success handle user count: " . $users->count());
}
}

View File

@@ -0,0 +1,63 @@
<?php
namespace App\Jobs;
use App\Enums\ModelEventEnum;
use App\Models\Message;
use App\Models\User;
use App\Models\UserModifyLog;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
class RemoveUserWarning
{
/**
* Create a new job instance.
*/
public function __construct()
{
//
}
/**
* Execute the job.
*/
public function handle(): void
{
$users = User::query()
->with('language')
->where('enabled', 'yes')
->where('warned', 'yes')
->where('warneduntil', '<', now())
->get();
$userModifyLogs = [];
foreach ($users as $user) {
$locale = $user->locale;
$userModifyLogs[] = [
'user_id' => $user->id,
'content' => "Warning removed by System.",
'created_at' => now(),
'updated_at' => now(),
];
$user->warned = 'no';
$user->warneduntil = null;
do_log(sprintf("update user %s => %s", $user->id, json_encode($user->getDirty())));
$user->save();
clear_user_cache($user->id);
publish_model_event(ModelEventEnum::USER_UPDATED, $user->id);
$subject = nexus_trans("cleanup.msg_warning_removed", [], $locale);
$msg = nexus_trans("cleanup.msg_your_warning_removed", [], $locale);
Message::add([
'sender' => 0,
'receiver' => $user->id,
'added' => now(),
'subject' => $subject,
'msg' => $msg,
]);
}
if (!empty($userModifyLogs)) {
UserModifyLog::query()->insert($userModifyLogs);
}
do_log("remove warning of users, success handle user count: " . $users->count());
}
}