<?php

namespace Admin\Controller;
use User\Api\UserApi as UserApi;
use Base\Service\PromoteService as PromoteService;

/**
 * 后台首页控制器
 * @author 麦当苗儿 <zuojiazi@vip.qq.com>
 */
class MendController extends ThinkController {
    public $tempid = 0;
    public function lists($p=1){

        $this->checkListOrCountAuthRestMap($map,[]);

			$this->m_title = '推广补链';
            $this->assign('commonset',M('Kuaijieicon')->where(['url'=>'Mend/lists','status'=>1])->find());
            $this->mendList();
    }

    public function mendList(){
        if(isset($_REQUEST['account'])){
            if ($_REQUEST['account']=='全部') {
                unset($_REQUEST['account']);
            }
            $map['account']=array('like','%'.$_REQUEST['account'].'%');
            unset($_REQUEST['account']);
        }
        $map['puid']=0;
        $map['length(account)'] = array('gt', 0);
        $map['register_time'] = array('gt', 0);
        $p  = I('p');
        $map['register_type'] = array('in','(0,1,2,3,4,5,6,7)');
        //为数据权限添加
        setPowerPromoteIds($map);
        $show_data_power = (is_administrator()|| session('user_auth')['show_data']);
        $this->assign('show_data_power', $show_data_power);
        parent::lists("user",$p,$map);
    }
    /**
     * 补链记录
     * @param integer $p 分页
     * @param booble  IS_POST post请求时为下一页ajax请求
     * @param booble  export 是否导出
     * @return void
     */
    public function recordList($p=1,$export=false)
    {
        $page = intval($p);
        $page = $page ? $page : 1; 
        if (isset($_REQUEST['row'])) {
            $row = $_REQUEST['row'];
        } else {
            $row = 10;
        }
        if(isset($_REQUEST['account'])) $map['user_account']=array('like','%'.$_REQUEST['account'].'%');
        if(isset($_REQUEST['promote_account'])) $map['promote_account']=array('like','%'.$_REQUEST['promote_account'].'%');
        if(isset($_REQUEST['promote_account_to'])) $map['promote_account_to']=array('like','%'.$_REQUEST['promote_account_to'].'%');
        if(isset($_REQUEST['op_account'])) $map['op_account']=array('like','%'.$_REQUEST['op_account'].'%');
        if (isset($_REQUEST['time_start']) && isset($_REQUEST['time_end'])) {
            $map['order_time'] = ['between', [strtotime($_REQUEST['time_start']), strtotime($_REQUEST['time_end']) + 86399]];
        } elseif (isset($_REQUEST['time_start'])) {
            $map['order_time'] = ['GT', strtotime($_REQUEST['time_start'])];
        } elseif (isset($_REQUEST['time_end'])) {
            $map['order_time'] = ['LT', strtotime($_REQUEST['time_end']) + 86399];
        }
        $show_data_power = (is_administrator()|| session('user_auth')['show_data']);
        //为数据权限添加
        setPowerPromoteIds($map);
        $data =  M("Mend","tab_")
                ->field("user_account,promote_account,pay_amount,promote_account_to,order_time,create_time,op_account,remark")
                ->where($map)
                ->order("create_time desc");
               
        if($export){
            $data =  $data->select();
        }else{
            $data = $data->page($page, $row)->select();
        }
        //格式化信息
        foreach ($data as $key => $value) {

            ($data[$key]['promote_account']=='官方渠道')?($data[$key]['promote_account']=C('OFFICIEL_CHANNEL')):'';

            $data[$key]['create_time'] = date("Y-m-d H:i:s",$value['create_time']);
            $data[$key]['order_time'] = date("Y-m-d H:i:s",$value['order_time']);
            if(!$show_data_power){
                $data[$key]['user_account'] = encryptStr($data[$key]['user_account']);
            }
        }

        if($export) db2csv($data,"推广员管理_推广补链_补链记录",["玩家账号","补链前渠道","补链前归属金额","补链后渠道","切分时间","补链时间","操作人员","备注"]);

        if(IS_POST){
            $page = set_pagination($_REQUEST['row_count'],$row);
            $this->ajaxReturn(array(
                "list_data"=>$data,
                "page"=>$page
            ));
            die();
        }

        $this->checkListOrCountAuthRestMap($map,[]);

        $count = M("Mend","tab_")->where($map)->count();
        $this->assign('row_count',$count);
        $this->assign('list_data', $data);

        $page = set_pagination($count,$row);
        if($page) {$this->assign('_page', $page);}
       
        $this->assign('show_data_power', $show_data_power);
        $this->display();
        // parent::lists("Mend",$p,$map);
    }
   

