<?php

namespace Admin\Controller;
/**
 * 上下游结算单
 * @author cz
 */
class CompanyStatementController extends ThinkController
{
    public $CompanyType = [
        "1"=>"上游cp公司",
        "2"=>"联运下游渠道公司"
    ];
    public $CompanyBelong = [
        "0"=>"下游内团",
        "1"=>"下游外团",
        "2"=>"下游分发",
        "3"=>"下游无",
        "9"=>"上游"
    ];
    public $VerifyStatus=[
        "-3"=>"汇总撤销",
        "-2"=>"审核拒绝",
        "-1"=>"管理员审批拒绝",
        "0"=>"未审批",
        "1"=>"管理员审核通过",
        "2"=>"审核通过",
        "3"=>"已汇总"
    ];
    public $ConfirmStatus=[
        "0"=>"未发起",
        "1"=>"已发起",
        "2"=>"已确认"
    ];
    public $admininfo;
    public $DBModel;
    public function _initialize()
    {
        $this->admininfo = $_SESSION['onethink_admin']['user_auth'];
        $this->DBModel = M("CompanyStatement","tab_");
        parent::_initialize();
    }
    public function lists() {
        $params = I('get.');
        $page = $params['p'] ? intval($params['p']) : 1;
        $row = $params['row'] ? intval($params['row']) : 10;
        //权限分配
        if(!IS_ROOT){
            $this->OpAuthList= getModuleControllerAuth();
        }
        $this->assign('menubtn',$this->menuAuth());

        $map = [
            "_string"=>"1=1"
        ];
        if (isset($_REQUEST['time_start']) && isset($_REQUEST['time_end'])) {
            $time_start = strtotime($_REQUEST['time_start']);
            $time_end = strtotime($_REQUEST['time_end'])+ 86399;
            $map["_string"] =  "(statement_begin_time BETWEEN {$time_start} AND {$time_end}) OR (statement_end_time BETWEEN {$time_start} AND {$time_end})";
        } elseif (isset($_REQUEST['time_start'])) {
            $time_start = strtotime($_REQUEST['time_start']);
            $map["_string"] =  "(statement_begin_time >= {$time_start} ) OR (statement_end_time >= {$time_start})";
        } elseif (isset($_REQUEST['time_end'])) {
            $time_end = strtotime($_REQUEST['time_end'])+ 86399;
            $map["_string"] =  "(statement_begin_time <= {$time_end} ) OR (statement_end_time <= {$time_end})";
        }

        if (isset($_REQUEST['time_start2']) && isset($_REQUEST['time_end2'])) {
            $map['op_time'] = ['between', [strtotime($_REQUEST['time_start2']), strtotime($_REQUEST['time_end2']) + 86399]];
        } elseif (isset($_REQUEST['time_start2'])) {
            $map['op_time'] = ['EGT', strtotime($_REQUEST['time_start2'])];
        } elseif (isset($_REQUEST['time_end2'])) {
            $map['op_time'] = ['ELT', strtotime($_REQUEST['time_end2']) + 86399];
        }

        $typeflag = false;
        if (isset($_REQUEST['withdraw_type'])) {
            if($_REQUEST['withdraw_type'] == 1){
                $typeflag = 1;//月结
                $map["withdraw_type"] = 1;
            }else{
                $typeflag = 2;//周结
                $map["withdraw_type"] = ["in",[0,2]];
            }
        }
        if (isset($_REQUEST['withdraw_type2'])) {
            if($_REQUEST['withdraw_type2'] == 2){
                if($typeflag == 1){ //月结的补点找不到
                    $map['withdraw_type'] = 999;
                }else{ //周结的补点就是补点
                    $map['withdraw_type'] = 2;
                }
            }else{
                if($typeflag == 1){//月结的正常=月结
                    $map['withdraw_type'] = 1;
                }elseif($typeflag == 2){//周结的正常=周结
                    $map['withdraw_type'] = 0;
                }else{//没选的正常是 非补点
                    $map['withdraw_type'] = ["in",[0,1]];
                }
            }
        }
        //其他
        if(isset($_REQUEST['company_type'])){
           if($_REQUEST['company_type'] == 1){
                $map['_string'] .= " AND company_belong='9'";
           }else{
                $map['_string'] .= " AND company_belong <> '9'";
           }
        }
        if(isset($_REQUEST['company_belong'])){
            $map['company_belong'] = $_REQUEST['company_belong'];
        }
        
        if(isset($_REQUEST['company_id'])){
            $map['company_id'] = $_REQUEST['company_id'];
        }
        if(isset($_REQUEST['company_name'])){
            $map['company_name'] =["LIKE","%{$_REQUEST['company_name']}%"];
        }
        if(isset($_REQUEST['verify_status'])){
            $map['verify_status'] = $_REQUEST['verify_status'];
        }
        if(isset($_REQUEST['confirm_status'])){
            $map['confirm_status'] = $_REQUEST['confirm_status'];
        }
        // $this->checkListOrCountAuthRestMap($map);//导出权限
        //条件end
        $data = M("company_statement","tab_")
            ->field("id,withdraw_type,company_name,company_belong,statement_begin_time,statement_end_time,statement_money,platform_amount,verify_status,verify_log,confirm_status,confirm_log,op_time,remark")
            ->where($map)
            ->order("FIELD(verify_status,0,1,-1,2,3,-2,-3),id desc")->page($page,$row)->select();
        foreach($data as $k => &$v) {

            $v['statement_begin_time'] = date('Y-m-d',$v['statement_begin_time']);
            $v['statement_end_time'] = date('Y-m-d',$v['statement_end_time']);

            $v['company_belong'] = $this->CompanyBelong[$v['company_belong']];
            $v['op_time'] = date('Y-m-d H:i:s',$v['op_time']);
            $v["valid"] = "{$v['statement_begin_time']} ~ {$v['statement_end_time']}";


            $v['withdraw_type_1'] = ($v['withdraw_type'] == 1 ? "月结" :"周结");
            $v['withdraw_type_2'] = ($v['withdraw_type'] == 2 ? "补点" :"正常结算");

            $v['verify_log'] = json_decode($v['verify_log'], true);
            $v['confirm_log'] = json_decode($v['confirm_log'], true);
            if (isset($params['export'])) {
                $symbol = "\n";
            } else {
                $symbol = "<br>";
            }
            $v["create"]= "{$v['verify_log']['create_user']} {$symbol} {$v['verify_log']['create_time']}";
            if(isset($v['verify_log']['admin_user'])){
                if($v['verify_status'] == -1){
                    $ts = "管理员审核拒绝";
                }else{
                    $ts = "管理员审核通过";
                }
                $v["admin"]= "{$ts}({$v['verify_log']['admin_user']}) {$symbol} {$v['verify_log']['admin_time']}";
            }else{
                $v["admin"] = '--';
            }

            if(isset($v['verify_log']['verify_user'])){
                if($v['verify_status'] == -2){
                    $ts = "审核拒绝";
                }else{
                    $ts = "审核通过";
                }
                $v["verify"]= "{$ts}({$v['verify_log']['verify_user']}) {$symbol} {$v['verify_log']['verify_time']}";
            }else{
                $v["verify"] = '--';
            }

            if(isset($v['confirm_log']['launch_user'])){
                $ts = "已发起";
                $v["launch"]= "{$ts}({$v['confirm_log']['launch_user']}) {$symbol} {$v['confirm_log']['launch_time']}";
            }else{
                $v["launch"] = '--';
            }

            if(isset($v['confirm_log']['confirm_user'])){
                $ts = "已确认";
                $v["confirm"]= "{$ts}({$v['confirm_log']['confirm_user']}) {$symbol} {$v['confirm_log']['confirm_time']}";
            }else{
                $v["confirm"] = '--';
            }
            if(isset($v['verify_log']['pool_user'])){
                if($v['verify_status'] == -3){
                    $ts = "撤销汇总";
                    $v["pool"]= "{$ts}({$v['verify_log']['pool_user']}){$symbol} {$v['verify_log']['pool_time']}";
                }else{
                    $ts = "已汇总";
                    $v["pool"]= "{$ts}({$v['verify_log']['pool_user']}){$symbol}汇总单:{$v['verify_log']['pool_num']}{$symbol} {$v['verify_log']['pool_time']}";
                }
                
            }else{
                $v["pool"] = '--';
            }
            $v['oplist'] = $this->OpAuth($v);
        }
        $count =  M("company_statement","tab_")->field("count(id) count,IFNULL(SUM(CASE WHEN withdraw_type < 2 THEN platform_amount ELSE 0 END),0) as platform_amount,SUM(statement_money) as statement_money")->where($map)->find();
        // dd($count);
        $params['p'] = $page;
        $params['row'] = $row;
        $page = set_pagination($count['count'], $row, $params);
        if ($page) {
            $this->assign('_page', $page);
        }
        
        $this->assign('data',$data);
        $this->assign('count',$count);
        $this->assign('CompanyType',$this->CompanyType);
        $this->assign('CompanyBelong',$this->CompanyBelong);
        $this->assign('VerifyStatus',$this->VerifyStatus);
        $this->assign('ConfirmStatus',$this->ConfirmStatus);
        $this->display();

    }
    //查看
    public function viewStatement()
    {
        if(!isset($_REQUEST['id'])){
            $this->error('参数错误');
        }
        $id = $_REQUEST['id'];
        //获取基本信息
        $dbres = M("CompanyStatement","tab_")->where("id='{$id}'")->find();
        $first_party_info = json_decode($dbres['first_party_info'],true);
        $second_party_info = json_decode($dbres['second_party_info'],true);
        $statement_info = json_decode($dbres['statement_info'],true);
        
        if($dbres['pay_type'] == 2){
            $company = $second_party_info['partner'];
            $pyinfo = $second_party_info;
            $fkf_pyinfo = $first_party_info;
        }else{
            $company = $first_party_info['partner'];
            $pyinfo = $first_party_info;
            $fkf_pyinfo = $second_party_info;
        }
        $senddata = array(
            "company"=>$company,
            "payinfo"=>$pyinfo,
            "fkf_payinfo"=>$fkf_pyinfo,
            "first_part_company"=>$first_party_info['partner'],
            "second_part_company"=>$second_party_info['partner'],
            "pay_type"=>$dbres['pay_type'],
            "withdraw_type"=>$dbres['withdraw_type'],//2补丁
            "first_party_info"=>$first_party_info,
            "second_party_info"=>$second_party_info,
            "statement_info"=>$statement_info,
            "statement_count"=>array("pay_amount"=>$dbres['pay_amount'],"statement_money"=>$dbres['statement_money'],"big_ratio_money"=>convertAmountToCn($dbres['statement_money']))
        );
        $this->assign("data",$senddata);

        if($dbres["company_belong"] == 9){
            //上游
            $this->display("viewCpStatement");
        }else{
            if($dbres["company_type"] == 1){
                $this->display("viewPcStatement");
            }else{
                $this->display("viewPuStatement");
            }
            
        }
    }
    //编辑
    public function editStatement()
    {
        if ($_POST) {
            $params = I('post.');
            if(!isset($params['id'])){
                $this->error('参数错误');
            }
            $params['first_party_info'] = json_encode($params['first_party_info'],JSON_UNESCAPED_UNICODE);
            $params['second_party_info'] = json_encode($params['second_party_info'],JSON_UNESCAPED_UNICODE);
            $params['statement_info'] = json_encode($params['statement_info'],JSON_UNESCAPED_UNICODE);
            
            $y = M("CompanyStatement", "tab_")->where("id='{$params['id']}'")->find();
            if($y['first_party_info'] != $params['first_party_info'] || $y['second_party_info'] != $params['second_party_info'] || $y['statement_info'] != $params['statement_info']){
                $params['verify_status'] = 0;
                $params['verify_log'] = json_encode(["create_user"=>$this->admininfo["username"],"create_time"=>date("Y-m-d H:i:s")]);
                $params['op_time'] = time();
                M("CompanyStatement","tab_")->save($params);
            }
            $this->ajaxReturn(["code"=>0,"msg"=>"ok"]);
        }else{
            if (!isset($_REQUEST['id'])) {
                $this->error('参数错误');
            }
            $id = $_REQUEST['id'];
            //获取基本信息
            $dbres = M("CompanyStatement", "tab_")->where("id='{$id}'")->find();
            $dbres['first_party_info'] = json_decode($dbres['first_party_info'], true);
            $dbres['second_party_info']= json_decode($dbres['second_party_info'], true);
            $dbres['statement_info'] = json_decode($dbres['statement_info'], true);
            $this->assign("data", $dbres);
            if ($dbres["company_belong"] == 9) {
                //上游
                $this->display("editCpStatement");
            } else {
                if($dbres["company_type"] == 1){
                    $this->display("editPcStatement");
                }else{
                    if($dbres['pay_type'] == 2){
                        $payinfo = $dbres['second_party_info'];
                        $payinfo['type'] = "second_party_info";
                    }else{
                        $payinfo = $dbres['first_party_info'];
                        $payinfo['type'] = "first_party_info";
                    }
                    $this->assign("payinfo", $payinfo);
                    $this->display("editPuStatement");
                }

                
            }
        }
    }
    //审批通过
    public function adminAgree(){
        $this->setVerifyStatus(0,1,"admin");
    }
    public function adminRefuse(){
        $this->setVerifyStatus(0,-1,"admin");
    }
    public function verifyAgree(){
        $this->setVerifyStatus(1,2,"verify");
    }
    public function verifyRefuse(){
        $this->setVerifyStatus(1,-2,"verify");
    }

