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);
     }
 }
Exemplo n.º 2
0
 public static function getBackRows($house_id, $type)
 {
     $da = Bll_House_JpHouseInfo::get_back_data_access($house_id, $type);
     $results = $da->get_all();
     unset($da);
     if ($results) {
         $domainPre = APF::get_instance()->get_config('ImageDisplayURLPrefixDFS', 'image');
         $baseDomain = APF::get_instance()->get_config('ImageUploadURLBaseDomainDFS', 'image');
         $verify_image_type = APF::get_instance()->get_config('verify_image_type', 'image');
         foreach ($results as $key => $item) {
             $item['url'] = 'http://' . $domainPre . $item['hostId'] . '.' . $baseDomain . '/display/' . $item['key'] . '/';
             //缺少大小后缀
             $item['back_info'] = self::get_verify_info($item['id'], $type);
             if ($item['back_info']) {
                 if ($item['back_info']['backType'] != 40) {
                     $item['back_title'] = $verify_image_type[$item['back_info']['backType']]['title'];
                 } else {
                     $item['back_title'] = $item['back_info']['backInfo'];
                 }
             }
             $results[$key] = $item;
         }
     }
     return $results;
 }
Exemplo n.º 3
0
 private static function preparePropInfo(&$out)
 {
     $out['propInfo'] = Bll_House_JpHouseInfo::getHouseInfoExt($out['proId']);
     if ($out['propInfo']['info']['isDelete'] == 1) {
         //房源删除 跳转管理页面
         APF::get_instance()->get_response()->redirect('/ajkbroker/combo/broker/manage/jp');
     }
     // 获取房源图片数 默认图片url
     $imageInfo = BLL_House_JpHouseManage::getPropImageInfo($out['proId'], $out['propInfo']['houseType']);
     $out['imgInfo'] = $imageInfo;
     //获取物业名称
     $propertyId = $out['propInfo']['houseType'] > 2 ? $out['propInfo']['info']['propertyId'] : $out['propInfo']['info']['buildingId'];
     $propertyInfo = Model_House_JpProperty::data_access()->filter('id', intval($propertyId))->get_row();
     $out['propertyName'] = $propertyInfo['name'];
     //房源的最近七天点击量/花费
     $clickAll = BLL_House_JpHouseManage::get7DaysHouseClick($out['proId']);
     //套餐房源点击量
     $comboClick = array();
     if ($out['isComboBroker']) {
         $comboClickInfo = Bll_Combo_Broker_BrokerComboInfo::getHouseComboClickEx($out['proId'], date('Y-m-d', strtotime('-6 days')), date('Y-m-d'), Model_Ppc_NewPackageStatsHouseDay::SITE_TYPE_JP);
         $comboClick = $comboClickInfo[$out['proId']];
         //var_dump($comboClick);die;
     }
     $out['comboClick'] = $comboClick;
     $out['clickAndCost'] = $clickAll;
 }
Exemplo n.º 4
0
 public static function stopJpBidData($list)
 {
     $checkList = self::checkList($list);
     if (!$checkList['status']) {
         return $checkList;
     }
     $planInfo = Model_Plan_Jp::data_access()->filter('id', $list['planId'])->find_only();
     if ($planInfo->isDelete == Model_Plan_Jp::ENUM_IS_DELETE_YES) {
         return Bll_HzPropBll::build_return(0, '无效的竞价计划' . json_encode($list));
     }
     if ($planInfo->status != Model_Plan_Jp::ENUM_STATUS_ONLINE) {
         return Bll_HzPropBll::build_return(0, '竞价计划不在推广中' . json_encode($list));
     }
     if ($planInfo->type != Model_Plan_Jp::ENUM_TYPE_BID) {
         return Bll_HzPropBll::build_return(0, '竞价计划类型有误' . json_encode($list));
     }
     if (!in_array($planInfo->bidVersion, array(Model_Plan_Jp::BIDVERSION_OLD, Model_Plan_Jp::BIDVERSION_CHOICE))) {
         return Bll_HzPropBll::build_return(0, '竞价计划version error' . json_encode($list));
     }
     $houseIdx = Model_House_JpHouseIdx::data_access()->filter('id', $planInfo['houseId'])->find_only();
     if (empty($houseIdx)) {
         return Bll_HzPropBll::build_return(0, '金铺房源信息没有' . json_encode($list));
     }
     if ($houseIdx->bidSpreadId != $planInfo->id) {
         return Bll_HzPropBll::build_return(0, '金铺房源信息有误bidSpreadId' . json_encode($list));
     }
     $houseIdx->bidSpreadId = 0;
     if (!$houseIdx->save()) {
         return Bll_HzPropBll::build_return(0, '金铺房源信息更新失败' . json_encode($list));
     }
     //发送结算
     $params = array();
     $params['spread_id'] = $planInfo->id;
     $params['log_status'] = 7;
     Bll_Plan_Bid_JpSettlement::getInstance()->settlement($params, 'bid');
     $planInfo->status = Model_Plan_Jp::ENUM_STATUS_OVER;
     $planInfo->isDelete = 1;
     $planInfo->updateTime = date('Y-m-d H:i:s');
     if (!$planInfo->save()) {
         return Bll_HzPropBll::build_return(0, '金铺计划信息更新失败' . json_encode($list));
     }
     //房源下架tosolr
     Bll_House_JpHouseInfo::updateHouseToSolr(1, $planInfo->houseId, 1);
     //通知更新q_spread_bid_update表 计算竞价系数
     Model_Plan_JpSpreadBidUpdate::setBidUpdateQ($planInfo->id);
     //记录房源日志
     $data = array('houseId' => $houseIdx->id, 'planId' => $planInfo->id, 'brokerId' => $list['brokerId'], 'cityId' => $planInfo->cityId, 'type' => 15, 'changeType' => 407, 'remark' => '房源' . $houseIdx->id . '移出定价计划/取消套餐推广。竞价' . $planInfo->id . '(id)取消竞价推广。', 'addDate' => date('Y-m-d H:i:s'), 'operatorId' => $list['operationId'], 'siteType' => 3);
     if (!Model_Log_HouseLogNew::create($data, date('Ymd'))->save()) {
         return Bll_HzPropBll::build_return(0, array("日志写入失败"));
     }
     return Bll_HzPropBll::build_return(1, array('竞价' . $planInfo->id . '(id)取消竞价推广。'));
 }
