Beispiel #1
0
 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));
 }
Beispiel #2
0
 public static function getPropClicksByPropId($propId, $brokerId, $cityId)
 {
     if (!is_array($propId)) {
         $propId = array($propId);
     }
     $propSearchInfos = Model_House_HzPropSearch::getPropList($propId, $brokerId, $cityId);
     if (empty($propSearchInfos)) {
         return array();
     }
     $newPropIds = array();
     foreach ($propSearchInfos as $propSearchInfo) {
         $newPropIds[] = $propSearchInfo['proid'];
     }
     $propClicks = Model_Stats_PropClick::getPropBidClick($newPropIds, $brokerId, $cityId, date('Ymd'));
     if (empty($propClicks)) {
         return array();
     }
     $result = array();
     foreach ($propClicks as $propClick) {
         if (!isset($result[$propClick['prop_id']])) {
             $result[$propClick['prop_id']]['clickNum'] = $propClick['bid_cnum'];
         } else {
             $result[$propClick['prop_id']]['clickNum'] += $propClick['bid_cnum'];
         }
     }
     return $result;
 }
Beispiel #3
0
 public function handle_request_internal()
 {
     $ajkBrokerId = $this->_params['brokerId'];
     //根据安居客经纪人ID获取好租经纪人ID
     $hzBrokerId = Bll_HzBroker::get_brokerid_by_ajk_brokerid($ajkBrokerId);
     //获取租房定价信息
     $fixPlansInfo = Bll_HzFixPlan::get_broker_fixplans($hzBrokerId);
     //获取竞价计划状态
     $fixPlanStatus = $fixPlansInfo[0]['status'] == 1 ? V1_Zufang_Fix_SummaryController::RETURN_CODE_NUM_1 : V1_Zufang_Fix_SummaryController::RETURN_CODE_NUM_0;
     //获取计划ID
     $fixPlanId = $fixPlansInfo[0]['id'];
     $cityId = $fixPlansInfo[0]['city_id'];
     //获取租房点击和花费信息
     $promotion = Dao_Broker_HzPlan::get_plan_fee($hzBrokerId, $fixPlanId, date('Ymd'), 1);
     // 获取租房今日点击
     $fixPropIds = Model_Plan_HzPlanning::getFixPropIdsByPlanId($fixPlanId);
     $clicks = Model_Stats_PropClick::getPropBidClick($fixPropIds, $hzBrokerId, $cityId);
     $fixClickSums = Model_Stats_PropClick::calculateClickSumsGroupByPropId($clicks, 'fix');
     $todayClicks = 0;
     foreach ($fixClickSums as $clickSum) {
         $todayClicks += $clickSum;
     }
     //租房某计划的房源总量
     $totalProps = Model_Plan_HzPlanning::getFixPlanPropNum($fixPlanId);
     //查询经纪人新封顶模式信息
     //todo 等多档封顶合并了方法迁移到多档封顶
     $ppcLimitInfo = $this->getPpcBrokerLimitInfo($ajkBrokerId, V1_Zufang_Fix_SummaryController::PPC_BROKER_LIMIT_HZ_SITE);
     if (!$ppcLimitInfo) {
         return array('status' => Const_APIStatus::RETURN_CODE_ERROR, 'errcode' => Const_APIStatus::E_SYS_ERR, 'message' => '封顶数据未能取到!');
     }
     $todayConsume = $promotion[$fixPlanId]['total_cost'] ? $promotion[$fixPlanId]['total_cost'] : 0;
     return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => array('planId' => $fixPlanId, 'todayClicks' => $todayClicks, 'todayConsume' => Util_Formatter::formatTodayConsume($todayConsume), 'todayConsumeUnit' => '元', 'totalProps' => $totalProps, 'planStatus' => $fixPlanStatus, 'budget' => $ppcLimitInfo['amountLimit'] / 100, 'budgetUnit' => '元'));
 }
Beispiel #4
0
 public function get_prop_choice_clicks($propId, $cityId)
 {
     $table = Model_Stats_PropClick::getTableName($cityId);
     $sql = "select SUM(bid_cnum) AS bidClicks from {$table} where prop_id = ?";
     $value = array($propId);
     $da = Model_Stats_PropClick::data_access($cityId);
     $result = $da->native_sql($sql, $value);
     return $result;
 }
