<?php

/**
 * statistics_plus
 * 默认接受字符gbk,页面字符gbk,只支持get方式传输$day格式date("Ymd")
 * @package classes  
 * @author breathing
 * @copyright www.house365.com
 * @version 2013
 * @access public
 */
class statistics_plus {

    public  $appName;
	public  $appName_old;
    public  $city;
    public  $sourceCharSet;
    public  $inChar;
    public  $outChar;
    
    private $mc;

    /**
     * 
     * @param mixed $appName 应用名称
     * @param string $sourceCharSet 编码
     * @return
     */
    public function __construct() {

        $ci = & get_instance();
        $configStat = $ci->config->item('statistics');
        $configStatOld = $configStat[1]['old'];
		$configStatNew = $configStat[1]['new'];
        if(!$configStatOld) 
		{
            error_log('统计类配置错误');
            show_404();
        }

        $this->appName = $configStatNew['appName'];
		$this->appName_old = $configStatOld['appName'];
        $this->city = $configStatOld['city'];
        $this->sourceCharSet = strtolower($configStatNew['charSet']);

        $ci->load->library('My_memcached',null,'memcached');

        if(!$ci->memcached) 
		{
            show_404();
        }

		$this->mc = $ci->memcached;
    }

    /**
     * 获取小区周点击排行记录(xz_new 2013-06-18)
     * @param day,统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param app,应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @param limit,返回记录数，0 全部返回，>0返回对应的记录数
     * @param desc ,按照统计数排序，1=升序，0降序
     * @param string district  区属条件
     * @return 排行记录集
     * @throws RemoteException
     */
    public function getClickCountListOfBlockWeekly($day = '', $app = 'sell', $limit = '', $desc = '', $district = '') {
        $url = "http://" . $this->appName . "{name:ClickCount,method:getClickCountListOfBlockWeekly,params:[" . $day . "," . $app . "," . $limit . "," . $desc . ",'" . $district . "'," . $this->city . "]}";
        $strData = $this->curl_get_contents($url);

        $array_data = json_decode($strData, TRUE);
        $array_data = json_decode($array_data['returnobject'], TRUE);
        return $array_data;
    }

    /**
     * 获取小区周点击排行记录(xz_new 2013-06-18)
     * 
     * @param day   ,统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param app   ,应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @param limit ,返回记录数，0 全部返回，>0返回对应的记录数
     * @param desc  ,按照统计数排序，1=升序，0降序
     * @return 排行记录集
     * @throws RemoteException
     */
    public function getClickCountListOfDistrictWeekly($day = '', $app = 'sell', $limit = '', $desc = '') {
        $url = "http://" . $this->appName . "{name:ClickCount,method:getClickCountListOfDistrictWeekly,params:[" . $day . "," . $app . "," . $limit . "," . $desc . "," . $this->city . "]}";

        $strData = $this->curl_get_contents($url);
        return $this->json_to_array($strData);
    }

    /**
     *  获取经纪人下各个范围（小区、街区、区属）房源的均价和房源量统计数据
     * @param day,统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param uid,经纪人id
     * @param regionType, 统计的范围：1-小区 2-街道 3-区域
     * @param id，小区id或者街道id或者区域名，该值与regionType 组合使用
     * @param app,应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @return 返回一条统计记录。包括均价、房源数等信息
     */
    public function getHouseCountByUidRegion($day = '', $uid='', $regionType ='', $id = '', $app = 'sell') {
        $url = "http://" . $this->appName . "{name:HouseCount,method:getHouseCountByUidRegion,params:[" . $day . "," . $uid . "," . $regionType . "," . $id . "," . $app . "]}";
        $strData = $this->curl_get_contents($url);
        $array_data = json_decode($strData, TRUE);
        $array_data = json_decode($array_data[returnobject], TRUE);
        return ($array_data);
    }

    /**
     * 获取 具体范围（小区、街区、区属）的均价、房源量统计数据  (xz_new 2013-06-18)
     * @param day,统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param regionType, 统计的范围：1-小区 2-街道 3-区域
     * @param id，小区id或者街道id或者区域名，该值与regionType 组合使用
     * @param app,应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @return 返回一条统计记录。包括均价、房源数等信息
     */
    public function getHouseCountByRegion($day = '', $regionType='', $id='', $app = 'sell') {
        $url = "http://" . $this->appName . "{name:HouseCount,method:getHouseCountByRegion,params:[" . $day . "," . $regionType . "," . $id . "," . $app . "," . $this->city . "]}";
        $strData = $this->curl_get_contents($url);

        $array_data = json_decode($strData, TRUE);
        $array_data = json_decode($array_data[returnobject], TRUE);

        return ($array_data);
    }

