public function handle_request() { $houseRelationList = $this->getComboSpreadHouseList(); foreach ($houseRelationList as $houseRelation) { $this->setCursor($houseRelation['id']); $this->logMsg(sprintf('处理房源[%d] %s', $houseRelation['houseId'], json_encode($houseRelation))); $houseRank = Model_Jinpu_HouseRank::getHouseRankById($houseRelation['houseId']); if (empty($houseRank)) { $this->logMsg(sprintf('房源[%d]没有获取到rank信息', $houseRelation['houseId'])); continue; } $rankUpdateTime = strtotime($houseRank['update_time']); $spreadTime = strtotime($houseRelation['updateTime']); /** 如果rank的更新时间 大于 房源做推广的时间,就通知solr更新房源信息 */ if ($rankUpdateTime >= $spreadTime) { $houseInfo = $this->getHouseInfo($houseRelation['houseId']); if (empty($houseInfo)) { $this->logMsg('获取房源[%d]信息失败', $houseRelation['houseId']); continue; } $this->logMsg(sprintf('房源信息 %s', json_encode($houseInfo))); if ($houseInfo['houseType'] < 1 || $houseInfo['houseType'] > 4) { $this->logMsg(sprintf('房源[%d]信息错误', $houseRelation['houseId'])); continue; } $requestId = date('Ymd', $rankUpdateTime) . $houseRelation['id']; $from = Bll_Combo_NoticeSolrUpDown::HLS_FROM_REPAIR_UPDATE_RANK_NOTIFY_SOLR; // $action = Bll_Combo_NoticeSolrUpDown::SOLR_ACTION_UP; // $result = Bll_Combo_NoticeSolrUpDown::noticeComboSolrJpAPI($houseRelation['cityId'], $houseRelation['brokerId'], $houseRelation['houseId'], $houseInfo['houseType'], $action, $from, $rankUpdateTime, $requestId); $result = Bll_Combo_NoticeSolrUpDown::noticeUpdateJpAPI($houseRelation['cityId'], $houseRelation['houseId'], $houseInfo['houseType'], $from, $rankUpdateTime, $requestId); if (is_array($result) && $result['status'] == 'ok') { $this->logMsg(sprintf('房源[%d]通知solr成功 %s', $houseRelation['houseId'], json_encode($result))); continue; } $this->logMsg(sprintf('房源[%d]通知solr失败 %s', $houseRelation['houseId'], json_encode($result))); } } if (count($houseRelationList) < self::BATCH_LIMIT) { file_put_contents($this->_doneFile, 'DONE'); } }
/** * 金铺-精选房源设置 * * @param int $ajkBrokerId * @param int $cityId * @param int $propId * @param array $params * * @return array */ public static function jp_setting($ajkBrokerId, $cityId, $propId, $params = array()) { //获取精选推广预算 $brokerInfo = Bll_BrokerBaseBll::get_instance()->get_broker_info($ajkBrokerId); $brokerCompanyId = $brokerInfo['BaseInfo']['COMPANYID']; $choiceSet = APF::get_instance()->get_config('choice_set'); if (isset($choiceSet[$brokerCompanyId]) && !empty($choiceSet[$brokerCompanyId])) { $pageAttribute['min_budget'] = $choiceSet[$brokerCompanyId]['jp']['JP_CHOICE_MIN_BUDGET']; $pageAttribute['max_budget'] = $choiceSet[$brokerCompanyId]['jp']['JP_CHOICE_MAX_BUDGET']; } else { $pageAttribute['min_budget'] = $choiceSet['default']['jp']['JP_CHOICE_MIN_BUDGET']; $pageAttribute['max_budget'] = $choiceSet['default']['jp']['JP_CHOICE_MAX_BUDGET']; } $jpBrokerInfo = Model_Broker_JpBroker::getJpBrokerInfoByAjkBrokerId($ajkBrokerId); //check房源是否已经加入精选推广 $bidObj = Model_Plan_Jp::getBidPlanByHouseIdEx($ajkBrokerId, $propId); if (!empty($bidObj)) { if ($bidObj['status'] == 2 || $bidObj['status'] == 6) { return array('err_no' => self::BID_HOUSE_ALREADY_IN_BID, 'err_msg' => '房源已经加入精选推广'); } elseif ($bidObj['status'] == 3) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '房源正在结算中,请稍后...'); } } $bidChoiceCount = Model_Plan_Jp::getBidChoiceInfoEx($cityId, $ajkBrokerId); $status = isset($bidObj['status']) ? $bidObj['status'] : 0; if (count($bidChoiceCount) >= self::ALL_JP_PLAN_NUM && $status != 4) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '精选推广房源已经超过' . self::ALL_JP_PLAN_NUM . '套'); } if (0 == $jpBrokerInfo) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '您不是金铺经纪人'); } /** 获取房源基本信息 */ $propInfo = Bll_House_JpHouseInfo::getHouseInfoById($propId); if (empty($propInfo)) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '房源不存在'); } /** 判断 e_house_rank 是否有记录没有则添加 */ try { Model_Jinpu_HouseRank::data_access()->find_by_pk($propId); } catch (Exception $e) { $houseRank = array(Model_Jinpu_HouseRank::ID => $propId, Model_Jinpu_HouseRank::FINAL_SCORE => 1, Model_Jinpu_HouseRank::STAGE => 1, Model_Jinpu_HouseRank::RANDOM_SCORE => 1, Model_Jinpu_HouseRank::SUB_STAGE => 1, Model_Jinpu_HouseRank::SOURCE => 0); Model_Jinpu_HouseRank::create($houseRank)->save(); } /** 判断是否是精选开放城市 */ if (!Bll_City::isChoiceIndependentCity($cityId, Const_Site::JINPU)) { /** 判断房源是否在套餐推广 */ $propCombos = Bll_Combo_HouseRelation::getOnlineRelationByHouseId($propId, Bll_Combo_HouseRelation::SITE_TYPE_JP); if (empty($propCombos)) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '房源必须在套餐推广才能参与精选'); } } if (false == $propInfo['info']['isExquisite']) { return array('err_no' => self::BID_FAIL_QUALITY_OR_NEW, 'err_msg' => '精品、新发15天房源才能参与精选推广', 'params' => array('site' => 'jp')); } $limitDay = intval(date('Ymd', strtotime('-15 days'))); $postDay = intval(date('Ymd', strtotime($propInfo['base']['createTime']))); if ($limitDay > $postDay) { return array('err_no' => self::BID_FAIL_QUALITY_OR_NEW, 'err_msg' => '精品、新发15天房源才能参与精选推广', 'params' => array('site' => 'jp')); } /** 获取板块信息 **/ $blockArr = Bll_House_JpHouseInfo::getBlock($propInfo['base']['houseType'], $propInfo['info']); if (!$blockArr['blockId'] || !$blockArr['districtId']) { return array('err_no' => self::BID_HOUSE_ALREADY_IN_BID, 'err_msg' => '请重新编辑房源,选择区域和板块'); } if (!$blockArr['blockId'] && !$blockArr['newBlockId']) { return array('err_no' => self::BID_HOUSE_ALREADY_IN_BID, 'err_msg' => '房源缺少板块信息'); } if (isset($blockArr['newName'])) { $blockName = $blockArr['newName']; } else { $blockName = $blockArr['name']; } $houseBaseObj = $propInfo['base']; $houseInfoObj = $propInfo['info']; $houseInfoArr = self::convertObjToArray($houseInfoObj); $houseInfoArr['floor_info'] = Bll_House_JpHouseInfo::getHouseFloorInfo($houseInfoArr, $houseBaseObj['houseType']); $houseInfoArr['property_name'] = Bll_House_JpHouseInfo::getHousePropertyName($houseInfoObj, $houseBaseObj['houseType']); $pageAttribute['community_name'] = $houseInfoArr['property_name']; $houseInfoArr['url'] = Uri_JPHouse::build_index($cityId, $houseBaseObj['houseType']) . $propId; $houseInfoArr['house_type'] = $houseBaseObj['houseType']; $houseInfoArr['price_info'] = Bll_House_JpHouseInfo::getHousePriceInfo($houseInfoArr, $houseBaseObj['houseType']); $pageAttribute['houseInfoArr'] = $houseInfoArr; $balance = self::get_broker_balance_by_broker_id($ajkBrokerId); $pageAttribute['balance'] = $balance; if ($balance > 0) { $balance = sprintf('%.2f', $balance / 100); } $pageAttribute['balance_fmt'] = $balance; //获取价格段 $housePrice = Bll_House_JpHouseInfo::getPrice($cityId, $houseBaseObj['houseType'], $houseInfoObj); $pageAttribute['price_title'] = $housePrice['price_name']; $priceId = 0; if (!empty($housePrice)) { $priceId = (int) $housePrice['price_id']; } //获取板块和商圈 $blockArr = Bll_House_JpHouseInfo::getBlock($houseBaseObj['houseType'], $houseInfoObj); $bucketInfo = Bll_Choice_JpBidBucket::getBucketInfo($blockArr['blockId'], $blockArr['newBlockId'], $houseBaseObj['houseType'], $priceId, $cityId); /** 获取点击单价开始 */ try { $apiParams = array('brokerId' => $ajkBrokerId, 'cityId' => $cityId, 'price' => $housePrice['price'] ?: 0, 'blockId' => $blockArr['blockId'] ?: 0, 'newBlockId' => $blockArr['newBlockId'] ?: 0, 'houseType' => $houseBaseObj['houseType']); $clickPrice = Bll_Service_Choice::jpClickPrice($apiParams); if ($clickPrice['status'] == 'error') { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '系统繁忙(code:-1000)'); } } catch (Exception $e) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '系统繁忙(code:-2000)'); } if ($clickPrice['realTradeAmount'] != $clickPrice['shouldTradeAmount']) { $pageAttribute['favorable'] = true; $pageAttribute['price'] = round($clickPrice['realTradeAmount'] / 100, 2); $pageAttribute['origin_price'] = round($clickPrice['shouldTradeAmount'] / 100, 2); $pageAttribute['favorable_end_time'] = $clickPrice['rebateEndTime']; } else { $pageAttribute['favorable'] = false; $pageAttribute['price'] = round($clickPrice['realTradeAmount'] / 100, 2); } /** 获取点击单价结束 */ $averageClickAndBudget = Bll_Choice_JpBidBucket::getBucketAverageClickBudget($blockArr['blockId'], $blockArr['newBlockId'], $houseBaseObj['houseType'], $priceId); if (!empty($averageClickAndBudget)) { $pageAttribute['averageClick'] = $averageClickAndBudget['averageClick']; $pageAttribute['averageBudget'] = $averageClickAndBudget['averageBudget'] / 100; } $pageAttribute['house_type'] = $houseBaseObj['houseType']; $pageAttribute['city_id'] = $cityId; $pageAttribute['price_id'] = $priceId; $pageAttribute['block_id'] = $blockArr['blockId']; $pageAttribute['new_block_id'] = $blockArr['newBlockId']; $pageAttribute['bucket_total'] = $bucketInfo['totalNum']; $pageAttribute['bucket_used'] = $bucketInfo['usedNum']; $pageAttribute['bucket_used_num'] = $bucketInfo['usedNum']; $pageAttribute['bucket_total_num'] = $bucketInfo['totalNum']; $pageAttribute['bucket_max_online_num'] = $bucketInfo['maxOnlineNum']; $pageAttribute['blockName'] = $blockName; return $pageAttribute; }
/** * @param $id * @return Model_HouseRank */ public static function get_house_rank($id) { $DHouseRank = null; $da = Model_Jinpu_HouseRank::data_access(); $DHouseRank = $da->find_by_pk($id, false); unset($da); return $DHouseRank; }