<?php
class adsAction extends baseAction
{
    /**
     * @method    广告组合列表
     * @author    xu
     * @copyright 2018/05/09
     */
    public function place()
    {
        // 权限检测
        LibRule::Check('AG01');

        $Params = mvc::$URL_PARAMS;
        $nowPage = isset($Params['page']) && $Params['page'] > 0 ? (int) $Params['page']:1;
        $Params['status'] = isset($Params['status'])? (int) $Params['status']: -1;
        $perPage = empty($_COOKIE['perPage'])? 20: (int) $_COOKIE['perPage'];
        $where = '';
        foreach($Params as $k=>$v)
        {
            $v = trim($v);
            if($v == '') continue;
            switch($k)
            {
                // 关键词
                case 'keyword': 
                    $where .= sprintf(" and pla_name like '%%%s%%'", LibFc::Escape($v));
                break;
                // 广告组状态
                case 'status':
                    if($v >= 0) $where .= sprintf(" and pla_status =%d", $v);
                break;
            }
        }
        $AdsBase = new AdsBase();
        $res = $AdsBase->get('ba_place',['count(*) as count'], $where, true);
        $total = $res['data']['count'];
        LibTpl::Set('pageMsg', LibPage::Show($total, $perPage));


        $data = [];
        if($total > 0)
        {
            $res = $AdsBase->get('ba_place',['pla_id'], sprintf(" %s order by pla_status desc, pla_seq asc limit %d, %d", $where, ($nowPage-1)*$perPage, $perPage));
            $pla_ids = array_column($res['data'], 'pla_id');
            // 获取所有广告位以及相应广告信息
            $AdsPlace = new AdsPlace();
            $res = $AdsPlace->getPlaces($pla_ids);
            $data = $res['data'];

        }
        
        // 广告位上广告分组为运行、待上、即将到期
        foreach ($data as $k => $v)
        {
            if(!empty($v['placeInfo']))
            {
                foreach ($v['placeInfo'] as $kk => $vv)
                {
                    if(!empty($vv['adsInfo']))
                    {
                        foreach ($vv['adsInfo'] as $kkk => $vvv)
                        {
                            // 非关键字广告情况-各种取出一条数据
                            if($vvv['pat_btime']<time() && $vvv['pat_etime']>time() && $vvv['pat_status']==1)
                            {
                                $data[$k]['placeInfo'][$kk]['now'][] = $vvv;
                            }
                            if($vvv['pat_btime']>time())
                            {
                                $data[$k]['placeInfo'][$kk]['future'][] = $vvv;
                            }
                        }
                    }
                }
            }
        }  

        // 广告组点击数
        $AdsPlace = new AdsPlace();
        $res = $AdsPlace->getPlaClickCount($pla_ids);
        LibTpl::Set('plaCount',$res['data']); 

        if(!empty($pla_ids))
        {
            // 广告位点击数
            $res = $AdsBase->get('ba_place_link',['pll_id'],sprintf("and pll_pla_id in (%s)",implode(',', $pla_ids)));
            $pllIds = array_column($res['data'], 'pll_id');
            $AdsPlace = new AdsPlace();
            $res = $AdsPlace->getPllClickCount($pllIds);
            LibTpl::Set('pllCount',$res['data']);
        }

        //广告类型
        $res = $AdsPlace->getAdsStyle();
        LibTpl::Set('adsStyleArr', $res['data']);
        // print_r($data);
        // meta
        LibTpl::Set('Params', $Params); 
        LibTpl::Set('data',$data);
        LibTpl::Set('title', '广告组列表-跑街的');
        LibTpl::Put();
    }


    /**
     * @method    广告组编辑
     * @author    xu
     * @copyright 2018/05/09
     */
    public function setPlace()
    {
        // 权限校验
        LibRule::Check('AG02');

        // 参数 
        $Params = mvc::$URL_PARAMS;
        $AdsBase = new AdsBase();
        if(empty($Params['plaId']) || !LibFc::Int($plaId = $Params['plaId']))
        {
            header('Location: '.mvc::$cfg['ADMIN_URI'].'ads/place');
            exit;
        }

        if($_SERVER['REQUEST_METHOD']=='POST')
        {
            // 更新基本信息
            $plaArr = $_POST['pla'];
            $AdsBase->set('ba_place', $plaArr, sprintf(" and pla_id=%d", $plaId));

            // 更新组广告位信息
            $AdsPlace = new AdsPlace();
            $pllArr = [];
            if(!empty($_POST['pll']))
            {
                foreach($_POST['pll'] as $k=>$v)
                {
                    $pllArr[$k] = json_decode($v, true);
                }
            }

            $AdsPlace->setPlaceByPlaId($plaId, $pllArr);
            LibTpl::Success('保存成功');
        }
        $B2cBase=new B2cBase();
        $res=$B2cBase->get('sh_shop',['shop_id','shop_name'],' order by shop_name asc');
        foreach ($res['data'] as $v) 
        {
            $dataArr['shopArr'][]=['id'=>$v['shop_id'],'name'=>$v['shop_name']];
        }
        LibTpl::Set('dataArr',$dataArr);
        // 广告组
        $res = $AdsBase->get('ba_place', ['*'], sprintf(" and pla_id=%d", $plaId), true);
        if(empty($res['data'])) LibTpl::Error('广告组不存在');
        $placeArr = $res['data'];
        
        //广告位
        $res = $AdsBase->get('ba_place_link', ['*'], sprintf(" and pll_pla_id=%d order by pll_status desc, pll_seq asc", $plaId));
        foreach ($res['data'] as $k => $v) 
        {
            $v['pll_type'] = 0;
            if ($v['pll_is_area'] == 1)
                $v['pll_type'] = 1;
            else if ($v['pll_is_keyword'] == 1)
                $v['pll_type'] = 2;

            $res['data'][$k] = $v;
        }
        $placeArr['places'] = $res['data'];
        $placeLinkId=array_column($placeArr['places'], 'pll_id');
        // 获取默认广告
        $res = $AdsBase->get('ba_place_link inner join ba_ads on ads_id=pll_ads_id',['*'],sprintf(" and pll_pla_id=%d", $plaId));
        if(!empty($res['data']))
        {
            $res['data']=array_map(function($v){
                $v['img']=mvc::$cfg['FILE_CENTER']['bna']['url_get'].'&c=bna&f='.$v['ads_img'].mvc::$cfg['FILE_CENTER']['bna']['get_uri'];
                return $v;
            }, $res['data']);
        }
        $defaultAds = array_column($res['data'], NULL ,'pll_id');
        LibTpl::Set('defaultAds', $defaultAds);

        if(!empty($placeLinkId))
        {
            
            $where = sprintf(" and pal_pla_id=%d order by pal_status desc, pal_seq asc", $plaId);
            // echo $where;
            $table = 'ba_ads left join ba_place_ads_link on pal_ads_id = ads_id left join ba_place_ads_time on pat_pal_id=pal_id';
            $res = $AdsBase->get($table, ['*'], $where);
            if(!empty($res['data']))
            {
                $shopArr=array_column($res['data'], 'ads_shop_id');
                if(!empty($shopArr))
                {
                    $re=$B2cBase->get('sh_shop',['shop_id','shop_name'],sprintf(' and shop_id in(%s)',implode(',',$shopArr)));
                    $re['data']=array_column($re['data'],null, 'shop_id');
                    LibTpl::Set('shopArr',$re['data']);
                }
                // print_r($shopArr);
            }
        }
        //广告位的广告列表
        // print_r($res);
        $placeArr['ads'] = [];
        foreach($res['data'] as $k=>$v)
        {
            $placeArr['ads'][$v['pal_pll_id']][] = $v;
        }

        

        //广告类型
        $AdsPlace = new AdsPlace();
        $res = $AdsPlace->getAdsStyle();
        LibTpl::Set('adsStyleArr', $res['data']);

        // meta
        LibTpl::Set('placeArr', $placeArr);
        LibTpl::Set('title', $placeArr['pla_name'].'广告组-跑街的');
        LibTpl::Put();
    }


