Esempio n. 1
0
 public function handle_request()
 {
     // 获取
     $props = Model_House_HzProp::data_access()->sort('propId', 'asc')->limit($this->per)->find_all();
     // 筛选
     $propIds = array();
     $separateTiming = strtotime("-{$this->reserve} days", strtotime(date('Y-m-d 00:00:00')));
     foreach ($props as $prop) {
         /* @var Model_House_HzProp $prop */
         // 保留天数前更新的房源,直接删除
         if ($prop['updated'] < $separateTiming) {
             $propIds[] = $prop['propId'];
             //设置房源归档,将房源从mysql写到HBase中
             $typeId = 1;
             //个人房源
             $contentOther = $prop->getContentOther();
             if (empty($contentOther)) {
                 $typeId = 2;
                 //ppc type 2 经纪人
             }
             $res = Bll_Service_Hbase::archiveProperty($typeId, $prop->propId, $prop);
             if ($res['info']['http_code'] == '200') {
                 $this->log(sprintf("[%s] - put to hbase %d row - typeId %s - [%s] : [%s]", date('Y-m-d H:i:s'), $prop->propId, $typeId, '成功', $res['data'] . '---------' . $res['info']['url']));
             } else {
                 $this->log(sprintf("[%s] - put to hbase %d row - typeId %s - [%s] : [%s]", date('Y-m-d H:i:s'), $prop->propId, $typeId, '失败', $res['data'] . '---------' . $res['info']['url']));
             }
             continue;
         }
         // 已软删除的房源,直接删除
         // 判断房源的 status 是否存在,不存在,记录日志
         $status = $prop->getContentBasic('status');
         if (is_null($status)) {
             $this->log(sprintf("[%s] - Prop %d has no status field.", date('Y-m-d H:i:s'), $prop->propId));
             continue;
         }
         if (in_array(intval($status), array(99, 100))) {
             $propIds[] = $prop['propId'];
             continue;
         }
         // 创建时间早于保留天数前更新的房源,直接删除
         // 判断房源的 created 是否存在,不存在,记录日志
         $created = $prop->getContentBasic('created');
         if (is_null($created)) {
             $this->log(sprintf("[%s] - Prop %d has no created field.", date('Y-m-d H:i:s'), $prop->propId));
             continue;
         }
         if ($created < $separateTiming) {
             $propIds[] = $prop['propId'];
             continue;
         }
         $this->log(sprintf("[%s] - Prop %d has not delete with status: %d, created: %s, updated: %s.", date('Y-m-d H:i:s'), $prop->propId, $status, date('Y-m-d H:i:s', $created), date('Y-m-d H:i:s', $prop['updated'])));
     }
     // 删除
     if ($propIds) {
         $deleteRowCount = Model_House_HzProp::data_access()->filter('propId', $propIds)->delete();
         $this->log(sprintf("[%s] - Delete %d (%d) rows - [%s]", date('Y-m-d H:i:s'), $deleteRowCount, $this->per, implode(', ', $propIds)));
     }
     // 休眠
     $this->sleep($this->sleep, $propIds);
 }
Esempio n. 2
0
 public function checkInputValid($action)
 {
     //houseIds 和 proIds 兼容
     if ($this->params['houseIds']) {
         $this->params['proIds'] = $this->params['houseIds'];
     }
     if ($this->params['propIds']) {
         $this->params['proIds'] = $this->params['propIds'];
     }
     // 房源有效性验证等
     $props = Model_House_HzProp::getPropsByPropIds($this->params['proIds'], true);
     if (empty($props)) {
         $this->outPut(0, '请选择有效的房源');
     }
     unset($this->params['proIds']);
     $this->params['proIds'] = array();
     // 过滤不是自己的 违规的 删除的 过期的
     foreach ($props as $proId => $prop) {
         if ($action == 'addPropToCombo') {
             if (in_array($prop['status'], array(6, 99, 100)) || $prop['userid'] != $this->hzBrokerId) {
                 continue;
             }
         }
         $this->params['proIds'][] = $proId;
     }
     if (empty($this->params['proIds'])) {
         $this->outPut(0, '请选择有效的房源');
     }
 }
Esempio n. 3
0
 public function get_prop_content($propId)
 {
     $da = Model_House_HzProp::data_access();
     $da->filter('propId', $propId);
     $da->sort('updated', 'desc');
     $data = $da->find();
     return $data;
 }