    public function launch(){
        if(!isset($_REQUEST['ids'])) $this->error("参数错误");
        $ids = $_REQUEST['ids'];
        $dbres = $this->DBModel->field("id,confirm_status,confirm_log")->where("id in ({$ids})")->select();
        foreach($dbres as $k=>&$v){
            if($v['confirm_status'] != 0) continue;
            $v['confirm_log'] = json_decode($v['confirm_log'],true);
            $v['confirm_log']['launch_user']=$this->admininfo["username"];
            $v['confirm_log']['launch_time']=date("Y-m-d H:i:s");
            $v['confirm_log'] = json_encode($v['confirm_log']);
            $v['confirm_status']=1;
            // $v['op_time'] = time();
            $this->DBModel->save($v);
            addOperationLog(['op_type'=>1,'key'=>$v['id'],"op_name"=>"发起确认",'url'=>U('lists')]);
        }
        $this->ajaxReturn(array(
            'status' => 1,
            "info"=>"对外发起成功"
        ));
    }

    protected function setVerifyStatus($old_status,$change_status,$op_pre)
    {
        if(!isset($_REQUEST['ids'])) $this->error("参数错误");
        $ids = $_REQUEST['ids'];
        $dbres = $this->DBModel->field("id,verify_status,verify_log")->where("id in ({$ids})")->select();
        foreach($dbres as $k=>&$v){
            if($v['verify_status'] != $old_status) continue;
            $v['verify_log'] = json_decode($v['verify_log'],true);
            $v['verify_log'][$op_pre.'_user']=$this->admininfo["username"];
            $v['verify_log'][$op_pre.'_time']=date("Y-m-d H:i:s");
            $v['verify_log'] = json_encode($v['verify_log']);
            $v['verify_status']=$change_status;
            $v['op_time'] = time();
            $this->DBModel->save($v);
            $opname = $this->VerifyStatus[$change_status];
            addOperationLog(['op_type'=>1,'key'=>$v['id'],"op_name"=>$opname,'url'=>U('lists')]);
        }
        $this->ajaxReturn(array(
            'status' => 1,
            "info"=>$opname."成功"
        ));
    }
    //保存备注
    public function saveRemark(){
        if(!isset($_REQUEST['id'])) $this->error("参数错误");
        $id = $_REQUEST['id'];
        $remark = $_REQUEST['remark'];
        $this->DBModel->where("id = '{$id}'")->save(['remark'=>$remark]);
        $this->ajaxReturn(array(
            'status' => 1,
            'info' => "操作成功"
        ));
    }
    //重算
    public function updateStatement()
    {
        if(!isset($_REQUEST['ids'])) $this->error("参数错误");
        $ids = $_REQUEST['ids'];
        $dbres = $this->DBModel->field("id,verify_status,verify_log")->where("id in ({$ids})")->select();
        foreach($dbres as $k=>&$v){
            if(in_array($v['verify_status'],[3,4])) continue; //合作方确认后不进行重算
            //重算
            $res =  A("CompanyStatementSet")->updateCompanyStatementData($v['id'],$this->admininfo["username"]);
            if($res === false){
                $this->ajaxReturn(array(
                    'status' => 0,
                    "info"=>"重算金额错误"
                ));
            }
        }
        $this->ajaxReturn(array(
            'status' => 1,
            "info"=>"重算金额成功"
        ));
    } 
    //导出
    public function export()
    {
        if(!isset($_REQUEST['id'])) $this->error("参数错误");
        $id = $_REQUEST['id'];

        $data = M("CompanyStatement","tab_")->where(['id' => $id])->find();
        $data['first_party_info'] = json_decode($data['first_party_info'], 1);//甲方
        $data['second_party_info'] = json_decode($data['second_party_info'], 1);//乙方
        $data['statement_info'] = json_decode($data['statement_info'], 1);//结算记录
        //收款方
        $all_sum_money = $data['pay_amount'];//合计平台总额
        $all_pay_amount = $data['statement_money'];//合计结算金额

        $big_all_sum_money = convertAmountToCn($data['statement_money']);//大写

        if($data['pay_type'] == 2){
            $data['receive_company'] = $data['second_party_info'];//收款方
            $data['pay_company'] = $data['first_party_info'];
        }else{
            $data['receive_company'] = $data['first_party_info'];
            $data['pay_company'] = $data['second_party_info'];
        }
        if($data['receive_company']['invoice_type'] == 0){
            $data['receive_company']['invoice_type']="无";
        } elseif($data['receive_company']['invoice_type'] == 1){
            $data['receive_company']['invoice_type']="专票";
         } else{
            $data['receive_company']['invoice_type']="普票";
        }
        if ($data['company_belong'] == 9) {//上游
            excelUpStreamTemplate($data, $all_sum_money, $all_pay_amount, $big_all_sum_money);
        } else {
            //下游
            // if($dbres["company_type"] == 1){
                excelDownStreamTemplate($data, $all_sum_money, $all_pay_amount, $big_all_sum_money);
            // }else{
            //     $data['statement_begin_time'] = date('Ymd',$data['statement_begin_time']);
            //     $data['statement_end_time'] = date('Ymd',$data['statement_end_time']);
            //     $data['statement_count'] = count($data['statement_info']);
            //     // dd($data);
            //    $this->assign("data",$data);
            //    $this->display("exportPuStatement");
            // }
        }
    }
    //汇总
    public function pool()
    {
        if(!isset($_REQUEST['ids'])) $this->error("参数错误");
        $ids = $_REQUEST['ids'];
        $dbres = $this->DBModel->field("*")->where("id in ({$ids})")->select();
        //分单
        $basedata = [
            "pay_amount"=>0,
            "statement_money"=>0,
            "lack_statement_money"=>0,
            "platform_amount"=>0,
            "lack_platform_amount"=>0,
            "create_lack_ids"=>[],
            "del_lack_ids"=>[],
            "statement_ids"=>[],
            "info_ids"=>[],
            "statement_begin_time"=>0,
            "statement_end_time"=>0,
            "fine"=>0,
            "reward"=>0,
            "verify_status"=>0,
            "verify_log"=>json_encode(["create_user"=>$this->admininfo["username"],"create_time"=>date("Y-m-d H:i:s")]),
            "op_time"=>time(),
            "company_list"=>[]
        ];
        $datas = ["ups","up","downs","down"];
        //初始化数据
        foreach($datas as $k=>$v){
            if($v =="ups"){
                $basedata['company_type']=3;
                $basedata['is_payment']=1;
            }
            if($v =="up"){
                $basedata['company_type']=3;
                $basedata['is_payment']=2;
            }

            if($v =="downs"){
                $basedata['company_type']=1;
                $basedata['is_payment']=1;
            }
            if($v =="down"){
                $basedata['company_type']=1;
                $basedata['is_payment']=2;
            }
            $datas[$v]=$basedata;
            unset($datas[$k]);
        }

        foreach ($dbres as $k=>$v) {
            if($v['verify_status'] != 2) continue;
            if($v['company_belong'] == 9){
                //上游
                if($v['is_payment'] == 1){
                    $this->setDf($datas['ups'],$v);
                }else{
                    $this->setDf($datas['up'],$v);
                }
            }else{
               
                if($v['is_payment'] == 1){
                    $this->setDf($datas['downs'],$v);
                }else{
                    $this->setDf($datas['down'],$v);
                }
            }
        }
        $Pool = M("company_statement_pool","tab_");
        $Statemen = M("company_statement","tab_");
        foreach ($datas as $k => $v) {
            if(count($v['company_list']) <= 0){continue;}
            $v['statement_num'] = "PL_".date('Ymd').date('His').sp_random_num(3);
            //保存公司信息
            $company_list = $v['company_list'];
            foreach ($company_list as $ke => $va) {
                $this->addStatementInfo($va,$k,$v);
            }

            if(empty($v['create_lack_ids']) && empty($v['del_lack_ids']) && empty($v['info_ids'])){ continue;}
            $v['statement_ids'] = implode(",",$v['statement_ids']);
            
            $v['create_lack_ids'] = implode(",",$v['create_lack_ids']);
            $v['del_lack_ids'] = implode(",",$v['del_lack_ids']);
            $info = implode(",",$v['info_ids']);
            unset($v['info_ids']);
            unset($v['company_list']);

            if($v['statement_money'] == 0){
                $v['verify_status'] = 5;
                $v['verify_log'] = json_encode(["create_user"=>$this->admininfo["username"],"create_time"=>date("Y-m-d H:i:s"),"verify_user"=>"system","verify_time"=>date("Y-m-d H:i:s"),"payment_user"=>"system","payment_time"=>date("Y-m-d H:i:s")]);
            }
            //判断周月结
            if(($v["statement_end_time"]-$v['statement_begin_time']) > 7*24*3600){
                $v["withdraw_type"] = 1;
            }else{
                $v["withdraw_type"] = 0;
            }
            $pool_id = $Pool->add($v);
            if($pool_id == false){
                $this->ajaxReturn(array('status' => 0,"info"=>"汇总失败"));
            }
            if(!empty($info)){
                $save["pool_id"]=$pool_id;
                M("company_statement_info","tab_")->where("id in ({$info})")->save($save);
            }
            if(!empty($v['del_lack_ids'])){
                M("company_lack_statement_info","tab_")->where("id in ({$v['del_lack_ids']})")->save(["is_pool"=>1]);
            }
            //修改结算单规则
            $this->updatePoolVerifyStatus($v['statement_ids'],2,3,"pool",$v['statement_num']);
        }
        $this->ajaxReturn(array(
            'status' => 1,
            "info"=>"汇总成功"
        ));
    }
    //结算单规则
    protected function updatePoolVerifyStatus($ids,$old_status,$change_status,$op_pre,$num){
        $dbres = $this->DBModel->field("id,verify_status,verify_log")->where("id in ({$ids})")->select();
        foreach($dbres as $k=>&$v){
            if($v['verify_status'] != $old_status) continue;
            $v['verify_log'] = json_decode($v['verify_log'],true);
            $v['verify_log'][$op_pre.'_user']=$this->admininfo["username"];
            $v['verify_log'][$op_pre.'_time']=date("Y-m-d H:i:s");
            $v['verify_log'][$op_pre.'_num']=$num;
            $v['verify_log'] = json_encode($v['verify_log']);
            $v['verify_status']=$change_status;
            $v['op_time']=time();
            $this->DBModel->save($v);
        }
    }
    //保存
    protected function addStatementInfo($va,$k,&$v){
        $StatementInfo  = M("company_statement_info","tab_");
        $company_info = $va['company_info'];
        $LackStatement = M("company_lack_statement_info","tab_");
        //统一比例字段
        if($k == "up" || $k=="ups"){
            foreach ($va['statement_info'] as $key => &$value) {
                if($company_info['pay_type'] == 2){
                    $value["ratio"] = $value["second_ratio"];
                }else{
                    $value["ratio"] = $value["first_ratio"];
                }
                unset($value["first_ratio"]);
                unset($value["second_ratio"]);
            }
        }
        if($k=="ups" || $k=='downs'){
            $is_payment = 1;
            $verify_status = 0;
        }else{
            $is_payment = 2;
            $verify_status = 2;
        }
        
        //创建基础未满基础信息
        if($va['statement_money'] < 300){
            $lackcompany =[
                "company_id"=>$company_info['id'],
                "company_type"=>$v['company_type'],
                "company_name"=>$company_info['partner'],
                "company_info"=>json_encode($company_info,JSON_UNESCAPED_UNICODE),
                "statement_money"=>$va['statement_money'],
                "pay_amount"=>$va['pay_amount'],
                "platform_amount"=>$va['platform_amount'],
                "fine"=>$va['fine'],
                "reward"=>$va['reward'],
                "statement_begin_time"=>$v['statement_begin_time'],
                "statement_end_time"=>$v['statement_end_time'],
                "is_payment"=>$is_payment,
                "statement_pool_num"=>$v['statement_num'],
                "statement_info"=>json_encode($va['statement_info'],JSON_UNESCAPED_UNICODE),
            ];
        }
        //整合数据
		$lsres = $LackStatement->where("company_id={$company_info['id']} and is_pool = 0")->select();
        $del_lack_ids = [];
        if(count($lsres) > 0){
            //进行聚合
            foreach($lsres as $key=>$val){
                $del_lack_ids[] = $val['id'];
                $va['statement_money'] += $val['statement_money'];
                $va['pay_amount'] += $val['pay_amount'];
                $va['fine'] += $val['fine'];
                $va['reward'] += $val['reward'];
                $va['platform_amount'] += $val['platform_amount'];
                $va['statement_info'] = array_merge($va['statement_info'],json_decode($val['statement_info'],true));
                $last_names = array_column($va['statement_info'],'game_name');
                array_multisort($last_names,SORT_DESC,SORT_STRING,$va['statement_info']);
            }
        }
        if($va['statement_money'] < 300){
            //依旧小于300存旧版
            if($lackcompany['pay_amount'] > 0){
                $lask_id = $LackStatement->add($lackcompany);
                $v['create_lack_ids'][] =$lask_id;
                $v['lack_statement_money'] +=$lackcompany['statement_money'];
                $v['lack_platform_amount'] +=$lackcompany['platform_amount'];
            }
        }else{
            if($va['pay_amount'] > 0){
                //存成功
                $company =[
                    "pool_id"=>0,
                    "company_id"=>$company_info['id'],
                    "company_type"=>$v['company_type'],
                    "company_name"=>$company_info['partner'],
                    "company_info"=>json_encode($company_info,JSON_UNESCAPED_UNICODE),
                    "fine"=>$va['fine'],
                    "reward"=>$va['reward'],
                    "statement_money"=>$va['statement_money'],
                    "pay_amount"=>$va['pay_amount'],
                    "platform_amount"=>$va['platform_amount'],
                    "statement_money"=>$va['statement_money'],
                    "statement_begin_time"=>$v['statement_begin_time'],
                    "statement_end_time"=>$v['statement_end_time'],
                    "statement_info"=>json_encode($va['statement_info'],JSON_UNESCAPED_UNICODE),
                    "statement_num"=>$va['statement_num'],
                    "verify_status"=>$verify_status
                ];
                $companyid = $StatementInfo->add($company);
                $v['info_ids'][] =$companyid;
                $v['del_lack_ids'] =array_merge($v['del_lack_ids'],$del_lack_ids);
                $v['statement_money'] +=$va['statement_money'];
                $v['pay_amount'] +=$va['pay_amount'];
                $v['platform_amount'] +=$va['platform_amount'];
                $v['fine'] +=$va['fine'];
                $v['reward'] +=$va['reward'];
            }
        }
    }
    //设定组合的子操作
    protected function setDf(&$savedata,$v)
    {
        $savedata['statement_ids'][] = $v['id'];
        unset($v['id']);
        $v['statement_info'] = json_decode( $v['statement_info'],true);
        $fine = 0;
        $reward = 0;

        foreach($v['statement_info'] as $ka=>$va){
            if($va['statement_type'] == 2){
                //奖励
                // $savedata['reward'] += $va['sum_money'];
                $reward += $va['sum_money'];
                unset($v['statement_info'][$ka]);
            }else if($va['statement_type'] == 1){
                // $savedata['fine'] += $va['sum_money'];
                $fine += $va['sum_money'];
                unset($v['statement_info'][$ka]);
            }
        }
        if(isset($savedata['company_list'][$v['company_id']])){
            //存在游戏合并
            $a = &$savedata['company_list'][$v['company_id']];
            $a['fine'] += $fine;
            $a['reward'] += $reward;
            $a['statement_info'] = array_merge($a['statement_info'],$v['statement_info']);
            // dump($a['statement_info']);
            $a['platform_amount'] += $v['platform_amount'];
            $a['pay_amount'] += $v['pay_amount'];
            $a['statement_money'] += $v['statement_money'];
        }else{
            if($v['pay_type'] == 2){
                //乙方收款
                $v['company_info'] =json_decode($v['second_party_info'],ture);
                $v['company_info']['pay_type'] = 2;
            }else{
                $v['company_info'] = json_decode($v['first_party_info'],ture);
                $v['company_info']['pay_type'] = 1;
            }
            //先分配好订单号,防止重复提交
            $tdata = [
                "company_info"=>$v['company_info'],
                "company_name"=>$v['company_name'],
                "platform_amount"=>$v['platform_amount'],
                "pay_amount"=>$v['pay_amount'],
                "statement_money"=>$v['statement_money'],
                "fine"=>$fine,
                "reward"=>$reward,
                "statement_info"=>$v['statement_info'],
                "statement_num"=>"JS_".date('Ymd').date('His').$v['company_id'].sp_random_string(5)
            ];
            $savedata['company_list'][$v['company_id']] = $tdata;
        }
        // $savedata['pay_amount'] += $v['pay_amount'];
        // $savedata['statement_money'] += $v['statement_money'];
        // $savedata['platform_amount'] += $v['platform_amount'];
        if($savedata['statement_begin_time'] == 0){
            $savedata['statement_begin_time'] = $v['statement_begin_time'];
        }elseif($v['statement_begin_time'] < $savedata['statement_begin_time']){
            $savedata['statement_begin_time'] = $v['statement_begin_time'];
        }
        if($savedata['statement_end_time'] == 0){
            $savedata['statement_end_time'] = $v['statement_end_time'];
        }elseif($v['statement_end_time'] > $savedata['statement_end_time']){
            $savedata['statement_end_time'] = $v['statement_end_time'];
        }
    }
    //新增结算
    //获取要结算的公司及日期
    public function getNewStatement()
    {
        $senddata = [
            "up_company_id"=>[],
            "dowm_company_id"=>[],
        ];
        $statement =  M("company_statement","tab_")->field("count(id) count,company_id,company_belong")->group("company_id,company_belong")->select();
        $up_company_id = [];
        $dowm_company_id= [];
        foreach( $statement as $k=>$v){
            if($v['company_belong'] == 9){
                $up_company_id[] = $v['company_id'];
            }else{
                $dowm_company_id[]= $v['company_id'];
            }
        }
        ;
        //获取上游
        if(empty($up_company_id)){
            $upwhere = "1=1";
        }else{
            $up_company_id =implode(",",$up_company_id);
            $upwhere = "(first_company_type = 1 AND first_company_id NOT IN ({$up_company_id}) ) OR ( second_company_type = 1 AND second_company_id NOT IN ({$up_company_id}) )";
        }
        $uprelation = M("company_relation","tab_")->field("first_company_id,first_company_type,second_company_id,second_company_type")->where($upwhere)->select();
        
        foreach($uprelation as $k=>$v){
            if($v['first_company_type'] == 0){
                $senddata["up_company_id"][] = $v['second_company_id'];
            }else{
                $senddata["up_company_id"][] = $v['first_company_id'];
            }
        }

        //获取下游
        if(empty($dowm_company_id)){
            $downwhere = "1=1";
        }else{
            $dowm_company_id =implode(",",$dowm_company_id);
            $downwhere = "(first_company_type = 2 AND first_company_id NOT IN ({$dowm_company_id}) ) OR ( second_company_type = 2 AND second_company_id NOT IN ({$dowm_company_id}) )";
        }
        $downrelation = M("company_relation","tab_")->field("first_company_id,first_company_type,second_company_id,second_company_type")->where($downwhere)->select();

        foreach($downrelation as $k=>$v){
            if($v['first_company_type'] == 0){
                $senddata["dowm_company_id"][] = $v['second_company_id'];
            }else{
                $senddata["dowm_company_id"][] = $v['first_company_id'];
            }
        }

        if(count($senddata["up_company_id"]) < 1 && count($senddata["dowm_company_id"]) < 1){
            $this->ajaxReturn(["error"=>'无新增关系,无需重算']);
        }
        $senddata['up_company_id'] = implode(",",$senddata['up_company_id']);
        $senddata['dowm_company_id'] = implode(",",$senddata['dowm_company_id']);

        //获取要结算的日期
        $start = strtotime('-1 month');
        $end = time();

        $temp_datelist = get_date_list($start,$end,1);
        $datelist = [];
        foreach($temp_datelist as $k=>$v){
            $w = (int)date("w",strtotime($v));
            $d = (int)date("d",strtotime($v));
            if($w == 1 || $d == 1){
                $datelist[] = $v;
            }
        }
        $senddata['datelist'] = $datelist;
        $senddata['count'] = count($datelist);
        $this->ajaxReturn(["success"=>'ok',"data"=>$senddata]);
    }
    public function updateNewStatement()
    {
        $up_company_id = $_REQUEST['up_company_id'];
        $dowm_company_id = $_REQUEST['dowm_company_id'];
        $date = $_REQUEST['date'];
        $CompanyStatementSet = A("CompanyStatementSet");
        // dd($CompanyStatementSet);
        $stime = strtotime($date);
        $w = (int)date("w",strtotime($date));
        $d = (int)date("d",strtotime($date));
        if($w == 1){
            if(!empty($up_company_id)){
                $CompanyStatementSet->cpStatement(0,$stime,$up_company_id,false);
            }
            if(!empty($dowm_company_id)){
                $CompanyStatementSet->promoteCompanyStatement(0,$stime,$dowm_company_id,false);
            }
        }
        if($d == 1){
            if(!empty($up_company_id)){
                $CompanyStatementSet->cpStatement(1,$stime,$up_company_id,false);
                $CompanyStatementSet->cpStatement(2,$stime,$up_company_id,false);
            }
            if(!empty($dowm_company_id)){
                $CompanyStatementSet->promoteCompanyStatement(1,$stime,$dowm_company_id,false);
                $CompanyStatementSet->promoteCompanyStatement(2,$stime,$dowm_company_id,false);
            }
        }
        
        $this->ajaxReturn(array("success"=>"ok","data"=>[]));
    }
    