    /**
     * @method    新增广告组
     * @author    xu
     * @copyright 2018/05/09
     */
    public function addPlaceGroup()
    {
        // 权限检测
        LibRule::Check('AG01');

        if(empty($_POST['data']))
            LibFc::ajaxJsonEncode(['status'=>false, 'data'=>'新增广告组参数错误！']);

        $AdsBase = new AdsBase();
        $data = explode('&',urldecode($_POST['data'])) ;
        $temp = [];
        foreach ($data as $key => $value) {
            $value = explode('=', $value);
            $temp[current($value)] = end($value);
        }
        
        // 组名
        if(empty($temp['pla_name']))
            LibFc::ajaxJsonEncode(['status'=>false, 'data'=>'新增广告组参数错误！']);
        $res = $AdsBase->get('ba_place',['pla_id'],sprintf(" and pla_name='%s'",$temp['pla_name']));
        if(!empty($res['data']))
            LibFc::ajaxJsonEncode(['status'=>false, 'data'=>'广告组名称已经存在，添加失败！']);

        // 新增
        $AdsBase->add('ba_place',$temp);

        LibFc::ajaxJsonEncode(['status'=>true, 'data'=>'添加成功！']);
    }



    /**
     * @method    删除广告组
     * @author    xu
     * @copyright 2018/05/09
     */
    public function delPlaceGroup()
    {

        // 权限检测
        LibRule::Check('AG01');

        if(empty($_POST['id']) || !LibFc::Int($_POST['id']))
            LibFc::ajaxJsonEncode(['status'=>false, 'data'=>'删除广告组参数错误！']);

        // 校验有无广告位 如果有 删除失败
        $AdsBase = new AdsBase();

        $res = $AdsBase->get('ba_place_link',['pll_id'],sprintf(" and pll_pla_id=%d",$_POST['id']));
        if(!empty($res['data']))
            LibFc::ajaxJsonEncode(['status'=>false, 'data'=>'当前广告组下面有广告位，删除失败！']);

        // 删除 
        $AdsBase->del('ba_place',sprintf("and pla_id=%d",$_POST['id']));

        LibFc::ajaxJsonEncode(['status'=>true, 'data'=>'添加成功！']);
    }



    /**
     * @method    删除广告位
     * @author    xu
     * @copyright 2018/05/15
     */
    public function delPlace()
    {
        // 权限检测
        LibRule::Check('AG01');

        if(empty($_POST['id']) || !LibFc::Int($_POST['id']))
            LibFc::ajaxJsonEncode(['status'=>false, 'data'=>'删除广告位参数错误！']);

        // 校验有无广告
        $AdsBase = new AdsBase();
        $res = $AdsBase->get('ba_place_ads_link',['pal_pll_id'],sprintf(" and pal_pll_id=%d",$_POST['id']));
        if(!empty($res['data']))
            LibFc::ajaxJsonEncode(['status'=>false, 'data'=>'当前广告位下面有广告，删除失败！']);

        // 删除 
        $AdsBase->del('ba_place_link',sprintf("and pll_id=%d",$_POST['id']));

        LibFc::ajaxJsonEncode(['status'=>true, 'data'=>'添加成功！']);
    }


