Пример #1
0
 /**
  * 修复b_bj_prop_search,b_sh_prop_search,b_four_prop_search,b_other_prop_search 4张表中的ajk_brokerid 为0的数据
  *
  * @param int $hzBrokerId
  * @param int $ajkBrokerId
  * @param int $cityId
  */
 private function repairPropSearch($hzBrokerId, $ajkBrokerId, $cityId)
 {
     $condition = array(array('userid', '=', $hzBrokerId), array('ajkBrokerId', '=', 0), array('created', '>', strtotime('-91 day')));
     $propList = Model_House_HzPropSearch::getPropLists($cityId, $condition);
     if (empty($propList)) {
         $this->setLog('没有获取到房源');
         return;
     }
     foreach ($propList as $propInfo) {
         $this->setLog(json_encode($propInfo));
         if ($propInfo['ajkBrokerId'] == 0) {
             $data = array('ajkBrokerId' => $ajkBrokerId);
             if (!Model_House_HzPropSearch::updateProp($cityId, $propInfo['proid'], $data)) {
                 $this->setLog(sprintf('更新房源[%d]的 ajkBrokerId=%d 失败', $propInfo['proid'], $ajkBrokerId));
             } else {
                 $this->setLog(sprintf('更新房源[%d]的 ajkBrokerId=%d 成功', $propInfo['proid'], $ajkBrokerId));
             }
             continue;
         }
         if ($propInfo['ajkBrokerId'] != $ajkBrokerId) {
             $this->setLog(sprintf('房源[%d]的ajkBrokerId[%d],不一致[%d]', $propInfo['proid'], $propInfo['ajkBrokerId'], $ajkBrokerId));
         } else {
             $this->setLog(sprintf('房源[%d]的ajkBrokerId[%d],无需修复', $propInfo['proid'], $propInfo['ajkBrokerId']));
         }
     }
 }
Пример #2
0
 /**
  * Job执行逻辑
  */
 public function handle_request()
 {
     printf('[%s] lastLogId: %s' . PHP_EOL, date('Y-m-d H:i:s'), $this->lastLogId);
     // 获取任务 获取状态为4的房子
     // 2014-09-01上的新套餐。 从这个时间往后取即可
     $params = array(array('proid', '>', $this->lastLogId), array('updated', '>=', strtotime('2014-09-01 00:00:00')), array('status', 'in', array(Const_HzStatus::OFFLINE)));
     $tasks = Model_House_HzPropSearch::getPropLists($this->getCityIdByTable(), $params, $this->limit);
     if ($tasks === false) {
         printf('[%s] remark: %s' . PHP_EOL, date('Y-m-d H:i:s'), '获取数据失败');
         exit;
     }
     if (empty($tasks)) {
         // 任务完成
         printf('[%s] remark: %s' . PHP_EOL, date('Y-m-d H:i:s'), '任务执行完成');
         $this->setStop();
         $this->setShStopFlag();
         $this->setFlag(array_merge($this->getFlag(), array('lastLogId' . $this->table => $this->lastLogId)));
         exit;
     }
     // 循环任务处理
     foreach ($tasks as $task) {
         $this->dealTask($task);
         $this->lastLogId = $task['proid'];
     }
     //记录游标
     $this->setFlag(array_merge($this->getFlag(), array('lastLogId' . $this->table => $this->lastLogId)));
 }