Esempio n. 4
0
 public function handle_request_internal()
 {
     $brokerId = $this->_params['brokerId'];
     $propId = $this->_params['propId'];
     // 获取Broker Mapping
     $brokerMapping = Model_Broker_MainBusiness::getMainBusinessByAjkBrokerId($brokerId);
     if (!$brokerMapping) {
         throw new Exception('经纪人不存在', Const_APIStatus::E_BROKER_NOT_EXISTS);
     }
     // 获取房源信息
     $prop = Model_House_HzProp::findByPropId($propId);
     if (!$prop) {
         throw new Exception('房源不存在', Const_APIStatus::E_PROP_NOT_EXISTS);
     }
     // 判断房源和经纪人关联关系
     $contentBasic = $prop->getContentBasic();
     if ($contentBasic['userid'] != $brokerMapping['hzBrokerid']) {
         throw new Exception('房源不属于该经纪人', Const_APIStatus::E_PROP_NOT_EXISTS);
     }
     $data = array();
     $area_id = $contentBasic['areaid'];
     $block_id = $contentBasic['blockid'];
     $areaInfo = Model_City_HzArea::getAreaById($area_id);
     $area_name = $areaInfo['typeName'];
     $blockInfo = Model_City_HzArea::getAreaById($block_id);
     $block_name = $blockInfo['typeName'];
     $data['areaname'] = $area_name;
     $data['blockname'] = $block_name;
     $data['propId'] = $propId;
     $data['url'] = $this->build_base_url($contentBasic['cityid'], $propId);
     $data['title'] = $contentBasic['title'];
     $data['imgUrl'] = $prop->getDefaultImageUrl();
     $data['commId'] = $contentBasic['commid'];
     $data['commName'] = $contentBasic['commname'];
     $data['roomNum'] = $contentBasic['roomnum'];
     $data['hallNum'] = $contentBasic['hallnum'];
     $data['toiletNum'] = $contentBasic['toilnetnum'];
     $data['area'] = round($contentBasic['areanum']);
     $data['price'] = round($contentBasic['pricenum']);
     $data['priceUnit'] = '元/月';
     $data['isVisible'] = intval(!$prop->isIllegal());
     $data['isMoreImg'] = intval($prop->isMultiImages());
     $data['isBid'] = intval($prop->isBid());
     $data['isChoice'] = intval($prop->isChoice());
     $data['isPhonePub'] = intval($prop->isFromMobile());
     $data['publishDays'] = $prop->getPublishedDays();
     $data['publishDaysMsg'] = $prop->getPublishedDays() > 0 ? "{$data['publishDays']}天前发布" : '今天发布';
     $data['createTime'] = date('Y-m-d H:i:s', $contentBasic['created']);
     $data['updateTime'] = date('Y-m-d H:i:s', $contentBasic['updated']);
     //增加委托房源标签
     $isEntrust = Bll_Zufang_Choice::isCommissionHouse($propId, $brokerId, Model_House_Commission::TYPE_RENT);
     if ($isEntrust) {
         $data['isEntrust'] = 1;
     } else {
         $data['isEntrust'] = 0;
     }
     return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => $data);
 }
Esempio n. 5
0
 public function handle_request_internal()
 {
     $brokerId = $this->_params['brokerId'];
     $subscriptions = Model_Choice_Subscription::data_access()->filter('site', Model_Choice_Subscription::SITE_RENT)->filter('brokerId', $brokerId)->filter('status', Model_Choice_Subscription::SUBSCRIPTION_START)->find_all();
     $propIds = array();
     foreach ($subscriptions as $subscription) {
         $propIds[] = $subscription['propId'];
     }
     $propertyList = array();
     if ($propIds) {
         $props = Model_House_HzProp::findMultiByPropIds($propIds);
         foreach ($props as $prop) {
             $propId = $prop['propId'];
             $row = array();
             $row['propId'] = $propId;
             $row['title'] = $prop->getContentBasic('title');
             $row['imgUrl'] = '';
             $row['commId'] = $prop->getContentBasic('commid');
             $row['commName'] = $prop->getContentBasic('commname');
             $row['roomNum'] = $prop->getContentBasic('roomnum');
             $row['hallNum'] = $prop->getContentBasic('hallnum');
             $row['toiletNum'] = $prop->getContentBasic('toilnetnum');
             $row['area'] = $prop->getContentBasic('areanum');
             $row['price'] = $prop->getContentBasic('pricenum');
             $row['priceUnit'] = '元/月';
             $row['isBid'] = 0;
             $row['isChoice'] = 0;
             $row['isVisible'] = intval($prop->getContentBasic('status') != 6);
             $row['isMoreImg'] = intval($prop->getContentBasic('quality'));
             $row['isPhonePub'] = intval($prop->getContentBasic('from') == 'mobile-ajk-broker');
             $row['publishDays'] = $prop->getPublishedDays();
             $row['publishDaysMsg'] = $row['publishDays'] > 0 ? "{$row['publishDays']}天前发布" : '今天发布';
             $row['createTime'] = date('Y-m-d H:i:s', $prop->getContentBasic('created'));
             $row['updateTime'] = date('Y-m-d H:i:s', $prop->getContentBasic('updated'));
             $propertyList[$propId] = $row;
         }
         // 批量获取房源的默认图片
         $defaultImages = Model_Image_HzImage::getDefaultImagesByHouseIds($propIds);
         foreach ($defaultImages as $defaultImage) {
             $propertyList[$defaultImage['proid']]['imgUrl'] = $defaultImage->imageUrl();
         }
     }
     $result = array();
     $result['status'] = Const_APIStatus::RETURN_CODE_OK;
     $result['data']['propertyList'] = array_values($propertyList);
     return $result;
 }
Esempio n. 6
0
 public function handle_request_combo()
 {
     $brokerId = $this->brokerId;
     $propIds = $this->_params['propIds'];
     $cityId = $this->cityId;
     if (!is_array($propIds)) {
         $propIds = strstr($propIds, ",") === false ? array($propIds) : explode(',', $propIds);
     }
     // 房源有效性验证等
     $prop = Model_House_HzProp::getPropsByPropIds($propIds);
     if (empty($prop)) {
         throw new Exception('房源不存在');
     }
     if (!Bll_Combo_HouseRelation::houseStopComboSpread($brokerId, $cityId, $propIds, Bll_Combo_HouseRelation::SITE_TYPE_HZ)) {
         Util_MobileAPI::error_tmp('-1', '套餐推广取消失败');
     }
     return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => array('msg' => '套餐推广取消成功'));
 }
