* @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; } }