Пример #3
0
 /**
  * Job执行逻辑
  */
 public function handle_request()
 {
     printf('[%s] lastLogId: %s' . PHP_EOL, date('Y-m-d H:i:s'), $this->lastLogId);
     $expriedTime = strtotime(date("Ymd")) - Const_HzStatus::PROP_EXPIRED * 86400;
     // 获取任务 获取过期没有处理的房源
     $params = array(array('proid', '>', $this->lastLogId), array('created', '<=', $expriedTime), array('status', '<>', Const_HzStatus::REMOVE), array('status', '<>', Const_HzStatus::EXPIRED));
     $tasks = Model_House_HzPropSearch::getPropLists($this->getCityIdByTable(), $params, $this->limit);
     if ($tasks === false) {
         printf('[%s] remark: %s' . PHP_EOL, date('Y-m-d H:i:s'), '获取数据失败');
         exit;
     }
     if (empty($tasks)) {
         // 任务完成
         printf('[%s] remark: %s' . PHP_EOL, date('Y-m-d H:i:s'), '任务执行完成');
         $this->setStop();
         $this->setShStopFlag();
         $this->setFlag(array_merge($this->getFlag(), array('lastLogId' . $this->table => $this->lastLogId)));
         exit;
     }
     // 循环任务处理
     foreach ($tasks as $task) {
         $this->dealTask($task);
         $this->lastLogId = $task['proid'];
     }
     //记录游标
     $this->setFlag(array_merge($this->getFlag(), array('lastLogId' . $this->table => $this->lastLogId)));
 }
 public function handle_request()
 {
     $dealStatus = array(Const_HzStatus::VERIFY, Const_HzStatus::REMOVE, Const_HzStatus::EXPIRED);
     $condition = array(array('proid', '>', $this->_startId), array('updated', '>=', strtotime($this->_startTime)), array('updated', '<=', strtotime($this->_endTime)));
     $houseList = Model_House_HzPropSearch::getPropLists($this->_cityId, $condition, self::BATCH_LIMIT);
     foreach ($houseList as $houseInfo) {
         $houseId = $houseInfo['proid'];
         $this->setFlag(array('id' => $houseId, 'time' => date('Y-m-d H:i:s')));
         if (!in_array($houseInfo['status'], $dealStatus)) {
             $this->setLog(sprintf('房源[%d]房源状态[%d]不在[%s]不处理', $houseId, $houseInfo['status'], implode(',', $dealStatus)));
             continue;
         }
         $houseRelation = Bll_Combo_HouseRelation::getRelationByHouseId($houseId, Bll_Combo_HouseRelation::SITE_TYPE_HZ);
         if (empty($houseRelation)) {
             $this->setLog(sprintf('房源[%d - %d],没有获取到套餐关系', $houseId, $houseInfo['status']));
             continue;
         }
         /** 如果房源关系已经不是在线的,就不修复 */
         if (false == Bll_Combo_HouseRelation::isRelationOnline($houseRelation['state'])) {
             $this->setLog(sprintf('房源[%d - %d],已经不在线,不处理', $houseId, $houseRelation['state']));
             continue;
         }
         switch ($houseInfo['status']) {
             case Const_HzStatus::VERIFY:
                 $relationState = Model_Combo_HouseRelation::ENUM_HOUSE_ILLEGAL;
                 break;
             case Const_HzStatus::REMOVE:
                 $relationState = Model_Combo_HouseRelation::ENUM_HOUSE_DELETE;
                 break;
             case Const_HzStatus::EXPIRED:
                 $relationState = Model_Combo_HouseRelation::ENUM_HOUSE_EXPIRE;
                 break;
             default:
                 $relationState = Model_Combo_HouseRelation::ENUM_HOUSE_DELETE;
                 continue;
         }
         /** 修正房源套餐推广关系 */
         if (1 == Bll_Combo_HouseRelation::updateComboStatusById($houseRelation['id'], $relationState, Bll_Combo_HouseRelation::SITE_TYPE_HZ)) {
             $this->setLog(sprintf('房源[%d - %d],套餐推广关系[%d-%d]修复成功', $houseId, $houseInfo['status'], $houseRelation['id'], $houseRelation['state']));
         } else {
             $this->setLog(sprintf('房源[%d - %d],套餐推广关系[%d-%d]修复失败', $houseId, $houseInfo['status'], $houseRelation['id'], $houseRelation['state']));
         }
         $this->noticeComboSolr($houseInfo['cityid'], $houseInfo['userid'], $houseId);
     }
     if (count($houseList) < self::BATCH_LIMIT) {
         $this->setLog(sprintf('[%d - %d]已经处理完成...', $this->_cityId, $this->_startId));
         $this->setShStopFlag();
         $this->removeFlag();
     } else {
         $this->setShCommonSleepTime(1);
     }
 }