Exemplo n.º 5
0
 public function DownHouse($brokerId = 0, $promitionHouseNum = 0)
 {
     $brokerId = intval($brokerId);
     $promitionHouseNum = intval($promitionHouseNum);
     if ($brokerId == 0 || $promitionHouseNum == 0) {
         return false;
     }
     //将二手房经纪人ID转成商业地产ID
     $jpBrokerInfoObj = Model_Broker_JpBroker::getJpBrokerInfoByAjkBrokerId($brokerId);
     if (!$jpBrokerInfoObj || $jpBrokerInfoObj->id == 0) {
         return Util_GlobalFunc::buildReturn(0, "该经纪人:{$brokerId}没有找到");
     }
     //获取这个经纪人的有效计划
     $OnlinePlan = Model_Plan_Jp::getOnlinePlanByMemberId($jpBrokerInfoObj->id);
     if (!$OnlinePlan) {
         return Util_GlobalFunc::buildReturn(0, "该经纪人:{$brokerId}没有有效计划");
     }
     $onlineplan = array();
     foreach ($OnlinePlan as $plan) {
         $onlineplan[] = $plan->id;
         $isBidVersion[$plan->id]['bidVersion'] = $plan->bidVersion;
     }
     //获取这些有效计划下的房子
     $houseIdx = Model_House_JpHouseIdx::getHouseInfoByFixPlanId($onlineplan);
     if (!$houseIdx) {
         return Util_GlobalFunc::buildReturn(0, "该经纪人:{$brokerId}有效计划下的房子");
     }
     $housecount = count($houseIdx);
     echo '正在处理商业地产' . $brokerId . ',总推广房源数' . $housecount . ',api中允许推广数量' . $promitionHouseNum;
     $allReturn = array();
     //和套餐的推广房源做比较,如果当前在线推广的房子大于套餐推广房子,则下房源将较早推广的房子下架
     if ($housecount > $promitionHouseNum) {
         $offNum = $housecount - $promitionHouseNum;
         for ($i = $offNum; $i >= 1; $i--) {
             if (empty($houseIdx[$i])) {
                 continue;
             }
             if ($houseIdx[$i]->bidSpreadId) {
                 $resultBid = Bll_House_JpHouseInfo::removeBidHouseFromSpread($houseIdx[$i], $jpBrokerInfoObj->id, 1, false);
                 if (!$resultBid['success']) {
                     $allReturn[] = $resultBid['data'];
                 }
             }
             $resultFix = Bll_House_JpHouseInfo::removeFixHouseFromSpread($houseIdx[$i], $jpBrokerInfoObj->id);
             if (!$resultFix['success']) {
                 $allReturn[] = $resultFix['data'];
             }
         }
     }
     return Util_GlobalFunc::buildReturn(1, $allReturn);
 }
Exemplo n.º 6
0
 public function openSaveBluewhaleHouse($houseId, $date, $spreadId, $spreadType)
 {
     $param = array();
     $HouseInfo = Bll_House_JpHouseInfo::getHouseInfoById($houseId);
     if ($HouseInfo['base']) {
         $param['house_type'] = $HouseInfo['houseType'];
         if (!empty($HouseInfo['info'])) {
             isset($HouseInfo['info']->isQuality) && ($param['is_quality'] = $HouseInfo['info']->isQuality);
             isset($HouseInfo['info']->isExquisite) && ($param['is_exquisite'] = $HouseInfo['info']->isExquisite);
         }
         $param['member_id'] = $HouseInfo['base']->memberId;
         $param['spread_type'] = $spreadType;
         return $this->saveBluewhaleHouse($houseId, $date, $spreadId, $param);
     }
     return false;
 }
Exemplo n.º 7
0
 /**
  * 金铺-精选房源管理页面
  * 返回值 为页面参数,所以必须是数组
  *
  * @param int $ajkBrokerId
  * @param int $cityId
  * @param array $extraData $request->get_parameters();
  * @return array
  */
 public static function jp_init_manage($ajkBrokerId, $cityId, $extraData = array())
 {
     //$jpBrokerInfo = Model_Broker_JpBroker::getJpBrokerInfoByAjkBrokerId($ajkBrokerId);
     $arrBidSpreadData = Model_Plan_Jp::getBidChoiceInfoEx($cityId, $ajkBrokerId);
     $isSpreadFull = count($arrBidSpreadData) >= self::ALL_JP_PLAN_NUM ? 1 : 0;
     $houseInfoArr = array();
     foreach ($arrBidSpreadData as $spread) {
         $houseId = $spread->houseId;
         //计划Id
         $spreadId = $spread->id;
         //状态
         $status = $spread->status;
         $planOverStatus = $status;
         if ($status == 4 || $status == 3) {
             $status = 14;
         }
         $houseInfoArr[$status][$houseId]['spreadId'] = $spreadId;
         $lChargeSum = Model_Payment_ChargeSum::data_access()->filter('spread_id', $spreadId)->find_only();
         //$clickSum = empty($lChargeSum) ? 0 : $lChargeSum->click_sum;
         $clickSum = Bll_House_JpHouseInfo::get_today_click_info_by_house($houseId);
         $costSum = empty($lChargeSum) ? 0 : $lChargeSum->cost_sum;
         $houseInfoArr[$status][$houseId]['clickSum'] = $clickSum;
         $houseInfoArr[$status][$houseId]['initBudget'] = sprintf('%.2f', $spread->budget / 100);
         $houseInfoArr[$status][$houseId]['budget'] = sprintf('%.2f', ($spread->budget - $costSum) / 100);
         $statusText = Bll_House_JpHouseInfo::formatHouseSpreadStatus($status, $spread);
         $houseInfoArr[$status][$houseId]['status'] = $status;
         $houseInfoArr[$status][$houseId]['planOverStatus'] = $planOverStatus;
         $houseInfoArr[$status][$houseId]['statusText'] = $statusText;
         $houseRelation = Bll_House_JpHouseInfo::getHouseInfoById($houseId);
         $houseType = $houseRelation['houseType'];
         $houseObj = $houseRelation['info'];
         //点击单击
         $houseInfoArr[$status][$houseId]['unit_price'] = sprintf('%.2f', $houseObj->spreadOffer / 100);
         $houseInfoArr[$status][$houseId]['isExquisite'] = $houseObj->isExquisite;
         $houseInfoArr[$status][$houseId]['houseTypeDesShort'] = Bll_House_JpHouseInfo::$arrHouseTypeDes['short'][$houseType];
         $houseInfoArr[$status][$houseId]['title'] = $houseObj->title;
         $houseInfoArr[$status][$houseId]['area'] = $houseObj->area;
         $houseInfoArr[$status][$houseId]['floor_info'] = Bll_House_JpHouseInfo::getHouseFloorInfo(self::convertObjToArray($houseObj), $houseType);
         $houseInfoArr[$status][$houseId]['property_name'] = Bll_House_JpHouseInfo::getHousePropertyName($houseRelation['info'], $houseType);
         $houseInfoArr[$status][$houseId]['url'] = Uri_JPHouse::build_index($cityId, $houseType) . $houseId;
         $houseInfoArr[$status][$houseId]['house_type'] = $houseType;
         $houseInfoArr[$status][$houseId]['price_info'] = Bll_House_JpHouseInfo::getHousePriceInfo(self::convertObjToArray($houseObj), $houseType);
     }
     ksort($houseInfoArr);
     $pageAttributes['isSpreadFull'] = $isSpreadFull;
     $pageAttributes['houseInfo'] = $houseInfoArr;
     return $pageAttributes;
 }
