* @version : HUOSDK 8.0 */ namespace ltv; use huo\model\member\MemberModel; use huo\model\order\OrderModel; use huolib\constant\CommonConst; use huolib\constant\OrderConst; class Ltv { private $ltv_model; public function __construct() { $this->ltv_model = new LtvModel(); } /** * 注册 * * @param int $reg_app_id * @param int $reg_agent_id * @param int $reg_time * @param bool $new_device * @param int $mem_cnt 注册人数 */ public function reg($reg_app_id, $reg_agent_id, $reg_time = 0, $new_device = true, $mem_cnt = 1) { return true; $_reg_time = $reg_time; if (empty($reg_time)) { $_reg_time = time(); } $_date = date('Y-m-d', $_reg_time); $_data = $this->ltv_model->getInfoByDateAppIdAgentId($_date, $reg_app_id, $reg_agent_id); $_is_new = false; if (empty($_data)) { $_is_new = true; $_data['reg_cnt'] = $mem_cnt; if (true == $new_device) { $_data['reg_device_cnt'] = $mem_cnt; } } else { $_data['reg_cnt'] += 1; if (true == $new_device) { $_data['reg_device_cnt'] += $mem_cnt; } } $_data['date'] = $_date; $_data['app_id'] = $reg_app_id; $_data['agent_id'] = $reg_agent_id; $this->ltv_model->saveData($_date, $reg_app_id, $reg_agent_id, $_data, $_is_new); } /** * 充值插入 * * @param int $reg_app_id 注册游戏ID * @param int $reg_agent_id 注册渠道ID * @param int $pay_app_id 充值游戏ID * @param double $money 充值金额 * @param int $pay_time 充值时间 * @param int $reg_time 注册时间 * * @return bool */ public function charge($reg_app_id, $reg_agent_id, $pay_app_id, $money, $pay_time = 0, $reg_time = 0) { return true; if ($money < 0.01) { return false; } if ($reg_app_id != $pay_app_id) { // // TODO: chenbingling 2019/5/27 不计算其他游戏收益 // return true; $reg_app_id=$pay_app_id; } $_reg_time = $reg_time; if (empty($reg_time)) { $_reg_time = time(); } $_reg_date = date('Y-m-d', $_reg_time); $_data = $this->ltv_model->getInfoByDateAppIdAgentId($_reg_date, $reg_app_id, $reg_agent_id); if (empty($_data)) { /* 查询 $_reg_date 注册人数 */ $_start_time = strtotime($_reg_date); $_end_time = $_start_time; // $_map['create_time'] = ['egt', $_start_time]; // $_map['create_time'] = ['lt', $_end_time]; // $_map['agent_id'] = $reg_agent_id; // $_map['app_id'] = $reg_app_id; // $_history_mem_cnt = (new MemberModel())->getCnt($_map); // $this->reg($reg_app_id, $reg_agent_id, $_reg_time, true, $_history_mem_cnt); /* 查询充值数据 */ $_pay_map['create_time'] = ['egt', $_start_time]; $_pay_map['create_time'] = ['lt', $_end_time]; // $_pay_map['create_time'] = ['BETWEEN',[$_start_time,$_end_time]]; $_pay_map['status'] = OrderConst::PAY_STATUS_SUC; $_pay_map['agent_id'] = $reg_agent_id; $_pay_map['app_id'] = $reg_app_id; $_history_money = (new OrderModel())->totalMoney($_pay_map); $money = $_history_money; $_data = $this->ltv_model->getInfoByDateAppIdAgentId($_reg_date, $reg_app_id, $reg_agent_id); } $_diff_day = $this->time_diff(strtotime($_reg_date), $pay_time); isset($_data['sum_money']) ? $_data['sum_money'] += $money : $_data['sum_money'] = $money; // if ($_diff_day <= 360) { // isset($_data['day360']) ? $_data['day360'] += $money : $_data['day360'] = $money; // } // if ($_diff_day <= 270) { // isset($_data['day270']) ? $_data['day270'] += $money : $_data['day270'] = $money; // } if ($_diff_day <= 180) { isset($_data['day180']) ? $_data['day180'] += $money : $_data['day180'] = $money; } if ($_diff_day <= 120) { isset($_data['day120']) ? $_data['day120'] += $money : $_data['day120'] = $money; } if ($_diff_day <= 90) { isset($_data['day90']) ? $_data['day90'] += $money : $_data['day90'] = $money; } for ($_i = 60; $_i > 0; $_i--) { /* 记录60天以下 */ if ($_diff_day > $_i) { break; } $_day_key = 'day'.$_i; isset($_data[$_day_key]) ? $_data[$_day_key] += $money : $_data[$_day_key] = $money; } return $this->ltv_model->saveData($_reg_date, $reg_app_id, $reg_agent_id, $_data); } /** * 计算时间差 * * @param int $reg_time * @param int $pay_time * * @return int */ public function time_diff($reg_time, $pay_time) { return ceil(($pay_time - $reg_time) / CommonConst::CONST_DAY_SECONDS); } public function admincharge($reg_app_id, $reg_agent_id, $pay_app_id, $money, $pay_time = 0, $reg_time = 0) { if ($money < 0.01) { return false; } if ($reg_app_id != $pay_app_id) { // // TODO: chenbingling 2019/5/27 不计算其他游戏收益 return true; // $reg_app_id = $pay_app_id; } $_reg_time = $reg_time; if (empty($reg_time)) { $_reg_time = time(); } $_reg_date = date('Y-m-d', $_reg_time); $_data = $this->ltv_model->getInfoByDateAppIdAgentId($_reg_date, $reg_app_id, $reg_agent_id); if (empty($_data)) { /* 查询 $_reg_date 注册人数 */ $_start_time = strtotime($_reg_date); $_end_time = $_start_time + 86400; // $_map['create_time'] = ['egt', $_start_time]; // $_map['create_time'] = ['lt', $_end_time]; $_map['create_time'] = ['BETWEEN',[$_start_time,$_end_time]]; $_map['agent_id'] = $reg_agent_id; $_map['app_id'] = $reg_app_id; $_history_mem_cnt = (new MemberModel())->getCnt($_map); $this->reg($reg_app_id, $reg_agent_id, $_reg_time, true, $_history_mem_cnt); /* 查询充值数据 */ // $_pay_map['create_time'] = ['egt', $_start_time]; // $_pay_map['create_time'] = ['lt', $pay_time]; //// $_pay_map['create_time'] = ['BETWEEN',[$_start_time,$_end_time]]; // $_pay_map['status'] = OrderConst::PAY_STATUS_SUC; // $_pay_map['agent_id'] = $reg_agent_id; // $_pay_map['app_id'] = $reg_app_id; // $_history_money = (new OrderModel())->totalMoney($_pay_map); // $money = $_history_money; $_data = $this->ltv_model->getInfoByDateAppIdAgentId($_reg_date, $reg_app_id, $reg_agent_id); } $_diff_day = $this->time_diff(strtotime($_reg_date), $pay_time); isset($_data['sum_money']) ? $_data['sum_money'] += $money : $_data['sum_money'] = $money; // if ($_diff_day <= 360) { // isset($_data['day360']) ? $_data['day360'] += $money : $_data['day360'] = $money; // } // if ($_diff_day <= 270) { // isset($_data['day270']) ? $_data['day270'] += $money : $_data['day270'] = $money; // } if ($_diff_day <= 180) { isset($_data['day180']) ? $_data['day180'] += $money : $_data['day180'] = $money; } if ($_diff_day <= 120) { isset($_data['day120']) ? $_data['day120'] += $money : $_data['day120'] = $money; } if ($_diff_day <= 90) { isset($_data['day90']) ? $_data['day90'] += $money : $_data['day90'] = $money; } for ($_i = 60; $_i > 0; $_i--) { /* 记录60天以下 */ if ($_diff_day > $_i) { break; } $_day_key = 'day'.$_i; isset($_data[$_day_key]) ? $_data[$_day_key] += $money : $_data[$_day_key] = $money; } return $this->ltv_model->saveData($_reg_date, $reg_app_id, $reg_agent_id, $_data); } }