123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690 |
- <?php
- /**
- * SwitchDayDataLogic.php UTF-8
- * 切量每日数据
- *
- * @date : 2018/5/21 21:49
- *
- * @license 这不是一个自由软件,未经授权不许任何使用和传播。
- * @author : chenbingling <cbl@huosdk.com>
- * @version : HUOSDK 8.0
- */
- namespace huoAgentSwitch\logic;
- use huo\controller\agent\AgentCache;
- use huo\controller\finance\Income;
- use huo\controller\member\MemCache;
- use huo\controller\pay\SdkOrderCache;
- 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\log\DayMemLogModel;
- use huoAgentSwitch\model\DayAgentSwitchModel;
- use huoAgentSwitch\model\DayGameSwitchModel;
- use huoAgentSwitch\model\DaySwitchModel;
- use huoAgentSwitch\model\DgaSwitchModel;
- use huoAgentSwitch\model\DmlSwitchModel;
- use huolib\constant\OrderConst;
- use huolib\tool\StrUtils;
- class SwitchDayDataLogic extends CommonModel {
- private $base_field
- = [
- 'date' => 'date', /* 日期 */
- 'down_cnt' => 'down_cnt', /* 访问人数 */
- 'active_cnt' => 'active_cnt', /* 访问人数 */
- 'today_cnt' => 'today_cnt', /* 访问人数 */
- 'ip_cnt' => 'ip_cnt', /* 独立IP数 */
- 'user_cnt' => 'user_cnt', /* 活跃玩家数量 */
- 'reg_device_cnt' => 'reg_device_cnt', /* 新增设备 */
- 'reg_cnt' => 'reg_cnt', /* 注册玩家数 */
- 'pay_user_cnt' => 'pay_user_cnt',/* 付费玩家数 */
- 'order_cnt' => 'order_cnt', /* 成功订单数 */
- 'reg_pay_cnt' => 'reg_pay_cnt', /* 新增即付费人数 */
- 'sum_money' => 'sum_money', /* 充值金额 */
- 'reg_sum_money' => 'reg_sum_money', /* 新增即付总额 */
- ];
- private $switch_base_field
- = [
- 'date' => 'date', /* 日期 */
- 'down_cnt' => 'down_cnt', /* 访问人数 */
- 'active_cnt' => 'active_cnt', /* 访问人数 */
- 'today_cnt' => 'today_cnt', /* 访问人数 */
- 'ip_cnt' => 'ip_cnt', /* 独立IP数 */
- 'user_cnt' => 'user_cnt', /* 活跃玩家数量 */
- 'reg_device_cnt' => 'reg_device_cnt', /* 新增设备 */
- 'reg_cnt' => 'reg_cnt', /* 注册玩家数 */
- 'pay_user_cnt' => 'pay_user_cnt',/* 付费玩家数 */
- 'order_cnt' => 'order_cnt', /* 成功订单数 */
- 'reg_pay_cnt' => 'reg_pay_cnt', /* 新增即付费人数 */
- 'sum_money' => 'sum_money', /* 充值金额 */
- 'reg_sum_money' => 'reg_sum_money', /* 新增即付总额 */
- 'reg_cnt_show' => 'reg_cnt_show', /* 修改后值 */
- ];
- private $sum_field
- = [
- 'sum(down_cnt)' => 'down_cnt',
- 'sum(active_cnt)' => 'active_cnt',
- 'sum(today_cnt)' => 'today_cnt',
- 'sum(ip_cnt)' => 'ip_cnt',
- 'sum(order_cnt)' => 'order_cnt',
- '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',
- ];
- private $switch_sum_field
- = [
- 'sum(down_cnt)' => 'down_cnt',
- 'sum(active_cnt)' => 'active_cnt',
- 'sum(today_cnt)' => 'today_cnt',
- 'sum(ip_cnt)' => 'ip_cnt',
- 'sum(order_cnt)' => 'order_cnt',
- 'sum(user_cnt)' => 'user_cnt',
- 'sum(reg_device_cnt)' => 'reg_device_cnt',
- 'sum(reg_cnt)' => 'reg_cnt',
- 'sum(reg_cnt_show)' => 'reg_cnt_show',
- '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['agent_id'])) {
- $_map['agent_id'] = $param['agent_id'] == -1 ? 0 : $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;
- }
- /**
- * @param array $where
- *
- * @return DayAgentSwitchModel|DgaSwitchModel|DayGameSwitchModel|DaySwitchModel|null|\think\Model
- */
- public function getSwitchDataModel($where) {
- if (!empty($where['agent_id']) && !empty($where['app_id'])) {
- return new DgaSwitchModel();
- } elseif (!empty($where['agent_id'])) {
- return new DayAgentSwitchModel();
- } elseif (!empty($where['app_id'])) {
- return new DayGameSwitchModel();
- } else {
- return new DaySwitchModel();
- }
- }
- /**
- * @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
- *
- * @return array
- */
- public function getField($where) {
- $_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
- *
- * @return array
- */
- public function getSwitchField($where) {
- $_field = $this->switch_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|bool|false
- */
- public function getTodayData($where) {
- $_map = $this->getWhere($where);
- if (isset($_map['agent_id']) && -1 == $_map['agent_id']) {
- $_map['agent_id'] = 0;
- }
- $_date = date('Y-m-d');
- $_map['date'] = $_date;
- $_group = 'date';
- if (!empty($_map['agent_id']) && !empty($_map['app_id'])) {
- $_group .= ',app_id,agent_id';
- } elseif (!empty($_map['agent_id'])) {
- $_group .= ',agent_id';
- } elseif (!empty($where['app_id'])) {
- $_group .= ',app_id';
- }
- $_field = [
- 'date' => 'date',
- 'app_id' => 'app_id',
- 'agent_id' => 'agent_id',
- 'COUNT(DISTINCT `mem_id`)' => 'active_cnt',
- 'COUNT(DISTINCT(CASE WHEN `reg_days`=0 THEN `mem_id` END))' => 'today_cnt',
- // 'SUM(`login_cnt`)' => 'click_cnt',
- 'COUNT(DISTINCT(CASE WHEN `auth_cnt`>0 THEN `mem_id` END))' => 'user_cnt',
- 'COUNT(DISTINCT `last_login_ip`)' => 'ip_cnt',
- 'COUNT(DISTINCT(CASE WHEN `reg_days`=0 AND `auth_cnt`>0 THEN `mem_id` END))' => 'reg_cnt',
- 'COUNT(DISTINCT(CASE WHEN `reg_days`=0 AND `auth_cnt`>0 THEN `device_id` END))' => 'reg_device_cnt',
- 'COUNT(DISTINCT(CASE WHEN `reg_days`=0 AND `auth_cnt`>0 THEN `last_login_ip` END))' => 'reg_ip_cnt',
- 'COUNT(DISTINCT(CASE WHEN `sum_money`>0 THEN `mem_id` END))' => 'pay_user_cnt',
- // 'COUNT(DISTINCT(CASE WHEN `first_pay_time`>0 THEN `mem_id` END))' => 'first_pay_user_cnt',
- // 'SUM(`order_suc_cnt`)' => 'order_cnt',
- 'COUNT(DISTINCT(CASE WHEN `reg_days`=0 AND `sum_money`>0 THEN `mem_id` END))' => 'reg_pay_cnt',
- 'SUM(`sum_money`)' => 'sum_money',
- 'SUM(`order_cnt`)' => 'order_cnt',
- // 'SUM(`sum_real_money`)' => 'sum_real_money',
- 'SUM(CASE WHEN `reg_days`=0 AND `auth_cnt`>0 THEN `sum_money` END)' => 'reg_sum_money',
- 'SUM(CASE WHEN `reg_days`=0 AND `auth_cnt`>0 THEN `sum_real_money` END)' => 'reg_real_sum_money',
- ];
- $_data = (new DayMemLogModel())->computeTable($_date)->field($_field)->where($_map)->group($_group)->find();
- if (is_object($_data)) {
- $_data = $_data->toArray();
- }
- if (empty($_data)) {
- return false;
- }
- /* 取切量数据 */
- $_switch_data = (new DmlSwitchModel())->computeTable($_date)->field($_field)->where($_map)->group($_group)
- ->find();
- if (is_object($_switch_data)) {
- $_switch_data = $_switch_data->toArray();
- }
- if (!empty($_switch_data)) {
- //$_data['active_cnt'] -= $_switch_data['active_cnt'];
- //$_data['today_cnt'] -= $_switch_data['today_cnt'];
- $_data['ip_cnt'] -= $_switch_data['ip_cnt'];
- $_data['order_cnt'] -= $_switch_data['order_cnt'];
- $_data['user_cnt'] -= $_switch_data['user_cnt'];
- $_data['reg_device_cnt'] -= $_switch_data['reg_device_cnt'];
- $_data['reg_cnt'] -= $_switch_data['reg_cnt'];
- $_data['pay_user_cnt'] -= $_switch_data['pay_user_cnt'];
- $_data['reg_pay_cnt'] -= $_switch_data['reg_pay_cnt'];
- $_data['sum_money'] -= $_switch_data['sum_money'];
- $_data['reg_sum_money'] -= $_switch_data['reg_sum_money'];
- }
- $_data['act_pay_rate'] = StrUtils::getRate($_data['reg_pay_cnt'], $_data['today_cnt']);
- $_data['reg_pay_rate'] = StrUtils::getRate($_data['reg_pay_cnt'], $_data['reg_cnt']);
- $_data['user_pay_rate'] = StrUtils::getRate($_data['pay_user_cnt'], $_data['user_cnt']);
- $_data['reg_arpu'] = StrUtils::getArpu($_data['reg_sum_money'], $_data['reg_pay_cnt']);
- $_data['arpu'] = StrUtils::getArpu($_data['sum_money'], $_data['user_cnt']);
- $_data['arppu'] = StrUtils::getArpu($_data['sum_money'], $_data['pay_user_cnt']);
- $_data['acr'] = StrUtils::getArpu($_data['reg_cnt'], $_data['today_cnt']);
- return $_data;
- }
- /**
- * 获取列表
- *
- * @param array $where
- * @param string $page
- * @param string $order
- *
- * @return array
- */
- public function getList($where, $page = '1,10', $order = '-date') {
- $_rdata = ['count' => 0, 'sum' => 0, 'list' => []];
- if (empty($where['agent_id'])) {
- return $_rdata;
- }
- $_map = $this->getWhere($where);
- $_model = $this->getDataModel($_map);
- $_count = $_model->where($_map)->count();
- if (empty($_count)) {
- return $_rdata;
- }
- $_sum_field = $this->sum_field;
- $_sum_data = $_model
- ->field($_sum_field)
- ->where($_map)
- ->find();
- if (is_object($_sum_data)) {
- $_sum_data = $_sum_data->toArray();
- }
- $_sum = $_sum_data;
- $_dml_model = new DayMemLogModel();
- $_user_cnt = $this->getActiveUserSum($_dml_model, $where);
- $_sum['user_cnt'] = $_user_cnt;
- $_field = $this->getField($_map);
- $_order = $_model->orderFilter($order);
- if (!empty($_map['agent_id']) && is_array($_map['agent_id'])) {
- $_count = $_model->where($_map)->group('date')->count();
- $_sum_field['date'] = 'date';
- $_datas = $_model
- ->where($_map)
- ->field($_sum_field)
- ->group('date')
- ->order($_order)
- ->page($page)
- ->select();
- } else {
- $_datas = $_model
- ->where($_map)
- ->field($_field)
- ->order($_order)
- ->page($page)
- ->select();
- }
- if (is_object($_datas)) {
- $_datas = $_datas->toArray();
- }
- if (empty($_datas)) {
- return $_rdata;
- }
- /* 取切量数据 */
- $_switch_model = $this->getSwitchDataModel($_map);
- $_switch_count = $_switch_model->where($_map)->count();
- if (!empty($_switch_count)) {
- $_sum_field = $this->switch_sum_field;
- $_sum_data = $_switch_model
- ->field($_sum_field)
- ->where($_map)
- ->find();
- if (is_object($_sum_data)) {
- $_sum_data = $_sum_data->toArray();
- }
- if (!empty($_sum_data)) {
- $_dml_model = new DmlSwitchModel();
- $_user_cnt = $this->getActiveUserSum($_dml_model, $where);
- $_sum_data['user_cnt'] = $_user_cnt;
- //$_sum['active_cnt'] -= $_sum_data['active_cnt'];
- //$_sum['active_cnt'] = $_sum['active_cnt']>0?$_sum['active_cnt']:0;
- //$_sum['today_cnt'] -= $_sum_data['today_cnt'];
- //$_sum['today_cnt'] = $_sum['today_cnt']>0?$_sum['today_cnt']:0;
- $_sum['down_cnt'] -= $_sum_data['down_cnt'];
- $_sum['down_cnt'] = $_sum['down_cnt'] > 0 ? $_sum['down_cnt'] : 0;
- $_sum['ip_cnt'] -= $_sum_data['ip_cnt'];
- $_sum['ip_cnt'] = $_sum['ip_cnt'] > 0 ? $_sum['ip_cnt'] : 0;
- $_sum['order_cnt'] -= $_sum_data['order_cnt'];
- $_sum['order_cnt'] = $_sum['order_cnt'] > 0 ? $_sum['order_cnt'] : 0;
- $_sum['user_cnt'] -= $_sum_data['user_cnt'];
- $_sum['user_cnt'] = $_sum['user_cnt'] > 0 ? $_sum['user_cnt'] : 0;
- $_sum['reg_device_cnt'] -= $_sum_data['reg_device_cnt'];
- $_sum['reg_device_cnt'] = $_sum['reg_device_cnt'] > 0 ? $_sum['reg_device_cnt'] : 0;
- $_sum['reg_cnt'] -= $_sum_data['reg_cnt'];
- $_sum['reg_cnt'] = $_sum['reg_cnt'] > 0 ? $_sum['reg_cnt'] : 0;
- $_sum['reg_cnt'] -= $_sum_data['reg_cnt_show'];
- $_sum['pay_user_cnt'] -= $_sum_data['pay_user_cnt'];
- $_sum['pay_user_cnt'] = $_sum['pay_user_cnt'] > 0 ? $_sum['pay_user_cnt'] : 0;
- $_sum['reg_order_cnt'] -= $_sum_data['reg_order_cnt'];
- $_sum['reg_order_cnt'] = $_sum['reg_order_cnt'] > 0 ? $_sum['reg_order_cnt'] : 0;
- $_sum['reg_pay_cnt'] -= $_sum_data['reg_pay_cnt'];
- $_sum['reg_pay_cnt'] = $_sum['reg_pay_cnt'] > 0 ? $_sum['reg_pay_cnt'] : 0;
- $_sum['sum_money'] -= $_sum_data['sum_money'];
- $_sum['sum_money'] = $_sum['sum_money'] > 0 ? $_sum['sum_money'] : 0;
- $_sum['reg_sum_money'] -= $_sum_data['reg_sum_money'];
- $_sum['reg_sum_money'] = $_sum['reg_sum_money'] > 0 ? $_sum['reg_sum_money'] : 0;
- }
- $_field = $this->getSwitchField($_map);
- $_order = $_model->orderFilter($order);
- $_switch_datas = $_switch_model
- ->where($_map)
- ->field($_field)
- ->order($_order)
- ->select();
- if (is_object($_switch_datas)) {
- $_switch_datas = $_switch_datas->toArray();
- }
- if (!empty($_switch_datas)) {
- foreach ($_switch_datas as $_sk => $_sv) {
- foreach ($_datas as $_k => $_v) {
- if ($_sv['date'] == $_v['date']) {
- //$_datas[$_k]['active_cnt'] -= $_sv['active_cnt'];
- //$_datas[$_k]['active_cnt']= $_datas[$_k]['active_cnt']>0?$_datas[$_k]['active_cnt']:0;
- //$_datas[$_k]['today_cnt'] -= $_sv['today_cnt'];
- //$_datas[$_k]['today_cnt']= $_datas[$_k]['today_cnt']>0?$_datas[$_k]['today_cnt']:0;
- $_datas[$_k]['down_cnt'] -= $_sv['down_cnt'];
- $_datas[$_k]['down_cnt'] = $_datas[$_k]['down_cnt'] > 0 ? $_datas[$_k]['down_cnt'] : 0;
- $_datas[$_k]['ip_cnt'] -= $_sv['ip_cnt'];
- $_datas[$_k]['ip_cnt'] = $_datas[$_k]['ip_cnt'] > 0 ? $_datas[$_k]['ip_cnt'] : 0;
- $_datas[$_k]['user_cnt'] -= $_sv['user_cnt'];
- $_datas[$_k]['user_cnt'] = $_datas[$_k]['user_cnt'] > 0 ? $_datas[$_k]['user_cnt'] : 0;
- $_datas[$_k]['reg_device_cnt'] -= $_sv['reg_device_cnt'];
- $_datas[$_k]['reg_device_cnt'] = $_datas[$_k]['reg_device_cnt'] > 0
- ? $_datas[$_k]['reg_device_cnt'] : 0;
- $_datas[$_k]['reg_cnt'] -= $_sv['reg_cnt'];
- $_datas[$_k]['real_reg_cnt'] = $_datas[$_k]['reg_cnt'] > 0 ? $_datas[$_k]['reg_cnt'] : 0;
- $_datas[$_k]['reg_cnt'] -= $_sv['reg_cnt_show'];
- $_datas[$_k]['pay_user_cnt'] -= $_sv['pay_user_cnt'];
- $_datas[$_k]['pay_user_cnt'] = $_datas[$_k]['pay_user_cnt'] > 0
- ? $_datas[$_k]['pay_user_cnt'] : 0;
- $_datas[$_k]['order_cnt'] -= $_sv['order_cnt'];
- $_datas[$_k]['order_cnt'] = $_datas[$_k]['order_cnt'] > 0 ? $_datas[$_k]['order_cnt'] : 0;
- $_datas[$_k]['reg_pay_cnt'] -= $_sv['reg_pay_cnt'];
- $_datas[$_k]['reg_pay_cnt'] = $_datas[$_k]['reg_pay_cnt'] > 0 ? $_datas[$_k]['reg_pay_cnt']
- : 0;
- $_datas[$_k]['sum_money'] -= $_sv['sum_money'];
- $_datas[$_k]['sum_money'] = $_datas[$_k]['sum_money'] > 0 ? $_datas[$_k]['sum_money'] : 0;
- $_datas[$_k]['reg_sum_money'] -= $_sv['reg_sum_money'];
- $_datas[$_k]['reg_sum_money'] = $_datas[$_k]['reg_sum_money'] > 0
- ? $_datas[$_k]['reg_sum_money'] : 0;
- }
- }
- }
- }
- }
- $_sum['act_pay_rate'] = StrUtils::getRate($_sum['reg_pay_cnt'], $_sum['today_cnt']);
- $_sum['reg_pay_rate'] = StrUtils::getRate($_sum['reg_pay_cnt'], $_sum['reg_cnt']);
- $_sum['user_pay_rate'] = StrUtils::getRate($_sum['pay_user_cnt'], $_sum['user_cnt']);
- $_sum['reg_arpu'] = StrUtils::getArpu($_sum['reg_sum_money'], $_sum['reg_pay_cnt']);
- $_sum['arpu'] = StrUtils::getArpu($_sum['sum_money'], $_sum['user_cnt']);
- $_sum['arppu'] = StrUtils::getArpu($_sum['sum_money'], $_sum['pay_user_cnt']);
- $_sum['acr'] = StrUtils::getRate($_sum['reg_cnt'], $_sum['today_cnt']);
- $_sum['old_active_cnt'] = $_sum['active_cnt'] - $_sum['reg_cnt'];
- $_sum['old_pay_user_cnt'] = $_sum['pay_user_cnt'] - $_sum['reg_pay_cnt'];
- $_sum['old_sum_money'] = $_sum['sum_money'] - $_sum['reg_sum_money'];
- $_sum['first_day_ltv'] = StrUtils::getArpu($_sum['reg_sum_money'], $_sum['reg_cnt']);
- $_sum['total_act_pay_rate'] = StrUtils::getRate($_sum['pay_user_cnt'], $_sum['user_cnt']);
- 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]['act_pay_rate'] = StrUtils::getRate($_v['pay_user_cnt'], $_v['today_cnt']);
- $_datas[$_k]['reg_arpu'] = StrUtils::getArpu($_v['reg_sum_money'], $_v['reg_pay_cnt']);
- $_datas[$_k]['arppu'] = StrUtils::getArpu($_v['sum_money'], $_v['pay_user_cnt']);
- $_datas[$_k]['arpu'] = StrUtils::getArpu($_v['sum_money'], $_v['user_cnt']);
- $_datas[$_k]['acr'] = StrUtils::getRate($_v['reg_cnt'], $_v['today_cnt']);
- $_datas[$_k]['old_active_cnt'] = $_v['active_cnt'] - $_v['reg_cnt'];
- $_datas[$_k]['old_pay_user_cnt'] = $_v['pay_user_cnt'] - $_v['reg_pay_cnt'];
- $_datas[$_k]['old_sum_money'] = $_v['sum_money'] - $_v['reg_sum_money'];
- $_datas[$_k]['first_day_ltv'] = StrUtils::getArpu($_v['reg_sum_money'], $_v['reg_cnt']);
- $_datas[$_k]['total_act_pay_rate'] = StrUtils::getRate($_v['pay_user_cnt'], $_v['user_cnt']);
- }
- return [
- 'count' => $_count,
- 'sum' => $_sum,
- 'list' => $_datas
- ];
- }
- /**
- * 获取活跃数据汇总
- *
- * @param $model
- * @param array $param
- *
- * @return int|string
- */
- public function getActiveUserSum($model, $param = []) {
- $_start_time = time();
- $_end_time = $_start_time;
- if (!empty($param['start_time']) && !empty($param['end_time'])) {
- $_start_time = strtotime($param['start_time']);
- $_end_time = strtotime($param['end_time']);
- }
- $_map = $this->getWhere($param);
- $_group = 'mem_id';
- if (!empty($param['agent_id'])) {
- $_group .= ',agent_id';
- }
- if (!empty($param['app_id'])) {
- $_group .= ',app_id';
- }
- $_cnt = $model->getActiveUserSum($_map, $_start_time, $_end_time, $_group);
- return $_cnt;
- }
- /**
- * 玩家切量回退每日数据
- *
- * @param $mem_id
- *
- * @return bool
- */
- public function returnMemData($mem_id) {
- $_mem_id = $mem_id;
- $_mem_cache = MemCache::ins();
- $_mem_data = $_mem_cache->getInfoById($_mem_id);
- $_mem_data ['is_switch'] = OrderConst::PAY_SWITCH_NO;
- $_rs = MemCache::ins()->updateMem($_mem_id, $_mem_data);
- if (false == $_rs) {
- return $_rs;
- }
- $_date = date('Y-m-d', $_mem_data['create_time']);
- /* 删除当前玩家今日数据 */
- (new DmlSwitchModel())->deleteLog($_mem_id, $_date);
- /* 修改数据 */
- $_map = ['date' => $_date];
- $_model = new DaySwitchModel();
- $_rs = $this->updateMemData($_model, $_map);
- if (false == $_rs) {
- return $_rs;
- }
- $_map = ['date' => $_date, 'app_id' => $_mem_data['app_id']];
- $_model = new DayGameSwitchModel();
- $_rs = $this->updateMemData($_model, $_map);
- if (false == $_rs) {
- return $_rs;
- }
- $_agent_id = $_mem_data['agent_id'];
- if (!empty($_mem_data['origin_agent_id']) && 1 != $_mem_data['origin_agent_id']) {
- $_agent_id = $_mem_data['origin_agent_id'];
- }
- $_map = ['date' => $_date, 'agent_id' => $_agent_id];
- $_model = new DayAgentSwitchModel();
- $_rs = $this->updateMemData($_model, $_map);
- if (false == $_rs) {
- return $_rs;
- }
- $_map = ['date' => $_date, 'agent_id' => $_agent_id, 'app_id' => $_mem_data['app_id']];
- $_model = new DgaSwitchModel();
- $_rs = $this->updateMemData($_model, $_map);
- if (false == $_rs) {
- return $_rs;
- }
- $this->setAgentRegCnt($_agent_id, 1);
- return true;
- }
- /**
- * 减少渠道邀请数量
- *
- * @param int $agent_id
- * @param int $cnt //正数增加 负数减少
- *
- * @return bool
- */
- public function setAgentRegCnt($agent_id, $cnt = 0) {
- $_agent_cache = AgentCache::ins();
- $_agent_ext = $_agent_cache->getAgentExtByAgentId($agent_id);
- $_agent_ext['reg_cnt'] += $cnt;
- $_agent_ext['reg_cnt'] = $_agent_ext['reg_cnt'] > 0 ? $_agent_ext['reg_cnt'] : 0;
- $_rs = $_agent_cache->updateAgentExt($agent_id, $_agent_ext);
- return $_rs;
- }
- /**
- * 修改切量玩家数据
- *
- * @param $model
- * @param $where
- *
- * @return bool
- */
- public function updateMemData($model, $where) {
- $_field = ['user_cnt', 'reg_cnt'];
- $_date = $model->where($where)->field($_field)->find();
- if (empty($_date)) {
- return true;
- }
- if (is_object($_date)) {
- $_date = $_date->toArray();
- }
- $_date['user_cnt'] = $_date['user_cnt'] > 1 ? $_date['user_cnt'] - 1 : 0;
- $_date['reg_cnt'] = $_date['reg_cnt'] > 1 ? $_date['reg_cnt'] - 1 : 0;
- $_rs = $model->where($where)->update($_date);
- return $_rs;
- }
- /**
- * 修改切量订单数据
- *
- * @param $order_id
- *
- * @return bool
- */
- public function returnOrdData($order_id) {
- $_order_data = SdkOrderCache::ins()->getInfoByOrderId($order_id);
- if (empty($_order_data)) {
- return false;
- }
- /* 修改订单切换状态 */
- $_order_data['is_switch'] = OrderConst::PAY_SWITCH_NO;
- $_rs = SdkOrderCache::ins()->updateOrder($_order_data['order_id'], $_order_data);
- if (false == $_rs) {
- return false;
- }
- if (OrderConst::PAY_STATUS_SUC != $_order_data['status']) { //支付成功订单才需要做数据处理
- return true;
- }
- /* 计算订单渠道收益 */
- (new Income())->incomeFromSdkOrder($order_id);
- /* 修改玩家当日数据 */
- $_time = empty($_order_data['pay_time']) ? $_order_data['create_time'] : $_order_data['pay_time'];
- $_date = date('Y-m-d', $_time);
- $_model = new DayMemLogModel();
- $_map['date'] = $_date;
- $_map['mem_id'] = $_order_data['mem_id'];
- $_map['app_id'] = $_order_data['app_id'];
- $_log_data = $_model->getDetail($_map);
- if (!empty($_log_data)) {
- $_log_data['sum_money'] -= $_order_data['amount'];
- $_log_data['sum_real_money'] -= $_order_data['real_amount'];
- $_model->updateLog($_log_data, $_log_data['id']);
- }
- /* 数据恢复-主要处理 switch 后缀的几个表 */
- $_map = ['date' => $_date];
- $_model = new DaySwitchModel();
- $_rs = $this->updateOrdData($_model, $_map, $_order_data);
- if (false === $_rs) {
- return $_rs;
- }
- $_map = ['date' => $_date, 'app_id' => $_order_data['app_id']];
- $_model = new DayGameSwitchModel();
- $_rs = $this->updateOrdData($_model, $_map, $_order_data);
- if (false === $_rs) {
- return $_rs;
- }
- $_map = ['date' => $_date, 'agent_id' => $_order_data['agent_id']];
- $_model = new DayAgentSwitchModel();
- $_rs = $this->updateOrdData($_model, $_map, $_order_data);
- if (false === $_rs) {
- return $_rs;
- }
- $_map = ['date' => $_date, 'agent_id' => $_order_data['agent_id'], 'app_id' => $_order_data['app_id']];
- $_model = new DgaSwitchModel();
- $_rs = $this->updateOrdData($_model, $_map, $_order_data);
- if (false === $_rs) {
- return $_rs;
- }
- return true;
- }
- /**
- * 修改切量订单数据
- *
- * @param $model
- * @param $where
- * @param $_order_data
- *
- * @return bool
- */
- public function updateOrdData($model, $where, $_order_data) {
- $_field = ['pay_user_cnt', 'order_cnt', 'sum_money', 'sum_real_money'];
- $_date = $model->where($where)->field($_field)->find();
- if (empty($_date)) {
- return true;
- }
- if (is_object($_date)) {
- $_date = $_date->toArray();
- }
- $_date['pay_user_cnt'] = $_date['pay_user_cnt'] > 1 ? $_date['pay_user_cnt'] - 1 : 0;
- $_date['order_cnt'] = $_date['order_cnt'] > 1 ? $_date['order_cnt'] - 1 : 0;
- $_date['sum_money'] = $_date['sum_money'] > $_order_data['amount'] ? $_date['sum_money']
- - $_order_data['amount'] : 0;
- $_date['sum_real_money'] = $_date['sum_real_money'] > $_order_data['real_amount'] ? $_date['sum_real_money']
- - $_order_data['real_amount']
- : 0;
- $_rs = $model->where($where)->update($_date);
- return $_rs;
- }
- }
|