    public function edit($id = null)
    {
        
        if (IS_POST) {
            $promoteService = new PromoteService();
            if ($_POST['prmoote_id_to'] == -1){
                $_POST['prmoote_id_to'] = 0;
            }
            if ($_POST['prmoote_id_to'] === ''){
                $this->error('请选择需要变更的渠道');
            }
            if ($_POST['promote_id'] == $_POST['prmoote_id_to']) {
                $this->error('没有变更数据');
            }
            if ($_POST['order_time'] == '') {
                $this->error('没有订单日期');
            }
            //判断是否已经结算
            // if(self::checkSettlement(strtotime($_POST['order_time']),$_POST['promote_id'])){
            //     $this->error('在订单日期内含有已经结算的订单,无法补链');
            // }
            if(self::checkSpend(strtotime($_POST['order_time']),$_POST['account'])){
                $this->error("在订单日期内含有已经结算的订单,无法补链。如订单:{$this->tempid}");
            }
            if(self::checkPromote(strtotime($_POST['order_time']),$_POST['account'])){
                $this->error('在订单日期内含有多个推广员,无法补链');
            }
            
            $create = $_REQUEST;
            $create['order_time'] = date($create['order_time']);
            $params = array(
                "from_promote_id"=>$create['promote_id'],
                "to_promote_id"=>$create['prmoote_id_to'],
                "order_time"=>$create['order_time'],
                "type"=>2,
                "shift_ids"=>[$create['user_id']],
                "creator_type"=>0,
                "creator_id"=>$_SESSION["onethink_admin"]["user_auth"]["uid"]
            );
            if(!empty($create['remark'])){
                $params['remark'] = $create['remark'];
            }

//            dump($create);die();

            $res = $promoteService->addShiftTask($params);
            if($res['status']){

                $userData = M('user','tab_')->field('account')->where(['id'=>$create['user_id']])->find();
                $promoteToData = M('promote','tab_')->field('account')->where(['id'=>$create['prmoote_id_to']])->find();
                $promoteFromData = M('promote','tab_')->field('account')->where(['id'=>$create['promote_id']])->find();
                if ($create['promote_id'] == '0') {
                    $promoteFromData['account'] = '官方渠道';
                }

                addOperationLog(['op_type'=>1,'key'=>$userData['account'].'/'.$promoteFromData['account'].'/'.$promoteToData['account'],'op_name'=>'编辑推广补链','url'=>U('Mend/edit',['id'=>$create['user_id']]),'menu'=>'推广员-推广员管理-推广补链-编辑推广补链']);

                $this->success('补链成功', U('lists'), 2);
            }else{
                $this->error($res['msg']);
            }
        } else {
            $user = A('User', 'Event');
            $user_data = $user->user_entity($id);
            $user_data || $this->error("用户数据异常");
//            var_dump($user_data);die;
            $this->assign("data", $user_data);
            $this->meta_title = '编辑推广补链';

						$this->m_title = '推广补链';
				$this->assign('commonset',M('Kuaijieicon')->where(['url'=>'Mend/lists','status'=>1])->find());


            $this->display();
        }
    }
    /**
     * 2020.1.3 之后判断订单是否已经结算
     */
    private function checkSpend($order_time,$account){
        //获取所有涉及订单
        $map = array(
            "pay_status"=>1,
            "user_account"=>$account,
            "pay_time"=>array("EGT",$order_time)
        );
        $spendlist = M("Spend","tab_")->field("id,selle_status,pay_order_number")->where($map)->select();
        if(count($spendlist) < 1){
            return false;
        }
        //获取所有未审核
        $withmap = array(
            "status"=>0,
            "settlement_begin_time"=>array("EGT",$order_time),
            "settlement_end_time"=>array("ELT",$order_time)
        );     
        $withspendlist = M("withdraw","tab_")->field("spend_ids")->select();
        
        $dsh_list = false;
        if(!empty($withspendlist)){
            //获取所有涉及订单
           foreach ($withspendlist as $value) {
            $dsh_list .= (','.$value['spend_ids']);
           }
        }
        if($dsh_list){
            $dsh_list = array_flip(explode(",",$dsh_list));
        }
        foreach($spendlist as $k=>$v){
            
            if($v['selle_status'] == 1){
                $this->tempid = $v['pay_order_number'];
                return true; //有已结算
            }
            if($dsh_list && $dsh_list[$v['id']]){
                $this->tempid = $v['pay_order_number'];
                return true; //有待审核的
            }
        }
        return false;
    }

    /**
     * 2020.1.3 之前判断订单是否已经结算
     */
    private function checkSettlement($order_time,$prmote_id)
    {
        //判断是否已经结算,后台只会对会长进行结算
        //获取会长信息
        $Promote = M('promote','tab_');
        $prmotedata = $Promote->field('chain')->find($prmote_id);
        $chain = trim($prmotedata['chain'], '/');
        if ($chain == '') {
            $prmote_id = $prmote_id;
        } else {
            $prmote_id = explode('/', $chain)[0];
        }
        $jsres =  M("Settlement","tab_")->where(array(
            "total_money"=>array("GT",0),
            "starttime"=>array("ELT",$order_time),
            "endtime"=>array("EGT",$order_time),
            "promote_id"=>$prmote_id
        ))->find();
        if($jsres) return true;
        return false;
    }
    //判断是否跨推广员进行补链
    private function checkPromote($order_time,$account)
    {
        $res = M("Spend","tab_")->field("promote_id")->where(["pay_time"=>array("EGT",$order_time),"user_account"=>$account])->group("promote_id")->select();
        if(count($res)>1) return true;
        return false;
    }
    //补链详情
    public function shiftInfo()
    {
        $id  = I('id');
        $info = M("shift_task")->where("id = {$id} and status = 0")->find();
        
        if(empty($info)){
            $this->error("补链不存在或已处理");
        }
        

        $info['user_id'] = json_decode($info['shift_ids'])[0]; 
        $info['order_time'] = date("Y-m-d",$info['order_time']);
        $userid = $info['user_id'];
        $info['account'] = M("User","tab_")->field("account")->where("id = '{$userid}'")->find()['account'];
        $this->assign('data',$info);
        $this->display();
    }
    //取消补链
    public function cancelShift()
    {
        $id  = I('id');
        $status = M('ShiftTask')->where(['id' => $id,'status' => 0])->save(['status' => 2]);
        if ($status) {

            addOperationLog(['op_type'=>1,'key'=>$id,'op_name'=>'取消补链','url'=>U('Mend/shiftInfo',['id'=>$id]),'menu'=>'推广员-推广员管理-推广补链-取消补链']);

            $this->ajaxReturn(array("status"=>1,"url"=> U('lists')));
        } else {
            $this->ajaxReturn(array("status"=>0,"url"=> U('lists')));
        }
    }
}