public function run() { //获取精选符合的精选计划 $planInfos = Model_Plan_Jp::getValidChoicePlanByCursor($this->cursor, $this->limit); //无需要处理的数据 if (empty($planInfos)) { $this->setShStopFlag(); $this->setCursor(0); $this->logQuit("无需要处理的数据."); } foreach ($planInfos as $plan) { $cityId = $plan->cityId; $houseType = $plan->houseType; /** 获取房源基本信息 */ $propInfo = Bll_House_JpHouseInfo::getHouseInfoById($plan->houseId); /** 获取价格信息 **/ $arrPrice = Bll_House_JpHouseInfo::getPrice($cityId, $propInfo['base']['houseType'], $propInfo['info']); //获取二手房经纪人id $mainBusiness = Model_Broker_MainBusiness::getMainBusinessByJpBrokerId($plan['memberId'], false); //获取点击单击 $apiParams = array('brokerId' => $mainBusiness['ajkBrokerid'], 'cityId' => $cityId, 'price' => $arrPrice['price'] ?: 0, 'blockId' => $plan->blockId, 'newBlockId' => $plan->newBlockId, 'houseType' => $houseType); $clickPrice = Bll_Service_Choice::jpClickPrice($apiParams); if ($clickPrice['status'] == 'error') { $this->logQuit(sprintf('计划%d获取对应的点击单价失败', $plan->id)); } $spreadPrice = $clickPrice['realTradeAmount']; //更新点击单价 $oldSpreadPrice = $propInfo['info']->spreadPrice; $propInfo['info']->spreadPrice = $spreadPrice; $propInfo['info']->save(); $this->addLogger(sprintf("计划%dspreadPrice修改,%d=>%d", $plan->id, $oldSpreadPrice, $spreadPrice)); //更新游标 $this->setCursor($plan->id); } }
public function handle_request_internal() { $brokerId = $this->_params['brokerId']; $hzBrokerId = Model_Broker_MainBusiness::getHzBrokerIdByAjkBrokerId($brokerId); $brokerInfo = Model_Broker_AjkBrokerExtend::findWithBrokerId($brokerId); if (!$brokerInfo) { throw new Exception_BrokerNotFoundException('经纪人不存在', Const_APIStatus::E_BROKER_NOT_EXISTS); } $cityId = $brokerInfo->cityId; if (!Bll_City::isChoiceCity($cityId, Const_Site::HAOZU)) { return array('status' => Const_APIStatus::RETURN_CODE_ERROR, 'errcode' => Const_APIStatus::E_NOT_CHOICE_CITY, 'message' => '非精选城市'); } $bllChoice = new Bll_Zufang_Choice(); $today = date('Ymd'); $choiceInfo = $bllChoice->get_choice_info($hzBrokerId, $today, $cityId); $todayClicks = intval($choiceInfo[0]['bidClicks']); $todayConsume = intval($choiceInfo[0]['bidConsume']) / 100; // 获取精选推广房源数(精选计划和房源一一对应) $plansIds = array(); $plans = $bllChoice->get_active_choice_plans($hzBrokerId, array(1, 13, 2, 3, 7, 8)); foreach ($plans as $plan) { $plansIds[] = $plan->id; } $props = array(); if ($plansIds) { $props = $bllChoice->get_prop($plansIds); } $totalProps = count($props); //将精选状态变化数目归零 $keyData = array('brokerId' => $brokerId, 'bizType' => Model_Mobile_PropRedDot::TYPE_CHOICE_STATUS); $data = array('num' => 0); Bll_Mobile_PropRedDot::getInstance()->updateData($keyData, $data); return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => array('todayClicks' => $todayClicks, 'todayConsume' => Util_Formatter::formatTodayConsume($todayConsume), 'todayConsumeUnit' => '元', 'totalProps' => $totalProps)); }
public function handle_request_internal() { $brokerId = $this->_params['brokerId']; // 判断经纪人是否存在 $broker = Model_Broker_AjkBrokerExtend::findWithBrokerId($brokerId); $hzBrokerId = Model_Broker_MainBusiness::getHzBrokerIdByAjkBrokerId($brokerId); if (!$hzBrokerId || !$broker) { throw new Exception_Broker_NotFound('BrokerId: ' . $brokerId); } // 判断城市是否开通竞价业务 $cityId = $broker['cityId']; if (!Bll_City::isBidCity($cityId)) { return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => array('todayClicks' => 0, 'todayConsume' => 0, 'todayConsumeUnit' => '元', 'totalProps' => 0)); } // 获取今日房源点击和消费记录 $clicksInfo = Model_Stats_PropClick::getClickInfoByBrokerId($hzBrokerId, $cityId); // 统计今日竞价点击和消费 $todayClicks = 0; $todayConsume = 0; foreach ($clicksInfo as $objClick) { $todayClicks += $objClick->bid_cnum; $todayConsume += $objClick->bid_cost; } // 获取竞价房源数 $bidPropNum = Bll_HzBidPlan::get_broker_bidprop_count($hzBrokerId); return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => array('todayClicks' => $todayClicks, 'todayConsume' => Util_Formatter::formatTodayConsume($todayConsume / 100), 'todayConsumeUnit' => '元', 'totalProps' => $bidPropNum)); }
public function get_hz_broker_id($brokerId) { $da = Model_Broker_MainBusiness::data_access(); $da->filter('ajkBrokerid', $brokerId); $data = $da->find(); return $data ? $data[0]->hzBrokerid : 0; }
public function handle_request_internal() { if (!$this->isBrokerLogin()) { $this->redirect(self::getURL('my', '/login', 'anjuke')); } $broker = self::$BrokerInfo; $this->_intBrokerID = $broker['BaseInfo']['BROKERID']; $this->_intBrokerCityID = $broker['BaseInfo']['CITYID']; $type = APF::get_instance()->get_request()->get_parameter("type"); $BrokerMap = Model_Broker_MainBusiness::getBrokerMap($this->_intBrokerID); if (empty($type) || empty($BrokerMap)) { $this->redirect(self::getURL($this->_intBrokerCityID, '/shop/salelist/' . $BrokerMap['ajk_brokerid'])); } /* http://beijing.jinpu.com/dianpu/39501 http://beijing.haozu.com/shop/1796250 http://beijing.anjuke.com/shop/view/147479 */ switch ($type) { case 'ajk': $this->redirect(self::getURL($this->_intBrokerCityID, '/shop/salelist/' . $BrokerMap['ajkBrokerid'])); break; case 'zf': $this->redirect(Util_Url::getHaozuURLNew($this->_intBrokerCityID, '/dianpu/' . $BrokerMap['hzBrokerid'])); break; case 'jp': $this->redirect(Util_Url::getJinpuURLNew($this->_intBrokerCityID, '/dianpu/' . $BrokerMap['jpBrokerid'])); break; default: $this->redirect(self::getURL($this->_intBrokerCityID, '/shop/salelist/' . $BrokerMap['ajkBrokerid'])); break; } }
public function handle_request_internal() { $brokerId = $this->_params['brokerId']; $propId = $this->_params['propId']; // 获取Broker Mapping $brokerMapping = Model_Broker_MainBusiness::getMainBusinessByAjkBrokerId($brokerId); if (!$brokerMapping) { throw new Exception('经纪人不存在', Const_APIStatus::E_BROKER_NOT_EXISTS); } // 获取房源信息 $prop = Model_House_HzProp::findByPropId($propId); if (!$prop) { throw new Exception('房源不存在', Const_APIStatus::E_PROP_NOT_EXISTS); } // 判断房源和经纪人关联关系 $contentBasic = $prop->getContentBasic(); if ($contentBasic['userid'] != $brokerMapping['hzBrokerid']) { throw new Exception('房源不属于该经纪人', Const_APIStatus::E_PROP_NOT_EXISTS); } $data = array(); $area_id = $contentBasic['areaid']; $block_id = $contentBasic['blockid']; $areaInfo = Model_City_HzArea::getAreaById($area_id); $area_name = $areaInfo['typeName']; $blockInfo = Model_City_HzArea::getAreaById($block_id); $block_name = $blockInfo['typeName']; $data['areaname'] = $area_name; $data['blockname'] = $block_name; $data['propId'] = $propId; $data['url'] = $this->build_base_url($contentBasic['cityid'], $propId); $data['title'] = $contentBasic['title']; $data['imgUrl'] = $prop->getDefaultImageUrl(); $data['commId'] = $contentBasic['commid']; $data['commName'] = $contentBasic['commname']; $data['roomNum'] = $contentBasic['roomnum']; $data['hallNum'] = $contentBasic['hallnum']; $data['toiletNum'] = $contentBasic['toilnetnum']; $data['area'] = round($contentBasic['areanum']); $data['price'] = round($contentBasic['pricenum']); $data['priceUnit'] = '元/月'; $data['isVisible'] = intval(!$prop->isIllegal()); $data['isMoreImg'] = intval($prop->isMultiImages()); $data['isBid'] = intval($prop->isBid()); $data['isChoice'] = intval($prop->isChoice()); $data['isPhonePub'] = intval($prop->isFromMobile()); $data['publishDays'] = $prop->getPublishedDays(); $data['publishDaysMsg'] = $prop->getPublishedDays() > 0 ? "{$data['publishDays']}天前发布" : '今天发布'; $data['createTime'] = date('Y-m-d H:i:s', $contentBasic['created']); $data['updateTime'] = date('Y-m-d H:i:s', $contentBasic['updated']); //增加委托房源标签 $isEntrust = Bll_Zufang_Choice::isCommissionHouse($propId, $brokerId, Model_House_Commission::TYPE_RENT); if ($isEntrust) { $data['isEntrust'] = 1; } else { $data['isEntrust'] = 0; } return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => $data); }
private function initEnv() { $this->objAPF = $objAPF = APF::get_instance(); $this->request = $this->objAPF->get_request(); $this->params = $this->request->get_parameters(); $this->brokerId = $this->request->getBrokerId(); $this->cityId = $this->request->getBrokerCityId(); //设置租房、金铺的经纪人id $MainBusiness = Model_Broker_MainBusiness::getMainBusinessByAjkBrokerId($this->brokerId, false); $this->hzBrokerId = $MainBusiness['hzBrokerid']; $this->jpBrokerId = $MainBusiness['jpBrokerid']; $this->debug = isset($_GET['debug']) ? true : false; }
/** * * 根据二手房brokerid获取记录 * * @param $esfBrokerid */ public static function getDataByEsfId($esfBrokerid) { if (isset(self::$MainBusinessByEsfId[$esfBrokerid])) { return self::$MainBusinessByEsfId[$esfBrokerid]; } else { $data = array(array('ajkBrokerid', '=', $esfBrokerid)); $order = array(); $prefix = ''; $result = Model_Broker_MainBusiness::fetchoneLayer($data, $order, $prefix); if (!empty($result)) { self::setStatisData($result); } return $result; } }
public function handle_request() { $brokerid = $this->getOption('brokerid'); $cityId = 11; printf('[%s] lastLogId: %s, start: %s, end: %s' . PHP_EOL, date('Y-m-d H:i:s'), $this->lastLogId, $this->start, $this->end); if (!isset($brokerid)) { $brokerid = 0; } $brokerInfos = Model_Broker_AjkBrokerExtend::getBrokerInfoByCityId($cityId, $this->lastLogId, $this->pageSize, $brokerid, 'K'); if (empty($brokerInfos)) { printf('[%s] remark: %s' . PHP_EOL, date('Y-m-d H:i:s'), '任务执行完成.'); $this->setStop(); $this->setShStopFlag(); exit; } foreach ($brokerInfos as $brokerInfo) { if ($cityId != $brokerInfo->cityId) { continue; } $this->lastLogId = $brokerInfo->brokerId; $brokers = Model_Broker_MainBusiness::getMainBusinessByAjkBrokerId($brokerInfo->brokerId); if (empty($brokers)) { echo "no data! \r\n"; } else { if ($brokers->ajkBrokerid) { printf('[%s]开始处理二手房: 城市ID为%s的历史数据,brokerId为%s' . PHP_EOL, date('Y-m-d H:i:s'), $cityId, $brokers->ajkBrokerid); //请求二手房API,处理竞价历史数据 $result = Uri_Curl::get($this->url . 'user/broker/transformmoney', array('id' => $brokers->ajkBrokerid, 'status' => 5)); printf('[%s]开始处理二手房: 城市ID为%s的历史数据,brokerId为%s,处理结果:%s' . PHP_EOL, date('Y-m-d H:i:s'), $cityId, $brokers->ajkBrokerid, $result); } if ($brokers->hzBrokerid) { printf('[%s]开始处理租房: 城市ID为%s的历史数据,brokerId为%s' . PHP_EOL, date('Y-m-d H:i:s'), $cityId, $brokers->ajkBrokerid); //请求租房API,处理竞价历史数据 $result = Uri_Curl::get($this->url . 'zufang/api/broker/transformmoney', array('id' => $brokers->ajkBrokerid, 'status' => 5)); printf('[%s]开始处理租房: 城市ID为%s的历史数据,brokerId为%s,处理结果:%s' . PHP_EOL, date('Y-m-d H:i:s'), $cityId, $brokers->ajkBrokerid, $result); } if ($brokers->jpBrokerid) { printf('[%s]开始处理商业地产: 城市ID为%s的历史数据,brokerId为%s' . PHP_EOL, date('Y-m-d H:i:s'), $cityId, $brokers->ajkBrokerid); //请求商业地产API,处理竞价历史数据 $result = Uri_Curl::get($this->url . 'jinpu/api/choice/brokerprop', array('brokerid' => $brokers->jpBrokerid, 'status' => 5)); printf('[%s]开始处理商业地产: 城市ID为%s的历史数据,brokerId为%s,处理结果:%s' . PHP_EOL, date('Y-m-d H:i:s'), $cityId, $brokers->ajkBrokerid, $result); } sleep(1); } } $params = array('cityId' => $cityId, 'lastLogId' => $this->lastLogId); $this->setFlag($params); }
public function handle_request_internal() { $brokerId = $this->_params['brokerId']; $propId = $this->_params['propId']; // 获取Broker Mapping $brokerMapping = Model_Broker_MainBusiness::getMainBusinessByAjkBrokerId($brokerId); if (!$brokerMapping) { throw new Exception('经纪人不存在', Const_APIStatus::E_BROKER_NOT_EXISTS); } $data = array(); // 获取房源和计划关系 $planRelation = Model_Plan_HzPlanning::getPropFixPlan($propId); if ($planRelation) { $data['status'] = 1; //推广中 } else { $data['status'] = 0; //未推广 } // 获取房源信息 $prop = Model_House_HzProp::data_access()->filter('propId', $propId)->find_only(); if (!$prop) { throw new Exception('房源不存在', Const_APIStatus::E_PROP_NOT_EXISTS); } // 判断房源和经纪人关联关系 $propBasic = json_decode($prop['contentBasic'], true); if ($propBasic['userid'] != $brokerMapping['hzBrokerid']) { throw new Exception('房源不属于该经纪人', Const_APIStatus::E_PROP_NOT_EXISTS); // TODO } // 根据房源的计划ID判断房源是否已定价推广 $data['planId'] = ''; if ($plan = $prop->getFixPlan()) { $data['planId'] = $plan['id']; } // 点击单价 $data['clickPrice'] = round($prop->getFixClickPrice(), 2); $data['clickPriceUnit'] = '元'; // 今日定价点击量 $data['todayClicks'] = $prop->getTodayClickSums('fix'); // 定价点击总量 $data['totalClicks'] = $prop->getTotalClickSums('fix'); return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => $data); }
public function handle_request_internal() { $this->brokerId = $this->_params['brokerId']; $this->propId = $this->_params['propId']; // 获取经纪人映射 $mapping = Model_Broker_MainBusiness::getMainBusinessByAjkBrokerId($this->brokerId); if (!$mapping) { throw new Exception_BrokerNotFoundException(); } $hzBrokerId = $mapping['hzBrokerid']; $this->broker = Model_Broker_AjkBrokerExtend::findWithBrokerId($this->brokerId); $cityId = $this->broker['cityId']; // 非精选城市 if (!Bll_City::isChoiceCity($cityId, Const_Site::HAOZU)) { throw new Exception('非精选城市', Const_APIStatus::E_NOT_CHOICE_CITY); } // 获取房源信息 $this->prop = Model_House_HzProp::findByPropId($this->propId); if (!$this->prop) { throw new Exception_PropertyNotFoundException('房源不存在', Const_APIStatus::E_PROP_NOT_EXISTS); } // 检查房源是否属于当前经纪人 if (!$this->prop->belongToBroker($hzBrokerId)) { throw new Exception('房源不属于经纪人', Const_APIStatus::E_PROP_NOT_EXISTS); } $price = $this->prop->getContentBasic('pricenum'); $blockId = $this->prop->getContentBasic('blockid'); // 获取精选推广位 $this->bucket = Bll_Choice_HzBidBucket::get_bucket_info($blockId, $cityId, $price); $this->bucketId = $this->bucket['id']; // 检查房源是否可以添加精选推广位订阅 if (($result = $this->hasAddChoiceRemindPermission()) !== true) { throw new Exception($result['msg'], intval($result['code'])); } // 创建订阅 $subscription = Model_Choice_Subscription::data_access()->filter('site', Model_Choice_Subscription::SITE_RENT)->filter('brokerId', $this->brokerId)->filter('propId', $this->propId)->filter('bucketId', $this->bucketId)->find_only(); if (!$subscription) { Model_Choice_Subscription::create(array(Model_Choice_Subscription::SITE => Model_Choice_Subscription::SITE_RENT, Model_Choice_Subscription::BROKER_ID => $this->brokerId, Model_Choice_Subscription::PROP_ID => $this->propId, Model_Choice_Subscription::BUCKET_ID => $this->bucketId, Model_Choice_Subscription::STATUS => Model_Choice_Subscription::SUBSCRIPTION_START, Model_Choice_Subscription::CREATE_TIME => date('Y-m-d H:i:s'), Model_Choice_Subscription::UPDATE_TIME => date('Y-m-d H:i:s')))->save(); } else { $subscription->status = Model_Choice_Subscription::SUBSCRIPTION_START; $subscription->save(); } return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => array('remindStatus' => 1, 'remindStatusMsg' => '取消推广位提醒')); }
/** * 删除房源,可批量 */ public static function delete_prop($hzBrokerId, $city_id, $proids) { // 获取二手房经纪人ID,用于基于房源定价上下架日志 $ajkBrokerId = Model_Broker_MainBusiness::getMainBusinessByHzBrokerId($hzBrokerId)->ajkBrokerid; $proinfo = Dao_Broker_HzProp::get_prop($proids); foreach ($proinfo as $proid => $prop) { $basic_info = $prop['content_basic']; if ($basic_info['cityid'] != $city_id || $basic_info['userid'] != $hzBrokerId) { continue; } $fix_planning = Dao_Broker_HzPlan::get_prop_planning($proid); if (!empty($fix_planning)) { Bll_HzFixPlan::prop_out_fix($hzBrokerId, $proid, $fix_planning[0]['plan_id']); } Dao_Broker_HzProp::change_prop_status($proid, Const_HzStatus::REMOVE); // 记录房源定价上下架记录 Bll_ProPlanChangeApiBll::get_instance()->insertProPlanChange(array('broker_id' => $ajkBrokerId, 'pro_id' => $proid, 'plan_id' => $fix_planning ? $fix_planning[0]['plan_id'] : '', 'type' => 'pro_del', 'from' => 'hz_' . __CLASS__ . '_' . __FUNCTION__, 'remark' => '删除房源', 'site_type' => 2), $ajkBrokerId); } return true; }
/** * 设置主营业务 * * @param $userId * @param $brokerId * @param $mainBusinessType * @return mixed */ public function setMainBusiness($userId, $brokerId, $mainBusinessType) { $objBrokerMainBusiness = new Model_Broker_MainBusiness(); $objBrokerMainBusiness->memberId = $userId; $objBrokerMainBusiness->ajkBrokerid = $brokerId; $objBrokerMainBusiness->type = $mainBusinessType; $objBrokerMainBusiness->save(); return $objBrokerMainBusiness->id; }
private function store_main_business($data) { if (!isset($data['member_id'])) { $return['status'] = false; $return['mesg'] = '获取member id失败'; return $return; } if (!isset($data['broker_id'])) { $return['status'] = false; $return['mesg'] = '获取经纪人id失败'; return $return; } if (!isset($data['type'])) { $return['status'] = false; $return['mesg'] = '获取主营业务失败'; return $return; } if (Model_Broker_MainBusiness::addStoreMainBusiness($data['member_id'], $data['broker_id'], $data['type']) == 0) { $return['status'] = false; $return['mesg'] = '存储主营业务失败。'; } else { Model_Broker_MainBusinessLog::addStoreMainBusinessLog($data['member_id'], $data['broker_id'], $data['type']); $return['status'] = true; } return $return; }
public function handle_request_internal() { $brokerId = $this->_params['brokerId']; $cityId = $this->_params['cityId']; $planId = $this->_params['planId']; // 获取Broker Mapping $brokerMapping = Model_Broker_MainBusiness::getMainBusinessByAjkBrokerId($brokerId); if (!$brokerMapping) { throw new Exception('经纪人不存在', Const_APIStatus::E_BROKER_NOT_EXISTS); } // 判断计划和经纪人关联关系 $plan = Model_Plan_HzPlanBasic::get_plan_by_id($planId); if ($plan['user_id'] != $brokerMapping['hzBrokerid']) { throw new Exception('计划不属于该经纪人', Const_APIStatus::E_PLAN_NOT_BELONG_BROKER); } // 获取定价推广房源列表 $propertyList = array(); $props = Bll_HzFixPlan::get_plan_props($planId, $cityId); if (isset($props[$planId]) && isset($props[$planId]['props'])) { $propIds = array(); foreach ($props[$planId]['props'] as $prop) { $propId = $prop['proid']; $propIds[] = $propId; $row = array(); $row['propId'] = $row['id'] = $propId; $row['title'] = $prop['content_basic']['title']; $row['imgUrl'] = ''; $row['commId'] = $prop['content_basic']['commid']; $row['commName'] = $prop['content_basic']['commname']; $row['roomNum'] = $prop['content_basic']['roomnum']; $row['hallNum'] = $prop['content_basic']['hallnum']; $row['toiletNum'] = $prop['content_basic']['toilnetnum']; $row['area'] = round($prop['content_basic']['areanum']); $row['price'] = round($prop['content_basic']['pricenum']); $row['priceUnit'] = '元/月'; $row['todayClicks'] = $prop['fix_click']; $row['totalClicks'] = $prop['fix_total_click']; $row['isBid'] = 0; $row['isChoice'] = 0; $row['isVisible'] = (int) ($prop['content_basic']['status'] != 6); $row['isMoreImg'] = (int) $prop['content_basic']['quality']; $row['isPhonePub'] = (int) (isset($prop['content_basic']['from']) && $prop['content_basic']['from'] == 'mobile-ajk-broker'); $row['publishDays'] = floor((time() - $prop['content_basic']['created']) / 86400); $row['publishDaysMsg'] = $row['publishDays'] > 0 ? "{$row['publishDays']}天前发布" : '今天发布'; $row['createTime'] = date('Y-m-d H:i:s', $prop['content_basic']['created']); $row['updateTime'] = date('Y-m-d H:i:s', $prop['content_basic']['updated']); //增加委托房源标签 $isEntrust = Bll_Zufang_Choice::isCommissionHouse($propId, $brokerId, Model_House_Commission::TYPE_RENT); if ($isEntrust) { $row['isEntrust'] = 1; } else { $row['isEntrust'] = 0; } $propertyList[$propId] = $row; } if ($propIds) { // 批量获取房源的默认图片 $defaultImages = Model_Image_HzImage::getDefaultImagesByHouseIds($propIds); foreach ($defaultImages as $defaultImage) { $propertyList[$defaultImage['proid']]['imgUrl'] = $defaultImage->imageUrl(); } // 批量获取房源和竞价计划的关联记录(精选是竞价2.0)(只取推广中和排队中的关系) $relations = Model_Plan_HzPlanning::getBidRelationsByHouseIds($propIds, array(Const_HzPlan::SPREAD, Const_HzPlan::WAITING)); // 批量获取房源竞价计划 $planIds = array(); $planPropMap = array(); foreach ($relations as $relation) { $planIds[] = $relation['plan_id']; $planPropMap[$relation['plan_id']] = $relation['proid']; } if ($planIds) { $plans = Model_Plan_HzPlanBasic::getPlansByIds($planIds); foreach ($plans as $plan) { // 忽略已删除计划 if ($plan->flag == 0) { continue; } // 精选 if ($plan->bid_version == 2) { $propId = $planPropMap[$plan['id']]; $propertyList[$propId]['isChoice'] = 1; } else { // 竞价 $propId = $planPropMap[$plan['id']]; $propertyList[$propId]['isBid'] = 1; } } } } } // 排序 • 按发布时间倒序 usort($propertyList, function ($a, $b) { if ($a['createTime'] == $b['createTime']) { return 0; } return strtotime($a['createTime']) > strtotime($b['createTime']) ? -1 : 1; }); // 分组 $newList = array(); $oldList = array(); foreach ($propertyList as $property) { if ($property['publishDays'] > 30) { $oldList[] = $property; } else { $newList[] = $property; } } return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => array('newList' => $newList, 'oldList' => $oldList)); }
/** * 批量将房源从定价组中移除 */ public static function batchprop_out_fix($hzBrokerId, $proids, $plan_id) { $flag_array = array('status' => 0, 'msg' => ''); $plan_info = Dao_Broker_HzPlan::get_plan($plan_id); if (empty($plan_info)) { $flag_array['msg'] = Const_HzErrorInfo::NULLPLAN; return $flag_array; } if ($plan_info['user_id'] != $hzBrokerId) { $flag_array['msg'] = Const_HzErrorInfo::PLANINFOERROR; return $flag_array; } // 获取二手房经纪人ID,用于基于房源定价上下架日志 $ajkBrokerId = Model_Broker_MainBusiness::getMainBusinessByHzBrokerId($hzBrokerId)->ajkBrokerid; $proinfo = Dao_Broker_HzProp::get_prop($proids); if ($proinfo) { foreach ($proinfo as $prop) { $proid = $prop['proid']; $planning = Dao_Broker_HzPlan::get_check_planning($proid, $plan_id); if (empty($planning)) { continue; } if ($prop['content_basic']['userid'] != $plan_info['user_id']) { continue; } $bid = Dao_Broker_HzPlan::get_prop_planning($proid, Const_HzPlan::BID_TYPE, '1,3,7'); if (!empty($bid)) { //停止竞价 Bll_HzBidPlan::delete_bid($hzBrokerId, $bid[0]['plan_id'], $proid); } $log_option = Const_HzLog::PAUSEPLAN; $new_is_valid = Const_HzPlan::MENUPAUSE; $basic_info = $prop['content_basic']; //更新房源计划信息 if (Dao_Broker_HzProp::change_prop_status($proid, Const_HzStatus::OUTLINE)) { //更新房源状态 if (Dao_Broker_HzPlan::update_planning($planning[0]['id'], $new_is_valid)) { //更新关联关系 Dao_Broker_HzPlan::add_prop_log($proid, $log_option, $basic_info['userid'], $plan_id, $basic_info['status'], Const_HzStatus::OUTLINE); //记房源日志 if ($basic_info['status'] == Const_HzStatus::ONLINE) { //插入solr队列,房源下线 Dao_Broker_HzProp::into_prop_lucene($proid, $basic_info['cityid'], 2); //写日志 Dao_Broker_HzProp::ezft_assistant_log($planning[0]['proid'], $basic_info['userid'], Const_HzPlan::SPREAD_TYPE, $basic_info['spread_type']); Dao_Broker_HzProp::add_updown_log($planning[0]['proid'], $plan_id, Const_HzStatus::GOOFFLINE, $log_option); } // 记录房源定价上下架记录 Bll_ProPlanChangeApiBll::get_instance()->insertProPlanChange(array('broker_id' => $ajkBrokerId, 'pro_id' => $proid, 'plan_id' => $plan_id, 'type' => 'pro_del_from_plan', 'from' => 'hz_' . __CLASS__ . '_' . __FUNCTION__, 'remark' => json_encode(array('fix' => array('plan_status' => $plan_info['status']))), 'site_type' => 2), $ajkBrokerId); } } } $flag_array['status'] = 1; return $flag_array; } $flag_array['msg'] = Const_HzErrorInfo::DATAFAIL; return $flag_array; }
/** * 修复 `ajk_broker_main_business` 表 * * @param $hzBrokerId * @param $ajkBrokerId * @param $memberId * @return bool */ private function repairBrokerMainBusiness($hzBrokerId, $ajkBrokerId, $memberId) { // TODO 修复 `ajk_broker_main_business` 表 $hzMainBusiness = Model_Broker_MainBusiness::getMainBusinessByHzBrokerId($hzBrokerId, false); $ajkMainBusiness = Model_Broker_MainBusiness::getMainBusinessByAjkBrokerId($ajkBrokerId, false); if (empty($hzMainBusiness) && empty($ajkMainBusiness)) { if (Model_Broker_MainBusiness::addMainBusiness($memberId, $hzBrokerId, $ajkBrokerId) == 0) { $this->log(sprintf('添加经纪人`ajk_broker_main_business`关系映射(%d, %d, %d)失败', $memberId, $ajkBrokerId, $hzBrokerId)); return false; } $this->log(sprintf('添加经纪人`ajk_broker_main_business`关系映射(%d, %d, %d)成功', $memberId, $ajkBrokerId, $hzBrokerId)); return true; } if ($hzMainBusiness['id'] == $ajkMainBusiness['id']) { $this->log(sprintf('添加经纪人`ajk_broker_main_business`关系映射(%d, %d, %d)正确,无须修复', $memberId, $ajkBrokerId, $hzBrokerId)); return true; } if (!empty($hzMainBusiness) && !empty($ajkMainBusiness)) { if ($hzMainBusiness['jpBrokerid'] == 0 && $ajkMainBusiness['jpBrokerid'] != 0) { $jpBrokerid = $ajkMainBusiness['jpBrokerid']; } elseif ($ajkMainBusiness['jpBrokerid'] == 0 && $hzMainBusiness['jpBrokerid'] != 0) { $jpBrokerid = $hzMainBusiness['jpBrokerid']; } else { $jpBrokerid = 0; } Model_Broker_MainBusiness::deleteMainBusinessById($hzMainBusiness['id']); Model_Broker_MainBusiness::deleteMainBusinessById($ajkMainBusiness['id']); if (Model_Broker_MainBusiness::addMainBusiness($memberId, $hzBrokerId, $ajkBrokerId, $jpBrokerid) == 0) { $this->log(sprintf('添加经纪人`ajk_broker_main_business`关系映射(%d, %d, %d)失败2', $memberId, $ajkBrokerId, $hzBrokerId)); return false; } $this->log(sprintf('添加经纪人`ajk_broker_main_business`关系映射(%d, %d, %d)成功2', $memberId, $ajkBrokerId, $hzBrokerId)); return true; } if (!empty($hzMainBusiness)) { $updateData = array('ajkBrokerid' => $ajkBrokerId, 'memberId' => $memberId); if (Model_Broker_MainBusiness::updateMainBusinessById($hzMainBusiness['id'], $updateData) == 0) { $this->log(sprintf('更新经纪人`ajk_broker_main_business`(%d)关系映射(%d, %d, %d)失败', $hzMainBusiness['id'], $memberId, $ajkBrokerId, $hzBrokerId)); return false; } $this->log(sprintf('更新经纪人`ajk_broker_main_business`(%d)关系映射(%d, %d, %d)成功', $hzMainBusiness['id'], $memberId, $ajkBrokerId, $hzBrokerId)); return true; } if (!empty($ajkMainBusiness)) { $updateData = array('hzBrokerid' => $hzBrokerId); if (Model_Broker_MainBusiness::updateMainBusinessById($ajkMainBusiness['id'], $updateData) == 0) { $this->log(sprintf('更新经纪人`ajk_broker_main_business`(%d)关系映射(%d, %d, %d)失败2', $ajkMainBusiness['id'], $memberId, $ajkBrokerId, $hzBrokerId)); return false; } $this->log(sprintf('更新经纪人`ajk_broker_main_business`(%d)关系映射(%d, %d, %d)成功2', $ajkMainBusiness['id'], $memberId, $ajkBrokerId, $hzBrokerId)); return true; } return true; }
public function handle_request_internal() { $brokerId = $this->_params['brokerId']; // 判断经纪人是否存在 $broker = Model_Broker_AjkBrokerExtend::findWithBrokerId($brokerId); $hzBrokerId = Model_Broker_MainBusiness::getHzBrokerIdByAjkBrokerId($brokerId); if (!$hzBrokerId || !$broker) { throw new Exception_Broker_NotFound('BrokerId: ' . $brokerId); } // 判断城市是否开通竞价业务 $cityId = $broker['cityId']; if (!Bll_City::isBidCity($cityId)) { throw new Exception_City_NotBidCity('CityId: ' . $cityId); } // 获取竞价房源 $finalProps = array(); $bidProps = Bll_HzBidPlan::get_broker_bidprop($hzBrokerId, $cityId); foreach ($bidProps as $bidProp) { $row = array(); $row['propId'] = $bidProp['proid']; $row['title'] = $bidProp['prop']['content_basic']['title']; $row['imgUrl'] = ''; $row['commId'] = $bidProp['prop']['content_basic']['commid']; $row['commName'] = $bidProp['prop']['content_basic']['commname']; $row['roomNum'] = $bidProp['prop']['content_basic']['roomnum']; $row['hallNum'] = $bidProp['prop']['content_basic']['hallnum']; $row['toiletNum'] = $bidProp['prop']['content_basic']['toilnetnum']; $row['area'] = round($bidProp['prop']['content_basic']['areanum']); $row['price'] = round($bidProp['prop']['content_basic']['pricenum']); $row['priceUnit'] = "元/月"; $row['totalClicks'] = 0; $row['isBid'] = 1; $row['isChoice'] = 0; $row['isVisible'] = (int) ($bidProp['content_basic']['status'] != 6); $row['isMoreImg'] = (int) $bidProp['content_basic']['quality']; $row['isPhonePub'] = (int) (isset($bidProp['content_basic']['from']) && $bidProp['content_basic']['from'] == 'mobile-ajk-broker'); // TODO 批量判定 增加委托房源标签 $isEntrust = Bll_Zufang_Choice::isCommissionHouse($bidProp['proid'], $brokerId, Model_House_Commission::TYPE_RENT); if ($isEntrust) { $row['isEntrust'] = 1; } else { $row['isEntrust'] = 0; } // 确认房源分组 // TODO 基于Rank获取分组可能对页面速度有一定影响 $row['rank'] = $bidProp['rank']; if ($row['rank'] === '已暂停') { $row['group'] = 'offline'; } elseif ($row['rank'] === '排队中') { $row['group'] = 'queued'; } else { $row['group'] = 'online'; } $finalProps[$row['propId']] = $row; } if ($finalProps) { $propIds = array_keys($finalProps); // 批量获取房源的默认图片 $defaultImages = Model_Image_HzImage::getDefaultImagesByHouseIds($propIds); foreach ($defaultImages as $defaultImage) { $finalProps[$defaultImage['proid']]['imgUrl'] = $defaultImage->imageUrl(); } // 批量获取房源的竞价总点击 $bidClicks = Model_Stats_PropClick::getPropAllClicks($propIds, $brokerId, $cityId); $bidClickSums = Model_Stats_PropClick::calculateClickSumsGroupByPropId($bidClicks, 'bid'); foreach ($bidClickSums as $propId => $bidClickSum) { $finalProps[$propId]['totalClicks'] = $bidClickSum; } } // 排序 • 按ID倒序 ksort($finalProps); // 分组 $props = array('onlinePropertyList' => array(), 'queuedPropertyList' => array(), 'offlinePropertyList' => array()); foreach ($finalProps as $finalProp) { switch ($finalProp['group']) { case 'online': $props['onlinePropertyList'][] = $finalProp; break; case 'queued': $props['queuedPropertyList'][] = $finalProp; break; case 'offline': $props['offlinePropertyList'][] = $finalProp; break; } } return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => $props); }
/** * @param $ajkPropSpread * @param int $doBucket 0-不处理,1-坑位数加一,-1-坑位数减一 * @return bool * 精选计算排名 */ public function choiceComputeRank($blockId, $priceId) { //获取坑位表信息 $bucketInfo = Model_Choice_HzBidBucket::get_bucket_info($blockId, $priceId); if (empty($bucketInfo)) { return array('未知的坑位表信息,blockId:' . $blockId . ' priceId:' . $priceId); } //获取坑里面的推广、排队的计划 $bidPlanInfo = Model_Plan_HzPlanBasic::getChoiceQueuePlanByBucket($blockId, $priceId, array(Const_HzPlan::SPREAD, Const_HzPlan::WAITING)); if (empty($bidPlanInfo)) { return array('未获取到同板块、价格段的房源。blockId:' . $blockId . ' priceId:' . $priceId); } $tmpRemark = array(); //遍历坑里面的数据,计算排名 foreach ($bidPlanInfo as $key => $list) { $broker = Model_Broker_MainBusiness::getMainBusinessByHzBrokerId($list['user_id'], false); if ($key < $bucketInfo['maxOnlineNum']) { //预期推广中的数据 if ($list['status'] == Const_HzPlan::WAITING) { //更新租房排队中的计划为推广中 Model_Plan_HzPlanBasic::updatePlanStatus($list['id'], Const_HzPlan::SPREAD); //更新租房排队中的计划为推广中 Model_Plan_HzPlanning::updatePlanningByPlanId($list['id'], Const_HzPlan::SPREAD, Const_HzPlan::BID_TYPE); //查询精选关系表信息(获取到房源id) $bidPlanProInfo = Model_Plan_HzPlanning::getPlanByPlanId($list['id']); if (!empty($bidPlanProInfo)) { //更新房源状态 Dao_Broker_HzProp::change_prop_status($bidPlanProInfo['proid'], Const_HzStatus::ONLINE); } //通知solr队列上 Dao_Broker_HzProp::into_prop_lucene($bidPlanProInfo['proid'], $bidPlanProInfo['city_id'], 1); //记录房源日志 Model_Log_HouseLogNew::create(array('houseId' => $bidPlanProInfo['proid'], 'planId' => $bidPlanProInfo['plan_id'], 'brokerId' => $broker['ajkBrokerid'], 'cityId' => $bidPlanProInfo['city_id'], 'type' => 14, 'changeType' => '40' . self::$qInfo['actionId'], 'remark' => '计划' . self::$qInfo['planId'] . self::$actionStr[self::$qInfo['actionId']] . ';重新计算价格段内排名,精选推广', 'operatorId' => self::$qInfo['operationId'], 'siteType' => 2), date('Ymd'))->save(); $tmpRemark[] = 'planId:' . $bidPlanProInfo['plan_id'] . '变更为推广'; } } /* else { //预期排队的数据 if ($list['status'] == Const_HzPlan::SPREAD) { //更新租房排队中的计划为推广中 Model_Plan_HzPlanBasic::updatePlanStatus($list['id'], Const_HzPlan::WAITING); //更新租房排队中的计划为推广中 Model_Plan_HzPlanning::updatePlanningByPlanId($list['id'], Const_HzPlan::WAITING, Const_HzPlan::BID_TYPE); //查询精选关系表信息(获取到房源id) $bidPlanProInfo = Model_Plan_HzPlanning::getPlanByPlanId($list['id']); if (!empty($bidPlanProInfo)) { //查询定价的信息,定价推广中的话,房源状态更新为1 $fixPlanProInfo = Model_Plan_HzPlanning::getBrokerPro($bidPlanProInfo['proid'], Const_HzPlan::SPREAD_TYPE); if (isset($fixPlanProInfo[0]['is_valid']) && $fixPlanProInfo[0]['is_valid'] == Const_HzPlan::SPREAD) { $proStatus = Const_HzStatus::ONLINE; //推广 //更新房源状态 Dao_Broker_HzProp::change_prop_status($bidPlanProInfo['proid'], $proStatus); } } //通知solr队列上 Dao_Broker_HzProp::into_prop_lucene($bidPlanProInfo['proid'], $bidPlanProInfo['city_id'], $proStatus); //记录房源日志 Model_Log_HouseLogNew::create(array( 'houseId' => $bidPlanProInfo['proid'], 'planId' => $bidPlanProInfo['plan_id'], 'brokerId' => $broker['ajkBrokerid'], 'cityId' => $bidPlanProInfo['city_id'], 'type' => 13, //13-精选排队中,14-精选推广,15-取消精选推广,16-取消精选排队 'changeType' => '40' . self::$qInfo['actionId'], 'remark' => '计划' . self::$qInfo['planId'] . self::$actionStr[self::$qInfo['actionId']] . ';重新计算价格段内排名,精选排队中', 'operatorId' => self::$qInfo['operationId'], 'siteType' => 2, ), date('Ymd'))->save(); $tmpRemark[] = 'planId:' . $bidPlanProInfo['plan_id'] . '变更为排队中'; } } */ } if (empty($tmpRemark)) { $tmpRemark[] = '未找到需要变更的计划'; } return $tmpRemark; }
public function handle_request_internal() { $brokerId = $this->_params['brokerId']; $propId = $this->_params['propId']; // 判断经纪人是否存在 $broker = Model_Broker_AjkBrokerExtend::findWithBrokerId($brokerId); $hzBrokerId = Model_Broker_MainBusiness::getHzBrokerIdByAjkBrokerId($brokerId); if (!$hzBrokerId || !$broker) { throw new Exception_Broker_NotFound('BrokerId: ' . $brokerId); } // 判断城市是否开通竞价业务 $cityId = $broker['cityId']; if (!Bll_City::isBidCity($cityId)) { throw new Exception_City_NotBidCity('CityId: ' . $cityId); } // 获取房源信息 $prop = Model_House_HzProp::findByPropId($propId); /* @var Model_House_HzProp $prop */ if (!$prop) { throw new Exception_Property_NotFound("Zufang propId: {$propId}"); } // TODO 是否需要判断房源是否已删除 // 判断房源是否属于经纪人 if ($prop->getContentBasic('userid') != $hzBrokerId) { throw new Exception_Property_NotFound("Zufang propId: {$propId} not belog to broker: {$brokerId}"); } // 准备默认返回数据(房源未竞价) $data = array('planId' => 0, 'status' => 0, 'rank' => -1, 'rankMsg' => '已暂停', 'todayClicks' => 0, 'totalClicks' => 0, 'clickPrice' => 0, 'clickPriceUnit' => '元', 'minClickPrice' => $prop->getBidMinClickPrice(), 'minClickPriceUnit' => '元', 'budget' => 0, 'budgetUnit' => '元', 'budgetRemain' => 0, 'budgetRemainUnit' => '元'); // 获取竞价计划 $bidPlan = $prop->getBidPlan(); if (!$bidPlan) { // 判断房源是否多图房源 if (!$prop->isMultiImages()) { throw new Exception_Property_NotMultiImages("Zufang propId: {$propId}"); } // TODO 判断是否定价推广(也许可以不用,因为只有从定价推广房源列表点进去的房源详情页才会请求该接口) } else { // 竞价计划ID $data['planId'] = $bidPlan['id']; // 竞价计划状态 switch ($bidPlan['status']) { case Const_HzPlan::SPREAD: $data['status'] = 1; // 推广中 or 排队中 break; case Const_HzPlan::MENUOVER: $data['status'] = 2; // 已暂停 break; } // 竞价预算 $data['budget'] = round($bidPlan['amount'], 2); // 竞价预算余额 $data['budgetRemain'] = round($bidPlan['amount'] - $bidPlan['total_consume'], 2); // 竞价排名 if ($data['status'] == 1) { $data['rank'] = Bll_HzBidPlan::get_bid_rank($prop->getContentBasic(), $cityId); if ($data['rank'] <= 5) { $data['rankMsg'] = ''; } else { $data['rankMsg'] = '排队中'; } } // 竞价点击单价 $bidRelation = $prop->getBidRelation(); $data['clickPrice'] = round($bidRelation['unit_price'], 2); // 竞价点击底价 $data['minClickPrice'] = round($prop->getBidMinClickPrice(), 2); // 今日竞价点击量 $data['todayClicks'] = $prop->getTodayClickSums('bid'); // 竞价点击总量 $data['totalClicks'] = $prop->getTotalClickSums('bid'); } return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => $data); }
public static function getBrokerMap($brokerId) { try { $brokerMap = Model_Broker_MainBusiness::data_access()->filter('ajkBrokerid', $brokerId)->get_row(); } catch (Exception $e) { return array(); } return $brokerMap; }