<?php

/**
 * +----------------------------------------------------------------------
 * | Created By PhpStorm
 * +----------------------------------------------------------------------
 * | DATE: 2021/4/14
 * +----------------------------------------------------------------------
 * | TIME: 15:46
 * +----------------------------------------------------------------------
 * | Author: YangXing(925032253@qq.com)
 * +----------------------------------------------------------------------
 * | Class: crmAction
 * +----------------------------------------------------------------------
 */



/**
 * crm 管理
 * Class crmAction
 */
class crmAction extends baseAction
{
    public function index()
    {
		$param = mvc::$URL_PARAMS;
        LibTpl::Set('param',$param);

		if(isset($param['from'])&& $param['from']=='ypim')
		{
			$param['page'] = 1;
			$param['per'] = 1;
			$LibCrmApi = new LibCrmApi();
			$res = $LibCrmApi->Get('cus/getCustomerList',$param);
			$result = $res['data'];
			if(count($result['data'])==0){
				LibFc::Go('http://crm2.yiparts.com:86/Admin/index.php/Member/Index?Type=0&account='.$param['word']);
				exit();
			}
		}

        $ypwModel = new YpwBase();
        $addressData = $ypwModel->YpwDb->Table(sprintf("select pc_pid,pc_id,pc_name from yp_province_city where pc_pid=0"));
        LibTpl::Set('address',$addressData);
		$LibCrmApi = new LibCrmApi();
		$res = $LibCrmApi->Get('cus/getBrands');
		LibTpl::Set('brandArr',$res['data']);
		$orderArr = [
			'null'=>['默认', ''],
			'pv'=>['浏览数', ' order by ua_pv desc'],
			'vin_count'=>['VIN数', ' order by ua_vin_count desc'],
			'number_count'=>['号码数', ' order by ua_number_count desc'],
			'epc_count'=>['EPC数', ' order by ua_epc_count desc']
		];
		//所有业务员

		$B2cBase = new B2cBase();
		$res = $B2cBase->get('an_user',['au_uid,au_group,au_name']," AND au_group IN ('跑街令','业务部') AND au_status=1 ORDER BY  au_name desc");
		$salesArr =[];
		foreach ($res['data'] as $key => $val) {
			$salesArr[$val['au_group']][$val['au_uid']] = $val['au_name'];
		}
		foreach ($salesArr as $skey => $sval) {
			$allKeys =array_keys($sval);
			
			$salesArr[$skey][implode(',',$allKeys)] = sprintf('选择 [%s] 所有人', $skey);
		}
		LibTpl::Set('salesArr',$salesArr);
		$endDayArr = [
			7=>'7天内',
			15=>'15天内',
			30=>'30天内',
			60=>'60天内',
			90=>'90天内',
			-7=>'过期7天',
			-15=>'过期15天',
			-30=>'过期30天',
			-60=>'过期60天',
			-365=>'所有过期'
		];
		LibTpl::Set('endDayArr', $endDayArr);

		LibTpl::Set('orderArr',$orderArr);
		
        LibTpl::Put();
    }

    public function getAddress()
    {
    	$ypwModel = new YpwBase();
    	if($_POST['pc_id'] > 0){
    	   $addressData = $ypwModel->YpwDb->Table(sprintf("select pc_pid,pc_id,pc_name from yp_province_city where pc_pid=%d",$_POST['pc_id']));

    	}else{
    	   $addressData = $ypwModel->YpwDb->Table(sprintf("select pc_pid,pc_id,pc_name from yp_province_city where pc_pid=0"));

    	}
    	//ob_clean();
    	echo json_encode($addressData);
    	//LibFc::ajaxJsonEncode(['status' => true,'data' => $addressData]);
    }