Пример #5
0
 /**
  * Job执行逻辑
  */
 public function handle_request()
 {
     printf('[%s] lastLogId: %s' . PHP_EOL, date('Y-m-d H:i:s'), $this->lastLogId);
     // 获取任务 获取在线房源
     $params = array(array('status', '=', Const_HzStatus::ONLINE), array('proid', '>', $this->lastLogId));
     $tasks = Model_House_HzPropSearch::getPropLists($this->getCityIdByTable(), $params, $this->limit);
     if ($tasks === false) {
         printf('[%s] remark: %s' . PHP_EOL, date('Y-m-d H:i:s'), '获取数据失败');
         exit;
     }
     if (empty($tasks)) {
         // 任务完成
         printf('[%s] remark: %s' . PHP_EOL, date('Y-m-d H:i:s'), '任务执行完成');
         $this->setStop();
         $this->setShStopFlag();
         $this->setFlag(array_merge($this->getFlag(), array('lastLogId' . $this->table => 0)));
         exit;
     }
     $cityIdProIds = array();
     $solrProIdsTmp = array();
     $solrProIds = array();
     foreach ($tasks as $task) {
         $cityIdProIds[$task['cityid']][] = $task['proid'];
     }
     foreach ($cityIdProIds as $cityId => $proIds) {
         // 获取solr
         $solrs = Util_SearchUtil::getHzPropsFromSolr($cityId, $proIds, $this->limit);
         if (!empty($solrs)) {
             $solrProIdsTmp[] = array_merge($solrProIdsTmp, $solrs);
         }
     }
     // 扁平处理
     if (!empty($solrProIdsTmp)) {
         foreach ($solrProIdsTmp as $items) {
             foreach ($items as $item) {
                 $solrProIds[] = $item['id'];
             }
         }
     }
     // 循环处理任务
     foreach ($tasks as $task) {
         $this->dealTask($task, $solrProIds);
         $this->lastLogId = $task['proid'];
     }
     //记录游标
     $this->setFlag(array_merge($this->getFlag(), array('lastLogId' . $this->table => $this->lastLogId)));
     /*
     if (!empty($this->errorPropIds))
         Bll_House_UpDown_Worker_MailBll::getInstance()->setSubject('检查房源在线 solr却不在线')->send(array('message' => json_encode(array('error proids' => $this->errorPropIds))));
     */
 }
Пример #6
0
 public function handle_request()
 {
     $condition = array(array('proid', '>', $this->_startId), array('cityid', '=', $this->_cityId), array('created', '<', $this->_expireTime), array('status', '<>', Const_HzStatus::EXPIRED), array('status', '<>', Const_HzStatus::REMOVE));
     $houseList = Model_House_HzPropSearch::getPropLists($this->_cityId, $condition, self::BATCH_LIMIT);
     if (empty($houseList)) {
         $this->setShStopFlag();
         $this->setLog('处理完成');
         return;
     }
     foreach ($houseList as $house) {
         $houseId = $house['proid'];
         $this->setLog(sprintf('开始处理房源[%d], 房源发布时间[%s]: %s', $houseId, date('Y-m-d H:i:s', $house['created']), json_encode($house)));
         $this->setFlag(array('id' => $houseId), $this->_cursorFile);
         if (1 != Model_House_HzPropSearch::updatePropStatus($this->_cityId, $houseId, Const_HzStatus::EXPIRED)) {
             $this->setLog(sprintf('房源[%d]更新房源状态失败', $houseId));
             continue;
         }
         $comboHouseRelation = Bll_Combo_HouseRelation::getRelationByHouseId($houseId, Bll_Combo_HouseRelation::SITE_TYPE_HZ, false);
         if (empty($comboHouseRelation)) {
             $this->setLog(sprintf('房源[%d]没有获取到套餐推广关系', $houseId));
             continue;
         }
         $this->setLog(sprintf('房源[%d]套餐推广关系: %s', $houseId, json_encode($comboHouseRelation)));
         if (!Bll_Combo_HouseRelation::isRelationOnline($comboHouseRelation['state'])) {
             $this->setLog(sprintf('房源[%d]套餐推广状态不在线[%d]', $houseId, $comboHouseRelation['state']));
             continue;
         }
         $this->setLog(sprintf('房源[%d]套餐推广状态在线[%d]', $houseId, $comboHouseRelation['state']));
         if (1 != Bll_Combo_HouseRelation::updateComboStatusById($comboHouseRelation['id'], Model_Combo_HouseRelation::ENUM_COMBO_EXPIRE, Bll_Combo_HouseRelation::SITE_TYPE_HZ)) {
             $this->setLog(sprintf('更新房源[%d]套餐关系[%d : %d -> %d]失败', $houseId, $comboHouseRelation['id'], $comboHouseRelation['state'], Model_Combo_HouseRelation::ENUM_COMBO_EXPIRE));
             continue;
         }
         $this->setLog(sprintf('更新房源[%d]套餐关系[%d : %d -> %d]成功', $houseId, $comboHouseRelation['id'], $comboHouseRelation['state'], Model_Combo_HouseRelation::ENUM_COMBO_EXPIRE));
         $this->noticeComboSolr($this->_cityId, $house['userid'], $houseId, $comboHouseRelation['brokerId']);
     }
     if (count($houseList) < self::BATCH_LIMIT) {
         $this->setShStopFlag();
     }
 }
