ResetTraffic.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. use App\Models\User;
  5. class ResetTraffic extends Command
  6. {
  7. /**
  8. * The name and signature of the console command.
  9. *
  10. * @var string
  11. */
  12. protected $signature = 'reset:traffic';
  13. /**
  14. * The console command description.
  15. *
  16. * @var string
  17. */
  18. protected $description = '流量清空';
  19. /**
  20. * Create a new command instance.
  21. *
  22. * @return void
  23. */
  24. public function __construct()
  25. {
  26. parent::__construct();
  27. }
  28. /**
  29. * Execute the console command.
  30. *
  31. * @return mixed
  32. */
  33. public function handle()
  34. {
  35. $user = User::where('expired_at', '!=', NULL);
  36. $resetTrafficMethod = (int)config('v2board.reset_traffic_method', 0);
  37. switch ($resetTrafficMethod) {
  38. // 1 a month
  39. case 0:
  40. $this->resetByMonthFirstDay($user);
  41. break;
  42. // expire day
  43. case 1:
  44. $this->resetByExpireDay($user);
  45. break;
  46. }
  47. }
  48. private function resetByMonthFirstDay(User $user):void
  49. {
  50. $user->update([
  51. 'u' => 0,
  52. 'd' => 0
  53. ]);
  54. }
  55. private function resetByExpireDay(User $user):void
  56. {
  57. $date = date('Y-m-d', time());
  58. $startAt = strtotime($date);
  59. $endAt = $startAt + 24 * 3600;
  60. $lastDay = (string)date('d', strtotime('last day of +0 months'));
  61. if ($lastDay === '29') {
  62. $endAt = $startAt + 72 * 3600;
  63. }
  64. if ($lastDay === '30') {
  65. $endAt = $startAt + 48 * 3600;
  66. }
  67. $user->where('expired_at', '>=', $startAt)
  68. ->where('expired_at', '<', $endAt)
  69. ->update([
  70. 'u' => 0,
  71. 'd' => 0
  72. ]);
  73. }
  74. }