upgradeUserResetTime.php 2.1 KB

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