Esempio n. 1
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));
 }
Esempio n. 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;
 }
 /**
  * 获取指定坐标点指定范围内指定个数的经纪人  (按rank分数从高到低排序)
  * @param $lat 纬度
  * @param $lng 经度
  * @param $radius 范围 单位米
  * @param $limit 限制人数
  * @return array
  * add by xiongjianxu
  */
 public static function getBrokerInfoByXY($lat, $lng, $radius, $limit)
 {
     $result = array();
     if (empty($lat) || empty($lng) || empty($radius)) {
         return $result;
     }
     $latLngRound = Util_Map::round($lat, $lng, $radius);
     echo 'lat,min:' . $latLngRound['minLat'] . 'max' . $latLngRound['maxLat'] . "\n";
     echo 'lng,min:' . $latLngRound['minLng'] . 'max' . $latLngRound['maxLng'] . "\n";
     $data = self::data_access()->filter_by_op_multi(array(array('centerX', '>=', $latLngRound['minLat']), array('centerX', '<=', $latLngRound['maxLat']), array('centerY', '>=', $latLngRound['minLng']), array('centerY', '<=', $latLngRound['maxLng'])))->sort('score', 'desc');
     if ($limit) {
         $data->limit($limit);
     }
     $result = $data->find();
     return $result;
 }
Esempio n. 4
0
 private function getCommList($brokerId, $lat, $lng)
 {
     // 从缓存中读取数据
     $communities = Bll_Commsign::getCommList($brokerId);
     if (empty($communities)) {
         // 根据lat和lng获取1.5km内的小区列表
         $latLngRound = Util_Map::round($lat, $lng, 1500);
         $communities = Model_Community_AjkCommunity::data_access()->load_field(array('commId', 'commName', 'sosolng', 'sosolat'))->filter('typeFlag', 0)->filter_by_op_multi(array(array('sosolat', '>=', $latLngRound['minLat']), array('sosolat', '<=', $latLngRound['maxLat']), array('sosolng', '>=', $latLngRound['minLng']), array('sosolng', '<=', $latLngRound['maxLng'])))->limit(1000)->get_all();
         if (empty($communities)) {
             return array();
         }
         // 实现按距离排序 • 升序
         uasort($communities, function (&$a, &$b) use($lat, $lng) {
             // 计算坐标的距离
             $a['distance'] = Util_Map::distance($lat, $lng, $a['sosolat'], $a['sosolng']);
             $b['distance'] = Util_Map::distance($lat, $lng, $b['sosolat'], $b['sosolng']);
             // 比较两小区坐标
             if ($a['distance'] == $b['distance']) {
                 return 0;
             }
             return $a['distance'] < $b['distance'] ? -1 : 1;
         });
         $i = 0;
         $data = array();
         foreach ($communities as $community) {
             if (++$i > 300) {
                 break;
             }
             $row = array();
             $row['commId'] = $community['commId'];
             $row['commName'] = $community['commName'];
             $row['lng'] = $community['sosolng'];
             $row['lat'] = $community['sosolat'];
             $row['distance'] = $community['distance'];
             $data[] = $row;
         }
         // 缓存数据
         Bll_Commsign::setCommList($brokerId, $data);
         return $data;
     } else {
         if (is_array($communities)) {
             return $communities;
         } else {
             return array();
         }
     }
 }
