* @version : HUOSDK 8.0 */ namespace huolib\ads; use huo\model\ads\LtvModel; 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) { $_reg_time = $reg_time; if (empty($reg_time)) { $_reg_time = time(); } $_date = date('Y-m-d', $_reg_time); $_data = $this->ltv_model->readData($_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; $_re = $this->ltv_model->saveData($_date, $reg_app_id, $reg_agent_id, $_data, $_is_new); if ($_re) { } } /** * 充值插入 * * @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) { if ($money < 0.01) { return false; } if ($reg_app_id != $pay_app_id) { // TODO: wuyonghong 2018/3/26 不计算其他游戏收益 // 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->readData($_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 \huo\model\member\MemberModel())->total($_map);//\think\Db::name('members')->where($_map)->count(); $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['status'] = 2; $_pay_map['agent_id'] = $reg_agent_id; $_pay_map['app_id'] = $reg_app_id; $_history_money = (new \huo\model\order\OrderModel())->totalMoney($_pay_map); $money = $_history_money; $_data = $this->ltv_model->readData($_reg_date, $reg_app_id, $reg_agent_id); } $_diff_day = $this->time_diff(strtotime($_reg_date), $pay_time); $_data['sum_money'] += $money; if ($_diff_day <= 360) { $_data['day360'] += $money; } if ($_diff_day <= 270) { $_data['day270'] += $money; } if ($_diff_day <= 180) { $_data['day180'] += $money; } if ($_diff_day <= 90) { $_data['day90'] += $money; } for ($_i = 60; $_i > 0; $_i--) { /* 记录60天以下 */ if ($_diff_day > $_i) { break; } $_day_key = 'day'.$_i; $_data[$_day_key] += $money; } return $this->ltv_model->saveData($_reg_date, $reg_app_id, $reg_agent_id, $_data); } /** * 更新花费 * * @param string $date 更新日期 * @param int $app_id 游戏ID * @param int $agent_id 推广ID * @param float $costs 花费 * * @return bool */ public function updateCosts($date = '', $app_id = 0, $agent_id = 0, $costs = 0.00) { if ($costs < 0.01) { return false; } $_data['costs'] = $costs; return $this->ltv_model->saveData($date, $app_id, $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) / 86400); } /** * 获取LTV列表 * * @param array $field * @param $where * @param string $order * @param string $limit * * @return bool|false|\PDOStatement|string|\think\Collection */ public function getList($field = array(), $where, $order = 'id desc', $limit = '1,10') { $_map = array(); if (isset($where['date']) && !empty($where['date'])) { $_map['date'] = $where['date']; } if (isset($where['app_id']) && !empty($where['app_id'])) { $_map['app_id'] = $where['app_id']; } if (isset($where['agent_id']) && !empty($where['agent_id'])) { $_map['agent_id'] = $where['agent_id']; } return $this->ltv_model->getList($field, $_map, $order, $limit); } }