GenerateOrderStat.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: songdb
  5. * Date: 2017/12/26
  6. * Time: 下午5:26
  7. */
  8. namespace App\Console\Commands\Trade;
  9. use App\Modules\Trade\Models\OrderStat;
  10. use App\Modules\Trade\Services\OrderStatService;
  11. use App\Modules\Channel\Services\ChannelService;
  12. use Log;
  13. use DB;
  14. use Illuminate\Console\Command;
  15. class GenerateOrderStat extends Command
  16. {
  17. /**
  18. * 执行命令 php artisan generate_order_stat
  19. *
  20. * The name and signature of the console command.
  21. *
  22. * @var string
  23. */
  24. protected $signature = 'generate_order_stat';
  25. /**
  26. * The console command description.
  27. *
  28. * @var string
  29. */
  30. protected $description = '渠道订单统计数据生成';
  31. /**
  32. * Execute the console command.
  33. *
  34. * @return mixed
  35. */
  36. public function handle()
  37. {
  38. print_r("======渠道订单统计数据生成 【任务执行开始】=====".date("y-m-d H:i:s"."\n"));
  39. Log::info("======渠道订单统计数据生成 【任务执行开始】=====".date("y-m-d H:i:s"."\n"));
  40. $channels = ChannelService::getAllChannels();
  41. $date = date('Y-m-d',strtotime('-1 day'));
  42. if(count($channels))
  43. {
  44. $channels->each(function($channel) use($date){
  45. OrderStatService::add($channel->id, $date);
  46. try{
  47. $this->GenerateSeasonOrderStat($channel->id, $date);
  48. }catch (\Exception $e){
  49. }
  50. });
  51. }
  52. Log::info("======渠道订单统计数据生成 【任务执行结束】=====".date("y-m-d H:i:s"."\n"));
  53. print_r("======渠道订单统计数据生成 【任务执行结束】=====".date("y-m-d H:i:s"."\n"));
  54. }
  55. public function GenerateSeasonOrderStat($distribution_channel_id,$date){
  56. $result = OrderStat::where('distribution_channel_id',$distribution_channel_id)->first();
  57. if(!$result) return ;
  58. //Or
  59. $sql_format = "SELECT `status`,count(*) as num,sum(price) as amount FROM orders WHERE distribution_channel_id = %s and created_at >= '%s' and created_at <='%s' and order_type = 'QUARTER' GROUP BY `status`";
  60. $sql = sprintf($sql_format,$distribution_channel_id,$date,$date.' 23:59:59');
  61. $season_result = DB::select($sql);
  62. $amount = 0;
  63. $paid_num = 0;
  64. $unpaid_num = 0;
  65. if($season_result){
  66. foreach ($season_result as $item){
  67. if($item->status == 'PAID'){
  68. $paid_num = $item->num;
  69. $amount = $item->amount;
  70. }
  71. if($item->status == 'UNPAID'){
  72. $unpaid_num = $item->num;
  73. }
  74. }
  75. }
  76. $result->yesterday_season_recharge_amount = $amount;
  77. $result->yesterday_season_recharge_paid_num = $paid_num;
  78. $result->yesterday_season_recharge_unpaid_num = $unpaid_num;
  79. if(date('d',strtotime($date)) == '01'){
  80. $result->last_month_season_recharge_amount = $result->current_month_season_recharge_amount;
  81. $result->last_month_season_recharge_paid_num = $result->current_month_season_recharge_paid_num;
  82. $result->last_month_season_recharge_unpaid_num = $result->current_month_season_recharge_unpaid_mum;
  83. $result->current_month_season_recharge_amount = $amount;
  84. $result->current_month_season_recharge_paid_num = $paid_num;
  85. $result->current_month_season_recharge_unpaid_num = $unpaid_num;
  86. }else{
  87. $result->current_month_season_recharge_amount += $amount;
  88. $result->current_month_season_recharge_paid_num += $paid_num;
  89. $result->current_month_season_recharge_unpaid_num += $unpaid_num;
  90. }
  91. $result->save();
  92. }
  93. }