ServiceTimer.php 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. namespace App\Console\Commands;
  3. use App\Components\Helpers;
  4. use App\Models\Order;
  5. use Illuminate\Console\Command;
  6. use Log;
  7. class ServiceTimer extends Command
  8. {
  9. protected $signature = 'serviceTimer';
  10. protected $description = '服务计时器';
  11. public function handle(): void
  12. {
  13. $jobStartTime = microtime(true);
  14. // 扣减用户到期商品的流量
  15. $this->decGoodsTraffic();
  16. $jobEndTime = microtime(true);
  17. $jobUsedTime = round(($jobEndTime - $jobStartTime), 4);
  18. Log::info(
  19. '---【' . $this->description . '】完成---,耗时' . $jobUsedTime . '秒'
  20. );
  21. }
  22. // 扣减用户到期商品的流量
  23. private function decGoodsTraffic(): void
  24. {
  25. //获取失效的套餐
  26. foreach (
  27. Order::activePlan()->where(
  28. 'expired_at',
  29. '<=',
  30. date('Y-m-d H:i:s')
  31. )->with('user')->get() as $order
  32. ) {
  33. // 清理全部流量,重置重置日期和等级 TODO 可用流量变动日志加入至UserObserver
  34. $user = $order->user;
  35. $user->update(
  36. [
  37. 'u' => 0,
  38. 'd' => 0,
  39. 'transfer_enable' => 0,
  40. 'reset_time' => null,
  41. 'level' => 0,
  42. ]
  43. );
  44. Helpers::addUserTrafficModifyLog(
  45. $user->id,
  46. $order->id,
  47. $user->transfer_enable,
  48. 0,
  49. '[定时任务]用户所购商品到期,扣减商品对应的流量'
  50. );
  51. // 过期本订单
  52. $order->update(['is_expire' => 1]);
  53. }
  54. }
  55. }