    public function communicationRecord()
    {
		$Params = mvc::$URL_PARAMS;
		$page = isset($Params['page']) ? $Params['page'] : 1;
		$perPage = isset($_COOKIE['perPage'])? $_COOKIE['perPage'] : 20;
		$where = '';
		$ctrId = $Params['ctrId'];
		if(!$ctrId) LibTpl::Error('参数错误');
		$cfoId = $Params['cfoId'];
		$CrmBase = new CrmBase();
		$cfoArr = [];
		if($cfoId){
			$res = $CrmBase->get('crm_follow',['*'],sprintf(" AND cfo_id=%d",$cfoId),true);
			$cfoArr = $res['data'];
		}
		LibTpl::Set('cfoArr',$cfoArr);
		$res = $CrmBase->get('crm_customer',['ctr_id,ctr_tel,ctr_kefu'],sprintf(" and ctr_id=%d",$ctrId),true);
		$ctrArr = $res['data'];
		LibTpl::Set('ctrArr',$ctrArr);
		//此客户现在有业务员，当前用户只能看自己的跟进记录
		$isdeal = 0; //是否成交 0为未成交

		$res = $CrmBase->get('crm_customer_admin', ['cca_au_uid'], sprintf(" and cca_ctr_id=%d and cca_end_time >%d", $Params['ctr_id'], time()),true);
		if(!empty($res['data']))
		{
			if($res['data']['cca_au_uid']!= $_SESSION['_userid'])
			{	
				if($_SESSION['_usergroup']=='yewu'){
					$where .= sprintf(" and cfo_au_uid = %d", $_SESSION['_userid']);
				}elseif ($_SESSION['_usergroup']=='shangji') {
					$where .= sprintf(" and cfo_au_uid in (%s)", implode(',',$_SESSION['_xiajiUid']));
				}
				
			}
			$isdeal=1;
		}

		$where .= sprintf(" and cfo_ctr_id = %d", $ctrId);
		$table = 'crm_follow join crm_customer on ctr_id = cfo_ctr_id';
		$res = $CrmBase->get($table, ['count(*) as count'], $where, true);
		$total = $res['data']['count'];
		$listArr = [];
		if($total > 0)
		{
			$where .= sprintf(" order by cfo_id desc limit %d, %d", ($page-1)*$perPage, $perPage);
			$res = $CrmBase->get($table, ['ctr_id, ctr_uname, ctr_comname, ctr_contact, ctr_tel, cfo_id, cfo_txt, cfo_au_name, cfo_au_uid, cfo_au_name, cfo_atime,cfo_pass,cfo_check'], $where);

			//查离职员工的au_uid
			$auUid = [];
			$B2cBase = new B2cBase();
			$aures = $B2cBase->get('an_user', ['au_uid'], " and au_status=0");
			if ($aures['data']) {
				$auUid = array_column($aures['data'], 'au_uid');
			}
			foreach ($res['data'] as $key =>&$val) {
				//未成交且属于离职员工可直接查看
				if($isdeal==0)
				{	
					if($auUid && in_array($val['cfo_au_uid'],$auUid)) continue;
					
					if($_SESSION['_usergroup']=='shangji' && !in_array($val['cfo_au_uid'],$_SESSION['_xiajiUid'])) $val['cfo_txt'] = '不可查看';
	
					if($isdeal!=1 && $_SESSION['_usergroup']=='yewu' && $val['cfo_au_uid'] !=$_SESSION['_userid']){
						
						$val['cfo_txt'] = '不可查看';
					}
				}
			}
			unset($val);
			$listArr = $res['data'];
		}
		LibTpl::Set('followArr',$listArr);
		LibTpl::Set('Pages',LibPage::Show($total,$perPage,false));
		$invalidArr = ['电话打不通','听到跑街令就挂了','直接挂掉了'];
		$typeArr = ['call'=>'电话','weixin'=>'微信','qq'=>'QQ','other'=>'其他'];
		if($cfoId && $cfoArr['cfo_pass']==1){
			$invalidArr = $typeArr;
		}
		LibTpl::Set('invalidArr',$invalidArr);
		LibTpl::Set('typeArr',$typeArr);

		$res = $CrmBase->get('crm_plan',['*'],sprintf(" AND cp_from='general' AND cp_ctr_id=%d AND cp_au_uid=%d",$ctrId,$_SESSION['_userid']));
		LibTpl::Set('planArr',$res['data']);
		$this->HEAD_CSSJS['plugin'][] = 'ueditor';
		LibTpl::Set('HEAD_CSSJS', $this->HEAD_CSSJS);
		LibTpl::Set('Params',$Params);
        LibTpl::Put();
    }