Esempio n. 7
0
 public function handle_request_internal()
 {
     $this->brokerId = $this->_params['brokerId'];
     $this->propId = $this->_params['propId'];
     // 获取经纪人映射
     $mapping = Model_Broker_MainBusiness::getMainBusinessByAjkBrokerId($this->brokerId);
     if (!$mapping) {
         throw new Exception_BrokerNotFoundException();
     }
     $hzBrokerId = $mapping['hzBrokerid'];
     $this->broker = Model_Broker_AjkBrokerExtend::findWithBrokerId($this->brokerId);
     $cityId = $this->broker['cityId'];
     // 非精选城市
     if (!Bll_City::isChoiceCity($cityId, Const_Site::HAOZU)) {
         throw new Exception('非精选城市', Const_APIStatus::E_NOT_CHOICE_CITY);
     }
     // 获取房源信息
     $this->prop = Model_House_HzProp::findByPropId($this->propId);
     if (!$this->prop) {
         throw new Exception_PropertyNotFoundException('房源不存在', Const_APIStatus::E_PROP_NOT_EXISTS);
     }
     // 检查房源是否属于当前经纪人
     if (!$this->prop->belongToBroker($hzBrokerId)) {
         throw new Exception('房源不属于经纪人', Const_APIStatus::E_PROP_NOT_EXISTS);
     }
     $price = $this->prop->getContentBasic('pricenum');
     $blockId = $this->prop->getContentBasic('blockid');
     // 获取精选推广位
     $this->bucket = Bll_Choice_HzBidBucket::get_bucket_info($blockId, $cityId, $price);
     $this->bucketId = $this->bucket['id'];
     // 检查房源是否可以添加精选推广位订阅
     if (($result = $this->hasAddChoiceRemindPermission()) !== true) {
         throw new Exception($result['msg'], intval($result['code']));
     }
     // 创建订阅
     $subscription = Model_Choice_Subscription::data_access()->filter('site', Model_Choice_Subscription::SITE_RENT)->filter('brokerId', $this->brokerId)->filter('propId', $this->propId)->filter('bucketId', $this->bucketId)->find_only();
     if (!$subscription) {
         Model_Choice_Subscription::create(array(Model_Choice_Subscription::SITE => Model_Choice_Subscription::SITE_RENT, Model_Choice_Subscription::BROKER_ID => $this->brokerId, Model_Choice_Subscription::PROP_ID => $this->propId, Model_Choice_Subscription::BUCKET_ID => $this->bucketId, Model_Choice_Subscription::STATUS => Model_Choice_Subscription::SUBSCRIPTION_START, Model_Choice_Subscription::CREATE_TIME => date('Y-m-d H:i:s'), Model_Choice_Subscription::UPDATE_TIME => date('Y-m-d H:i:s')))->save();
     } else {
         $subscription->status = Model_Choice_Subscription::SUBSCRIPTION_START;
         $subscription->save();
     }
     return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => array('remindStatus' => 1, 'remindStatusMsg' => '取消推广位提醒'));
 }
Esempio n. 8
0
 public function handle_request_internal()
 {
     $brokerId = $this->_params['brokerId'];
     $propId = $this->_params['propId'];
     // 获取Broker Mapping
     $brokerMapping = Model_Broker_MainBusiness::getMainBusinessByAjkBrokerId($brokerId);
     if (!$brokerMapping) {
         throw new Exception('经纪人不存在', Const_APIStatus::E_BROKER_NOT_EXISTS);
     }
     $data = array();
     // 获取房源和计划关系
     $planRelation = Model_Plan_HzPlanning::getPropFixPlan($propId);
     if ($planRelation) {
         $data['status'] = 1;
         //推广中
     } else {
         $data['status'] = 0;
         //未推广
     }
     // 获取房源信息
     $prop = Model_House_HzProp::data_access()->filter('propId', $propId)->find_only();
     if (!$prop) {
         throw new Exception('房源不存在', Const_APIStatus::E_PROP_NOT_EXISTS);
     }
     // 判断房源和经纪人关联关系
     $propBasic = json_decode($prop['contentBasic'], true);
     if ($propBasic['userid'] != $brokerMapping['hzBrokerid']) {
         throw new Exception('房源不属于该经纪人', Const_APIStatus::E_PROP_NOT_EXISTS);
         // TODO
     }
     // 根据房源的计划ID判断房源是否已定价推广
     $data['planId'] = '';
     if ($plan = $prop->getFixPlan()) {
         $data['planId'] = $plan['id'];
     }
     // 点击单价
     $data['clickPrice'] = round($prop->getFixClickPrice(), 2);
     $data['clickPriceUnit'] = '元';
     // 今日定价点击量
     $data['todayClicks'] = $prop->getTodayClickSums('fix');
     // 定价点击总量
     $data['totalClicks'] = $prop->getTotalClickSums('fix');
     return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => $data);
 }
