ActivitiesStats.php 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace App\Console\Commands;
  3. use App\Modules\Activity\Models\ActivityStatistic;
  4. use App\Modules\Channel\Models\Channel;
  5. use App\Modules\Finance\Models\CommissionRate;
  6. use App\Modules\Trade\Services\OrderService;
  7. use DB;
  8. use GuzzleHttp\Client;
  9. use Illuminate\Console\Command;
  10. class ActivitiesStats extends Command
  11. {
  12. /**
  13. * The name and signature of the console command.
  14. *
  15. * @var string
  16. */
  17. protected $signature = 'generateActivitiesStats';
  18. /**
  19. * The console command description.
  20. *
  21. * @var string
  22. */
  23. protected $description = '活动数据生成';
  24. public function handle()
  25. {
  26. $activities = \DB::table('activity')
  27. ->whereIn('distribution_channel_id',[0])
  28. ->where('end_time','<=',date('Y-m-d H:i:s'))
  29. ->where('stats_created',0)
  30. ->get();
  31. foreach ($activities as $key=>$activity) {
  32. $start_time = $activity->start_time;
  33. $end_time = $activity->end_time;
  34. $channels = Channel::getAllChannels();
  35. foreach ($channels as $channel){
  36. $activity_stats = \DB::table('activity_statistic')
  37. ->where('activity_id',$activity->id)
  38. ->where('distribution_channel_id',$channel->id)
  39. ->where('daily_stats_created',1)
  40. ->first();
  41. if(!$activity_stats) {
  42. $stats = \DB::table('orders')
  43. ->where('activity_id',$activity->id)
  44. ->where('distribution_channel_id',$channel->id)
  45. ->whereBetween('created_at',[$start_time,$end_time])
  46. ->where('status','PAID')
  47. ->select(\DB::raw("sum(price) as recharge_amount,count(*) as success_order_num"))
  48. ->first();
  49. $orders_count = \DB::table('orders')
  50. ->where('distribution_channel_id',$channel->id)
  51. ->where('activity_id',$activity->id)
  52. ->whereBetween('created_at',[$start_time,$end_time])
  53. //->where('status','PAID')
  54. ->count('id');
  55. $insert = ['activity_id'=>$activity->id,'distribution_channel_id'=>$channel->id];
  56. $update = [
  57. 'recharge_amount'=>$stats->recharge_amount,
  58. 'success_order_num'=>$stats->success_order_num,
  59. 'order_num'=>$orders_count,
  60. 'promotion_stats_created'=>1,
  61. 'daily_stats_created'=>1
  62. ];
  63. if($stats->recharge_amount>0){
  64. ActivityStatistic::updateOrCreate($insert,$update);
  65. }
  66. }
  67. }
  68. \DB::table('activity')->where('id',$activity->id)->update(['stats_created'=>1]);
  69. }
  70. }
  71. static public function getUserClient()
  72. {
  73. return new Client(['base_uri' => env('AUTH_API_BASE_URI')]);
  74. }
  75. }