Пример #7
0
 /**
  * 好租小区信息变更写房源日志(批量)
  *
  * @param array $queueInfo
  * @return array
  */
 public static function hzCommunityInfoChangeEx($queueInfo)
 {
     if (!isset($queueInfo) || empty($queueInfo)) {
         return static::buildReturn(self::PROCESS_STATUS_ERROR, '小区信息变更,remark的值为空');
     }
     $communityChangeInfo = json_decode($queueInfo['remark'], true);
     if (!is_array($communityChangeInfo)) {
         return static::buildReturn(self::PROCESS_STATUS_ERROR, '小区信息变更,remark的值不是JSON');
     }
     $startHouseId = 0;
     $houseLogWriteError = array();
     do {
         $condition = array(array('proid', '>', $startHouseId), array('cityid', '=', $communityChangeInfo['cityId']), array('commid', '=', $communityChangeInfo['commId']), array('status', '<>', Const_HzStatus::EXPIRED), array('status', '<>', Const_HzStatus::REMOVE));
         $houseList = Model_House_HzPropSearch::getPropLists($communityChangeInfo['cityId'], $condition, 100);
         if (empty($houseList)) {
             break;
         }
         foreach ($houseList as $houseInfo) {
             $startHouseId = $houseInfo['proid'];
             $data = array();
             $data['houseId'] = $houseInfo['proid'];
             $data['planId'] = 0;
             $data['brokerId'] = $houseInfo['ajkBrokerId'];
             $data['cityId'] = $queueInfo['city_id'];
             $data['type'] = Model_Log_HouseLogNew::TYPE_COMMUNITY_INFO_CHANGE;
             $data['changeType'] = $queueInfo['type'];
             $data['remark'] = '小区信息变更';
             $data['addDate'] = date('Y-m-d H:i:s');
             $data['operatorId'] = 0;
             $data['siteType'] = 2;
             if (!Model_Log_HouseLogNew::create($data, date('Ymd'))->save()) {
                 $houseLogWriteError[] = $houseInfo['proid'];
             }
         }
         if (count($houseList) < 100) {
             break;
         }
     } while (true);
     return static::buildReturn(self::PROCESS_STATUS_SUCCESS, sprintf('小区信息变更,房源日志写入失败的房源Id[%s]', implode(',', $houseLogWriteError)));
 }