	/**
	 * @method 导出数据
	 * @author zhengweihua 
	 * @copyright 2023-05-31
	 */
	public function export()
	{
		LibFc::checkDlRule('DL06');
		$params =mvc::$URL_PARAMS;
		// 全部取接口可能报超时，改为分页调取
		$params['page'] = 1;
		$params['per'] = 1000;
		$LibCrmApi = new LibCrmApi();
		$res = $LibCrmApi->Get('cus/getCustomerList',$params);
		$result = $res['data'];
		$aValues = [];
		if($result['data'])
		{	
			$arr = $result['data'];
			foreach ($arr as $val) 
			{
				$contact = '';
				if($val['ctr_contact']){
					$contact .= $val['ctr_contact'];
				}
				if($val['ctr_uname']){
					if($val['ctr_contact']){
						$contact .= '-'.$val['ctr_uname'];
					}else{
						$contact .= $val['ctr_uname'];
					}
				}
				$time = '';
				if($val['cansee'])
				{	
					if($val['ctr_pjl_shop_id'] > 0 && $val['shop_vip_etime'] > time()){
						$time =  date('Y-m-d',$val['shop_vip_etime'])."到期 [".ceil(($val['shop_vip_etime']-time())/3600/24)."]";
					}else if($val['ctr_pjl_shop_id'] > 0 && $val['shop_vip_etime'] <= time() && $val['shop_vip_etime'] > 0) {
						$time =  date('Y-m-d',$val['shop_vip_etime'])."到期 [过".ceil((time()-$val['shop_vip_etime'])/3600/24)."]";
					}else if($val['ctr_pjl_shop_id'] > 0 && $val['shop_vip_etime'] == 0){
						$timer = (int) (time() - $val['shop_apply_time']);
						if((int)($timer / 86400) < 1){
							$tips =  '今天';
						}else{
							$tips = floor($timer / 86400).'天前';
						}
						$time =  date('Y-m-d',$val['shop_apply_time'])."申请 [".$tips."]";
					}else if($val['ctr_pjl_shop_id'] == 0 && $val['shop_vip_etime'] == 0){
						$time =  "";
					}
				} 
				$aValues[] = [
					$val['cansee']?implode('',$val['pcts']):'',
					$val['ctr_comname'],
					$val['ctr_addr'],
					$contact,
					$val['ctr_tel'],
					$time,
					$val['ua_pv'],
					$val['ua_vin_count'],
					$val['ua_number_count'],
					$val['ua_epc_count']
				];
			}
				
		}

		$OthExcel = new OthExcel();
		$aValues['fields'] = [
			'省市','公司名称','地址','联系人','联系电话','到期/申请','浏览','VIN','号码','EPC'
		];
		$OthExcel->writer($aValues);exit;
	}

	/**
	 * @method 获取广告位信息
	 * @author zhengweihua 
	 * @copyright 2024-01-30
	 */
	public function getPlaceAds()
	{
		$Params = mvc::$URL_PARAMS;
		$placeId = (int)$Params['placeId'];
		if($placeId > 0)
		{	
			$AdsBase = new AdsBase();
			$table = 'pj_place_ads 
			join pj_place on pa_id=pla_pa_id 
			JOIN pj_user_ads ON pla_ads_id = ads_id
			JOIN pj_place_ads_time ON pat_pla_id = pla_id';
			$res = $AdsBase->get($table,['pla_id,pa_name,ads_name,ads_title,pj_place_ads_time.*'], sprintf(" and pla_id=%d", $placeId));
			$arr = [];
			$titleArr = [];
			$timeArr = [];
			if($res['data']){
			
				$ypcBase = new YpcBase();
				$res1 = $ypcBase->get('yp_brand', ['b_id,b_name'], ' order by b_initial');
				$brand = array_column($res1['data'], 'b_name', 'b_id');

				$res2 =$AdsBase->Get('yp_province_city', ['pc_id as id','pc_name as name'], '');
				$pcArr = array_column($res2['data'], 'name', 'id');

				$makeIds = array_column($res['data'],'pat_make_id');
				$ComBase = new ComBase();
				$makeres = $ComBase->get('bc_make',['make_id','make_name'],sprintf(" AND make_id in (%s)", implode(',',$makeIds)));
				$makeArr = array_column($makeres['data'],'make_name','make_id');

				foreach ($res['data'] as $key => $val) {
					$timeArr[] = $val['pat_btime'];
					$timeArr[] = $val['pat_etime'];
					$arr[$key][]= $val['pa_name'];
					if($val['pat_keyword']){
						// $arr[$key][] = $brand[$val['pat_keyword']];
						if($val['pat_make_id'] && $makeArr){
							$arr[$key][] = $makeArr[$val['pat_make_id']];
						}else{
							$arr[$key][] = $brand[$val['pat_keyword']];
						}
						if($val['pat_modpc'] && $val['pat_modcv']){
							$temp = '[乘|商]';
						}elseif ($val['pat_modpc']) {
							$temp = '乘用车';
						}elseif ($val['pat_modcv']) {
							$temp = '商用车';
						}
						$arr[$key][] = $temp;
					}elseif ($val['pat_pc_id']) {
						$arr[$key][] = $val['pat_pc_id']? $pcArr[$val['pat_pc_id']]:'全球';
					}
					$arr[$key][] = $val['ads_name']?:$val['ads_title'];
				}
				$titleArr = [];
				foreach ($arr as $key => $val) {
					$titleArr[] = implode('-',$val);
				}
			}
			$data = [
				'title'=>$titleArr,
				'mintime'=>date('Y-m-d',min($timeArr)),
				'maxtime'=>date('Y-m-d',max($timeArr))
			];
			LibFc::ReturnJson(true,$data);
		}
	}

