<?php
class nadsAction extends baseAction
{
    /**
     * app内页类型
     * @var string[]
     */
    private $adsAppAct =  ['openShop'=>'商家入驻'];

	/**
	  * @method 广告位列表
	  * @author soul
	  * @copyright 2019/4/22
	  */
    public function placeAdsList()
    {
		LibRule::Check('NA03');
		$Params = mvc::$URL_PARAMS;
		$nowPage = isset($Params['page']) && $Params['page'] > 0 ? (int) $Params['page']:1;
        $perPage = empty($_COOKIE['perPage'])? 20: (int) $_COOKIE['perPage'];

		$where = '';
		foreach($Params as $k=>$v)
        {
            $v = trim($v);
            if($v == '') continue;
            switch($k)
            {
                case 'word':
                    $where .= sprintf(" and (ads_name like '%%%s%%' or ads_url_data like '%%%s%%') ", LibFc::Escape($v), LibFc::Escape($v));
                break;
                case 'pa_id':
                    $where .= sprintf(" and pa_id =%d", $v);
                break;
				case 'pla_status':
                    $where .= sprintf(" and pla_status =%d", $v);
                break;
				case 'betime':
					$t = explode(' ~ ', $v);
					$where .= sprintf(" and pla_atime >= %d and pla_atime < %d", strtotime($t[0]), strtotime($t[1])+86400);
				break;
				case 'valid_status':
					if($v == 1){
						$where .= sprintf(" and pat_btime <= %d and pat_etime + 86400 >= %d",time(),time());
					}
					if($v == -1){
						$where .= sprintf(" and pat_etime + 86400 < %d",time());
					}
					//待上
					if($v == 2){
						$where .= sprintf(" and pat_btime > %d",time());
					}	
				break;
				case 'pal_shoufei':
                    $where .= sprintf(" and pal_shoufei =%d", $v);
                break;
				case 'pla_sales':
                    $where .= sprintf(" and pla_sales ='%s'", LibFc::Escape($v));
                break;
				case 'pla_au_uid':
                    $where .= sprintf(" and pla_au_uid ='%s'", LibFc::Escape($v));
                break;
				case 'tftime':
					$t = explode(' ~ ', $v);
					$sql = sprintf(" select pat_pla_id from pj_place_ads_time where pat_btime >= %d or pat_etime < %d ",strtotime($t[1])+86400, strtotime($t[0]));
					$where .= sprintf(" and pla_id not in (%s)",$sql);
				break;
				case 'tfword':
					$orwhere  = [];
					$YpcBase = new YpcBase();
					$res =$YpcBase->Get('yp_brand', ['b_id'], sprintf(" AND b_name LIKE '%%%s%%' ",LibFc::Escape($v)));	
					if($res['data']){
						$orwhere[] = sprintf(" pat_keyword in (%s)",implode(',',array_column($res['data'],'b_id')));
					}
					$AdsBase = new AdsBase();
					$res =$AdsBase->Get('yp_province_city', ['pc_id'], sprintf(" AND pc_name LIKE '%%%s%%' ",LibFc::Escape($v)));
					if($res['data']){
						$orwhere[] = sprintf(" pat_pc_id in (%s)",implode(',',array_column($res['data'],'pc_id')));
					}
					$where .= sprintf(" and %s",implode(' or ',$orwhere));
					break;
				case 'mod_type':
					if($v=='pc'){
						$sql = " select pat_pla_id from pj_place_ads_time where pat_modpc = 1 and pat_modcv =0 ";
					}elseif ($v=='cv') {
						$sql = " select pat_pla_id from pj_place_ads_time where pat_modpc = 0 and pat_modcv =1 ";
					}elseif ($v=='all') {
						$sql = " select pat_pla_id from pj_place_ads_time where pat_modpc = 1 or pat_modcv =1 ";
					}
					$where .= sprintf(" and pla_id in (%s)",$sql);
					break;
            }
        }

		//业务员
		// $PjlBase = new PjlBase();
		// $salesRes = $PjlBase->get('bu_user',['usr_name']," AND usr_status=1 AND usr_name!='' order by usr_seq,convert(usr_name using gbk)");
		$salesRes = (new B2cBase())->getYeWuList();
		$salesArr = array_column($salesRes['data'],null,'au_uid');
		LibTpl::Set('salesArr', $salesArr);


		$AdsBase = new AdsBase();
		$res =$AdsBase->Get('pj_place', ['*'], ' order by pa_seq');
		$placeArr = $res['data'];
		LibTpl::Set('placeArr', $placeArr);

		$res =$AdsBase->Get('yp_province_city', ['pc_id as id','pc_name as name'], '');
		$pcArr = array_column($res['data'], 'name', 'id');

		$YpcBase = new YpcBase();
		$res =$YpcBase->Get('yp_brand', ['b_id as id','b_name as name'], '');
		$brandArr = array_column($res['data'], 'name', 'id');

		$table = 'pj_place_ads join pj_place on pa_id=pla_pa_id join pj_place_group on pg_id=pa_pg_id join pj_user_ads on ads_id=pla_ads_id left JOIN pj_place_ads_time ON pat_pla_id = pla_id ';
		$res = $AdsBase->get($table, ['count(distinct pla_id) as count'], $where, true);
		$total = $res['data']['count'];
        LibTpl::Set('pageMsg', LibPage::Show($total, $perPage));
		$adsArr = [];
		if($total > 0)
		{
			$res = $AdsBase->get($table, ['*'], sprintf(" %s group by pla_id order by CASE WHEN MIN(pat_etime) > %d THEN MIN(pat_etime)-%d ELSE %d*2 END ASC, max(pat_etime) desc limit %d,%d", $where, time(), time(),time(), ($nowPage-1)*$perPage, $perPage));
			$adsArr = array_column($res['data'], null, 'pla_id');
			$absIds = array_column($res['data'],'pla_ads_id');
			if(!empty($adsArr))
			{
				// $res = $AdsBase->get('pj_place_ads_time', ['*'], sprintf(" and pat_pla_id in(%s) order by pat_etime desc", implode(',', array_keys($adsArr))));
				// /**
				//  * @var $adsReportDate array 获取广告的展现量和点击量
				//  */
				// $adsReportDate = $AdsBase->get('pj_ads_report_date',['ard_ads_id','sum(ard_show) as ard_show_sum,sum(ard_click) as ard_click_sum'],sprintf(' and ard_ads_id in(%s) group by ard_ads_id',implode(',',$absIds)));
				// if(!empty($adsReportDate['data']))
				// {
				// 	$adsReportDate = array_column($adsReportDate['data'],null,'ard_ads_id');
				// 	foreach($adsReportDate as &$value)
				// 	{
				// 		$value['click_rate'] = $value['ard_click_sum'] > 0 ? (number_format($value['ard_click_sum'] / $value['ard_show_sum'],4) * 100). '%' : '';
				// 	}
				// }
				// else
				// {
				// 	$adsReportDate = [];
				// }
				// LibTpl::Set('adsReportDate',$adsReportDate);
				foreach($res['data'] as $v)
				{
					$v['word'] = [];

					if($adsArr[$v['pat_pla_id']]['pa_keyword_type'] == 'brand'){
						$v['word'][] = $brandArr[$v['pat_keyword']];
					}

					if($adsArr[$v['pat_pla_id']]['pa_is_area']){
						$v['word'][] = $pcArr[$v['pat_pc_id']];
					}
					$v['word'] = implode(' ', $v['word']);
					$adsArr[$v['pat_pla_id']]['times'][] = $v;
				}
			}
		}

		LibTpl::Set('Params', $Params);
		LibTpl::Set('adsArr', $adsArr);
        LibTpl::Set('title', '广告列表-跑街的');
        LibTpl::Put();


	}