    /**
     * @method    添加广告
     * @author 卢
     * @copyright 2018-05-09
     */
    public function addAds()
    {
		 LibRule::Check('AG01');
        //获取店铺
        $Params = MVC::$URL_PARAMS;
        $B2cBase=new B2cBase();
        $AdsBase=new AdsBase();
        $res=$B2cBase->get('sh_shop',['shop_id','shop_name'],' order by shop_name asc');
        foreach ($res['data'] as $v) 
        {
            $dataArr['shopArr'][]=['id'=>$v['shop_id'],'name'=>$v['shop_name']];
        }
        //广告组
        $res=$AdsBase->get('ba_place',['pla_id','pla_name','pla_status','pla_tpl'],sprintf(' and pla_status>0 order by pla_seq asc'));
        $dataArr['placeArr']=$res['data'];
        if(!empty($Params['adsId'])&&LibFc::Int($Params['adsId']))
        {
            // 判断是否区域广告 区域广告则跳转
            $res = $AdsBase->get('ba_ads left join ba_place_ads_link on ads_id=pal_ads_id left join ba_place_link on pal_pll_id=pll_id',['count(*) count'],'and pll_is_area=1 and ads_id='.$Params['adsId'],true);
            if ($res['data']['count'] > 0)
            {
                LibFc::Go(mvc::$cfg['ADMIN_URI'].'ads/setAreaAds?adsId='.$Params['adsId']);
            }

            $res=$AdsBase->get('ba_ads left join ba_ads_style on ads_ast_id=ast_id',['*'],sprintf(' and ads_id=%d',$Params['adsId']),true);
            if(empty($res['data']))
            {
                LibTpl::Error('广告不存在');
                exit;
            }
            // print_r($res['data']);
            $style=$res['data']['ads_ast_id'];
            // print_r($astPlace);
            $shopId=$res['data']['ads_shop_id'];
            $mainArr['mainArr']=$res['data'];
            $mainArr['mainArr']['configArr']=explode(':',$res['data']['ast_config']);
            $res=$AdsBase->get('ba_place_link',['pll_pla_id'],sprintf(' and pll_ast_id=%d',$style));
            $astPlace=array_column($res['data'], 'pll_pla_id');
            $res=$B2cBase->get('sh_shop',['shop_name'],sprintf(' and shop_id=%d',$shopId),true);
            $mainArr['base']['shopName']=$res['data']['shop_name'];
            $res=$AdsBase->get('ba_place_ads_link left join ba_place_ads_time on pal_id = pat_pal_id',['*'],sprintf(' and pal_ads_id=%d',$Params['adsId']));
            if(!empty($res['data']))
            {
                //广告组
                $placeIdArr=array_column($res['data'], 'pal_pla_id');
                $placeAdsIdArr=array_column($res['data'], 'pal_pll_id');
                $where=sprintf(' and pla_id in(%s)',implode(',',$placeIdArr));
                $where.=!empty($astPlace)?sprintf(' and pla_id in(%s)',implode(',',$astPlace)):'';
                // echo $where;
                $placeArr=$AdsBase->get('ba_place',['*'],$where);
                $dataArr['placeArr']=$placeArr['data'];
                $placeArr=array_column($placeArr['data'], null,'pla_id');
                // print_r($placeArr);
                // 广告位
                $placeAdsArr=$AdsBase->get('ba_place_link',['*'],sprintf(' and pll_id in(%s)',implode(',',$placeAdsIdArr)));
                $placeAdsArr=array_column($placeAdsArr['data'], null,'pll_id');
                // print_r($placeAdsArr);
                foreach ($res['data'] as $k => $v) 
                {
                    // print_r($placeArr[$v['pla_id']]);
                    $v['pla_name']=!empty($placeArr[$v['pal_pla_id']])?$placeArr[$v['pal_pla_id']]['pla_name']:'';
                    $v['pll_name']=!empty($placeAdsArr[$v['pal_pll_id']])?$placeAdsArr[$v['pal_pll_id']]['pll_name']:'';
                    $v['pat_btime']=date('Y-m-d H:i:s',$v['pat_btime']);
                    $v['pat_etime']=date('Y-m-d H:i:s',$v['pat_etime']);
                    if($mainArr['mainArr']['pll_is_keyword']>0)
                    {
                        $mainArr['linkArr'][$v['pal_id']][$v['pat_keyword']][]=$v;
                    }else
                    {
                        $mainArr['linkArr'][$v['pal_id']][]=$v;
                    }
                }
            }
            // print_r($mainArr);
            // 
             LibTpl::Set('dataArr',$dataArr);
            LibTpl::Set('adsArr',$mainArr);
            LibTpl::Set('title', '修改广告-跑街的');
            LibTpl::Put('/ads/setAds.php');
            exit();
        }
        LibTpl::Set('dataArr',$dataArr);
        LibTpl::Set('title', '添加广告-跑街的');
        LibTpl::Put();
    }