	/**
	 * @method 广告位
	 * @author zhengweihua 
	 * @copyright 2024-02-19
	 */
	public function addPlaceAds()
	{
		$Params = mvc::$URL_PARAMS;
		$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 ($Params['copy']) {
					$adsArr['fct_audit'] = 0;
					$adsArr['ads_u_id'] = 0;
				} else {
					$CrmBase = new CrmBase();
					$table = 'fad_contract join fad_link_fct_sve on fsl_fct_id = fct_id';
					$fctRes = $CrmBase->get($table, ['*'], sprintf(" AND fsl_des_id=%d", $pla), true);
					$adsArr['fct_audit'] = $fctRes['data']['fct_status'] >= 1 ? 1 : 0;
				}
				

				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'];
            }
        }

		//获取配置
		$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',['openShop'=>'商家入驻']);
        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', '广告编辑-跑街的');
		if($adsArr['fct_audit']){
			LibTpl::Put('crm/addPlaceAds2.php');
		}else{
			LibTpl::Put();
		}
        
	}

	/**
	 * @method 
	 * @author zhengweihua 
	 * @copyright 2024-02-20
	 */
	public function savePlaceAds()
	{
		$AdsPla = new AdsPla();
		$plaArr = $_POST['pla'];
		$adsArr = $_POST['ads'];
		$patArr = [];
		$link = $_POST['link'];
        $arr = [];
		$LibYpApi = new LibYpApi();
		$B2cbase = new B2cBase();	
		$salesRes = $B2cbase->getYeWuList(0);
		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'];
						$LibYpApi = new LibYpApi();
						$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'])){
						$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'];
		$mintime = [];
		$maxtime = [];
		//已审核合同不可更改合同时间
		if($_POST['fctAuidt']==1)
		{
			if(!empty($paArr['pa_is_keyword']))
			{
				if(!empty($_POST['word']))
				{
					foreach ($_POST['word'] as $key => $val) 
					{	
						$t = explode(' ~ ', $_POST['wordtime'][$key]);
						if(count($t)==2)
						{
							$patArr[] = [
								'pat_keyword'=>$val,
								'pat_btime'=>strtotime($t[0]),
								'pat_etime'=>strtotime($t[1]),
								'pat_modpc'=>!empty($_POST['modpc'][$key])? 1: 0,
								'pat_modcv'=>!empty($_POST['modcv'][$key])? 1: 0,
								'pat_make_id'=>!empty($_POST['make'][$key])? $_POST['make'][$key]: 0,
							];
							$mintime[] = strtotime($t[0]);
							$maxtime[] = strtotime($t[1]);
						}
					}
				}
			}
			else if(!empty($paArr['pa_is_area']))
			{
				if(!empty($_POST['pc'])){

					foreach($_POST['pc'] as $key=>$val)
					{
						$t = explode(' ~ ', $_POST['pctime'][$key]);
						if(count($t) == 2)
						{
							$patArr[] = ['pat_pc_id'=>$val, 'pat_btime'=>strtotime($t[0]), 'pat_etime'=>strtotime($t[1])];
							$mintime[] = strtotime($t[0]);
							$maxtime[] = 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])];
							$mintime[] = strtotime($t[0]);
							$maxtime[] = strtotime($t[1]);
						}
							
					}
				}
			}
		}
		else
		{
			//关键字+地区
			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])];
							$mintime[] = strtotime($t[0]);
							$maxtime[] = 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,
								];
								$mintime[] = strtotime($t[0]);
								$maxtime[] = strtotime($t[1]);
							}
						}
					}
				}
			}
			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])];
								$mintime[] = strtotime($t[0]);
								$maxtime[] = 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])];
							$mintime[] = strtotime($t[0]);
							$maxtime[] = strtotime($t[1]);
						}
							
					}
				}
			}
		}
		

        $adsArr['ads_link'] = !empty($adsArr['ads_link']) ?$adsArr['ads_link']: 0;
		$adsArr['ads_img'] = implode(',', $_POST['imgs']);

		//判断是否锁定中
		$this->chkAdsLock($plaArr,$patArr,$adsArr);
		
		$res = $AdsPla->setPlaceAds($plaArr, $adsArr, $patArr,$arr,$ignoreArr);

		//如果有fsl_id服务项目则直接更新服务项目
		if($_POST['fsl_id']  && $res['data'])
		{	
			$fsl_id = (int)$_POST['fsl_id'];
			$upda = ['fsl_des_id'=>$res['data']];
			if($mintime && $maxtime)
			{
				$upda['fsl_btime'] =min($mintime);
				$upda['fsl_etime'] =max($maxtime);
			}
			$CrmBase = new CrmBase();	
			$CrmBase->set('fad_link_fct_sve',$upda,sprintf(" AND fsl_id =%d",$fsl_id));
		}
		
		LibFc::ajaxJsonEncode($res);
	}

	//获取广告位列表
	public function getPlaceOpt()
	{
		$AdsBase = new AdsBase();
        $res = $AdsBase->get('pj_place',['*'], ' order by pa_seq, pa_name');
		LibFc::ajaxJsonEncode($res);
	}

	//获取广告位明细
	public 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]);
	}

	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%%"', $word);
			if($Params['onlyMain']){
				$where .= ' and pal_shoufei = 1';	
			}
            $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);
    }

	/**
	 * @method 获取最近广告信息
	 * @author zhengweihua 
	 * @copyright 2024-02-26
	 */
	public function getPrevAdsInfo()
	{
		$Params = mvc::$URL_PARAMS;
		if($Params['pa_id'] && $Params['u_id'] && ($Params['pcids']||$Params['wordids'])){
			$paId = (int)$Params['pa_id'];
			$uid = (int)$Params['u_id'];
			$AdsBase = new AdsBase();

			$res = $AdsBase->get('pj_user_ads',['*'],sprintf(" and ads_u_id=%d",$uid));
			if(!$res['data']) LibFc::ReturnJson(true,[]);

			$table = 'pj_place_ads
			join pj_user_ads on pla_ads_id = ads_id
			join pj_place_ads_time on pat_pla_id = pla_id';

			$where = sprintf(" AND pal_shoufei=1 AND pla_pa_id=%d AND ads_u_id=%d ",$paId,$uid);
			foreach ($Params as $key => $val) {
				if(!$val) continue;
				switch ($key) {
					case 'pcids':
						$where .= sprintf(" AND pat_pc_id IN (%s)",$val);
						break;
					case 'wordids':
						$where .= sprintf(" AND pat_keyword IN (%s)",$val);
						break;
				}
			}
			$adsArr = [];
			//取符合的最近到期的一条
			$res = $AdsBase->get($table,['pj_user_ads.*,pat_etime'],sprintf(" %s group by ads_id order by pat_etime desc",$where),true);
			if($res['data']){
				$adsArr = $res['data'];
				$adsArr['mintime'] = date('Y-m-d',$adsArr['pat_etime']);
				if ($adsArr['ads_img']) {
					$adsArr['ads_img_url'] = mvc::$cfg['FILE_CENTER']['bna']['url_get'] . '&c=bna&f=' . $adsArr['ads_img'] . mvc::$cfg['FILE_CENTER']['bna']['get_uri'];
				}
				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;
					}
				}
				$adsArr['ads_url_data'] = json_decode($adsArr['ads_url_data'],JSON_FORCE_OBJECT);
				
				foreach ($adsArr['ads_url_data'] as $key => &$val) {
					if($val['type']=='image'){
						$val['img_url'] = mvc::$cfg['FILE_CENTER']['bna']['url_get'] . '&c=bna&f=' . $val['value'] . mvc::$cfg['FILE_CENTER']['bna']['get_uri'];
					}
				}
				unset($val);
				$adsArr['ads_url_data'] = json_encode($adsArr['ads_url_data']);
			}
			LibFc::ReturnJson(true,$adsArr);
		}
		LibFc::ReturnJson(true,[]);
	}

	/**
	 * @method 获取广告位的可用时间
	 * @author zhengweihua 
	 * @copyright 2024-03-01
	 */
	public function getAdsUseTime()
	{
		$Params = mvc::$URL_PARAMS;
		if($Params['pa_id'] && $Params['u_id']){
			$paId = (int)$Params['pa_id'];
			$uid = (int)$Params['u_id'];
			$shoufei = (int)$Params['shoufei'];

			if(!$Params['wordids']&&!$Params['pcids']){
				return LibFc::ReturnJson(true,[]);
			}

			$sfwhere = '';
			if($shoufei==1){
				$sfwhere = 'and pal_shoufei=1';
			}

			$AdsBase = new AdsBase();
			$arr = [];
			$res = $AdsBase->get('pj_place',['*'],sprintf(" and pa_id=%d",$paId),true);
			$placeArr = $res['data'];
			$table = 'pj_place_ads 
			join pj_place_ads_time on pat_pla_id=pla_id
			join pj_user_ads on pla_ads_id = ads_id';
			//获取该广告位的可用时间
			$isword = 1;
			if($Params['wordids'])
			{
				$wordArr = explode(',',$Params['wordids']);
				$isword =1;
			}
			elseif($Params['pcids']) 
			{
				$wordArr = explode(',',$Params['pcids']);
				$isword =0;
			}
			foreach ($wordArr as $key => $val) {
				if($isword){
					$where = sprintf(" %s and pla_pa_id=%d and pat_keyword=%d",$sfwhere,$paId,$val);
				}else{
					$where = sprintf(" %s and pla_pa_id=%d and pat_pc_id=%d",$sfwhere,$paId,$val);
				}
				if($placeArr['pa_max']==1){
					
					if(in_array($paId,[84,86])){
						$fields = ['pat_pla_id,MAX(CASE WHEN pat_modpc = 1 THEN pat_etime ELSE NULL END) AS max_etime_modpc,  
						MAX(CASE WHEN pat_modcv = 1 THEN pat_etime ELSE NULL END) AS max_etime_modcv'];
						$res = $AdsBase->get($table,$fields,sprintf(" %s and pat_etime>%d", $where,time()),true);
						$arr[$val]['pc_btime'] = $res['data']['max_etime_modpc']? date('Y-m-d',$res['data']['max_etime_modpc']+86400):0;
						$arr[$val]['cv_btime'] = $res['data']['max_etime_modcv']? date('Y-m-d',$res['data']['max_etime_modcv']+86400):0;
						if($res['data']['max_etime_modpc']||$res['data']['max_etime_modcv']){
							$arr[$val]['btime'] = date('Y-m-d',max([$res['data']['max_etime_modpc'],$res['data']['max_etime_modcv']]) + 86400);
						}else{
							$arr[$val]['btime'] = 0;
						}
						
					}else{
						$res = $AdsBase->get($table,['pat_pla_id,max(pat_etime) as pat_etime'],sprintf(" %s and pat_etime>%d", $where,time(),'GROUP BY pat_keyword,pat_modpc,pat_modcv'),true);
						$arr[$val]['btime'] = $res['data']['pat_etime']? date('Y-m-d',$res['data']['pat_etime']+86400):0;
					}
				}else{
					$res = $AdsBase->get($table,['pat_etime,pat_btime,pat_pla_id,ads_u_id'],sprintf(" %s and pat_etime>%d order by pat_etime asc",$where,time()));
					$adsArr = array_column($res['data'],null,'ads_u_id');
					if($adsArr[$uid]){
						$arr[$val]['curbtime'] = date('Y-m-d',$adsArr[$uid]['pat_etime']+86400);
					}
					//已上广告小于可上数量，则随时都可以上
					if (count($res['data']) < $placeArr['pa_max']) {
						
						$arr[$val]['btime'] = 0;
					} else {
						$endTimeArr = [];
						foreach ($res['data'] as $ks => $vs) {
							$endTimeArr[$vs['pat_etime']] = 0;
						}
						$hasAdArr = array_column($res['data'],null,'pat_pla_id');
						foreach($endTimeArr as $k=>$v)
						{
							foreach($hasAdArr as $vv)
							{
								if($vv['pat_etime'] > $k)
								{
									$v++;
									if($v >= $placeArr['pa_max']) break;
								}
							}
							if($v < $placeArr['pa_max'])
							{
								$arr[$val]['btime'] = date('Y-m-d',$k+86400);
								break;
							}
						}
						if (isset($arr[$val]['curbtime']) && $arr[$val]['btime'] > $arr[$val]['curbtime']) {
							$arr[$val]['curbtime'] = $arr[$val]['btime'];
						}
					}
				}
			}
			LibFc::ReturnJson(true,$arr);
		}
	}

	/**
	 * @method 绑定广告
	 * @author zhengweihua 
	 * @copyright 2024-04-22
	 */
	public function bindAds()
	{
		if($_SERVER['REQUEST_METHOD']=='POST' && $_POST['fsl_id'])
		{
			$fsl_id = (int)$_POST['fsl_id'];
			$pla_id = (int)$_POST['pla_id'];
			if($fsl_id && $pla_id)
			{
				$CrmContract = new CrmContract();
				$res = $CrmContract->bindAds($pla_id,$fsl_id);
				LibFc::ajaxJsonEncode($res);
			}
		}
	}

	/**
	 * @method 检测广告是否已绑定
	 * @author zhengweihua 
	 * @copyright 2024-04-22
	 */
	public function chkBindAds()
	{
		if($_SERVER['REQUEST_METHOD']=='POST' && $_POST['pla_id'])
		{

			$pla_id = (int)$_POST['pla_id'];
			if($pla_id)
			{
				$CrmBase = new CrmBase();
				$res = $CrmBase->get('fad_link_fct_sve join fad_contract on fct_id  = fsl_fct_id',['fsl_id,fct_title'],sprintf(" AND fsl_des_id =%d",$pla_id),true);

				if($res['data']['fct_title']){
					LibFc::ReturnJson(false,'该广告已绑定合同：'.$res['data']['fct_title'].",请先解绑！");
				}
			}
			LibFc::ReturnJson(true);
		}
	}

	public function setPlan()
	{
		if($_SERVER['REQUEST_METHOD']=='POST'){
			$dataArr = $_POST;
			$date =$dataArr['cp_date']? date('Ymd',strtotime($dataArr['cp_date'])):date('Ymd');
			$planArr = [
                'cp_date'=>$date,
                'cp_ctr_id'=>$_POST['ctr_id'],
                'cp_au_uid'=>$_SESSION['_userid'],
                'cp_title'=>$_POST['cp_title']??'客情服务：跟进',
                'cp_by_uid'=>$_SESSION['_userid'],
                'cp_atime'=>time(),
            ];

			$CrmContract = new CrmContract();
			$res = $CrmContract->setPlan($planArr);
			if($res['data']=='已存在提醒计划'){
				LibFc::ReturnJson(false,$res['data']);
			}
			LibFc::ajaxJsonEncode($res);
		}
	}

	protected function chkAdsLock($plaArr, $patArr,$adsArr)
	{
		$AdsBase = new AdsBase();
		$B2cBase = new B2cBase();
		
		$au_uid = $plaArr['pla_au_uid'];
		if(!$au_uid && $plaArr['pla_sales']){
			$user = $B2cBase->get('an_user',['au_uid','au_name'],sprintf(" AND au_name='%s'",$plaArr['pla_sales']),true);
			$au_uid = $user['data']['au_uid'];
		}
		$placeinfo  = $AdsBase->get('pj_place',['*'],sprintf(" AND pa_id=%d",$plaArr['pla_pa_id']),true);
		$pa_max = $placeinfo['data']['pa_max'];
		$pa_id = $placeinfo['data']['pa_id'];
		//查当前客户归属业务员
		$CrmBase = new CrmBase();
		$hasRecord = $CrmBase->get('crm_customer_admin 
		join crm_customer on ctr_id =cca_ctr_id',['ctr_id,cca_au_uid'],
		sprintf(" and ctr_uid=%d and cca_au_uid=%d and cca_end_time>%d",$adsArr['ads_u_id'],$au_uid,time()),true);
		$isbelong = $hasRecord['data']?true:false;
		foreach($patArr as $v)
		{	
			//非预售的广告直接跳过
			if($v['pat_btime']<time()){
				continue;
			}
			//广告是否已经超额，需要预售了
			if(in_array($pa_id,[84,86]))
			{
				if($v['pat_modpc']){
					
					$this->chkAdsItemLock($au_uid,$pa_id,$pa_max,$v,'pc',$plaArr['pla_au_uid'],$isbelong);
				}
				if($v['pat_modcv']){
					$this->chkAdsItemLock($au_uid,$pa_id,$pa_max,$v,'cv',$plaArr['pla_au_uid'],$isbelong);
				}
			}
			else
			{
				$this->chkAdsItemLock($au_uid,$pa_id,$pa_max,$v,'all',$plaArr['pla_au_uid'],$isbelong);
			}
		}

	}
	/**
	 * @param  [type] $au_uid
	 * @param  [type] $pa_id
	 * @param  [type] $pa_max
	 * @param  [type] $patItem
	 * @param  string $modtype
	 * @param  string $pla_au_uid //业务员
	 * @method 检测广告中的每一项项是否锁定
	 * @author zhengweihua 
	 * @copyright 2025-04-29
	 */
	protected function chkAdsItemLock($au_uid,$pa_id,$pa_max,$patItem,$modtype='all',$pla_au_uid='',$isbelong = false)
	{
		$AdsBase = new AdsBase();
		//找广告位已经存在的数量
		if($modtype=='pc')
		{
			$where = sprintf(" AND pla_pa_id=%d AND pat_modpc=1 AND pat_keyword=%d AND pat_etime>=%d",$pa_id,$patItem['pat_keyword'],time());
		}
		elseif ($modtype=='cv') 
		{
			$where = sprintf(" AND pla_pa_id=%d AND pat_modcv=1 AND pat_keyword=%d AND pat_etime>=%d",$pa_id,$patItem['pat_keyword'],time());
		}
		else
		{
			$where = sprintf(" AND pla_pa_id=%d AND pat_pc_id=%d AND pat_etime>=%d",$pa_id,$patItem['pat_pc_id'],time());
		}
		
		
		$res = $AdsBase->get('pj_place_ads_time join pj_place_ads on pat_pla_id = pla_id',['*'],$where);
		$arr = [];
		$before30day = [];
		//是否属于自己
		$isowner = false;
		foreach ($res['data'] as $val) 
		{	
			if($pla_au_uid && $pla_au_uid == $val['pla_au_uid']||$isbelong)
			{
				$isowner = true;
			}
			//是否存在到期前60-29天的广告位
			if(time() > strtotime(date('Y-m-d', strtotime('-60 day', $val['pat_etime']))) && time() < strtotime(date('Y-m-d', strtotime('-29 day', $val['pat_etime'])))
			){
				$arr[] = $val;
				//存在30-29天之间的情况
				if(time() > strtotime(date('Y-m-d', strtotime('-30 day', $val['pat_etime']))) && time() < strtotime(date('Y-m-d', strtotime('-29 day', $val['pat_etime'])))
				){
					$before30day[] = $val;
				}
			}
		}
		$counts = count($res['data']);
		//已上广告数已经超过最大值
		if($counts>=$pa_max){
			//存在到期前60-30天的广告
			//广告属于自己的情况下 (优先续费) //2025-06-09修改
			//暂时先以广告位全在预售期为判断
			if($arr && count($arr)>=$pa_max && !$isowner){

				$swhere = '';
				if($before30day){
					// $swhere = sprintf(" AND cal_au_uid!=%d ",$au_uid);
				}else{
					//广告不属于自己的情况下才判断是否已锁定)
					$swhere = sprintf(" AND cal_au_uid=%d ",$au_uid);
				}

				//找是否有锁定
				if($modtype=='pc')
				{
					$where = sprintf(" AND cal_check=1 AND cal_pla_id IN (%s) 
					AND cal_pa_id=%d AND cal_pc_id=%d AND cal_type='pc' %s",
					implode(',',array_column($arr,'pat_pla_id')),
					$pa_id,$patItem['pat_keyword'],$swhere);
				}
				elseif ($modtype=='cv') 
				{
					$where = sprintf(" AND cal_check=1 AND cal_pla_id IN (%s) 
							AND cal_pa_id=%d AND cal_pc_id=%d AND cal_type='cv' %s",
							implode(',',array_column($arr,'pat_pla_id')),
							$pa_id,$patItem['pat_keyword'],$swhere);
				}
				else{
					$where = sprintf(" AND cal_check=1 AND cal_pla_id IN (%s) 
						AND cal_pa_id=%d AND cal_pc_id=%d AND cal_type='all' %s",
						implode(',',array_column($arr,'pat_pla_id')),
						$pa_id,$patItem['pat_pc_id'],$swhere);
				}	
				$CrmBase = new CrmBase();
				
				
				if($before30day)
				{
					$haslock = $CrmBase->get('crm_ads_lock',['*'],$where);	
					if($haslock['data'])
					{
						if(in_array($au_uid,array_column($haslock['data'],'cal_au_uid')))
						{
							foreach ($haslock['data'] as $litem) {
								if($litem['cal_au_uid']==$au_uid)
								{
									if($litem['cal_check'] && !$litem['cal_received'])
									{
										LibFc::ReturnJson(false,'该广告位尚未收款，请先收款');
									}
								}
							}
						}else{
							LibFc::ReturnJson(false,'广告位已被锁定');	
						}
						
					}
				}
				else
				{
					$haslock = $CrmBase->get('crm_ads_lock',['*'],$where,true);	
					if(!$haslock['data'] ){
						LibFc::ReturnJson(false,'广告位已满，需先锁定');
					}
					if($haslock['data']['cal_check'] && !$haslock['data']['cal_received']){
						LibFc::ReturnJson(false,'该广告位尚未收款，请先收款');
					}
				}	

			}
		}
	}

}
