<?php

namespace Admin\Controller;

class SuperStatisticalController extends ThinkController
{


    private $ticketList_url = 'https://app.ipa365.com/Kirin/OpenApi/TicketList';

    private $pay_way = [
        0 => '未知',
        1 => '支付宝',
        2 => '微信',
    ];

    public function index() {
        $params = I('get.');
        $startDate          = empty($params['timestart']) ? '': $params['timestart'];
        $endDate            = empty($params['timeend']) ? '' : $params['timeend'];
        $startTime          = strtotime($startDate);
        $endTime            = strtotime($endDate) + 86399;
        if(!empty($startDate)) {

            $where['pay_time'] = array('BETWEEN', [$startTime, $endTime]);
            $map['pay_time'] = array('BETWEEN', [$startTime, $endTime]);
        }
        if(isset($params['game_id'])) {
            $where['game_id'] = $params['game_id'];
            $map['game_id'] = $params['game_id'];
        }
        $map['supersign_token'] = ['NEQ',''];
        $supersign_game = M('game', 'tab_')->field('id,game_name,supersign_token')->where(['supersign_token' => ['NEQ','']])->select();
        $supersign_token = array_column($supersign_game, 'supersign_token');
        $authorization_all_num = 0;
        foreach($supersign_token as $k => $v) {
            $authorization_all_num += count($this->game_supersign_num($v));
        }
        $where['pay_status'] = 1;
        $data['buy_num'] = M('game_supersign', 'tab_')->where($where)->count();
        $pay_price = M('game_supersign', 'tab_')->field('sum(pay_price) as pay_price')->where($where)->select();
        $data['money_all'] = $pay_price[0]['pay_price'] == '' ? 0 : $pay_price[0]['pay_price'];
        $data['authorization_all_num'] = $authorization_all_num;
        $this->assign('data', $data);
        $this->display('index');
    }

    public function lists($p = 1,$row = 10) {
        $page = $p ? $p : 1; 
        $row = $row ? $row : 10;
        $params = I('get.');
        if(isset($params['timestart']) && isset($params['timeend'])) {
            $startTime          = strtotime($params['timestart']);
            $endTime            = strtotime($params['timeend']) + 86399;
            $map['pay_time'] = array('BETWEEN', [$startTime, $endTime]);
        }
        if(isset($params['game_id'])) {
            $map['tab_game.id'] = $params['game_id'];
        }
        $map['supersign_token'] = ['NEQ',''];
        $supersign_game = M('game', 'tab_')->field('tab_game.id,tab_game.game_name,tab_game.supersign_token')->join('tab_game_supersign on tab_game_supersign.game_id = tab_game.id')->where($map)->group('tab_game.id')->page($page,$row)->select();
        $data = [];
        $num['authorization'] = 0;
        $num['pay_num'] = 0;
        $num['promote_super_money'] = 0;
        $num['official_super_money'] = 0;
        foreach($supersign_game as $k => $v) {
            $arr['game_name'] = $v['game_name'];
            $arr['authorization_num'] = count($this->game_supersign_num($v['supersign_token']));
            $num['authorization'] += $arr['authorization_num'];

            if(isset($params['timestart']) && isset($params['timeend'])) {
                $startTime          = strtotime($params['timestart']);
                $endTime            = strtotime($params['timeend']) + 86399;
                $where['pay_time'] = array('BETWEEN', [$startTime, $endTime]);
            }
            $where['game_id'] = $v['id'];
            $where['pay_status'] = 1;
            $game_supersign = M('game_supersign', 'tab_')->field('promote_id,pay_price')->join('tab_user on tab_game_supersign.user_id = tab_user.id')->where($where)->select();
            $arr['pay_game_supersign'] = count($game_supersign);
            $num['pay_num'] += $arr['pay_game_supersign'];

            $arr['promote_super_money'] = 0;
            $arr['official_super_money'] = 0;
            foreach($game_supersign as $key => $val) {
                if($val['promote_id'] != 0) {
                    $arr['promote_super_money'] += $val['pay_price'];
                }else {
                    $arr['official_super_money'] += $val['pay_price'];
                }
            }
            $num['official_super_money'] += $arr['official_super_money'];
            $num['promote_super_money'] += $arr['promote_super_money'];
            $data[] = $arr;
        }
        $count =  count(M('game', 'tab_')->field('tab_game.id,tab_game.game_name,tab_game.supersign_token')->join('tab_game_supersign on tab_game_supersign.game_id = tab_game.id')->where($map)->group('tab_game.id')->select());
        $page = set_pagination($count, $row);
        $this->assign('_page', $page);
        $this->assign('data', $data);
        $this->assign('num', $num);
        $this->display('lists');
    }

