upgradeUserResetTime.php 2.1 KB

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