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 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; }
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' => '元')); }
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; }
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')); }
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; }
/** * 获取竞价多个房子当日总点击(多个) * @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; }
public function getTotalClickSums($type = null) { $clicks = Model_Stats_PropClick::getPropAllClicks($this->propId, $this->getContentBasic('userid'), $this->getContentBasic('cityid')); return $this->calculateClickSums($clicks, $type); }
/** * 根据经纪人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; }
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; }
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; }
/** * 获取房源点击效果 * @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; }