<?php
namespace Admin\Controller;
use Think\Exception;

/**
 * 游戏流水聚合接口
 * @author chenzhi
 */
class FinancialSummarySetController extends \Think\Controller
{
    public $beginThismonth;
    public $endThismonth;
    public $date;
    public $nowdata;
    public $month;//月份
    public $year;//年份
    public $adddata;//要添加的数据
    public $taskid=false;
    public $result='';
    //数据库
    public $FinancialSummaryModel;
    public function _initialize(){
        
        //初始化
        $this->beginThismonth = mktime(0,0,0,date('m')-1,1,date('Y'));
        $this->endThismonth = mktime(0,0,0,date('m'),1,date('Y'))-1;

        $temp = strtotime(date('Y',time()).'-'.(date('m',time())-1).'-01');
        $this->year= date('Y',$temp);
        $this->month= date('m',$temp);
        $this->date = $this->year."-".$this->month;
        $this->nowdata =time();
        
        $this->FinancialSummaryModel =SM("FinancialSummary",'tab_');
        $this->DepositModel =M("Deposit",'tab_');
        $this->SpendModel = M("Spend",'tab_');
        $this->GameSupersignModel = M("GameSupersign",'tab_');
        $this->CoinPayOrderModel = M("CoinPayOrder",'tab_');//会长充值平台币表
        $this->TestOrderModel = M("TestOrder",'tab_');//测试订单录入
    }
    /**
     * 更新某月数据
     */
    public function setMonthFinancialSummary($count_date)
    {
        $month = $count_date;
        if(empty($month)) die("参数错误");

        $this->adddata = [];//置空否者会脚本进来会重复计算
        $this->date =  $month;
        $tarry = explode('-',$month);
        $this->year= $tarry[0];
        if(strlen($tarry[1]) < 2) $tarry[1]="0".$tarry[1];

        $this->month= $tarry[1];
        $this->beginThismonth=mktime(0,0,0,$tarry[1],1,$tarry[0]);
        $this->endThismonth=mktime(0,0,0,$tarry[1]-0+1,1,$tarry[0])-1;

        $this->reCount();
        $this->setFinancialSummary();
    }
    /**
     * 强制重新聚合
     */
    public function reCount()
    {
        $recount = I("recount");
        if(empty($recount) || $recount != 1){return ;}
        # code...
        //清理之前的聚合
        $temp =array(
            "count_year"=>$this->year,
            "count_month"=>$this->month
        );
        $this->FinancialSummaryModel->where($temp)->delete();
        echo "重置成功执行重新生成:";
    }