	/**
	  * @method 广告位可用时间列表
	  * @author soul
	  * @copyright 2019/4/22
	  */
    public function placeTime()
    {
		LibRule::Check('NA01');
		$Params = mvc::$URL_PARAMS;
		$Params['betime'] = empty($Params['betime'])? date('Y-m-d', strtotime('-3 day')).' ~ '.date('Y-m-d', strtotime('+1 month')): $Params['betime'];
		$t = explode(' ~ ', $Params['betime']);
		$btime = $t[0];
		$etime = $t[1];
		$pa_id = (int) $Params['pa_id'];

		$allPcArr = [];
		$AdsBase = new AdsBase();

		$res = $AdsBase->get('pj_place', ['*'], ' and pa_id='.$pa_id, true);
		$paArr = $res['data'];
		LibTpl::Set('paArr', $paArr);
		$dateArr = [];
		$i = $btime;
		while($i <= $etime)
		{
			$dateArr[] = $i;
			$i = date('Y-m-d', strtotime($i)+86400);
		}

		if($paArr['pa_is_area'] == 1)
		{
			$res = $AdsBase->get('yp_province_city',['pc_id as id', 'pc_name as name'], ' and pc_pid = 0');
			$allPcArr = array_column($res['data'], null, 'id');

			//获取已投放时间
			$where = sprintf(" and pla_pa_id=%d and pat_pc_id in (%s) and ((pat_btime <= %d and pat_etime > %d) or (pat_btime >= %d and pat_btime < %d))",
				$pa_id, implode(',', array_keys($allPcArr)), strtotime($btime), strtotime($btime), strtotime($btime), strtotime($etime)+86400);
			$table = 'pj_place_ads_time join pj_place_ads on pla_id=pat_pla_id join pj_user_ads on ads_id=pla_ads_id';
			$res = $AdsBase->get($table, ['pat_pc_id', 'pat_btime', 'pat_etime', 'ads_name'], $where);
			foreach($res['data'] as $v)
			{
				$i = $v['pat_btime'];
				while($i <= $v['pat_etime'])
				{
					$allPcArr[$v['pat_pc_id']][date('Y-m-d', $i)]['count']++;
					$allPcArr[$v['pat_pc_id']][date('Y-m-d', $i)]['names'][$v['ads_name']] = $v['ads_name'];
					$i = $i+86400;
				}
			}
		}
		else if($paArr['pa_keyword_type'] == 'brand')
		{
			$YpcBase = new YpcBase();
			$res =$YpcBase->Get('yp_brand', ['b_id as id','b_name as name'], ' order by b_initial');
			$allPcArr = array_column($res['data'], null, 'id');

			//获取已投放时间
			$where = sprintf(" and pla_pa_id=%d and pat_keyword in (%s) and ((pat_btime <= %d and pat_etime > %d) or (pat_btime >= %d and pat_btime < %d))",
				$pa_id, implode(',', array_keys($allPcArr)), strtotime($btime), strtotime($btime), strtotime($btime), strtotime($etime)+86400);
			$table = 'pj_place_ads_time join pj_place_ads on pla_id=pat_pla_id join pj_user_ads on ads_id=pla_ads_id';
			$res = $AdsBase->get($table, ['pat_keyword', 'pat_btime', 'pat_etime', 'ads_name'], $where);
			foreach($res['data'] as $v)
			{
				$i = $v['pat_btime'];
				while($i <= $v['pat_etime'])
				{
					$allPcArr[$v['pat_keyword']][date('Y-m-d', $i)]['count']++;
					$allPcArr[$v['pat_keyword']][date('Y-m-d', $i)]['names'][$v['ads_name']] = $v['ads_name'];
					$i = $i+86400;
				}
			}
		}

		LibTpl::Set('Params', $Params);
		LibTpl::Set('dateArr', $dateArr);
		LibTpl::Set('allPcArr', $allPcArr);
        LibTpl::Set('title', '广告投放情况-跑街的');
        LibTpl::Put();
	}


