/** * @param $cityId * @param $propId * @param $planType 1.定价,2.竞价,3.定+竟 * @param $status * @return array */ public static function updatePropStatus($cityId, $propId, $planType, $status) { $propPlanType = self::getPropPlanType($propId); /** 记录房源下线日志 */ if ($status != 1) { //TODO } $needMap2PropStatus = false; $propUpdatedStatus = $status; switch ($planType) { case 1: if (isset($propPlanType['bid']['isValid']) && !empty($propPlanType['bid']['isValid'])) { $propUpdatedStatus = $propPlanType['bid']['isValid']; $needMap2PropStatus = true; } break; case 2: if ($status == 1) { $propUpdatedStatus = 1; } else { if (isset($propPlanType['fix']['isValid']) && !empty($propPlanType['fix']['isValid'])) { $propUpdatedStatus = $propPlanType['fix']['isValid']; $needMap2PropStatus = true; } else { $propUpdatedStatus = $status; } } break; case 3: $propUpdatedStatus = $status; break; } if ($needMap2PropStatus) { $propUpdatedStatus = self::mapPropStatus($propUpdatedStatus); } /** 更新 prop 表 */ $prop = Model_House_HzProp::get_prop_info_by_prop_id($propId); $prop['contentBasic']['status'] = $propUpdatedStatus; Model_House_HzProp::updateProp($propId, array('contentBasic' => json_encode($prop['contentBasic']))); Model_House_HzPropSearch::updatePropStatus($cityId, $propId, $propUpdatedStatus); return $propPlanType; }
/** * 租房精选房源取消推广 * 1. 维护计划状态 * 2. 通知solr上下 */ public static function choicePropOutBid($broker_id, $proid) { $flag_array = array('status' => 0, 'msg' => ''); //获取精选 房源、计划关系表信息(promotion_prop_planning) $planning = Dao_Broker_HzPlan::get_prop_all_planning($proid, Const_HzPlan::BID_TYPE); if (empty($planning)) { $flag_array['msg'] = Const_HzErrorInfo::PROPFIXNULL; return $flag_array; } //根据计划查询精选计划的信息 $plan_info = Dao_Broker_HzPlan::get_plan($planning[0]['plan_id']); if (empty($plan_info)) { $flag_array['msg'] = Const_HzErrorInfo::NULLPLAN; return $flag_array; } //判断计划是否为该经纪人的 if ($plan_info['user_id'] != $broker_id) { $flag_array['msg'] = Const_HzErrorInfo::PLANINFOERROR; return $flag_array; } //获取精选计划的冻结号 $sn = Dao_Broker_HzPlan::get_bid_sn($plan_info['id']); $sn = $sn['sn']; if (empty($sn)) { $flag_array['msg'] = Const_HzErrorInfo::PROPERROR; return $flag_array; } //获取精选花费 // $amount = $plan_info['total_consume']; $amount = $plan_info['amount'] - $plan_info['total_consume']; $note = urlencode('推广房源' . $proid); $user_id = Bll_HzBroker::get_userid_by_hzbrokerid($broker_id); /** 精选结算 调用3次 */ $charge_sn = false; $unfreezeOrderData = array('userId' => $user_id, 'proId' => $proid, 'serialNumber' => $sn, 'planId' => $plan_info['id'], 'amount' => $amount); $unfreezeOrder = Bll_Ppc_BidUnfreeze::createHzOrder($unfreezeOrderData); for ($i = 0; $i < 3 && !$charge_sn; $i++) { $charge_sn = Bll_PayAccount::cancel_frozen($user_id, $amount, $proid, Const_PaymentApp::HZ_CHOICE, $sn, $note, true); } if (!$charge_sn) { $unfreezeOrder->fail(); $flag_array['msg'] = Const_HzErrorInfo::CHARGEFAIL; // 此处不需要block,由job保证此处解冻正确 //return $flag_array; } else { $unfreezeOrder->complete(); } //查询房源信息 $proInfo = Model_House_HzProp::get_prop_info_by_prop_id($proid); //房源违规的、删除的不能更新房源状态 $prop_status = $proInfo['contentBasic']['status']; // 兼容新套餐 $ajkBrokerId = Model_Broker_HzMapping::get_ajk_broker_id($broker_id); if (Bll_Broker_HzBroker::isComboBroker($ajkBrokerId)) { /** 判断房源是否在套餐推广中 */ if (!Bll_Combo_HouseRelation::getOnlineRelationByHouseId($proid, Bll_Combo_HouseRelation::SITE_TYPE_HZ)) { $prop_status = Const_HzStatus::OUTLINE; } } else { //查询房源是否在计划里面 $fix_planning = Dao_Broker_HzPlan::get_prop_planning($proid, Const_HzPlan::SPREAD_TYPE); if (!in_array($proInfo['contentBasic']['status'], array(Const_HzStatus::VERIFY, Const_HzStatus::REMOVE, Const_HzStatus::EXPIRED))) { if (empty($fix_planning)) { //房源不在计划里面 $prop_status = Const_HzStatus::OUTLINE; //房源不在计划里面 } elseif ($fix_planning[0]['is_valid'] == Const_HzPlan::SPREAD) { $prop_status = Const_HzStatus::ONLINE; //定价正在推广 } elseif ($fix_planning[0]['is_valid'] == Const_HzPlan::UPPERLIMIT) { //定价非推广(没钱状态) $prop_status = Const_HzStatus::NOCASH; //房源没钱 } else { $prop_status = Const_HzStatus::MANUALLY; //房源状态更新为9手动停止 } } } //维护精选关联关系 if (!Dao_Broker_HzPlan::update_planning($planning[0]['id'], Const_HzPlan::MENUOVER)) { $flag_array['msg'] = Const_HzErrorInfo::UPDATAPLANNINGFAIL; return $flag_array; } //维护计划状态 if (!Dao_Broker_HzPlan::update_plan_status($plan_info['id'], Const_HzPlan::MENUOVER)) { $flag_array['msg'] = Const_HzErrorInfo::UPDATAPLANFAIL; return $flag_array; } //通知solr if ($prop_status == Const_HzStatus::ONLINE) { //定价正在推广 Dao_Broker_HzProp::into_prop_lucene($proid, $planning[0]['city_id'], 1); //竞价下,定价还在线。则更新上 } else { Dao_Broker_HzProp::into_prop_lucene($proid, $planning[0]['city_id'], 2); //下线房源 } $flag_array['status'] = 1; return $flag_array; }
/** * 精选房源设置 * * @param $ajk_broker_id * @param $city_id * @param $prop_id * @param array $params * * @return array */ public static function hz_setting_post($ajk_broker_id, $city_id, $prop_id, $params = array()) { //获取精选推广预算 $brokerInfo = Bll_BrokerBaseBll::get_instance()->get_broker_info($ajk_broker_id); $brokerCompanyId = $brokerInfo['BaseInfo']['COMPANYID']; $choiceSet = APF::get_instance()->get_config('choice_set'); if (isset($choiceSet[$brokerCompanyId]) && !empty($choiceSet[$brokerCompanyId])) { $min_budget = $choiceSet[$brokerCompanyId]['hz']['HZ_CHOICE_MIN_BUDGET']; $max_budget = $choiceSet[$brokerCompanyId]['hz']['HZ_CHOICE_MAX_BUDGET']; } else { $min_budget = $choiceSet['default']['hz']['HZ_CHOICE_MIN_BUDGET']; $max_budget = $choiceSet['default']['hz']['HZ_CHOICE_MAX_BUDGET']; } if ($params['budget'] < $min_budget || $params['budget'] > $max_budget) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '推广预算,最低' . $min_budget . '安币,最高' . $max_budget . '安币'); } $result = array(); $hz_broker_id = Model_Broker_HzMapping::get_hz_broker_id($ajk_broker_id); if (0 == $hz_broker_id) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '您不是好租经纪人'); } /** 判断房源是否可以精选 */ $checkProp = Bll_HzBidPlan::checkPropCanChoice($ajk_broker_id, $city_id, $prop_id); if ($checkProp['err_no'] != 0) { return $checkProp; } /** 防并发 */ if (false === self::rejectSameRequest(Bll_Plan_Bid_Choice::SITE_HAOZU, $ajk_broker_id, $prop_id)) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '系统繁忙(code:-906)'); } /** 获取房源基本信息 */ $propInfo = Model_House_HzProp::get_prop_info_by_prop_id($prop_id); /** 获取点击单价 */ try { /** * @var Bll_Service_Client_HttpResponse $clickPrice */ for ($i = 0; $i < 3; $i++) { $clickPrice = Bll_Service_Choice::hzClickPrice(array('brokerId' => $ajk_broker_id, 'cityId' => $city_id, 'price' => (int) $propInfo['contentBasic']['pricenum'], 'blockId' => $propInfo['contentBasic']['blockid'])); if ($clickPrice->isSucceeded()) { break; } } if (!$clickPrice->isSucceeded() || $clickPrice['status'] == 'error') { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '系统繁忙(code:-' . __LINE__ . ')'); } if ($params['budget'] * 100 < $clickPrice['realTradeAmount']) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '推广预算不能小于点击单价'); } /** 点击单价不能小于当前系统内的单价 防止恶意操作 */ if ($params['price'] < $clickPrice['realTradeAmount'] / 100) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '点击单价错误'); } } catch (Exception $e) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '系统繁忙(code:-' . __LINE__ . ')'); } $block_id = $propInfo['contentBasic']['blockid']; $priceIntervalInfo = Model_House_HzPriceChoice::get_price($city_id, $propInfo['contentBasic']['pricenum']); if (empty($priceIntervalInfo)) { $logContent = sprintf('%s ajkBrokerId=%d hzBrokerId=%d cityId=%d propId=%d blockId=%d priceNum=%s %s', date('Y-m-d H:i:s'), $ajk_broker_id, $hz_broker_id, $city_id, $prop_id, $block_id, $propInfo['contentBasic']['pricenum'], '好租城市的价格段获取失败'); APF::get_instance()->get_nlogger()->log('好租城市的价格段', $logContent); return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '系统烦忙(code:-' . __LINE__ . ')'); } /** 获取坑位信息 提前判断坑位状态 没有的话会自动初始化一个 */ $bucketInfo = Bll_Choice_HzBidBucket::getBucketInfo($block_id, $priceIntervalInfo['id']); if (empty($bucketInfo)) { return array('err_no' => self::BID_WAIT_FAIL, 'err_msg' => '精选房源推广失败'); } /** 精选房源展示推广 */ if (isset($params['show']) && $params['show'] == 1) { $result = array('err_no' => self::BID_SHOW_SUCCESS, 'err_msg' => '精选房源推广成功'); if ($bucketInfo['usedNum'] >= $bucketInfo['maxOnlineNum']) { return array('err_no' => self::BID_SHOW_FAIL, 'err_msg' => '精选房源推广失败'); } /** 展示位 坑位自增 */ $lockBucket = Model_Choice_HzBidBucket::increment_used_num_online($block_id, $priceIntervalInfo['id']); if (!$lockBucket) { return array('err_no' => self::BID_SHOW_FAIL, 'err_msg' => '精选房源推广失败'); } } else { $result = array('err_no' => self::BID_WAIT_SUCCESS, 'err_msg' => '精选房源推广成功'); if ($bucketInfo['usedNum'] >= $bucketInfo['totalNum']) { return array('err_no' => self::BID_WAIT_FAIL, 'err_msg' => '推广位已满!'); } /** 排队位置 坑位自增 */ $lockBucket = Model_Choice_HzBidBucket::increment_used_num($block_id, $priceIntervalInfo['id']); if (!$lockBucket) { return array('err_no' => self::BID_WAIT_FAIL, 'err_msg' => '精选房源推广失败'); } } /** 往冻结队列里添加记录,获取request id*/ $bidFreezeOrder = new Bll_Plan_BidFreezeOrderNum(date('Y')); $ajk_user_id = Bll_Broker_MainBusiness::getDataByEsfId($ajk_broker_id)->memberId; $requestId = $bidFreezeOrder->getRequestId(Bll_Plan_BidFreezeOrderNum::HZ, $ajk_user_id, date('Y'), 0, $prop_id); /** 冻结金额 */ $freezeResult = self::hz_bid_freeze($ajk_broker_id, $params['budget'] * 100, $requestId, sprintf('好租精选房源冻结,propId: %d', $prop_id)); if (!$freezeResult->isSucceeded() || $freezeResult['status'] == 'error') { Model_Choice_HzBidBucket::decrement_used_num($block_id, $priceIntervalInfo['id']); return array('err_no' => self::BID_FAIL_QUALITY_OR_NEW, 'err_msg' => isset($freezeResult['info']) ? $freezeResult['info'] : '冻结金额失败'); } $sn = $freezeResult['data']['sn']; if (!isset($params['plan_id']) || empty($params['plan_id'])) { $createdRemark = sprintf('经纪人开始精选房源推广 SN:%s', $sn); $resultPlan = Bll_Plan_Bid_HzBid::add_plan($hz_broker_id, $prop_id, $params['price'], $params['budget'], $block_id, $city_id, $sn, $ajk_broker_id); /** 添加计划失败 */ if ($resultPlan['error_code'] != 0) { Model_Choice_HzBidBucket::decrement_used_num($block_id, $priceIntervalInfo['id']); return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => $resultPlan['error_message']); } $planId = $resultPlan['planId']; } else { $createdRemark = sprintf('经纪人重新推广精选房源 SN:%s', $sn); /** 更新精选房源计划预算 */ $planId = $params['plan_id']; $resultPlan = Bll_Plan_Bid_HzBid::update_bid($hz_broker_id, $planId, $prop_id, $params['price'], $params['budget'], $city_id, $sn, $ajk_broker_id); if ($resultPlan['error_code'] != 0) { Model_Choice_HzBidBucket::decrement_used_num($block_id, $priceIntervalInfo['id']); return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => $resultPlan['error_message']); } $planId = $resultPlan['planId']; } $result['rank'] = Bll_Plan_Bid_HzBid::getChoiceWaitPosition($planId, $city_id, $block_id, $priceIntervalInfo['id']); /** 精选房源成功 */ $actionQueueData = array('siteType' => Model_Choice_ActionQueue::ENUM_HAOZU, 'brokerId' => $ajk_broker_id, 'planId' => $planId, 'proId' => $prop_id, 'actionId' => Model_Choice_ActionQueue::ENUM_BEGIN_BY_HAND, 'createTime' => time(), 'createRemark' => $createdRemark, 'operationId' => $ajk_broker_id, 'ip' => $params['ip']); Model_Choice_ActionQueue::addBidQueen($actionQueueData); $bidFreezeOrder->updateRequestComplete($requestId, $sn, $planId); return $result; }
/** * 通知solr处理 * * <ol> * <li> * 当房源日志type为房源更新(4),房源推广(5)时,14-精选推广,通知solr更新 * </li> * <li> * 当房源日志type为取消推广(6),第二天推广(7),取消第二天推广(12)时,15-取消精选推广,16-取消精选排队通知solr删除 * </li> * </ol> */ public function noticeSolrZf($record) { $type = $record['type']; if ($type == 4 || $type == 5 || $type == 14) { $updateType = 1; //add } elseif ($type == 6 || $type == 7 || $type == 12 || $type == 15 || $type == 16) { //租房比较坑爹,定价、竞价其中任意一个还在推广都不能通知下 //查询房源状态 TODO 需要换成查询计划 // 最好取master。 如延迟是致命的 $hz_pro_info = Model_House_HzProp::get_prop_info_by_prop_id($record['houseId'], true); if ($hz_pro_info['contentBasic']['status'] == 1) { //房源在推广 $updateType = 1; //add } else { $updateType = 2; //delete } } else { //记录处理日志 $this->setLog('不需要做solr处理' . __METHOD__); return true; } $result = Dao_Broker_HzProp::into_prop_lucene($record['houseId'], $record['cityId'], $updateType); if ($result) { $tmp_str = ''; if ($updateType == 1 && in_array($type, array(6, 7, 12))) { $tmp_str = ' 竞价或精选还在推广'; } //记录处理日志 $this->setLog('solr处理成功 ' . $tmp_str); return true; } else { //记录处理日志 $this->setLog('房源[%d]solr处理失败 '); return false; } }
public function dealTask($task) { $solrOnProId = $task['id']; //1:老端口房源(安居客经纪人发的租房房源) //3:租房经纪人房源 //0:个人房源 $from = $task['from']; if ($from == 1) { return true; } // 查主表获取cityId 如果没有则标记邮件发出 $propInfo = Model_House_HzProp::get_prop_info_by_prop_id($solrOnProId); if ($propInfo && $propInfo['contentBasic']['status'] == 1) { $this->proceLog .= 'remark 房源推广中'; return true; } // 房源没有或者不在线 通知solr下 且发邮件 $type = 2; if ($from == 0) { $type = 1; } // 个人房源 // 如果新端口 走中间件 if (Bll_City::isComboCity($task['city_id'])) { Bll_Combo_NoticeSolrUpDown::noticeComboSolrHzAPI($task['city_id'], $propInfo['contentBasic']['userid'], $solrOnProId, 2, $type); } else { Dao_Broker_HzProp::into_prop_lucene($solrOnProId, $task['city_id'], 2, $type); } if (empty($propInfo)) { $this->proceLog .= 'remark 房源未找到'; $this->emptyPropIds[] = $solrOnProId; } else { $this->proceLog .= 'remark 房源非推广 status:' . $propInfo['contentBasic']['status']; $this->errorPropIds = $solrOnProId; } return true; }
/** * 精选房源板块变更,修正计划的板块ID * * @param array $queue * @return array */ public static function houseAreaChange($queue) { if ($queue['siteType'] != 2) { return Bll_HzPropBll::build_return(0, '非好租精选队列'); } if ($queue['planId'] == 0 || $queue['proId'] == 0) { return Bll_HzPropBll::build_return(0, '房源Id、计划Id不能为空'); } /** 获取精选计划信息 */ $planInfo = Model_Plan_HzPlanBasic::get_plan_by_id($queue['planId'], true); if (empty($planInfo)) { return Bll_HzPropBll::build_return(1, sprintf('获取计划[%d]信息失败', $queue['planId'])); } if ($planInfo['status'] != Const_HzPlan::SPREAD && $planInfo['status'] != Const_HzPlan::WAITING) { return Bll_HzPropBll::build_return(1, sprintf('计划[%d]不在推广或者排队中', $queue['planId'])); } /** 获取房源基本信息 */ $houseInfo = Model_House_HzProp::get_prop_info_by_prop_id($queue['proId'], true); if (empty($houseInfo)) { return Bll_HzPropBll::build_return(1, '获取房源[%d - %d]信息失败', $planInfo['cityId'], $queue['proId']); } if ($houseInfo['contentBasic']['status'] == 99 || $houseInfo['contentBasic']['status'] == 100) { return Bll_HzPropBll::build_return(1, sprintf('房源已经被删除[%d - %d]', $queue['proId'], $houseInfo['contentBasic']['status'])); } $blockId = $houseInfo['contentBasic']['blockid']; /** 获取价格段Id */ $priceIntervalInfo = Model_House_HzPriceChoice::get_price($planInfo['cityId'], $houseInfo['contentBasic']['pricenum']); if (empty($priceIntervalInfo)) { return Bll_HzPropBll::build_return(1, sprintf('没有获取到价格段信息[%d - %d]', $planInfo['cityId'], $houseInfo['contentBasic']['pricenum'])); } $priceId = $priceIntervalInfo['id']; $data = array('blockId' => $blockId, 'priceId' => $priceId); if (0 == Model_Plan_HzPlanBasic::updatePlan($queue['planId'], $data)) { return Bll_HzPropBll::build_return(1, sprintf('更新精选计划[%d][%s]失败', $queue['planId'], json_encode($data))); } $result = sprintf('更新精选计划[%d][%s]成功', $queue['planId'], json_encode($data)); if (static::updateBucket($blockId, $priceId)) { $result .= ",(新)更新坑位[{$blockId} - {$priceId}]成功"; } else { $result .= ",(新)更新坑位[{$blockId} - {$priceId}]失败"; } if (static::updateBucket($planInfo['blockId'], $planInfo['priceId'])) { $result .= ",(旧)更新坑位[{$planInfo['blockId']} - {$planInfo['priceId']}]成功"; } else { $result .= ",(旧)更新坑位[{$planInfo['blockId']} - {$planInfo['priceId']}]失败"; } return Bll_HzPropBll::build_return(1, $result); }
/** * 获取好租的坑位信息 * * @param array $params * @return array */ private function do_bucket_info_hz($params) { $request = APF::get_instance()->get_request(); $propInfo = Model_House_HzProp::get_prop_info_by_prop_id($params['prop_id']); if (empty($propInfo)) { return array('error' => -1, 'msg' => '房源不存在!'); } $city_id = $request->getBrokerCityId(); $brock_id = Model_Broker_HzMapping::get_hz_broker_id($request->getBrokerId()); if ($brock_id != $propInfo['contentBasic']['userid']) { return array('error' => -1, 'msg' => '房源不存在。'); } $block_id = $propInfo['contentBasic']['blockid']; $price = $propInfo['contentBasic']['pricenum']; $bucketInfo = Bll_Choice_HzBidBucket::get_bucket_info($block_id, $city_id, $price); if (false === $bucketInfo) { return array('error' => -1, 'msg' => '板块价格段不存在。', 'price' => $price); } if (empty($bucketInfo)) { return array('error' => -1, 'msg' => '当前板块没有展示位。', 'block_id' => $block_id); } return array('error' => 0, 'bucket' => $bucketInfo); }
public function handle_request_internal() { $brokerId = $this->_params['brokerId']; $houseId = $this->_params['propId']; $budget = $this->_params['budget']; if ($budget < 20 || $budget > 50) { return array('status' => Const_APIStatus::RETURN_CODE_ERROR, 'errcode' => '', 'message' => '请输入20~50之间的整数'); } $brokerInfo = Model_Broker_AjkBrokerExtend::findWithBrokerId($brokerId); if (!$brokerInfo) { throw new Exception_BrokerNotFoundException('经纪人不存在', Const_APIStatus::E_BROKER_NOT_EXISTS); } $cityId = $brokerInfo->cityId; if (!Bll_City::isChoiceCity($cityId, Const_Site::HAOZU)) { return array('status' => Const_APIStatus::RETURN_CODE_ERROR, 'errcode' => Const_APIStatus::E_NOT_CHOICE_CITY, 'message' => '非精选城市'); } // 获取房源基本信息 $propInfo = Model_House_HzProp::get_prop_info_by_prop_id($houseId); $block_id = $propInfo['contentBasic']['blockid']; // 获取点击单价 try { $clickPriceInfo = Bll_Service_Choice::hzClickPrice(array('cityId' => $cityId, 'price' => (int) $propInfo['contentBasic']['pricenum'], 'blockId' => $block_id, 'brokerId' => $brokerId)); if ($clickPriceInfo['status'] == 'error') { return array('status' => Const_APIStatus::RETURN_CODE_ERROR, 'errcode' => '', 'message' => '系统繁忙(code:-33)'); } } catch (Exception $e) { return array('status' => Const_APIStatus::RETURN_CODE_ERROR, 'errcode' => '', 'message' => '系统繁忙(code:-33)'); } $params = array(); $params['price'] = $clickPriceInfo['realTradeAmount'] / 100; // 点击单价单位转换:分 -> 元; $params['show'] = 0; $params['budget'] = $budget; $params['ip'] = $this->_request->get_client_ip(); // 判断是否是重新推广 $bllChoice = new Bll_Zufang_Choice(); $planInfo = $bllChoice->get_plan_by_proid($houseId); //planning表中查找精选计划 if (!empty($planInfo)) { $planId = $planInfo->plan_id; $basicPlanInfo = $bllChoice->get_plan($planId); if (!empty($basicPlanInfo)) { if ($basicPlanInfo[0]->status == 1 || $basicPlanInfo[0]->status == 13) { return array('status' => Const_APIStatus::RETURN_CODE_ERROR, 'errcode' => '', 'message' => '该房源已做精选推广!'); } if ($basicPlanInfo[0]->status != Const_HzPlan::DELETE) { $params['plan_id'] = $planInfo->plan_id; } } } // 开始精选推广 $result = Bll_Plan_Bid_Choice::hz_setting_post($brokerId, $cityId, $houseId, $params); if ($result['err_no'] != Bll_Plan_Bid_Choice::BID_WAIT_SUCCESS) { return array('status' => Const_APIStatus::RETURN_CODE_ERROR, 'errcode' => '', 'message' => $result['err_msg']); } if ($result['rank'] > 10) { $status = 2; $msg = "排在第{$result['rank']}位"; } else { $status = 1; $msg = "精选推广成功"; } return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => array('status' => $status, 'statusMsg' => $msg)); }
/** * 警告:未得到授权,不能使用。所有者:caoyang * 本方法为租房架构变更,房源状态维护的过渡期中临时方法。有效到2014-10-01。 * * 根据当前定价、竞价(精选)的状态维护房源的状态 * 1.房源的状态为:违规-6,删除-99、100的时候房源的状态不被更新 * 2.定价、竞价(精选)任意一个推广时房源状态为1 * 3.房源不在定价计划中的时候状态需要维护成2、4 * * @param $hzProId * @return mixed */ public static function bulidHzProStatu($hzProId) { /** 房源信息初步判断 */ //查询房源信息 $proInfo = Model_House_HzProp::get_prop_info_by_prop_id($hzProId); if (empty($proInfo)) { //房源信息不存在 return ''; } if (in_array($proInfo['contentBasic']['status'], array(Const_HzStatus::VERIFY, Const_HzStatus::REMOVE, Const_HzStatus::EXPIRED))) { //房源状态为违规的、删除的不能更新房源状态 return ''; } /** 定价、竞价(精选)数据准备 */ //查询租房定价、竞价(精选)关系数据 $fixPlanning = array(); //定价关系数据 $bidPlanning = array(); //竞价(精选)关系数据 $comboRelation = array(); // 套餐关系数据 //$isComboBroker = Bll_Broker_HzBroker::isComboBroker($proInfo['contentBasic']['user_id']); $planning = Model_Plan_HzPlanning::data_access()->filter('proid', $hzProId)->get_all(); foreach ($planning as $list) { //定价 if ($list['plan_type'] == Const_HzPlan::SPREAD_TYPE) { $fixPlanning = $list; } //竞价(精选) if ($list['plan_type'] == Const_HzPlan::BID_TYPE) { $bidPlanning = $list; } } //查询租房竞价(精选)计划状态 if (empty($bidPlanning)) { $bidPlanInfo = array(); } else { $bidPlanInfo = Model_Plan_HzPlanBasic::get_plan_by_id($bidPlanning['plan_id']); } //查询租房定价计划状态 if (empty($fixPlanning)) { $fixPlanInfo = array(); } else { $fixPlanInfo = Model_Plan_HzPlanBasic::get_plan_by_id($fixPlanning['plan_id']); } //查询套餐关系 $comboRelation = Bll_Combo_HouseRelation::getRelationByHouseId($hzProId); /** 计算出房源状态应该更新成什么样 */ /** * 1. 非定价推广(计划删除、或房源不在计划里面)proStatus=2 * 2. 定价推广:proStatus=1 * 3. 定价非推广(房源在计划中) * 3.1 竞价(精选)非推广 * 3.1.1 定价计划没钱 proStatus=13 * 3.1.1 定价其他 proStatus=9 * 3.2 竞价(精选)推广 proStatus=1 */ if ($comboRelation) { return Dao_Broker_HzProp::change_prop_status($hzProId, Bll_Combo_HouseRelation::isRelationOnline($comboRelation['state']) ? Const_HzStatus::ONLINE : Const_HzStatus::OUTLINE); } else { //定价计划不存在、计划标记为删除、计划不是正常状态(1、2、5、7、9) if (empty($fixPlanInfo) || $fixPlanInfo['flag'] == 0 || !in_array($fixPlanInfo['status'], array(Const_HzPlan::SPREAD, Const_HzPlan::AUTOOVER, Const_HzPlan::AWAIT, Const_HzPlan::UPPERLIMIT, Const_HzPlan::MANUALLY_PAUSE))) { return Dao_Broker_HzProp::change_prop_status($hzProId, Const_HzStatus::OUTLINE); //房源不在计划里面 } //定价房源不在计划里面、非有效的关系(1、2、5、7、9) if (empty($fixPlanning) || !in_array($fixPlanning['is_valid'], array(Const_HzPlan::SPREAD, Const_HzPlan::AUTOOVER, Const_HzPlan::AWAIT, Const_HzPlan::UPPERLIMIT, Const_HzPlan::MANUALLY_PAUSE))) { return Dao_Broker_HzProp::change_prop_status($hzProId, Const_HzStatus::OUTLINE); //房源不在计划里面 } //定价计划推广中 if ($fixPlanInfo['status'] == Const_HzPlan::SPREAD) { return Dao_Broker_HzProp::change_prop_status($hzProId, Const_HzStatus::ONLINE); //房源正在推广 } //竞价(精选)计划不存在、计划标记为删除、计划不是正常状态(1、2、5、7、9、13) //竞价(精选)房源不在计划里面、非有效的关系(1、2、5、7、9、13) if (empty($bidPlanInfo) || $bidPlanInfo['flag'] == 0 || !in_array($bidPlanInfo['status'], array(Const_HzPlan::SPREAD, Const_HzPlan::AUTOOVER, Const_HzPlan::AWAIT, Const_HzPlan::UPPERLIMIT, Const_HzPlan::MANUALLY_PAUSE, Const_HzPlan::WAITING)) || empty($bidPlanning) || !in_array($bidPlanning['is_valid'], array(Const_HzPlan::SPREAD, Const_HzPlan::AUTOOVER, Const_HzPlan::AWAIT, Const_HzPlan::UPPERLIMIT, Const_HzPlan::MANUALLY_PAUSE, Const_HzPlan::WAITING))) { if ($fixPlanInfo['status'] == Const_HzPlan::UPPERLIMIT) { //计划没钱 return Dao_Broker_HzProp::change_prop_status($hzProId, Const_HzStatus::NOCASH); //房源没钱 } else { return Dao_Broker_HzProp::change_prop_status($hzProId, Const_HzStatus::MANUALLY); //房源状态更新为9手动停止 } } //竞价(精选)推广 if ($bidPlanInfo['status'] == Const_HzPlan::SPREAD) { return Dao_Broker_HzProp::change_prop_status($hzProId, Const_HzStatus::ONLINE); //房源正在推广 } } //以上逻辑都没走到,记录当时错误情况 file_put_contents("/data1/logs/bulidHzProStatu.log", date('Y-m-d H:i:s') . " " . $hzProId . " " . json_encode($fixPlanInfo) . " " . json_encode($fixPlanning) . " " . json_encode($bidPlanInfo) . " " . json_encode($bidPlanning) . "\n", FILE_APPEND); return false; }
/** * 重新计算坑位数 * 获取精选计划,根据计划的板块id、价格段id重新计算坑位信息。 * 从房源信息里获取到新的板块id、价格段id,更新计划的板块id、价格段id,重新计算坑位信息. * * @param int $houseId * @param int $cityId * @return string */ public static function rebuildBucketHz($houseId, $cityId) { $houseChoicePlan = Model_Plan_HzPlanning::getPropBidPlan($houseId); if (empty($houseChoicePlan)) { return '房源没有做精选'; } $choicePlanInfo = Model_Plan_HzPlanBasic::get_plan_by_id($houseChoicePlan['plan_id']); if (empty($choicePlanInfo)) { return '没有获取到精选计划'; } if ($choicePlanInfo['status'] != Const_HzPlan::SPREAD && $choicePlanInfo['status'] != Const_HzPlan::WAITING) { return '房源精选不在推广或排队中'; } $propInfo = Model_House_HzProp::get_prop_info_by_prop_id($houseId); $blockId = $propInfo['contentBasic']['blockid']; $priceIntervalInfo = Model_House_HzPriceChoice::get_price($cityId, $propInfo['contentBasic']['pricenum']); if (empty($priceIntervalInfo)) { return '没有获取到价格段信息'; } $priceId = $priceIntervalInfo['id']; $data = array('blockId' => $blockId, 'priceId' => $priceId); if (0 == Model_Plan_HzPlanBasic::updatePlan($houseChoicePlan['plan_id'], $data)) { return "更新精选计划[{$houseChoicePlan['plan_id']}]信息失败[{$blockId} - {$priceId}]"; } $result = ''; if (static::updateBucket($blockId, $priceId)) { $result .= "(新)更新坑位[{$blockId} - {$priceId}]成功"; } else { $result .= "(新)更新坑位[{$blockId} - {$priceId}]失败"; } if (static::updateBucket($choicePlanInfo['blockId'], $choicePlanInfo['priceId'])) { $result .= "(旧)更新坑位[{$choicePlanInfo['blockId']} - {$choicePlanInfo['priceId']}]成功"; } else { $result .= "(旧)更新坑位[{$choicePlanInfo['blockId']} - {$choicePlanInfo['priceId']}]失败"; } return $result; }
/** * 房产季,取消标签 702 * hz * @param $params * @return array */ public static function activityResRemoveHz($params) { $returnLog = array(); array_push($returnLog, "队列(" . json_encode($params['id']) . ")开始处理"); if (empty($params['pro_id'])) { array_push($returnLog, "房源ID为空"); return self::build_return(1, $returnLog); } //获取房源信息 $propInfo = Model_House_HzProp::get_prop_info_by_prop_id($params['pro_id']); if (empty($propInfo)) { array_push($returnLog, "房源信息为空"); return self::build_return(1, $returnLog); } //房源日志写入 房产季取消标签 23 $data = self::build_prop_log($params, Const_ProLogType::LOG_ACTIVITY_RES_REMOVE, "房产季活动取消标签" . ";队列表id为" . $params['id'], $params['broker_id']); $data['siteType'] = 2; if (!Model_Log_HouseLogNew::create($data, date('Ymd'))->save()) { array_push($returnLog, "房产季活动取消标签日志写入失败"); return self::build_return(0, $returnLog); } array_push($returnLog, "房产季活动取消标签日志写入"); return self::build_return(1, $returnLog); }
/** * 添加竞价计划 * 往 `promotion_planning_basic` 里 添加一条记录,往 `promotion_planning_extend` 添加一条记录 * 房源计划关系表`promotion_prop_planning`里一个房源只能有2个记录,一个定价,一个竞价,所以先判断房源在 * 该表里是否已经有竞价计划记录了,有则更新,没有就添加。 * * @param int $brokerId * @param int $propId * @param float $price * @param float $amount * @param int $blockId * @param int $cityId * @param int $sn * @param int $ajk_broker_id * @return array|int|mixed */ public static function insertBidPlan($brokerId, $propId, $price, $amount, $blockId, $cityId, $sn, $ajk_broker_id = 0) { $prop = Model_House_HzProp::get_prop_info_by_prop_id($propId); $priceInterval = Model_House_HzPriceChoice::get_price($cityId, $prop['contentBasic']['pricenum']); $planBasicData = array('plan_title' => '精选', 'blockId' => $blockId, 'priceId' => $priceInterval['id'], 'plan_type' => Const_HzPlan::BID_TYPE, 'user_id' => $brokerId, 'amount' => $amount, 'status' => Const_HzPlan::WAITING, 'created' => time(), 'stop_date' => strtotime('+14 days'), 'order_update' => time(), 'cityId' => $cityId, 'bid_version' => Const_HzPlan::BID_VERSION_CHOICE, 'ajkBrokerId' => $ajk_broker_id); $planId = Model_Plan_HzPlanBasic::addPlan($planBasicData); if ($planId == 0) { return 0; } Bll_Log_EffectPlanLog::addPlanLog(Const_HzPlan::BID_TYPE, $planId, $propId, Const_HaoPanLog::PROPSTARTBID, $brokerId, 0, Const_HzPlan::WAITING, Bll_Log_EffectPlanLog::OPERATION_CHOICE); $extendData = array('plan_id' => $planId, 'start_date' => time(), 'created' => time(), 'end_date' => strtotime('+14 days'), 'sn' => $sn); Model_Plan_HzPlanExtend::addPlanExtend($extendData); $propPlanInfo = Model_Plan_HzPlanning::getPropBidPlan($propId); if (!empty($propPlanInfo)) { $propPlan = array('plan_id' => $planId, 'unit_price' => $price, 'is_valid' => Const_HzPlan::WAITING, 'current_day' => date("Ymd"), 'ajkBrokerId' => $ajk_broker_id, 'last_update' => date("Y-m-d H:i:s")); Model_Plan_HzPlanning::updatePropPlan($propPlanInfo['id'], $propPlan); } else { $propPlan = array('proid' => $propId, 'plan_id' => $planId, 'plan_type' => 2, 'unit_price' => $price, 'is_valid' => Const_HzPlan::WAITING, 'created' => time(), 'city_id' => $cityId, 'current_day' => date("Ymd"), 'user_id' => $brokerId, 'ajkBrokerId' => $ajk_broker_id); Model_Plan_HzPlanning::addPropPlan($propPlan); } return $planId; }
/** * 更新房源状态 * * @param $propId * @param $newStatus */ public static function updatePropStatus($propId, $newStatus) { $prop = Model_House_HzProp::get_prop_info_by_prop_id($propId); if (empty($prop)) { return; } $prop['contentBasic']['status'] = $newStatus; Model_House_HzProp::updateProp($propId, array('contentBasic' => json_encode($prop['contentBasic']))); }