public function handle_request() { $zeroOfferPlanList = Model_Plan_EsfAjkPropSpread::scanPlan0Offer($this->_startId, self::BATCH_LIMIT); if (empty($zeroOfferPlanList)) { $this->logMsg(sprintf('startId: %d 没有获取到计划。', $this->_startId)); file_put_contents($this->_doneFile, 'DONE'); } foreach ($zeroOfferPlanList as $planInfo) { $cityId = $planInfo['cityId']; $houseId = $planInfo['propId']; $planId = $planInfo['id']; $brokerId = $planInfo['brokerId']; $houseInfo = Bll_House_EsfHouse::getHouseBaseInfoEx($houseId, $planInfo['cityId']); if (empty($houseInfo)) { $this->logMsg(sprintf('经纪人[%d] 城市[%d] 房源[%d]没有找到,计划[%d]', $brokerId, $cityId, $houseId, $planId)); continue; } $housePrice = $houseInfo['proPrice'] * 10000; /** * 获取小区价格段出价 */ $clickPrice = Bll_Service_Choice::ajkClickPrice(array('brokerId' => $planInfo['brokerId'], 'cityId' => $cityId, 'price' => $housePrice, 'commId' => $houseInfo['commId'])); if ($clickPrice['status'] == 'error') { $this->logMsg(sprintf('经纪人[%d] 城市[%d] 房源[%d] 计划[%d] 小区[%d] 价格[%d] 获取点击价格失败', $brokerId, $cityId, $houseId, $planId, $houseInfo['commId'], $housePrice)); continue; } if ($clickPrice['realTradeAmount'] != $clickPrice['shouldTradeAmount']) { $offer = $clickPrice['realTradeAmount']; } else { $offer = $clickPrice['realTradeAmount']; } file_put_contents($this->_doneFile, 'DONE'); $this->logMsg(sprintf('经纪人[%d] 城市[%d] 房源[%d] 计划[%d] 小区[%d] 价格[%d] 出价[%d]', $brokerId, $cityId, $houseId, $planId, $houseInfo['commId'], $housePrice, $offer)); continue; if (!Model_Plan_EsfAjkPropSpread::updateOffer($planId, $offer)) { $this->logMsg(sprintf('经纪人[%d] 城市[%d] 房源[%d] 计划[%d] 小区[%d] 价格[%d] 更新出价失败', $brokerId, $cityId, $houseId, $planId, $houseInfo['commId'], $housePrice)); continue; } $this->logMsg(sprintf('经纪人[%d] 城市[%d] 房源[%d] 计划[%d] 小区[%d] 价格[%d] 更新出价成功', $brokerId, $cityId, $houseId, $planId, $houseInfo['commId'], $housePrice)); } if (count($zeroOfferPlanList) < self::BATCH_LIMIT) { file_put_contents($this->_doneFile, 'DONE'); } }
/** * 验证房源是否存在 * * @param int $cityId * @param int $houseId * @param int $brokerId * @return bool */ public static function checkHouseExist($cityId, $houseId, $brokerId = 0) { $houseInfo = Bll_House_EsfHouse::getHouseBaseInfoEx($houseId, $cityId); if (!empty($houseInfo)) { return $brokerId == 0 || $houseInfo['brokerId'] == $brokerId; } return false; }
/** * 小区合并修改计划信息 * * @param $queue * @return bool */ public function communityMerge($queue) { if ($queue['planId'] == 0 || $queue['proId'] == 0) { $this->setMsg('房源Id、计划Id不能为空'); return false; } /** 判断计划状态 */ $planInfo = Model_Plan_EsfAjkPropSpread::getPlanInfoByIdEx($queue['planId']); if ($planInfo['tradetype'] != 1 || $planInfo['bidVersion'] != 2) { $this->setMsg(sprintf('计划[%d]信息错误[%d - %d]', $queue['planId'], $planInfo['tradetype'], $planInfo['bidVersion'])); return false; } if ($planInfo['status'] != Model_Plan_EsfAjkPropSpread::ONLINE && $planInfo['status'] != Model_Plan_EsfAjkPropSpread::ONQUEUE) { $this->setMsg(sprintf('计划[%d]不在推广、排队中[%d]', $queue['planId'], $planInfo['status'])); return true; } if ($planInfo['propId'] != $queue['proId']) { $this->setMsg(sprintf('房源Id[%d - %d]不一致', $queue['proId'], $planInfo['propId'])); return true; } $houseInfo = Bll_House_EsfHouse::getHouseBaseInfoEx($queue['proId'], $planInfo['cityId']); if (empty($houseInfo)) { $this->setMsg(sprintf('房源[%d]信息没有获取到', $queue['proId'])); return true; } $housePrice = intval($houseInfo['proPrice'] * 10000); $priceIntervalInfo = Model_House_EsfPrice::get_price($planInfo['cityId'], $housePrice); if (empty($priceIntervalInfo)) { $this->setMsg(sprintf('房源[%d]没有获取到价格段信息[%d]', $queue['proId'], $housePrice)); return true; } $priceId = $priceIntervalInfo['id']; $communityId = $houseInfo['commId']; $data = array('commId' => $communityId); if (!Model_Plan_EsfAjkPropSpread::updatePlan($queue['planId'], $data)) { $this->setMsg(sprintf('更新计划[%d]信息[%s]失败', $queue['planId'], json_encode($data))); return false; } $bucketInfo = Model_Choice_EsfBidBucket::get_bucket_info($communityId, $priceId); if (empty($bucketInfo)) { Model_Choice_EsfBidBucket::init_bucket_info($communityId, $priceId, $planInfo['cityId']); } Model_Choice_EsfBidBucket::increment_used_num_ex($communityId, $priceId); $this->setMsg(sprintf('更新计划[%d]信息[%s]成功', $queue['planId'], json_encode($data))); $planInfo['proPriceInt'] = $planInfo['propriceint']; //todo 添加房源日志 type 小区合并,区域板块变更 Model_Log_HouseLogNew::create(array('houseId' => $queue['propId'], 'planId' => $queue['planId'], 'brokerId' => $queue['brokerId'], 'cityId' => $planInfo['cityId'], 'type' => Const_ProLogType::LOG_COMMUNITY_MERGE_PROP_CHANGE, 'changeType' => Const_ProPlanChangeType::COMM_MERGE_PROP_CHANGE, 'remark' => '小区合并,精选房源信息变更', 'operatorId' => $this->qInfo['operationId'], 'siteType' => 1), date('Ymd'))->save(); return $this->choiceComputeRank(array_merge($planInfo, $data)); }
/** * @param House_PropviewController $controller * @param AJKRequest $request * @param AJKResponse $response * * @return array */ public static function handlerPropViewRequest($controller, $request, $response) { $routeMatches = $request->get_router_matches(); $houseId = $routeMatches[2]; $cityId = $request->getBrokerCityId(); $brokerId = $request->getBrokerId(); $pageParams = array('houseId' => $houseId); $houseInfo = Bll_House_EsfHouse::getHouseBaseInfoEx($houseId, $cityId); /** 不是当前经纪人的房源则返回到房源管理页去 */ if (empty($houseInfo) || $houseInfo['brokerId'] != $brokerId) { $response->redirect('/ajkbroker/user/manage/proplist/ajk/'); } $pageParams['title'] = $houseInfo['proName']; $houseInfo['mobile'] = $houseInfo['uriCode'] == 'mobile.asyn' || $houseInfo['uriCode'] == 'mobile-ajk-broker.asyn' ? 1 : 0; $pageParams['info'] = sprintf('%s %d平米,%d室%d厅%d卫,%d/%d层,%.2f万 (房源ID:%d)', $houseInfo['commName'], $houseInfo['areaNum'], $houseInfo['roomNum'], $houseInfo['hallNum'], $houseInfo['toiletNum'], $houseInfo['proFloor'], $houseInfo['floorNum'], $houseInfo['proPrice'], $houseId); $currentDate = strtotime(date('Y-m-d 00:00:00')); $postDate = strtotime(date('Y-m-d 00:00:00', $houseInfo['postDate'])); $pageParams['leftDay'] = max(0, 90 - floor(($currentDate - $postDate) / 86400)); $pageParams['houseInfo'] = $houseInfo; $pageParams['viewLink'] = Util_Url::ajkHouseDetailUrl($houseId, $cityId); $pageParams['editURL'] = Bll_Ppc_LinkManager::getSaleEditUrl($houseId); $houseAdShow = Model_House_AdPropShowSale::getHouseAdSale($brokerId, $houseInfo['proId']); $pageParams['AdShow'] = empty($houseAdShow) ? false : true; $pageParams['isIllegal'] = $houseInfo['isVisible'] == 0 && $houseInfo['expireWorker'] != 'propertyReport'; // TODO 获取小区在线房源和排名 需要重构 $pageParams['communitySaleCount'] = Model_Community_AjkSaleRentCount::getCommunitySaleNum($houseInfo['commId']); $isBidCity = Bll_City::isBidCity($cityId); if ($isBidCity) { $pageParams['bidTip'] = '竞价'; } $isChoiceCity = Bll_City::isChoiceCity($cityId); /** 精选城市 */ if ($isChoiceCity) { $pageParams['bidTip'] = '精选'; } $pageParams['isChoiceCity'] = $isChoiceCity; $pageParams['isBidCity'] = $isBidCity; $houseRank = Bll_Broker_Manage_AjkPropList::getHouseSollyResult(array($houseId)); if (isset($houseRank[$houseId])) { $pageParams['houseRank'] = $houseRank[$houseId]; } else { $pageParams['houseRank'] = '待评'; } $houseSpreadDate = array(); for ($interval = -6; $interval <= 0; $interval++) { $houseSpreadDate[] = date('m.d', strtotime("{$interval} day")); } $pageParams['houseSpreadDate'] = $houseSpreadDate; $fixPlanId = Bll_Plan_Fix_AjkPlan::getPlanIdByHouseId($brokerId, $houseId, $cityId); $startDate = date('Ymd', strtotime('-6 day')); $endDate = date('Ymd'); $houseFixDailyCostList = array(); for ($i = -6; $i <= 0; $i++) { $date = date('m.d', strtotime("{$i} day")); $houseFixDailyCostList[$date] = 0; } /** 获取房源指定日期内每天的定价点击 */ if (Bll_Broker_HzBroker::isComboBroker($brokerId)) { $pageParams['houseFixSpreadClickInfoList'] = static::getHouseComboSpreadClickInfo($houseId); } else { $pageParams['houseFixSpreadClickInfoList'] = static::getHouseFixSpreadClickInfoEx($brokerId, $houseId); /** 获取房源指定日期内每天的定价花费 */ $pageParams['houseFixDailyCostList'] = array_merge($houseFixDailyCostList, static::getHouseFixDailyCost($brokerId, $fixPlanId, $houseId, $startDate, $endDate)); } if ($isChoiceCity || $isBidCity) { $houseBidSpreadInfo = static::getHouseBidSpreadInfo($houseId, $cityId); $pageParams['houseBidSpreadInfo'] = $houseBidSpreadInfo; } // $pageParams['houseDetail'] = Bll_Ppc_ServiceAPI::getHouseInfo($houseId); $houseImageInfo = Bll_Ppc_ServiceAPI::getHouseImageInfo($houseId); $pageParams['optimize'] = static::getHouseOptimizeInfo($houseId, $houseImageInfo, $houseInfo, $cityId); $pageParams['imageCount'] = count($houseImageInfo['imageBaseInfo']); if (count($houseImageInfo['imageBaseInfo']) <= 0) { $pageParams['houseDefaultImage'] = 'http://pages.anjukestatic.com/img/global/nopic_150x113.gif'; } else { $pageParams['houseDefaultImage'] = static::getThumbImageUrl($houseId, $houseImageInfo['imageBaseInfo']); } $pageParams['houseStatisticsInfo'] = static::getHouseStatisticsInfo($houseId, $cityId, $houseInfo['commId'], $houseInfo['proPriceInt']); //市场分析,小区价格段供需比。获取前天的数据 $pageParams['demandSupplyPriceInfo'] = static::getDemandSupplyByPriceInfo($houseInfo['commId']); //市场分析,小区户型供需比。获取前天数据 $pageParams['demandSupplyRoomInfo'] = static::getCommTotalRoomInfo($houseInfo['commId']); $pageParams['subRegionRank'] = static::getCommunityRank($houseInfo['areaCode'], $houseInfo['commId']); return $pageParams; }
/** * 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); }