Exemplo n.º 8
0
 /**
  * 通知solr处理
  *
  * <ol>
  * <li>
  * 当房源日志type为房源更新(4),房源推广(5)时,通知solr更新
  * </li>
  * <li>
  * 当房源日志type为取消推广(6),第二天推广(7),取消第二天推广(12)时,通知solr更新
  * </li>
  * </ol>
  */
 public function noticeSolrJp($record)
 {
     $type = $record['type'];
     if (!in_array($type, array(4, 5, 6, 7, 12))) {
         $this->setLog('不需要做solr处理' . __METHOD__);
         return true;
     }
     $result = Bll_House_JpHouseInfo::updateHouseToSolr(1, $record['houseId'], 1);
     if ($result) {
         //记录处理日志
         $this->setLog('solr处理成功');
         return true;
     } else {
         //记录处理日志
         $this->setLog('solr处理失败');
         return false;
     }
 }
Exemplo n.º 9
0
 /**
  * 获取排名信息
  * @static
  * @param $p_intHouseId
  * @param $p_intOffer 单位:分
  * @param int $p_intHouseType
  * @param bool $p_bolReAll 是否返回全部信息:指定的排名&竞价几率 true-是,false-否(默认)
  * @param string $p_strReType 返回的数据类别 'rank_show'-展示排名(默认),'rank_pre'-预测排名,'rank_deduct'-扣费排名,'block_probability'-指定rank类别下(商圈|板块)竞价几率,'district_probability'-指定rank类别下区域竞价几率
  * @param &$p_arrOthRtnInfo 可以指定返回其他信息(免了重复算取信息):array('house'=>0,'price'=>0,'district_block'=>0,'next_offer'=>0) 1-返回该数据,0-不返回该数据
  * @return bool|int
  */
 public static function getRankingByHouse($p_intHouseId, $p_intOffer = 0, $p_intHouseType = 0, $p_bolReAll = false, $p_strReType = 'rank_show', &$p_arrOthRtnInfo = null)
 {
     $p_intHouseId = intval($p_intHouseId);
     $p_intHouseType = intval($p_intHouseType);
     $bolRtnNextOffer = isset($p_arrOthRtnInfo['next_offer']) && $p_arrOthRtnInfo['next_offer'] ? true : false;
     //返回下一名出价信息
     $bolRtnPrice = isset($p_arrOthRtnInfo['price']) && $p_arrOthRtnInfo['price'] ? true : false;
     //返回价格信息
     $bolRtnBlock = isset($p_arrOthRtnInfo['district_block']) && $p_arrOthRtnInfo['district_block'] ? true : false;
     //返回区域(板块|商圈)信息
     $bolRtnHouse = isset($p_arrOthRtnInfo['house']) && $p_arrOthRtnInfo['house'] ? true : false;
     //返回房源信息
     $bolRtnSpreadRaito = isset($p_arrOthRtnInfo['ratio']) && $p_arrOthRtnInfo['ratio'] ? true : false;
     //返回竞价系数
     $houseInfo = Bll_House_JpHouseInfo::getHouseInfoById($p_intHouseId);
     $objHouseIdx = $houseInfo['base'];
     $objHouse = $houseInfo['info'];
     $intHouseType = $houseInfo['HouseType'];
     $intCityId = $objHouse->city_id;
     $intBidSpreadId = !empty($objHouseIdx->bidSpreadId) ? $objHouseIdx->bidSpreadId : 0;
     if (!$p_intOffer) {
         $p_intOffer = $objHouse->spreadOffer;
     }
     if ($p_bolReAll) {
         $arrRst = array('rank' => 0, 'dis_probability' => array('block' => 0, 'block_max' => 0, 'district' => 0, 'district_max' => 0));
     }
     if ($bolRtnHouse) {
         $p_arrOthRtnInfo['house'] = (object) array_merge((array) $objHouseIdx, (array) $objHouse);
     }
     //获取区域板块
     $intBlockID = $intNewBusinessId = $intDistrictID = $intNewDistrictID = 0;
     $arrRegion = self::getDistrictBlock($intHouseType, $objHouse);
     if (isset($arrRegion['block_id'])) {
         $intBlockID = intval($arrRegion['block_id']);
     }
     if (isset($arrRegion['new_business_id'])) {
         $intNewBusinessId = intval($arrRegion['new_business_id']);
     }
     if (isset($arrRegion['district_id'])) {
         $intDistrictID = intval($arrRegion['district_id']);
     }
     if (isset($arrRegion['new_district_id'])) {
         $intNewDistrictID = intval($arrRegion['new_district_id']);
     }
     if ($bolRtnBlock) {
         $p_arrOthRtnInfo['district_block'] = $arrRegion;
     }
     //获取价格区间
     $arrPriceInfo = self::getPrice($intCityId, $intHouseType, $objHouse);
     $intPriceId = $arrPriceInfo['price_id'];
     $intPriceRangeCnt = $arrPriceInfo['total_cnt'];
     if ($bolRtnPrice) {
         $p_arrOthRtnInfo['price'] = $arrPriceInfo;
     }
     //查询(商圈|板块)+价格排名 | rank_deduct || rank_show || rank_pre
     $arrRankInfo = null;
     if ($p_strReType == 'rank_deduct') {
         //扣费排名
         $arrRankInfo = self::getBidRankByHid($p_intHouseId, $intHouseType, $intBidSpreadId, $intBlockID, 0, $intPriceId);
     } elseif ($p_strReType == 'rank_show') {
         //展示已有排名
         $arrRankInfo = self::getBidRankByHid($p_intHouseId, $intHouseType, $intBidSpreadId, $intBlockID, $intNewBusinessId, $intPriceId);
     } else {
         //预测排名
         //todo test
         $debug_info = '---------房源信息----------' . "\n";
         $debug_info .= '房源:' . $p_intHouseId . "\n";
         $debug_info .= '推广中的计划ID:' . $intBidSpreadId . "\n";
         $debug_info .= '类别:' . $intHouseType . "\n";
         $debug_info .= '板块ID:' . $intBlockID . "\n";
         $debug_info .= '新商圈ID:' . $intNewBusinessId . "\n";
         $debug_info .= '区域ID:' . $intDistrictID . "\n";
         $debug_info .= '新区域ID:' . $intNewDistrictID . "\n";
         $debug_info .= '出价:' . $p_intOffer . "分\n";
         $debug_info .= '出价时间:' . date('Y-m-d H:i:s', $objHouse->spread_offer_time) . "\n";
         $debug_info .= '价格段ID:' . $intPriceId . "\n";
         $arrRankInfo->spread_rank = 0;
         if ($intBidSpreadId) {
             $objOnline = self::getSpreadOnline($intBidSpreadId);
         }
         $fSpreadRatio = self::spreadRatio($p_intHouseId, $p_intOffer, $intBidSpreadId, $intCityId, $intHouseType, $intBlockID, $intNewBusinessId, $intPriceId, $objHouseIdx->property_id);
         $arrRankInfo->spread_rank = self::getBidRankPreByHid($intCityId, $intHouseType, $intBlockID, $intNewBusinessId, $intPriceId, floatval($fSpreadRatio));
         if ($bolRtnSpreadRaito) {
             $arrRst['ratio'] = $fSpreadRatio;
         }
         //如果已经有排名,且在大于当前预计排名的范围,则剔除
         if (!empty($objOnline) && $objOnline->spread_ratio >= $fSpreadRatio) {
             $arrRankInfo->spread_rank = $arrRankInfo->spread_rank - 1;
             $debug_info .= '[当前<=原竞价系数]' . "\n";
             //多名同竞价系数排序 待自测!
         }
         //当大于当前系数的名次刚好是自己的时候,预测排名为1
         $arrRankInfo->spread_rank = $arrRankInfo->spread_rank ? $arrRankInfo->spread_rank : 1;
         $debug_info .= '【预测排名】:' . $arrRankInfo->spread_rank . "\n";
         self::showDebug($debug_info);
     }
     /*这里是个坑
      *$arrRankInfo有可能是对象也有可能是数组
      * 以下是临时解决方案
      */
     $intRank = !empty($arrRankInfo) && isset($arrRankInfo->spread_rank) ? $arrRankInfo->spread_rank : 0;
     if (empty($intRank)) {
         $intRank = isset($arrRankInfo['spread_rank']) ? $arrRankInfo['spread_rank'] + 1 : 0;
     }
     if ($p_bolReAll) {
         $arrRst['rank'] = $intRank;
     } elseif ($p_strReType == 'rank_deduct' && !$bolRtnNextOffer || $p_strReType == 'rank_show' || $p_strReType == 'rank_pre') {
         return $intRank;
     } elseif ($p_strReType == 'rank_deduct' && $bolRtnNextOffer) {
         //返回排名及下一名信息
         $intNextOffer = self::getNextOffer($p_intHouseId, $intBlockID, $intPriceId);
         return array('house_id' => $p_intHouseId, 'rank' => $intRank, 'offer' => $objHouse->spread_offer, 'nextoffer' => $intNextOffer);
     }
     //查询(商圈|板块)下展示概率和最大展示概率 | block_probability
     if ($p_bolReAll || $p_strReType == 'block_probability') {
         $arrDisPInfo['block'] = self::getBidDisProbability($intCityId, $intRank, $intBlockID, $intNewBusinessId, $intPriceId, intval($intPriceRangeCnt), $p_intHouseId, $intHouseType, '板块');
         $arrDisPInfo['block_max'] = self::getBidDisProbability($intCityId, 1, $intBlockID, $intNewBusinessId, $intPriceId, intval($intPriceRangeCnt), $p_intHouseId, $intHouseType, '板块最大');
     }
     if ($p_bolReAll) {
         $arrRst['dis_probability']['block'] = $arrDisPInfo['block'];
         $arrRst['dis_probability']['block_max'] = $arrDisPInfo['block_max'];
     } elseif ($p_strReType == 'block_probability') {
         return $arrDisPInfo;
     }
     //查询区域下展示概率和最大展示概率 | district_probability
     if ($p_bolReAll || $p_strReType == 'district_probability') {
         $intTotalBlocks = self::getDistrictAllBlocks($intHouseType, $intDistrictID, $intNewDistrictID);
         $intPriceRangeCntAll = $intTotalBlocks * intval($intPriceRangeCnt);
         $arrDisPInfo['district'] = self::getBidDisProbability($intCityId, $intRank, $intBlockID, $intNewBusinessId, $intPriceId, intval($intPriceRangeCntAll), $p_intHouseId, $intHouseType, '区域');
         $arrDisPInfo['district_max'] = self::getBidDisProbability($intCityId, 1, $intBlockID, $intNewBusinessId, $intPriceId, intval($intPriceRangeCntAll), $p_intHouseId, $intHouseType, '区域最大');
     }
     if ($p_bolReAll) {
         $arrRst['dis_probability']['district'] = $arrDisPInfo['district'];
         $arrRst['dis_probability']['district_max'] = $arrDisPInfo['district_max'];
     } elseif ($p_strReType == 'district_probability') {
         return $arrDisPInfo;
     }
     return $arrRst;
 }