    public function setAreaAds()
    {
		 LibRule::Check('AG01');
        //获取店铺
        $Params  = MVC::$URL_PARAMS;
        $B2cBase = new B2cBase();
        $AdsBase = new AdsBase();
        if(LibFc::Int($Params['adsId']))
        {   
            //获取基本信息
            $res = $AdsBase->get('ba_place_ads_link lefe join ba_ads on pal_ads_id=ads_id',['*'],sprintf('and ads_id=%d',$Params['adsId']),true);
            if(empty($res['data']))
            {
                LibTpl::Error('广告不存在');
                exit;
            }

            if (LibFc::Int($res['data']['ads_u_id']))
            {
                $YpwUser = new YpwUser();
                $name = $YpwUser->getUser(['u_name'], sprintf('and u_id=%d', $res['data']['ads_u_id']), true);
                $res['data']['u_name'] = $name['data']['u_name'];
            }
            //广告组
            $placeArr = $AdsBase->get('ba_place_link left join ba_place on pll_pla_id = pla_id',['*'],sprintf(' and pla_status>0 and pll_is_area=1 order by pla_seq asc'));
            $placeArr = array_column($placeArr['data'], 'pla_name', 'pla_id');
            LibTpl::Set('placeArr',$placeArr);
            //可供选择的店铺
            $shop =  $B2cBase->get('sh_shop',['shop_id','shop_name'],' order by shop_name asc');
            $shopArr = [];
            foreach ($shop['data'] as $v) 
            {
                if ($v['shop_id'] == $res['data']['ads_shop_id'])
                    $res['data']['shop_name'] = $v['shop_name'];

                $shopArr[] = ['id'=>$v['shop_id'],'name'=>$v['shop_name']];
            }
            LibTpl::Set('shopArr',$shopArr);
            LibTpl::Set('baseArr',$res['data']);

            //获取已有的时间
            $res = $AdsBase->get('ba_place_ads_link left join ba_place_ads_time on pal_id=pat_pal_id',['*'],'and pal_ads_id='.$Params['adsId'].' order by pat_pc_id asc');
            // print_r($res['data']);
            LibTpl::Set('timeArr',$res['data']);

            if($res['data'][0]['pat_pc_id'] != 0)
            {
                $cityids = array_filter(array_column($res['data'], 'pat_pc_id'));
                $YpwAddr = new YpwAddr();
                $cityids = $YpwAddr->getAddr($cityids);
                LibTpl::Set('addr',$cityids['data']);
                LibTpl::Set('paddr',array_filter(array_column($cityids['data'],'pc_pid')));
            }
        }
        LibTpl::Set('title', '编辑广告-跑街的');
        LibTpl::Put();
    }
    /**
     * @method    获取广告位
     * @author 卢
     * @copyright 2018-05-09
     */
    public function getPlaceAd()
    {
        $Params = MVC::$URL_PARAMS;
        $AdsBase=new AdsBase();
        $res=['status'=>true,'data'=>[]];
        if(LibFc::Int($Params['placeId']))
        {
            $where = '';
            if ($Params['type'] == 'edit')
                $where = 'and pll_is_area=1';

            $res=$AdsBase->get('ba_place_link',['*'],sprintf(' and pll_pla_id=%d and pll_status>0 %s order by pll_seq asc',$Params['placeId'], $where));
        }
        LibFc::ajaxJsonEncode($res);
    }
    /**
     * @method    根据广告位获取限制条件
     * @author 卢
     * @copyright 2018-05-09
     */
    public function getTimeLimit()
    {
        $Params = MVC::$URL_PARAMS;
        $AdsPlace=new AdsPlace();
        $res=['status'=>true,'data'=>[]];
        if(LibFc::Int($Params['placeAdsId']))
        {
            //类型
            $res=$AdsPlace->get('ba_place_link left join ba_ads_style on pll_ast_id= ast_id',['ast_name','ast_config','pll_is_area','pll_is_keyword','pll_id','pll_ast_id'],sprintf(' and pll_id=%d',$Params['placeAdsId']),true);
            $dataArr['config']=$res['data']['ast_config'];
            $dataArr['isarea'] = $res['data']['pll_is_area'];
            $keyword=!empty($Params['keyWord'])?$Params['keyWord']:'';
            $palId=!empty($Params['palId'])?$Params['palId']:0;
            $res=$AdsPlace->getAvaTime($Params['placeAdsId'],$keyword,$palId);
            if(!empty($res['data']))
            {
                foreach ($res['data'] as $k => $v) 
                {
                    $res['data'][$k][0]=date('Y-m-d H:i:s',$v[0]);
                    $res['data'][$k][1]=is_numeric($v[1])?date('Y-m-d H:i',$v[1]):$v[1];
                }
            }
            $dataArr['limitArr']=$res['data'];
            // print_r($res);
            $res['data']=$dataArr; 

            $adsId = (int) $Params['adsId'];
            if ($adsId > 0 &&  $dataArr['isarea'] == '1')
            {
                //获取该广告id 的区域
                $cityids = $AdsPlace->get(' ba_place_ads_link LEFT JOIN ba_place_ads_time on pal_id=pat_pal_id',['pat_pc_id'],'and pal_ads_id='.$adsId);
                $cityids = array_column($cityids['data'], 'pat_pc_id');
                if ($cityids[0] != '0' && $cityids[0] != '')
                     $res['data']['isCity'] = true;
                else
                    $cityids = 0;

                //获取已有的时间戳 全球区域的才到这里来
                $timeArr = $AdsPlace->getCitytimes($Params['placeAdsId'],$cityids,false,$adsId);
                // print_r($timeArr);
                $res['data']['hasTime'] = $timeArr['data']['hasTime'] ? $timeArr['data']['hasTime'] : [];

            }
        }
        LibFc::ajaxJsonEncode($res);
    }

