public function handle_request() { $dealCityList = $this->getOption('city', array()); if (!is_array($dealCityList)) { $dealCityList = explode(',', $dealCityList); } if (empty($dealCityList)) { $this->logMsg('请传需要处理城市ID'); file_put_contents($this->_doneFile, 'YES'); return; } file_put_contents($this->_doneFile, 'NO'); $brokerList = $this->getBrokerList($dealCityList, $this->_startId); if (empty($brokerList)) { $this->logMsg(sprintf('startId: %d 没有获取到经纪人。', $this->_startId)); file_put_contents($this->_doneFile, 'YES'); return; } foreach ($brokerList as $broker) { $brokerId = $broker['brokerId']; $cityId = $broker['cityId']; $this->logMsg(sprintf('开始处理城市 %d 经纪人 %d', $cityId, $brokerId)); $houseList = Bll_House_EsfHouse::getBrokerAllPropInfoList($brokerId, $cityId); $houseIds = array(); foreach ($houseList as $house) { $houseIds[] = $house['proId']; } $this->logMsg(sprintf('经纪人 %d 共有 %d 套房源[%s]', $brokerId, count($houseIds), implode(',', $houseIds))); $spreadHouseList = Bll_Combo_HouseRelation::getOnlineHouseList($brokerId, $cityId, Bll_Combo_HouseRelation::SITE_TYPE_AJK); $spreadHouseIds = array(); foreach ($spreadHouseList as $spreadHouse) { $spreadHouseIds[] = $spreadHouse['houseId']; } $this->logMsg(sprintf('经纪人 %d 共有推广 %d 套房源[%s]', $brokerId, count($spreadHouseIds), implode(',', $spreadHouseIds))); $houseIds = array_diff($houseIds, $spreadHouseIds); $this->logMsg(sprintf('经纪人 %d 需要下掉 %d 套房源[%s]', $brokerId, count($houseIds), implode(',', $houseIds))); foreach ($houseIds as $houseId) { /** 通知用户端下架房源 */ $apiResponse = Bll_Combo_NoticeSolrUpDown::noticeComboSolrAjkAPI($cityId, $brokerId, $houseId, Bll_Combo_NoticeSolrUpDown::SOLR_ACTION_DOWN); if ($apiResponse['status'] == 'ok') { $this->logMsg(sprintf('房源[%d] 通知下架成功', $houseId)); } else { $this->logMsg(sprintf('房源[%d] 通知下架失败, apiResponse:%s', $houseId, json_encode($apiResponse))); } } $this->setCursor($brokerId); } if (count($brokerList) < self::BROKER_LIMIT) { $this->logMsg(sprintf('startId: %d 经纪人已经处理完成', $this->_startId)); file_put_contents($this->_doneFile, 'YES'); } }
public function handle_request() { $cityIds = $this->getOption('city', array()); if (empty($cityIds)) { $this->logMsg('Usage: launcher.php Combo_AjkCheckHouseIsValidate --cityId=... [--release=...] '); return; } $cityIdList = explode(',', $cityIds); $dealCityIdList = array(); foreach ($cityIdList as $cityId) { if (false == Bll_City::isComboCity($cityId)) { $this->logMsg(sprintf('城市:%d 不是套餐城市,不予处理。', $cityId)); continue; } $dealCityIdList[] = $cityId; } $this->logMsg(sprintf('开始处理城市[%s]........', implode(',', $dealCityIdList))); $brokerList = Bll_Broker::scanComboBrokerByCityId($dealCityIdList, $this->_startId, self::BROKER_LIMIT); if (empty($brokerList)) { $this->logMsg(sprintf('startId: %d 没有获取到经纪人。', $this->_startId)); file_put_contents($this->_doneFile, 'YES'); return; } foreach ($brokerList as $broker) { $this->setCursor($broker['brokerId']); $onlineHouseRelationList = Bll_Combo_HouseRelation::getOnlineHouseList($broker['brokerId'], $broker['cityId'], Bll_Combo_HouseRelation::SITE_TYPE_AJK); /** 经纪人没有在线房源 */ if (empty($onlineHouseRelationList)) { $this->logMsg(sprintf('经纪人[%d]没有在线房源', $broker['brokerId'])); continue; } /** 获取在线房源ID */ $onlineHouseList = array(); foreach ($onlineHouseRelationList as $onlineHouseRelation) { $onlineHouseList[] = $onlineHouseRelation['houseId']; } $houseList = static::getInvalidateHouse($broker['cityId'], $broker['brokerId'], $onlineHouseList); /** 没有获取无效的房源信息 */ if (empty($houseList)) { $this->logMsg(sprintf('经纪人[%d]没有获取无效的房源[%s]信息', $broker['brokerId'], implode(',', $onlineHouseList))); continue; } foreach ($houseList as $house) { $this->logMsg(sprintf('房源[%d] brokerId=%d operateState=%d isVisible=%d expireWorker=%s updatedDatetime=%s', $house['proId'], $house['brokerId'], $house['operateState'], $house['isVisible'], $house['expireWorker'], $house['updatedDatetime'])); $effectRowCount = Bll_Combo_HouseRelation::updateHouseComboSpreadState($house['brokerId'], $house['proId'], Bll_Combo_HouseRelation::SITE_TYPE_AJK, Model_Combo_HouseRelation::ENUM_HOUSE_DELETE); if ($effectRowCount != 1) { $this->logMsg(sprintf('房源[%d] 更新关系失败', $house['proId'])); continue; } /** 通知用户端下架房源 */ $apiResponse = Bll_Combo_NoticeSolrUpDown::noticeComboSolrAjkAPI($broker['cityId'], $house['brokerId'], $house['proId'], Bll_Combo_NoticeSolrUpDown::SOLR_ACTION_DOWN); if ($apiResponse['status'] == 'ok') { $this->logMsg(sprintf('房源[%d] 通知下架成功', $house['proId'])); } else { $this->logMsg(sprintf('房源[%d] 通知下架失败, apiResponse:%s', $house['proId'], json_encode($apiResponse))); } } } if (count($brokerList) < self::BROKER_LIMIT) { $this->logMsg(sprintf('startId: %d 经纪人已经处理完成', $this->_startId)); file_put_contents($this->_doneFile, 'YES'); } }
/** * 503 套餐到期 * 1. 获取经纪人当前的套餐信息 * 2. 如果经纪人没有套餐 * 1. 下掉经纪人所有的的套餐房源&竞价计划 * 3. 判断经纪人当前在线的房源数和经纪人当前生效的套餐能够推广的房源数 * 1. 如果当前推广的房源数 大于 套餐可以推广的房源数,把多余的房子下掉(按房源发布时间 倒序排列) * * @param $queueInfo * @return array */ public static function comboExpire($queueInfo) { $houseOnlineRelationList = Bll_Combo_HouseRelation::getOnlineHouseList($queueInfo['broker_id'], $queueInfo['city_id'], Bll_Combo_HouseRelation::SITE_TYPE_AJK); $currentCombo = Bll_Combo_Broker_BrokerComboInfo::getBrokerCurrentCombo($queueInfo['broker_id'], Bll_Combo_Broker_BrokerComboInfo::SITE_TYPE_AJK); /** 添加打通的套餐的逻辑 */ if (!empty($currentCombo) && Bll_Combo_Broker_BrokerComboInfo::isOpenUp($currentCombo)) { $dealRemark = array('当前套餐为打通套餐'); $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($houseOnlineRelationList); if ($spreadHouseCount <= $comboSpreadHouseCount) { $dealRemark[] = sprintf('%d 经纪人当前[%s]套餐,可推广房源数大于当前在线房源数,不处理。', $queueInfo['id'], date('Y-m-d H:i:s')); return static::buildReturn(self::PROCESS_STATUS_SUCCESS, $dealRemark); } $rangedHouseRelation = Bll_Combo_Updown_AjkDealJob::calculateRangeByCreated($houseOnlineRelationList, $hzHouseOnlineRelationList); $offLineHouseOnlineRelationList = array_slice($rangedHouseRelation, $comboSpreadHouseCount); $fail = array(); $success = array(); foreach ($offLineHouseOnlineRelationList as $offLineHouseOnlineRelation) { $offLineHouseId = $offLineHouseOnlineRelation['houseId']; $siteType = $offLineHouseOnlineRelation['siteType']; $logRemark = static::offLineHouse($queueInfo, array($offLineHouseId), '经纪人套餐到期下架房源', 0); $dealRemark = array_merge($dealRemark, $logRemark); if (1 == Bll_Combo_HouseRelation::updateHouseComboSpreadState($queueInfo['broker_id'], array($offLineHouseId), $siteType, Model_Combo_HouseRelation::ENUM_COMBO_EXPIRE)) { $success[] = $offLineHouseId; } else { $fail[] = $offLineHouseId; } } if (!empty($fail)) { $dealRemark[] = sprintf('下掉经纪人超出房源(%s)失败', implode(', ', $fail)); } if (!empty($success)) { $dealRemark[] = sprintf('下掉经纪人超出房源(%s)成功', implode(', ', $success)); } return static::buildReturn(self::PROCESS_STATUS_SUCCESS, $dealRemark); } if (empty($houseOnlineRelationList)) { return static::buildReturn(self::PROCESS_STATUS_SUCCESS, '经纪人没有在线房源,不处理。'); } $onlineHouseIds = array(); foreach ($houseOnlineRelationList as $houseOnlineRelation) { $onlineHouseIds[] = $houseOnlineRelation['houseId']; } /** 当前没有生效的套餐,下掉所有的房子 */ if (empty($currentCombo)) { $dealRemark = static::offLineHouse($queueInfo, $onlineHouseIds, '经纪人套餐到期下架房源', 0); if (!Bll_Combo_HouseRelation::expiredBrokerCombo($queueInfo['broker_id'], $queueInfo['city_id'], Bll_Combo_HouseRelation::SITE_TYPE_AJK)) { $dealRemark[] = sprintf('修改经纪人在线房源(%s)套餐关系状态为过期失败', implode(', ', $onlineHouseIds)); } else { $dealRemark[] = sprintf('修改经纪人在线房源(%s)套餐关系状态为过期成功', implode(', ', $onlineHouseIds)); } $dealRemark[] = sprintf('%d 经纪人当前[%s]没有生效的租售套餐,下架房源[ %s ]', $queueInfo['id'], date('Y-m-d H:i:s'), implode(',', $onlineHouseIds)); return static::buildReturn(self::PROCESS_STATUS_SUCCESS, $dealRemark); } /** * 当前经纪人的套餐可推广房源数,大于当前在线房源,不处理。 */ if ($currentCombo['salePropNum'] >= count($onlineHouseIds)) { return static::buildReturn(self::PROCESS_STATUS_SUCCESS, sprintf('%d 经纪人当前[%s]租售套餐,可推广房源数,大于当前在线房源数,不处理。(%s)', $queueInfo['id'], date('Y-m-d H:i:s'), implode(', ', $onlineHouseIds))); } /** * 当前经纪人套餐可推广房源数小于推广中的房源,下掉多余的房源。 */ $offLineHouseIds = array_slice($onlineHouseIds, $currentCombo['salePropNum']); $dealRemark = static::offLineHouse($queueInfo, $offLineHouseIds, '经纪人套餐到期下架房源', 0); if (count($offLineHouseIds) != Bll_Combo_HouseRelation::updateHouseComboSpreadState($queueInfo['broker_id'], $offLineHouseIds, Bll_Combo_HouseRelation::SITE_TYPE_AJK, Model_Combo_HouseRelation::ENUM_COMBO_EXPIRE)) { $dealRemark[] = sprintf('下掉经纪人超出房源(%s)失败', implode(', ', $offLineHouseIds)); } else { $dealRemark[] = sprintf('下掉经纪人超出房源(%s)成功', implode(', ', $offLineHouseIds)); } $dealRemark[] = sprintf('%d 经纪人当前[%s]租售套餐,可推广房源数小于当前在线房源数,下架房源[ %s ]', $queueInfo['id'], date('Y-m-d H:i:s'), implode(',', $offLineHouseIds)); return static::buildReturn(self::PROCESS_STATUS_SUCCESS, $dealRemark); }
/** * 获取经纪人套餐推广的房源 * * @param int $brokerId * @param int $cityId * @return array */ public static function getComboSpreadHouseList($brokerId, $cityId) { $houseRelationList = Bll_Combo_HouseRelation::getOnlineHouseList($brokerId, $cityId, self::SITE_TYPE); $houseRelationByHouseIdList = array(); foreach ($houseRelationList as $houseRelation) { $houseRelationByHouseIdList[$houseRelation['houseId']] = $houseRelation; } return $houseRelationByHouseIdList; }