GetOrdersOverview.php 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. <?php
  2. namespace App\Console\Commands;
  3. use App\Models\Order;
  4. use App\Models\OrderOverviewModel;
  5. use App\Models\Project;
  6. use Illuminate\Console\Command;
  7. use Illuminate\Support\Facades\Log;
  8. class GetOrdersOverview extends Command
  9. {
  10. /**
  11. * The name and signature of the console command.
  12. *
  13. * @var string
  14. */
  15. protected $name = 'ordersOverview';
  16. protected $signature = 'get:orders_overview';
  17. /**
  18. * The console command description.
  19. *
  20. * @var string
  21. */
  22. protected $description = '获取每月订单总览数据';
  23. /**
  24. * Create a new command instance.
  25. *
  26. * @return void
  27. */
  28. public function __construct()
  29. {
  30. parent::__construct();
  31. }
  32. /**
  33. * Execute the console command.
  34. *
  35. * @return mixed
  36. */
  37. public function handle()
  38. {
  39. //获取每月一号的上一个月的时间
  40. $time = strtotime('-1 month');
  41. $before_date = date('Y-m-01 00:00:00',$time);
  42. $date = date('Y-m-01 00:00:00');
  43. //获取到所有的通过审核的项目id
  44. $project_ids = Project::where('active',1)->pluck('id')->toArray();
  45. foreach ($project_ids as $project_id)
  46. {
  47. $data = [
  48. 'total_price' => 0,
  49. ];
  50. //获取到项目内已完成并且更新时间在上个月的订单id的数组
  51. $order_arr = Order::where('project_id',$project_id)
  52. ->where('status',3)
  53. ->where('type',1)
  54. ->where('updated_at','>=',$before_date)
  55. ->where('updated_at','<',$date)
  56. ->get(['id','money','project_id'])->toArray();
  57. //如果订单数据为空那就添加一个空的数据条目到数据总览中
  58. if (empty($order_arr))
  59. {
  60. Log::info(Project::where('id',$project_id)->value('name').'项目'.date('Y-m',$time).'的数据总金额为空,默认写入空数据');
  61. $data['order_sn'] = Order::createOrderNumber();
  62. $data['date'] = $before_date;
  63. $data['project_id'] = $project_id;
  64. $data['status'] = 0;
  65. $data['confirmation_user_id'] = Project::where('id',$project_id)->value('user_id');
  66. $data['created_at'] = date('Y-m-d H:i:s',time());
  67. $data['updated_at'] = date('Y-m-d H:i:s',time());
  68. OrderOverviewModel::insert($data);
  69. }else
  70. {
  71. Log::info(Project::where('id',$project_id)->value('name').'项目'.date('Y-m',$time).'的数据写入');
  72. $num_arr = array_column($order_arr,'money');
  73. $total = array_sum($num_arr);
  74. $data['order_sn'] = Order::createOrderNumber();
  75. $data['date'] = $before_date;
  76. $data['project_id'] = $project_id;
  77. $data['status'] = 0;
  78. $data['confirmation_user_id'] = Project::where('id',$project_id)->value('user_id');
  79. $data['total_price'] = $total;
  80. $data['created_at'] = date('Y-m-d H:i:s',time());
  81. $data['updated_at'] = date('Y-m-d H:i:s',time());
  82. OrderOverviewModel::insert($data);
  83. }
  84. }
  85. }
  86. }