    public function getCitytimes()
    {
        $Params = $_POST;
        $res=['status'=>true,'data'=>[]];
        if(LibFc::Int($Params['placeAdsId']))
        {
            $AdsPlace=new AdsPlace();
            $res = $AdsPlace->getCitytimes($Params['placeAdsId'],$Params['cityids'],false,$Params['adsId']);
        }
        LibFc::ajaxJsonEncode($res);

    }
    /**
     * @method    获取限定类型的广告位
     * @author 卢
     * @copyright 2018-05-15
     */
    public function getLimitPlace()
    {
        $Params = MVC::$URL_PARAMS;
        $AdsBase=new AdsBase();
        $res=['status'=>true,'data'=>[]];
        if(LibFc::Int($Params['placeId']))
        {
            $res=$AdsBase->get('ba_place_link',['pll_id','pll_name','pll_pla_id','pll_ast_id','pll_status','pll_ads_id','pll_max'],sprintf(' and pll_pla_id=%d and pll_status>0 and pll_ast_id=%d order by pll_seq asc',$Params['placeId'],$Params['style']));
            // print_r($res);
        }
        LibFc::ajaxJsonEncode($res);
    }
    /**
     * @method    添加广告
     * @author 卢
     * @copyright 2018-05-15
     */
    public function editAds()
    {
         LibRule::Check('AG01');
        $AdsPlace=new AdsPlace();
        if(empty($_POST['pal']['pla_id'])||empty($_POST['pal']['pll_id']))
        {
            LibTpl::Error('请选择广告组和广告位');
            exit;
        }
        $adsArr=[];
        if(!empty($_POST['ads']))
        {
            $hasMain = false;
            foreach ($_POST['ads'] as $k => $v) 
            {
                switch ($k) 
                {
                    case 'u_id':
                        if(!empty($k))
                        {
                            $hasMain = true;
                        }
                        break;
                    case 'shop_id':
                        if(!empty($k))
                        {
                            $hasMain = true;
                        }
                        break;
                }
                if(!empty($v))
                    $adsArr['ads_'.$k]=$v;
            }
            if (!$hasMain)
            {
                LibTpl::Error('用户或者店铺要选一个');
                exit;
            }
        }
        $palArr=[];
        foreach ($_POST['pal'] as $k => $v) 
        {
            $palArr['pal_'.$k]=$v;
        }
        $adsArr['ads_check']=1;
        //合并时间区域
        if (in_array($_POST['pll_is_area'], ['0','1']))
        {
            if (!empty($_POST['limitTime']))
            {
                if ($_POST['pll_is_area'] == '0')
                {
                    foreach ($_POST['limitTime'] as $key => $value) 
                    {
                        if (($key!='start' && $key!='end') || $key == '0')
                        {
                            $arr = explode(' - ', $value);
                            $_POST['limitTime']['start'][] = $arr[0];
                            $_POST['limitTime']['end'][] = $arr[1];
                            unset($_POST['limitTime'][$key]);
                        }
                        
                    } 
                }
            }
        }
        // print_r($_POST);die();
        if($_POST['type'])
        {
            $AdsPlace->setAds($palArr,$_POST['limitTime'],$adsArr,$_POST['pak']['keyword'],$_POST['pll_is_area'],$_POST['adsId']);
        }
        else
        {
            if(empty($_POST['history']))
            {
                LibTpl::Error('请选择已有广告');
                exit;
            }
            //判断类型
            $res=$AdsPlace->get('ba_place_link left join ba_ads_style on pll_ast_id= ast_id',['ast_name','ast_config','pll_is_keyword','pll_id','pll_ast_id','pll_max'],sprintf(' and pll_id=%d',$_POST['pal']['pll_id']),true);
            $isWord=(empty($res['data'])||$res['data']['pll_is_keyword']<1)?false:true;
            $AdsPlace->setAdsLink($_POST['history'],$palArr,$_POST['limitTime'],$_POST['pak']['keyword'],$isWord,$_POST['pll_is_area']);
        }
        LibFc::Go(mvc::$cfg['ADMIN_URI'].'ads/place');
    }

    /**
     * @method    查询是否区域广告
     * @author    liao 
     * @copyright 2018-05-15
     */
    function checkIsArea()
    {
        $Params = MVC::$URL_PARAMS;
        $AdsPlace=new AdsPlace();
        $res=['status'=>true,'data'=>[]];
        if(LibFc::Int($Params['placeAdsId']))
        {   
            $res = $AdsPlace->get('ba_place_link',['count(*) count'],'and pll_is_area=1 and pll_id='.$Params['placeAdsId'],true);

            if (!empty(LibFc::Int($Params['adsId'])))
            {
                $ads = $AdsPlace->get('ba_place_ads_link left join ba_place_ads_time on pal_id=pat_pal_id',['count(*) count'],'and pat_pc_id!=0 and pal_ads_id='.$Params['adsId'],true);
            }

            $this->getShopHistory($res['data']['count'],$ads['data']['count']);
        }
        LibFc::ajaxJsonEncode($res);
    }

    /**
     * @method    根据店铺获取已有广告
     * @author 卢
     * @copyright 2018-05-15
     */
    function getShopHistory()
    {
        $Params = MVC::$URL_PARAMS;
        $AdsPlace=new AdsPlace();
        $returnData=['status'=>true,'data'=>[]];
        if(LibFc::Int($Params['placeAdsId']))
        {
            // $where=sprintf("select ads_ast_id from ba_ads left join ba_place_ads_link on pal_ads_id=ads_id where pal_pll_id=%d",$Params['placeAdsId']);
            $where = sprintf(' and pal_pll_id = %s ', $Params['placeAdsId']);

            if ($Params['type'] == 'shop')
                $where .=sprintf('and ads_shop_id=%d',$Params['id']);
            else if ($Params['type'] == 'user')
                $where .=sprintf('and ads_u_id=%d',$Params['id']);


            $res=$AdsPlace->get('ba_ads left join ba_place_ads_link on pal_ads_id=ads_id left join ba_place_link on pal_pll_id=pll_id',['*'],$where);
            $returnData['data']['list'] = [];
            if(!empty($res['data']))
            {
                foreach ($res['data'] as $k => $v) 
                {
                    if(!empty($v['ads_img']))
                    {
                        $returnData['data']['list'][$k]['img']=mvc::$cfg['FILE_CENTER']['bna']['url_get'].'&c=bna&f='.$v['ads_img'].mvc::$cfg['FILE_CENTER']['bna']['get_uri'];
                    }
                }
            }
            // $returnData['data']['iseara'] = $isarea;
            // $returnData['data']['isCity'] = $isCity;
        }
        LibFc::ajaxJsonEncode($returnData);
    }