    private function game_supersign_num($token) {
        $re_data = [];
        $arr['token'] = $token;
        $arr['limit'] = 2000;
        for ($i = 1;$i > 0;$i++) {
            if($i != 1) {
                $pop = array_pop($data);
                $arr['lastid'] = $pop['id'];
            }
            $curl_re = json_decode(curl_post($this->ticketList_url,$arr),true);
            if($curl_re['errno'] == 0) {
                $data = $curl_re['data']['list'];
                $re_data = array_merge($re_data,$data);
            } else {
                break;
            }
            if(count($data) != $arr['limit']) {
                break;
            }
        }
        return $re_data;
    }

    public function superDetail($p = 1,$row = 10) {
        $page = $p ? $p : 1; 
        $row = $row ? $row : 10;
        $params = I('get.');
        $map['tab_game_supersign.pay_status'] = 1;
        if (isset($params['order_id'])) {
            $map['tab_game_supersign.order_id'] = $params['order_id'];
        }
        if (isset($params['pay_way'])) {
            $map['tab_game_supersign.pay_way'] = $params['pay_way'];
        }
        if (isset($params['account'])) {
            $map['tab_user.account'] = $params['account'];
        }
        if (isset($params['promote_id'])) {
            $promoteId = $params['promote_id'];
            if ($promoteId == 0) {
                $map['promote_id'] = 0;
            } else {
                $promoteMap['chain'] = ['like', "%/$promoteId/%"];
                $promoteIds          = M('Promote', 'tab_')->where($promoteMap)->getField('id', true);
                $promoteIds[] = $promoteId;
                $map['tab_user.promote_id'] = ['in', $promoteIds];
            }
        }
        if(isset($params['timestart']) && isset($params['timeend'])) {
            $startTime          = strtotime($params['timestart']);
            $endTime            = strtotime($params['timeend']) + 86399;
            $map['tab_game_supersign.pay_time'] = array('BETWEEN', [$startTime, $endTime]);
        }
        if(isset($params['game_id'])) {
            $map['tab_game_supersign.game_id'] = $params['game_id'];
        }
        $data = M('game_supersign', 'tab_')->field('tab_game_supersign.id,tab_game_supersign.pay_way,tab_game_supersign.order_id,tab_user.account,tab_user.promote_account,tab_user.device_number,tab_game.game_name,tab_game_supersign.pay_time,tab_game_supersign.pay_price')->join('tab_user on tab_game_supersign.user_id = tab_user.id')->join('tab_game on tab_game_supersign.game_id = tab_game.id')->where($map)->page($page,$row)->order('id DESC')->select();
        $count = M('game_supersign', 'tab_')->field('tab_game_supersign.order_id,tab_user.account,tab_user.promote_account,tab_user.device_number,tab_game.game_name,tab_game_supersign.pay_time')->join('tab_user on tab_game_supersign.user_id = tab_user.id')->join('tab_game on tab_game_supersign.game_id = tab_game.id')->where($map)->count();

        foreach($data as $k => $v) {
            $data[$k]['pay_way'] = $this->pay_way[$v['pay_way']];
        }
        $pay_price = M('game_supersign', 'tab_')->field('sum(pay_price) as pay_price')->where($map)->select();
        $super_money_all = $pay_price[0]['pay_price'] == '' ? 0 : $pay_price[0]['pay_price'];
        $page = set_pagination($count, $row);
        $this->assign('_page', $page);
        $this->assign('data', $data);
        $this->assign('super_money_all', $super_money_all);
        $this->display('superDetail');
    }

}