    /**
     * 获取某一天某个经纪人操作记录
     * @param day,统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param uid,经纪人id
     * @param app,应用名,rent 租房，sell 二手房，如果不传入，默人为sell,为空是sell+rent
     * @param start,分页查询跳过的记录数，该值大于或等于 0
     * @param limit,返回记录数，0 全部返回，>0返回对应的记录数
     * @param desc,按照操作时间排序，1=升序，0降序
     * @return
     * @throws RemoteException
     */
    public function getOperateList($day = '', $uid='', $app='', $start='', $limit='', $desc = '0') 
	{
        $url = "http://".$this->appName."{name:OperateCount,method:getOperateList,params:[".$day.",".$uid."," .$app.",".$start.",".$limit.",".$desc."]}";
		//echo $url;
        return $this->get_array_data($url);
    }

    /**
     * 获取某一天经纪人操作统计 (xz_new 2013-06-18)
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param uid   经纪人id
     * @param operateType   统计的范围：0 返回所有的数据,>0返回对应的操作类型数据
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell+rent
     * @param fid  房源id
     * @return
     */
    public function getOperateCount($day = '', $uid = '', $operateType = 0, $app = '',$fid = 0)
	{
        if(!empty($app)){
            $str = '&app='.$app;
        }else{
            $str = '';
        }
        if($operateType==0)
        {


            $url = NewStatisticsUrl."/operate?type=getOperateUIDDayCount&city=".GB_CITY."&day=".$day."&uid=".$uid.$str."&fid=".$fid;
        }
        else
        {
            $url =NewStatisticsUrl."/operate?type=getOperateUIDDayCount&city=".GB_CITY."&day=".$day."&uid=".$uid."&operatetype=".$operateType.$str.'&fid='.$fid;

        }
//        if(!empty($fid)){
//            exit($url);
//        }
        return $this->get_array_data($url);
    }

    /**
     * 获取某一天某个经纪人操作记录 (xz_new 2013-06-18)
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param uid   经纪人id
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell+rent
     * @param start 分页查询跳过的记录数，该值大于或等于 0
     * @param limit 返回记录数，0 全部返回，>0返回对应的记录数
     * @param desc  按照操作时间排序，1=升序，0降序
     * @param type  1新增 2刷新 3删除 4失效 5再发布,0,全部
     * @param fid  房源id
     * @return
     * @throws RemoteException
     */
    public function getOperateListByType($day = '', $uid='', $app='', $start='0', $limit='0', $desc = 0, $type = 0, $fid =0) {

        if($type==0)
        {
            if($app)
            {
                $url = NewStatisticsUrl. "/operate?type=getOperateUIDDayDetail&city=".GB_CITY."&day=".$day."&uid=".$uid."&start=".$start."&limit=".$limit."&app=".$app;
            }
            else
            {
                $url = NewStatisticsUrl. "/operate?type=getOperateUIDDayDetail&city=".GB_CITY."&day=".$day."&uid=".$uid."&start=".$start."&limit=".$limit;
            }
        }
        else
        {
            if($app)
            {
                $url = NewStatisticsUrl. "/operate?type=getOperateUIDDayDetail&city=".GB_CITY."&day=".$day."&uid=".$uid."&operatetype=".$type."&start=".$start."&limit=".$limit."&app=".$app;
            }else
            {
                $url = NewStatisticsUrl. "/operate?type=getOperateUIDDayDetail&city=".GB_CITY."&day=".$day."&uid=".$uid."&operatetype=".$type."&start=".$start."&limit=".$limit;
            }
        }

        $url .='&fid='.$fid;

        //echo $url;

//        echo $url;die;
        $all = $this->get_array_data($url);


        return $all;
    }
	

