* @version : HUOSDK 8.0 */ namespace huo\logic\data; use huo\logic\agent\AgentLogic; use huo\model\common\CommonModel; use huo\model\data\DayAgentModel; use huo\model\data\DayGameAgentModel; use huo\model\data\DayGameModel; use huo\model\data\DayModel; use huo\model\game\GameModel; class RankDataLogic extends CommonModel { private $sum_field = [ 'sum(user_cnt)' => 'user_cnt', 'sum(reg_device_cnt)' => 'reg_device_cnt', 'sum(reg_cnt)' => 'reg_cnt', 'sum(pay_user_cnt)' => 'pay_user_cnt', 'sum(reg_order_cnt)' => 'reg_order_cnt', 'sum(reg_pay_cnt)' => 'reg_pay_cnt', 'sum(sum_money)' => 'sum_money', 'sum(reg_sum_money)' => 'reg_sum_money', ]; /** * @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['app_id'])) { $_map['app_id'] = $param['app_id']; } if (!empty($param['agent_id'])) { if ($param['agent_id'] == -1) { $_map['agent_id'] = 0; } else { $_map['agent_id'] = $param['agent_id']; } } return $_map; } public function getDataModel($where) { if (isset($where['agent_id']) && isset($where['app_id'])) { return new DayGameAgentModel(); } elseif (isset($where['agent_id'])) { return new DayGameAgentModel(); } elseif (isset($where['app_id'])) { return new DayGameAgentModel(); } else { return new DayGameModel(); } } /** * 获取组条件 * * @param array $where * * @return string */ public function getGroup($where) { if (isset($where['agent_id']) && isset($where['app_id'])) { $_group = 'app_id,agent_id'; } elseif (isset($where['agent_id'])) { $_group = 'app_id,agent_id'; } elseif (isset($where['app_id'])) { $_group = 'app_id,agent_id'; } else { $_group = 'app_id'; } return $_group; } /** * 获取关联 * * @param $where * * @return string */ public function getWith($where) { if (isset($where['app_id']) && isset($where['agent_id'])) { $_with = 'agent,game'; } elseif (isset($where['app_id'])) { $_with = 'agent,game'; } elseif (isset($where['agent_id'])) { $_with = 'agent,game'; } else { $_with = 'game'; } return $_with; } /** * 获取关联 * * @param $where * * @return array */ public function getField($where) { $_field = $this->sum_field; if (isset($where['app_id']) && !isset($where['agent_id'])) { $_field['app_id'] = 'app_id'; $_field['agent_id'] = 'agent_id'; } elseif (isset($where['app_id'])) { $_field['agent_id'] = 'agent_id'; $_field['app_id'] = 'app_id'; } elseif (isset($where['agent_id'])) { $_field['agent_id'] = 'agent_id'; $_field['app_id'] = 'app_id'; } else { $_field['app_id'] = 'app_id'; } return $_field; } public function getAgentDataModel($where) { if (isset($where['agent_id']) && isset($where['app_id'])) { return new DayGameAgentModel(); } elseif (isset($where['agent_id'])) { return new DayGameAgentModel(); } elseif (isset($where['app_id'])) { return new DayGameAgentModel(); } else { return new DayAgentModel(); } } /** * 获取关联 * * @param $where * * @return string */ public function getAgentWith($where) { if (isset($where['app_id']) && isset($where['agent_id'])) { $_with = 'agent,agent.parent,game'; } elseif (isset($where['app_id'])) { $_with = 'agent,agent.parent,game'; } elseif (isset($where['agent_id'])) { $_with = 'agent,agent.parent,game'; } else { $_with = 'agent'; } return $_with; } /** * 获取关联 * * @param $where * * @return array */ public function getAgentField($where) { $_field = $this->sum_field; if (isset($where['app_id']) && !isset($where['agent_id'])) { $_field['app_id'] = 'app_id'; $_field['agent_id'] = 'agent_id'; } elseif (isset($where['app_id'])) { $_field['agent_id'] = 'agent_id'; $_field['app_id'] = 'app_id'; } elseif (isset($where['agent_id'])) { $_field['agent_id'] = 'agent_id'; $_field['app_id'] = 'app_id'; } else { $_field['agent_id'] = 'agent_id'; } return $_field; } /** * 获取组条件 * * @param array $where * * @return string */ public function getAgentGroup($where) { if (isset($where['agent_id']) && isset($where['app_id'])) { $_group = 'app_id,agent_id'; } elseif (isset($where['agent_id'])) { $_group = 'app_id,agent_id'; } elseif (isset($where['app_id'])) { $_group = 'app_id,agent_id'; } else { $_group = 'agent_id'; } return $_group; } /** * 游戏排行 * * @param $param * @param int $_list_rows * @param string $order * * @return \think\Paginator * @throws \think\exception\DbException */ public function game($param, $_list_rows = 10, $order = '-sum_money') { if (!empty($param['game_name'])) { $_where['name'] = ['like', "{$param['game_name']}%"]; $_app_id = (new GameModel())->getIdsByWhere($_where); $param['app_id'] = ['in', $_app_id]; } if (!empty($param['classify'])) { $_where['classify'] = ['=', "{$param['classify']}"]; $_app_id = (new GameModel())->getIdsByWhere($_where); $param['app_id'] = ['in', $_app_id]; } if (!empty($param['rank_by'])) { $order = '-'.$param['rank_by']; } if (!empty($param['agent_id'])) { if (isset($param['agent_summary'])) { $_agent_id_names = (new AgentLogic())->getIdNames($param['agent_id'], true); $_agent_ids = array_keys($_agent_id_names); $param['agent_id'] = ['in', $_agent_ids]; } } $_map = $this->getWhere($param); // $_filed = $this->sum_field; // $_filed['app_id'] = 'app_id'; // $_model = new DayGameModel(); $_model = $this->getDataModel($_map); $_group = $this->getGroup($_map); $_with = $this->getWith($_map); $_filed = $this->getField($_map); $_order = $this->orderFilter($order); $_items = $_model->with($_with) ->field($_filed) ->where($_map) ->order($_order) ->group($_group) ->paginate($_list_rows); return $_items; } public function agent($param, $_list_rows = 10, $order = '-sum_money') { if (!empty($param['game_name'])) { $_where['name'] = ['like', "{$param['game_name']}%"]; $_app_id = (new GameModel())->getIdsByWhere($_where); $param['app_id'] = ['in', $_app_id]; } if (!empty($param['classify'])) { $_where['classify'] = ['=', "{$param['classify']}"]; $_app_id = (new GameModel())->getIdsByWhere($_where); $param['app_id'] = ['in', $_app_id]; } if (!empty($param['rank_by'])) { $order = '-'.$param['rank_by']; } if (!empty($param['agent_id'])) { if (isset($param['agent_summary'])) { $_agent_id_names = (new AgentLogic())->getIdNames($param['agent_id'], true); $_agent_ids = array_keys($_agent_id_names); $param['agent_id'] = ['in', $_agent_ids]; } } $_map = $this->getWhere($param); // $_filed = $this->sum_field; // $_filed['agent_id'] = 'agent_id'; // $_model = new DayAgentModel(); $_model = $this->getAgentDataModel($_map); $_group = $this->getAgentGroup($_map); $_with = $this->getAgentWith($_map); $_filed = $this->getAgentField($_map); $_order = $this->orderFilter($order); $_items = $_model->with($_with) ->field($_filed) ->where($_map) ->order($_order) ->group($_group) ->paginate($_list_rows);; return $_items; } }