Esempio n. 9
0
 public function handle_request_combo()
 {
     $propIds = $this->_params['propIds'];
     $brokerId = $this->brokerId;
     $cityId = $this->cityId;
     if (!is_array($propIds)) {
         $propIds = strstr($propIds, ",") === false ? array($propIds) : explode(',', $propIds);
     }
     // 房源有效性验证等
     $prop = Model_House_HzProp::getPropsByPropIds($propIds);
     $newPropIds = array();
     // 验证房源是否已经被删除
     foreach ($prop as $propId => $value) {
         if ($value['status'] > 0 && !in_array($value['status'], array(6, 99, 100))) {
             $newPropIds[$propId] = $propId;
         }
     }
     if (empty($newPropIds)) {
         throw new Exception('房源不存在');
     }
     $result = Bll_Combo_HouseRelation::houseStartComboSpreadV2($brokerId, $cityId, $newPropIds, Bll_Combo_HouseRelation::SITE_TYPE_HZ);
     if ($result['status'] == 1) {
         return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => array('msg' => '套餐立即推广成功'));
     } else {
         switch ($result['status']) {
             case -1:
                 $msg = '尚未购买套餐,请购买套餐';
                 break;
             case -2:
                 $msg = '尚未购买套餐,请购买套餐';
                 break;
             case -4:
                 $msg = '推广房源数超过上限';
                 break;
             case -5:
                 $msg = '推广房源数超过上限';
                 break;
             default:
                 $msg = $result['msg'];
         }
         return Util_MobileAPI::error_tmp($result['status'], $msg);
     }
 }
Esempio n. 10
0
 /**
  * @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;
 }
Esempio n. 11
0
 /**
  * 根据房源ID获取好租prop房源信息
  * @param array $ids 房源ID,支持一个数字的房源ID或者一维数组的房源ID
  * @return array|mixed|null|string
  */
 public function getHzProInfoByIds($ids = array())
 {
     if (empty($ids)) {
         return array();
     }
     if (is_numeric($ids)) {
         try {
             return Model_House_HzProp::data_access()->find_by_pk($ids);
         } catch (Exception $e) {
             return array();
         }
     } elseif (is_array($ids)) {
         try {
             return Model_House_HzProp::data_access()->find_by_pks($ids);
         } catch (Exception $e) {
             return array();
         }
     }
     return array();
 }
Esempio n. 12
0
 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;
 }
