OrderDayStatService.php 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: hp
  5. * Date: 2017/11/21
  6. * Time: 10:42
  7. */
  8. namespace App\Modules\Trade\Services;
  9. use App\Modules\Trade\Services\OrderService;
  10. use App\Modules\OfficialAccount\Services\ForceSubscribeService;
  11. use App\Modules\SendOrder\Services\SendOrderService;
  12. use App\Modules\User\Services\UserService;
  13. use App\Modules\Trade\Models\OrderDayStat;
  14. use DB;
  15. class OrderDayStatService
  16. {
  17. //创建日统计数据
  18. //'distribution_channel_id', 'date','pay_success_user_num', 'ticket_recharge_user_num', 'year_recharge_user_num', 'total_recharge_amount','unpaid_num','paid_num','current_month_unpaid_num','promotion_total_uv','promotion_total_pv','force_user_num'
  19. static function add($distribution_channel_id, $channel_user_id, $date, $distribution_channel_name,$real_reg_num)
  20. {
  21. $data = [];
  22. $data['channel_user_id'] = $channel_user_id;
  23. $data['distribution_channel_id'] = $distribution_channel_id;
  24. $data['distribution_channel_name'] = $distribution_channel_name;
  25. $data['date'] = $date;
  26. $data['month'] = date("Y-m",strtotime($date));
  27. $data['pay_success_user_num'] = OrderService::getDayPayUserNumByChannelId($distribution_channel_id, $date);//付费总用户数
  28. $data['ticket_recharge_user_num'] = OrderService::getDayRechargePayUserNumByChannelId($distribution_channel_id, $date);//ticket_recharge_user_num
  29. $data['year_recharge_user_num'] = OrderService::getDayVipPayUserNumByChannelId($distribution_channel_id, $date);//year_recharge_user_num
  30. $end_time = date('Y-m-d H:i:s',strtotime($date) + 86400-1);
  31. $data['total_recharge_amount'] = OrderService::getAmount(['distribution_channel_id'=>$distribution_channel_id,'begin_time'=>$date,'end_time'=>$end_time]);//total_recharge_amount
  32. $order_info = OrderService::getChannelDateOrderInfo($distribution_channel_id,$date);
  33. $data['unpaid_num'] = $order_info['total_num'] - $order_info['paid_number'];
  34. $data['paid_num'] = $order_info['paid_number'];
  35. $uv_pv = SendOrderService::getChannelPromotionTotalUvPv($distribution_channel_id,$date);
  36. $data['promotion_total_uv'] = $uv_pv['uv'];
  37. $data['promotion_total_pv'] = $uv_pv['pv'];
  38. $data['force_user_num'] = ForceSubscribeService::forceSubscribeUserCountByChannelIdAndDate($distribution_channel_id,$date,'');
  39. //普通充值数据
  40. $ticket_recharge_data = OrderService::getChannelDayTicketRechargeData($distribution_channel_id, $date);
  41. $data['ticket_recharge_paid_num'] = $ticket_recharge_data['ticket_recharge_paid_num'];
  42. $data['ticket_recharge_unpaid_num'] = $ticket_recharge_data['ticket_recharge_unpaid_num'];
  43. $data['ticket_recharge_amount'] = $ticket_recharge_data['ticket_recharge_amount'];
  44. //包年充值数据
  45. $year_recharge_data = OrderService::getChannelDayYearRechargeData($distribution_channel_id, $date);
  46. $data['year_recharge_paid_num'] = $year_recharge_data['year_recharge_paid_num'];
  47. $data['year_recharge_unpaid_num'] = $year_recharge_data['year_recharge_unpaid_num'];
  48. $data['year_recharge_amount'] = $year_recharge_data['year_recharge_amount'];
  49. //派单数
  50. $data['send_order_num'] = SendOrderService::getChannelPromotionCount($distribution_channel_id, $date, $end_time);
  51. //实际派单数
  52. $data['real_send_order_num'] = SendOrderService::getChannelRealPromotionCount($distribution_channel_id, $date, $end_time);
  53. //注册用户数
  54. $data['register_user_num'] = UserService::getChannelDayTotal($distribution_channel_id,$date);
  55. //实际注册用户数
  56. $data['real_register_user_num'] = $real_reg_num;
  57. //注册用户当日充值数据
  58. $reg_user_data = DB::select("select count(distinct uid) num,sum(price) amount from orders,users where orders.distribution_channel_id = '{$distribution_channel_id}' and orders.created_at > '{$date}' and orders.created_at <= '{$end_time}' and status ='PAID' and users.id = orders.uid and users.created_at > '{$date}' and users.created_at < '{$end_time}'");
  59. $data['reg_user_first_recharge_amount'] = (float)$reg_user_data[0]->amount;
  60. $data['reg_user_first_recharge_user_num'] = (float)$reg_user_data[0]->num;
  61. //渠道方通道充值总额
  62. $not_in_pay_merchant_ids = env('not_in_pay_merchant_id');
  63. if($not_in_pay_merchant_ids)
  64. {
  65. $channel_merchant_recharge_amount = DB::select("select sum(price) amount from orders where distribution_channel_id = '{$distribution_channel_id}' and created_at > '{$date}' and created_at <= '{$end_time}' and status ='PAID' and pay_merchant_id in ({$not_in_pay_merchant_ids})");
  66. }
  67. $data['channel_merchant_recharge_amount'] = (float)$channel_merchant_recharge_amount[0]->amount;
  68. //首充数据
  69. $first_recharge_data = OrderService::getChannelDayFirstRechargeData($distribution_channel_id,$date);
  70. $data['first_recharge_user_num'] = $first_recharge_data['count'];
  71. $data['first_recharge_amount'] = $first_recharge_data['amount'];
  72. //获取前天用户充值
  73. $dayBeforeYesDay = OrderDayStat::where('distribution_channel_id',$distribution_channel_id)
  74. ->where('date',date('Y-m-d',strtotime($date.' -1 day')))
  75. ->first();
  76. //\Log::info(date('Y-m-d',strtotime($date.' -1 day')));
  77. if($dayBeforeYesDay){
  78. $dayBeforeYesDay = $dayBeforeYesDay->total_recharge_amount;
  79. $dayBeforeYesDayReal = OrderService::getAmount(['distribution_channel_id'=>$distribution_channel_id,'begin_time'=>date('Y-m-d',strtotime($date.' -1 day')),'end_time'=>date('Y-m-d',strtotime($date.' -1 day')).' 23:59:59']);
  80. $diff = $dayBeforeYesDayReal-$dayBeforeYesDay;
  81. if($diff>0){
  82. $data['total_recharge_amount'] +=$diff;
  83. \Log::info('distribution_channel_recharge_regards_as_next_day_for_order_day_stats:distribution:'.$distribution_channel_id.':date:'.$date.':diff:'.$diff);
  84. }
  85. }
  86. return OrderDayStat::add($data);
  87. }
  88. /**
  89. * 查询日统计
  90. * @param $params $distribution_channel_id
  91. */
  92. static function search($params, $is_all=false)
  93. {
  94. return OrderDayStat::search($params, $is_all);
  95. }
  96. /**
  97. * 账户级别查询日统计
  98. * @param $params $distribution_channel_id
  99. */
  100. static function accountSearch($params, $is_all=false)
  101. {
  102. return OrderDayStat::accountSearch($params, $is_all);
  103. }
  104. /**
  105. * 获取渠道汇总统计
  106. */
  107. static function getSumByChannelId($distribution_channel_id)
  108. {
  109. return OrderDayStat::getSumByChannelId($distribution_channel_id);
  110. }
  111. /**
  112. * 获取昨日渠道汇总统计
  113. */
  114. static function getYesterdaySumByChannelId($distribution_channel_id)
  115. {
  116. return OrderDayStat::getYesterdaySumByChannelId($distribution_channel_id);
  117. }
  118. /**
  119. * 获取当月渠道汇总统计
  120. */
  121. static function getCurrentMonthSumByChannelId($distribution_channel_id)
  122. {
  123. return OrderDayStat::getCurrentMonthSumByChannelId($distribution_channel_id);
  124. }
  125. /**
  126. * 获取上月渠道汇总统计
  127. */
  128. static function getLastMonthSumByChannelId($distribution_channel_id)
  129. {
  130. return OrderDayStat::getLastMonthSumByChannelId($distribution_channel_id);
  131. }
  132. /**
  133. * 根据渠道获取合计
  134. */
  135. static function getStatByChannel($params)
  136. {
  137. return OrderDayStat::getStatByChannel($params);
  138. }
  139. /**
  140. *
  141. */
  142. static function getAllGroupbyMonth()
  143. {
  144. return OrderDayStat::getAllGroupbyMonth();
  145. }
  146. static function getAllGroupbyMonthChannel($params,$is_all=false)
  147. {
  148. return OrderDayStat::getAllGroupbyMonthChannel($params,$is_all);
  149. }
  150. /**
  151. * 获取外部渠道充值数据
  152. * @param array $params
  153. * @param bool $isAll
  154. */
  155. static function getOutPayData($params = [], $isAll = false) {
  156. return OrderDayStat::getOutPayData($params, $isAll);
  157. }
  158. static function getRechargeByChannels($distribution_channels,$time_range){
  159. return OrderDayStat::getRechargeByChannels($distribution_channels,$time_range);
  160. }
  161. }