Exemplo n.º 10
0
 /**
  * 删除计划
  *
  * @param $params
  * @return array
  */
 private function do_jp_delete_plan($params)
 {
     $planId = $params['planid'];
     return Bll_House_JpHouseInfo::spreadOperation('delete', $planId);
 }
Exemplo n.º 11
0
 /**
  * 把房源从竞价推广中移除
  * @param $objHouse
  * @param int $p_intMemberId
  * @param $log_type:1,手动停止 2,房源过期
  * @param int $do_choice  是否处理精选计划,如果为false 说明插入竞价队列表,在竞价队列JOB中处理
  * @return mixed
  */
 public static function removeBidHouseFromSpread($objHouse, $memberId = 0, $log_type = 1, $do_choice = true)
 {
     if ($log_type == 1) {
         $arr_log_param = array('spread_status' => Model_Log_JpSpreadStatusUpdate::ENUM_STATUS_SPREAD_STOP, 'house_log' => Model_Log_JpHouseUpDown::ENUM_BID_MEMBER_HOUSE_STOP);
     } elseif ($log_type == 2) {
         $arr_log_param = array('spread_status' => Model_Log_JpSpreadStatusUpdate::ENUM_STATUS_SPREAD_HOUSE_EXPIRE, 'house_log' => Model_Log_JpHouseUpDown::ENUM_JOB_HOUSE_EXPIRE);
     }
     $p_intHouseId = $objHouse->id;
     //检查推广信息
     $arrResult = Bll_Plan_JpPlanManage::getInstance()->checkSpreadInfo($objHouse->bidSpreadId, $memberId, $objHouse->id);
     if (!$arrResult['success']) {
         return $arrResult;
     }
     $objSpread = $arrResult['data'];
     //从竞价中移除房源
     if ($objSpread->type == Model_Plan_Jp::ENUM_TYPE_HP) {
         if ($objSpread->bidVersion == Model_Plan_Jp::BIDVERSION_CHOICE) {
             if (false == $do_choice) {
                 return array('success' => true, 'data' => '操作成功');
             }
         }
         //记录停止日志
         Bll_Log_JpPlan::getInstance()->writeSpreadStatusLog($arr_log_param['spread_status'], $objHouse->bidSpreadId, '房源停止计划:触发结算前');
         //发送结算
         $params = array();
         $params['spread_id'] = $objHouse->bidSpreadId;
         $params['log_status'] = 7;
         Bll_Plan_Bid_JpSettlement::getInstance()->settlement($params, 'bid');
         //解除关系
         $objHouse->bidSpreadId = 0;
         $objHouse->save();
         //判断是否下架房源
         $intXiaJia = 1;
         if (!empty($objHouse->fixSpreadId)) {
             $objModel = Model_Plan_Jp::data_access();
             try {
                 $objFixSpread = $objModel->find_by_pk($objHouse->fixSpreadId, false);
             } catch (Exception $e) {
                 $objFixSpread = null;
             }
             if (!empty($objFixSpread) && $objFixSpread->status == 2) {
                 $intXiaJia = 0;
             }
         }
         //操作下架
         if ($intXiaJia) {
             //下架房源
             self::updateHouseIsList($objHouse->id, $objHouse->houseType, 0);
             //记录房源操作
             $intTitle = Const_CrmHouseLog::V_OPERATION_TITLE_OUT_SHELVES;
             $intComment = Const_CrmHouseLog::V_OPERATION_COMMENT_HOUSE_SPREAD_OFFLINE;
             Bll_Log_JpHouse::getInstance()->logHouseOperation($objHouse->id, $objHouse->memberId, $intTitle, $intComment);
         }
         //更新solr
         Bll_House_JpHouseInfo::updateHouseToSolr(1, $p_intHouseId, 1);
         //TO 初始化房源统计日志
         Bll_House_JpBwAnalysis::getInstance()->openSaveBluewhaleHouse($objHouse->id, date('Y-m-d'), $objHouse->bidSpreadId, $objSpread->type);
         //竞价房源下线日志
         Bll_Log_JpHouse::getInstance()->writeHouseLog($objHouse->id, $objHouse->bidSpreadId, 0, $objHouse->memberId, $arr_log_param['house_log']);
         $objSpread->isDelete = 1;
         $objSpread->save();
         return array('success' => true, 'data' => '操作成功');
     }
 }
