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