	//获取广告位列表
	function getPlaceOpt()
	{
		$AdsBase = new AdsBase();
        $res = $AdsBase->get('pj_place',['*'], ' order by pa_seq, pa_name');
		LibFc::ajaxJsonEncode($res);
	}

	//获取广告位明细
	function getPlaceDes()
	{
		$Params = mvc::$URL_PARAMS;
		$AdsPla = new AdsPla();
        $res = $AdsPla->get('pj_place join pj_ads_style on pa_ast_id=ast_id',['*'], sprintf(" and pa_id=%d", $Params['pa_id']), true);
		$arr = $res['data'];
		if(!empty($arr['pa_is_keyword']))
		{
			switch($arr['pa_keyword_type'])
			{
				case 'brand':
					$YpcBase = new YpcBase();
					$res =$YpcBase->Get('yp_brand', ['b_id as id','b_name as name'], ' order by b_initial');
					$arr['brands'] = [];
					foreach($res['data'] as $v)
					{
						$arr['brands']['b'.$v['id']] = $v;
					}
				break;
			}
		}
		$res = $AdsPla->getPlaceAvailableTime($arr['pa_id'], $Params['pla_id']);
		$arr['pat'] = $res['data'];
		LibFc::ajaxJsonEncode(['status'=>true, 'data'=>$arr]);
	}


   /**
	  * @method 添加广告
	  * @author soul
	  * @copyright 2019/4/22
	  */
    public function addPlaceAds()
    {
		LibRule::Check('NA02');
        $Params = mvc::$URL_PARAMS;
		$pg_id = (int) $Params['pg_id'];
		$p_id = (int) $Params['p_id'];

        //广告组ID
		$AdsBase = new AdsBase();
        $res = $AdsBase->get('pj_place_group',['*'], ' order by pg_status desc, pg_seq, pg_id');
        LibTpl::Set('placeGroup', $res['data']);

		$adsArr = [];
		$patArr = [];
		$chkArr = ['pc'=>[], 'word'=>[]];

        $pla = $Params['pla_id'] ?? 0;
        if (!$pla) {
            $pla = $Params['copy'] ?? 0;
        }

		if ($pla)
		{
			$tabel = 'pj_place_ads join pj_place on pa_id=pla_pa_id JOIN pj_user_ads ON pla_ads_id = ads_id JOIN pj_ads_style ON ads_ast_id = ast_id';
			$res = $AdsBase->get($tabel,['*'], sprintf(" and pla_id=%d", $pla), true);
			$adsArr = $res['data'];
			if(!empty($adsArr))
			{
				if($adsArr['ads_u_id'] > 0)
				{
					$LibYpApi = new LibYpApi();
					$res = $LibYpApi->get('user/getUserById', ['uid'=>$adsArr['ads_u_id']]);
					$adsArr['user'] = $res['data'];
				}

				$adsArr['imgs'] = !empty($adsArr['ads_img']) ? explode(',', $adsArr['ads_img']): [];
				$pg_id = $adsArr['pa_pg_id'];
				$p_id = $adsArr['pa_id'];

				//投放时间
				$res = $AdsBase->get('pj_place_ads_time',['*'], sprintf(" and pat_pla_id=%d", $adsArr['pla_id']));
				foreach($res['data'] as $k=>$v)
				{
					$chkArr['pc'][$v['pat_pc_id']] = $v['pat_pc_id'];
					$chkArr['word'][$v['pat_keyword']] = $v['pat_keyword'];
					$v['pat_btime'] = date('Y-m-d', $v['pat_btime']);
					$v['pat_etime'] = date('Y-m-d', $v['pat_etime']);
					if($adsArr['pa_is_area'] && $adsArr['pa_is_keyword'])
					{
						$patArr['word_'.$v['pat_keyword'].'-pc_'.$v['pat_pc_id']][] = $v;
					}
					else if($adsArr['pa_is_area'])
					{
						$patArr[$v['pat_pc_id']][] = $v;
					}
					else if($adsArr['pa_is_keyword'])
					{
						$patArr[$v['pat_keyword']][] = $v;
					}
					else
					{
						$patArr[] = $v;
					}
				}
			}
		}
		$adsArr['ads_url_data'] = json_decode($adsArr['ads_url_data'],JSON_FORCE_OBJECT);
		if($adsArr['ads_url'] ==  mvc::$cfg['HOST']['b2c'].'company/info?ads_id='.$adsArr['ads_id']){
            $adsArr['ads_type'] = 1;
        }else{
		    if(empty($adsArr['ads_id'])){
		        $adsArr['ads_type'] = 1;
            }else{
                $adsArr['ads_type'] = 2;
            }
        }

        // 复制内容删除ID数据
        if ($Params['copy'] && !$Params['pla_id'])
        {
            if ($adsArr['pal_shoufei'] == 1) {
                $adsArr['ads_link'] = $adsArr['ads_id'];
            }

            $adsArr = array_merge($adsArr, [
                'pla_id' => 0,
                'ads_id' => 0,
                'pla_ads_id' => 0,
            ]);
        }

        $adsArr['ads_link_name'] = '';
        if ($adsArr['ads_link'])
        {
            $res = $AdsBase->get('pj_user_ads', ['ads_id', 'ads_name'], sprintf('and ads_id = %d', $adsArr['ads_link']), true);
            if ($res['data']) {
                $adsArr['ads_link_name'] = $res['data']['ads_name'];
            }
        }

		//业务员
		// $PjlBase = new PjlBase();
		// $salesRes = $PjlBase->get('bu_user',['usr_name']," AND usr_status=1 AND usr_name!='' order by usr_seq,convert(usr_name using gbk)");
		$B2cbase = new B2cBase();
		$salesRes = $B2cbase->getYeWuList();
		LibTpl::Set('salesArr', $salesRes['data']);

		//获取配置
		$adsBrandByMakeArr = [];
		$YpwBase = new YpwBase();
		$res = $YpwBase->getKeyVal('pjl_adsbrand_bymake');
		if($res['data']){
			$adsBrandByMake = $res['data'];
			//查对应的生产商
			$ComBase = new ComBase();
			$table = 'bc_model1 
			join bc_brand on mod1_brand_id= brand_id
			join bc_make on mod1_make_id= make_id';
			$res = $ComBase->get($table, ['brand_id', 'brand_name', 'make_id', 'make_name'], sprintf(" AND mod1_brand_id IN (%s) GROUP BY brand_id,make_id ORDER BY make_seq",$adsBrandByMake));
			if($res['data']){
				foreach($res['data'] as $v)
				{
					$adsBrandByMakeArr[$v['brand_id']][] = $v;
				}
			}
		}
		LibTpl::Set('adsBrandByMakeArr', $adsBrandByMakeArr);
		LibTpl::Set('adsAppAct',$this->adsAppAct);
        LibTpl::Set('adsArr', $adsArr);
        LibTpl::Set('chkArr', $chkArr);
        LibTpl::Set('patArr', $patArr);
        LibTpl::Set('pg_id', $pg_id);
        LibTpl::Set('p_id', $p_id);
        LibTpl::Set('Params', $Params);
        LibTpl::Set('title', '广告编辑-跑街的');
        LibTpl::Put();
    }

