SendOrderForceDayStat.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: hp
  5. * Date: 2017/11/23
  6. * Time: 19:36
  7. */
  8. namespace App\Modules\SendOrder\Models;
  9. use DB;
  10. use Illuminate\Database\Eloquent\Model;
  11. class SendOrderForceDayStat extends Model
  12. {
  13. protected $table = 'send_orders_force_day_stats';
  14. protected $fillable = ['send_order_id', 'book_name', 'bid', 'recharge_amount', 'total_uv', 'date', 'total_pv', 'uv', 'pv', 'paid_num', 'unpaid_num', 'distribution_channel_id', 'recharge_amount_in_half_day',
  15. 'recharge_amount_in_two_weeks', 'send_time', 'cost', 'year_recharge_user_num', 'ticket_recharge_user_num', 'first_recharge_amount', 'first_recharge_user_num',
  16. 'year_paid_num', 'year_unpaid_num', 'pay_user_num', 'force_user_num', 'register_user_num', 'distribution_channel_name', 'name', 'charge_type','create_time','recharge_amount_in_one_day','recharge_amount_in_three_days'];
  17. static function addDayStat($send_order_id, $click_num, $register_user_num, $recharge_amount, $pay_user_num)
  18. {
  19. $preDate = date("Y-m-d H:i:s", strtotime("-1 day"));
  20. self::create(['send_order_id' => $send_order_id, 'click_num' => $click_num, 'register_user_num' => $register_user_num, 'recharge_amount' => $recharge_amount, 'pay_user_num' => $pay_user_num, 'date' => $preDate]);
  21. }
  22. //按书统计
  23. static function getSendOrderDayStatsByBook($params = [])
  24. {
  25. $begin_time = isset($params['begin_time']) ? $params['begin_time'] : date('Y-m-d',strtotime('-1 month'));
  26. $end_time = isset($params['end_time']) ? $params['end_time'] : date('Y-m-d');
  27. $gender = isset($params['gender']) ? $params['gender']:'';
  28. $gender_filter = '';
  29. if(in_array($gender,[1,2,'1','2'])){
  30. $gender_filter = " and book_categories.pid=".$gender;
  31. }
  32. // $sql = " select t.*,count(send_orders.id) send_order_num from ( select bid,
  33. // book_name,book_categories.pid,sum(recharge_amount) as sum_recharge_amount,sum(uv) sum_uv,
  34. // sum(pv) sum_pv,sum(paid_num) sum_paid_num,
  35. // sum(unpaid_num) sum_unpaid_num,sum(register_user_num) sum_register_user_num
  36. // from send_orders_force_day_stats force index(date_bid)
  37. // inner join books on books.id=send_orders_force_day_stats.bid
  38. // INNER JOIN book_categories ON book_categories.id=books.category_id
  39. // where total_uv > 20 and date >='{$begin_time}' and date <= '{$end_time}' $gender_filter group by bid ) as t,send_orders
  40. // where send_orders.book_id = t.bid and send_time >='{$begin_time}' and send_time <= '{$end_time} 23:59:59' group by t.bid order by t.sum_recharge_amount desc";
  41. $sql = " select bid,
  42. book_name,book_categories.pid,sum(recharge_amount) as sum_recharge_amount,sum(uv) sum_uv,
  43. sum(pv) sum_pv,sum(paid_num) sum_paid_num,
  44. sum(unpaid_num) sum_unpaid_num,sum(register_user_num) sum_register_user_num,
  45. (select count(1) from send_orders where book_id = bid and send_time >='{$begin_time}' and send_time <= '{$end_time} 23:59:59') send_order_num
  46. from send_orders_force_day_stats force index(date_bid)
  47. inner join books on books.id=send_orders_force_day_stats.bid
  48. INNER JOIN book_categories ON book_categories.id=books.category_id
  49. where total_uv > 20 and date >='{$begin_time}' and date <= '{$end_time}' $gender_filter group by bid order by sum_recharge_amount desc";
  50. return DB::select($sql);
  51. }
  52. //生成按书统计统计数据
  53. static function generateForceDayStat($data)
  54. {
  55. $conditions = [
  56. 'send_order_id' => $data['send_order_id'],
  57. 'date' => $data['date'],
  58. ];
  59. unset($data['send_order_id']);
  60. unset($data['date']);
  61. return self::updateOrCreate($conditions, $data);
  62. }
  63. /**
  64. * 获取管理后台派单信息
  65. * @param $params 参数列表
  66. * @param $isAll 是否获取所有
  67. * @return mixed
  68. */
  69. static function getHistorySendOrders($params = [], $is_all = false)
  70. {
  71. $search_object = self::select([DB::raw("send_order_id,book_name, created_at,updated_at,create_time,bid, sum(recharge_amount) recharge_amount,total_uv, date, total_pv,sum(uv) uv, sum(pv) pv, sum(paid_num) paid_num, sum(unpaid_num) unpaid_num,distribution_channel_id, sum(recharge_amount_in_half_day) recharge_amount_in_half_day,sum(recharge_amount_in_two_weeks)recharge_amount_in_two_weeks, send_time, sum(cost) cost, sum(year_recharge_user_num) year_recharge_user_num,sum(ticket_recharge_user_num) ticket_recharge_user_num, sum(first_recharge_amount) first_recharge_amount, sum(first_recharge_user_num) first_recharge_user_num,sum(year_paid_num) year_paid_num, sum(year_unpaid_num) year_unpaid_num, sum(pay_user_num) pay_user_num, sum(force_user_num) force_user_num, sum(register_user_num)register_user_num,distribution_channel_name, name, charge_type")])->groupBy('send_order_id')->orderBy('send_orders_force_day_stats.date', 'desc');
  72. if (isset($params['id']) && $params['id']) $search_object->where('send_order_id', $params['id']);
  73. if (isset($params['book_id']) && $params['book_id']) $search_object->where('book_id', $params['book_id']);
  74. if (isset($params['name']) && $params['name']) $search_object->where('name', 'like', '%' . $params['name'] . '%');
  75. if (isset($params['book_name']) && $params['book_name']) $search_object->where('book_name', $params['book_name']);
  76. if (isset($params['start_time']) && $params['start_time']) $search_object->where('send_orders_force_day_stats.created_at', '>=', $params['start_time']);
  77. if (isset($params['end_time']) && $params['end_time']) $search_object->where('send_orders_force_day_stats.created_at', '<=', $params['end_time'] . ' 23:59:59');
  78. if (isset($params['distribution_channel_id']) && $params['distribution_channel_id']) $search_object->where('distribution_channel_id', $params['distribution_channel_id']);
  79. //判断内外部派单
  80. if (isset($params['order_status']) && $params['order_status']) {
  81. if (1 == $params['order_status']) {
  82. $search_object->where('force_user_num', '<', 20);
  83. } elseif (2 == $params['order_status']) {
  84. $search_object->where('force_user_num', '>=', 20);
  85. }
  86. }
  87. if (isset($params['orderBy']) && $params['orderBy']) {
  88. $orderColum = 'date'; //排序的列
  89. $orderByType = 'desc'; //排序的类型(升序还是降序)
  90. if (isset($params['orderByType']) && $params['orderByType']) {
  91. if (2 == $params['orderByType']) {
  92. $orderByType = 'asc';
  93. }
  94. }
  95. //12小时充值
  96. if (1 == $params['orderBy']) {
  97. $orderColum = 'recharge_amount_in_half_day';
  98. //7天充值充值
  99. } elseif (2 == $params['orderBy']) {
  100. $orderColum = 'recharge_amount_in_two_weeks';
  101. //充值总额
  102. } elseif (3 == $params['orderBy']) {
  103. $orderColum = 'recharge_amount';
  104. //首充总额
  105. } elseif (4 == $params['orderBy']) {
  106. $orderColum = 'first_recharge_amount';
  107. }
  108. $search_object->orderBy($orderColum, $orderByType);
  109. }
  110. if ($is_all) {
  111. return $search_object->get();
  112. } else {
  113. return $search_object->paginate();
  114. }
  115. }
  116. public static function getBookSendOrdersRechargeStats($channels) {
  117. // self::
  118. self::select(DB::raw('count(id) as send_orders_num,sum()'))
  119. ->where('date',date('Y-m-d'))
  120. ->whereIn('distribution_channel_id',$channels)
  121. ->groupBy('bid')
  122. ->get();
  123. }
  124. }