* @version : HUOSDK 8.0 */ namespace huo\logic\agent; use huo\model\common\CommonModel; use huo\model\data\DayAgentModel; use huolib\tool\StrUtils; class AgentDayLogic extends CommonModel { /** * @param array $param * * @return array */ protected function getWhere($param = []) { $_map = []; if (!empty($param['start_time']) && !empty($param['end_time'])) { $_map['date'] = ['between', [$param['start_time'], $param['end_time']]]; } elseif (!empty($param['start_time'])) { $_map['date'] = ['egt', $param['start_time']]; } elseif (!empty($param['end_time'])) { $_map['date'] = ['elt', $param['end_time']]; } if (!empty($param['start_time']) && !empty($param['end_time'])) { $_map['date'] = ['BETWEEN', [$param['start_time'],$param['end_time']]]; } if (!empty($param['agent_id'])) { $_map['agent_id'] = $param['agent_id']; } if (!empty($param['sub_agent_id'])) { $_map['agent_id'] = $param['sub_agent_id']; } /*暂时用不到 if (!empty($param['game_id'])) { $_map['app_id'] = $param['game_id']; } */ if (!empty($param['app_id'])) { $_map['app_id'] = $param['app_id']; } return $_map; } public function getField($agent_id) { return []; } /** * 获取列表 * * @param array $field * @param array $where * @param string $page * @param string $order * * @return array */ public function getGroupList($field = [], $where, $page = '1,10', $order = '-date') { $_map = $this->getWhere($where); $_model = new DayAgentModel(); $_count = $_model->where($_map)->group('agent_id')->count(); if (empty($_count)) { return [ 'count' => 0, 'sum' => [], 'list' => [] ]; } $_sum_field = [ 'sum(history_user_cnt)' => 'history_user_cnt', 'sum(active_cnt)' => 'active_cnt', 'sum(down_cnt)' => 'down_cnt', 'sum(real_down_cnt)' => 'real_down_cnt', 'sum(user_cnt)' => 'user_cnt', 'sum(reg_cnt)' => 'reg_cnt', 'sum(pay_user_cnt)' => 'pay_user_cnt', 'sum(first_pay_user_cnt)' => 'first_pay_user_cnt', 'sum(order_cnt)' => 'order_cnt', 'sum(fail_order_cnt)' => 'fail_order_cnt', 'sum(un_order_cnt)' => 'un_order_cnt', 'sum(reg_order_cnt)' => 'reg_order_cnt', 'sum(reg_pay_cnt)' => 'reg_pay_cnt', 'sum(sum_money)' => 'sum_money', 'sum(first_pay_money)' => 'first_pay_money', 'sum(first_pay_sum_money)' => 'first_pay_sum_money', 'sum(reg_sum_money)' => 'reg_sum_money', ]; $_sum_data = $_model ->field($_sum_field) ->where($_map) ->find(); if (is_object($_sum_data)) { $_sum_data = $_sum_data->toArray(); } $_sum = $_sum_data; $_sum['reg_pay_rate'] = StrUtils::getRate($_sum_data['reg_pay_cnt'], $_sum_data['reg_cnt']); $_sum['user_pay_rate'] = StrUtils::getRate($_sum_data['pay_user_cnt'], $_sum_data['user_cnt']); $_sum['arppu'] = StrUtils::getRate($_sum_data['sum_money'], $_sum_data['pay_user_cnt']); $_sum['arpu'] = StrUtils::getRate($_sum_data['sum_money'], $_sum_data['user_cnt']); $_field = $field; if (empty($field)) { $_field = $_sum_field; $_field['date'] = 'date'; $_field['agent_id'] = 'agent_id'; } $_order = $_model->orderFilter($order); $_datas = $_model ->with('agent') ->where($_map) ->field($_field) ->order($_order) ->group('agent_id') ->page($page) ->select(); if (is_object($_datas)) { $_datas = $_datas->toArray(); } if (empty($_datas)) { return [ 'count' => $_count, 'sum' => $_sum, 'list' => [] ]; } foreach ($_datas as $_k => $_v) { $_datas[$_k]['agent_name'] = !empty($_v['agent']) ? $_v['agent']['user_login'] : ''; $_datas[$_k]['reg_pay_rate'] = StrUtils::getRate($_v['reg_pay_cnt'], $_v['reg_cnt']); $_datas[$_k]['user_pay_rate'] = StrUtils::getRate($_v['pay_user_cnt'], $_v['user_cnt']); $_datas[$_k]['arppu'] = StrUtils::getRate($_v['sum_money'], $_v['pay_user_cnt']); $_datas[$_k]['arpu'] = StrUtils::getRate($_v['sum_money'], $_v['user_cnt']); } return [ 'count' => $_count, 'sum' => $_sum, 'list' => $_datas ]; } /** * @param string $field * @param array $where * @param string $group * @param string $order * * @return array */ public function getDataByField($field = '', $where, $group = '', $order = '+date') { $_map = $this->getWhere($where); $_da_model = new DayAgentModel(); $_order = $this->orderFilter($order); if (empty($group)) { $_rdata = $_da_model->where($_map)->order($_order)->column($field, 'date'); } else { $_rdata = $_da_model->where($_map)->group($group)->order($_order)->column($field, 'date'); } return $_rdata; } }