Esempio n. 13
0
 public function handle_request_combo()
 {
     $ajkBrokerId = $this->brokerId;
     $cityId = $this->cityId;
     $siteType = Bll_Combo_Broker_BrokerComboInfo::SITE_TYPE_HZ;
     //首先获取套餐关系房源列表 ---- 那房源到主表去除status 已删除的房源 -----在房源主表获取房源基本信息
     $comboList = Bll_Combo_HouseRelation::getHouseRelations($ajkBrokerId, $siteType, 1);
     $surplus = $hasCombo = 0;
     //获取套餐信息-首先判断经纪人有无套餐
     $comboInfos = Bll_Combo_Broker_BrokerComboInfo::getComboListBySite($ajkBrokerId, $siteType);
     if (count($comboInfos) > 0) {
         $index = Bll_Combo_Broker_BrokerComboInfo::getComboIndexBySiteType($siteType);
         $currentTime = time();
         foreach ($comboInfos as $combo) {
             if ($combo[$index] == 0) {
                 continue;
             }
             if (strtotime($combo['endTime']) > $currentTime && strtotime($combo['startTime']) < $currentTime) {
                 $currentCombo = $combo;
             }
         }
         if (!empty($currentCombo)) {
             $surplus = $currentCombo['rentPropNum'];
             if (Bll_Combo_Broker_BrokerComboInfo::isOpenUp($currentCombo)) {
                 //商业地产没打通
                 $surplus = $currentCombo['rentPropNum'] + $currentCombo['salePropNum'];
             }
             $hasCombo = 1;
         }
     }
     //获取当前已推广套餐数量
     if (Bll_Combo_Broker_BrokerComboInfo::isOpenUp($currentCombo)) {
         $currentSpreadHouseCount = Bll_Combo_HouseRelation::getHouseCount($ajkBrokerId, $siteType, true);
     } else {
         $currentSpreadHouseCount = Bll_Combo_HouseRelation::getHouseCountEx($ajkBrokerId, $cityId, $siteType);
     }
     $oldList = $newList = array();
     if (empty($comboInfos)) {
         return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => array('newList' => $newList, 'oldList' => $oldList, 'surplus' => $surplus - $currentSpreadHouseCount, 'hasCombo' => $hasCombo));
     }
     $propIds = array();
     foreach ($comboList as $row) {
         $propIds[] = $row['houseId'];
     }
     $hzBrokerId = Bll_HzBroker::get_brokerid_by_ajk_brokerid($ajkBrokerId);
     $comboPropList = Model_House_HzPropSearch::getPropList($propIds, $hzBrokerId, $this->cityId);
     foreach ($comboPropList as $key => $list) {
         if (in_array($list['status'], array(Const_HzStatus::VERIFY, Const_HzStatus::REMOVE, Const_HzStatus::EXPIRED))) {
             unset($comboPropList[$key]);
         }
     }
     //fix bug45133
     if (empty($comboPropList)) {
         return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => array('newList' => $newList, 'oldList' => $oldList, 'surplus' => $surplus - $currentSpreadHouseCount, 'hasCombo' => $hasCombo));
     }
     $propIds = array();
     foreach ($comboPropList as $row) {
         $propIds[] = $row['proid'];
     }
     //从主表获取房源信息
     $propertyList = Model_House_HzProp::getPropsByPropIds($propIds);
     //获取是否精选或者竞价
     $relations = Model_Plan_HzPlanning::getBidRelationsByHouseIds($propIds, array(Const_HzPlan::SPREAD, Const_HzPlan::WAITING));
     if (!empty($relations)) {
         $planPropMap = array();
         foreach ($relations as $relation) {
             $planIds[] = $relation['plan_id'];
             $planPropMap[$relation['plan_id']] = $relation['proid'];
         }
         if (!empty($planIds)) {
             $plans = Model_Plan_HzPlanBasic::getPlansByIds($planIds);
             foreach ($plans as $plan) {
                 if ($plan->flag == 0) {
                     continue;
                 }
                 if ($plan->bid_version == 2) {
                     $propId = $planPropMap[$plan['id']];
                     $propertyList[$propId]['isChoice'] = 1;
                 } else {
                     $propId = $planPropMap[$plan['id']];
                     $propertyList[$propId]['isBid'] = 1;
                 }
             }
         }
     }
     // 批量获取房源的默认图片
     $defaultImages = Model_Image_HzImage::getDefaultImagesByHouseIds($propIds);
     if (!empty($defaultImages)) {
         foreach ($defaultImages as $defaultImage) {
             $propertyList[$defaultImage['proid']]['imgUrl'] = $defaultImage->imageUrl();
         }
     }
     krsort($propertyList);
     $startDate = $endDate = date('Ymd');
     $todayClicks = Bll_Combo_Broker_BrokerComboInfo::getHouseComboClickEx($propIds, $startDate, $endDate, Model_Ppc_NewPackageStatsHouseDay::SITE_TYPE_HZ);
     $totalClicks = Bll_House_HzHouse::getComboHouseAccumulateClick($ajkBrokerId, $propIds, $cityId);
     foreach ($propertyList as $list) {
         $row = array();
         $row['id'] = $list['propId'];
         $row['propId'] = $list['propId'];
         $row['title'] = $list['title'];
         $row['imgUrl'] = $list['imgUrl'] ?: '';
         $row['commId'] = $list['commid'];
         $row['commName'] = $list['commname'];
         $row['roomNum'] = $list['roomnum'];
         $row['hallNum'] = $list['hallnum'];
         $row['toiletNum'] = $list['toilnetnum'];
         $row['area'] = round($list['areanum']);
         $row['price'] = round($list['pricenum']);
         $row['priceUnit'] = '元/月';
         $row['todayClicks'] = $todayClicks[$list['propId']][$startDate] ?: 0;
         $row['totalClicks'] = $totalClicks[$list['propId']] ?: 0;
         $row['totalClicks'] = $row['totalClicks'] + $row['todayClicks'];
         $row['isBid'] = isset($list['isBid']) ? $list['isBid'] : 0;
         $row['isChoice'] = isset($list['isChoice']) ? $list['isChoice'] : 0;
         $row['isVisible'] = (int) ($list['status'] != 6);
         $row['isMoreImg'] = (int) $list['quality'];
         $row['isPhonePub'] = (int) (isset($list['from']) && $list['from'] == 'mobile-ajk-broker');
         $row['publishDays'] = floor((time() - $list['created']) / 86400);
         $row['publishDaysMsg'] = $row['publishDays'] > 0 ? "{$row['publishDays']}天前发布" : '今天发布';
         $row['createTime'] = date('Y-m-d H:i:s', $list['created']);
         //$row['updateTime'] = date('Y-m-d H:i:s', $list['updated']);
         //是否委托
         $isEntrust = Bll_Zufang_Choice::isCommissionHouse($list['propId'], $ajkBrokerId, Model_House_Commission::TYPE_RENT);
         $row['isEntrust'] = $isEntrust ? 1 : 0;
         $row['publishDays'] > 30 ? $oldList[] = $row : ($newList[] = $row);
     }
     return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => array('newList' => $newList, 'oldList' => $oldList, 'surplus' => $surplus - $currentSpreadHouseCount, 'hasCombo' => $hasCombo));
 }
Esempio n. 14
0
 /**
  * 精选房源板块变更,修正计划的板块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);
 }
Esempio n. 15
0
 /**
  * 更新房源信息
  *
  * @param $propId
  * @param array $params
  * @return bool|int
  */
 public static function updateProp($propId, $params = array())
 {
     if (!is_array($params)) {
         return false;
     }
     unset($params['propId'], $params['proid'], $params['updated']);
     if (empty($params)) {
         return false;
     }
     try {
         $oProp = Model_House_HzProp::data_access()->filter('propId', $propId);
         foreach ($params as $key => $value) {
             $oProp->set_field($key, $value);
         }
         $oProp->updated = time();
         return $oProp->update();
     } catch (Exception $e) {
         return false;
     }
 }