Esempio n. 5
0
 public function handle_request_internal()
 {
     /**
      * 签到小区详情
      *
      * - 验证参数
      *
      *
      * - 获取经纪人
      *
      * - 获取小区(AjkCommunity)
      * -
      *
      * - 获取小区签到人数
      *
      * - 判断经纪人是否可签到(经纪人是否已签到、当前是否在签到时间段)
      * - 校验小区坐标和lat、lng的距离5公里,超出不可签到(如小区无坐标,不可签到)
      *
      * - 计算距离下一时间点的签到倒计时(单位:s)
      *
      * - 获取小区各个时间段签到前3名
      *
      * - 返回数据
      */
     // 获取参数
     $brokerId = $this->_params['brokerId'];
     $commId = $this->_params['commId'];
     $lat = $this->_params['lat'];
     $lng = $this->_params['lng'];
     // 根据ID获取经纪人
     $broker = Bll_Commsign::getBrokerInfo($brokerId);
     if (!$broker) {
         $broker = Model_Broker_AjkBrokerExtend::data_access()->filter('brokerId', $brokerId)->find_only();
         if (!$broker) {
             throw new Exception('经纪人不存在', Const_APIStatus::E_BROKER_NOT_EXISTS);
         }
         $broker_photo = Util_ImageUtils::get_broker_photo_url($broker['userPhoto'], '200x200');
         $brokerInfo = array('brokerId' => $broker['brokerId'], 'username' => $broker['trueName'], 'userPhoto' => $broker_photo, 'cityId' => $broker['cityId']);
         Bll_Commsign::redisBrokerInfo($brokerId, $brokerInfo);
     }
     // 根据ID获取小区
     $community = Bll_Commsign::getCommInfo($commId);
     if (empty($community)) {
         $community = Bll_Community_APIComm::getInstance()->getInfoByIdMapping($commId, 2);
         $commInfo = array();
         $commInfo['commId'] = $community['commId'];
         $commInfo['commName'] = $community['commName'];
         $commInfo['sosolng'] = $community['sosolng'];
         $commInfo['sosolat'] = $community['sosolat'];
         Bll_Commsign::setCommInfo($commId, $commInfo);
     }
     if (!$community || !$community['sosolat'] || !$community['sosolng']) {
         throw new Exception('小区不存在', Const_APIStatus::E_COMMUNITY_NOT_EXISTS);
     }
     // 获取小区签到人数
     $communitySignCount = Bll_Commsign::getCommCount($commId);
     // 判断经纪人是否可签到
     $signAble = true;
     $currentSignRange = Bll_Broker_CommunitySign::getCurrentSignRange();
     if (!$currentSignRange) {
         $signAble = false;
     } else {
         // 经纪人是否已经签过到
         if (Bll_Commsign::isSignedAlready($brokerId, $commId, $currentSignRange[0])) {
             $signAble = false;
         }
     }
     // 对比小区坐标和参数坐标两点的距离(5km)
     $distance = Util_Map::distance($lat, $lng, $community['sosolat'], $community['sosolng']);
     if ($distance > 5000) {
         $signAble = false;
     }
     $data = array();
     $data['signAble'] = intval($signAble);
     $data['signCount'] = $communitySignCount;
     $data['countDown'] = $signAble ? 0 : Bll_Broker_CommunitySign::nextSignCountDown();
     $data['signList'] = array();
     // 获取各时间段签到前三名
     if (Bll_Broker_CommunitySign::isTopSignerActivityOngoing()) {
         $data['signList'] = array(array('hour' => '10:00', 'brokers' => array()), array('hour' => '15:00', 'brokers' => array()), array('hour' => '20:00', 'brokers' => array()));
         foreach ($data['signList'] as &$theSignList) {
             $theHour = intval($theSignList['hour']);
             $hour = intval(date('H'));
             if ($hour >= 0 && $hour < 10) {
                 break;
             } elseif ($hour >= 10 && $hour < 20) {
                 if ($theHour > $hour) {
                     continue;
                 }
             }
             $theSignRange = array();
             switch ($theHour) {
                 case 10:
                     $theSignRange = array(date('Y-m-d 10:00:00'), date('Y-m-d 14:59:59'));
                     break;
                 case 15:
                     $theSignRange = array(date('Y-m-d 15:00:00'), date('Y-m-d 19:59:59'));
                     break;
                 case 20:
                     $theSignRange = array(date('Y-m-d 20:00:00'), date('Y-m-d 23:59:59'));
                     break;
             }
             $theSignList['brokers'] = Bll_Commsign::getFirstThr($commId, $theSignRange[0]);
             if (empty($theSignList['brokers'])) {
                 $theSignList['brokers'] = Model_Broker_CommunitySign::data_access(date('Ym', strtotime($currentSignRange[0])))->filter('communityId', $commId)->filter_by_op_multi(array(array('signTime', '>=', $theSignRange[0]), array('signTime', '<=', $theSignRange[1])))->sort('signTime', 'asc')->limit(3)->get_all();
             }
             $tmp = array();
             if (!empty($theSignList['brokers'])) {
                 foreach ($theSignList['brokers'] as $k => $v) {
                     $brokerTmp = Bll_Commsign::getBrokerInfo($v['brokerId']);
                     if (!$brokerTmp) {
                         $broker = Model_Broker_AjkBrokerExtend::data_access()->filter('brokerId', $v['brokerId'])->find_only();
                         $broker_photo = Util_ImageUtils::get_broker_photo_url($broker['userPhoto'], '200x200');
                         $brokerTmp = array('brokerId' => $broker['brokerId'], 'username' => $broker['trueName'], 'userPhoto' => $broker_photo, 'cityId' => $broker['cityId']);
                         Bll_Commsign::redisBrokerInfo($v['brokerId'], $brokerTmp);
                     }
                     if (empty($brokerTmp['userPhoto'])) {
                         $brokerTmp['userPhoto'] = PageHelper::pure_static_url('/img/bknoimg.gif');
                     }
                     $dataTmp = array('brokerId' => $brokerTmp['brokerId'], 'brokerTrueName' => $brokerTmp['username'], 'brokerPhoto' => $brokerTmp['userPhoto']);
                     $tmp[] = $dataTmp;
                 }
                 $theSignList['brokers'] = $tmp;
             }
         }
     }
     return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => $data);
 }
