123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- <?php
- namespace ltv;
- use DateTime;
- use huolib\constant\CommonConst;
- use huolib\constant\DataConst;
- use huolib\tool\Math;
- use think\Model;
- class LtvLogic extends Model {
- private $base_field
- = [
- 'date' => 'date',
- 'sum(reg_cnt)' => 'reg_cnt',
- 'sum(reg_device_cnt)' => 'reg_device_cnt',
- 'sum(sum_money)' => 'sum_money',
- ];
- protected $day_field
- = [
- 'sum(day1)' => 'day1',
- 'sum(day2)' => 'day2',
- 'sum(day3)' => 'day3',
- 'sum(day4)' => 'day4',
- 'sum(day5)' => 'day5',
- 'sum(day6)' => 'day6',
- 'sum(day7)' => 'day7',
- 'sum(day8)' => 'day8',
- 'sum(day9)' => 'day9',
- 'sum(day10)' => 'day10',
- 'sum(day11)' => 'day11',
- 'sum(day12)' => 'day12',
- 'sum(day13)' => 'day13',
- 'sum(day14)' => 'day14',
- 'sum(day15)' => 'day15',
- 'sum(day30)' => 'day30',
- 'sum(day60)' => 'day60',
- 'sum(day90)' => 'day90',
-
- 'sum(day180)' => 'day180',
-
-
- ];
-
- public function getField($where) {
- $_field = array_merge($this->base_field, $this->day_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;
- }
-
- public function getGroup($param) {
- if (!empty($param['data_summary']) && DataConst::DATA_SUMMARY_YES == $param['data_summary']) {
- $_group = 'date';
- return $_group;
- }
- $_group = 'date';
- if (!empty($param['app_id']) && !empty($param['agent_id'])) {
- $_group = 'date,app_id,agent_id';
- } elseif (!empty($param['app_id'])) {
- $_group = 'date,app_id';
- } elseif (!empty($param['agent_id'])) {
- $_group = 'date,agent_id';
- }
- return $_group;
- }
-
- 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'];
- if (-1 == $_map['agent_id']) {
- $_map['agent_id'] = ['in', [$_map['agent_id'], CommonConst::CONST_ZERO]];
- } elseif (is_array($param['agent_id']) && !in_array('in', $param['agent_id'])) {
- $_map['agent_id'] = ['in', $param['agent_id']];
- }
- }
- if (!empty($param['app_id'])) {
- $_map['app_id'] = $param['app_id'];
- }
- return $_map;
- }
-
- public function getWith($param) {
- $_model = new LtvModel();
- if (!empty($param['app_id']) && !empty($param['agent_id'])) {
- $_model = $_model->with('ch,game');
- } elseif (!empty($param['app_id'])) {
- $_model = $_model->with('game');
- } elseif (!empty($param['agent_id'])) {
- $_model = $_model->with('ch');
- }
- return $_model;
- }
-
- public function getList($param, $page = '1,10', $order = 'date desc') {
- $_rdata = ['count' => CommonConst::CONST_ZERO, 'list' => []];
- $_map = $this->getWhere($param);
- $_group = $this->getGroup($param);
- $_count = (new LtvModel())->where($_map)->group($_group)->count();
- if (empty($_count)) {
- return $_rdata;
- }
- $_field = $this->getField($param);
- $_item = $this->getWith($param)
- ->where($_map)
- ->field($_field)
- ->order($order)
- ->group($_group)
- ->page($page)
- ->select();
- if (is_object($_item)) {
- $_item = $_item->toArray();
- }
- if (empty($_item)) {
- return $_rdata;
- }
- $_list = [];
- $_date = date('Y-m-d');
- $_date_end = new DateTime($_date);
- foreach ($_item as $_k => $_v) {
- $_data = [];
- $_data['reg_cnt'] = $_v['reg_cnt'];
- $_data['date'] = $_v['date'];
- $_data['sum_money'] = $_v['sum_money'];
- $_data['now_ltv'] = 0.00;
- if (!empty($_v['reg_cnt'])) {
- $_data['now_ltv'] = Math::divNum($_v['sum_money'], $_v['reg_cnt'], 2);
- }
- $_date_start = new DateTime($_v['date']);
- $_days = $_date_start->diff($_date_end)->days;
- foreach ($this->day_field as $_day) {
- $_day_num = substr($_day, 3);
- if ($_days < $_day_num) {
- $_data[$_day] = '--';
- continue;
- }
- if (empty($_v['reg_cnt'])) {
- $_data[$_day] = CommonConst::CONST_ZERO;
- continue;
- }
- $_data[$_day] = Math::divNum($_v[$_day], $_v['reg_cnt'], 2);
- }
- if (isset($_v['game'])) {
- $_data['game_name'] = $_v['game']['name'];
- }
- if (isset($_v['ch'])) {
- $_data['channel_name'] = $_v['ch']['user_login'];
- }
- if (isset($_v['agent_id'])) {
- $_data['agent_id'] = $_v['agent_id'];
- }
- $_list[] = $_data;
- }
- $_rdata['count'] = $_count;
- $_rdata['list'] = $_list;
- return $_rdata;
- }
-
- public function setDayField($day_field) {
- $this->day_field = $day_field;
- }
- }
|