Esempio n. 16
0
 /**
  * 组装未推广列表 取出所有-有效定价房源
  * @param $out
  * @return array
  */
 private static function prepareOutList(&$out)
 {
     $outList = array();
     $outPropIds = array();
     $fixProIds = array_keys($out['props']);
     // 取出经纪人所有非删除房源 (分表)
     $allSearchProps = Model_House_HzPropSearch::getPropLists($out['cityId'], array(array('ajkBrokerId', '=', $out['ajkBrokerId']), array('status', '<>', Const_HzStatus::DELETE), array('status', '<>', Const_HzStatus::OFFLINE), array('status', '<>', Const_HzStatus::OUTPORT), array('status', '<>', Const_HzStatus::HIBERNATE), array('status', '<>', Const_HzStatus::REMOVE), array('status', '<>', Const_HzStatus::EXPIRED)), 1000, array('created', 'desc'));
     if (empty($allSearchProps)) {
         return array();
     }
     // 获取城市价格段
     $allPrices = Model_House_HzPriceChoice::getAllPriceByCityId($out['cityId']);
     $out['getQualityProIds'] = array();
     foreach ($allSearchProps as $allSearchProp) {
         $proId = $allSearchProp['proid'];
         $out['getQualityProIds'][] = $proId;
         // 过滤非删除状态定价
         if (in_array($proId, $fixProIds)) {
             continue;
         }
         $outList[$proId] = $allSearchProp;
         // 获取剩余时间
         $outList[$proId]['leftDays'] = Bll_House_HzHouse::getLeftDays($allSearchProp['created']);
         $outPropIds[] = $proId;
     }
     // 获取改经纪人所有房源质量
     $out['propsQuality'] = Model_Stats_HzPropQuality::getPropsquality($out['getQualityProIds']);
     // 获取如是违规房源 拼接违规原因
     $outList = Bll_HzProp::checkAndGetPropsIllegalInfos($outList);
     // 批量获取主表信息
     if (empty($outPropIds)) {
         return array();
     }
     $props = Model_House_HzProp::getPropsByPropIds($outPropIds);
     if (!$props) {
         return array();
     }
     // 房源主分表信息合并
     foreach ($outList as $proId => $outProp) {
         $outList[$proId] = array_merge($outList[$proId], $props[$proId]);
         // 计算点击价格
         if (!empty($allPrices)) {
             foreach ($allPrices as $priceInfo) {
                 if ($priceInfo['lower'] < $outList[$proId]['pricenum'] && $priceInfo['upper'] >= $outList[$proId]['pricenum']) {
                     $outList[$proId]['unitPrice'] = $priceInfo['price'];
                     break;
                 }
             }
         }
     }
     return $outList;
 }
Esempio n. 17
0
 /**
  * 精选房源设置
  *
  * @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;
 }
Esempio n. 18
0
 /**
  * 添加竞价计划
  * 往 `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;
 }
Esempio n. 19
0
 /**
  * 更新房源状态
  *
  * @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'])));
 }
Esempio n. 20
0
 /**
  * 警告:未得到授权,不能使用。所有者: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;
 }
Esempio n. 21
0
 /**
  * 重新计算坑位数
  *  获取精选计划,根据计划的板块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;
 }
Esempio n. 22
0
 public function handle_request_internal()
 {
     $brokerId = $this->_params['brokerId'];
     $propId = $this->_params['propId'];
     // 判断经纪人是否存在
     $broker = Model_Broker_AjkBrokerExtend::findWithBrokerId($brokerId);
     $hzBrokerId = Model_Broker_MainBusiness::getHzBrokerIdByAjkBrokerId($brokerId);
     if (!$hzBrokerId || !$broker) {
         throw new Exception_Broker_NotFound('BrokerId: ' . $brokerId);
     }
     // 判断城市是否开通竞价业务
     $cityId = $broker['cityId'];
     if (!Bll_City::isBidCity($cityId)) {
         throw new Exception_City_NotBidCity('CityId: ' . $cityId);
     }
     // 获取房源信息
     $prop = Model_House_HzProp::findByPropId($propId);
     /* @var Model_House_HzProp $prop */
     if (!$prop) {
         throw new Exception_Property_NotFound("Zufang propId: {$propId}");
     }
     // TODO 是否需要判断房源是否已删除
     // 判断房源是否属于经纪人
     if ($prop->getContentBasic('userid') != $hzBrokerId) {
         throw new Exception_Property_NotFound("Zufang propId: {$propId} not belog to broker: {$brokerId}");
     }
     // 准备默认返回数据(房源未竞价)
     $data = array('planId' => 0, 'status' => 0, 'rank' => -1, 'rankMsg' => '已暂停', 'todayClicks' => 0, 'totalClicks' => 0, 'clickPrice' => 0, 'clickPriceUnit' => '元', 'minClickPrice' => $prop->getBidMinClickPrice(), 'minClickPriceUnit' => '元', 'budget' => 0, 'budgetUnit' => '元', 'budgetRemain' => 0, 'budgetRemainUnit' => '元');
     // 获取竞价计划
     $bidPlan = $prop->getBidPlan();
     if (!$bidPlan) {
         // 判断房源是否多图房源
         if (!$prop->isMultiImages()) {
             throw new Exception_Property_NotMultiImages("Zufang propId: {$propId}");
         }
         // TODO 判断是否定价推广(也许可以不用,因为只有从定价推广房源列表点进去的房源详情页才会请求该接口)
     } else {
         // 竞价计划ID
         $data['planId'] = $bidPlan['id'];
         // 竞价计划状态
         switch ($bidPlan['status']) {
             case Const_HzPlan::SPREAD:
                 $data['status'] = 1;
                 // 推广中 or 排队中
                 break;
             case Const_HzPlan::MENUOVER:
                 $data['status'] = 2;
                 // 已暂停
                 break;
         }
         // 竞价预算
         $data['budget'] = round($bidPlan['amount'], 2);
         // 竞价预算余额
         $data['budgetRemain'] = round($bidPlan['amount'] - $bidPlan['total_consume'], 2);
         // 竞价排名
         if ($data['status'] == 1) {
             $data['rank'] = Bll_HzBidPlan::get_bid_rank($prop->getContentBasic(), $cityId);
             if ($data['rank'] <= 5) {
                 $data['rankMsg'] = '';
             } else {
                 $data['rankMsg'] = '排队中';
             }
         }
         // 竞价点击单价
         $bidRelation = $prop->getBidRelation();
         $data['clickPrice'] = round($bidRelation['unit_price'], 2);
         // 竞价点击底价
         $data['minClickPrice'] = round($prop->getBidMinClickPrice(), 2);
         // 今日竞价点击量
         $data['todayClicks'] = $prop->getTodayClickSums('bid');
         // 竞价点击总量
         $data['totalClicks'] = $prop->getTotalClickSums('bid');
     }
     return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => $data);
 }