Beispiel #5
0
 public static function prepareChoiceList(&$out)
 {
     // $out['bidList'] = array();
     // $out['bidProIds'] = array();
     $out['choiceProIds'] = $out['choiceProps'] = $out['choiceComsume'] = array();
     // 目前需要获取精选房源id列表 供页面判断使用
     // 获取精选计划
     $validChoicePlans = Model_Plan_HzPlanBasic::getValidBidPlansEx($out['ajkBrokerId'], Const_HzPlan::BID_VERSION_CHOICE);
     if (empty($validChoicePlans)) {
         return;
     }
     $planIds = array();
     foreach ($validChoicePlans as $plan) {
         $planIds[] = $plan['id'];
     }
     // 获取关系
     $choicePlannings = Model_Plan_HzPlanning::getPlanningByPlanIds($planIds);
     if (empty($choicePlannings)) {
         return;
     }
     foreach ($choicePlannings as $choicePlanning) {
         $out['choiceProIds'][] = $choicePlanning['proid'];
         $out['choiceProps'][$choicePlanning['proid']]['choiceStatus'] = $choicePlanning['is_valid'];
         $out['choiceProps'][$choicePlanning['proid']]['planId'] = $choicePlanning['plan_id'];
     }
     // 获取精选消费信息
     //$out['choiceComsume'] = Bll_Plan_Bid_HzBid::getBidPlanConsumeAndClickInfos($planIds, date('Ymd'));
     $out['choiceComsume'] = Model_Stats_PropClick::getBillingInfo($out['hzBrokerId'], $out['cityId'], date('Ymd'));
 }
Beispiel #6
0
 public static function get_prop_total_clicks($proids, $city_id)
 {
     $proids = is_array($proids) ? $proids : array($proids);
     $re = Model_Stats_PropClick::data_access($city_id)->load_field(array('fix_cnum', 'bid_cnum'))->filter_by_op('prop_id', 'in', $proids)->get_all();
     $return = array();
     if ($re) {
         foreach ($re as $v) {
             $return[$v['prop_id']]['fix_total_cnum'] += intval($v['fix_cnum']);
             $return[$v['prop_id']]['bid_total_cnum'] += intval($v['bid_cnum']);
         }
     }
     return $return;
 }
Beispiel #7
0
 /**
  * 获取竞价多个房子当日总点击(多个)
  * @param $propIds
  * @param $cityId
  * @param $brokerId
  * @return array
  */
 public static function getPropsBidClick($propIds, $cityId, $brokerId)
 {
     if (!is_array($propIds)) {
         $propIds = explode(',', $propIds);
     }
     $propsClickInfo = Model_Stats_PropClick::getPropBidClick($propIds, $brokerId, $cityId);
     $result = array();
     // 初始化
     foreach ($propIds as $propId) {
         $result[$propId] = 0;
     }
     if (empty($propsClickInfo)) {
         return $result;
     }
     foreach ($propsClickInfo as $propClick) {
         $result[$propClick['prop_id']] += $propClick['bid_cnum'];
     }
     return $result;
 }
Beispiel #8
0
 public function getTotalClickSums($type = null)
 {
     $clicks = Model_Stats_PropClick::getPropAllClicks($this->propId, $this->getContentBasic('userid'), $this->getContentBasic('cityid'));
     return $this->calculateClickSums($clicks, $type);
 }
Beispiel #9
0
 /**
  * 根据经纪人ID获取房源点击详情
  *
  * @param int $brokerId
  * @param int $cityId
  * @param string $date
  * @return array
  */
 public static function getClickInfoByBrokerId($brokerId, $cityId, $date = '')
 {
     if (empty($date)) {
         $date = date('Ymd');
     }
     try {
         $clicksInfo = Model_Stats_PropClick::data_access($cityId)->filter('datei', $date)->filter('broker_id', $brokerId)->find();
     } catch (Exception $e) {
         return array();
     }
     if (is_null($clicksInfo)) {
         return array();
     }
     return $clicksInfo;
 }
Beispiel #10
0
 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 $brokerId
  * @param $startDate
  * @param $endDate
  */
 public static function getBrokerBidClickHz($brokerId, $cityId, $startDate, $endDate)
 {
     $startDate = date('Ymd', strtotime($startDate));
     $endDate = date('Ymd', strtotime($endDate));
     $brokerMapping = Bll_Broker_MainBusiness::getDataByEsfId($brokerId);
     $result = array();
     for ($day = $startDate; $day <= $endDate; $day = date("Ymd", strtotime($day) + 86400)) {
         $hzDayBidClick = Model_Stats_PropClick::getClickInfoByBrokerId($brokerMapping['hzBrokerid'], $cityId, $day);
         foreach ($hzDayBidClick as $list) {
             if (isset($result[$day])) {
                 $result[$day] += $list['bid_cnum'];
             } else {
                 $result[$day] = $list['bid_cnum'];
             }
         }
     }
     return $result;
 }
