* @version : HUOSDK-MP */ namespace huomp\logic\data; 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\user\UserModel; use huolib\constant\AgentConst; use huolib\constant\CommonConst; class RetainedLogic extends CommonModel { private $base_field = [ 'date', 'reg_cnt', 'day2', 'day3', 'day4', 'day5', 'day6', 'day7', 'day15', 'day30', ]; private $sum_field = [ 'date' => 'date', 'sum(reg_cnt)' => 'reg_cnt', 'sum(day2)' => 'day2', 'sum(day3)' => 'day3', 'sum(day4)' => 'day4', 'sum(day5)' => 'day5', 'sum(day6)' => 'day6', 'sum(day7)' => 'day7', 'sum(day15)' => 'day15', 'sum(day30)' => 'day30', ]; private $pay_base_field = [ 'date', 'reg_cnt', 'reg_pay_cnt', 'pay_day2', 'pay_day3', 'pay_day4', 'pay_day5', 'pay_day6', 'pay_day7', 'pay_day15', 'pay_day30', ]; private $pay_sum_field = [ 'date' => 'date', 'sum(reg_cnt)' => 'reg_cnt', 'sum(reg_pay_cnt)' => 'reg_pay_cnt', 'sum(pay_day2)' => 'pay_day2', 'sum(pay_day3)' => 'pay_day3', 'sum(pay_day4)' => 'pay_day4', 'sum(pay_day5)' => 'pay_day5', 'sum(pay_day6)' => 'pay_day6', 'sum(pay_day7)' => 'pay_day7', 'sum(pay_day15)' => 'pay_day15', 'sum(pay_day30)' => 'pay_day30', ]; /** * @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']]; } $_agent_model = new UserModel(); if (!empty($param['cp_id'])) { $_ids = $_agent_model->getIdsByCpId( $param['cp_id'], ['in', [AgentConst::AGENT_ROLE_MP_AGENT, AgentConst::AGENT_ROLE_MP_AD]] ); if (empty($_ids)) { $_ids = [-1]; } $_map['agent_id'] = ['in', $_ids]; } if (!empty($param['agent_level_1_id'])) { $_agent_map = [ 'role_id' => ['in', [AgentConst::AGENT_ROLE_MP_AGENT, AgentConst::AGENT_ROLE_MP_AD]] ]; $_ids = $_agent_model->getIdsByParentId($param['agent_level_1_id'], $_agent_map); $_ids[] = $param['agent_level_1_id']; $_map['agent_id'] = ['in', $_ids]; } if (!empty($param['agent_level_2_id'])) { $_map['agent_id'] = $param['agent_level_2_id']; } 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']; } /* Modified by wuyonghong BEGIN 2020/10/7 ISSUES:13308 小游戏后台cp功能开发 */ $_class = '\\huosdk\\auth\\controller\\Auth'; if (class_exists($_class)) { $_map = (new $_class())->getAgentIdBySearch( get_val($_map, 'agent_id', 0), $_map, cmf_get_current_admin_id() ); $_map = (new $_class())->getAppIdBySearch(get_val($_map, 'app_id', 0), $_map, cmf_get_current_admin_id()); } /* END 2020/10/7 ISSUES:13308 */ return $_map; } /** * @param array $where * * @return DayAgentModel|DayGameAgentModel|DayGameModel|DayModel|null|\think\Model */ public function getDataModel($where) { if (!empty($where['agent_id']) && !empty($where['app_id'])) { return new DayGameAgentModel(); } elseif (!empty($where['agent_id'])) { return new DayAgentModel(); } elseif (!empty($where['app_id'])) { return new DayGameModel(); } else { return new DayModel(); } } /** * 获取字段 * * @param $where * * @param int $is_summary * * @return array */ public function getField($where, $is_summary = 0) { if (CommonConst::STATUS_YES == $is_summary) { $_field = $this->sum_field; $_field['date'] = 'date'; } else { $_field = $this->base_field; } if (!empty($where['agent_id']) && !empty($where['app_id'])) { $_field['agent_id'] = 'agent_id'; $_field['app_id'] = 'app_id'; } elseif (!empty($where['agent_id'])) { $_field['agent_id'] = 'agent_id'; } elseif (!empty($where['app_id'])) { $_field['app_id'] = 'app_id'; } return $_field; } /** * 获取字段 * * @param $where * * @param int $is_summary * * @return array */ public function getPayField($where, $is_summary = 0) { if (CommonConst::STATUS_YES == $is_summary) { $_field = $this->pay_sum_field; $_field['date'] = 'date'; } else { $_field = $this->pay_base_field; } if (!empty($where['agent_id']) && !empty($where['app_id'])) { $_field['agent_id'] = 'agent_id'; $_field['app_id'] = 'app_id'; } elseif (!empty($where['agent_id'])) { $_field['agent_id'] = 'agent_id'; } elseif (!empty($where['app_id'])) { $_field['app_id'] = 'app_id'; } return $_field; } /** * 获取字段 * * @param $where * * @return array */ public function getSumField($where) { $_field = $this->sum_field; if (!empty($where['agent_id']) && !empty($where['app_id'])) { $_field['agent_id'] = 'agent_id'; $_field['app_id'] = 'app_id'; } elseif (!empty($where['agent_id'])) { $_field['agent_id'] = 'agent_id'; } elseif (!empty($where['app_id'])) { $_field['app_id'] = 'app_id'; } return $_field; } /** * 获取字段 * * @param $where * * @return array */ public function getPaySumField($where) { $_field = $this->pay_sum_field; if (!empty($where['agent_id']) && !empty($where['app_id'])) { $_field['agent_id'] = 'agent_id'; $_field['app_id'] = 'app_id'; } elseif (!empty($where['agent_id'])) { $_field['agent_id'] = 'agent_id'; } elseif (!empty($where['app_id'])) { $_field['app_id'] = 'app_id'; } return $_field; } /** * 获取with * * @param $where * * @return string */ public function getWith($where) { $_with = ''; if (!empty($where['agent_id']) && !empty($where['app_id'])) { $_with = 'agent,game'; } elseif (!empty($where['agent_id'])) { $_with = 'agent'; $_field['agent_id'] = 'agent_id'; } elseif (!empty($where['app_id'])) { $_with = 'game'; } return $_with; } /** * 获取列表底层函数 * * @param array $where 搜索条件 * @param string $page 列表个数 * @param string $order 排序 * @param array $field 附加字段 * @param string $group 归类 * @param string $with * * @return array ['count'=>0,'list'=>[]] */ public function getList($where = [], $page = '1,10', $order = '-date', $field = [], $group = '', $with = '') { $_map = $where; $_field = $field; $_model = $this->getDataModel($_map); if (!empty($group)) { $_count = $_model->where($_map)->group($group)->count(); } else { $_count = $_model->where($_map)->count(); } if (empty($_count)) { return [ 'count' => 0, 'list' => [] ]; } $_order = $this->orderFilter($order); if (!empty($group)) { $_datas = $_model->with($with) ->field($_field) ->where($_map) ->order($_order) ->group($group) ->page($page) ->select(); } else { $_datas = $_model->with($with) ->field($_field) ->where($_map) ->order($_order) ->page($page) ->select(); } if (is_object($_datas)) { $_datas = $_datas->toArray(); } return [ 'count' => $_count, 'list' => $_datas ]; } /** * 获取汇总数据 * * @param $where * @param $sum_file * @param $group * * @return array */ public function getSumData($where, $sum_file, $group = '') { $_map = $this->getWhere($where); $_model = $this->getDataModel($_map); $_sum_field = $sum_file; $_sum_data = $_model ->field($_sum_field) ->where($_map) ->group($group) ->find(); if (is_object($_sum_data)) { $_sum_data = $_sum_data->toArray(); } return $_sum_data; } /** * 获取后台列表 * * @param array $where 搜索条件 * @param string $page 列表个数 * @param string $order 排序 * @param array $field 附加字段 * * @return array ['count'=>0,'list'=>[]] */ public function getAdminList($where = [], $page = '1,10', $order = '-date', $field = []) { $_map = $this->getWhere($where); $_field = $this->getField($_map); $_with = $this->getWith($where); if (!empty($field)) { $_field = array_merge($_field, $field);/* 获取后台字段 */ } $_group = ''; if (isset($where['include_agent']) && 2 == $where['include_agent'] || isset($where['is_summary']) && 2 == $where['is_summary']) { $_group = 'date'; } $_rdata = $this->getList($_map, $page, $order, $_field, $_group, $_with); if (empty($_rdata['count'])) { $_sum_data = []; foreach ($this->sum_field as $_v) { $_sum_data[$_v] = 0; } $_rdata['sum'] = $_sum_data; return $_rdata; } $_datas = $_rdata['list']; foreach ($_datas as $_k => $_v) { $_datas[$_k]['game_name'] = ''; $_datas[$_k]['game_icon'] = ''; $_datas[$_k]['classify'] = 0; if (!empty($_v['game'])) { $_datas[$_k]['game_name'] = get_val($_v['game'], 'name', ''); $_datas[$_k]['game_icon'] = get_val($_v['game'], 'icon', ''); $_datas[$_k]['classify'] = get_val($_v['game'], 'classify', ''); unset($_datas[$_k]['game']); } $_datas[$_k]['agent_nickname'] = ''; $_datas[$_k]['agent_name'] = ''; if (!empty($_v['agent'])) { $_datas[$_k]['agent_nickname'] = get_val($_v['agent'], 'user_nicename', ''); $_datas[$_k]['agent_name'] = get_val($_v['agent'], 'user_login', ''); unset($_datas[$_k]['agent']); } } $_rdata['list'] = $_datas; $_sum_filed = $this->getSumField($where); $_rdata['sum'] = $this->getSumData($where, $_sum_filed, $_group); return $_rdata; } /** * 获取后台列表 * * @param array $where 搜索条件 * @param string $page 列表个数 * @param string $order 排序 * @param array $field 附加字段 * * @return array ['count'=>0,'list'=>[]] */ public function getPayAdminList($where = [], $page = '1,10', $order = '-date', $field = []) { $_map = $this->getWhere($where); $_field = $this->getPayField($_map); $_with = $this->getWith($where); if (!empty($field)) { $_field = array_merge($_field, $field);/* 获取后台字段 */ } $_group = ''; if (isset($where['include_agent']) && 2 == $where['include_agent'] || isset($where['is_summary']) && 2 == $where['is_summary']) { $_group = 'date'; } $_rdata = $this->getList($_map, $page, $order, $_field, $_group, $_with); if (empty($_rdata['count'])) { $_sum_data = []; foreach ($this->pay_sum_field as $_v) { $_sum_data[$_v] = 0; } $_rdata['sum'] = $_sum_data; return $_rdata; } $_datas = $_rdata['list']; foreach ($_datas as $_k => $_v) { $_datas[$_k]['game_name'] = ''; $_datas[$_k]['game_icon'] = ''; $_datas[$_k]['classify'] = 0; if (!empty($_v['game'])) { $_datas[$_k]['game_name'] = get_val($_v['game'], 'name', ''); $_datas[$_k]['game_icon'] = get_val($_v['game'], 'icon', ''); $_datas[$_k]['classify'] = get_val($_v['game'], 'classify', ''); unset($_datas[$_k]['game']); } $_datas[$_k]['agent_nickname'] = ''; $_datas[$_k]['agent_name'] = ''; if (!empty($_v['agent'])) { $_datas[$_k]['agent_nickname'] = get_val($_v['agent'], 'user_nicename', ''); $_datas[$_k]['agent_name'] = get_val($_v['agent'], 'user_login', ''); unset($_datas[$_k]['agent']); } } $_rdata['list'] = $_datas; $_sum_filed = $this->getPaySumField($where); $_rdata['sum'] = $this->getSumData($where, $_sum_filed, $_group); return $_rdata; } }