Exemplo n.º 12
0
 public static function updateBucketStatusAndHouseToSolr($spreadInfo, $brokerId = 0, $func = '', $reason = '')
 {
     $bidBucket = Model_Choice_JPBidBucket::getBucketInfo($spreadInfo->blockId, $spreadInfo->newBlockId, $spreadInfo->houseType, $spreadInfo->priceId);
     $limit = $bidBucket['totalNum'];
     $bidChoicePlan = Model_Plan_Jp::getBidChoicePlan($spreadInfo->blockId, $spreadInfo->newBlockId, $spreadInfo->priceId, $spreadInfo->houseType, $limit, $spreadInfo->memberId, $spreadInfo->cityId);
     $upHouse = $downHouse = array();
     if ($bidChoicePlan && $bidBucket) {
         foreach ($bidChoicePlan as $i => $planInfo) {
             if ($i < $bidBucket['maxOnlineNum']) {
                 if (6 == $planInfo->status) {
                     //将计划状态改成 2
                     $planInfo->status = 2;
                     $planInfo->save();
                     $params = array();
                     $params['houseId'] = $planInfo->houseId;
                     $params['plan_id'] = $planInfo->id;
                     $params['ajk_broker_id'] = $brokerId;
                     $params['city_id'] = $spreadInfo->cityId;
                     $params['type'] = 14;
                     //13-精选排队中,14-精选推广,15-取消精选推广,16-取消精选排队
                     $params['changeType'] = self::$propLog[$func]['changeType'];
                     $_remark = '由于' . $reason . ',导致房源:' . $planInfo->houseId . '上架';
                     self::writeHouseLogV2($params, $_remark);
                     //房源上架tosolr
                     Bll_House_JpHouseInfo::updateHouseToSolr(1, $planInfo->houseId, 1);
                     //通知更新q_spread_bid_update表 计算竞价系数
                     Model_Plan_JpSpreadBidUpdate::setBidUpdateQ($planInfo->id);
                     $upHouse[] = $planInfo->houseId;
                 }
             } else {
                 if (2 == $planInfo->status) {
                     //将计划状态改成 6
                     $planInfo->status = 6;
                     $planInfo->save();
                     $params = array();
                     $params['houseId'] = $planInfo->houseId;
                     $params['plan_id'] = $planInfo->id;
                     $params['ajk_broker_id'] = $brokerId;
                     $params['city_id'] = $spreadInfo->cityId;
                     $params['type'] = 15;
                     //13-精选排队中,14-精选推广,15-取消精选推广,16-取消精选排队
                     $params['changeType'] = self::$propLog[$func]['changeType'];
                     $_remark = '由于' . $reason . ',导致房源:' . $planInfo->houseId . '下架';
                     self::writeHouseLogV2($params, $_remark);
                     //房源下架tosolr
                     Bll_House_JpHouseInfo::updateHouseToSolr(1, $planInfo->houseId, 1);
                     //通知更新q_spread_bid_update表 计算竞价系数
                     Model_Plan_JpSpreadBidUpdate::setBidUpdateQ($planInfo->id);
                     $downHouse[] = $planInfo->houseId;
                 }
             }
         }
         $remark = '由于' . $reason . ',导致商业地产精选推广';
         if ($upHouse || $downHouse) {
             if ($upHouse) {
                 $remark .= '上架房源:' . implode(',', $upHouse);
             }
             if ($downHouse) {
                 $remark .= '下架房源:' . implode(',', $downHouse);
             }
         } else {
             $remark .= '暂无上下架房源';
         }
         return $remark;
     }
     return $reason;
 }
