AgentDayLogic.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. <?php
  2. /**
  3. * AgentDayLogic.php UTF-8
  4. * 渠道每日
  5. *
  6. * @date : 2018/5/19 10:26
  7. *
  8. * @license 这不是一个自由软件,未经授权不许任何使用和传播。
  9. * @author : wuyonghong <wyh@huosdk.com>
  10. * @version : HUOSDK 8.0
  11. */
  12. namespace huo\logic\agent;
  13. use huo\model\common\CommonModel;
  14. use huo\model\data\DayAgentModel;
  15. use huolib\tool\StrUtils;
  16. class AgentDayLogic extends CommonModel {
  17. /**
  18. * @param array $param
  19. *
  20. * @return array
  21. */
  22. protected function getWhere($param = []) {
  23. $_map = [];
  24. if (!empty($param['start_time']) && !empty($param['end_time'])) {
  25. $_map['date'] = ['between', [$param['start_time'], $param['end_time']]];
  26. } elseif (!empty($param['start_time'])) {
  27. $_map['date'] = ['egt', $param['start_time']];
  28. } elseif (!empty($param['end_time'])) {
  29. $_map['date'] = ['elt', $param['end_time']];
  30. }
  31. if (!empty($param['start_time']) && !empty($param['end_time'])) {
  32. $_map['date'] = ['BETWEEN', [$param['start_time'],$param['end_time']]];
  33. }
  34. if (!empty($param['agent_id'])) {
  35. $_map['agent_id'] = $param['agent_id'];
  36. }
  37. if (!empty($param['sub_agent_id'])) {
  38. $_map['agent_id'] = $param['sub_agent_id'];
  39. }
  40. /*暂时用不到
  41. if (!empty($param['game_id'])) {
  42. $_map['app_id'] = $param['game_id'];
  43. }
  44. */
  45. if (!empty($param['app_id'])) {
  46. $_map['app_id'] = $param['app_id'];
  47. }
  48. return $_map;
  49. }
  50. public function getField($agent_id) {
  51. return [];
  52. }
  53. /**
  54. * 获取列表
  55. *
  56. * @param array $field
  57. * @param array $where
  58. * @param string $page
  59. * @param string $order
  60. *
  61. * @return array
  62. */
  63. public function getGroupList($field = [], $where, $page = '1,10', $order = '-date') {
  64. $_map = $this->getWhere($where);
  65. $_model = new DayAgentModel();
  66. $_count = $_model->where($_map)->group('agent_id')->count();
  67. if (empty($_count)) {
  68. return [
  69. 'count' => 0,
  70. 'sum' => [],
  71. 'list' => []
  72. ];
  73. }
  74. $_sum_field = [
  75. 'sum(history_user_cnt)' => 'history_user_cnt',
  76. 'sum(active_cnt)' => 'active_cnt',
  77. 'sum(down_cnt)' => 'down_cnt',
  78. 'sum(real_down_cnt)' => 'real_down_cnt',
  79. 'sum(user_cnt)' => 'user_cnt',
  80. 'sum(reg_cnt)' => 'reg_cnt',
  81. 'sum(pay_user_cnt)' => 'pay_user_cnt',
  82. 'sum(first_pay_user_cnt)' => 'first_pay_user_cnt',
  83. 'sum(order_cnt)' => 'order_cnt',
  84. 'sum(fail_order_cnt)' => 'fail_order_cnt',
  85. 'sum(un_order_cnt)' => 'un_order_cnt',
  86. 'sum(reg_order_cnt)' => 'reg_order_cnt',
  87. 'sum(reg_pay_cnt)' => 'reg_pay_cnt',
  88. 'sum(sum_money)' => 'sum_money',
  89. 'sum(first_pay_money)' => 'first_pay_money',
  90. 'sum(first_pay_sum_money)' => 'first_pay_sum_money',
  91. 'sum(reg_sum_money)' => 'reg_sum_money',
  92. ];
  93. $_sum_data = $_model
  94. ->field($_sum_field)
  95. ->where($_map)
  96. ->find();
  97. if (is_object($_sum_data)) {
  98. $_sum_data = $_sum_data->toArray();
  99. }
  100. $_sum = $_sum_data;
  101. $_sum['reg_pay_rate'] = StrUtils::getRate($_sum_data['reg_pay_cnt'], $_sum_data['reg_cnt']);
  102. $_sum['user_pay_rate'] = StrUtils::getRate($_sum_data['pay_user_cnt'], $_sum_data['user_cnt']);
  103. $_sum['arppu'] = StrUtils::getRate($_sum_data['sum_money'], $_sum_data['pay_user_cnt']);
  104. $_sum['arpu'] = StrUtils::getRate($_sum_data['sum_money'], $_sum_data['user_cnt']);
  105. $_field = $field;
  106. if (empty($field)) {
  107. $_field = $_sum_field;
  108. $_field['date'] = 'date';
  109. $_field['agent_id'] = 'agent_id';
  110. }
  111. $_order = $_model->orderFilter($order);
  112. $_datas = $_model
  113. ->with('agent')
  114. ->where($_map)
  115. ->field($_field)
  116. ->order($_order)
  117. ->group('agent_id')
  118. ->page($page)
  119. ->select();
  120. if (is_object($_datas)) {
  121. $_datas = $_datas->toArray();
  122. }
  123. if (empty($_datas)) {
  124. return [
  125. 'count' => $_count,
  126. 'sum' => $_sum,
  127. 'list' => []
  128. ];
  129. }
  130. foreach ($_datas as $_k => $_v) {
  131. $_datas[$_k]['agent_name'] = !empty($_v['agent']) ? $_v['agent']['user_login'] : '';
  132. $_datas[$_k]['reg_pay_rate'] = StrUtils::getRate($_v['reg_pay_cnt'], $_v['reg_cnt']);
  133. $_datas[$_k]['user_pay_rate'] = StrUtils::getRate($_v['pay_user_cnt'], $_v['user_cnt']);
  134. $_datas[$_k]['arppu'] = StrUtils::getRate($_v['sum_money'], $_v['pay_user_cnt']);
  135. $_datas[$_k]['arpu'] = StrUtils::getRate($_v['sum_money'], $_v['user_cnt']);
  136. }
  137. return [
  138. 'count' => $_count,
  139. 'sum' => $_sum,
  140. 'list' => $_datas
  141. ];
  142. }
  143. /**
  144. * @param string $field
  145. * @param array $where
  146. * @param string $group
  147. * @param string $order
  148. *
  149. * @return array
  150. */
  151. public function getDataByField($field = '', $where, $group = '', $order = '+date') {
  152. $_map = $this->getWhere($where);
  153. $_da_model = new DayAgentModel();
  154. $_order = $this->orderFilter($order);
  155. if (empty($group)) {
  156. $_rdata = $_da_model->where($_map)->order($_order)->column($field, 'date');
  157. } else {
  158. $_rdata = $_da_model->where($_map)->group($group)->order($_order)->column($field, 'date');
  159. }
  160. return $_rdata;
  161. }
  162. }