    /**
     * @method    修改广告
     * @author 卢
     * @copyright 2018-05-15
     */
    function editAdsForm()
    {
        // print_r($_POST);
        // die;
        $Params = MVC::$URL_PARAMS;
        $AdsPlace=new AdsPlace();
        $palArr=[];
        $patArr=[];
        $adsArr=[];
        if(!empty($_POST['ads']))
        {
            foreach ($_POST['ads'] as $k => $v) 
            {
                $adsArr[$k]=$v;
            }
            $adsArr['ads_etime']=time();
            $adsArr['ads_seq']=empty($_POST['ads']['ads_seq'])?999:(int)$_POST['ads']['ads_seq'];
        }
        //确定类型
        $astId=$_POST['ads']['ads_ast_id'];
        $res=$AdsPlace->get('ba_place_link',['pll_is_keyword'],sprintf(' and pll_ast_id=%d', $astId),true);
        if(!empty($_POST['pal']))
        {   
            foreach ($_POST['pal'] as $k => $v) 
            {
                if(!empty($v))
                {
                    $tempArr=json_decode($v,true);
                    // print_r($tempArr);
                    
                    if($res['data']['pll_is_keyword']>0)
                    {
                        //关键字类型
                        foreach($tempArr as $word=>$link)
                        {
                            foreach ($link as $patInfo) 
                            {
                                $linkTemp=[
                                    'pat_status'=>$patInfo['pat_status'],
                                    'pat_btime'=>strtotime($patInfo['pat_btime']),
                                    'pat_etime'=>strtotime($patInfo['pat_etime']),
                                    'pat_seq'=>(empty($patInfo['pat_seq'])?999:(int)$patInfo['pat_seq']),
                                    'pat_keyword'=>$word,
                                    'pat_id'=>$patInfo['pat_id']
                                ];
                                // print_r()
                                if($k>0)
                                {
                                    $linkTemp['pat_pal_id']=$k;
                                }
                                $patArr[$k][]=$linkTemp;
                                 $palArr[$k]=[
                                    'pal_ads_id'=>$patInfo['pal_ads_id'],
                                    'pal_pla_id'=>$patInfo['pal_pla_id'],
                                    'pal_pll_id'=>$patInfo['pal_pll_id'],
                                    'pal_status'=>$patInfo['pal_status'],
                                    'pal_atime'=>time(),
                                    'pal_seq'=>$patInfo['pal_seq'],

                                ];
                            }
                        }

                    }else
                    {
                        $palArr[$k]=[
                            'pal_ads_id'=>current($tempArr)['pal_ads_id'],
                            'pal_pla_id'=>current($tempArr)['pal_pla_id'],
                            'pal_pll_id'=>current($tempArr)['pal_pll_id'],
                            'pal_status'=>current($tempArr)['pal_status'],
                            'pal_atime'=>time(),
                            'pal_seq'=>current($tempArr)['pal_seq'],
                        ];
                        foreach ($tempArr as $link) 
                        {
                            // print_r($link);
                            $linkTemp=[
                                'pat_status'=>$link['pat_status'],
                                'pat_btime'=>strtotime($link['pat_btime']),
                                'pat_etime'=>strtotime($link['pat_etime']),
                                'pat_seq'=>(empty($link['pat_seq'])?999:(int)$link['pat_seq']),
                                'pat_id'=>$link['pat_id']
                            ];
                            // print_r()
                            if($k>0)
                            {
                                $linkTemp['pat_pal_id']=$k;
                            }
                            $patArr[$k][]=$linkTemp;
                        }
                    }
                }

            }
        }
        // print_r($palArr);
        // print_r($patArr);
        // die;
        $res=$AdsPlace->editAdsLink($adsArr,$palArr,$patArr);
        LibFc::Go(mvc::$cfg['ADMIN_URI'].'ads/addAds?adsId='.$_POST['ads']['ads_id']);
    }
    /**
     * @method    可选时间校验
     * @author 卢
     * @copyright 2018-05-15
     */
    function checkTimeLimit()
    {
        $AdsPlace=new AdsPlace();
        // print_r($_POST);
        // die;
        $res=['status'=>true,'data'=>[]];
        if(LibFc::Int($_POST['placeAdsId']))
        {
            $limitArr=[];
            if(!empty($_POST['limitArr']))
            {
                $_POST['limitArr']=array_unique($_POST['limitArr']);
                // print_r($_POST['limitArr']);
                // die;
                foreach ($_POST['limitArr'] as $v) 
                {
                    $timeArr=explode(' - ', $v);
                    $limitArr[]=[strtotime($timeArr[0]),strtotime($timeArr[1])];
                }
            }
            // $limitArr=[];
            $keyword=!empty($_POST['keyWord'])?$_POST['keyWord']:'';
            $palId=!empty($_POST['palId'])?$_POST['palId']:0;
            $res=$AdsPlace->getAvaTime($_POST['placeAdsId'],$keyword,$palId,$limitArr);
            if(!empty($res['data']))
            {
                foreach ($res['data'] as $k => $v) 
                {
                    $res['data'][$k][0]=date('Y-m-d H:i:s',$v[0]);
                    $res['data'][$k][1]=is_numeric($v[1])?date('Y-m-d H:i:s',$v[1]):$v[1];
                }
            }
        }
        LibFc::ajaxJsonEncode($res);
    }

