将重置流量只重置已使用流量修改为重置已使用流量的同时重置当总流量为当前订阅所设置的流量

This commit is contained in:
ventle233 2024-01-13 02:10:15 +08:00
parent 07b3a8dfd8
commit 3611ed6c88

View File

@ -55,110 +55,147 @@ class ResetTraffic extends Command
$planIds = explode(',', $resetMethod['plan_ids']); $planIds = explode(',', $resetMethod['plan_ids']);
switch (true) { switch (true) {
case ($resetMethod['method'] === NULL): { case ($resetMethod['method'] === NULL): {
$resetTrafficMethod = admin_setting('reset_traffic_method', 0); $resetTrafficMethod = admin_setting('reset_traffic_method', 0);
$builder = with(clone($this->builder))->whereIn('plan_id', $planIds); $builder = with(clone ($this->builder))->whereIn('plan_id', $planIds);
switch ((int)$resetTrafficMethod) { switch ((int) $resetTrafficMethod) {
// month first day // month first day
case 0: case 0:
$this->resetByMonthFirstDay($builder); $this->resetByMonthFirstDay($builder);
break; break;
// expire day // expire day
case 1: case 1:
$this->resetByExpireDay($builder); $this->resetByExpireDay($builder);
break; break;
// no action // no action
case 2: case 2:
break; break;
// year first day // year first day
case 3: case 3:
$this->resetByYearFirstDay($builder); $this->resetByYearFirstDay($builder);
// year expire day // year expire day
case 4: case 4:
$this->resetByExpireYear($builder); $this->resetByExpireYear($builder);
}
break;
} }
break;
}
case ($resetMethod['method'] === 0): { case ($resetMethod['method'] === 0): {
$builder = with(clone($this->builder))->whereIn('plan_id', $planIds); $builder = with(clone ($this->builder))->whereIn('plan_id', $planIds);
$this->resetByMonthFirstDay($builder); $this->resetByMonthFirstDay($builder);
break; break;
} }
case ($resetMethod['method'] === 1): { case ($resetMethod['method'] === 1): {
$builder = with(clone($this->builder))->whereIn('plan_id', $planIds); $builder = with(clone ($this->builder))->whereIn('plan_id', $planIds);
$this->resetByExpireDay($builder); $this->resetByExpireDay($builder);
break; break;
} }
case ($resetMethod['method'] === 2): { case ($resetMethod['method'] === 2): {
break; break;
} }
case ($resetMethod['method'] === 3): { case ($resetMethod['method'] === 3): {
$builder = with(clone($this->builder))->whereIn('plan_id', $planIds); $builder = with(clone ($this->builder))->whereIn('plan_id', $planIds);
$this->resetByYearFirstDay($builder); $this->resetByYearFirstDay($builder);
break; break;
} }
case ($resetMethod['method'] === 4): { case ($resetMethod['method'] === 4): {
$builder = with(clone($this->builder))->whereIn('plan_id', $planIds); $builder = with(clone ($this->builder))->whereIn('plan_id', $planIds);
$this->resetByExpireYear($builder); $this->resetByExpireYear($builder);
break; break;
} }
} }
} }
} }
private function resetByExpireYear($builder):void private function resetByExpireYear($builder): void
{ {
$users = [];
foreach ($builder->get() as $item) { $users = $builder->with('plan')->get();
$expireDay = date('m-d', $item->expired_at); $usersToUpdate = [];
foreach ($users as $user) {
$expireDay = date('m-d', $user->expired_at);
$today = date('m-d'); $today = date('m-d');
if ($expireDay === $today) { if ($expireDay === $today) {
array_push($users, $item->id); $usersToUpdate[] = [
'id' => $user->id,
'transfer_enable' => $user->plan->transfer_enable
];
} }
} }
User::whereIn('id', $users)->update([
'u' => 0,
'd' => 0
]);
}
private function resetByYearFirstDay($builder):void foreach ($usersToUpdate as $userData) {
{ User::where('id', $userData['id'])->update([
if ((string)date('md') === '0101') { 'transfer_enable' => (intval($userData['transfer_enable']) * 1073741824),
$builder->update([
'u' => 0, 'u' => 0,
'd' => 0 'd' => 0
]); ]);
} }
} }
private function resetByMonthFirstDay($builder):void private function resetByYearFirstDay($builder): void
{ {
if ((string)date('d') === '01') { $users = $builder->with('plan')->get();
$builder->update([ $usersToUpdate = [];
foreach ($users as $user) {
if ((string) date('md') === '0101') {
$usersToUpdate[] = [
'id' => $user->id,
'transfer_enable' => $user->plan->transfer_enable
];
}
}
foreach ($usersToUpdate as $userData) {
User::where('id', $userData['id'])->update([
'transfer_enable' => (intval($userData['transfer_enable']) * 1073741824),
'u' => 0, 'u' => 0,
'd' => 0 'd' => 0
]); ]);
} }
} }
private function resetByExpireDay($builder):void private function resetByMonthFirstDay($builder): void
{
$users = $builder->with('plan')->get();
$usersToUpdate = [];
foreach ($users as $user) {
if ((string) date('d') === '01') {
$usersToUpdate[] = [
'id' => $user->id,
'transfer_enable' => $user->plan->transfer_enable
];
}
}
foreach ($usersToUpdate as $userData) {
User::where('id', $userData['id'])->update([
'transfer_enable' => (intval($userData['transfer_enable']) * 1073741824),
'u' => 0,
'd' => 0
]);
}
}
private function resetByExpireDay($builder): void
{ {
$lastDay = date('d', strtotime('last day of +0 months')); $lastDay = date('d', strtotime('last day of +0 months'));
$users = []; $today = date('d');
foreach ($builder->get() as $item) { $users = $builder->with('plan')->get();
$expireDay = date('d', $item->expired_at); $usersToUpdate = [];
$today = date('d');
if ($expireDay === $today) {
array_push($users, $item->id);
}
if (($today === $lastDay) && $expireDay >= $lastDay) { foreach ($users as $user) {
array_push($users, $item->id); $expireDay = date('d', $user->expired_at);
if ($expireDay === $today || ($today === $lastDay && $expireDay >= $today)) {
$usersToUpdate[] = [
'id' => $user->id,
'transfer_enable' => $user->plan->transfer_enable
];
} }
} }
User::whereIn('id', $users)->update([
'u' => 0, foreach ($usersToUpdate as $userData) {
'd' => 0 User::where('id', $userData['id'])->update([
]); 'transfer_enable' => (intval($userData['transfer_enable']) * 1073741824),
'u' => 0,
'd' => 0
]);
}
} }
} }