upgradeUserResetTime.php 2.0 KB

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