示例#1
0
 public static function getAllLanHaiComms($commIds, $fields = array())
 {
     try {
         $allComm = Model_Mobile_LanHaiComm::data_access()->filter_by_op('commId', 'in', $commIds)->distinct()->load_field($fields)->find_all();
         if (empty($allComm)) {
             $yesterday = date("Ymd", time() - 86400);
             $allComm = Model_Mobile_LanHaiComm::data_access($yesterday)->filter_by_op('commId', 'in', $commIds)->distinct()->load_field($fields)->find_all();
         }
     } catch (Exception $e) {
         $allComm = false;
     }
     return $allComm;
 }
示例#2
0
 public function handle_request_internal()
 {
     $nearby_comm = new V1_Comm_GetNearbyController();
     $this->_params['pageSize'] = $this->_params['pageSize'] ? $this->_params['pageSize'] : self::NEARBY_COMM_NUM;
     //小区数目为40
     $key = self::MEMCACHE_KEY_FIND_NEARBY_COMMS . '_';
     foreach ($this->_params as $k => $v) {
         if (in_array($k, array('brokerId', 'cityId', 'mapType', 'lat', 'lng'))) {
             $key .= $k . '=' . $v;
         }
     }
     $key .= '_' . date("Ymd");
     $memcache = APF_Cache_Factory::get_instance()->get_memcache();
     $result = $memcache->get($key);
     $cityId = $this->_params['cityId'];
     if (empty($result)) {
         //初始化数组
         $commId = array();
         $topComms = array();
         $commonComms = array();
         $lanHaiComms = array();
         $hotComms = array();
         $nearby_comm = $nearby_comm->getNearbyComm($this->_params, 1, 0);
         if (!empty($nearby_comm) && $nearby_comm['count'] > 0) {
             //获取全部小区ID数组
             foreach ($nearby_comm['communities'] as $comm) {
                 $commIds[] = $comm['id'];
             }
             //从蓝海小区表获取相关数据
             //蓝海小区城市开关(产品表示暂不启用?)
             //$isOpenCity = Model_Mobile_TightCommCity::checkOpenCity($this->_params['cityId']);
             $allLanHaiComms = Model_Mobile_LanHaiComm::getAllLanHaiComms($commIds, array('commId', 'spreadNum', 'averageVPPV'));
             if (!empty($allLanHaiComms)) {
                 $maxVPPVComm = 0;
                 foreach ($allLanHaiComms as $lanHaiComm) {
                     $totalVPPV = ceil($lanHaiComm->averageVPPV * $lanHaiComm->spreadNum);
                     if ($totalVPPV > $maxVPPVComm) {
                         $maxVPPVComm = $totalVPPV;
                         $topCommIds[0] = $lanHaiComm->commId;
                     }
                     $lanHaiComms[$lanHaiComm->commId]['spreadNum'] = $lanHaiComm->spreadNum;
                     $lanHaiComms[$lanHaiComm->commId]['totalVPPV'] = $totalVPPV;
                 }
                 //从返还小区表里获取返还小区
                 $lanHaiCommIds = array_keys($lanHaiComms);
                 $allFanComms = Model_Mobile_FanComm::getAllFanComms($lanHaiCommIds, array('commId'));
             }
             //从热门小区表、竞争激烈表获取相关数据
             $allHotComms = Model_Mobile_HotComm::getMostHotComms($cityId, $commIds, array('commId', 'spreadPropNum', 'totalVPPV', 'type'));
             if (!empty($allHotComms)) {
                 $maxVPPVComm = 0;
                 $totalVPPV = array();
                 foreach ($allHotComms as $hotComm) {
                     $totalVPPV[$hotComm['commId']]['totalVPPV'] += $hotComm['totalVPPV'];
                     $spreadNum[$hotComm['commId']]['spreadNum'] += $hotComm['spreadPropNum'];
                     if ($totalVPPV[$hotComm['commId']]['totalVPPV'] > $maxVPPVComm) {
                         $maxVPPVComm = $totalVPPV[$hotComm['commId']]['totalVPPV'];
                         if (!in_array($hotComm['commId'], $lanHaiCommIds)) {
                             $topCommIds[1] = $hotComm['commId'];
                         }
                     }
                     $hotComms[$hotComm['commId']]['spreadNum'] = $spreadNum[$hotComm['commId']]['spreadNum'];
                     $hotComms[$hotComm['commId']]['totalVPPV'] = $totalVPPV[$hotComm['commId']]['totalVPPV'];
                 }
             }
             //循环小区数组,加上小区类型(蓝海、热门),房源数,vppv
             foreach ($nearby_comm['communities'] as $k => &$comm) {
                 $comm['commType'] = '';
                 $comm['isFanComm'] = 0;
                 $comm['spreadNum'] = 0;
                 $comm['totalVPPV'] = 0;
                 //打标签
                 if (isset($hotComms[$comm['id']])) {
                     $comm['commType'] = self::COMMTYPE_HOT;
                     $comm['spreadNum'] = $hotComms[$comm['id']]['spreadNum'];
                     $comm['totalVPPV'] = $hotComms[$comm['id']]['totalVPPV'];
                 }
                 if (isset($lanHaiComms[$comm['id']])) {
                     $comm['commType'] = self::COMMTYPE_LAN;
                     $comm['spreadNum'] = $lanHaiComms[$comm['id']]['spreadNum'];
                     $comm['totalVPPV'] = $lanHaiComms[$comm['id']]['totalVPPV'];
                     if (!empty($allFanComms)) {
                         foreach ($allFanComms as $fanComm) {
                             if ($fanComm->commId == $comm['id']) {
                                 $comm['isFanComm'] = 1;
                             }
                         }
                     }
                 } else {
                     //获取该小区的VPPV和推广房源数
                 }
                 if (!empty($topCommIds)) {
                     //从普通小区数组中去除top小区位的小区
                     if (in_array($comm['id'], $topCommIds)) {
                         foreach ($topCommIds as $k => $commId) {
                             if ($comm['id'] == $commId) {
                                 $topComms[] = $comm;
                             }
                         }
                     } else {
                         $common_comms[] = $comm;
                     }
                 } else {
                     $common_comms[] = $comm;
                 }
             }
             $commonComms = $common_comms;
             ksort($topComms);
         }
         $result['topComms'] = $topComms;
         $result['commonComms'] = $commonComms;
         if (!(empty($result['topComms']) && empty($result['commonComms']))) {
             $memcache->add($key, $result, 0, 86400);
             //24h
         }
     }
     $ret = array('status' => 'ok', 'data' => $result);
     return $ret;
 }