Пример #8
0
 /**
  * 获取套餐房源的累计点击量
  * @param int $ajkBrokerId
  * @param array|int $houseIds
  * @param int $cityId
  * @return array
  */
 public static function getComboHouseAccumulateClick($ajkBrokerId, $houseIds, $cityId)
 {
     $noCacheHouseIds = is_array($houseIds) ? $houseIds : array($houseIds);
     $cache = APF_Cache_Factory::get_instance()->get_memcache();
     $cacheKey = sprintf('combo_accumulate_house_click_hz_1_%d', $ajkBrokerId);
     $cacheHouseAccumulateClickList = $cache->get($cacheKey);
     if (is_array($cacheHouseAccumulateClickList) && !empty($cacheHouseAccumulateClickList)) {
         $houseAccumulateClickList = $cacheHouseAccumulateClickList;
         $cacheHouseIds = array_keys($cacheHouseAccumulateClickList);
         $noCacheHouseIds = array_diff($noCacheHouseIds, $cacheHouseIds);
     } else {
         $houseAccumulateClickList = array_fill_keys($noCacheHouseIds, 0);
     }
     if (count($noCacheHouseIds) == 0) {
         return $houseAccumulateClickList;
     }
     foreach ($noCacheHouseIds as $noCacheHouseId) {
         $houseAccumulateClickList[$noCacheHouseId] = 0;
     }
     $houseIds = $noCacheHouseIds;
     // 获取房源的发布时间
     $houseBaseInfoList = Model_House_HzPropSearch::getPropLists($cityId, array(array('proid', 'in', $houseIds)));
     if (empty($houseBaseInfoList)) {
         return $houseAccumulateClickList;
     }
     // 根据房源的发布时间获取房源累计点击量的分表后缀
     $splitSuffixes = array();
     foreach ($houseBaseInfoList as $houseBaseInfo) {
         $splitSuffix = date('Ym', $houseBaseInfo['created']);
         if (!isset($splitSuffixes[$splitSuffix])) {
             $splitSuffixes[$splitSuffix] = array();
         }
         $splitSuffixes[$splitSuffix][] = $houseBaseInfo['proid'];
     }
     if (empty($splitSuffixes)) {
         return $houseAccumulateClickList;
     }
     /**
      * 获取房源的累计点击量
      */
     $result = array();
     foreach ($splitSuffixes as $splitSuffix => $houseIdList) {
         $houseClickInfoList = Model_Broker_ComboPropClickAccumulate::getHouseClickInfo($houseIdList, Model_Broker_ComboPropClickAccumulate::SITE_TYPE_HZ, $splitSuffix);
         $result = array_merge($result, $houseClickInfoList);
     }
     if (empty($result)) {
         return $houseAccumulateClickList;
     }
     /**
      * 生成房源累计点击量信息
      */
     foreach ($result as $houseAccumulateClickInfo) {
         $houseId = $houseAccumulateClickInfo['propId'];
         $houseAccumulateClickList[$houseId] = $houseAccumulateClickInfo['vppvAccumulate'];
     }
     $cache->set($cacheKey, $houseAccumulateClickList, 0, 7200);
     return $houseAccumulateClickList;
 }
Пример #9
0
 /**
  * 组装未推广列表 取出所有-有效定价房源
  * @param $out
  * @return array
  */
 private static function prepareOutList(&$out)
 {
     $outList = array();
     $outPropIds = array();
     $fixProIds = array_keys($out['props']);
     // 取出经纪人所有非删除房源 (分表)
     $allSearchProps = Model_House_HzPropSearch::getPropLists($out['cityId'], array(array('ajkBrokerId', '=', $out['ajkBrokerId']), array('status', '<>', Const_HzStatus::DELETE), array('status', '<>', Const_HzStatus::OFFLINE), array('status', '<>', Const_HzStatus::OUTPORT), array('status', '<>', Const_HzStatus::HIBERNATE), array('status', '<>', Const_HzStatus::REMOVE), array('status', '<>', Const_HzStatus::EXPIRED)), 1000, array('created', 'desc'));
     if (empty($allSearchProps)) {
         return array();
     }
     // 获取城市价格段
     $allPrices = Model_House_HzPriceChoice::getAllPriceByCityId($out['cityId']);
     $out['getQualityProIds'] = array();
     foreach ($allSearchProps as $allSearchProp) {
         $proId = $allSearchProp['proid'];
         $out['getQualityProIds'][] = $proId;
         // 过滤非删除状态定价
         if (in_array($proId, $fixProIds)) {
             continue;
         }
         $outList[$proId] = $allSearchProp;
         // 获取剩余时间
         $outList[$proId]['leftDays'] = Bll_House_HzHouse::getLeftDays($allSearchProp['created']);
         $outPropIds[] = $proId;
     }
     // 获取改经纪人所有房源质量
     $out['propsQuality'] = Model_Stats_HzPropQuality::getPropsquality($out['getQualityProIds']);
     // 获取如是违规房源 拼接违规原因
     $outList = Bll_HzProp::checkAndGetPropsIllegalInfos($outList);
     // 批量获取主表信息
     if (empty($outPropIds)) {
         return array();
     }
     $props = Model_House_HzProp::getPropsByPropIds($outPropIds);
     if (!$props) {
         return array();
     }
     // 房源主分表信息合并
     foreach ($outList as $proId => $outProp) {
         $outList[$proId] = array_merge($outList[$proId], $props[$proId]);
         // 计算点击价格
         if (!empty($allPrices)) {
             foreach ($allPrices as $priceInfo) {
                 if ($priceInfo['lower'] < $outList[$proId]['pricenum'] && $priceInfo['upper'] >= $outList[$proId]['pricenum']) {
                     $outList[$proId]['unitPrice'] = $priceInfo['price'];
                     break;
                 }
             }
         }
     }
     return $outList;
 }