upgradeUserResetTime.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. <?php
  2. namespace App\Console\Commands;
  3. use App\Models\User;
  4. use Illuminate\Console\Command;
  5. use Log;
  6. class upgradeUserResetTime extends Command
  7. {
  8. protected $signature = 'upgradeUserResetTime';
  9. protected $description = '升级用户重置日期';
  10. public function handle(): void
  11. {
  12. Log::info('----------------------------【升级用户重置日期】开始----------------------------');
  13. foreach (User::all() as $user) {
  14. $reset_time = null;
  15. if ($user->traffic_reset_day) {
  16. $today = date('d'); // 今天 日期
  17. $last_day = date('t'); //本月最后一天
  18. $next_last_day = date('t', strtotime('+1 month')); //下个月最后一天
  19. $resetDay = $user->traffic_reset_day; // 用户原本的重置日期
  20. // 案例:31 29,重置日 大于 本月最后一天
  21. if ($resetDay > $last_day) {
  22. //往后推一个月
  23. $resetDay -= $last_day;
  24. $reset_time = date('Y-m-'.$resetDay, strtotime('+1 month'));
  25. //案例:20<30<31
  26. } elseif ($resetDay < $last_day && $resetDay > $today) {
  27. $reset_time = date('Y-m-'.$resetDay);
  28. // 本日为重置日
  29. } elseif ($resetDay === $today) {
  30. $reset_time = date('Y-m-d', strtotime('+1 month'));
  31. //本月已经重置过了
  32. } elseif ($resetDay < $today) {
  33. //类似第一种情况,向后推一月
  34. if ($resetDay > $next_last_day) {
  35. $resetDay -= $next_last_day;
  36. $reset_time = date('Y-m-'.$resetDay, strtotime('+1 month'));
  37. } else {
  38. $reset_time = date('Y-m-'.$resetDay, strtotime('+1 month'));
  39. }
  40. }
  41. // 用户账号有效期大于重置日期
  42. if ($reset_time > $user->expired_at) {
  43. $reset_time = null;
  44. }
  45. $user->update(['reset_time' => $reset_time]);
  46. }
  47. Log::info('---用户[ID:'.$user->id.' - '.$user->username.' ('.$user->email.')]的新重置日期为'.($reset_time !== null ? '【'.$reset_time.'】' : '【无】').'---');
  48. }
  49. Log::info('----------------------------【升级用户重置日期】结束----------------------------');
  50. }
  51. }