public function handle_request_internal()
 {
     $brokerId = $this->_params['brokerId'];
     $lng = $this->_params['lng'];
     $lat = $this->_params['lat'];
     // 更新经纪人位置
     $needLog = false;
     $location = Model_Broker_Location::data_access()->filter('brokerId', $brokerId)->find_only();
     if (!$location) {
         $location = Model_Broker_Location::create(array('brokerId' => $brokerId, 'lng' => $lng, 'lat' => $lat, 'sourceType' => Model_Broker_Location::SOURCE_TYPE_UPDATE_LOCATION, 'updateTime' => date('Y-m-d H:i:s')));
         $location->save();
         $needLog = true;
     }
     if (!($location['lat'] == $lat && $location['lng'] == $lng && $location['sourceType'] == Model_Broker_Location::SOURCE_TYPE_UPDATE_LOCATION)) {
         $location['lat'] = $lat;
         $location['lng'] = $lng;
         $location['sourceType'] = Model_Broker_Location::SOURCE_TYPE_UPDATE_LOCATION;
         $location['updateTime'] = date('Y-m-d H:i:s');
         $location->save();
         $needLog = true;
     }
     // 记录位置变更日志
     if ($needLog) {
         $locationLog = Model_Broker_LocationLog::create(array('brokerId' => $brokerId, 'lng' => $lng, 'lat' => $lat, 'updateTime' => date('Y-m-d H:i:s')), date('Ym'));
         $locationLog->save();
     }
     return array('status' => Const_APIStatus::RETURN_CODE_OK);
 }
Example #2
0
 /**
  * 获取近几日附近签到过的经纪人坐标
  *
  * @param $lng
  * @param $lat
  * @param $radius
  * @param $total
  * @param int $days
  *
  * @return array
  *
  * @throws Exception_General_InvalidParameters
  */
 public static function getRoundBrokerLocationsInThePastFewDays($lng, $lat, $radius, $total, $days = 0)
 {
     if (!($days > 0 & $days <= 15)) {
         throw new Exception_General_InvalidParameters("Days must between 1 and 15, {$days} is given.");
     }
     $startTime = date('Y-m-d 00:00:00', strtotime(sprintf("-%d days", $days - 1)));
     $mile_info = Util_Map::round($lat, $lng, $radius);
     $locations = Model_Broker_Location::data_access()->filter_by_op_multi(array(array('updateTime', '>=', $startTime), array('lat', '>=', $mile_info['minLat']), array('lat', '<=', $mile_info['maxLat']), array('lng', '>=', $mile_info['minLng']), array('lng', '<=', $mile_info['maxLng'])))->limit($total)->find_all();
     $keyedLocations = array();
     foreach ($locations as $location) {
         $keyedLocations[$location['brokerId']] = $location;
     }
     return $keyedLocations;
 }
Example #3
0
 public function handle_request()
 {
     $limit = 1000;
     $offset = 0;
     while ($offset < $limit) {
         $data = Bll_Mobile_RedisToDb::readBrokerLocation();
         if ($data) {
             $needLog = false;
             // 是否需要记录位置更新日志
             $location = Model_Broker_Location::data_access()->filter('brokerId', $data['brokerId'])->find_only();
             //没有位置信息,插入数据
             if (!$location) {
                 $location = Model_Broker_Location::create(array('brokerId' => $data['brokerId'], 'lng' => $data['lng'], 'lat' => $data['lat'], 'sourceType' => Model_Broker_Location::SOURCE_TYPE_COMMUNITY_SIGN, 'updateTime' => $data['updateTime']));
                 $location->save();
                 $needLog = true;
             }
             //位置信息改变,插入数据
             if (!($location['lat'] == $data['lat'] && $location['lng'] == $data['lng'] && $location['sourceType'] == Model_Broker_Location::SOURCE_TYPE_COMMUNITY_SIGN)) {
                 $location['lat'] = $data['lat'];
                 $location['lng'] = $data['lng'];
                 $location['sourceType'] = Model_Broker_Location::SOURCE_TYPE_COMMUNITY_SIGN;
                 $location['updateTime'] = $data['updateTime'];
                 $location->save();
                 $needLog = true;
             }
             // 记录位置变更日志
             if ($needLog) {
                 $locationLog = Model_Broker_LocationLog::create(array('brokerId' => $data['brokerId'], 'lng' => $data['lng'], 'lat' => $data['lat'], 'updateTime' => $data['updateTime']), date('Ym'));
                 $locationLog->save();
             }
             ++$offset;
         } else {
             break;
         }
     }
 }
 public function handle_request_internal()
 {
     $brokerId = $this->_params['brokerId'];
     $searchRange = isset($this->_params['searchRange']) ? $this->_params['searchRange'] : 3;
     $location = Model_Broker_Location::findLatestLocationByBrokerId($brokerId, $searchRange);
     if (!$location) {
         return array('status' => Const_APIStatus::RETURN_CODE_ERROR, 'errcode' => Const_APIStatus::E_BROKER_LOCATION_NOT_EXIST, 'message' => '经纪人坐标不存在');
     }
     $data = array();
     $data['id'] = $location['id'];
     $data['brokerId'] = $location['brokerId'];
     $data['lat'] = $location['lat'];
     $data['lng'] = $location['lng'];
     $data['sourceType'] = $location['sourceType'];
     $data['updateTime'] = $location['updateTime'];
     $data['commId'] = 0;
     if ($location['sourceType'] == Model_Broker_Location::SOURCE_TYPE_COMMUNITY_SIGN) {
         $sign = Model_Broker_CommunitySign::findLatestCommunitySignByBrokerId($brokerId, $searchRange);
         if ($sign) {
             $data['commId'] = $sign['communityId'];
         }
     }
     return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => $data);
 }