Exemplo n.º 13
0
 /**
  * 精选计划板块变更
  *
  * @param array $queueInfo
  * @return array
  */
 public static function houseBlockChange($queueInfo)
 {
     $choicePlanInfo = Model_Plan_Jp::getPlanInfoById($queueInfo['planId'], true);
     if (empty($choicePlanInfo)) {
         return self::buildReturn(0, '没有获取到计划');
     }
     if ($choicePlanInfo['status'] != Model_Plan_Jp::ENUM_STATUS_ONLINE && $choicePlanInfo['status'] != Model_Plan_Jp::ENUM_STATUS_CHOICE_HOLD) {
         return self::buildReturn(1, sprintf('计划状态[%d]不处理', $choicePlanInfo['status']));
     }
     /** 获取房源信息 */
     $houseInfo = Model_House_JpHouseIdx::getHouseInfoById($choicePlanInfo['houseId']);
     if (empty($houseInfo)) {
         return self::buildReturn(0, sprintf('没有获取到房源[%d]信息', $choicePlanInfo['houseId']));
     }
     if ($houseInfo['isDelete'] == Model_House_JpHouseIdx::ENUM_IS_DELETE_YES) {
         return self::buildReturn(0, sprintf('房源[%d]已经删除[%d]', $choicePlanInfo['houseId'], $houseInfo['isDelete']));
     }
     /** 获取房源的板块id */
     if (in_array($houseInfo['houseType'], array(Model_House_JpHouseIdx::ENUM_HOUSE_TYPE_OFFICE_RENT, Model_House_JpHouseIdx::ENUM_HOUSE_TYPE_OFFICE_SALE))) {
         $propertyInfo = Model_House_JpBuilding::getBuildingById($houseInfo['propertyId'], array('blockId'));
     } else {
         $propertyInfo = Model_House_JpProperty::getPropertyById($houseInfo['propertyId'], array('blockId', 'isRoad'));
     }
     $blockId = $propertyInfo['blockId'];
     /** 商铺自选房源精选板块ID从房源信息表里取 */
     if (in_array($houseInfo['houseType'], array(Model_House_JpHouseIdx::ENUM_HOUSE_TYPE_SHOP_RENT, Model_House_JpHouseIdx::ENUM_HOUSE_TYPE_SHOP_SALE)) && $propertyInfo['isRoad'] == 1) {
         $houseTypeClass = Model_House_JpHouseIdx::getHouseTypeModelClass($houseInfo['houseType']);
         $extendHouseInfo = $houseTypeClass::getPropInfoById($houseInfo['id']);
         $blockId = $extendHouseInfo['blockId'];
     }
     /** 获取商圈ID */
     $businessCycleId = Bll_House_JpHouseInfo::getBusinessCycleId($houseInfo['cityId'], $blockId, $houseInfo['houseType']);
     /** 更新计划的板块和商圈ID */
     if (!Model_Plan_Jp::updatePlanBlockIdAndNewBlockIdById($choicePlanInfo['id'], $blockId, $businessCycleId)) {
         return self::buildReturn(0, sprintf('更新计划[%d]的板块[%d -> %d]和商圈[%d -> %d]id失败', $choicePlanInfo['id'], $choicePlanInfo['blockId'], $blockId, $choicePlanInfo['newBlockId'], $businessCycleId));
     }
     if (!Model_Choice_JPBidBucket::getBucketInfo($blockId, $businessCycleId, $choicePlanInfo['houseType'], $choicePlanInfo['priceId'])) {
         Model_Choice_JPBidBucket::initBucketInfo($blockId, $businessCycleId, $choicePlanInfo['houseType'], $choicePlanInfo['priceId'], $choicePlanInfo['cityId']);
     }
     Model_Choice_JPBidBucket::incrementUsedNumEx($blockId, $businessCycleId, $choicePlanInfo['houseType'], $choicePlanInfo['priceId']);
     return self::buildReturn(1, sprintf('更新计划[%d]的板块[%d -> %d]和商圈[%d -> %d]id成功', $choicePlanInfo['id'], $choicePlanInfo['blockId'], $blockId, $choicePlanInfo['newBlockId'], $businessCycleId));
 }