Beispiel #12
0
 private static function preparePropInfo(&$out)
 {
     // 获取房源
     $propResult = Bll_House_HzHouse::getPropInfo($out['proId'], $out['cityId'], 3);
     if (!$propResult['status']) {
         throw new Exception($propResult['msg']);
     }
     $propInfo = $propResult['msg'];
     // 检查并拼接违规信息
     $illegalInfo = Bll_HzProp::checkAndGetPropsIllegalInfos(array($out['proId'] => $propInfo));
     $propInfo = $illegalInfo[$out['proId']];
     // 获取剩余时间
     $propInfo['leftDays'] = Bll_House_HzHouse::getLeftDays($propInfo['created']);
     // 获取房源图片数
     $imageInfo = Bll_House_HzHouse::getPropImages($out['proId']);
     $propInfo['imageInfo'] = $imageInfo;
     // 房源默认图片 (默认优先封面图 -》 第一张室内图 -》 房型)
     //$propInfo['propDefaultImg'] = Bll_House_HzHouse::getPropDefaultImgWithUrl($out['proId']);
     $propInfo['propDefaultImg'] = self::getThumbImg($imageInfo);
     // 获取房源可优化项
     $propInfo['canImproveItems'] = self::getPropCanImproveItems($propInfo, $imageInfo);
     // 是否手机发房
     $propInfo['isMobile'] = isset($propInfo['from']) ? Bll_House_HzHouse::isMobileProp($propInfo['from']) : false;
     // 此房源全部点击数据
     $propInfo['propAllClick'] = Model_Stats_PropClick::getPropAllClicks($out['proId'], $out['hzBrokerId'], $out['cityId']);
     // 此房源全部曝光数据
     $propInfo['propAllShow'] = Bll_House_HzHouse::getPropShow($out['proId'], $out['cityId']);
     // 此房源质量
     $propQuality = Model_Stats_HzPropQuality::getPropsquality($out['proId']);
     $propInfo['propsQuality'] = $propQuality ? $propQuality[$out['proId']] : array();
     // 根据blockid 获取对应code
     $areaInfo = Model_City_HzArea::getAreaById($propInfo['blockid']);
     $propInfo['typeCode'] = $areaInfo['typeCode'];
     return $propInfo;
 }
Beispiel #13
0
 /**
  * 获取房源点击效果
  * @param $proId
  * @param $cityId
  * @param int $getDays
  * @return array|bool|string
  */
 public static function getPropEffect($proId, $cityId, $getDays = 7)
 {
     if (!$proId || !$cityId) {
         return false;
     }
     $today = date('Ymd');
     $key = sprintf('%s_%s_%d__%d_', __CLASS__, __METHOD__, $today, $proId);
     $cacheObj = APF_Cache_Factory::get_instance()->get_memcache();
     $result = $cacheObj->get($key);
     $arrDays = array();
     $time = time();
     $start = $time - ($getDays - 1) * 86400;
     for ($i = $start; $i < $time; $i += 86400) {
         $arrDays[] = date('Ymd', $i);
     }
     if ($result === false && $getDays > 1) {
         $result = array();
         foreach ($arrDays as $day) {
             $effectResult = Model_Stats_PropClick::getPropEffectByProId($proId, $cityId, $day);
             if (!empty($effectResult)) {
                 $result[$day]['totalCost'] = (int) $effectResult['total_cost'];
                 $result[$day]['totalClick'] = (int) $effectResult['total_click'];
                 $result[$day]['totalFixCost'] = (int) $effectResult['total_fix_cost'];
                 $result[$day]['totalFixClick'] = (int) $effectResult['total_fix_click'];
                 $result[$day]['totalBidCost'] = (int) $effectResult['total_bid_cost'];
                 $result[$day]['totalBidClick'] = (int) $effectResult['total_bid_click'];
             } else {
                 $result[$day]['totalCost'] = 0;
                 $result[$day]['totalClick'] = 0;
                 $result[$day]['totalFixCost'] = 0;
                 $result[$day]['totalFixClick'] = 0;
                 $result[$day]['totalBidCost'] = 0;
                 $result[$day]['totalBidClick'] = 0;
             }
         }
         $cacheObj->set($key, $result, 0, self::EXPIRE_TIME);
     }
     // 当天数据不做缓存
     $effectResult = Model_Stats_PropClick::getPropEffectByProId($proId, $cityId, $today);
     $result[$today]['totalCost'] = isset($effectResult['total_cost']) ? $effectResult['total_cost'] : 0;
     $result[$today]['totalClick'] = isset($effectResult['total_click']) ? $effectResult['total_click'] : 0;
     $result[$today]['totalFixCost'] = isset($effectResult['total_fix_cost']) ? $effectResult['total_fix_cost'] : 0;
     $result[$today]['totalFixClick'] = isset($effectResult['total_fix_click']) ? $effectResult['total_fix_click'] : 0;
     $result[$today]['totalBidCost'] = isset($effectResult['total_bid_cost']) ? $effectResult['total_bid_cost'] : 0;
     $result[$today]['totalBidClick'] = isset($effectResult['total_bid_click']) ? $effectResult['total_bid_click'] : 0;
     return $result;
 }