packExpiredCheck.php 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. <?php
  2. namespace App\Console\Commands;
  3. use App\Models\Order;
  4. use App\Models\OrderPack;
  5. use Illuminate\Console\Command;
  6. class packExpiredCheck extends Command
  7. {
  8. /**
  9. * The name and signature of the console command.
  10. *
  11. * @var string
  12. */
  13. protected $signature = 'packExpiredCheck';
  14. /**
  15. * The console command description.
  16. *
  17. * @var string
  18. */
  19. protected $description = '服务包过期检测,定时任务1个小时跑一次';
  20. /**
  21. * Create a new command instance.
  22. *
  23. * @return void
  24. */
  25. public function __construct()
  26. {
  27. parent::__construct();
  28. }
  29. /**
  30. * Execute the console command.
  31. *
  32. * @return mixed
  33. */
  34. public function handle()
  35. {
  36. $hour = date('H');
  37. if ($hour == 12) {
  38. //还差3天过期
  39. $this->checkPackExpire(1);
  40. //还差1天过期
  41. $this->checkPackExpire(2);
  42. }
  43. //已经过期了
  44. $this->checkPackExpire(3);
  45. return true;
  46. }
  47. private function checkPackExpire($expire_type)
  48. {
  49. $end_time = strtotime('+3 days');
  50. $send_type = 8;
  51. $expire_type_arr = [1];
  52. $expire_type_new = 2;
  53. if ($expire_type == 2) {
  54. $end_time = strtotime('+1 days');
  55. $expire_type_arr = [1,2];
  56. $expire_type_new = 3;
  57. }
  58. if ($expire_type == 3) {
  59. $end_time = time();
  60. $send_type = 9;
  61. $expire_type_arr = [1,2,3];
  62. $expire_type_new = 4;
  63. }
  64. $orderPack = OrderPack::with(['user'])->join('orders', 'order_packs.order_id', '=', 'orders.id')->select(['order_packs.id', 'order_packs.order_id', 'order_packs.user_id', 'order_packs.pack_name', 'order_packs.start_time', 'order_packs.end_time'])->whereIn('order_packs.expire_type', $expire_type_arr)->where('order_packs.end_time', '<', $end_time)->where('orders.payment_status', 2)->get()->toArray();
  65. if (!empty($orderPack)) {
  66. foreach ($orderPack as $k => $v) {
  67. //更新订单服务包过期类型
  68. OrderPack::where('id', $v['id'])->update(['expire_type' => $expire_type_new]);
  69. //更新订单状态
  70. if ($expire_type_new == 4) {
  71. Order::where('id', $v['order_id'])->update(['order_status' => 4]);
  72. }
  73. //发送微信消息
  74. $official_arr = [$v['user']['openid'], $v['pack_name'], date('Y-m-d H:i:s', $v['start_time']), date('Y-m-d H:i:s', $v['end_time'])];
  75. $service_time = date('Y/m/d', $v['start_time']). ' - '. date('Y/m/d', $v['end_time']);
  76. $subscribe_arr = [$v['user']['openid'], $v['pack_name'], $service_time, $v['user']['nickname']];
  77. send_wechat_message($send_type, $official_arr, $subscribe_arr);
  78. }
  79. }
  80. return true;
  81. }
  82. }