    /**
     * 获取某一天某个经纪人登入记录 (xz_new 2013-06-18)
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param uid   经纪人id
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @param start 分页查询跳过的记录数，该值大于或等于 0
     * @param limit 返回记录数，0 全部返回，>0返回对应的记录数
     * @param desc  按照登入时间排序，1=升序，0降序
     * @return  返回登入记录集
     * @throws  RemoteException
     */
    public function getLoginList($day = '', $uid=0, $app = 'sell', $start=0, $limit=0, $desc=0) 
	{
        $url = NewStatisticsUrl."/login?type=getLoginUIDDayDetail&city=".GB_CITY."&day=".$day."&uid=".$uid."&start=".$start."&limit=".$limit;
        //echo $url;die;
        return $this->get_array_data($url);
    }

    /**
     * 获取某一天经纪人登入统计(xz_new 2031-06-18)
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param uid   经纪人id
     * @return
     */
    public function getLoginCount($day = '', $uid='') 
	{
        $url = NewStatisticsUrl."/login?type=getLoginUIDDayCount&city=".GB_CITY."&day=".$day."&uid=".$uid;
        //echo $url;die;
        return $this->get_array_data($url);
    }

    /**
     * 获取某个经纪人下某个房源类型的房源量统计
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param uid   经纪人id
     * @param infoType  房源类型，住宅，别墅，商铺，写字楼等
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @return  返回统计值
     */
    public function getHouseCountByUidInfotype($day = '', $uid, $infotype, $app = 'sell') 
	{
        $url = "http://" . $this->appName . "{name:HouseCount,method:getHouseCountByUidInfotype,params:[" . $day . "," . $uid . "," . $infotype . "," . $app . "]}";
        $strData = $this->curl_get_contents($url);

        $array_data = json_decode($strData, TRUE);
        $array_data = json_decode($array_data[returnobject], TRUE);

        return $array_data;
    }

    /**
     * 获取某个经纪人下各个房源类型房的房源量排行
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param uid   经纪人id
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @param limit 返回记录数，0 全部返回，>0返回对应的记录数
     * @param desc  按照统计数排序，1=升序，0降序
     * @return  返回排行记录集
     */
    public function getHouseCountListOfInfotypeByUid($day = '', $uid='', $app = 'sell', $limit='', $desc='')
	{
        $url = "http://" . $this->appName . "{name:HouseCount,method:getHouseCountListOfInfotypeByUid,params:[" . $day . "," . $uid . "," . $app . "," . $limit . "," . $desc . "]}";
        $strData = $this->curl_get_contents($url);

        $array_data = json_decode($strData, TRUE);
        $array_data = json_decode($array_data[returnobject], TRUE);

        return $array_data;
    }

    /**
     * 获取某个经纪人下各个房屋面积区间的房源量排行
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param uid   经纪人id
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @param limit 返回记录数，0 全部返回，>0返回对应的记录数
     * @param desc  按照统计数排序，1=升序，0降序
     * @return  返回排行记录集
     * @throws  RemoteException
     */
    public function getHouseCountListOfBuildareaByUid($day = '', $uid='', $app = 'sell', $limit='', $desc='') {
        $url = "http://" . $this->appName . "{name:HouseCount,method:getHouseCountListOfBuildareaByUid,params:[" . $day . "," . $uid . "," . $app . "," . $limit . "," . $desc . "]}";
        $strData = $this->curl_get_contents($url);

        $array_data = json_decode($strData, TRUE);
        $array_data = json_decode($array_data[returnobject], TRUE);

        return $array_data;
    }

    /**
     * 获取某个经纪人下各个房屋价格区间的房源量排行
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param uid   经纪人id
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @param limit 返回记录数，0 全部返回，>0返回对应的记录数
     * @param desc  按照统计数排序，1=升序，0降序
     * @return  返回排行记录集
     * @throws  RemoteException
     */
    public function getHouseCountListOfPriceByUid($day = '', $uid='', $app = 'sell', $limit='', $desc='') {
        $url = "http://" . $this->appName . "{name:HouseCount,method:getHouseCountListOfPriceByUid,params:[" . $day . "," . $uid . "," . $app . "," . $limit . "," . $desc . "]}";
        $strData = $this->curl_get_contents($url);
        $array_data = json_decode($strData, TRUE);
        $array_data = json_decode($array_data[returnobject], TRUE);
        return $array_data;
    }

