upgradeUserResetTime.php 1.9 KB

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