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

View File

@@ -734,75 +734,77 @@ function docleanup($forceAll = 0, $printProgress = false) {
printProgress($log);
}
//migrate to job: RemoveUserVipStatus
//remove VIP status if time's up
$res = sql_query("SELECT id, class FROM users WHERE vip_added='yes' AND vip_until < NOW()") or sqlerr(__FILE__, __LINE__);
$userModifyLogs = [];
if (mysql_num_rows($res) > 0)
{
while ($arr = mysql_fetch_assoc($res))
{
$dt = sqlesc(date("Y-m-d H:i:s"));
$locale = get_user_locale($arr['id']);
$subject = sqlesc(nexus_trans("cleanup.msg_vip_status_removed", [], $locale));
$msg = sqlesc(nexus_trans("cleanup.msg_vip_status_removed_body", [], $locale));
$userModifyLogs[] = [
'user_id' => $arr['id'],
'content' => "VIP status removed by - AutoSystem",
'created_at' => date("Y-m-d H:i:s"),
'updated_at' => date("Y-m-d H:i:s"),
];
if ($arr['class'] > \App\Models\User::CLASS_VIP) {
/**
* @since 1.8
* never demotion VIP above
*/
sql_query("UPDATE users SET vip_added = 'no', vip_until = null WHERE id = {$arr['id']}") or sqlerr(__FILE__, __LINE__);
} else {
sql_query("UPDATE users SET class = '1', vip_added = 'no', vip_until = null WHERE id = {$arr['id']}") or sqlerr(__FILE__, __LINE__);
sql_query("INSERT INTO messages (sender, receiver, added, msg, subject) VALUES(0, {$arr['id']}, $dt, $msg, $subject)") or sqlerr(__FILE__, __LINE__);
}
publish_model_event(ModelEventEnum::USER_UPDATED, $arr['id']);
}
}
if (!empty($userModifyLogs)) {
\App\Models\UserModifyLog::query()->insert($userModifyLogs);
}
$log = "remove VIP status if time's up";
do_log($log);
if ($printProgress) {
printProgress($log);
}
// $res = sql_query("SELECT id, class FROM users WHERE vip_added='yes' AND vip_until < NOW()") or sqlerr(__FILE__, __LINE__);
// $userModifyLogs = [];
// if (mysql_num_rows($res) > 0)
// {
// while ($arr = mysql_fetch_assoc($res))
// {
// $dt = sqlesc(date("Y-m-d H:i:s"));
// $locale = get_user_locale($arr['id']);
// $subject = sqlesc(nexus_trans("cleanup.msg_vip_status_removed", [], $locale));
// $msg = sqlesc(nexus_trans("cleanup.msg_vip_status_removed_body", [], $locale));
// $userModifyLogs[] = [
// 'user_id' => $arr['id'],
// 'content' => "VIP status removed by - AutoSystem",
// 'created_at' => date("Y-m-d H:i:s"),
// 'updated_at' => date("Y-m-d H:i:s"),
// ];
// if ($arr['class'] > \App\Models\User::CLASS_VIP) {
// /**
// * @since 1.8
// * never demotion VIP above
// */
// sql_query("UPDATE users SET vip_added = 'no', vip_until = null WHERE id = {$arr['id']}") or sqlerr(__FILE__, __LINE__);
// } else {
// sql_query("UPDATE users SET class = '1', vip_added = 'no', vip_until = null WHERE id = {$arr['id']}") or sqlerr(__FILE__, __LINE__);
// sql_query("INSERT INTO messages (sender, receiver, added, msg, subject) VALUES(0, {$arr['id']}, $dt, $msg, $subject)") or sqlerr(__FILE__, __LINE__);
// }
// publish_model_event(ModelEventEnum::USER_UPDATED, $arr['id']);
// }
// }
// if (!empty($userModifyLogs)) {
// \App\Models\UserModifyLog::query()->insert($userModifyLogs);
// }
// $log = "remove VIP status if time's up";
// do_log($log);
// if ($printProgress) {
// printProgress($log);
// }
//migrate to job: RemoveUserDonorStatus
//remove donor status if time's up
$userModifyLogs = [];
$res = sql_query("SELECT id FROM users WHERE donor='yes' AND donoruntil is not null and donoruntil != '0000-00-00 00:00:00' and donoruntil < NOW()") or sqlerr(__FILE__, __LINE__);
if (mysql_num_rows($res) > 0)
{
while ($arr = mysql_fetch_assoc($res))
{
$dt = sqlesc(date("Y-m-d H:i:s"));
$locale = get_user_locale($arr['id']);
$subject = sqlesc(nexus_trans("cleanup.msg_donor_status_removed", [], $locale));
$msg = sqlesc(nexus_trans("cleanup.msg_donor_status_removed_body", [], $locale));
$userModifyLogs[] = [
'user_id' => $arr['id'],
'content' => "donor status removed by - AutoSystem",
'created_at' => date("Y-m-d H:i:s"),
'updated_at' => date("Y-m-d H:i:s"),
];
sql_query("UPDATE users SET donor = 'no' WHERE id = {$arr['id']}") or sqlerr(__FILE__, __LINE__);
sql_query("INSERT INTO messages (sender, receiver, added, msg, subject) VALUES(0, {$arr['id']}, $dt, $msg, $subject)") or sqlerr(__FILE__, __LINE__);
publish_model_event(ModelEventEnum::USER_UPDATED, $arr['id']);
}
}
if (!empty($userModifyLogs)) {
\App\Models\UserModifyLog::query()->insert($userModifyLogs);
}
$log = "remove donor status if time's up";
do_log($log);
if ($printProgress) {
printProgress($log);
}
// $userModifyLogs = [];
// $res = sql_query("SELECT id FROM users WHERE donor='yes' AND donoruntil is not null and donoruntil != '0000-00-00 00:00:00' and donoruntil < NOW()") or sqlerr(__FILE__, __LINE__);
// if (mysql_num_rows($res) > 0)
// {
// while ($arr = mysql_fetch_assoc($res))
// {
// $dt = sqlesc(date("Y-m-d H:i:s"));
// $locale = get_user_locale($arr['id']);
// $subject = sqlesc(nexus_trans("cleanup.msg_donor_status_removed", [], $locale));
// $msg = sqlesc(nexus_trans("cleanup.msg_donor_status_removed_body", [], $locale));
// $userModifyLogs[] = [
// 'user_id' => $arr['id'],
// 'content' => "donor status removed by - AutoSystem",
// 'created_at' => date("Y-m-d H:i:s"),
// 'updated_at' => date("Y-m-d H:i:s"),
// ];
// sql_query("UPDATE users SET donor = 'no' WHERE id = {$arr['id']}") or sqlerr(__FILE__, __LINE__);
// sql_query("INSERT INTO messages (sender, receiver, added, msg, subject) VALUES(0, {$arr['id']}, $dt, $msg, $subject)") or sqlerr(__FILE__, __LINE__);
// publish_model_event(ModelEventEnum::USER_UPDATED, $arr['id']);
// }
// }
// if (!empty($userModifyLogs)) {
// \App\Models\UserModifyLog::query()->insert($userModifyLogs);
// }
// $log = "remove donor status if time's up";
// do_log($log);
// if ($printProgress) {
// printProgress($log);
// }
// promote peasant back to user
@@ -889,27 +891,28 @@ function docleanup($forceAll = 0, $printProgress = false) {
printProgress($log);
}
//migrate to job: RemoveUserWarning
//Remove warning of users
$dt = sqlesc(date("Y-m-d H:i:s")); // take date time
$res = sql_query("SELECT id FROM users WHERE enabled = 'yes' AND warned = 'yes' AND warneduntil < $dt") or sqlerr(__FILE__, __LINE__);
if (mysql_num_rows($res) > 0)
{
while ($arr = mysql_fetch_assoc($res))
{
$locale = get_user_locale($arr['id']);
$subject = nexus_trans("cleanup.msg_warning_removed", [], $locale);
$msg = nexus_trans("cleanup.msg_your_warning_removed", [], $locale);
writecomment($arr['id'],"Warning removed by System.");
sql_query("UPDATE users SET warned = 'no', warneduntil = null WHERE id = {$arr['id']}") or sqlerr(__FILE__, __LINE__);
sql_query("INSERT INTO messages (sender, receiver, added, subject, msg) VALUES(0, {$arr['id']}, $dt, ".sqlesc($subject).", ".sqlesc($msg).")") or sqlerr(__FILE__, __LINE__);
}
}
$log = "remove warning of users";
do_log($log);
if ($printProgress) {
printProgress($log);
}
// $dt = sqlesc(date("Y-m-d H:i:s")); // take date time
// $res = sql_query("SELECT id FROM users WHERE enabled = 'yes' AND warned = 'yes' AND warneduntil < $dt") or sqlerr(__FILE__, __LINE__);
//
// if (mysql_num_rows($res) > 0)
// {
// while ($arr = mysql_fetch_assoc($res))
// {
// $locale = get_user_locale($arr['id']);
// $subject = nexus_trans("cleanup.msg_warning_removed", [], $locale);
// $msg = nexus_trans("cleanup.msg_your_warning_removed", [], $locale);
// writecomment($arr['id'],"Warning removed by System.");
// sql_query("UPDATE users SET warned = 'no', warneduntil = null WHERE id = {$arr['id']}") or sqlerr(__FILE__, __LINE__);
// sql_query("INSERT INTO messages (sender, receiver, added, subject, msg) VALUES(0, {$arr['id']}, $dt, ".sqlesc($subject).", ".sqlesc($msg).")") or sqlerr(__FILE__, __LINE__);
// }
// }
// $log = "remove warning of users";
// do_log($log);
// if ($printProgress) {
// printProgress($log);
// }
//17.update total seeding and leeching time of users
// $res = sql_query("SELECT id FROM users where enabled = 'yes' and status = 'confirmed'") or sqlerr(__FILE__, __LINE__);

