<?php

//use Admin\FinancialSummarySetController;
namespace Admin\Controller;

/**
 * 新功能之后还未来的急跑的脚本初始化数据
 * @author chenzhi
 */
class OldCountController extends \Think\Controller
{

    public function setLackStatementInfo() {

        $arrkey = [
            'A'=>'num',
            'B'=>'company_name',
            'C'=>'account',
            'D'=>'company_belong_str',
            'E'=>'company_relation_str',
            'F'=>'nickname',
            'G'=>'company_type',
            'H'=>'game_name',
            'I'=>'game_type_name',
            'J'=>'time',
            'K'=>'platform_amount',
            'L'=>'refund',
            'M'=>'ratio',
            'N'=>'increment_ratio',
            'O'=>'sum_money',
            'P'=>'reward',
            'Q'=>'fine',
            'R'=>'withhold',
            'S'=>'week_amount',
            'T'=>'sum_money_s',
            'U'=>'payee_name',
            'V'=>'bank_account',
            'W'=>'opening_bank',
            'X'=>'is_payment',
            'Y'=>'is_pay',
            'Z'=>'remark'
        ];

        header("Content-type: text/html; charset=utf-8");
        error_reporting(E_ALL);
        ini_set('display_errors', TRUE);
        ini_set('display_startup_errors', TRUE);

        define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');

        date_default_timezone_set('Asia/Shanghai');
        Vendor("PHPExcel.PHPExcel");

        $objPHPExcel = new \PHPExcel();
        $objReader = \PHPExcel_IOFactory::createReader('Excel2007');

        //设置模板文件
        $objPHPExcel = $objReader->load("Public/Admin/excel/set_info.xls");

        $objWriter = new \PHPExcel_Writer_Excel5($objPHPExcel);
        $currentSheet = $objPHPExcel->getSheet(0);  //读取excel文件中的第一个工作表
        $allColumn = 90; //取得最大的列号
        $allRow = $currentSheet->getHighestRow(); //取得一共有多少行
        $excelResult = [];  //声明数组
//        dump($allColumn);die();
        $startRow = 3;

        for ($j = $startRow; $j <= $allRow; $j++) {
            //从A列读取数据
            for ($k = 65; $k <= $allColumn; $k++) {
                // 读取单元格
                $excelResult[$j][$arrkey[chr($k)]] = (string)$objPHPExcel->getActiveSheet()->getCell(chr($k)."$j")->getValue();
            }
        }

        $handle_data = [];
        $pool_data = [];
//        dump($excelResult);

        foreach ($excelResult as $key => $value) {
            $is_continue = 0;
            $company_info = M("promote_company","tab_")->field("id company_id,company_type,bank_card,bank_cardname,bank_name,bank_address,ali_user,ali_account")->where(['company_name'=>$value['company_name']])->find();

            if(!$company_info) {
                continue;
            }

            $lack_data = M("company_lack_statement_info","tab_")
                ->where([
                    'company_id'=>$company_info['company_id']
                ])
                ->select();
            $time = explode('-',$value['time']);
            $game_data = M("game","tab_")->where(['relation_game_name'=>$value['game_name']])->find();

            foreach ($lack_data as $lkey => $lvalue) {

                $statement_info = json_decode($lvalue['statement_info'],true);
//                dump($statement_info);

                foreach ($statement_info as $skey => $svalue) {



                    $game_list = $svalue['game_list'];
                    foreach ($game_list as $gkey => $gvalue) {
//                        if($company_info['company_id'] == 73&&$gvalue['pay_amount']=='12.00' ) {
//                            dump($svalue);
//                            dump($gvalue['statement_begin_time'] == $time['0']);
//                            dump($gvalue['statement_end_time'] == $time['1']);
//                            dump($gvalue['relation_game_id'] == $game_data['relation_game_id']);
//                            dump($gvalue['pay_amount'] == number_format($value['platform_amount'],2,'.',''));
//                        }
                        //存在的游戏流水内部条件,如果存在不进行下列操作
                        if ($gvalue['statement_begin_time'] == $time['0']
                            &&$gvalue['statement_end_time'] == $time['1']
                            &&$gvalue['relation_game_id'] == $game_data['relation_game_id']
                            &&$gvalue['pay_amount'] == number_format($value['platform_amount'],2,'.','')) {

                            $is_continue = 1;

                        }

                    }

                }

            }
            //已经存在的单子结算
            if ($is_continue) {
                continue;
            }

            $handle_data[$value['time'].$company_info['company_id']]['company_id'] = $company_info['company_id'];
            $handle_data[$value['time'].$company_info['company_id']]['company_type'] = $company_info['company_type'];
            $handle_data[$value['time'].$company_info['company_id']]['company_name'] = $value['company_name'];

            $companyInfo = [
                'account'=>$value['account'],
                'company_relation_str'=>$value['company_relation_str'],
                'company_belong_str'=>$value['company_belong_str'],
                'company_type_str'=>$value['company_type'],
                'nickname'=>'nickname',
            ];

            $relation = M("company_relation","tab_")
                ->where("(first_company_id = {$company_info['company_id']} and first_company_type!=3) or (second_company_id = {$company_info['company_id']} and second_company_type!=3)")
                ->find();

            if ($relation['is_payment'] == 1) {
                $companyInfo['ali_user'] = $company_info['ali_user'];
                $companyInfo['ali_account'] = $company_info['ali_account'];
            } else {
                $companyInfo['payee_name'] = $company_info['bank_address'];
                $companyInfo['bank_account'] = $company_info['bank_card'];
                $companyInfo['opening_bank'] = $company_info['bank_name'];
            }

            $handle_data[$value['time'].$company_info['company_id']]['statement_money'] += $value['sum_money']-$value['fine']+$value['reward']-$value['withhold'];
            $handle_data[$value['time'].$company_info['company_id']]['pay_amount'] += $value['sum_money']-$value['fine']+$value['reward']-$value['withhold'];
            $handle_data[$value['time'].$company_info['company_id']]['company_info'] = json_encode($companyInfo);
            $handle_data[$value['time'].$company_info['company_id']]['platform_amount'] += $value['platform_amount'];
            $handle_data[$value['time'].$company_info['company_id']]['fine'] += $value['fine'];
            $handle_data[$value['time'].$company_info['company_id']]['reward'] += $value['reward'];


            $handle_data[$value['time'].$company_info['company_id']]['statement_begin_time'] = strtotime(str_replace('.','-',$time['0']));
            $handle_data[$value['time'].$company_info['company_id']]['statement_end_time'] = strtotime(str_replace('.','-',$time['1']))+86399;

            $p_id = M("promote","tab_")->field("id")->where(['account'=>$value['account']])->find();

            if ($handle_data[$value['time'].$company_info['company_id']]['statement_info']) {
                $handle_data[$value['time'].$company_info['company_id']]['statement_info'][0]['game_list'][] =
                    [
                        'pay_amount'=>$value['platform_amount'],
                        'relation_game_id'=>$game_data['relation_game_id'],
                        'game_name'=>$game_data['relation_game_name'],
                        'p_id'=>$p_id['id'],
                        'all_pay_amount'=>$value['platform_amount'],
                        'game_type_name'=>$game_data['game_type_name'],
                        'ratio'=>$value['ratio']*100,
                        'sum_money'=>number_format($value['sum_money'],2,'.',''),
                        'fax_ratio'=>0,
                        'statement_begin_time'=>$time['0'],
                        'statement_end_time'=>$time['1'],
                        'fine'=>$value['fine'],
                        'reward'=>$value['reward'],
                        'statement_type'=>0,
                        'refund'=>$value['refund'],
                        'withhold'=>$value['withhold'],
                        'increment_ratio'=>$value['increment_ratio']*100
                    ];
            }  else {
                $handle_data[$value['time'].$company_info['company_id']]['statement_info'][] = [
                    "account"=>$value['account'],
                    "game_list"=>[
                        [
                            'pay_amount'=>$value['platform_amount'],
                            'relation_game_id'=>$game_data['relation_game_id'],
                            'game_name'=>$game_data['relation_game_name'],
                            'p_id'=>$p_id['id'],
                            'all_pay_amount'=>$value['platform_amount'],
                            'game_type_name'=>$game_data['game_type_name'],
                            'ratio'=>$value['ratio']*100,
                            'sum_money'=>number_format($value['sum_money'],2,'.',''),
                            'fax_ratio'=>0,
                            'statement_begin_time'=>$time['0'],
                            'statement_end_time'=>$time['1'],
                            'fine'=>$value['fine'],
                            'reward'=>$value['reward'],
                            'statement_type'=>0,
                            'refund'=>$value['refund'],
                            'withhold'=>$value['withhold'],
                            'increment_ratio'=>$value['increment_ratio']*100
                        ]
                    ]
                ];
            }


//            $handle_data[$value['time'].$company_info['company_id']]['statement_info'] = $statement_info;
//            del_lack_ids

            $company_statement_pool = M("company_statement_pool","tab_")
                ->field("statement_num,del_lack_ids")
                ->where([
                    'statement_begin_time'=>$handle_data[$value['time'].$company_info['company_id']]['statement_begin_time'],
                    'statement_end_time'=>$handle_data[$value['time'].$company_info['company_id']]['statement_end_time'],
                    'company_type'=>2,
                    'withdraw_type'=>['neq',3]
                ])
                ->find();

            $handle_data[$value['time'].$company_info['company_id']]['statement_pool_num'] = $company_statement_pool['statement_num']?$company_statement_pool['statement_num']:"";
            $handle_data[$value['time'].$company_info['company_id']]['is_payment'] = $relation['is_payment'];
            $handle_data[$value['time'].$company_info['company_id']]['remark'] = $company_statement_pool['remark'];

        }
        $handle_data = array_values($handle_data);

//        dump($handle_data);

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

            $value['statement_info'] = json_encode($value['statement_info']);
            $lack_id = M("company_lack_statement_info","tab_")->add($value);
            $pool_data[$value['statement_pool_num']]['del_lack_ids'][] = $lack_id;
        }