Exemplo n.º 14
0
 public static function getPropImgNum($propId, $propType)
 {
     $model = Bll_House_JpHouseInfo::get_img_model_name($propType);
     $obj = $model::data_access();
     if ($propType <= 2) {
         $obj->filter("officeId", $propId);
     } else {
         $obj->filter("shopId", $propId);
     }
     $imgNum = $obj->filter("isDisplay", 1)->count();
     return intval($imgNum) > 20 ? 20 : intval($imgNum);
 }
Exemplo n.º 15
0
 private static function extendChoiceMsg($out, $houseIds)
 {
     $result = array();
     foreach ($houseIds as $houseId) {
         $houseInfo = $out['houses'][$houseId];
         $choiceMsg = '';
         if (empty($out['choiceHouseIds'][$houseId])) {
             //需要计算精选tip(可推广,可排队,已排满)
             /** 获取板块信息 **/
             $blockArr = Bll_House_JpHouseInfo::getBlock($houseInfo['houseType'], (object) $houseInfo['info']);
             /** 获取价格信息 **/
             $arrPrice = Bll_House_JpHouseInfo::getPrice($out['cityId'], $houseInfo['houseType'], (object) $houseInfo['info']);
             /** 获取最小竞价单元的精选信息 **/
             $bidBucket = Model_Choice_JPBidBucket::getBucketInfo($blockArr['blockId'], $blockArr['newBlockId'], $houseInfo['houseType'], $arrPrice['price_id']);
             if ($bidBucket) {
                 if ($bidBucket['usedNum'] < $bidBucket['maxOnlineNum']) {
                     $choiceMsg = '可推广';
                 } elseif ($bidBucket['usedNum'] < $bidBucket['totalNum']) {
                     $choiceMsg = '可排队';
                 } else {
                     $choiceMsg = '已排满';
                 }
             } else {
                 $choiceMsg = '可推广';
             }
         } else {
             if ($out['choicePlans'][$houseId]['status'] == 2) {
                 $choiceMsg = '推广中';
             } elseif ($out['choicePlans'][$houseId]['status'] == 6) {
                 $choiceMsg = '排队中';
             }
         }
         $result[$houseId] = $choiceMsg;
     }
     return $result;
 }
Exemplo n.º 16
0
 /**
  * 房源手动取消套餐推广
  */
 public function do_cancelHouseCombo()
 {
     $tempHouseIds = explode(',', $this->params['houseIds']);
     $houseIds = array();
     foreach ($tempHouseIds as $k => $houseId) {
         $house = Bll_House_JpHouseInfo::getHouseInfoById($houseId);
         if ($house['base']['memberId'] != $this->jpBrokerId) {
             continue;
         }
         $houseComboInfo = Model_Combo_HouseRelation::data_access('jp')->filter('houseId', $house['base']->id)->find_only();
         if ($houseComboInfo->state != Model_Combo_HouseRelation::ENUM_HOUSE_ONLINE) {
             continue;
         }
         $houseIds[] = $houseId;
     }
     if (empty($houseIds)) {
         $this->outPut(0, '房源信息有误,请重新选择房源');
     }
     if (Bll_Combo_HouseRelation::houseStopComboSpread($this->brokerId, $this->cityId, $tempHouseIds, Bll_Combo_HouseRelation::SITE_TYPE_JP)) {
         $this->outPut(1, '房源停止推广成功');
         /*
         foreach($houseIds as $houseId) {
             $houseIdx = Model_House_JpHouseIdx::data_access()
                 ->filter('id', $houseId)
                 ->filter('isDelete', Model_House_JpHouseIdx::ENUM_IS_DELETE_NO)
                 ->find_only();
             //删除竞价 更新数据 通知solr后端JOB做
             if($houseIdx->bidSpreadId) {
                 $plan = Model_Plan_Jp::data_access()
                     ->filter('id', $houseIdx->bidSpreadId)
                     ->find_only();
                 if($plan) {
                     $houseIdx->bidSpreadId = 0;
                     $houseIdx->updateTime = date('Y-m-d H:i:s');
                     $houseIdx->save();
         
                     if($plan->status = Model_Plan_Jp::ENUM_STATUS_ONLINE) {
                         //发送结算
                         $params = array();
                         $params['spread_id'] = $plan->id;
                         $params['log_status'] = 7;
                         Bll_Plan_Bid_JpSettlement::getInstance()->settlement($params,'bid');
                     }
         
                     $plan->status = Model_Plan_Jp::ENUM_STATUS_OVER;
                     $plan->isDelete = 1;
                     $plan->updateTime = date('Y-m-d H:i:s');
                     $plan->save();
         
                     //记录房源操作
                     $intTitle = Const_CrmHouseLog::V_OPERATION_TITLE_OUT_SHELVES;
                     $intComment = Const_CrmHouseLog::V_OPERATION_COMMENT_HOUSE_SPREAD_OFFLINE;
                     Bll_Log_JpHouse::getInstance()->logHouseOperation($houseIdx->id,$houseIdx->memberId,$intTitle,$intComment);
                     //TO 初始化房源统计日志
                     Bll_House_JpBwAnalysis::getInstance()->openSaveBluewhaleHouse($houseIdx->id,date('Y-m-d'),$houseIdx->bidSpreadId,$plan->type);
                 }
             }
         }
         */
     } else {
         $this->outPut(0, '房源停止推广失败');
     }
 }