Esempio n. 23
0
 /**
  * 通知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;
     }
 }
Esempio n. 24
0
 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));
 }
 public function push($remind, &$error)
 {
     // 订阅不存在,不推送
     if (!isset($this->subscriptions[$remind['subscriptionId']])) {
         $error = 'subscription is not exist.';
         return false;
     }
     // 订阅已取消,不推送
     $subscription = $this->subscriptions[$remind['subscriptionId']];
     if ($subscription['status'] == Model_Choice_Subscription::SUBSCRIPTION_CANCEL) {
         $error = 'subscription is canceled';
         return false;
     }
     // 微聊账户不存在,不推送
     $chatInfo = Model_Mobile_BrokerChatInfo::data_access()->filter('brokerId', $subscription['brokerId'])->find_only();
     if (!$chatInfo) {
         $error = 'broker has no chat account.';
         return false;
     }
     // 文案:XXX(小区)的精选推广位空出来了,快去占位吧!
     if ($subscription['site'] == Model_Choice_Subscription::SITE_AJK) {
         // 获取二手房房源小区
         $broker = Model_Broker_AjkBrokerExtend::data_access()->filter('brokerId', $subscription['brokerId'])->find_only();
         $cityId = $broker['cityId'];
         $prop = Bll_House_EsfHouse::getHouseInfo($subscription['propId'], $cityId);
         $commName = $prop['commName'];
     } elseif ($subscription['site'] == Model_Choice_Subscription::SITE_RENT) {
         // 获取租房房源小区
         $prop = Model_House_HzProp::findByPropId($subscription['propId']);
         $cityId = $prop->getContentBasic('cityid');
         $propSearch = Model_House_HzPropSearch::data_access($cityId)->filter('proid', $prop['propId'])->find_only();
         $commName = $propSearch['commname'];
     } else {
         $error = 'invalid subscription site.';
         return false;
     }
     if (!$commName) {
         $error = 'failed to fetch community name';
         return false;
     }
     // 准备待推送文案
     $type = 'subscription';
     $text = $commName . '的精选推广位空出来了,快去占位吧!';
     $propId = strval($subscription['propId']);
     $tradeType = strval($subscription['site']);
     // 1 二手房 2租房
     // 推送消息
     $chatId = $chatInfo['chatId'];
     $api_host = APF::get_instance()->get_config('chat_api_host');
     $message_url = $api_host['host'] . '/common/sendUserNotify/' . $chatId . '?from_idc=1&from=mobile-ajk-broker';
     $message = json_encode(array('msgType' => 'push', 'type' => $type, 'message' => $text, 'propId' => $propId, 'tradeType' => $tradeType, 'body' => array('type' => $type, 'msg' => $text, 'propId' => $propId, 'tradeType' => $tradeType)));
     $result = Util_API::postData($message_url, $message);
     if ($result['status'] != 'OK') {
         $error = 'failed to call push api: ' . json_encode($result);
         return false;
     }
     return true;
 }
Esempio n. 26
0
 public function getComboPropsInOneComm($brokerId, $cityId, $commId = '')
 {
     $siteType = Bll_Combo_Broker_BrokerComboInfo::SITE_TYPE_HZ;
     $comboList = Bll_Combo_HouseRelation::getHouseRelations($brokerId, $siteType, 1);
     if (empty($comboList)) {
         return array();
     }
     $propIds = array();
     foreach ($comboList as $row) {
         $propIds[] = $row['houseId'];
     }
     $propertyList = Model_House_HzProp::getPropsByPropIds($propIds);
     //获取是否精选或者竞价
     $relations = Model_Plan_HzPlanning::getBidRelationsByHouseIds($propIds, array(Const_HzPlan::SPREAD, Const_HzPlan::WAITING));
     if (!empty($relations)) {
         $planPropMap = array();
         foreach ($relations as $relation) {
             $planIds[] = $relation['plan_id'];
             $planPropMap[$relation['plan_id']] = $relation['proid'];
         }
         if (!empty($planIds)) {
             $plans = Model_Plan_HzPlanBasic::getPlansByIds($planIds);
             foreach ($plans as $plan) {
                 if ($plan->flag == 0) {
                     continue;
                 }
                 if ($plan->bid_version == 2) {
                     $propId = $planPropMap[$plan['id']];
                     $propertyList[$propId]['isChoice'] = 1;
                 } else {
                     $propId = $planPropMap[$plan['id']];
                     $propertyList[$propId]['isBid'] = 1;
                 }
             }
         }
     }
     // 批量获取房源的默认图片
     $defaultImages = Model_Image_HzImage::getDefaultImagesByHouseIds($propIds);
     if (!empty($defaultImages)) {
         foreach ($defaultImages as $defaultImage) {
             $propertyList[$defaultImage['proid']]['imgUrl'] = $defaultImage->imageUrl();
         }
     }
     krsort($propertyList);
     $base_domain = APF::get_instance()->get_config('base_domain');
     $startDate = $endDate = date('Ymd');
     $todayClicks = Bll_Combo_Broker_BrokerComboInfo::getHouseComboClickEx($propIds, $startDate, $endDate, Model_Ppc_NewPackageStatsHouseDay::SITE_TYPE_HZ);
     $totalClicks = Bll_House_HzHouse::getComboHouseAccumulateClick($brokerId, $propIds, $cityId);
     foreach ($propertyList as $key => $prop) {
         if (in_array($prop['status'], array(Const_HzStatus::VERIFY, Const_HzStatus::REMOVE, Const_HzStatus::EXPIRED))) {
             continue;
         }
         $row = array();
         $row['id'] = $prop['propId'];
         $row['title'] = $prop['title'];
         $row['commId'] = $prop['commid'];
         $row['commName'] = $prop['commname'];
         $row['roomNum'] = $prop['roomnum'];
         $row['hallNum'] = $prop['hallnum'];
         $row['toiletNum'] = $prop['toilnetnum'];
         $row['area'] = round($prop['areanum']);
         $row['price'] = round($prop['pricenum']);
         $row['priceUnit'] = '元/月';
         $row['isVisible'] = (int) ($prop['status'] != 6);
         $row['imgUrl'] = $prop['imgUrl'] ?: '';
         $row['isMoreImg'] = (int) $prop['quality'];
         $row['isPhonePub'] = (int) (isset($prop['from']) && $prop['from'] == 'mobile-ajk-broker');
         $row['propUrl'] = 'http://' . $base_domain . '/web/rent/x/' . $prop['cityid'] . '/' . $prop['propId'] . '-3';
         $row['isBid'] = isset($prop['isBid']) ? $prop['isBid'] : 0;
         $row['isChoice'] = isset($prop['isChoice']) ? $prop['isChoice'] : 0;
         $todayClick = $todayClicks[$prop['propId']][$startDate] ?: 0;
         $row['totalClicks'] = $totalClicks[$prop['propId']] ?: 0;
         $row['totalClicks'] = $row['totalClicks'] + $todayClick;
         $row['createTime'] = date('Y-m-d H:i:s', $prop['created']);
         $row['updateTime'] = date('Y-m-d H:i:s', $prop['updated']);
         $commProps[$prop['commid']][$key] = $row;
     }
     // 如果是获取某单个小区房源列表
     if ($commId) {
         $ret['status'] = 'ok';
         $ret['data']['propertyList'] = isset($commProps[$commId]) && !empty($commProps[$commId]) ? array_values($commProps[$commId]) : array();
     } else {
         $ret = isset($commProps) && !empty($commProps) ? $commProps : array();
     }
     return $ret;
 }
Esempio n. 27
0
 /**
  * 更具二手房经纪人ID 获取房源信息
  *
  * @param int $ajkBrokerId
  * @param int $cityId
  * @param bool $isGetMainProp
  * @return array
  */
 public static function getValidPropsByBrokerIdEx($ajkBrokerId, $cityId, $isGetMainProp = true)
 {
     $result = array();
     // 取出经纪人所有非删除房源 (分表)
     $props = Model_House_HzPropSearch::getPropLists($cityId, array(array('ajkBrokerId', '=', $ajkBrokerId), array('status', '<>', Const_HzStatus::REMOVE), array('status', '<>', Const_HzStatus::EXPIRED)), 1000, array('created', 'desc'));
     if (empty($props)) {
         return $result;
     }
     foreach ($props as $prop) {
         $result[$prop['proid']] = $prop;
     }
     if (!$isGetMainProp) {
         return $result;
     }
     // 获取主表房源
     $mainProps = Model_House_HzProp::getPropsByPropIds(array_keys($result));
     if ($mainProps) {
         foreach ($result as $proId => $searchProp) {
             if (isset($mainProps[$proId])) {
                 $result[$proId] = array_merge($mainProps[$proId], $searchProp);
             }
         }
     }
     return $result;
 }
Esempio n. 28
0
 /**
  * 获取好租的坑位信息
  *
  * @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);
 }
Esempio n. 29
0
 /**
  * 租房精选房源取消推广
  * 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;
 }
Esempio n. 30
0
 /**
  * 房产季,取消标签 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);
 }