    /**
     * 获取经纪人下小区范围房源的排行数据（均价或者房源量排行）
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param uid   经纪人id	 
     * @param countType 1 均价 2 房源量
     * @param limit 返回记录数，0 全部返回，>0返回对应的记录数
     * @param desc  按照统计数排序，1=升序，0降
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @param city  城市
     * @return  返回排行记录集。
     * @throws  RemoteException
     */
    public function getHouseCountListOfRegionByUid($day = '', $uid='', $countType='', $limit='', $desc='', $app = 'sell') {
        $url = "http://" . $this->appName . "{name:HouseCount,method:getHouseCountListOfRegionByUid,params:[" . $day . "," . $uid . ",$countType,$limit,$desc," . $app . "," . $this->city . "]}";
        $strData = $this->curl_get_contents($url);
        $array_data = json_decode($strData, TRUE);
        $array_data = json_decode($array_data[returnobject], TRUE);
        return $array_data;
    }

    /**
     * 	获取经纪人下发布的房源量统计
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param uid   经纪人id
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @return
     */
    public function getHouseCountByUid($day = '', $uid='', $app = 'sell') {
        $url = "http://" . $this->appName . "{name:HouseCount,method:getHouseCountByUid,params:[" . $day . "," . $uid . "," . $app . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取 每个小时下 特定范围（门店/区域/总公司）下相应的操作类型的统计记录集
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param belongType    查找范围，1-门店，2-区域，3-总公司
     * @param id    范围id，即门店或者区域或者公司信息等，该值与belongType组合使用
     * @param operateType   操作类型， 1:新增 2刷新 3删除
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @return  返回按照按照小时派讯的每个类别统计数据列表
     */
    public function getOpreateCountListOfHour($day = '', $belongType='', $id='', $operateType='', $app = 'sell') {
        $url = "http://" . $this->appName . "{name:OperateCount,method:getOpreateCountListOfHour,params:[" . $day . "," . $belongType . "," . $id . "," . $operateType . "," . $app . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取 某天 特定范围（门店/区域/总公司）下相应的操作类型的统计记录集
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param belongType    查找范围，1-门店，2-区域，3-总公司
     * @param id    范围id即门店或者区域或者公司信息等，该值与belongType组合使用
     * @param operateType   操作类型， 1:新增 2刷新 3删除
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @return  返回统计值
     */
    public function getOpreateCountOfDay($day = '', $belongType='', $id='', $operateType='', $app = 'sell') {
        $url = "http://" . $this->appName . "{name:OperateCount,method:getOpreateCountOfDay,params:[" . $day . "," . $belongType . "," . $id . "," . $operateType . "," . $app . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取 特定范围（门店/区域/总公司）下一段时间内的操作类型的统计记录集
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param belongType    查找范围，1-门店，2-区域，3-总公司
     * @param id    范围id，即门店或者区域或者公司信息等，该值与belongType组合使用
     * @param operateType   操作类型， 1:新增 2刷新 3删除
     * @param days  多少天内的数据，从day值开始往前推(包括day当天)，总计days天
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @return  返回记录集
     */
    public function getOpreateCountListOfDayByDays($day = '', $belongType='', $id='', $operateType='', $days='', $app = 'sell') {
        $url = "http://" . $this->appName . "{name:OperateCount,method:getOpreateCountListOfDayByDays,params:[" . $day . "," . $belongType . "," . $id . "," . $operateType . "," . $days . "," . $app . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取 一段时间内具体所属（门店，区域，总公司）的点击量记录集
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param belongType    查找范围，1-门店，2-区域，3-总公司
     * @param id    即门店或者区域或者公司信息等，该值与belongType组合使用
     * @param days  多少天内的数据，从day值开始往前推(包括day当天)，总计days天
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @return  返回记录集
     */
    public function getClickCountListByBelong($day='', $belongType='', $id='', 
            $days='', $app ='sell') {
        $url = "http://" . $this->appName . "{name:ClickCount,method:getClickCountListByBelong,params:[" . $day . "," . $belongType . "," . $id . "," . $days . "," . $app . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取具体所属（门店，区域，总公司）的点击量
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param belongType    查找范围，1-门店，2-区域，3-总公司
     * @param id    即门店或者区域或者公司信息等，该值与belongType组合使用
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @return
     */
    public function getClickCountByBelong($day = '', $belongType='', $id='',
            $app = 'sell') {
        $url = "http://" . $this->appName . "{name:ClickCount,method:getClickCountByBelong,params:[" . $day . "," . $belongType . "," . $id . "," . $app . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取 具体所属（门店、区域、公司）下特定的星级房源的 均价、房源量统计数据
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param belongType    统计的类型：1-门店 2-区域 3-公司
     * @param id    门店或者区域或者公司信息
     * @param grade 星级
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @return  返回一条统计记录，包括均价、房源数等信息
     * @throws  RemoteException
     */
    public function getHouseCountByBelongGrade($day='', $belongType='', 
            $id='', $grade='', $app ='sell') {
        $url = "http://" . $this->appName . "{name:HouseCount,method:getHouseCountByBelongGrade,params:[" . $day . "," . $belongType . "," . $id . "," . $grade . "," . $app . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取新增房源的均价和房源量统计数据
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param type  统计的范围：1-小区 2-街道 3-区域
     * @param id    小区id或者街道id或者区域名，该值与type 组合使用
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @return  返回统计记录。包括均价、房源数等信息
     */
    public function getNewAddHouseCountOfAvgAndCount($day='', $type='', $id='', $app ='sell') {
        $url = "http://" . $this->appName . "{name:NewAddHouseCount,method:getNewAddHouseCountOfAvgAndCount,params:[" . $day . "," . $type . "," . $id . "," . $app . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取 某一天新增房源总量统计
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @return
     * @throws  RemoteException
     */
    public function getNewAddHouseCount($day = '', $app = 'sell') {
        $url = "http://" . $this->appName . "{name:NewAddHouseCount,method:getNewAddHouseCount,params:[" . $day . "," . $app . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取具体（小区、街道、区属）的点击量统计数据  (xz_new 2013-06-18)
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param regionType    统计的范围：1-小区 2-街道 3-区域
     * @param id    小区id或者街道id或者区域名，该值与regionType 组合使用
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @return
     */
    public function getClickCountByRegion($day='', $regionType='', $id='', $app='sell') {
        $url = "http://" . $this->appName . "{name:ClickCount,method:getClickCountByRegion,params:[" . $day . "," . $regionType . "," . $id . "," . $app . "," . $this->city . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取某个小区下各个户型区间的房源量排行   (xz_new 2013-06-18)
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天 
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @param limit 返回记录数，0 全部返回，>0返回对应的记录数
     * @param desc  按照统计数排序，1=升序，0降序
     * @param blockid   小区id
     * @return
     * @throws  RemoteException
     */
    public function getHouseRoomCountByBlock($day='', $app='', $limit='', $desc=0, $blockid='') {
        $url = "http://" . $this->appName . "{name:HouseCount,method:getHouseRoomCountByBlock,params:[" . $day . "," . $app . ",$limit," . $desc . ",$blockid," . $this->city . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取某个小区下各个户型区间的房源点击量排行 (xz_new 2013-06-18)
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @param limit 返回记录数，0 全部返回，>0返回对应的记录数
     * @param desc  按照统计数排序，1=升序，0降序
     * @param blockid   小区id
     * @return
     * @throws  RemoteException
     */
    public function getClickRoomCountByBlock($day='', $app='', $limit=0, $desc=0, $blockid='') {
        $url = "http://" . $this->appName . "{name:ClickCount,method:getClickRoomCountByBlock,params:[$day,$app,$limit,$desc,$blockid," . $this->city . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取某个小区下各个价格区间的房源量排行 (xz_new 2013-06-18)
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @param limit 返回记录数，0 全部返回，>0返回对应的记录数
     * @param desc  按照统计数排序，1=升序，0降序
     * @param blockid   小区id
     * @return
     * @throws  RemoteException
     */
    public function getHousePriceCountByBlock($day='', $app='', $limit='', $desc='', $blockid='') {
        $url = "http://" . $this->appName . "{name:HouseCount,method:getHousePriceCountByBlock,params:[" . $day . "," . $app . ",$limit," . $desc . ",$blockid," . $this->city . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取某个小区下各个价格区间的房源点击量排行 (xz_new 2013-06-18)
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @param limit 返回记录数，0 全部返回，>0返回对应的记录数
     * @param desc  按照统计数排序，1=升序，0降序
     * @param blockid   小区id
     * @return
     * @throws  RemoteException
     */
    public function getClickPriceCountByBlock($day='', $app='', $limit='', $desc='', $blockid='') {
        $url = "http://" . $this->appName . "{name:ClickCount,method:getClickPriceCountByBlock,params:[" . $day . "," . $app . ",$limit," . $desc . ",$blockid," . $this->city . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取 某一天所有有效房源统计
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @return
     */
    public function getHouseCount($day = '', $app = 'sell') {
        $url = "http://" . $this->appName . "{name:HouseCount,method:getHouseCount,params:[" . $day . "," . $app . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取 某一天所有点击量
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @return
     */
    public function getClickCount($day = '', $app = 'sell') {
        $url = "http://" . $this->appName . "{name:ClickCount,method:getClickCount,params:[" . $day . "," . $app . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取 公司在各个小区的房源统计信息
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @param company   门店id
     * @return  返回json数据，json对象包括三个字段，
     * {"blockid":"1","companycount":0,"allcount":971},companycount为该公司在该小区的房源数，allcount死该小区共有房源数
     * @throws RemoteException
     */
    public function getHouseBlockCountByCompany($day = '', $app = 'sell', $agentcode='', $agenttype='') {
        $url = "http://" . $this->appName . "{name:HouseCount,method:getHouseBlockCountByAllCompany,params:[" . $day . "," . $app . "," . $agentcode . "," . $agenttype . ',' . $this->city . "]}";
        $strData = $this->curl_get_contents($url);
        $strData = $this->strIconv($strData, "gbk", $this->sourceCharSet);
        return $this->json_to_array($strData);
    }

    /**
     * 获取 公司在各个区属的房源统计信息
     * @param dayday    统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @param company   公司id
     * @return  返回json数据，json对象包括三个字段，
     * {"district":"下关区","companycount":0,"allcount":7519},companycount为该公司在该区属的房源数，allcount死该小区共有房源数
     * @throws RemoteException
     */
    public function getHouseDistrictCountByCompany($day = '', $app = 'sell', $agentcode='', $agenttype='') {
        $url = "http://" . $this->appName . "{name:HouseCount,method:getHouseDistrictCountByAllCompany,params:[" . $day . "," . $app . "," . $agentcode . "," . $agenttype . ',' . $this->city . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 
     * @param type $day
     * @param type $app
     * @param type $num
     * @return type
     */
    public function getFidCountList($day = '', $app = 'sell', $num='') {
        $url = "http://" . $this->appName . "{name:ClickCount,method:getFidCountList,params:[" . $day . "," . $app . "," . $num . ",0]}";
        $strData = $this->curl_get_contents($url);
        $strData = $this->strIconv($strData, "gbk", $this->sourceCharSet);
        return $this->json_to_array($strData);
    }

    /**
     * 获取二手房列表页小区第一页各中介公司在六个时间点统计的数量
     * @param startDay  统计开始日期（yyyyMMdd），如果不传入，默认为前一天
     * @param endDay    统计结束日期（yyyyMMdd），如果不传入，默认为开始日期
     * @param blockIdStr    小区数组ID:将多个id用"-"连接符连接
     * @param company   公司(A1:链家地产,A2:我爱我家,A3:满堂红置业,A4:顺驰不动产A5:中广置业A6:中原地产A7:1+2联合不动产),null为返回所有公司，多个公司用"-"连接
     * @param company,时间点:多个时间点用"-"连接符连接,六个时间点为0930,1100,1400,1530,1700,1900
     * @return 返回json数组
     * @throws RemoteException
     */
    public function getHouseCountOfBlockCompany($starttime = '', $endtime='', $blockid='', $agentcode='', $time='') {
        $url = 'http://' . $this->appName . '{name:HouseCount,method:getHouseCountOfBlockCompany,params:[' . '"'. $starttime . '"' . "," . '"' . $endtime . '"' . "," . '"' . $blockid . '"' . "," . '"' . $agentcode . '"' . "," . '"' . $time . '"' . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取二手房点击排行记录
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @param limit 返回记录数，0 全部返回，>0返回对应的记录数
     * @param desc  按照统计数排序，1=升序，0降序
     * @param type  0表示区域排名，1表示区域下板块排名，2表示板块下小区排名
     * @param id    根据type决定，type为0，id为null,查询当天二手房区域排名，type为1：id为区域id,查询区域下板块的排名记录， type为2：id为板块id,查询板块下小区的排名记录。
     * @return 排行记录集
     * @throws RemoteException
     */
    public function getClickCountListOfDirStrBlo($starttime = '', $endtime = '', $app = 'sell', $type, $data) {
        $url = "http://" . $this->appName . "{name:ClickCount,method:getClickCountListOfDirStrBlo,params:[" . '"' . $starttime . '"'
                . "," . '"' . $endtime . '"' . "," . '"' . $app . '"' . ",10,0," . $type . "," . $data . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取租房、二手房点击搜索条件计数
     * @param day   查询日期 yyyyMMdd
     * @param app   应用类型，sell 二手房，rent 住房
     * @param type  类别infofrom-来源，infotype-类型，roomtype-房型，price-房价，buildarea-面积，district-区域，renttype-方式（租房），fitment-装修（租房）
     * @param value 类别对应的值
     * @return
     * @throws RemoteException
     */
    public function getClickCountOfSearchCondition($starttime = '', $endtime = '', $app = 'sell', $type, $data) {
        $url = "http://" . $this->appName . "{name:ClickCount,method:getClickCountOfSearchCondition,params:["
                . '"' . $starttime . '"' . "," . '"' . $endtime . '"' . "," . '"' . $app . '"' . "," . $type . ","
                . $data . "," . $this->city . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取二手房和租房关键字排行记录
     * @param day   统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @param limit 返回记录数，0 全部返回，>0返回对应的记录数
     * @param desc  按照统计数排序，1=升序，0降序
     * @return  排行记录集
     * @throws  RemoteException
     */
    public function getClickCountOfKeyWord($starttime='', $endtime='', $app='sell', $count='') {
        $url = "http://" . $this->appName . "{name:ClickCount,method:getClickCountOfKeyWord,params:[" . '"' . $starttime . '"'. "," . '"' . $endtime . '"' . "," . '"' . $app . '"' . "," . $count . ",0]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取二手房和租房搜索组合排行记录
     * @param startDay  统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param endDay    统计日期（yyyyMMdd），如果不传入，默认为前一天
     * @param district  区域
     * @param app   应用名,rent 租房，sell 二手房，如果不传入，默人为sell
     * @param limit 返回记录数，0 全部返回，>0返回对应的记录数
     * @return
     * @throws RemoteException
     */
    public function getClickCountOfCombin($starttime='', $endtime='', $district='', $app = 'sell', $count='') {
        $url = "http://" . $this->appName . "{name:ClickCount,method:getClickCountOfCombin,params:[" . '"' . $starttime . '"'. "," . '"' . $endtime . '"' . "," . '"' . $district . '"' . "," . '"' . $app . '"' . "," . $count . "]}";
        return $this->get_array_data($url);
    }

    /**
     * 获取公司id下的经纪人刷新记录
     * @param startDay  开始时间YYYYMMDD
     * @param endDay    结束时间YYYYMMDD
     * @param pid   qtype=1时，pid为经纪人id,qtype=2时，pid为公司id
     * @param operatetype   操作类型2为刷新操作
     * @param app   sell为二手房，rent为租房
     * @param qType 1表示经纪人，2表示公司
     */
    public function getdayoperatebycid($startDay, $endDay, $pid, $operatetype, $qType) {
        $url = "http://" . $this->appName . "/getoperatecount?type=getdayoperatebycid&startDay=" . $startDay . "&endDay=" .$endDay. "&pid=" . $pid . "&operatetype=" . $operatetype . "&qType=" . $qType . "&city=" . $this->city;
        $strData = $this->curl_get_contents($url);
        $strData = $this->strIconv($strData, "gbk", $this->sourceCharSet);
        return json_decode($strData, true);
    }

    /**
     * 格式化数组参数 statistics::tourl()
     * @param array $array
     * @return string
     */
    public static function tourl($array) {
        if (is_array($array) && !empty($array)) {
            foreach ($array as $k => $v) {
                $ss.="&" . $k . "=" . @urlencode(trim($v));
            }
        }
        return $ss;
    }

    /**
     * 获得客户端ip statistics::GetIP()
     * @return string
     */
    public static function GetIP() {
        $ip = $_SERVER["REMOTE_ADDR"];
        if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"])) {
            $tip = split(",", $_SERVER["HTTP_X_FORWARDED_FOR"]);
            $ip = $tip[0];
        }
        return(trim($ip));
    }

    /**
     * 输入数组并返回数组 statistics::aryIconv()
     * @param array $array 输入的数组
     * @param mixed $inChar 输入数组的编码
     * @param mixed $outChar 返回数组的编码
     * @return array
     */
    private static function aryIconv($array, $inChar, $outChar) {
        $this->inChar = $inChar;
        $this->outChar = $outChar;
        return $this->arraymyicov($array);
    }

    /**
     * 内部方法,循环数组 statistics::arraymyicov()
     * 
     * @param array $array
     * @return array
     */
    private static function arraymyicov($array) {
        foreach ((array) $array as $key => $value) {
            $key = $this->strIconv($key);
            if (!is_array($value)) {
                $value = $this->strIconv($value);
            } else {
                $value = $this->arraymyicov($value);
            }
            $temparray[$key] = $value;
        }
        return $temparray;
    }

    /**
     * 替换数组编码 statistics::strIconv()
     * @param mixed $strInput
     * @param string $inChar
     * @param string $outChar
     * @return string
     */
    private static function strIconv($strInput, $inChar = "", $outChar = "") {
        if ($inChar)
            $this->inChar = $inChar;
        if ($outChar)
            $this->outChar = $outChar;
        $strOutput = iconv($this->inChar, $this->outChar, $strInput);
        if ($strOutput !== false)
            return $strOutput;
        else
            return $strInput;
    }

    /**
     * 
     * @param type $data
     * @return type
     */
    private function json_to_array($data) {
        $array_data = json_decode($data, TRUE);
        if($array_data['result']=='success') {
            $array_data = json_decode($array_data['returnobject'], TRUE);
            return $array_data;
        } else {
            //return array();
            return   $array_data;
        }
        
    }

    /**
     * 
     * @param type $url
     * @param type $t_url
     * @return type
     */
    private function curl_get_contents($url, $t_url = "") 
	{	
		$response = '';
		if($url != '')
		{	
			$memkey = md5($url);
			
			$cache = array();

			$cache = $this->mc->get($memkey);
			
			if ($cache['is_ok'] == 1) 
			{
                            $response = $cache['data'];
			} 
			else 
			{
				            $startTime = time();//开始时间 
                            $ch = curl_init();
                            $t_url = $t_url ? $t_url : "http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
                            curl_setopt($ch, CURLOPT_URL, $url);
                            curl_setopt($ch, CURLOPT_REFERER, $t_url);
							curl_setopt($ch, CURLOPT_TIMEOUT, 3);
                            curl_setopt($ch, CURLOPT_HEADER, 0);
                            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                            $response  = curl_exec($ch);
                            curl_close($ch);



                            $this->mc->add($memkey, array('is_ok' => 1, 'data' => $response),  600);
							$endTime = time();//结束时间
			
							if($endTime-$startTime>3){
							   //日志记录
								$time = date('Y-m-d H:i',time());
								$content = $time." ".$t_url." ".print_r($str,true)." \r\n";
								$fp1 = fopen('./applications/libraries/log_zjj_'.date('Ymd').'.txt','a');
								fwrite($fp1,"$content");
								fclose($fp1);
								
							}

							//日志记录
							$errorArr = array('error');
							foreach($errorArr as $value){
								if(strpos($str,$value)!== FALSE){
									$content = $time." ".$t_url." ".print_r($str,true)." \r\n";
									$fp1 = fopen('./applications/libraries/log_zjj2_'.date('Ymd').'.txt','a');
									fwrite($fp1,"$content");
									fclose($fp1);
								
								}
						
							}		
			}
		}

		//报错日志



        return $response;
    }
    
    /**
     * 
     * @param type $str api的url
     * @param type $url referer url可以为空
     * @return type
     */
    private function get_array_data($str, $url = "") {
        $strData = $this->curl_get_contents($str);
        $array_data = $this->json_to_array($strData);
        //$array_data = json_decode($strData, TRUE);
        //$array_data = json_decode($array_data['returnobject'], TRUE);
        return $array_data;
    }
}

?>