Esempio n. 6
0
 public function handle_request_internal()
 {
     /**
      * 小区签到逻辑
      *
      * - 验证参数
      *
      * - 获取经纪人
      *
      * - 获取小区(AjkCommunity)
      * - 校验小区坐标和lat、lng的距离5公里(如小区无坐标,直接拒绝)
      *
      * - 添加签到记录
      *  - 添加签到记录
      *  - 更新签到按日统计信息(incr)
      *
      * - 更新经纪人坐标
      *  - 添加经纪人坐标日志
      *  - 更新经纪人坐标
      *
      * - 返回数据
      */
     $result = array('status' => 'error', 'errcode' => '', 'message' => '');
     // 获取参数
     $brokerId = $this->_params['brokerId'];
     $commId = $this->_params['commId'];
     $lat = $this->_params['lat'];
     $lng = $this->_params['lng'];
     if (empty($lat) || empty($lng)) {
         $result['message'] = '获取定位数据失败,请重新定位';
         return $result;
     }
     // 根据ID获取经纪人
     $broker = Bll_Commsign::getBrokerInfo($brokerId);
     if (!$broker) {
         $broker = Model_Broker_AjkBrokerExtend::data_access()->filter('brokerId', $brokerId)->find_only();
         if (!$broker) {
             throw new Exception('经纪人不存在', Const_APIStatus::E_BROKER_NOT_EXISTS);
         }
         $broker_photo = Util_ImageUtils::get_broker_photo_url($broker['userPhoto'], '200x200');
         $brokerInfo = array('brokerId' => $broker['brokerId'], 'username' => $broker['trueName'], 'userPhoto' => $broker_photo, 'cityId' => $broker['cityId']);
         Bll_Commsign::redisBrokerInfo($brokerId, $brokerInfo);
     }
     // 根据ID获取小区
     $community = Bll_Commsign::getCommInfo($commId);
     if (empty($community)) {
         $community = Bll_Community_APIComm::getInstance()->getInfoByIdMapping($commId, 2);
         $commInfo = array();
         $commInfo['commId'] = $community['commId'];
         $commInfo['commName'] = $community['commName'];
         $commInfo['sosolng'] = $community['sosolng'];
         $commInfo['sosolat'] = $community['sosolat'];
         Bll_Commsign::setCommInfo($commId, $commInfo);
     }
     // 小区不存在或小区经纬租表不存在时,返回小区不存在
     if (!$community || !$community['sosolat'] || !$community['sosolng']) {
         $result['errcode'] = Const_APIStatus::E_COMMUNITY_NOT_EXISTS;
         $result['message'] = '小区暂未开通签到功能';
         return $result;
     }
     // 对比小区坐标和参数坐标两点的距离(5km)
     $distance = Util_Map::distance($lat, $lng, $community['sosolat'], $community['sosolng']);
     if ($distance > 5000) {
         $result['errcode'] = Const_APIStatus::E_BROKER_COMMSIGN_FAR_AWAY;
         $result['message'] = '签到失败!你跑得太远了,请返回重新定位';
         return $result;
     }
     // 获取当前所处签到时间(10:00 15:00 20:00)
     $currentSignRange = Bll_Broker_CommunitySign::getCurrentSignRange();
     if (!$currentSignRange) {
         $result['errcode'] = Const_APIStatus::E_BROKER_COMMSIGN_NOT_IN_RANGE;
         $result['message'] = '不在签到时间范围';
         return $result;
     }
     // 判断是否已经签到
     if (Bll_Commsign::isSigned($brokerId, $commId, $currentSignRange[0])) {
         $result['errcode'] = Const_APIStatus::E_BROKER_COMMSIGN_ALREADY_SIGNED;
         $result['message'] = '已经签到!';
         return $result;
     }
     try {
         // 新建签到,
         $sign = array('brokerId' => $brokerId, 'communityId' => $commId, 'lat' => $lat, 'lng' => $lng, 'signTime' => date('Y-m-d H:i:s'), 'currentSignRange' => $currentSignRange[0]);
         Bll_Commsign::Signed($brokerId, $commId, $currentSignRange[0], $sign);
         //缓存‘签到信息’到同步数据库的redis中
         Bll_RedisToDb::writeBrokerCommunitySign($sign);
         // 缓存经纪人位置
         $locationInfo = array('brokerId' => $brokerId, 'lng' => $lng, 'lat' => $lat, 'updateTime' => date('Y-m-d H:i:s'));
         Bll_Commsign::setLocationInfo($brokerId, $locationInfo);
         //缓存‘位置信息’到同步数据库的redis中
         Bll_RedisToDb::writeBrokerLocation($locationInfo);
         //记录每日签到情况
         Bll_Commsign::dailySignedRecord($brokerId);
         // 获取签到排名
         $rank = Bll_Commsign::getSignRank($commId, $currentSignRange[0]);
         //连续签到统计
         $SignStatistics = Bll_Commsign::getSignStatistics($brokerId);
         $sendFlag = false;
         if ($SignStatistics) {
             if (date('Y-m-d', strtotime($SignStatistics['updateTime'])) == date('Y-m-d', strtotime('yesterday'))) {
                 $SignStatistics['signCount'] = $SignStatistics['signCount'] + 1;
                 $sendFlag = true;
             } elseif (date('Y-m-d', strtotime($SignStatistics['updateTime'])) == date('Y-m-d', time())) {
             } else {
                 $SignStatistics['signCount'] = 1;
                 $sendFlag = true;
             }
             if ($SignStatistics['signCount'] > $SignStatistics['maxSignCount']) {
                 $SignStatistics['maxSignCount'] = $SignStatistics['signCount'];
             }
             $SignStatistics['updateTime'] = date('Y-m-d H:i:s');
             Bll_Commsign::setSignStatistics($brokerId, $SignStatistics);
             //缓存‘签到统计信息’到同步数据库的redis中
             $SignStatistics = array_merge($SignStatistics, array('sendFlag' => $sendFlag));
             Bll_RedisToDb::writeCommSignStatistics($SignStatistics);
         } else {
             $SignStatistics = array('brokerId' => $brokerId, 'signCount' => 1, 'maxSignCount' => 1, 'createTime' => date('Y-m-d H:i:s'));
             Bll_Commsign::setSignStatistics($brokerId, $SignStatistics);
             $sendFlag = true;
             //缓存‘签到统计信息’到同步数据库的redis中
             $SignStatistics = array_merge($SignStatistics, array('sendFlag' => $sendFlag));
             Bll_RedisToDb::writeCommSignStatistics($SignStatistics);
         }
     } catch (Exception $e) {
         $result['message'] = '签到人太多,系统繁忙,请稍后再试~';
         return $result;
     }
     return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => array('signRank' => $rank, 'countDown' => Bll_Broker_CommunitySign::nextSignCountDown()));
 }