Exemplo n.º 17
0
 /**
  * 添加房源到推广计划中
  * @param $intMemberId
  * @param $intHouseId
  * @param $intSpreadId
  * @return array|bool
  */
 public function addHouseToSpread($intMemberId, $intHouseId, $intSpreadId)
 {
     //判断参数
     if (empty($intMemberId) || empty($intHouseId) || empty($intSpreadId)) {
         return array('success' => false, 'data' => '传递参数有误', 'err_code' => Const_PublishCode::UNKNOWN_ERROR);
     }
     //检查推广信息
     $arrResult = $this->checkSpreadInfo($intSpreadId, $intMemberId);
     if (!$arrResult['success']) {
         $arrResult['err_code'] = Const_PublishCode::UNKNOWN_ERROR;
         return $arrResult;
     }
     $objSpread = $arrResult['data'];
     //推广数量限制
     $checkPlanHouseNum = $this->checkPlanHouseNum($intMemberId);
     if (!$checkPlanHouseNum['success']) {
         return $checkPlanHouseNum;
     }
     if ($objSpread->status == 2 && date('Y-m-d', $objSpread->noBudgetDate) == date('Y-m-d')) {
         //第二天推广
         $is_plan_online_status = 2;
     } elseif ($objSpread->status == 2 && date('Y-m-d', $objSpread->noBudgetDate) != date('Y-m-d')) {
         //立刻推广
         $is_plan_online_status = 1;
     } else {
         //不推广
         $is_plan_online_status = 0;
     }
     //检查房源信息
     $arrResult = $this->checkHouse($intHouseId, $intMemberId, $intSpreadId, true);
     if (!$arrResult['success']) {
         $arrResult['err_code'] = Const_PublishCode::UNKNOWN_ERROR;
         return $arrResult;
     }
     $objHouse = $arrResult['data'];
     //房源已经在定价推广中
     if ($objHouse['fixSpreadId'] > 0) {
         return array('success' => false, 'data' => '房源已经在定价推广计划中', 'err_code' => Const_PublishCode::SPREAD_PROP_PLAN_IN);
     }
     //如果没有基准价格
     $intHouseType = $objHouse['houseType'];
     if (in_array($intHouseType, array(1, 3))) {
         $floPrice = $objHouse['detail']['monthlyRent'];
     } else {
         $floPrice = $objHouse['detail']['totalPrice'];
     }
     $arrBasePrice = $this->getSpreadPriceByPrice($floPrice, $intHouseType, $objHouse['cityId']);
     $strClass = Model_House_JpHouseIdx::getHouseTypeModelClass($objHouse['houseType']);
     $strClass::data_access()->filter('id', $objHouse['id'])->set_field('spreadPrice', $arrBasePrice['base_price'])->update();
     //重算rank
     if ($objSpread->status == Model_Plan_Jp::ENUM_STATUS_ONLINE) {
         BLL_House_JpHouseManage::saveRank($intHouseId, true);
     }
     //首先修改房源和推广对应关系
     Model_House_JpHouseIdx::data_access()->filter('id', $objHouse['id'])->set_field('fixSpreadId', $intSpreadId)->set_field('spreadId', $intSpreadId)->update();
     //更新计划房源数量
     $objSpread->houseNum = $objSpread->houseNum + 1;
     $objSpread->save();
     //添加统计和队列
     if ($objSpread->status == Model_Plan_Jp::ENUM_STATUS_ONLINE) {
         //添加更新solr队列
         $intStatus = 1;
         if (isset($objSpread->noBudgetDate) && date('Ymd') == date('Ymd', $objSpread->noBudgetDate)) {
             $intStatus = 2;
         }
         Bll_House_JpHouseInfo::updateHouseToSolr(1, $intHouseId, $intStatus);
     }
     //写入定价上下架队列
     $brokerInfo = Model_Broker_JpBroker::getJpBrokerInfoByPk($objHouse['memberId']);
     Bll_Combo_HouseRelation::notifyHouseUpDownTask($brokerInfo['ajkMemberId'], $intHouseId, $objHouse['cityId'], Bll_Combo_HouseRelation::SITE_TYPE_JP, 107, json_encode(array('is_plan_online' => $is_plan_online_status)), __METHOD__, $brokerInfo['ajkMemberId']);
     if ($objSpread->status == Model_Plan_Jp::ENUM_STATUS_ONLINE) {
         if (isset($objSpread->noBudgetDate) && date('Ymd') == date('Ymd', $objSpread->noBudgetDate)) {
             return array('success' => false, 'data' => '日限额花完,房源已经停止推广', 'err_code' => Const_PublishCode::SPREAD_PROP_BUDGET_OVER);
         } else {
             return array('success' => true, 'data' => '添加成功', 'err_code' => 0);
         }
     } elseif ($objSpread->status == Model_Plan_Jp::ENUM_STATUS_OVER) {
         if ($objSpread->stopReason == 1) {
             return array('success' => false, 'data' => '计划已经手动停止,房源已经停止推广', 'err_code' => Const_PublishCode::SPREAD_PROP_HANDLE_STOP);
         } elseif ($objSpread->stopReason == 2) {
             return array('success' => false, 'data' => '账户余额不足,房源已经停止推广,充值后自动推广', 'err_code' => Const_PublishCode::SPREAD_PROP_BALANCE_ERROR);
         } elseif ($objSpread->stopReason == 3) {
             return array('success' => false, 'data' => '认证未通过,房源已经停止推广', 'err_code' => Const_PublishCode::SPREAD_PROP_AUDITED_ERROR);
         } elseif ($objSpread->stopReason == 0) {
             return array('success' => false, 'data' => '计划已经暂停', 'err_code' => Const_PublishCode::SPREAD_PROP_PLAN_STOP);
         }
     }
 }