    /**
     * @method    广告列表
     * @author    xu
     * @copyright 2018-05-15
     */
    function adsList()
    { 
         // 权限检测
         LibRule::Check('AG01');
        $Params = mvc::$URL_PARAMS;
        // print_r($Params);die();
        $nowPage = isset($Params['page']) && $Params['page'] > 0 ? (int) $Params['page']:1;
        $perPage = empty($_COOKIE['perPage'])? 20: (int) $_COOKIE['perPage'];
        $where = '';

        $table = 'ba_ads left join ba_ads_style on ast_id=ads_ast_id left join ba_place_ads_link on pal_ads_id=ads_id left join ba_place_link on pal_pll_id = pll_id left join ba_place on pla_id=pll_pla_id left join ba_place_ads_time on pat_pal_id=pal_id left join tj_ads_day on tad_pat_id=pat_id ';
        foreach($Params as $k=>$v)
        {
            $v = trim($v);
            if($v == '') continue;
            switch($k)
            {
                // 关键词
                case 'keyword': 
                    $where .= sprintf(" and ads_name like '%%%s%%'", LibFc::Escape($v));
                break;
                // 广告状态
                case 'status':
                    if($v!="") $where .= sprintf(" and ads_check =%d", $v);
                break;
                // 所属店铺
                case 'shop':
                    if(!empty($v)) 
                    {
                        if (LibFc::Int($v))
                            $where .= ' and ads_shop_id ='.$v;
                        else
                            $where .= ' and ads_shop_id <0';
                    }
                break;
                case 'place':
                    if(!empty($v) && LibFc::Int($v))
                    {
                        $where .= sprintf(" and pla_id =%d",$v);
                    }else{
                         $where .= " and pla_id <0";
                    }
                break;
                case 'pll':
                    if(!empty($v) && LibFc::Int($v))
                    {
                        $where .= sprintf(" and pll_id =%d",$v);
                    }else{
                        $where .= " and pll_id =<0";
                    }
                break;
                case 'user':
                    if($v != "")
                    {
                        // 获取id合集
                        $YpwUser = new YpwUser();
                        $res = $YpwUser->getUser(['u_id'],sprintf("and (u_name like '%%%s%%' or u_nickname like '%%%s%%' or ui_company like '%%%s%%')", $v, $v, $v));
                        $userIdArr = array_column($res['data'], 'u_id');
                        if (!empty($userIdArr))
                            $where .= sprintf(" and ads_u_id in(%s)", implode(',', $userIdArr));
                        else
                           $where = " and pll_id =<0"; 
                    }
                break;
                
            }
        }
        // print_r($where);die;

        $AdsBase = new AdsBase();
        $res = $AdsBase->get($table,['count(*) as count'], $where, true);
        $total = $res['data']['count'];
        LibTpl::Set('pageMsg', LibPage::Show($total, $perPage));

        $res = $AdsBase->get('ba_place',['pla_id','pla_name']," order by pla_id asc");
        LibTpl::Set('place',array_column($res['data'], 'pla_name','pla_id'));

        $res = $AdsBase->get('ba_place left join ba_place_link on pla_id=pll_pla_id',['pll_id','pll_name']," order by pla_id asc,pll_id asc");
        LibTpl::Set('pll',array_column($res['data'], 'pll_name','pll_id'));


        //获取投放人
        $res = $AdsBase->get('ba_ads',['ads_shop_id']," group by ads_u_id,ads_shop_id");
        $shopArr = array_column($res['data'], 'ads_shop_id');
        $B2cBase = new B2cBase();
        //获取所有店铺
        if (!empty($shopArr))
        {
            $res = $B2cBase->get('sh_shop',['shop_id','shop_name'],sprintf(' and shop_id in (%s) order by shop_name asc', implode(',', $shopArr)));
            $shopArr = [];
            $shopInfo = array_column($res['data'], 'shop_name','shop_id');
            foreach ($res['data'] as $v) 
            {
                $shopArr[]=['id'=>$v['shop_id'],'name'=>$v['shop_name']];
            }

            if (!empty($Params['shop']))
                LibTpl::Set('shopname', $shopInfo[$Params['shop']]);

            LibTpl::Set('shopArr', $shopArr);
        }

        if($total > 0)
        {
            $res = $AdsBase->get($table,['*'], $where.sprintf(" order by ads_check asc,ads_last_ver desc limit %d,%d",($nowPage-1)*$perPage,$perPage));
            // print_r($res);
            $allUserId = array_filter(array_unique(array_column($res['data'], 'ads_u_id')),'LibFc::Int');
            if (!empty($res['data']))
            {
                if (!empty($allUserId))
                {
                    $YpwUser = new YpwUser();
                    $user = $YpwUser->getUser(['u_id','u_name'],sprintf("and u_id in (%s)", implode(',', $allUserId)));
                    $userInfo = array_column($user['data'], 'u_name', 'u_id');
                }
                foreach ($res['data'] as $key => $value) 
                {
                    $res['data'][$key]['ub_username'] = $userInfo[$value['ads_u_id']] ? $userInfo[$value['ads_u_id']] : '';
                     $res['data'][$key]['shop_name'] = $shopInfo[$value['ads_shop_id']] ? $shopInfo[$value['ads_shop_id']] : '';
                }
            }
            LibTpl::Set('data',$res['data']);
        }

        // 广告状态
        $AdsPlace = new AdsPlace();
        $res = $AdsPlace->getAdsStat(array_column($res['data'], 'pal_id'),false);
        LibTpl::Set('adsStat',$res['data']);

        LibTpl::Set('stat',['0'=>'停用','1'=>'启用']);

        // 审核枚举
        LibTpl::Set('checkStat',['0'=>'<span class="warn">待审</span>','1'=>'通过','-1'=>"<span class='red'>不通过"]);        


        //广告类型
        $AdsPlace = new AdsPlace();
        $res = $AdsPlace->getAdsStyle();
        LibTpl::Set('adsStyleArr', $res['data']);

        // meta
        LibTpl::Set('Params', $Params); 
        LibTpl::Set('title', '广告组列表-跑街的');
        LibTpl::Put();
    }

