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 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; }
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; }
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)取消竞价推广。')); }
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); }
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; }
/** * 金铺-精选房源管理页面 * 返回值 为页面参数,所以必须是数组 * * @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; }
/** * 通知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; } }
/** * 获取排名信息 * @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; }
/** * 删除计划 * * @param $params * @return array */ private function do_jp_delete_plan($params) { $planId = $params['planid']; return Bll_House_JpHouseInfo::spreadOperation('delete', $planId); }
/** * 把房源从竞价推广中移除 * @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' => '操作成功'); } }
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; }
/** * 精选计划板块变更 * * @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)); }
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); }
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; }
/** * 房源手动取消套餐推广 */ 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, '房源停止推广失败'); } }
/** * 添加房源到推广计划中 * @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); } } }