Esempio n. 7
0
 public function handle_request_internal()
 {
     $brokerId = isset($this->_params['brokerId']) ? $this->_params['brokerId'] : 0;
     $keyword = isset($this->_params['keyword']) ? $this->_params['keyword'] : '';
     $commId = isset($this->_params['commId']) ? $this->_params['commId'] : 0;
     $cityId = isset($this->_params['cityId']) ? $this->_params['cityId'] : 0;
     $distance = isset($this->_params['distance']) ? $this->_params['distance'] : 0;
     $price = isset($this->_params['price']) ? $this->_params['price'] : 0;
     $rooms = isset($this->_params['rooms']) ? $this->_params['rooms'] : 0;
     $lat = isset($this->_params['lat']) ? floatval($this->_params['lat']) : 0;
     $lng = isset($this->_params['lng']) ? floatval($this->_params['lng']) : 0;
     $page = isset($this->_params['page']) ? $this->_params['page'] : 1;
     $per = isset($this->_params['per']) ? intval($this->_params['per']) : 20;
     $data = array();
     $data['page'] = $page;
     $data['hasNextPage'] = 0;
     $filters = APF::get_instance()->get_config('prop_search_filters', 'fyk_search');
     $props = array();
     if ($cityId == 0) {
         $brokerInfo = Model_Broker_AjkBrokerExtend::findWithBrokerId($brokerId);
         $cityId = $brokerInfo['cityId'];
     }
     // Solr 查询
     $solr = APF_Search_SearchClient::instance('fyk-prop');
     // 在售
     $solr->addEqualFilter('status', Const_Fyk::PROPSTATUS_SELLING);
     if ($cityId) {
         $solr->addEqualFilter('city_id', $cityId);
     }
     // 过滤关键词或小区
     if ($commId) {
         $solr->addEqualFilter('comm_id', $commId);
     } elseif ($keyword) {
         $solr->setKeywords($keyword)->addWeightedSearchField('comm_name', 4)->addWeightedSearchField('block_name', 1)->addWeightedSearchField('district_name', 1);
     }
     // 距离
     if ($distance && isset($filters['distance']['options'][$distance]) && $lat && $lng) {
         $filters['distance']['options'][$distance]['lat'] = (double) $lat;
         $filters['distance']['options'][$distance]['lng'] = (double) $lng;
         $this->filterBuilder($solr, $distance, $filters['distance']);
     }
     // 价钱
     if ($price && isset($filters['price']['options'][$price])) {
         $this->filterBuilder($solr, $price, $filters['price']);
     }
     // 户型
     if ($rooms && isset($filters['rooms']['options'][$rooms])) {
         $this->filterBuilder($solr, $rooms, $filters['rooms']);
     }
     // 分页
     if ($page) {
         $start = ($page - 1) * $per;
         $solr->setLimit($start, $per);
     }
     // 排序
     $solr->addFieldSort('onsell_time', true);
     $response = $solr->fetchResult();
     if (isset($response['response']['numFound']) && $response['response']['numFound']) {
         // 判定下一页
         if ($response['response']['numFound'] > $page * $per) {
             $data['hasNextPage'] = 1;
         }
         // 取房源
         foreach ($response['response']['docs'] as $doc) {
             $prop = array('fPropId' => $doc['id'], 'isOnly' => intval($doc['is_only']), 'isReal' => intval($doc['is_real']), 'certificate' => intval($doc['is_certificate']), 'commId' => $doc['comm_id'], 'commName' => $doc['comm_name'], 'districtId' => $doc['district_id'], 'districtName' => $doc['district_name'], 'blockId' => $doc['block_id'], 'blockName' => $doc['block_name'], 'roomNum' => $doc['room_num'], 'hallNum' => $doc['hall_num'], 'toiletNum' => $doc['toilet_num'], 'area' => $doc['area_num'], 'areaUnit' => '平米', 'price' => intval($doc['price'] / 10000), 'priceUnit' => '万', 'distance' => '', 'distanceUnit' => 'm', 'publishDays' => 0, 'publishDaysMsg' => '');
             // 距离
             if ($distance && isset($filters['distance']['options'][$distance]) && $lat && $lng) {
                 list($propLat, $propLng) = explode(',', $doc['comm_location']);
                 $prop['distance'] = intval(Util_Map::distance($lat, $lng, $propLat, $propLng));
                 if ($prop['distance'] > $distance) {
                     $prop['distance'] = $distance;
                 }
             }
             // 在售时间
             if ($doc['onsell_time']) {
                 $prop['publishDays'] = intval((strtotime(date('Y-m-d 00:00:00')) - strtotime(date('Y-m-d 00:00:00', $doc['onsell_time']))) / 86400);
                 if ($prop['publishDays'] == 0) {
                     $prop['publishDaysMsg'] = '今日发布';
                 } elseif ($prop['publishDays'] == 1) {
                     $prop['publishDaysMsg'] = '昨日发布';
                 } else {
                     $prop['publishDaysMsg'] = "{$prop['publishDays']}日前发布";
                 }
             }
             $props[] = $prop;
         }
     }
     $data['props'] = $props;
     return API_Result::create()->ok()->data($data)->toArray();
 }