SendOrderByRegist.php 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: Hardy
  5. * Date: 2020/7/31
  6. * Time: 9:52
  7. */
  8. namespace App\Modules\SendOrder\Models;
  9. use Illuminate\Database\Eloquent\Model;
  10. use Illuminate\Support\Facades\DB;
  11. class SendOrderByRegist extends Model
  12. {
  13. protected $table = 'send_orders_by_regist';
  14. protected $fillable = [
  15. 'id',
  16. //send_orders.'send_time',//实际发送时间
  17. 'send_order_id',//渠道ID
  18. //send_orders.'book_id',//推广书籍ID
  19. //send_orders.'book_name',//推广图书名称
  20. //send_orders.'is_enable',
  21. //send_orders_stats.register_user_num
  22. //send_orders_stats.uv
  23. //send_orders_stats.force_user_num
  24. //send_orders.cost
  25. 'first_pay_count',//首充用户数
  26. 'first_pay_amount',//首充总额
  27. 'success_user_count',//付费人数
  28. 'success_order_count',//付费次数
  29. 'total_amount',//充值总额
  30. 'hour_24',//24小时充值金额
  31. 'hour_24_first_count',//24小时首充用户数
  32. 'hour_24_not_first_count',//24小时非首充用户数
  33. 'day_3',//3天充值金额
  34. 'day_3_first_count',//3天首充用户数
  35. 'day_3_not_first_count',//3天非首充用户数
  36. //'day_3_rate',//3天复充率 = day_3_first_count/day_3_not_first_count
  37. 'day_7',//7天充值金额
  38. 'day_7_first_count',//7天首充用户数
  39. 'day_7_not_first_count',//7天非首充用户数
  40. 'created_at',
  41. 'updated_at',
  42. ];
  43. function search($params, $isAll = false)
  44. {
  45. $fields = ['*'];
  46. $search_object = self::select($fields);
  47. if (isset($params['send_order_id']) && $params['send_order_id']) {
  48. $search_object->where('send_order_id', $params['send_order_id']);
  49. }
  50. if (isset($params['start_time']) && $params['start_time']) {
  51. $search_object->where('send_time', '>=', $params['start_time']);
  52. }
  53. if (isset($params['end_time']) && $params['end_time']) {
  54. $search_object->where('send_time', '<=', $params['end_time']);
  55. }
  56. if ($isAll) {
  57. return $search_object->get();
  58. } else {
  59. return $search_object->paginate();
  60. }
  61. }
  62. function getSendOrderIdFromOrigin($start, $end)
  63. {
  64. $result = DB::Table('orders')->join('users', 'orders.uid', 'users.id')
  65. ->where('orders.created_at', '>=', $start)
  66. ->where('orders.created_at', '<', $end)
  67. ->where('orders.status', '=', 'paid')
  68. ->where('users.send_order_id', '>', 0)
  69. ->select(DB::raw('distinct(users.send_order_id)'))
  70. ->get();
  71. return $result ? $result->toArray() : [];
  72. }
  73. /**
  74. * 删除记录
  75. * @param $ids
  76. */
  77. function deleteRecs($ids=[])
  78. {
  79. if(count($ids)<1)
  80. return;
  81. $idstr = collect($ids)->implode('send_order_id', ',');
  82. $result = self::whereIn('send_order_id', $ids)
  83. ->delete();
  84. }
  85. /**
  86. * @param $params
  87. * @param bool $isAll
  88. * @return mixed
  89. */
  90. function getSendOrderByRegistList($params, $isAll = false)
  91. {
  92. $fields = ["send_orders.id", "send_orders.distribution_channel_id", "distribution_channels.nickname",
  93. "send_orders.send_time", "send_orders.book_id", "send_orders.book_name", "send_orders_stats.register_user_num",
  94. "send_orders_stats.uv", "send_orders_stats.force_user_num", "send_orders.cost",
  95. "send_orders_by_regist.success_user_count", "send_orders_by_regist.success_order_count",
  96. "send_orders_by_regist.total_amount", "send_orders_by_regist.first_pay_count", "send_orders_by_regist.first_pay_amount",
  97. "send_orders_by_regist.hour_24", "send_orders_by_regist.hour_24_first_count", "send_orders_by_regist.hour_24_not_first_count",
  98. "send_orders_by_regist.day_3", "send_orders_by_regist.day_3_first_count", "send_orders_by_regist.day_3_not_first_count",
  99. "send_orders_by_regist.day_7", "send_orders_by_regist.day_7_first_count", "send_orders_by_regist.day_7_not_first_count"];
  100. $search_object = self::join('send_orders', 'send_orders.id', 'send_orders_by_regist.send_order_id')
  101. ->join('send_orders_stats', 'send_orders.id', 'send_orders_stats.send_order_id')
  102. ->join('distribution_channels', 'send_orders.distribution_channel_id', 'distribution_channels.id')
  103. ->where('send_orders_by_regist.first_pay_count', '>', 0)
  104. ->select($fields);
  105. if (isset($params['send_order_id']) && $params['send_order_id']) {
  106. $search_object->where('send_orders.id', $params['send_order_id']);
  107. }
  108. if (isset($params['start_time']) && $params['start_time']) {
  109. $search_object->where('send_orders.send_time', '>=', $params['start_time']);
  110. }
  111. if (isset($params['end_time']) && $params['end_time']) {
  112. $search_object->where('send_orders.send_time', '<=', $params['end_time']);
  113. }
  114. if (isset($params['company_name']) && $params['company_name']) {
  115. $search_object->where('distribution_channels.nickname', '=', $params['company_name']);
  116. }
  117. if (isset($params['book_id']) && $params['book_id']) {
  118. $search_object->where('send_orders.book_id', '=', $params['book_id']);
  119. }
  120. if (isset($params['book_name']) && $params['book_name']) {
  121. $search_object->where('send_orders.book_name', '=', $params['book_name']);
  122. }
  123. if (isset($params['uv_min']) && $params['uv_min']) {
  124. $search_object->where('send_orders.uv', '>=', $params['uv_min']);
  125. }
  126. if (isset($params['uv_max']) && $params['uv_max']) {
  127. $search_object->where('send_orders.uv', '<=', $params['uv_max']);
  128. }
  129. if ($isAll) {
  130. return $search_object->get();
  131. } else {
  132. return $search_object->paginate();
  133. }
  134. }
  135. }