    /**
     * @method 搜索跑街令主广告
     */
    public function searchAds()
    {
        $Params = mvc::$URL_PARAMS;

        $arr = [];
        $word = LibFc::Escape($Params['query']);
        if (mb_strlen($word) > 0)
        {
            $AdsBase = new AdsBase();

            $column = ['ads_id', 'ads_name'];
            $where = sprintf('and ads_name like "%%%s%%" and pal_shoufei = 1', $word);
            $arr = $AdsBase->get('pj_user_ads join pj_place_ads on ads_id = pla_ads_id', $column, $where);

            $arr = $arr['data'];
        }

        echo json_encode($arr);
    }

    /**
     * @param $arr
     * @return array
     */
    private function flipDiagonally($arr) {
        $out = array();
        foreach ($arr as $key => $subarr) {
            foreach ($subarr as $subkey => $subvalue) {
                $out[$subkey][$key] = $subvalue;
            }
        }
        return $out;
    }

	/**
	  * @method 保存广告
	  * @author soul
	  * @copyright 2019/4/22
	  */
	function savePlaceAds()
	{
		LibRule::Check('NA02');
		$AdsPla = new AdsPla();
		$plaArr = $_POST['pla'];
		$adsArr = $_POST['ads'];
		$patArr = [];
		$link = $_POST['link'];
        $arr = [];
		$LibYpApi = new LibYpApi();
		$B2cbase = new B2cBase();	
		$salesRes = $B2cbase->getYeWuList();
		if($salesRes['data']){
			$salesArr  = array_column($salesRes['data'], 'au_name', 'au_uid');
		}
		if($plaArr['pla_au_uid']){
			$plaArr['pla_sales'] = $salesArr[$plaArr['pla_au_uid']];
		}
        if(!empty($link))
        {	
			$errorArr = [];
			$ignoreArr = [];
			//客户id查crm ctr_id
			if($adsArr['ads_u_id']){
				$CrmBase = new CrmBase();
				$crmCtrRes = $CrmBase->get('crm_customer',['ctr_id','ctr_uid'],sprintf(" AND ctr_uid=%d",$adsArr['ads_u_id']),true);				
				if($crmCtrRes['data']){
					$crmCtrInfo = $crmCtrRes['data'];
				}
			}
            //修改键并修改名称
            foreach ($link['type'] as $key => $value)
            {
                if(!empty($link['value'][$key]))
				{
					$row = [
                        'key' => $link['key'][$key] ?: '',
                        'value' => $link['value'][$key],
                        'sort' => $link['sort'][$key],
                        'type' => $value
                    ];
					if($value == 'im')
					{
						$YpwBase = new YpwBase();
						$row['key'] = LibFc::Escape($row['key']);
						$row['showkey'] = $row['key'];
						$res = $YpwBase->get('yp_user', ['u_id', 'u_name', 'u_nickname'], sprintf(" and (u_id=%d or u_name='%s' or (u_mobile='%s' and u_mobile_check = 'Y'))", $row['key'], $row['key'], $row['key']), true);
						if(empty($res['data'])) LibFc::ajaxJsonEncode(['status'=>false, 'data'=>$row['value'].'IM账号不存在']);
						$row['key'] = $res['data']['u_id'];
					}
					if($value == 'mulu')
					{
						// if(stripos($row['value'],'@')===FALSE) LibFc::ajaxJsonEncode(['status'=>false, 'data'=>$row['value'].'请保留@符号']);
						$row['showkey'] = $row['key'];
						$getData = ['account' => LibFc::Escape($row['key'])];
						$res = $LibYpApi->Get('user/getUserByAccount', $getData);
						if(empty($res['data'])) LibFc::ajaxJsonEncode(['status'=>false, 'data'=>$row['value'].'会员账号不存在']);
						$row['key'] = $res['data'][0]['u_id'];
					}
					//电话检测是否归属当前业务员
					if($value == 'phone' && $plaArr['pla_au_uid'] &&  preg_match('/^1\d{10}$/',  $row['key']) && !$_POST['force']){
						$res = $LibYpApi->Get('crm/checkMobileSales',['mobile' => $row['key']]);
						if ($res['status']) {
							
							if($res['data'] && $res['data']['au_uid'] && $res['data']['au_uid'] != $plaArr['pla_au_uid']){
								$errorArr[] = $row['key'] . '所属业务员为:' . $salesArr[$res['data']['au_uid']];
							}elseif($res['data']['cca_level_id'] != 5 && $res['data']['org_ctr_id']>0 &&  $res['data']['org_ctr_id'] != $crmCtrInfo['ctr_id']){
								//把非成交的手机号对应的客户（非主号）直接忽略
								$ignoreArr[] = $res['data']['org_ctr_id']; 	
							}	
						} 
					}
					$arr[] = $row;

                }
            }
			//存在不是同一个业务员的客户，直接提示
			if($errorArr){
				LibFc::ajaxJsonEncode(['status'=>false, 'data'=>implode("<br/>",$errorArr) ]);
			}
            //排序
            array_multisort(array_column($arr,'sort'),SORT_ASC,$arr);
        }
        $arr = json_encode($arr,true);

		$res = $AdsPla->get('pj_place', ['*'], sprintf(" and pa_id=%d limit 1", $plaArr['pla_pa_id']), true);
		if(empty($res['data'])) LibFc::ajaxJsonEncode(['status'=>false, 'data'=>'广告位不存在']);
		$paArr = $res['data'];
	
		//关键字+地区
		if(!empty($_POST['times']))
		{
            foreach($_POST['times'] as $unikey=>$v)
            {
                $t = explode('-', $unikey);
                $valIds = [];
                foreach($t as $tv)
                {
                    $tv = explode('_', $tv);
                    $valIds[$tv[0]] = $tv[1];
                }
                foreach($v as $vv)
                {
                    $t = explode(' ~ ', $vv);
                    if(count($t) == 2)
                        $patArr[] = ['pat_pc_id'=>(int) $valIds['pc'], 'pat_keyword'=>(int) $valIds['word'], 'pat_btime'=>strtotime($t[0]), 'pat_etime'=>strtotime($t[1])];
                }
            }
        }
		else if(!empty($paArr['pa_is_keyword']))
		{
		    if(!empty($_POST['wordtime'])){
                foreach($_POST['wordtime'] as $wordid=>$v)
                {
                    foreach($v as $vv)
                    {
                        $t = explode(' ~ ', $vv);
                        if(count($t) == 2){
                            $patArr[] = [
								'pat_keyword'=>$wordid,
								'pat_btime'=>strtotime($t[0]),
								'pat_etime'=>strtotime($t[1]),
								'pat_modpc'=>!empty($_POST['modpc'][$wordid])? 1: 0,
								'pat_modcv'=>!empty($_POST['modcv'][$wordid])? 1: 0,
								'pat_make_id'=>!empty($_POST['make'][$wordid])? $_POST['make'][$wordid]: 0,
							];
						}
                    }
                }
            }
		}
		else if(!empty($paArr['pa_is_area']))
		{
		    if(!empty($_POST['pctime'])){

                foreach($_POST['pctime'] as $pcid=>$v)
                {
                    foreach($v as $vv)
                    {
                        $t = explode(' ~ ', $vv);
                        if(count($t) == 2)
                            $patArr[] = ['pat_pc_id'=>$pcid, 'pat_btime'=>strtotime($t[0]), 'pat_etime'=>strtotime($t[1])];
                    }
                }
            }
		}
		else
		{
			if(!empty($_POST['alltime']))
			{
                foreach($_POST['alltime'] as $vv)
                {
					$t = explode(' ~ ', $vv);
					if(count($t) == 2)
						$patArr[] = ['pat_pc_id'=>0, 'pat_btime'=>strtotime($t[0]), 'pat_etime'=>strtotime($t[1])];
                }
            }
		}

        $adsArr['ads_link'] = !empty($adsArr['ads_link']) ?$adsArr['ads_link']: 0;
		$adsArr['ads_img'] = implode(',', $_POST['imgs']);
		if($adsArr['ads_show_style'] == 'im')
		{
			$LibYpApi = new LibYpApi();
			$res = $LibYpApi->get('user/getUserById', ['uid'=>$adsArr['ads_u_id']]);
			$adsArr['ads_ims'] = json_encode(['uid'=>$res['data']['u_id'], 'u_name'=>$res['data']['u_name'], 'u_nickname'=>$res['data']['u_nickname']], JSON_UNESCAPED_UNICODE);
		}
		else
		{
			$adsArr['ads_ims'] = '{}';
		}
		$res = $AdsPla->setPlaceAds($plaArr, $adsArr, $patArr,$arr,$ignoreArr);
		LibFc::ajaxJsonEncode($res);
	}