    /**
     * 每个月的统计接口
     */
    public function setFinancialSummary()
    {
        set_time_limit(0);
        $t1 = microtime(true);
        //判断是否已经聚合
        $countRes = $this->FinancialSummaryModel->field("IFNULL(COUNT(*),0) count")->where("count_year = '{$this->year}' and count_month= '{$this->month}'")->find()['count'];
        if($countRes > 0){
            die("error:Repeated statistics,msg:{$this->date}已经聚合过");
        }
        echo "{$this->date}开始统计".PHP_EOL;
        echo "--收入类型统计中".PHP_EOL;
        $this->setIncomeMoney();
        
        echo "--合作方类型统计中".PHP_EOL;
        $this->setPromoteMoney();
        //
        echo "--支付渠道统计中".PHP_EOL;
        $this->setChannelMoney();

        echo "--支付类型统计中".PHP_EOL;
        $this->setPaywayMoney();

        echo "--支付商户统计中".PHP_EOL;
        $this->setMerchantMoney();

        echo "--数据保存".PHP_EOL;
        $this->addDb();

        $t2 = microtime(true);
        echo ("success {$this->date}:ok runtime:".round($t2-$t1,3).'s'.PHP_EOL);

        if($this->taskid){
            $this->result = "success {$this->date}:ok runtime:".round($t2-$t1,3).'s';
        }
    }
    /**
     * 获取类型为1的数据,按收入类型
     */
    public function setIncomeMoney()
    {
        $this->getCashAndBalanCoinSpend();
        $this->getBalanceCoinIncome();
        $this->getGameSupersignIncome();
        $this->getTestUserIncome();
        $this->getRewardRecordIncome();
    }
    //现金充值及平台币消耗
    protected function getCashAndBalanCoinSpend()
    {

        $map = array(
            "payed_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)),
            "pay_status"=>1,
        );
        D("Spend")->addSubsiteWhere($map);
        $res = $this->SpendModel
                    ->field("IFNULL(SUM(CASE WHEN pay_way > 0 THEN pay_amount ELSE 0 END),0) as cash_count,IFNULL(SUM(CASE WHEN pay_way = 0 THEN pay_amount ELSE 0 END),0) as balance_coin_count")
                    ->where($map)
                    ->find();
        $cash_spend["key_name"] = "cash_spend";
        $cash_spend["type"] = 1;

        $cash_spend["sort"] = 1;
        $cash_spend["sum_money"] = $res['cash_count'];
        $this->adddata[]=$cash_spend;

        $balance_coin_spend["key_name"] = "balance_coin_spend";
        $balance_coin_spend["type"] = 1;
        $balance_coin_spend["sort"] = 2;
        $balance_coin_spend["sum_money"] = $res['balance_coin_count'];
        $this->adddata[]=$balance_coin_spend;
    }
    //平台币充值(deposit/CoinPayOrder)玩家及会长充值的平台币总额
    protected function getBalanceCoinIncome()
    {
        $temparr = array(
            "key_name"=>'balance_coin_income',
            "type"=>1,
            "sort"=>3,
        );
        $map = array(
            "payed_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)),
            "pay_status"=>1
        );
        D("Spend")->addSubsiteWhere($map);
        $temparr['sum_money'] = $this->DepositModel->field("IFNULL(sum(pay_amount),0) pay_amount")->where($map)->find()['pay_amount'];
        //获取会长充值的平台币
        $map1= array(
            "pay_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)),
            "order_status"=>array("EGT",1)
        );
        $COMoney= $this->CoinPayOrderModel->field("IFNULL(sum(pay_amount),0) pay_amount")->where($map1)->find()['pay_amount'];
        $temparr['sum_money'] = number_format(($temparr['sum_money']*100+$COMoney*100)/100, 2, '.', '');
        $this->adddata[]=$temparr;
    }
    //超级签购买收入
    protected function getGameSupersignIncome()
    {
        $temparr = array(
            "key_name"=>'game_supersign_income',
            "type"=>1,
            "sort"=>4,
        );
        $map = array(
            "pay_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)),
            "pay_status"=>1
        );
        $temparr['sum_money'] = $this->GameSupersignModel->field("IFNULL(sum(pay_price),0) pay_price")->where($map)->find()['pay_price'];
        $this->adddata[]=$temparr;
    }
    //测试账号收入
    protected function getTestUserIncome()
    {
        $temparr = array(
            "key_name"=>'test_user_income',
            "type"=>1,
            "sort"=>5
        );
        // //获取测试白名单
        // $testlist = M("TestWhiteList",'tab_')->field("user_id")->select();
        // if($testlist){
        //    $testlist = implode(",",array_column($testlist, 'user_id'));
        // }else{
        //     $testlist = false; 
        // }
        // //获取现金充值
        // $map = array(
        //     "payed_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)),
        //     "pay_status"=>1,
        //     "pay_way"=>array("GT",0)
        // );
        // if($testlist) $map['user_id']=array("in",$testlist);
        // $cash_spend =  $this->SpendModel
        //                     ->field("IFNULL(SUM(pay_amount),0) as pay_amount")
        //                     ->where($map)
        //                     ->find()['pay_amount'];
        // //获取平台币充值
        // $map1 = array(
        //     "payed_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)),
        //     "pay_status"=>1
        // );
        // if($testlist) $map1['user_id']=array("in",$testlist);
        // $deposit = $this->DepositModel->field("IFNULL(sum(pay_amount),0) pay_amount")->where($map1)->find()['pay_amount'];
        //测试订单录入
        $map2 = array(
            "pay_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth))
        );
        addSubsiteWhere($map2,"partner_type");
        $test_pay_amount = $this->TestOrderModel->where($map2)->field("IFNULL(sum(pay_amount),0) pay_amount")->find()['pay_amount'];

        $temparr['sum_money'] = number_format(($test_pay_amount*100 )/100, 2, '.', '');

        $this->adddata[]=$temparr;
    }
    //奖罚收入
    protected function getRewardRecordIncome()
    {
        $map = array(
            "confirm_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)),
        );
        $rrres = M("RewardDetail","tab_")
                ->field("
                    IFNULL(SUM(CASE WHEN type = 1 THEN amount ELSE 0 END),0) as reward_count,
                    IFNULL(SUM(CASE WHEN type = 2 THEN amount ELSE 0 END),0) as fine_count
                    ")
                ->where($map)
                ->find();
        //奖励负,惩罚正
        $this->adddata[] = array(
            "key_name"=>'reward_count',
            "type"=>1,
            "sort"=>6,
            'sum_money'=>$rrres['reward_count']
        );
        $this->adddata[] = array(
            "key_name"=>'fine_count',
            "type"=>1,
            "sort"=>7,
            'sum_money'=>$rrres['fine_count']
        );
    }
    /**
     * 获取类型为2,3的数据/按合作方类型
     */
    public function setPromoteMoney()
    {
        $SpendModel = SM("spend",'tab_');
        $map = array(
            "payed_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)),
            "pay_status"=>1,
        );
        D("Spend")->addSubsiteWhere($map,"s");
        $res = $SpendModel
                    ->alias('s')
                    ->field("IFNULL(SUM(CASE WHEN pay_way > 0 THEN pay_amount ELSE 0 END),0) as cash_count,
                            IFNULL(SUM(CASE WHEN pay_way = 0 THEN pay_amount ELSE 0 END),0) as balance_coin_count,
                            IFNULL(SUM(CASE WHEN pay_way = -1 THEN pay_amount ELSE 0 END),0) as bind_coin_count,
                            promote.company_belong")
                    ->where($map)
                    ->join("tab_promote promote ON s.promote_id = promote.id", "left")
                    ->group("company_belong")
                    ->select();
        $inside_count = 0;//内团
        $outer_count = 0;//外团
        $outer_branch_count = 0;//外团分发
        $other_group_count = 0;//其他
        

        $inside_nobind_count = 0;
        $outer_nobind_count = 0;
        $outer_branch_nobind_count = 0;
        $other_group_nobind_count = 0;//其他
        foreach ($res as $k => $v) {
            if($v['company_belong'] == 1){
                $outer_count = $v['cash_count']*100+$v['balance_coin_count']*100+$v['bind_coin_count']*100;
                $outer_nobind_count = $v['cash_count']*100+$v['balance_coin_count']*100;
            }elseif($v['company_belong'] == 2){
                //外团分发
                $outer_branch_count = $v['cash_count']*100+$v['balance_coin_count']*100+$v['bind_coin_count']*100;
                $outer_branch_nobind_count = $v['cash_count']*100+$v['balance_coin_count']*100;
            }elseif($v['company_belong'] == 3){
                //其他
                $other_group_count = $v['cash_count']*100+$v['balance_coin_count']*100+$v['bind_coin_count']*100;
                $other_group_nobind_count = $v['cash_count']*100+$v['balance_coin_count']*100;
            }else{
                //有可能存在官方渠道,company_belong=null
                $inside_count += ($v['cash_count']*100+$v['balance_coin_count']*100+$v['bind_coin_count']*100);
                $inside_nobind_count += ($v['cash_count']*100+$v['balance_coin_count']*100);
            }
        }

        //处理数据
        $this->adddata[] = array(
            "key_name"=>'inside_count',
            "type"=>2,"sort"=>1,
            "sum_money"=>number_format($inside_count/100, 2, '.', '')
        );
        $this->adddata[] = array(
            "key_name"=>'outer_count',
            "type"=>2,"sort"=>2,
            "sum_money"=>number_format($outer_count/100, 2, '.', '')
        );
        $this->adddata[] = array(
            "key_name"=>'outer_branch_count',
            "type"=>2,"sort"=>3,
            "sum_money"=>number_format($outer_branch_count/100, 2, '.', '')
        );
        $this->adddata[] = array(
            "key_name"=>'other_group_count',
            "type"=>2,"sort"=>4,
            "sum_money"=>number_format($other_group_count/100, 2, '.', '')
        );
        //不含绑定币
        $this->adddata[] = array(
            "key_name"=>'inside_count',
            "type"=>3,"sort"=>1,
            "sum_money"=>number_format($inside_nobind_count/100, 2, '.', '')
        );
        $this->adddata[] = array(
            "key_name"=>'outer_count',
            "type"=>3,"sort"=>2,
            "sum_money"=>number_format($outer_nobind_count/100, 2, '.', '')
        );
        $this->adddata[] = array(
            "key_name"=>'outer_branch_count',
            "type"=>3,"sort"=>3,
            "sum_money"=>number_format($outer_branch_nobind_count/100, 2, '.', '')
        );
        $this->adddata[] = array(
            "key_name"=>'other_group_count',
            "type"=>3,"sort"=>4,
            "sum_money"=>number_format($other_group_nobind_count/100, 2, '.', '')
        );

        $unsettlement_count = 0;
        $unsettlement_nobind_count = 0;

        $unmap = $map;
        $unmap['is_check'] = 2;
        $unSettlementRes = $SpendModel
            ->alias('s')
            ->field("IFNULL(SUM(CASE WHEN pay_way > 0 THEN pay_amount ELSE 0 END),0) as cash_count,
                            IFNULL(SUM(CASE WHEN pay_way = 0 THEN pay_amount ELSE 0 END),0) as balance_coin_count,
                            IFNULL(SUM(CASE WHEN pay_way = -1 THEN pay_amount ELSE 0 END),0) as bind_coin_count,
                            promote.company_belong")
            ->where($unmap)
            ->join("tab_promote promote ON s.promote_id = promote.id", "left")
            ->select();

        foreach ($unSettlementRes as $key => $value) {

            $unsettlement_count += $value['cash_count']*100 + $value['balance_coin_count']*100 + $value['bind_coin_count']*100;
            $unsettlement_nobind_count += $value['cash_count']*100 + $value['balance_coin_count']*100;

        }
        //不结算金额
        $this->adddata[] = array(
            "key_name"=>'unsettlement_count',
            "type"=>2,"sort"=>5,
            "sum_money"=>number_format($unsettlement_count/100, 2, '.', '')
        );
        //不结算金额不含绑币
        $this->adddata[] = array(
            "key_name"=>'unsettlement_count',
            "type"=>3,"sort"=>5,
            "sum_money"=>number_format($unsettlement_nobind_count/100, 2, '.', '')
        );

    }

    public function setChannelMoney(){

        $Channel = $this->getChannelCount($Channel);
        foreach( $Channel as $k=>$v){
            $this->adddata[] = array(
                "key_name"=>$k,
                "type"=>4,
                "sort"=>$k,
                "sum_money"=>number_format($v, 2, '.', '')
            );
        }
    }
    //获取Channel
    protected function getChannelCount(){
        $map = array(
            "s.payed_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)),
            "s.pay_status"=>1,
            "s.merchant_id"=>["GT","0"]
        );
        D("Spend")->addSubsiteWhere($map,"s");
        $spres=$this->SpendModel
                    ->alias("s")
                    ->field("SUM(s.pay_amount) pay_amount,p.channel")
                    ->where($map)
                    ->group("p.channel")
                    ->join("left join tab_payment_merchant p ON p.id = s.merchant_id")
                    ->select();

        //超级签
        $ss_map = [
            "s.pay_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)),
            "s.pay_status"=>1
        ];
        $ssres=$this->GameSupersignModel
                    ->alias("s")
                    ->field("SUM(s.pay_price) pay_amount,p.channel")
                    ->join("left join tab_payment_merchant p ON p.id = s.merchant_id")
                    ->group("p.channel")
                    ->where($ss_map)
                    ->select();

        //玩家购买平台币
        $dp_map =[
            "s.payed_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)),
            "s.pay_status"=>1
        ];
        D("Deposit")->addSubsiteWhere($dp_map,"s");
        $dpres=$this->DepositModel
                ->alias("s")
                ->field("SUM(s.pay_amount) pay_amount,p.channel")
                ->join("left join tab_payment_merchant p ON p.id = s.merchant_id")
                ->group("p.channel")
                ->where($dp_map)
                ->select();

        //会长充值平台币
        $co_map =[
            "s.pay_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)),
            "s.order_status"=>array("EGT",1)
        ];
        $cores=$this->CoinPayOrderModel
                ->alias("s")
                ->field("SUM(s.pay_amount) pay_amount,p.channel")
                ->join("left join tab_payment_merchant p ON p.id = s.merchant_id")
                ->group("p.channel")
                ->where($co_map)
                ->select();

        //测试的订单
        $to_map =[
            "s.pay_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)),
            "s.merchant_id"=>["GT","0"]
        ];
        addSubsiteWhere($to_map,"partner_type");
        $tores=$this->TestOrderModel
                ->alias("s")
                ->field("SUM(s.pay_amount) pay_amount,p.channel")
                ->join("left join tab_payment_merchant p ON p.id = s.merchant_id")
                ->group("p.channel")
                ->where($to_map)
                ->select();
        $dbres = array_merge($spres,$ssres,$dpres,$cores,$tores);
        $Channel = [];
        foreach ($dbres as $k=>$v){
            $Channel["c".$v['channel']] += $v['pay_amount'];
        }
        return $Channel;
    }

    public function setPaywayMoney(){
        $Ways = $this->getPaywayCount();
        foreach($Ways as $k=>$v){
            $this->adddata[] = array(
                "key_name"=>$k,
                "type"=>5,
                "sort"=>$k,
                "sum_money"=>number_format($v, 2, '.', '')
            );
        }
    }
    //获取Channel
    protected function getPaywayCount(){
        $map = array(
            "s.payed_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)),
            "s.pay_status"=>1,
            "s.merchant_id"=>["GT","0"],
        );
        D("Spend")->addSubsiteWhere($map,"s");
        $spres=$this->SpendModel
                    ->alias("s")
                    ->field("SUM(s.pay_amount) pay_amount,s.merchant_way")
                    ->where($map)
                    ->group("s.merchant_way")
                    ->select();

        //超级签
        $ss_map = [
            "s.pay_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)),
            "s.pay_status"=>1
        ];
        $ssres=$this->GameSupersignModel
                    ->alias("s")
                    ->field("SUM(s.pay_price) pay_amount,s.merchant_way")
                    ->group("s.merchant_way")
                    ->where($ss_map)
                    ->select();

        //玩家购买平台币
        $dp_map =[
            "s.payed_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)),
            "s.pay_status"=>1
        ];
        D("Deposit")->addSubsiteWhere($dp_map,"s");
        $dpres=$this->DepositModel
                ->alias("s")
                ->field("SUM(s.pay_amount) pay_amount,s.merchant_way")
                ->group("s.merchant_way")
                ->where($dp_map)
                ->select();

        //会长充值平台币
        $co_map =[
            "s.pay_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)),
            "s.order_status"=>array("EGT",1)
        ];
        $cores=$this->CoinPayOrderModel
                ->alias("s")
                ->field("SUM(s.pay_amount) pay_amount,s.merchant_way")
                ->group("s.merchant_way")
                ->where($co_map)
                ->select();

        //测试的订单
        $to_map =[
            "s.pay_time"=> array('BETWEEN',array($this->beginThismonth, $this->endThismonth)),
            "s.merchant_id"=>["GT","0"]
        ];
        addSubsiteWhere($to_map,"partner_type");
        $tores=$this->TestOrderModel
                ->alias("s")
                ->field("SUM(s.pay_amount) pay_amount,s.merchant_way")
                ->group("s.merchant_way")
                ->where($to_map)
                ->select();
        
        $dbres = array_merge($spres,$ssres,$dpres,$cores,$tores);
        $Ways =  [];
        foreach ($dbres as $k=>$v){
            $Ways["w".$v['merchant_way']] += $v['pay_amount'];
        }
        return $Ways;
    }

    public function addDb()
    {
        foreach ($this->adddata as $k=> &$v) {
            $v["count_month"] = $this->month;
            $v["count_year"] = $this->year;
            $v["create_time"] = $this->nowdata;
        }
       $res = $this->FinancialSummaryModel->addAll($this->adddata);
       if(!$res){
           echo "DB save error";
       }else{

       }
    }

    public function setMerchantMoney() {

        $map = [];
        $map['payed_time'] = ['BETWEEN',[$this->beginThismonth, $this->endThismonth]];
        addSubsiteWhere($map,"partner_type");
        //游戏充值金额
        $data = M("spend use index(pay_channel)","tab_")
            ->field("SUM(CASE WHEN merchant.id is not null and tab_test_white_list.user_id is null THEN pay_amount ELSE 0 END) as cash_amount,
            SUM(CASE WHEN merchant.id is not null and tab_test_white_list.user_id is not null THEN pay_amount ELSE 0 END) as test_amount,
            0 coin_amount,0 offcial_amount,0 spread_amount,0 supersign_amount,0 test_order_amount,merchant_id,name,channel,identifier,
            payed_time,game_id,main_name,merchant_way,merchant.account")
            ->join("left join tab_test_white_list on tab_spend.user_id=tab_test_white_list.user_id")
            ->join("left join tab_payment_merchant merchant on merchant.id=tab_spend.merchant_id")
            ->where(['pay_status'=>1,'tab_spend.pay_way'=>['egt',1],'merchant.status'=>1,'merchant.type'=>1])
            ->where($map)
            ->group("merchant_id")
            ->select(false);

        //平台币充值金额计算
        $coinData = M('deposit','tab_')
//            ->join("inner join tab_deposit on tab_pay_info.order_id=tab_deposit.pay_order_number")
            ->join("left join tab_test_white_list on tab_test_white_list.user_id=tab_deposit.user_id")
            ->join("left join tab_payment_merchant merchant on merchant.id=tab_deposit.merchant_id")
            ->field("0 cash_amount,SUM(CASE WHEN merchant.id is not null and pay_source=2 and tab_test_white_list.user_id is not null THEN pay_amount ELSE 0 END) as test_amount,
            SUM(CASE WHEN merchant.id is not null and tab_test_white_list.user_id is null and pay_source=2 THEN pay_amount ELSE 0 END) as coin_amount,
            0 offcial_amount,0 spread_amount,0 supersign_amount,0 test_order_amount,merchant_id,name,channel,identifier,payed_time,0 game_id,main_name,merchant_way,merchant.account")
            ->where(['pay_status'=>1,'tab_deposit.pay_way'=>['egt',1],'merchant.status'=>1,'merchant.type'=>1])
            ->where($map)
            ->group("merchant_id")
            ->select(false);
        //官网金额
        $officalData = M('deposit','tab_')
            ->join("left join tab_test_white_list on tab_test_white_list.user_id=tab_deposit.user_id")
            ->join("left join tab_payment_merchant merchant on merchant.id=tab_deposit.merchant_id")
            ->field("0 cash_amount,SUM(CASE WHEN merchant.id is not null and pay_source=0 and tab_test_white_list.user_id is not null THEN pay_amount ELSE 0 END) as test_amount,
            0 as coin_amount,SUM(CASE WHEN merchant.id is not null and tab_test_white_list.user_id is null and pay_source=0 THEN pay_amount ELSE 0 END) as offcial_amount,
            0 spread_amount,0 supersign_amount,0 test_order_amount,merchant_id,name,channel,identifier,payed_time,0 as game_id,main_name,merchant_way,merchant.account")
            ->where(['pay_status'=>1,'tab_deposit.pay_way'=>['egt',1],'merchant.status'=>1,'merchant.type'=>1])
            ->where($map)
            ->group("merchant_id")
            ->select(false);
        $map['pay_time'] = $map['payed_time'];
        unset($map['payed_time']);
        if(isset($map['partner_type'])){
            unset($map['partner_type']);
        }
        //推广后台
        $spreadData = M("coin_pay_order","tab_")
            ->field("0 cash_amount,0 test_amount,0 coin_amount,0 offcial_amount,
            SUM(CASE WHEN merchant.id is not null THEN pay_amount ELSE 0 END) as spread_amount,0 supersign_amount,
            0 test_order_amount,merchant_id,name,channel,identifier,pay_time payed_time,0 game_id,main_name,merchant_way,merchant.account")
            ->join("left join tab_payment_merchant merchant on merchant.id=tab_coin_pay_order.merchant_id")
            ->where(['order_status'=>1,'tab_coin_pay_order.pay_way'=>['egt',1],'merchant.status'=>1,'merchant.type'=>1])
            ->where($map)
            ->group("merchant_id")
            ->select(false);

        //超级签数据
        $superSignData = M('game_supersign','tab_')
            ->field("0 cash_amount,
            SUM(CASE WHEN merchant.id is not null and tab_test_white_list.user_id is not null THEN pay_price ELSE 0 END) as test_amount,
            0 coin_amount,0 offcial_amount,0 spread_amount,
            SUM(CASE WHEN merchant.id is not null and tab_test_white_list.user_id is null THEN pay_price ELSE 0 END) as supersign_amount,
            0 test_order_amount,merchant_id,name,channel,identifier,pay_time payed_time,game_id,main_name,merchant_way,merchant.account")
            ->join("left join tab_payment_merchant merchant on merchant.id=tab_game_supersign.merchant_id")
            ->join("left join tab_test_white_list on tab_test_white_list.user_id=tab_game_supersign.user_id")
            ->where(['pay_status'=>1,'tab_game_supersign.pay_way'=>['egt',1],'merchant.status'=>1,'merchant.type'=>1])
            ->where($map)
            ->group("merchant_id")
            ->select(false);

        //测试环境内网平台订单
        addSubsiteWhere($map,"partner_type");
        $testOrder = M('test_order', 'tab_')
            ->where(['tab_test_order.pay_way'=>['egt',1]])
            ->field('0 cash_amount,0 test_amount,0 coin_amount,0 offcial_amount,0 spread_amount,0 supersign_amount,
            SUM(CASE WHEN merchant.id is not null THEN pay_amount ELSE 0 END) as test_order_amount,merchant_id,name,
            channel,identifier,pay_time payed_time,game_id,main_name,merchant_way,merchant.account')
            ->join("left join tab_payment_merchant merchant on merchant.id=tab_test_order.merchant_id")
            ->where(['merchant.status'=>1,'merchant.type'=>1])
            ->where($map)
            ->group("merchant_id")
            ->select(false);

        $sql = "{$data} UNION ALL {$coinData} UNION ALL {$officalData} UNION ALL {$spreadData} UNION ALL {$superSignData} UNION ALL {$testOrder}";

        $data = M()->db(0)->table("({$sql})a")
            ->field("sum(cash_amount) cash_amount,sum(test_amount) test_amount,
            sum(coin_amount) coin_amount,sum(offcial_amount) offcial_amount,
            sum(spread_amount) spread_amount,sum(supersign_amount) supersign_amount,
            sum(test_order_amount) test_order_amount,merchant_id,account,merchant_way,main_name,
            name,channel,identifier")
            ->where("name is not null")
            ->group("merchant_id")
            ->select();
        foreach ($data as $key => $value) {
            $sum = $value['cash_amount']+$value['test_amount']+$value['coin_amount']+
                $value['offcial_amount']+$value['spread_amount']+$value['supersign_amount']+$value['test_order_amount'];
            $this->adddata[] = array(
                "key_name"=>$value['identifier'],
                "type"=>6,"sort"=>8,
                "sum_money"=>number_format($sum, 2, '.', '')
            );
        }

    }
 
}