upgradeUserResetTime.php 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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. }
  50. Log::info('----------------------------【升级用户重置日期】结束----------------------------');
  51. }
  52. }