public function handle_request() { if ($this->_cityId == 0) { $this->setLog('city Id 为必须传的参数'); return; } if (!isset($this->_solrCityMapping[$this->_cityId])) { $this->setLog(sprintf('cityId[%d] 对应的solr配置不存在', $this->_cityId)); return; } $searchParams = array('__test__' => __CLASS__ . time(), 'fl' => 'id', 'q' => '*:*', 'rows' => 10000, 'wt' => 'json'); $fieldQuery = array('fq=' . urlencode('is_hp:1'), 'fq=' . urlencode(sprintf('city_id:%d', $this->_cityId))); $query = http_build_query($searchParams); $url = $this->getSolrUrl($this->_cityId) . '?' . $query . '&' . implode('&', $fieldQuery); $houseInSolrTemp = $this->httpRequest($url); if (empty($houseInSolrTemp)) { $this->setLog('在solr中的没有房源'); return; } foreach ($houseInSolrTemp as $house) { $houseId = $house['id']; $this->setLog(sprintf('开始处理房源[%d]', $houseId)); $housePlanning = Model_Plan_HzPlanning::getPropBidPlan($houseId, true); if (!empty($housePlanning)) { $ajkBrokerId = $housePlanning['ajkBrokerId']; $choicePlan = Model_Plan_HzPlanBasic::get_plan_by_id($housePlanning['plan_id'], true); $this->setLog(sprintf('房源[%d]的精选计划[%d]信息[bid_version=%d, status=%d]', $houseId, $housePlanning['plan_id'], $choicePlan['bid_version'], $choicePlan['status'])); if (!empty($choicePlan) && $choicePlan['bid_version'] == Const_HzPlan::BID_TYPE && $choicePlan['status'] == Const_HzPlan::SPREAD) { continue; } } else { $this->setLog(sprintf('没有获取到房源[%d]的计划关系信息', $houseId)); $propSearchInfo = Model_House_HzPropSearch::get_prop_by_prop_id($this->_cityId, $houseId); if (empty($propSearchInfo) || $propSearchInfo['ajkBrokerId'] == 0) { $this->setLog(sprintf('没有获取到房源[%d]的经纪人ID', $houseId)); continue; } $ajkBrokerId = $propSearchInfo['ajkBrokerId']; } $this->setLog(sprintf('需要下架房源 [%d - %d - %d]', $houseId, $ajkBrokerId, $this->_cityId)); // $res = Bll_Combo_NoticeSolrUpDown::noticeChoiceSolrZfAPI($this->_cityId, $ajkBrokerId, $houseId, 2, 2, Bll_Combo_NoticeSolrUpDown::HLSFromChoiceUpDown, time()); // $this->setLog('通知solr res: ' . json_encode($res)); } }
/** * 获取房源信息 * @param $proId * @param $cityId * @param int $cls 开关 1. 获取主表 2. 获取分表 3. 获取主和分表 * @return array */ public static function getPropInfo($proId, $cityId, $cls = 3) { $result = array(); $prop = array(); if (in_array($cls, array(1, 3))) { // 获取主表房源 $prop = Model_House_HzProp::getPropsByPropIds($proId); if (empty($prop)) { return Util_GlobalFunc::buildReturn(0, '该房源主表不存在'); } $prop = $prop[$proId]; } $searchProp = array(); if (in_array($cls, array(2, 3))) { // 获取分表 $searchProp = Model_House_HzPropSearch::get_prop_by_prop_id($cityId, $proId); if (empty($searchProp)) { return Util_GlobalFunc::buildReturn(0, '该房源分表不存在'); } } $result = array_merge($prop, $searchProp); return Util_GlobalFunc::buildReturn(1, $result); }
/** * 判断房源是否可以参加精选房源推广 * * @param $ajkBrokerId * @param $cityId * @param $propId * @return array */ public static function checkPropCanChoice($ajkBrokerId, $cityId, $propId) { $propSearch = Model_House_HzPropSearch::get_prop_by_prop_id($cityId, $propId); if (empty($propSearch)) { return self::buildReturn(Bll_Plan_Bid_Choice::BID_FAIL_OTHER, '房源不存在'); } /** 判断房源是否是当前经纪人的房源 */ if ($propSearch['ajkBrokerId'] != $ajkBrokerId) { return self::buildReturn(Bll_Plan_Bid_Choice::BID_FAIL_OTHER, '房源不存在(code:-10086)'); } /** 判断是否是精选开放城市 */ if (!Bll_City::isChoiceIndependentCity($cityId, Const_Site::HAOZU)) { /** 判断房源是否在套餐推广中 */ if (!Bll_Combo_HouseRelation::getOnlineRelationByHouseId($propId, Bll_Combo_HouseRelation::SITE_TYPE_HZ)) { return array('err_no' => Bll_Plan_Bid_Choice::BID_FAIL_OTHER, 'err_msg' => '房源必须套餐推广才能参与精选推广'); } } /** 判断房源是否多图 */ if ($propSearch['islabel'] == 0) { return self::buildReturn(Bll_Plan_Bid_Choice::BID_FAIL_QUALITY_OR_NEW, '多图、新发15天房源才能参与精选推广'); } /** 判断房源是否是在15天内发布的 */ if (date('ymd', strtotime('-16 days')) > date('Ymd', $propSearch['created'])) { return self::buildReturn(Bll_Plan_Bid_Choice::BID_FAIL_QUALITY_OR_NEW, '多图、新发15天房源才能参与精选推广'); } /** 判断房源是否已经在竞价计划中了 取master */ $propBidInfo = Model_Plan_HzPlanning::getPropBidPlan($propId, true); if (!empty($propBidInfo)) { $planBasic = Model_Plan_HzPlanBasic::get_plan_by_id($propBidInfo['plan_id'], true); if ($planBasic['bid_version'] == Const_HzPlan::BID_VERSION_CHOICE && in_array($planBasic['status'], array(Const_HzPlan::SPREAD, Const_HzPlan::WAITING))) { return self::buildReturn(Bll_Plan_Bid_Choice::BID_FAIL_OTHER, '该房源已经处于精选状态,请先删除'); } } return array('err_no' => 0, 'err_msg' => ''); }
public function handle_request() { //分表 $date = date('Ymd'); $id = 0; //获取游标 $dateFlag = $this->getFlag(); if (!empty($dateFlag)) { $date = $dateFlag['date']; $id = $dateFlag['id']; } //竞价队列数据获取 $ProLogList = Model_Log_HouseLogNew::getProLogList($date, $id, $this->limit); //判断当前队列是否处理完成 if (empty($ProLogList)) { //判断是否切换表 if ($date < date('Ymd')) { $date = date('Ymd', strtotime($date) + 24 * 3600); $id = 0; //记录表游标 $this->setFlag(array('date' => $date, 'id' => $id)); } //休息1秒钟 $this->setShCommonSleepTime(1); $this->setLog(date('Y-m-d H:i:s') . ' 处理完成'); exit; } //队列数据处理 foreach ($ProLogList as $list) { $id = $list['id']; $time = 0; //查询房源的发布时间 if ($list['siteType'] == 1) { //二手房 $ajkProInfo = Bll_House_EsfHouse::getHouseInfo($list['houseId'], $list['cityId']); if ($ajkProInfo->postDate) { $time = $ajkProInfo->postDate; } } elseif ($list['siteType'] == 2) { $hzProInfo = Model_House_HzPropSearch::get_prop_by_prop_id($list['cityId'], $list['houseId']); if ($hzProInfo['created']) { $time = $hzProInfo['created']; } } elseif ($list['siteType'] == 3) { $jpProInfo = Model_House_JpHouseIdx::getPropInfoByPk($list['houseId']); if ($jpProInfo['createTime']) { $time = strtotime($jpProInfo['createTime']); } } //写索引表 if (!empty($time)) { //查询数据是否存在 $ProLogIndex = Model_Log_HouseLogIndexNew::getProLogIndexByProId($list['houseId'], date('Ymd', strtotime($list['addDate'])), $list['siteType'], date('Ymd', $time)); if (!empty($ProLogIndex)) { //记录处理日志 $this->setLog(date('Y-m-d H:i:s') . ' id:' . $list['id'] . ' 城市id:' . $list['cityId'] . ' 经纪人:' . $list['brokerId'] . ' 房源:' . $list['houseId'] . ' 网站:' . $list['siteType'] . ' 房源创建时间:' . date('Y-m-d H:i:s', $time) . ' remark:索引已存在'); continue; } try { Model_Log_HouseLogIndexNew::create(array('proId' => $list['houseId'], 'datei' => date('Ymd', strtotime($list['addDate'])), 'siteType' => $list['siteType']), date('Ymd', $time))->save(); } catch (Exception $e) { print_r($e); } //记录处理日志 $this->setLog(date('Y-m-d H:i:s') . ' id:' . $list['id'] . ' 城市id:' . $list['cityId'] . ' 经纪人:' . $list['brokerId'] . ' 房源:' . $list['houseId'] . ' 网站:' . $list['siteType'] . ' 房源创建时间:' . date('Y-m-d H:i:s', $time) . ' remark:创建索引'); } else { //记录处理日志 $this->setLog(date('Y-m-d H:i:s') . ' id:' . $list['id'] . ' 城市id:' . $list['cityId'] . ' 经纪人:' . $list['brokerId'] . ' 房源:' . $list['houseId'] . ' 网站:' . $list['siteType'] . ' remark:未找到房源信息'); } } $this->setFlag(array('date' => $date, 'id' => $id)); //休息10毫秒 $this->setShCommonSleepTime(0.01); }
/** * 竞价计划状态,更新房源状态 * * @param $cityId * @param $propId */ public static function bidStatusChangeUpdatePropStatus($cityId, $propId) { $propSearchInfo = Model_House_HzPropSearch::get_prop_by_prop_id($cityId, $propId); if (empty($propSearchInfo)) { return; } $oldStatus = $propSearchInfo['status']; $fixPropPlan = Model_Plan_HzPlanning::getPropFixPlan($propId); $newStatus = Bll_Ppc_HzProp::mapPropStatus($fixPropPlan['is_valid']); Model_House_HzPropSearch::updatePropStatus($cityId, $propId, $newStatus); Bll_HzProp::updatePropStatus($propId, $newStatus); }
/** * 502 经纪人套餐生效 * * @param $queueInfo * @return array */ public static function comboEffect($queueInfo) { $dealRemark = array(); $currentCombo = Bll_Combo_Broker_BrokerComboInfo::getBrokerCurrentCombo($queueInfo['broker_id'], Bll_Combo_Broker_BrokerComboInfo::SITE_TYPE_AJK); $onlineHouseRelationList = Bll_Combo_HouseRelation::getOnlineHouseList($queueInfo['broker_id'], $queueInfo['city_id'], Bll_Combo_HouseRelation::SITE_TYPE_AJK); /** 当前没有生效的套餐,下掉所有的房子 */ if (empty($currentCombo)) { $dealRemark[] = sprintf('%d 经纪人当前[%s]没有生效的租售套餐', $queueInfo['id'], date('Y-m-d H:i:s')); $data = static::buildHouseLog($queueInfo, 21, '经纪人套餐生效,未获取到套餐信息房源下架', 0); if (!empty($onlineHouseRelationList)) { foreach ($onlineHouseRelationList as $onlineHouseRelation) { $data['houseId'] = $onlineHouseRelation['houseId']; if (!Model_Log_HouseLogNew::create($data, date('Ymd'))->save()) { $dealRemark[] = sprintf('%d 套餐生效,未获取到套餐信息,下掉房源(%d) 失败', $queueInfo['id'], $onlineHouseRelation['houseId']); continue; } $dealRemark[] = sprintf('%d 套餐生效,未获取到套餐信息,下掉房源(%d) 成功', $queueInfo['id'], $onlineHouseRelation['houseId']); } } return static::buildReturn(self::PROCESS_STATUS_SUCCESS, $dealRemark); } /** 添加打通的套餐的逻辑 */ if (Bll_Combo_Broker_BrokerComboInfo::isOpenUp($currentCombo)) { $dealRemark[] = '当前套餐为打通套餐'; $comboSpreadHouseCount = $currentCombo['salePropNum'] + $currentCombo['rentPropNum']; $hzHouseOnlineRelationList = Bll_Combo_HouseRelation::getOnlineHouseList($queueInfo['broker_id'], $queueInfo['city_id'], Bll_Combo_HouseRelation::SITE_TYPE_HZ); $spreadHouseCount = count($hzHouseOnlineRelationList) + count($onlineHouseRelationList); if ($spreadHouseCount >= $comboSpreadHouseCount) { $dealRemark[] = sprintf('%d 经纪人当前[%s]套餐,可推广房源数小于当前在线房源数,不处理。', $queueInfo['id'], date('Y-m-d H:i:s')); return static::buildReturn(self::PROCESS_STATUS_SUCCESS, $dealRemark); } /** 上架房源 */ $needSpreadHouseCount = $comboSpreadHouseCount - $spreadHouseCount; $hzExpiredHouseRelationList = Bll_Combo_HouseRelation::getHouseRelations($queueInfo['broker_id'], Bll_Combo_HouseRelation::SITE_TYPE_HZ, Model_Combo_HouseRelation::ENUM_COMBO_EXPIRE); $ajkExpiredHouseRelationList = Bll_Combo_HouseRelation::getHouseRelations($queueInfo['broker_id'], Bll_Combo_HouseRelation::SITE_TYPE_AJK, Model_Combo_HouseRelation::ENUM_COMBO_EXPIRE); $rangedHouseRelation = Bll_Combo_Updown_AjkDealJob::calculateRangeByCreated($ajkExpiredHouseRelationList, $hzExpiredHouseRelationList); /** 过滤无效房源 */ $validateHouseRelation = array(); foreach ($rangedHouseRelation as $houseRelation) { $houseId = $houseRelation['houseId']; if ($houseRelation['siteType'] == Bll_Combo_HouseRelation::SITE_TYPE_HZ) { $houseInfo = Model_House_HzPropSearch::get_prop_by_prop_id($queueInfo['city_id'], $houseId); if (empty($houseInfo)) { $dealRemark[] = sprintf('好租房源[%d]不存在', $houseId); continue; } if (in_array($houseInfo['status'], array(Const_HzStatus::VERIFY, Const_HzStatus::REMOVE, Const_HzStatus::EXPIRED))) { $dealRemark[] = sprintf('好租房源[%d]不是有效的房源', $houseId); continue; } $validateHouseRelation[] = $houseRelation; continue; } $houseInfo = Bll_House_EsfHouse::getHouseBaseInfoEx($houseId, $queueInfo['city_id']); if (empty($houseInfo)) { $dealRemark[] = sprintf('二手房房源[%d]不是有效的房源', $houseId); continue; } if ($houseInfo['isVisible'] == 0 && $houseInfo['expireWorker'] != 'propertyReport') { $dealRemark[] = sprintf('二手房房源(%d)违规,不做处理', $houseId); continue; } $validateHouseRelation[] = $houseRelation; } $houseUpRelationList = array_slice($validateHouseRelation, 0, $needSpreadHouseCount); $data = static::buildHouseLog($queueInfo, 20, '经纪人套餐生效,房源上架', 0); foreach ($houseUpRelationList as $onlineHouseRelation) { $site = $onlineHouseRelation['siteType'] == Bll_Combo_HouseRelation::SITE_TYPE_AJK ? '二手房' : '好租'; if (1 == Model_Combo_HouseRelation::updateHouseComboSpreadStateEx($queueInfo['broker_id'], $queueInfo['city_id'], $onlineHouseRelation['houseId'], Model_Combo_HouseRelation::ENUM_HOUSE_ONLINE, $onlineHouseRelation['siteType'])) { $dealRemark[] = sprintf('上架' . $site . '房源[%d]成功', $onlineHouseRelation['houseId']); } else { $dealRemark[] = sprintf('上架' . $site . '房源[%d]失败', $onlineHouseRelation['houseId']); } $data['houseId'] = $onlineHouseRelation['houseId']; $data['siteType'] = $onlineHouseRelation['siteType'] == Bll_Combo_HouseRelation::SITE_TYPE_AJK ? 1 : 2; if (!Model_Log_HouseLogNew::create($data, date('Ymd'))->save()) { $dealRemark[] = sprintf('%d 套餐生效,上架' . $site . '房源(%d) 失败', $queueInfo['id'], $onlineHouseRelation['houseId']); continue; } $dealRemark[] = sprintf('%d 套餐生效,上架' . $site . '房源(%d) 成功', $queueInfo['id'], $onlineHouseRelation['houseId']); } $dealRemark[] = sprintf('%d [%s] 经纪人套餐生效,上架%d套房源。', $queueInfo['id'], date('Y-m-d H:i:s'), $spreadHouseCount); return static::buildReturn(self::PROCESS_STATUS_SUCCESS, $dealRemark); } /** * 下掉超出限制的房源 */ if (count($onlineHouseRelationList) >= $currentCombo['salePropNum']) { $data = static::buildHouseLog($queueInfo, 21, '经纪人套餐生效,下掉多余房子', 0); $offLineHouseList = array_slice($onlineHouseRelationList, $currentCombo['salePropNum']); if (empty($offLineHouseList)) { return static::buildReturn(self::PROCESS_STATUS_SUCCESS, sprintf('%d [%s] 经纪人在线房源数已经达到套餐限制[%d]。', $queueInfo['id'], date('Y-m-d H:i:s'), $currentCombo['salePropNum'])); } foreach ($offLineHouseList as $offLineHouse) { $data['houseId'] = $offLineHouse['houseId']; if (!Model_Log_HouseLogNew::create($data, date('Ymd'))->save()) { $dealRemark[] = sprintf('%d 套餐生效,未获取到套餐信息,下掉房源(%d) 失败', $queueInfo['id'], $offLineHouse['houseId']); continue; } $dealRemark[] = sprintf('%d 套餐生效,未获取到套餐信息,下掉房源(%d) 成功', $queueInfo['id'], $offLineHouse['houseId']); } return static::buildReturn(self::PROCESS_STATUS_SUCCESS, $dealRemark); } $expiredHouseRelationList = Bll_Combo_HouseRelation::getHouseRelations($queueInfo['broker_id'], Bll_Combo_HouseRelation::SITE_TYPE_AJK, Model_Combo_HouseRelation::ENUM_COMBO_EXPIRE); if (empty($expiredHouseRelationList)) { return static::buildReturn(self::PROCESS_STATUS_SUCCESS, sprintf('%d [%s] 没有获取到经纪人因套餐到期而下架的房源。', $queueInfo['id'], date('Y-m-d H:i:s'))); } $expiredHouseRelationIds = array(); foreach ($expiredHouseRelationList as $expiredHouseRelation) { $expiredHouseRelationIds[] = $expiredHouseRelation['houseId']; } $houseInfoList = Bll_House_EsfHouse::getHouseInfoByHouseIdEx($queueInfo['broker_id'], $expiredHouseRelationIds, $queueInfo['city_id'], array('proId', 'expireWorker', 'isVisible')); if (empty($houseInfoList)) { return static::buildReturn(self::PROCESS_STATUS_SUCCESS, sprintf('%d [%s] 没有获取到房源(%s)信息。', $queueInfo['id'], date('Y-m-d H:i:s'), implode(',', $expiredHouseRelationIds))); } /** 过滤掉违规房源 */ $validateHouseIds = array(); foreach ($houseInfoList as $houseInfo) { if ($houseInfo['isVisible'] == 0 && $houseInfo['expireWorker'] != 'propertyReport') { $dealRemark[] = sprintf('房源(%d)违规,不做处理', $houseInfo['proId']); continue; } $validateHouseIds[] = $houseInfo['proId']; } /** 按照房源ID 排序 */ sort($validateHouseIds, SORT_NUMERIC); if (count($validateHouseIds) > $currentCombo['salePropNum']) { $onlineHouseIds = array_slice($validateHouseIds, count($validateHouseIds) - $currentCombo['salePropNum']); } else { $onlineHouseIds = $validateHouseIds; } $data = static::buildHouseLog($queueInfo, 20, '经纪人套餐生效,房源上架', 0); foreach ($onlineHouseIds as $onlineHouseId) { $data['houseId'] = $onlineHouseId; if (!Model_Log_HouseLogNew::create($data, date('Ymd'))->save()) { $dealRemark[] = sprintf('%d 套餐生效,上架房源(%d) 失败', $queueInfo['id'], $onlineHouseId); continue; } $dealRemark[] = sprintf('%d 套餐生效,上架房源(%d) 成功', $queueInfo['id'], $onlineHouseId); } $spreadHouseCount = Model_Combo_HouseRelation::updateHouseComboSpreadStateEx($queueInfo['broker_id'], $queueInfo['city_id'], $onlineHouseIds, Model_Combo_HouseRelation::ENUM_HOUSE_ONLINE, Bll_Combo_HouseRelation::SITE_TYPE_AJK); $dealRemark[] = sprintf('%d [%s] 经纪人套餐生效,上架%d套房源[%s]。', $queueInfo['id'], date('Y-m-d H:i:s'), $spreadHouseCount, implode(',', $onlineHouseIds)); return static::buildReturn(self::PROCESS_STATUS_SUCCESS, $dealRemark); }