	/**
	 * [absStatistics 广告位统计]
	 * @Author   Yangxing
	 * @DateTime 2020-05-18T15:16:42+0800
	 * @return   [type]                   [tpl]
	 */
	public function absStatistics()
    {
		LibRule::Check('NA01');
		$Params = mvc::$URL_PARAMS;
		$nowPage = isset($Params['page']) && $Params['page'] > 0 ? (int) $Params['page']:1;
        $perPage = empty($_COOKIE['perPage'])? 20: (int) $_COOKIE['perPage'];
    	$adsBase = new AdsBase();
    	$ypcBase = new YpcBase();
		$res = $ypcBase->get('yp_brand', ['b_id,b_name'], ' order by b_initial');
		$brand = array_column($res['data'], 'b_name', 'b_id');

		$res = $adsBase->get('pj_place', ['*']);
		$place = array_column($res['data'], 'pa_name', 'pa_id');

		$res = $adsBase->get('yp_province_city', ['pc_id,pc_name'], ' and pc_pid=0');
		$address = array_column($res['data'], 'pc_name', 'pc_id');
		$address[0] = '其它';
		
    	$where = '';
		if($Params['ard_word'])
		{
			$where .= sprintf(" and ard_word=%d",(int)$Params['ard_word']);
		}

		if(is_numeric($Params['ard_pct_id']))
		{
			$where .= sprintf(" and ard_pct_id=%d",$Params['ard_pct_id']);
		}

		if($Params['pa_id']){
			$where .= sprintf(" and pa_id = %d",$Params['pa_id']);
		}
		if($Params['ard_modtype']){
			$where .= sprintf(' and ard_modtype="%s"',$Params['ard_modtype']);
		}
		if(empty($Params['ard_date']) || strlen($Params['ard_date']) < 14)
			$Params['ard_date'] = date('Y-m', strtotime('-11 month')).' ~ '.date('Y-m');
		
		$temp = explode(" ~ ",$Params['ard_date']);
		$where .= sprintf(" and left (ard_date, 6) between %d and %d",date('Ym',strtotime($temp['0'])),date('Ym',strtotime($temp['1'])));

		$group = [];
		if(!empty($Params['grouppct'])) $groupArr[] = 'ard_pct_id';
		if(!empty($Params['groupmake'])) $groupArr[] = 'ard_word';
	
		if(empty($groupArr))
		{
			$Params['grouppa'] = 'on';
			$Params['groupdate'] = 'on';
		}
		if(!empty($Params['groupdate'])) $groupArr[] = 'left (ard_date, 6)';
		if(!empty($Params['grouppa'])) $groupArr[] = 'pa_id';
		if(!empty($Params['groupmodtype'])) $groupArr[] = 'ard_modtype';

		$group = ' group by '.implode(',', $groupArr);

		$table = sprintf("(select 1 from pj_ads_report_date left join pj_place on pa_id = ard_pa_id WHERE 1=1 %s %s) AS aa",$where,$group);
		$res = $adsBase->get($table, ['count(*) count'], '', true);
		$count = $res['data']['count'];
		$list = [];
		if($count > 0)
		{
			$table = 'pj_ads_report_date left join pj_place on pa_id = ard_pa_id';
			$filed = ['pa_id, pa_name, pa_is_keyword, pa_keyword_type, left(ard_date, 6) as ard_date, ard_pct_id as ard_pct_id, ard_word,ard_modtype, sum(ard_show) as ard_show, sum(ard_click) as ard_click'];

			$res = $adsBase->get($table, $filed, sprintf(" %s %s limit %s,%s", $where,$group,($nowPage-1)*$perPage,$perPage));
			$list = $res['data'];
		}
        LibTpl::Set('page', LibPage::Show($count, $perPage));
		LibTpl::Set('modtype',['pc'=>'商用车','cv'=>'乘用车']);
		LibTpl::Set('address',$address);
		LibTpl::Set('Params',$Params);
		LibTpl::Set('place',$place);
		LibTpl::Set('list',$list);
    	LibTpl::Set('brand',$brand);
        LibTpl::Put();
    }

