123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- <?php
- /**
- * Ltv.php UTF-8
- * LTV计算
- *
- * @date : 2018/3/26 13:47
- *
- * @license 这不是一个自由软件,未经授权不许任何使用和传播。
- * @author : wuyonghong <wyh@huosdk.com>
- * @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);
- }
- }
|