    public function OpAuth($info)
    {
        $id = $info['id'];
        $img = $info['ext_field'];
        $remark = $info['remark'];
        //原始列表
        $opBtn = [
            "viewStatement"=>"<a class='confirm viewStatement' data-id='{$id}'>查看</a>",
            "editStatement"=>"<a class='confirm editStatement' data-id='{$id}'>编辑</a>",
            "addRemark"=>"<a class='confirm addRemark' data-id='{$id}'>新增备注</a>",
            "editRemark"=>"<a class='confirm editRemark' data-remark='{$remark}' data-id='{$id}'>修改备注</a>",
            "viewRemark"=>"<a class='confirm viewRemark' data-remark='{$remark}' data-id='{$id}'>查看备注</a>",
        ];
        //操作对应菜单
        $optist = [];
        switch ($info['verify_status']) {
            case '-2':
            case '-1':
            case '0':
            case '1':
            case '2':
                $optist = ["viewStatement","editStatement","addRemark","viewRemark","editRemark"];
                break;
            case '3':
                $optist = ["viewStatement","addRemark","viewRemark","editRemark"];
                break;
            default:
                break;
        }
        if(empty($info['remark'])){
            //未上传备注
            $optist = array_diff($optist, ["editRemark", "viewRemark"]);
        }else{
            $optist = array_diff($optist, ["addRemark"]);
        }
        //
        $resarr = [];
        foreach ($optist as $k => $v) {
            if(IS_ROOT){
                $resarr[] = $opBtn[$v];
            }else{
                if(in_array($v,$this->OpAuthList)){
                    $resarr[] = $opBtn[$v];
                }
            }
        }
        return $resarr;
    }
    public function menuAuth()
    {
        $mentBtn = [
            "adminAgree"=>"<a class='butn' id='adminAgree'>管理员审核通过</a>",
            "adminRefuse"=>"<a class='butn' id='adminRefuse' style='background-color: red;'>管理员审核拒绝</a>",
            "verifyAgree"=>"<a class='butn' id='verifyAgree'>审批通过</a>",
            "verifyRefuse"=>"<a class='butn' id='verifyRefuse' style='background-color: red;'>审核拒绝</a>",
            "pool"=>"<a class='butn' id='pool'>发起汇总</a>",
            "updateStatement"=>"<a class='butn' id='updateStatement' style='background-color: green;'>重算金额</a>",
            "export"=>"<a class='butn' id='export'>批量导出</a>",
            "updateNewStatement"=>"<a class='butn' id='updateNewStatement' style='background-color: green;'>新增结算</a>",
            "launch"=>"<a class='butn' id='launch'>对外发起</a>",
        ];
        $resarr = [];
        foreach ($mentBtn as $k => $v) {
            if(IS_ROOT){
                $resarr[] = $v;
            }else{
                if(in_array($k,$this->OpAuthList)){
                    $resarr[] = $v;
                }
            }
        }
        return $resarr;
    }

}