    //广告位统计
    public function adSlotStatistics()
    {
        //todo 权限
        $params = mvc::$URL_PARAMS;
        $plaId = (int) $params['ard_id'];
        if($plaId <= 0){
            throw new \Exception("Request is error");
        }
        $adsDb = (new AdsBase)->AdsDb;

		$groupByArr = [
			'day'=>['日统计', 'ard_date'],
			'month'=>['月统计', 'left(ard_date,6)'],
			'year'=>['年统计', 'left(ard_date,4)']
		];
		LibTpl::Set('groupByArr',$groupByArr);
		if(empty($groupByArr[$params['group']]))
			$params['group'] = 'month';
		$dfiled = $groupByArr[$params['group']][1];

        $result = $adsDb->Table(sprintf("select * from pj_place_ads_time where pat_pla_id =%d order by pat_etime desc",$plaId));
        $a = $adsDb->Row(sprintf("select * from pj_place_ads join pj_place on pa_id=pla_pa_id join pj_place_group on pg_id=pa_pg_id join pj_user_ads on ads_id=pla_ads_id JOIN pj_place_ads_time ON pat_pla_id = pla_id where ads_id=%d",$plaId));
        if($a['pa_keyword_type'] == 'brand'){
            $brandId = array_column($result,'pat_keyword');
            $where = '';
           // $where .= sprintf(" and ard_word in (%s)",implode(",",$brandId));
            $YpcBase = new YpcBase();
            $res =$YpcBase->Get('yp_brand', ['b_id as id','b_name as name'], sprintf(' and b_id in (%s) order by b_initial',implode(",",$brandId)));
            $allPcArr = array_column($res['data'], null, 'id');
            if(!empty($params['ard_month'])){
                $temp = explode(" ~ ",$params['ard_month']);
				$temp[0] = (int) date('Ymd',strtotime($temp[0]));
				//月份的天数
				$daynum = date('t',strtotime($temp[1]));
				$temp[1] = date('Ym',strtotime($temp[1])).$daynum;
                // $temp = array_map(function ($value){
                //     return (int) date('Ymd',strtotime($value));
                // },$temp);
                $where .= sprintf(" and ard_date between %d and %d",$temp['0'],$temp['1']);
            }
            if(!empty($params['ard_brand'])){
                $where .= sprintf(" and ard_word=%d",$params['ard_brand']);
            }
            $brand = $adsDb->Table(sprintf("select ard_word,sum(ard_show) as ard_show,sum(ard_click) ard_click, %s as ard_month from pj_ads_report_date as a where ard_ads_id=%d and 1=1 %s GROUP BY ard_month,ard_word order by ard_month desc",$dfiled, $plaId,$where));
            $brandArr = [];
            $click = 0;
            $show = 0;
            $other = [];
            foreach ($brand as $key => $value)
            {
                $click += $value['ard_click'];
                $show += $value['ard_show'];
                if(!in_array($value['ard_word'],$brandId)){
                    $other[] = $value;
                    unset($brand[$key]);
                }
            }
            $others = [];
            foreach ($other as $value)
            {
                $others[$value['ard_month']]['ard_click'] += $value['ard_click'];
                $others[$value['ard_month']]['ard_show'] += $value['ard_show'];
            }
            foreach ($brand as $val)
            {
                $brandArr[$val['ard_month']][] = $val;
            }
            $temp = [
                'ard_month' => '<span style="color: red;">全部汇总</span>',
                'ard_word' => '',
                'ard_pct_id' => '',
                'ard_show' => $show,
                'ard_click' => $click
            ];
            foreach ($brandArr as $key => &$item)
            {
                if(isset($others[$key])){
                    array_push($item,[
                        'ard_month' => $key,
                        'ard_word' => '其它',
                        'ard_pct_id' => 0,
                        'ard_show' => $others[$key]['ard_show'],
                        'ard_click' => $others[$key]['ard_click']
                    ]);
                }
                if(count($item) > 1){
                    foreach ($item as &$items)
                    {
                        if($items['ard_word'] != '其它'){
                            $items['ard_word'] = $allPcArr[$items['ard_word']]['name'];
                        }
                    }
                    array_multisort(array_column($item,'ard_show'), SORT_DESC, $item);
                    array_push($item,[
                        'ard_word' => "<span style='color: red;'>当月汇总<span>",
                        'ard_pct_id' => '',
                        'ard_show' => array_sum(array_column($item,'ard_show')),
                        'ard_click' => array_sum(array_column($item,'ard_click')),
                        'ard_month' => $item['0']['ard_month']
                    ]);
                }else{
                    $item['0']['ard_word'] = $allPcArr[$item['0']['ard_word']]['name'];
                }
            }
            $brandArr['全部汇总']['0'] = $temp;
            LibTpl::Set('allPcArr',$allPcArr);
            LibTpl::Set('brandArr',$brandArr);
        }
        if(empty($brandArr)){
            //todo 优化
            if($a['pa_is_area']){
                $cityId = array_column($result,'pat_pc_id');
                $where = '';
                //$where .= sprintf(" and ard_pct_id in (%s)",implode(",",$cityId));
                if(!empty($params['ard_month'])){
                    $temp = explode(" ~ ",$params['ard_month']);
					$temp[0] = (int) date('Ymd',strtotime($temp[0]));
					//月份的天数
					$daynum = date('t',strtotime($temp[1]));
					$temp[1] = date('Ym',strtotime($temp[1])).$daynum;
                    $where .= sprintf(" and ard_date between %d and %d",$temp['0'],$temp['1']);
                }
                if(!empty($params['pc_id'])){
                    $where .= sprintf(" and ard_pct_id=%d",$params['pc_id']);
                }

                $address = $adsDb->Table(sprintf("select pc_id as id ,pc_name as name from yp_province_city where pc_pid=0 and pc_id in (%s)",implode(',',$cityId)));
                $address = array_column($address,null,'id');
                $list =  $adsDb->Table(sprintf("select ard_pct_id,sum(ard_show) as ard_show,sum(ard_click) ard_click, %s as ard_month from pj_ads_report_date where ard_ads_id=%d and 1=1 %s GROUP BY ard_month,ard_pct_id order by ard_month desc",$dfiled, $plaId,$where));
                $other = [];
                $click = 0;
                $show = 0;
                foreach ($list as $key => $value)
                {
                    $click += $value['ard_click'];
                    $show += $value['ard_show'];
                    if(!in_array($value['ard_pct_id'],$cityId)){
                        $other[] = $value;
                        unset($list[$key]);
                    }
                }
                $others = [];
                foreach ($other as $value)
                {
                    $others[$value['ard_month']]['ard_click'] += $value['ard_click'];
                    $others[$value['ard_month']]['ard_show'] += $value['ard_show'];
                }
                $listArr = [];
                foreach ($list as $value)
                {
                    $listArr[$value['ard_month']][] = $value;
                }
                $temp = [
                    'ard_month' => '<span style="color: red;">全部汇总</span>',
                    'pc_name' => '',
                    'ard_pct_id' => '',
                    'ard_show' => $show,
                    'ard_click' => $click
                ];
                foreach ($listArr as $key => &$value)
                {
                    if(isset($others[$key])){
                        array_push($value,[
                            'ard_month' => $key,
                            'pc_name' => '其它',
                            'ard_pct_id' => 0,
                            'ard_show' => $others[$key]['ard_show'],
                            'ard_click' => $others[$key]['ard_click']
                        ]);
                    }

                    if(count($value) > 1){
                        array_multisort(array_column($value,'ard_show'), SORT_DESC, $value);
                        foreach ($value as &$items)
                        {
                            if($items['pc_name'] != '其它'){
                                $items['pc_name'] = $address[$items['ard_pct_id']]['name'];
                            }
                        }
                        //var_dump($value);
                        array_push($value,[
                            'pc_name' => "<span style='color: red;'>当月汇总<span>",
                            'ard_pct_id' => '',
                            'ard_show' => array_sum(array_column($value,'ard_show')),
                            'ard_click' => array_sum(array_column($value,'ard_click')),
                            'ard_month' => $value['0']['ard_month']
                        ]);
                    }else{
                        $value['0']['pc_name'] = $address[$value['0']['ard_pct_id']]['name'];
                    }
                }
                $listArr['全部汇总']['0'] = $temp;
                LibTpl::Set('address',$address);
                LibTpl::Set('listArr',$listArr);
            }
			if(empty($a['pa_is_area']) && empty($a['pa_is_keyword'])){
				$where = '';
               
                if(!empty($params['ard_month'])){
                    $temp = explode(" ~ ",$params['ard_month']);
					$temp[0] = (int) date('Ymd',strtotime($temp[0]));
					//月份的天数
					$daynum = date('t',strtotime($temp[1]));
					$temp[1] = date('Ym',strtotime($temp[1])).$daynum;
                    $where .= sprintf(" and ard_date between %d and %d",$temp['0'],$temp['1']);
                }

				$list =  $adsDb->Table(sprintf("select ard_pct_id,sum(ard_show) as ard_show,sum(ard_click) ard_click, %s as ard_month from pj_ads_report_date where ard_ads_id=%d and 1=1 %s GROUP BY ard_month order by ard_month desc",$dfiled, $plaId,$where));
                $other = [];
                $click = 0;
                $show = 0;
                foreach ($list as $key => $value)
                {
                    $click += $value['ard_click'];
                    $show += $value['ard_show'];
                }
                
                $listArr = [];
                foreach ($list as $value)
                {
                    $listArr[$value['ard_month']][] = $value;
                }
                $temp = [
                    'ard_month' => '<span style="color: red;">全部汇总</span>',
                    'ard_show' => $show,
                    'ard_click' => $click
                ];
                foreach ($listArr as $key => &$value)
                {
                    if(isset($others[$key])){
                        array_push($value,[
                            'ard_month' => $key,
                            'ard_show' => $others[$key]['ard_show'],
                            'ard_click' => $others[$key]['ard_click']
                        ]);
                    }

                    if(count($value) > 1){
                        array_multisort(array_column($value,'ard_show'), SORT_DESC, $value);
                        array_push($value,[
                            'ard_show' => array_sum(array_column($value,'ard_show')),
                            'ard_click' => array_sum(array_column($value,'ard_click')),
                            'ard_month' => $value['0']['ard_month']
                        ]);
                    }
                }
				unset($value);
                $listArr['全部汇总']['0'] = $temp;
                LibTpl::Set('quanqiuArr',$listArr);
			}
        }
		

        LibTpl::Set('title',$a['ads_name'].'---月统计报表');
        LibTpl::Set('param',$params);
        LibTpl::Set('plaId',$plaId);
        LibTpl::Put();
    }

	/**
	 * @method 删除广告位
	 * @author zhengweihua 
	 * @copyright 2024-04-24
	 */
	public function delPlaceAds()
	{
		if($_SERVER['REQUEST_METHOD']=='POST')
		{
			$plaId= (int)$_POST['pla_id'];
			if($plaId)
			{
				$AdsPla = new AdsPla();
				$res = $AdsPla->delAds($plaId);
				LibFc::ajaxJsonEncode($res);
			}
		}
	}
}