        $lack_data324 = M("company_lack_statement_info","tab_")
            ->where([
                'id'=>324
            ])
            ->find();

        $lack_data324['fine'] = 5000;
        $lack_data324['statement_money'] = $lack_data324['statement_money']-5000;
        $lack_data324['pay_amount'] = $lack_data324['pay_amount']-5000;
        $statement_info324 = json_decode($lack_data324['statement_info'],true);
        $statement_info324[0]['game_list'][0]['fine'] = 5000;
        $lack_data324['statement_info'] = json_encode($statement_info324);
        M("company_lack_statement_info","tab_")
            ->where([
                'id'=>324
            ])->save($lack_data324);

        $lack_data334 = M("company_lack_statement_info","tab_")
            ->where([
                'id'=>334
            ])
            ->find();
        $lack_data334['fine'] = 2000;
        $lack_data334['statement_money'] = $lack_data334['statement_money']-2000;
        $lack_data334['pay_amount'] = $lack_data334['pay_amount']-2000;
        $statement_info334 = json_decode($lack_data334['statement_info'],true);
        $statement_info334[0]['game_list'][0]['fine'] = 2000;
        $lack_data334['statement_info'] = json_encode($statement_info334);
        M("company_lack_statement_info","tab_")
            ->where([
                'id'=>334
            ])->save($lack_data334);
        echo "success";
//        foreach ($pool_data as $key => $value) {
//
//            $pool_info = M("company_statement_pool","tab_")
//                ->where(['statement_num'=>$key])
//                ->find();
//
//            $del_lack_ids = $pool_info['del_lack_ids'].','.implode(',',$value['del_lack_ids']);
//            M("company_statement_pool","tab_")
//                ->where(['statement_num'=>$key])
//                ->save(['del_lack_ids'=>$del_lack_ids]);
//
//        }

//        M("company_lack_statement_info","tab_")->addAll($handle_data);

//        dump($handle_data);

    }

    public function updateStatementInfo() {

        $data = M("company_statement_info","tab_")
            ->where(['pay_status'=>['neq',0]])
            ->select();

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

            M("company_statement_info","tab_")
                ->where(['id'=>$value['id']])
                ->save([
                        'pay_verify_status'=>1,
                        'verify_time'=>$value['pay_time'],
                        'verify_member_id'=>1
                    ]);
        }

        $data = M("excel_statement_info","tab_")
            ->where("1=1")
            ->select();

        foreach ($data as $key => $value) {
            $statement_info = json_decode($value['statement_info'],true);
            $time = explode('-',$statement_info[0]['game_list'][0]['statement_time']);
            $start = strtotime(str_replace('.','-',$time[0]));
            $end = strtotime(str_replace('.','-',$time[1]));

            M("excel_statement_info","tab_")
                ->where(['id'=>$value['id']])
                ->save([
                    'statement_begin_time'=>$start,
                    'statement_end_time'=>$end
                ]);

//            dump($statement_info);
        }

        $data = M("excel_statement_info","tab_")
            ->where(['pay_status'=>['neq',0]])
            ->select();

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

            M("excel_statement_info","tab_")
                ->where(['id'=>$value['id']])
                ->save([
                    'verify_status'=>1,
                    'verify_time'=>$value['pay_time'],
                    'verify_member_id'=>1
                ]);
        }

        echo "success";

    }

    public function oldRewardChange() {

        $data = M("company_lack_statement_info","tab_")
            ->where("(fine > 0 or reward > 0) and company_type != 2")
            ->select();

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

            $statement_info = json_decode($value['statement_info'],true);
            $statement_info[0]['fine'] = $value['fine'];
            $statement_info[0]['reward'] = $value['reward'];
            $statement_info = json_encode($statement_info);

            M("company_lack_statement_info","tab_")->where(['id'=>$value['id']])->save(['statement_info'=>$statement_info]);

        }

        $data = M("company_statement_info","tab_")
            ->where("(fine > 0 or reward > 0) and company_type != 2")
            ->select();

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

            $statement_info = json_decode($value['statement_info'],true);
            $statement_info[0]['fine'] = $value['fine'];
            $statement_info[0]['reward'] = $value['reward'];
            $statement_info = json_encode($statement_info);

            M("company_statement_info","tab_")->where(['id'=>$value['id']])->save(['statement_info'=>$statement_info]);

        }

        echo "success";

    }

    public function changeCompanyGameidToPromoteGameid()
    {
        //默认设为
        $Promote = M("Promote","tab_");
        $PromoteCompany = M("promote_company","tab_");
        $p_res =  $PromoteCompany->field("id,game_ids")->select();

        foreach ($p_res as $k => $v) {
            if(!empty($v['game_ids'])){
                $savedata['game_ids'] = $this->changeRelationGameidToGameid($v['game_ids']);
                $Promote->where(["company_id"=>$v['id']])->save($savedata);
            }
        }
        echo "changeCompanyGameidToPromoteGameid success";
    }

    public function changeDevelopTypeData() {

        $is_save = M("promote","tab_")->where(['company_relation'=>2])->save(['company_relation'=>1]);

        $is_save = M("promote_company","tab_")->where(['develop_type'=>2])->save(['develop_type'=>1]);

        //更新tab_company_statement_info表的数据
        $company_statement = M("company_statement_info","tab_")->field("id,company_info")->where(['company_info'=>['like',"%自主开发及维护%"]])->select();

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

            $replace_statement = str_replace('自主开发及维护','自主开发',$value['company_info']);

            M("company_statement_info","tab_")->where(['id'=>$value['id']])->save(['company_info'=>$replace_statement]);

        }

        //更新tab_company_lack_statement_info表的数据
        $company_statement = M("company_lack_statement_info","tab_")->field("id,company_info")->where(['company_info'=>['like',"%自主开发及维护%"]])->select();

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

            $replace_statement = str_replace('自主开发及维护','自主开发',$value['company_info']);
            M("company_lack_statement_info","tab_")->where(['id'=>$value['id']])->save(['company_info'=>$replace_statement]);

        }

        echo "success\n";

    }

    /**
     * 公会关系及游戏迁移
     * 1. 迁移 公会company_relation到公司
     * 2. 游戏 game_ids
     * 3. 同步公司develop_type到公会
     */
    public function changeOldCompanyRelation()
    {
        //默认设为
        $Promote = M("Promote","tab_");
        $PromoteCompany = M("promote_company","tab_");
        $p_res =  $Promote->field("id,account,game_ids,company_relation,company_id")->where("level = 1")->group("company_id")->select();
        foreach ($p_res as $k => $v) {
            
            if($v['id'] < 1) continue;

            $savedata =[ "id"=>$v['company_id'] ];
            if($v['company_relation'] == 1){
                $savedata['develop_type'] = 3;
            }else{
                $savedata['develop_type'] = 2;
            }
            $savedata['game_ids'] = $this->changeGameidToRelationGameid($v['game_ids']);
            $PromoteCompany->save($savedata);

            $p_data = [
                "company_relation"=>$savedata['develop_type']
            ];
            $Promote->where("company_id = {$v['company_id']}")->save($p_data);
        }
        echo "changeOldCompanyRelation success";
    }
    protected function changeGameidToRelationGameid($ids,$type=false)
     {
        $rid = M('game', 'tab_')->field('relation_game_id')->where(["id"=>["in",$ids]])->group("relation_game_id")->select();
        if($type){
            return array_column($rid,'relation_game_id');
        }else{
            return implode(",",array_column($rid,'relation_game_id'));
        }
     }
     protected function changeRelationGameidToGameid($ids,$type=false)
    {
        $rid = M('game', 'tab_')->field('id')->where(["relation_game_id"=>["in",$ids]])->select();
        if($type){
            return array_column($rid,'id');
        }else{
            return implode(",",array_column($rid,'id'));
        }
        
    }

    /**
     * 优化旧表数值,新表需要将 开票税点及渠道费 * 100
     */
    public function ChangePartnerField_ChannelRateInvoiceRate()
    {
        if(time() > 1596211200){
            die("该函数已失效");
        }
        $Partner = M("Partner","tab_");
        $dbres =  $Partner->field("id,channel_rate,invoice_rate")->select();
        foreach ($dbres as $k => &$v) {
            $v['channel_rate']  = $v['channel_rate']*100;
            $v['invoice_rate']  = $v['invoice_rate']*100;
            $Partner->save($v);
        }
        echo "ChangePartnerField_ChannelRateInvoiceRate success";
    }
    /**
     * 新的游戏比例后的数据迁移
     * 重复执行将会叠加数据,请勿重复执行
     */
    public function PromoteToCompanyRatioInit()
    {
        //获取旧数据
        $oldres = M("promote_game_ratio","tab_")->field("promote_id,relation_game_id,ratio,turnover_ratio,begin_time,end_time")->group("promote_id,relation_game_id")->select();
        $adddata = [];
        $CompanyGameRatio = M("company_game_ratio","tab_");
        foreach ($oldres as $k => &$v) {
            $comoany_id = $this->promoteIdToCompanyId($v['promote_id']);
            unset($v['promote_id']);
            $v['company_id'] = $comoany_id ;
            $adddata[$comoany_id] = $v;
        }
        foreach($adddata as $k => &$v){
            $map = [
                "company_id"=>$v['company_id'],
                "relation_game_id"=>$v['relation_game_id']
            ];
            $cres = $CompanyGameRatio->where($map)->find();
            if(empty($cres)){
                $CompanyGameRatio->add($v);
            }
        }
        echo "PromoteToCompanyRatioInit success";
    }
    protected function promoteIdToCompanyId($promote_id)
    {
        return M("promote","tab_")->field("company_id")->where("id='{$promote_id}'")->find()['company_id'];
    }
    
    /**
     * 财务分类汇总统计旧数据聚合
     */
    public function FinancialSummaryInit()
    {
        $sql = "truncate table tab_financial_summary";
        if(IS_SUBSITE){
            $res =M()->db(1,SUBSITE_DB)->execute($sql);
        }else {
             //清空数据库
            $res = M()->execute($sql);
        }
        echo "tab_financial_summary 清空成功".PHP_EOL;
        //获取19年9月到上个月的所有月份
        $monthList = $this->getMonthsList();
        $Financial = new FinancialSummarySetController();
        foreach ($monthList as $k => $v) {
            $Financial->setMonthFinancialSummary($v);
        }
    }
    /*
    *超级签订单新增识别微信或者支付宝2019-12-11
    */
    public function gameSupersignPaywayInit()
    {
        $map = array(
            "pay_status"=>1,
            "pay_way"=>0
        );
        $GameSupersign = M("GameSupersign","tab_");
        $dbres = $GameSupersign->field("id,trade_id")->where($map)->select();
        $countdb = count($dbres);
        if($countdb < 1){
            die("No initialization required");
        }
        foreach ($dbres as $key => $value) {
            $savedata = array(
                "id"=>$value['id']
            );
            $tmp = (int)substr($value['trade_id'],0,4);
            if($tmp > 3000){
                $savedata['pay_way'] = 2; //微信
            }else{
                $savedata['pay_way'] = 1;//支付宝
            }
           $tres = $GameSupersign->save($savedata);
           if($tres === false){
            die("DB ERROR");
           }
        }
        die("init ok");
    }
    /**
     * mend表新增paymount字段用于统计补链前归属金额 
     */
    public function mendPayamountInit()
    {
        //获取符合条件的
        $map = array("pay_amount"=>0);
        $Mend = M("mend","tab_");
        $Spend = M("Spend","tab_");
        $Mend->where($map)->select();
        $dbres = $Mend->field("id,user_account,promote_account,order_time,create_time")->where($map)->select();
        $countdb = count($dbres);
        if($countdb < 1) die("No initialization required");
        echo "总需要统计数:{$countdb}".PHP_EOL;
        foreach ($dbres as $key => $value) {
            $savedata = array("id"=>$value['id']);
            $saveflag = false;
            //设置订单时间
            $order_time = $value['order_time'];
            if($value['order_time'] == 0){
                $saveflag = true;
                $savedata['order_time'] = $value['create_time'];
                $order_time = $savedata['create_time'];
            }
            //获取金额
            $smap = array(
                "user_account"=>$value['user_account'],
                "promote_account"=>$value['promote_account'],
                "pay_time"=>array("LT",$order_time),
                "pay_status"=>1
            );
            $pay_amount = $Spend->field("IFNULL(sum(pay_amount),0) pay_amount")->where($smap)->find()["pay_amount"];
            if($pay_amount > 0){
                $saveflag = true;
                $savedata['pay_amount'] = $pay_amount;
            }
            if($saveflag){
                $tres = $Mend->save($savedata);
                if($tres === false){
                    die("DB ERROR");
                }
            }
            if( $key % 20 == 0){
                $j = (floor)($key/$countdb*100);
                echo "当前进度:{$j}%".PHP_EOL;
            }
            
        }
        die("init ok");
    }
    /**
     * 修改公会内外团关系跟随公司 旧数据跟随 20200318
     */
    public function promoteCompanyBelongInit()
    {
        //获取所有公司
       $comoany =  M("PromoteCompany","tab_")->field("id,company_belong,develop_type")->select();
       $comoany[] = ["id"=>0,"company_belong"=>0,"develop_type"=>0]; //海南万盟
       $count = count($comoany);
       $promote = M("Promote","tab_");
       for ($i=0; $i < $count; $i++) { 
           $savedata = array(
             "company_belong"=>$comoany[$i]['company_belong'],
             "company_relation"=>$comoany[$i]['develop_type'],
           );
           $tmpid = $comoany[$i]['id'];
           $promote->where("company_id ='{$tmpid}'")->save($savedata);
       }
       die("promoteCompanyBelongInit success");
    }
    //获取公司月结所需要的所有月份截止至上个月
    public function getMonthsList()
    {
        $start_month = "2019-09";

        $temp = strtotime(date('Y-m-01 00:00:00',strtotime('-1 month')));
        $end_month = date('Y',$temp)."-".date('m',$temp);

        $time_arr = [];
        $begin = new \DateTime($start_month);
        $end = new \DateTime($end_month);
        $end = $end->modify('+1 month');
        $interval = new \DateInterval('P1M');
        $daterange = new \DatePeriod($begin, $interval ,$end);
        foreach($daterange as $date){
            $time_arr[] = $date->format("Y-m");
        }
        return $time_arr;
    }
    
    
    
}