     /**
     * @method    广告审核
     * @author    xu
     * @copyright 2018-05-15
     */
    function checkAds()
    { 
         // 权限检测
        // LibRule::Check('AG01');

        $AdsBase = new AdsBase();
        $Params = mvc::$URL_PARAMS;
        $id  = $Params['id'];


        if($_SERVER['REQUEST_METHOD']=='POST')
        {
            // 广告信息
            $where = sprintf(' and ads_id=%d ',$id);
            $res = $AdsBase->get('ba_ads left join ba_ads_style on ast_id=ads_ast_id ' , ['*'], $where,true);
            $info = $res['data'];

            // 审核结果
            if(!empty($_POST['data']))
            {
                $data = $_POST['data'];
                $adsCheckRes = ['res'=>$data['res'],'by'=>$_SESSION['admin_uname'],'time'=>time()];

                if($data['ads_check']==1)
                {
                    // 审核通过
                    $ads =  json_decode($info['ads_check_ver'],true);
                    $adsCheckVerKey = array_keys($ads);
                    $adsLastVer = [];
                    foreach ($info as $key => $value) {
                        if(in_array($key, $adsCheckVerKey))
                        {
                            $adsLastVer[$key] = $value;
                        }
                    }
                    // 更新字段
                    $setData = [
                        'ads_check' => 1,
                        'ads_check_res' => json_encode($adsCheckRes,JSON_UNESCAPED_UNICODE),
                        'ads_check_ver' => "",
                        'ads_last_ver' => json_encode($adsLastVer,JSON_UNESCAPED_UNICODE),
                    ];
                    $setData = array_merge($setData,$ads);

                    $AdsBase->set('ba_ads',$setData,sprintf("and ads_id=%d",$id));
                }

                if($data['ads_check']==-1)
                {
                    // 审核不通过
                    $setData = [
                        'ads_check' => -1,
                        'ads_check_res' => json_encode($adsCheckRes,JSON_UNESCAPED_UNICODE),
                    ];
                    $AdsBase->set('ba_ads',$setData,sprintf("and ads_id=%d",$id));
                }

                // 重定向get请求防止刷新重复提交
                header("Location:".mvc::$cfg['ADMIN_URI'].'/ads/checkAds?id='.$id);
                exit();
            }


            // 回滚
            if(!empty($_POST['reset']) && $_POST['reset']=='1')
            {

                    $ads =  json_decode($info['ads_last_ver'],true);
                    $adsCheckVerKey = array_keys($ads);

                    // 记录当前版本
                    $adsLastVer = [];
                    foreach ($info as $key => $value) {
                        if(in_array($key, $adsCheckVerKey))
                        {
                            $adsLastVer[$key] = $value;
                        }
                    }
                    // 更新字段
                    $restNotice = ['res'=>'管理员回滚广告','by'=>$_SESSION['admin_uname'],'time'=>time()];//表示管理员回滚
                    $setData = [
                        'ads_check' => 1,
                        'ads_check_res' => json_encode($restNotice,JSON_UNESCAPED_UNICODE),
                        'ads_last_ver' => json_encode($adsLastVer,JSON_UNESCAPED_UNICODE),
                    ];
                    $setData = array_merge($setData,$ads);
                    $AdsBase->set('ba_ads',$setData,sprintf("and ads_id=%d",$id));
            }
        }

    
        // 基本信息
        $data = array();
        $where = sprintf(' and ads_id=%d ',$id);
        $res = $AdsBase->get('ba_ads left join ba_ads_style on ast_id=ads_ast_id ' , ['*'], $where,true);

        if(empty($res['data']))
        {   
            // 数据不存在重定向
            LibTpl::Error('广告信息不存在！');
            exit();
        }

        $res['data']['ast_config'] = explode(":", $res['data']['ast_config']);
        $data['base'] = $res['data'];

        // 待审广告信息
        $check = json_decode($res['data']['ads_check_ver'],true);
        LibTpl::Set('check',$check);

        // 上个版本广告信息
        $lastCheck = json_decode($res['data']['ads_last_ver'],true);
        LibTpl::Set('lastCheck',$lastCheck);


        // 审核结果
        if(!empty($res['data']['ads_check_res']))
        {
            LibTpl::Set('checkRes',json_decode($res['data']['ads_check_res'],true));
        }

        // 位置
        $table = 'ba_place_ads_link left join ba_place_link on pal_pll_id=pll_id left join ba_place_ads_time on pat_pal_id=pal_id ';
        $res = $AdsBase->get($table , ['*'], sprintf("and pal_ads_id=%d",$id));
        $data['place'] = $res['data'];
        LibTpl::Set('data',$data);

        // 广告位枚举
        $res = $AdsBase->get('ba_place',['pla_id','pla_name'],"");
        $pla = array_column($res['data'], 'pla_name','pla_id');
        LibTpl::Set('place',$pla);
        LibTpl::Set('stat',['0'=>'停用','1'=>'启用']);

        // 审核枚举
        LibTpl::Set('checkStat',['0'=>'待审','1'=>'通过','-1'=>"不通过"]);

        // meta
        LibTpl::Set('Params', $Params); 
        LibTpl::Set('title', '广告组列表-跑街的');
        LibTpl::Put();
    }
    function getDefaultAds()
    {
        $Params = mvc::$URL_PARAMS;
        $res=['status'=>true,'data'=>true];
        if(LibFc::Int($Params['adsId']))
        {
            $AdsBase = new AdsBase();
            $res=$AdsBase->get('ba_ads',['ads_img','ads_id','ads_name'],sprintf(' and ads_id =%d',$Params['adsId']),true);
            $res['data']['img']=mvc::$cfg['FILE_CENTER']['bna']['url_get'].'&c=bna&f='.$res['data']['ads_img'].mvc::$cfg['FILE_CENTER']['bna']['get_uri'];
        }
        LibFc::ajaxJsonEncode($res);
    }
    function getShopAds()
    {
        $Params = mvc::$URL_PARAMS;
        $res=['status'=>true,'data'=>''];
        if(LibFc::Int($Params['shopId']))
        {
            $AdsBase = new AdsBase();
            $res=$AdsBase->get('ba_ads',['ads_id','ads_name','ads_img'],sprintf(' and ads_shop_id =%d',$Params['shopId']));
            
            if(!empty($res['data']))
            {
                $res['data']=array_map(function($v){
                    $v['img']=mvc::$cfg['FILE_CENTER']['bna']['url_get'].'&c=bna&f='.$v['ads_img'].mvc::$cfg['FILE_CENTER']['bna']['get_uri'];
                    return $v;
                }, $res['data']);
            }
            // print_r($res);
        }
        LibFc::ajaxJsonEncode($res);
    }

    /**
     * 获取全部省市的列表
     */
    function getProvinceList()
    {
        $Params = mvc::$URL_PARAMS;
        $YpwAddr = new YpwAddr();
        $res = $YpwAddr->getAddrTree(0);
        $res['data'] = array_column($res['data'], null, 'pc_id');
        LibFc::ajaxJsonEncode($res);
    }

    /**
     * 获取用户名
     */
    function  getUserInfoByWord()
    {
        $Params = mvc::$URL_PARAMS;
        $YpwUser = new YpwUser();
        $returnData = ['status'=>'true','data'=>[]];
        $name = LibFc::Escape($Params['name']);
        if (!empty($name))
        {
            $where = sprintf("and u_name like '%%%s%%'", $name);
            $res = $YpwUser->getUser(['u_id','u_name'], $where);
            foreach ($res['data'] as $key => $value) 
            {
                $returnData['data'][] = ['id'=>$value['u_id'], 'name'=>$value['u_name']];
            }
        }
        LibFc::ajaxJsonEncode($returnData);
    }

}
