コード例 #1
0
 public function handle_request_internal()
 {
     $lng = $this->_params['lng'];
     $lat = $this->_params['lat'];
     $radius = isset($this->_params['radius']) ? $this->_params['radius'] : 3000;
     // 搜索半径,默认3000米
     $total = isset($this->_params['total']) ? $this->_params['total'] : 500;
     // 最大总数,默认500
     $days = isset($this->_params['days']) ? $this->_params['days'] : 3;
     // 查询天数,默认3天
     $cache = APF_Cache_Factory::get_instance()->get_memcache();
     $key = $this->generateCacheKey($lat, $lng, $days);
     $result = $cache->get($key);
     if ($result === false || $this->isDebugMode()) {
         // 获取近几日附近签到过的经纪人坐标
         $brokerLocations = Bll_Broker_Location::getRoundBrokerLocationsInThePastFewDays($lng, $lat, $radius, $total, $days);
         $brokerIds = array_keys($brokerLocations);
         // 获取经纪人的等级
         $brokerLevels = Model_Broker_AjkBrokerExtend::getMultiBrokerLevels($brokerIds);
         // 获取经纪人微聊状态(根据活动是否进行中,决定是否查询)
         if (Bll_Broker_CallAnalysis::isTalentEventOngoing()) {
             $brokerChatStats = Model_Chat_TalentStat::findMultiByBrokerIds($brokerIds);
         }
         // 获取经纪人明星中介状态(未判断城市是否开启等,已 BI 每日生成的最终数据为准)
         $brokerStarBrokerStats = Model_Broker_StarIntermediaryScore::findMultiByBrokerIds($brokerIds, date('Y-m-d'));
         // 拼装返回数据
         $result = array();
         foreach ($brokerLocations as $brokerLocation) {
             $row = array();
             $row['id'] = $brokerLocation['id'];
             $row['brokerId'] = $brokerLocation['brokerId'];
             $row['lat'] = $brokerLocation['lat'];
             $row['lng'] = $brokerLocation['lng'];
             $row['updateTime'] = $brokerLocation['updateTime'];
             // 获取经纪人状态:活跃 or 非活跃(ajk_brokerextend.BrokerLevel = 'K' 为 活跃经纪人)
             $row['isActive'] = intval(isset($brokerLevels[$row['brokerId']]) && $brokerLevels[$row['brokerId']] == 'K');
             // 微聊达人
             $isChatTalent = -1;
             // 默认,微聊达人活动未开始或已结束
             if (Bll_Broker_CallAnalysis::isTalentEventOngoing()) {
                 $isChatTalent = 0;
                 // 活动中,默认不是微聊达人
                 if (isset($brokerChatStats[$row['brokerId']])) {
                     $isChatTalent = $brokerChatStats[$row['brokerId']]['isTalent'];
                 }
             }
             $row['isChatTalent'] = $isChatTalent;
             // 明星中介
             $isStarBroker = 0;
             if (isset($brokerStarBrokerStats[$row['brokerId']])) {
                 $isStarBroker = $brokerStarBrokerStats[$row['brokerId']]['isMingxing'];
             }
             $row['isStarBroker'] = $isStarBroker;
             $result[] = $row;
         }
         $cache->set($key, $result, 0, 900);
     }
     return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => $result);
 }
コード例 #2
0
 public function handle_request_internal()
 {
     header("Access-Control-Allow-Origin: *");
     $lng = $this->_params['lng'];
     $lat = $this->_params['lat'];
     $brokerId = $this->_params['brokerId'];
     $radius = isset($this->_params['radius']) ? $this->_params['radius'] : 3000;
     // 搜索半径,默认3000米
     $total = isset($this->_params['total']) ? $this->_params['total'] : 100;
     // 最大总数,默认500
     $days = isset($this->_params['days']) ? $this->_params['days'] : 3;
     // 查询天数,默认3天
     //获取附近经纪人Id
     $brokerLocations = Bll_Broker_Location::getRoundBrokerLocationsInThePastFewDays($lng, $lat, $radius, $total, $days);
     $brokerIds = array_keys($brokerLocations);
     //根据经纪人Id数组查询多个经纪人信息
     $brokerInfosTmp = Model_Broker_AjkBrokerExtend::findMultiBrokers($brokerIds);
     //提取经纪人ID
     $brokerIds = $brokerInfos = array();
     foreach ($brokerInfosTmp as $value) {
         if ($value->brokerId != $brokerId) {
             $brokerIds[] = $value->brokerId;
             $brokerInfos[$value->brokerId] = $value;
         }
     }
     //批量查询微聊信息
     $chatInfos = Bll_Mobile_ChatInfoBll::getInstance()->GetChatInfoByIds($brokerIds);
     //根据微聊信息筛选经纪人,去除微聊信息为空的经纪人
     $brokers = array();
     foreach ($chatInfos as $chatInfo) {
         $re = array();
         $distance = Util_Map::distance($lng, $lat, $brokerLocations[$chatInfo['brokerId']]['lng'], $brokerLocations[$chatInfo['brokerId']]['lat']);
         $distance = round($distance / 1000, 2);
         if ($distance > 3 || $brokerInfos[$chatInfo['brokerId']]->checkState != 1) {
             continue;
         }
         $re['brokerId'] = $chatInfo['brokerId'];
         $re['companyInfo'] = $brokerInfos[$chatInfo['brokerId']]->company;
         $re['trueName'] = $brokerInfos[$chatInfo['brokerId']]->trueName;
         $re['userMobile'] = $brokerInfos[$chatInfo['brokerId']]->userMobile;
         $disarr[] = $distance;
         $re['distance'] = $distance;
         $re['userPhoto'] = Util_ImageUtils::get_broker_photo_url($brokerInfos[$chatInfo['brokerId']]->userPhoto, '200x200');
         $re['chatId'] = $chatInfo['chatId'];
         $re['twoCodeIcon'] = $chatInfo['twoCodeIcon'];
         $brokers[] = $re;
     }
     //按距离排序
     array_multisort($disarr, $brokers);
     return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => array('brokerList' => $brokers));
 }