View File

@@ -21,6 +21,8 @@ return [
\App\Models\BonusLogs::BUSINESS_TYPE_BUY_CHANGE_USERNAME_CARD => 'Buy change username card',
\App\Models\BonusLogs::BUSINESS_TYPE_GIFT_MEDAL => 'Gift medal',
\App\Models\BonusLogs::BUSINESS_TYPE_BUY_TORRENT => 'Buy torrent',
\App\Models\BonusLogs::BUSINESS_TYPE_TASK_PASS_REWARD => 'Task finished reward',
\App\Models\BonusLogs::BUSINESS_TYPE_TASK_NOT_PASS_DEDUCT => 'Task unfinished deduct',
\App\Models\BonusLogs::BUSINESS_TYPE_REWARD_TORRENT => 'Reward torrent',
\App\Models\BonusLogs::BUSINESS_TYPE_CLAIMED_UNREACHED => 'Claimed torrent unreached',

View File

@@ -21,6 +21,8 @@ return [
\App\Models\BonusLogs::BUSINESS_TYPE_BUY_CHANGE_USERNAME_CARD => '購買改名卡',
\App\Models\BonusLogs::BUSINESS_TYPE_GIFT_MEDAL => '贈送勛章',
\App\Models\BonusLogs::BUSINESS_TYPE_BUY_TORRENT => '購買種子',
\App\Models\BonusLogs::BUSINESS_TYPE_TASK_PASS_REWARD => '任務完成獎勵',
\App\Models\BonusLogs::BUSINESS_TYPE_TASK_NOT_PASS_DEDUCT => '任務未完成扣除',
\App\Models\BonusLogs::BUSINESS_TYPE_REWARD_TORRENT => '獎勵種子',
\App\Models\BonusLogs::BUSINESS_TYPE_CLAIMED_UNREACHED => '認領種子未達標扣除',