Пример #1
0
 public function handle_request_internal()
 {
     $brokerId = $this->_params['brokerId'];
     //检查经纪人是否存在
     $brokerInfo = Model_Broker_AjkBrokerExtend::findWithBrokerId($brokerId);
     if (!$brokerInfo) {
         throw new Exception_Broker_NotFound('BrokerId: ' . $brokerId);
     }
     // 判断城市是否开通竞价业务
     $cityId = $brokerInfo->cityId;
     if (!Bll_City::isBidCity($cityId)) {
         return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => array('todayClicks' => 0, 'todayConsume' => 0, 'todayConsumeUnit' => '元', 'totalProps' => 0));
     }
     $data = array('todayClicks' => 0, 'todayConsume' => 0, 'todayConsumeUnit' => '元');
     $datei = date('Ymd');
     //获取经纪人竞价推广某天的点击和花费信息
     $allClickAndCostInfo = Model_Plan_HpProStatsDay::getBrokerClickAndCostDay($brokerId, $cityId, $datei);
     foreach ($allClickAndCostInfo as $row) {
         $data['todayClicks'] += $row->cnum;
         $data['todayConsume'] += $row->amount / 100;
     }
     $data['todayConsume'] = Util_Formatter::formatTodayConsume($data['todayConsume']);
     //获取计划数
     $data['totalProps'] = Model_Plan_EsfAjkPropSpread::getPlanCountByBroker($brokerId, Model_Plan_EsfAjkPropSpread::DEFAULTVERSION);
     return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => $data);
 }
Пример #2
0
 /**
  * 获取二手房 精选状态发生变更的房源
  *
  * @param int $startTime
  * @param int $endTime
  * @param int $startId
  * @return array
  */
 private function getHouseSpreadStateChangeResultAjk($startTime, $endTime, $startId)
 {
     $result = array('spread_house' => array(), 'not_spread_house' => array(), 'last_id' => 0);
     try {
         $dataAccess = Model_Plan_EsfAjkPropSpread::data_access('');
         $dataAccess->filter_by_op('updatedDatetime', '>=', date('Y-m-d H:i:s', $startTime));
         $dataAccess->filter_by_op('updatedDatetime', '<=', date('Y-m-d H:i:s', $endTime));
         if ($startId > 0) {
             $dataAccess->filter_by_op('id', '>', $startId);
         }
         $dataAccess->load_field(array('id', 'status', 'propId', 'brokerId'));
         $dataAccess->sort('id', 'asc');
         $dataAccess->limit(1000);
         $stateChangePlanList = $dataAccess->get_all();
     } catch (Exception $e) {
         return $result;
     }
     if (empty($stateChangePlanList)) {
         return $result;
     }
     foreach ($stateChangePlanList as $stateChangePlan) {
         $result['last_id'] = $stateChangePlan['id'];
         if ($stateChangePlan['status'] == Model_Plan_EsfAjkPropSpread::ONLINE) {
             $result['spread_house'][] = $stateChangePlan['propId'];
         } else {
             $result['not_spread_house'][] = $stateChangePlan['propId'];
         }
     }
     return $result;
 }
Пример #3
0
 /**
  * 获取二手房房源的推广状态
  *
  * @param int|array $houseId
  * @return array
  */
 private function getHouseSpreadStateAjk($houseId)
 {
     $result = array('spread_house' => array(), 'not_spread_house' => array());
     try {
         $dataAccess = Model_Plan_EsfAjkPropSpread::data_access();
         $dataAccess->filter('propId', $houseId);
         $dataAccess->filter_by_op('status', '<>', Model_Plan_EsfAjkPropSpread::DELETE);
         $dataAccess->filter_by_op('tradetype', '=', Model_Plan_EsfAjkPropSpread::SALE_TYPE);
         $planList = $dataAccess->get_all();
     } catch (Exception $e) {
         return $result;
     }
     if (empty($planList)) {
         $result['not_spread_house'] = is_array($houseId) ? $houseId : array($houseId);
         return $result;
     }
     foreach ($planList as $planInfo) {
         if ($planInfo['status'] == Model_Plan_EsfAjkPropSpread::ONLINE) {
             $result['spread_house'][] = $planInfo['propId'];
         }
     }
     if (is_array($houseId)) {
         $result['not_spread_house'] = array_values(array_diff($houseId, $result['spread_house']));
     } elseif (empty($result['spread_house'])) {
         $result['not_spread_house'][] = $houseId;
     }
     return $result;
 }
Пример #4
0
 /**
  * 上下架队列,二手房价格段变写房源日志
  *
  * @param array $queue
  * @return array
  */
 public static function upDownDeal($queue)
 {
     $priceInterval = json_decode($queue['remark'], true);
     if (!is_array($priceInterval) || empty($priceInterval)) {
         return array('status' => 0, 'msg' => 'remark解析JSON错误');
     }
     if (!isset($priceInterval['id'])) {
         return array('status' => 0, 'msg' => '没有获取到价格段Id');
     }
     $priceId = intval($priceInterval['id']);
     $priceIntervalInfo = Model_House_EsfPrice::get_price_by_id($priceId);
     if (empty($priceIntervalInfo)) {
         return array('status' => 0, 'msg' => '没有获取到价格段信息[' . $priceId . ']');
     }
     $choicePlanList = Model_Plan_EsfAjkPropSpread::getChoicePlanByPrice($priceIntervalInfo['cityId'], $priceIntervalInfo['minPrice'], $priceIntervalInfo['maxPrice']);
     if (empty($choicePlanList)) {
         return array('status' => 1, 'msg' => sprintf('没有获取到推广、排队的精选计划[%d - %d -%d]', $priceIntervalInfo['cityId'], $priceIntervalInfo['minPrice'], $priceIntervalInfo['maxPrice']));
     }
     $dealMark = array();
     $remark = sprintf('价格段变更[queue_id: %d]', $queue['id']);
     foreach ($choicePlanList as $choicePlan) {
         $houseLog = static::buildHouseLog($choicePlan['propId'], $choicePlan['brokerId'], $choicePlan['cityId'], Const_ProPlanChangeType::PRICE_INTERVAL_CHANGE, Const_ProLogType::LOG_PRICE_INTERVAL_CHANGE, $remark);
         if (!Model_Log_HouseLogNew::create($houseLog, date('Ymd'))->save()) {
             $dealMark[] = sprintf('精选[%d]房源[%d]价格段变更写房源日志失败', $choicePlan['id'], $choicePlan['propId']);
         } else {
             $dealMark[] = sprintf('精选[%d]房源[%d]价格段变更写房源日志成功', $choicePlan['id'], $choicePlan['propId']);
         }
     }
     return array('status' => 1, 'msg' => sprintf('价格段变更房源日志写入完成,%s', implode(',', $dealMark)));
 }
Пример #5
0
 public static function createEsfOrder($planId)
 {
     $planInfo = Model_Plan_EsfAjkPropSpread::getPlanInfoByIdEx($planId);
     if (empty($planInfo)) {
         throw new Exception(sprintf('二手房竞价计划[%d]不存在', $planId));
     }
     $data = array('requestId' => static::getRequestId($planId), 'status' => 0, 'userId' => $planInfo['userId'], 'siteType' => 1, 'failNum' => 0, 'addTime' => time(), 'addDate' => date('Ymd'), 'updateTime' => date('Ymd H:i:s'), 'remark' => '二手房精选结算', 'proId' => $planInfo['propId'], 'serialNumber' => $planInfo['serialnumber'], 'planId' => $planId, 'amount' => ($planInfo['budget'] - $planInfo['balance']) / 100, 'appName' => Const_PaymentApp::AJK_CHOICE);
     $order = Model_Payment_ABidUnfreeze::create($data, date('Y'));
     $order->save();
     return new Bll_Ppc_BidUnfreeze($order->id);
 }
 public function handle_request()
 {
     $zeroOfferPlanList = Model_Plan_EsfAjkPropSpread::scanPlan0Offer($this->_startId, self::BATCH_LIMIT);
     if (empty($zeroOfferPlanList)) {
         $this->logMsg(sprintf('startId: %d 没有获取到计划。', $this->_startId));
         file_put_contents($this->_doneFile, 'DONE');
     }
     foreach ($zeroOfferPlanList as $planInfo) {
         $cityId = $planInfo['cityId'];
         $houseId = $planInfo['propId'];
         $planId = $planInfo['id'];
         $brokerId = $planInfo['brokerId'];
         $houseInfo = Bll_House_EsfHouse::getHouseBaseInfoEx($houseId, $planInfo['cityId']);
         if (empty($houseInfo)) {
             $this->logMsg(sprintf('经纪人[%d] 城市[%d] 房源[%d]没有找到,计划[%d]', $brokerId, $cityId, $houseId, $planId));
             continue;
         }
         $housePrice = $houseInfo['proPrice'] * 10000;
         /**
          * 获取小区价格段出价
          */
         $clickPrice = Bll_Service_Choice::ajkClickPrice(array('brokerId' => $planInfo['brokerId'], 'cityId' => $cityId, 'price' => $housePrice, 'commId' => $houseInfo['commId']));
         if ($clickPrice['status'] == 'error') {
             $this->logMsg(sprintf('经纪人[%d] 城市[%d] 房源[%d] 计划[%d] 小区[%d] 价格[%d] 获取点击价格失败', $brokerId, $cityId, $houseId, $planId, $houseInfo['commId'], $housePrice));
             continue;
         }
         if ($clickPrice['realTradeAmount'] != $clickPrice['shouldTradeAmount']) {
             $offer = $clickPrice['realTradeAmount'];
         } else {
             $offer = $clickPrice['realTradeAmount'];
         }
         file_put_contents($this->_doneFile, 'DONE');
         $this->logMsg(sprintf('经纪人[%d] 城市[%d] 房源[%d] 计划[%d] 小区[%d] 价格[%d] 出价[%d]', $brokerId, $cityId, $houseId, $planId, $houseInfo['commId'], $housePrice, $offer));
         continue;
         if (!Model_Plan_EsfAjkPropSpread::updateOffer($planId, $offer)) {
             $this->logMsg(sprintf('经纪人[%d] 城市[%d] 房源[%d] 计划[%d] 小区[%d] 价格[%d] 更新出价失败', $brokerId, $cityId, $houseId, $planId, $houseInfo['commId'], $housePrice));
             continue;
         }
         $this->logMsg(sprintf('经纪人[%d] 城市[%d] 房源[%d] 计划[%d] 小区[%d] 价格[%d] 更新出价成功', $brokerId, $cityId, $houseId, $planId, $houseInfo['commId'], $housePrice));
     }
     if (count($zeroOfferPlanList) < self::BATCH_LIMIT) {
         file_put_contents($this->_doneFile, 'DONE');
     }
 }
 public function dealTask($task)
 {
     $currentUsedNum = $task['usedNum'];
     //获取价格信息
     $priceIntervalInfo = Model_House_EsfPrice::data_access()->filter('id', $task['priceId'])->find_only();
     if (empty($priceIntervalInfo)) {
         printf("价格段priceId:" . $task['priceId'] . "获取失败" . PHP_EOL);
         return false;
     }
     //获取实际计划数目
     $trueUsedNum = Model_Plan_EsfAjkPropSpread::data_access()->filter("areacode", $task['typeCode'])->filter("smallprice", $priceIntervalInfo->minPrice)->filter("bigprice", $priceIntervalInfo->maxPrice)->filter("bidVersion", Model_Plan_EsfAjkPropSpread::CHOICEVERSION)->filter("model", Model_Plan_EsfAjkPropSpread::BLOCK_CHOICE)->filter_by_op('status', 'in', array(Model_Plan_EsfAjkPropSpread::ONLINE, Model_Plan_EsfAjkPropSpread::ONQUEUE))->count();
     printf('正在处理 队列id %s, areaCode %s, priceId %s 结果是: userNum: %s, 实际: %s, 状态:%s' . PHP_EOL, $task['id'], $task['typeCode'], $task['priceId'], $currentUsedNum, $trueUsedNum, $currentUsedNum == $trueUsedNum ? 'success' : 'error');
     if ($currentUsedNum == $trueUsedNum) {
         return true;
     }
     $result = Model_Choice_EsfBlockBidBucket::updateUsedNum($task['id'], $trueUsedNum, $task['usedNum']);
     printf('更新usedNum结果: %s' . PHP_EOL, $result ? '更新成功' : '更新失败');
     return true;
 }
Пример #8
0
 /**
  * 获取经纪人精选推广的房源Id
  *
  * @param int $brokerId
  * @return array
  */
 private function getBrokerHouseSpreadStateResultAjk($brokerId)
 {
     $result = array('spread_house' => array(), 'not_spread_house' => array());
     try {
         $dataAccess = Model_Plan_EsfAjkPropSpread::data_access('');
         $dataAccess->filter('brokerId', $brokerId);
         $dataAccess->filter('status', Model_Plan_EsfAjkPropSpread::ONLINE);
         $dataAccess->load_field(array('id', 'status', 'propId', 'brokerId'));
         $choicePlanList = $dataAccess->get_all();
     } catch (Exception $e) {
         return $result;
     }
     if (empty($choicePlanList)) {
         return $result;
     }
     foreach ($choicePlanList as $planInfo) {
         $result['spread_house'][] = $planInfo['propId'];
     }
     return $result;
 }
Пример #9
0
 /**
  * @param $spreadId
  * @param int $commId
  * @param int $smallPrice
  * @param int $bigPrice
  * @return int|string
  */
 public function getPpcSaleRankBll($propId = 0, $commId = 0, $smallPrice = 0, $bigPrice = 0, $hpratio = 0, $limit = 10)
 {
     $rstRank = Model_Plan_EsfAjkPropSpread::getPpcSaleRankDao($commId, $smallPrice, $bigPrice, $hpratio, $limit);
     $rank = 0;
     if (isset($rstRank) && !empty($rstRank)) {
         foreach ($rstRank as $key => $val) {
             $rank = $key + 1;
             if ($val->propId == $propId) {
                 return $rank;
             }
         }
         $total = count($rstRank);
         if ($total > $limit) {
             return $limit + 1;
             //10名以外的
         } else {
             return $total + 1;
         }
     } else {
         return 1;
     }
 }
Пример #10
0
 /**
  * 精选计划停止推广
  */
 public function do_stop()
 {
     $planInfo = Model_Plan_EsfAjkPropSpread::getPlanInfoByIdEx($this->params['planId']);
     if (empty($planInfo)) {
         $this->outPut(0, '没有获取到计划信息');
     }
     if ($this->params['brokerId'] != $planInfo['brokerId']) {
         $this->outPut(0, '没有获取到计划信息(code:-2)');
     }
     if (Model_Plan_EsfAjkPropSpread::ONQUEUE == $planInfo['status']) {
         $result = Bll_Plan_Bid_EsfWebChoiceOperation::stop_queue($this->params['planId'], $planInfo['brokerId']);
     } elseif (Model_Plan_EsfAjkPropSpread::ONLINE == $planInfo['status']) {
         $result = Bll_Plan_Bid_EsfWebChoiceOperation::stop_plan($this->params['planId'], $planInfo['brokerId']);
     } else {
         $this->outPut(0, '无效的计划');
         return;
     }
     if ($result['status'] == 'ok') {
         $this->outPut(1, '计划取消推广成功');
     }
     $this->outPut(0, '计划取消推广失败');
 }
 public function run()
 {
     //todo 临时编写job,没有利用游标
     $nativeSql = sprintf("SELECT prop_id FROM `ajk_propspread` WHERE STATUS != 2 AND bidversion = 2 GROUP BY prop_id HAVING COUNT(*)>1");
     $allRecords = Model_Plan_EsfAjkPropSpread::data_access()->native_sql($nativeSql, array(), true);
     foreach ($allRecords as $row) {
         $costMoney = 0;
         //获取所有计划
         $propRecords = Model_Plan_EsfAjkPropSpread::data_access()->filter_by_op('status', '<>', 2)->filter_by_op('bidVersion', '=', 2)->filter_by_op('propId', '=', $row['prop_id'])->find_all();
         foreach ($propRecords as $subRow) {
             if ($subRow->budget != $subRow->balance) {
                 $costMoney++;
             }
         }
         if ($costMoney == 0) {
             //都没有消费,保留最后一个
             foreach ($propRecords as $key => $subRow) {
                 if ($key == count($propRecords) - 1) {
                     $this->addLogger(sprintf("保留计划%d,该计划为最后计划", $subRow->id));
                     continue;
                 }
                 //塞入自动停止队列
                 Model_Plan_EsfAjkPropspreadQueue::insertOne($subRow->id, time(), 1);
                 $this->addLogger(sprintf("计划%d塞入自动停止队列", $subRow->id));
             }
         } else {
             foreach ($propRecords as $key => $subRow) {
                 if ($subRow->budget != $subRow->balance) {
                     $this->addLogger(sprintf("保留计划%d,该计划有消费", $subRow->id));
                 } else {
                     //塞入自动停止队列
                     Model_Plan_EsfAjkPropspreadQueue::insertOne($subRow->id, time(), 1);
                     $this->addLogger(sprintf("计划%d塞入自动停止队列", $subRow->id));
                 }
             }
         }
     }
 }
Пример #12
0
 /**
  * 获取房源精选排名
  *
  * @param int $brokerId
  * @param array $houseIds
  * @return array
  */
 public static function getHouseQueueLocation($brokerId, $houseIds)
 {
     $result = array_fill_keys($houseIds, 1);
     $brokerChoicePlanList = Model_Plan_EsfAjkPropSpread::getBrokerChoicePlanInfoByHouseId($brokerId, $houseIds);
     $_cache = array();
     foreach ($brokerChoicePlanList as $choicePlan) {
         if ($choicePlan['status'] != Model_Plan_EsfAjkPropSpread::ONQUEUE) {
             continue;
         }
         if ($choicePlan['model'] == Model_Plan_EsfAjkPropSpread::BLOCK_CHOICE) {
             /** 获取坑位中的计划信息 */
             $cacheKey = sprintf('%s_%d_%d_%d', 'block', $choicePlan['areacode'], $choicePlan['smallprice'], $choicePlan['bigprice']);
             if (!isset($_cache[$cacheKey])) {
                 $_cache[$cacheKey] = Model_Plan_EsfAjkPropSpread::getPropQueueSpreadByBlockBucket($choicePlan['areacode'], $choicePlan['smallprice'], $choicePlan['bigprice']);
             }
         } else {
             /** 获取坑位中的计划信息 */
             $cacheKey = sprintf('%d_%d_%d', $choicePlan['commId'], $choicePlan['smallprice'], $choicePlan['bigprice']);
             if (!isset($_cache[$cacheKey])) {
                 $_cache[$cacheKey] = Model_Plan_EsfAjkPropSpread::getPropQueueSpreadByBucket($choicePlan['commId'], $choicePlan['smallprice'], $choicePlan['bigprice']);
             }
         }
         $bucketQueueList = $_cache[$cacheKey];
         if (empty($bucketQueueList)) {
             continue;
         }
         /** 精选计划的排名 */
         foreach ($bucketQueueList as $index => $planInfo) {
             $result[$choicePlan['propId']] = $index + 1;
             if ($planInfo['propId'] == $choicePlan['propId']) {
                 break;
             }
         }
     }
     return $result;
 }
Пример #13
0
 /**
  * 获取经纪人的竞价概况
  */
 public function getBrokerBidSummary($brokerId)
 {
     try {
         $data = array('todayClicks' => 0, 'todayConsume' => 0, 'todayConsumeUnit' => '元', 'totalProps' => 0);
         //竞价今日点击 话费
         if (($clickAndCostInfo = $this->getBrokerClickAndCostDay($brokerId, date('Ymd'))) === false) {
             $this->error($this->errorCode, $this->errorMsg);
         }
         foreach ($clickAndCostInfo as $key => $row) {
             $data[$key] = $row;
         }
         //获取计划数
         $data['totalProps'] = Model_Plan_EsfAjkPropSpread::getPlanCountByBroker($brokerId, Model_Plan_EsfAjkPropSpread::DEFAULTVERSION);
         return $data;
     } catch (Exception $e) {
         if ($e instanceof Exception_BllErrorException) {
             $this->errorCode = $e->getCode();
         } else {
             $this->errorCode = bll_choice_EsfAPPAPIChoice::UNKNOW_ERROR;
         }
         $this->errorMsg = $e->getMessage();
         return false;
     }
 }
Пример #14
0
 /**
  *
  * 获取经纪人的竞价房源数
  *
  * @param $brokerId
  * @param $cityId
  * @param $siteType
  * @return int
  */
 public static function getBrokerBidNum($brokerId, $cityId, $siteType)
 {
     $num = 0;
     switch ($siteType) {
         case 'ajk':
             $bidList = Model_Plan_EsfAjkPropSpread::getValidPlan($brokerId, $cityId, true);
             foreach ($bidList as $bid) {
                 if ($bid['status'] == 1) {
                     $num += 1;
                 }
             }
             break;
         case 'hz':
             $brokerMapping = Bll_Broker_MainBusiness::getDataByEsfId($brokerId);
             //根据
             $bidList = Model_Plan_HzPlanBasic::get_online_bid_plan_ex($brokerId, 2);
             $num = count($bidList);
             break;
         case 'jp':
             $brokerMapping = Bll_Broker_MainBusiness::getDataByEsfId($brokerId);
             //根据经纪人查询商铺相应
             $bidList = Model_Plan_Jp::getPlanByMemberId($brokerMapping['jpBrokerid'], 2, array(2));
             $num = count($bidList);
             break;
         default:
             break;
     }
     return $num;
 }
Пример #15
0
 /**
  * 金铺-精选房源设置页面
  *
  * @param int $brokerId
  * @param int $cityId
  * @param int $houseId
  * @param array $params
  *
  * @return array
  */
 public static function esf_setting($brokerId, $cityId, $houseId, $userId, $params = array())
 {
     $pageAttribute = array();
     //获取精选推广预算
     $brokerInfo = Bll_BrokerBaseBll::get_instance()->get_broker_info($brokerId);
     $brokerCompanyId = $brokerInfo['BaseInfo']['COMPANYID'];
     $choiceSet = APF::get_instance()->get_config('choice_set');
     //根据经纪人公司不同有不同的预算
     if (isset($choiceSet[$brokerCompanyId]) && !empty($choiceSet[$brokerCompanyId])) {
         $pageAttribute['min_budget'] = $choiceSet[$brokerCompanyId]['ajk']['ESF_CHOICE_MIN_BUDGET'];
         $pageAttribute['max_budget'] = $choiceSet[$brokerCompanyId]['ajk']['ESF_CHOICE_MAX_BUDGET'];
     } else {
         $pageAttribute['min_budget'] = $choiceSet['default']['ajk']['ESF_CHOICE_MIN_BUDGET'];
         $pageAttribute['max_budget'] = $choiceSet['default']['ajk']['ESF_CHOICE_MAX_BUDGET'];
     }
     self::setChoiceNum($cityId);
     //判断当前经纪人已经精选推广的房源数
     if (isset($params['act']) && isset($params['rebid'])) {
         if (self::checkEsfBidChoiceFull($brokerId, $cityId, 1)) {
             //检查二手房精选是否达到最大
             return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '最多精选推广' . self::$all_esf_plan_num . '套房源');
         }
     } else {
         if (self::checkEsfBidChoiceFull($brokerId, $cityId)) {
             return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '最多精选推广' . self::$all_esf_plan_num . '套房源');
         }
     }
     /** 经纪人重新推广房源 */
     if (isset($params['act']) && isset($params['rebid'])) {
         //在精选管理页就已经设置时候是重新推广
         $planInfo = Model_Plan_EsfAjkPropSpread::getChoicePlanInfoByHouseid($houseId);
         if ($planInfo->status == Model_Plan_EsfAjkPropSpread::ONLINE || $planInfo->status == Model_Plan_EsfAjkPropSpread::ONQUEUE) {
             return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '房源已经精选');
         }
         $pageAttribute['plan_id'] = $params['plan_id'];
         $pageAttribute['rebid'] = true;
     }
     $balance = self::get_broker_balance_by_broker_id($brokerId);
     //获取经纪人账户余额
     $pageAttribute['balance'] = $balance;
     if ($balance > 0) {
         $balance = sprintf('%.2f', $balance / 100);
     }
     $pageAttribute['balance_fmt'] = $balance;
     //获取房源信息
     $pageAttribute['housesInfo'] = Bll_House_EsfHouse::getHouseBaseInfo($houseId, $cityId);
     if (empty($pageAttribute['housesInfo'])) {
         return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '房源不存在!');
     }
     $houseInfo = $pageAttribute['housesInfo'][0];
     if ($houseInfo->userId != $userId) {
         return array('err_no' => self::BID_FAIL_QUALITY_OR_NEW, 'err_msg' => '房源不属于当前操作人');
     }
     if ($houseInfo->isVisible != 1) {
         return array('err_no' => self::BID_FAIL_QUALITY_OR_NEW, 'err_msg' => '房源是违规房源,不可以参加精选房源推广');
     }
     if ($houseInfo->isHighQulity == 0) {
         return array('err_no' => self::BID_FAIL_QUALITY_OR_NEW, 'err_msg' => '多图、新发15天房源才能参与精选推广');
     }
     if (date('Ymd', strtotime('-15 days')) > date('Ymd', $houseInfo->postDate)) {
         return array('err_no' => self::BID_FAIL_QUALITY_OR_NEW, 'err_msg' => '多图、新发15天房源才能参与精选推广');
     }
     /** 判断是否是精选开放城市 */
     if (!Bll_City::isChoiceIndependentCity($cityId, Const_Site::ANJUKE)) {
         /** 判断是在套餐推广中 */
         $houseState = Bll_Combo_HouseRelation::getOnlineRelationByHouseId($houseId, Bll_Combo_HouseRelation::SITE_TYPE_AJK);
         if (empty($houseState)) {
             return array('err_no' => self::BID_FAIL_QUALITY_OR_NEW, 'err_msg' => '该房源不在推广中');
         }
     }
     //判断是否已在竞价计划中
     $planInfo = Model_Plan_EsfAjkPropSpread::getChoicePlanInfoByHouseid($houseId);
     if (!empty($planInfo) && !isset($params['act']) && !isset($params['rebid'])) {
         return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '房源已经精选');
     }
     $pageAttribute['title'] = sprintf("%s,%d室%d厅%d卫,%d平,%.2f万", $houseInfo->commName, $houseInfo->roomNum, $houseInfo->hallNum, $houseInfo->toiletNum, intval($houseInfo->areaNum), $houseInfo->proPrice);
     $pageAttribute['community_name'] = $houseInfo->commName;
     $housePrice = intval($houseInfo->proPrice * 10000);
     //获取坑位信息
     $bucketInfo = Bll_Choice_EsfBidBucket::get_bucket_info($houseInfo->commId, $cityId, $housePrice);
     //获取坑位信息
     if (empty($bucketInfo)) {
         Bll_Choice_EsfBidBucket::init_bucket_info($houseInfo->commId, $cityId, $housePrice);
         $bucketInfo = Bll_Choice_EsfBidBucket::get_bucket_info($houseInfo->commId, $cityId, $housePrice);
     }
     if ($bucketInfo['usedNum'] < $bucketInfo['maxOnlineNum']) {
         $pageAttribute['hidden']['show'] = 1;
     }
     $pageAttribute['bucket_total'] = $bucketInfo['totalNum'];
     $pageAttribute['bucket_used'] = $bucketInfo['usedNum'];
     $pageAttribute['bucket_used_num'] = $bucketInfo['usedNum'];
     $pageAttribute['bucket_total_num'] = $bucketInfo['totalNum'];
     $pageAttribute['bucket_max_online_num'] = $bucketInfo['maxOnlineNum'];
     $priceInfo = Model_House_EsfPrice::get_price_by_id($bucketInfo['priceId']);
     $pageAttribute['price_title'] = sprintf("%d-%d万", intval($priceInfo['minPrice'] / 10000), intval($priceInfo['maxPrice'] / 10000));
     //价格
     $clickPrice = Bll_Service_Choice::ajkClickPrice(array('brokerId' => $brokerId, 'cityId' => $cityId, 'price' => $housePrice, 'commId' => $houseInfo->commId));
     if ($clickPrice['status'] == 'error') {
         return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '服务器繁忙,请重试(code: -' . __LINE__ . ')');
     }
     if ($clickPrice['realTradeAmount'] != $clickPrice['shouldTradeAmount']) {
         $pageAttribute['favorable'] = true;
         $pageAttribute['price'] = round($clickPrice['realTradeAmount'] / 100, 2);
         $pageAttribute['origin_price'] = round($clickPrice['shouldTradeAmount'] / 100, 2);
         $pageAttribute['favorable_end_time'] = date('Y-m-d', strtotime($clickPrice['rebateEndTime']));
     } else {
         $pageAttribute['favorable'] = false;
         $pageAttribute['price'] = round($clickPrice['realTradeAmount'] / 100, 2);
     }
     $clickAndBudget = Bll_Choice_EsfBidBucket::getBucketAverageClickBudget($houseInfo->commId, $cityId, $housePrice);
     //获取坑位的平均点击的预算
     if (!empty($clickAndBudget)) {
         $pageAttribute['averageClick'] = $clickAndBudget['averageClick'];
         $pageAttribute['averageBudget'] = $clickAndBudget['averageBudget'] / 100;
     }
     /**重组板块精选url**/
     $bidPlanList = Bll_Plan_Bid_AjkPlan::getBrokerValidPlanListByhouseId($houseId, $brokerId, $cityId, true);
     //板块加价格
     $bidPlanList = $bidPlanList[0];
     if (isset($bidPlanList)) {
         $blockInfo['bidStatus'] = $bidPlanList['status'];
         if ($bidPlanList['status'] == 1) {
             $bidUrl = '/ajkbroker/user/choice/manage/ajk/#' . $houseId;
         } elseif ($bidPlanList['status'] == 11) {
             $bidUrl = '/ajkbroker/user/choice/manage/ajk/#' . $houseId;
         } else {
             if ($bidPlanList['status'] != 2) {
                 $bidUrl = "/ajkbroker/user/choice/blockset/ajk/" . $houseInfo['proId'] . '/?act=1&rebid=1&plan_id=' . $bidPlanList['id'];
             }
         }
     } else {
         $bidUrl = "/ajkbroker/user/choice/blockset/ajk/" . $houseInfo['proId'];
     }
     $pageAttribute['bidUrl'] = $bidUrl;
     return $pageAttribute;
 }
Пример #16
0
 /**
  * 获取房源的精选类型 0:未精选;1:小区;2:板块
  * @param $propIds
  * @return array
  */
 public function getChoiceTypeByPropIds($propIds)
 {
     if (!is_array($propIds)) {
         $propIds = array($propIds);
     }
     $choiceInfos = Model_Plan_EsfAjkPropSpread::getChoiceByPropIds($propIds);
     $choiceArray = array();
     foreach ($choiceInfos as $v) {
         $choiceArray[$v['propId']] = $v;
     }
     $rs = array();
     foreach ($propIds as $propId) {
         $rs[$propId] = !isset($choiceArray[$propId]) ? 0 : $choiceArray[$propId]['model'];
     }
     return $rs;
 }
Пример #17
0
 /**
  * 二手房板块精选
  * @param $record
  * @return bool|mixed
  */
 private function noticeBlockChoiceSolrAjkAPI($record)
 {
     //41-板块精选推广,42-取消板块精选推广,43-取消板块精选排队
     if ($record['type'] == 41) {
         $flag = 1;
     } elseif ($record['type'] == 42 || $record['type'] == 43) {
         $flag = 2;
     } else {
         $this->setLog('不需要做solr处理' . __METHOD__);
         return false;
     }
     //根据计划id查询计划信息
     $PlanInfo = Model_Plan_EsfAjkPropSpread::getPlanInfoByIdEx($record['planId']);
     if ($PlanInfo) {
         $offer = $PlanInfo['offer'];
         $commsHpratioA = $PlanInfo['commsHpratioA'];
         $commsHpratio = $PlanInfo['commsHpratio'];
         $spreadstartdate = $PlanInfo['spreadstartdate'];
         $spreadenddate = $PlanInfo['spreadenddate'];
         $planid = $PlanInfo['id'];
     } else {
         $offer = 0;
         $commsHpratioA = 0;
         $commsHpratio = 0;
         $spreadstartdate = 0;
         $spreadenddate = 0;
         $planid = $record['planId'];
     }
     $res = Bll_Combo_NoticeSolrUpDown::noticeBlockChoiceSolrAjkAPI($record['cityId'], $record['brokerId'], $record['houseId'], $flag, $offer, $commsHpratioA, $commsHpratio, $spreadstartdate, $spreadenddate, $planid, Bll_Combo_NoticeSolrUpDown::HLSFromChoiceUpDown, strtotime($record['addDate']), date('Ymd', strtotime($record['addDate'])) . $record['id']);
     $this->setLog('通知solr res: ' . json_encode($res));
     return $res;
 }
Пример #18
0
 public function handle_request_internal()
 {
     $brokerId = $this->_params['brokerId'];
     //经纪人信息
     $brokerInfo = Model_Broker_AjkBrokerExtend::findWithBrokerId($brokerId);
     if (!$brokerInfo) {
         throw new Exception_BrokerNotFoundException('经纪人不存在', Const_APIStatus::E_BROKER_NOT_EXISTS);
     }
     if (!Bll_Broker_HzBroker::isComboBroker($brokerId)) {
         throw new Exception_ISNotComboBrokerException('不是套餐经纪人。');
     }
     /** 套餐信息 */
     $comboInfoList = Bll_Combo_Broker_BrokerComboInfo::getBrokerComboList($brokerId);
     $currentDate = time();
     foreach ($comboInfoList as $comboInfo) {
         $startDate = strtotime($comboInfo['startTime']);
         $endDate = strtotime($comboInfo['endTime']);
         /** 获取当前使用的套餐 */
         if ($currentDate >= $startDate && $currentDate < $endDate && $comboInfo['salePropNum'] > 0) {
             $currentCombo = $comboInfo;
             $comboPropNum = $currentCombo['salePropNum'];
             if (Bll_Combo_Broker_BrokerComboInfo::isOpenUp($currentCombo)) {
                 $comboPropNum = $currentCombo['rentPropNum'] + $currentCombo['salePropNum'];
             }
             break;
         }
     }
     $hasCombo = 0;
     //没有二手房套餐
     if (!isset($currentCombo)) {
         return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => array('newList' => array(), 'oldList' => array(), 'surplus' => 0, 'hasCombo' => $hasCombo));
     } else {
         $hasCombo = 1;
     }
     $cityId = $brokerInfo->cityId;
     //获取套餐推广信息
     $comboSpreadHouseList = Bll_Broker_Combo_ManageAjk::getComboSpreadHouseList($brokerId, $cityId);
     if (Bll_Combo_Broker_BrokerComboInfo::isOpenUp($currentCombo)) {
         $currentSpreadHouseCount = Bll_Combo_HouseRelation::getHouseCount($brokerId, Bll_Combo_Broker_BrokerComboInfo::SITE_TYPE_AJK, true);
     } else {
         $currentSpreadHouseCount = Bll_Combo_HouseRelation::getHouseCountEx($brokerId, $cityId, Bll_Combo_Broker_BrokerComboInfo::SITE_TYPE_AJK);
     }
     //套餐还可以推的房源数量
     $surplus = $comboPropNum - $currentSpreadHouseCount;
     if (empty($comboSpreadHouseList)) {
         return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => array('newList' => array(), 'oldList' => array(), 'surplus' => $surplus, 'hasCombo' => $hasCombo));
     }
     //获取房源信息
     $propIds = array_keys($comboSpreadHouseList);
     $propsInfo = Bll_House_EsfHouse::getHouseBaseInfo($propIds, $cityId);
     //批量获取默认图片
     $propDefImages = Model_House_AjkPropertyData::getDafImages($propIds);
     //批量获取房源总点
     $houseTodayClickInfo = Bll_House_EsfHouse::getHouseTodayComboClick($propIds);
     $houseClickInfo = Bll_House_EsfHouse::getComboHouseAccumulateClickByPropIds($brokerId, $propIds, $cityId);
     //房源竞价&精选计划
     $propSpreadInfo = Model_Plan_EsfAjkPropSpread::getPlanByPropIds($propIds);
     //拼接房源列表中房源数据
     $newList = array();
     $oldList = array();
     foreach ($propsInfo as $prop) {
         $row = array();
         $row['propId'] = $prop->proId;
         $row['title'] = $prop->proName;
         $row['commId'] = $prop->commId;
         $row['commName'] = $prop->commName;
         $row['roomNum'] = $prop->roomNum;
         $row['hallNum'] = $prop->hallNum;
         $row['area'] = round($prop->areaNum);
         $row['toiletNum'] = $prop->toiletNum;
         $row['price'] = intval($prop->proPrice);
         $row['priceUnit'] = '万';
         $row['isBid'] = 0;
         $row['isChoice'] = 0;
         $row['isMoreImg'] = $prop->isHighQulity;
         $row['isPhonePub'] = $prop->uriCode == 'mobile.asyn' || $prop->uriCode == 'mobile-ajk-broker.asyn' ? 1 : 0;
         $row['isVisible'] = isset($houseInfo['isVisible']) ? $houseInfo['isVisible'] : 1;
         //0-违规房源 1-非违规房源
         $row['createTime'] = $prop->postDate;
         //房源发布时间
         $row['imgUrl'] = Model_House_AjkPropertyData::imageUrl($propDefImages[$prop->proId]);
         if ($prop->commitionType == 2) {
             $row['isEntrust'] = 1;
         } else {
             $row['isEntrust'] = 0;
         }
         $row['totalClicks'] = $houseTodayClickInfo[$prop->proId] + $houseClickInfo[$prop->proId];
         if (isset($propSpreadInfo[$prop->proId])) {
             if ($propSpreadInfo[$prop->proId]->bidVersion == 1 && ($propSpreadInfo[$prop->proId]->status == 1 || $propSpreadInfo[$prop->proId]->status == 11)) {
                 $row['isBid'] = 1;
             } elseif ($propSpreadInfo[$prop->proId]->bidVersion == 2 && ($propSpreadInfo[$prop->proId]->status == 1 || $propSpreadInfo[$prop->proId]->status == 11)) {
                 $row['isChoice'] = 1;
             }
         }
         //计算出房源发布天数
         $timeFixStr = strtotime(date("Ymd", $row['createTime']));
         $leftDay = floor((time() - $timeFixStr) / 86400);
         if ($leftDay >= 30) {
             $oldList[] = $row;
         } else {
             $newList[] = $row;
         }
     }
     // 排序
     usort($oldList, function ($a, $b) {
         if ($a['createTime'] == $b['createTime']) {
             return 0;
         }
         return $a['createTime'] > $b['createTime'] ? -1 : 1;
     });
     usort($newList, function ($a, $b) {
         if ($a['createTime'] == $b['createTime']) {
             return 0;
         }
         return $a['createTime'] > $b['createTime'] ? -1 : 1;
     });
     return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => array('newList' => $newList, 'oldList' => $oldList, 'surplus' => $surplus > 0 ? $surplus : 0, 'hasCombo' => $hasCombo));
 }
Пример #19
0
 /**
  * 获取竞价推广的排名
  *
  * @param $propId
  * @param $commId
  * @param $smallPrice
  * @param $bigPrice
  * @param $hpratio
  * @param int $limit
  * @return int
  */
 public static function getHouseBidRank($propId, $commId, $smallPrice, $bigPrice, $hpratio, $limit = 10)
 {
     $bidList = Model_Plan_EsfAjkPropSpread::getSpreadPlanForRank($commId, $smallPrice, $bigPrice, $hpratio, $limit);
     if (empty($bidList)) {
         return 1;
     }
     $rank = 0;
     foreach ($bidList as $bid) {
         $rank++;
         if ($bid['propId'] == $propId) {
             return $rank;
         }
     }
     $total = count($bidList);
     if ($total > $limit) {
         return $limit + 1;
         //10名以外的
     }
     return $total + 1;
 }
Пример #20
0
 /**
  * 初始化房源精选推广状态
  *
  * @param array $houseIds
  * @return array
  */
 private function initHouseChoiceState($houseIds)
 {
     $houseChoiceStateList = array_fill_keys($houseIds, 0);
     $choiceHousePlanList = Model_Plan_EsfAjkPropSpread::getChoicePlanInfoByHouseid(array_keys($houseChoiceStateList));
     if (!empty($choiceHousePlanList)) {
         foreach ($choiceHousePlanList as $choiceHousePlan) {
             $houseId = $choiceHousePlan->propId;
             if ($choiceHousePlan->status == 1 || $choiceHousePlan->status == 11) {
                 $houseChoiceStateList[$houseId] = -1;
             } else {
                 $houseChoiceStateList[$houseId] = $choiceHousePlan->id;
             }
         }
     }
     return $houseChoiceStateList;
 }
Пример #21
0
 /**
  * 小区合并修改计划信息
  *
  * @param $queue
  * @return bool
  */
 public function communityMerge($queue)
 {
     if ($queue['planId'] == 0 || $queue['proId'] == 0) {
         $this->setMsg('房源Id、计划Id不能为空');
         return false;
     }
     /** 判断计划状态 */
     $planInfo = Model_Plan_EsfAjkPropSpread::getPlanInfoByIdEx($queue['planId']);
     if ($planInfo['tradetype'] != 1 || $planInfo['bidVersion'] != 2) {
         $this->setMsg(sprintf('计划[%d]信息错误[%d - %d]', $queue['planId'], $planInfo['tradetype'], $planInfo['bidVersion']));
         return false;
     }
     if ($planInfo['status'] != Model_Plan_EsfAjkPropSpread::ONLINE && $planInfo['status'] != Model_Plan_EsfAjkPropSpread::ONQUEUE) {
         $this->setMsg(sprintf('计划[%d]不在推广、排队中[%d]', $queue['planId'], $planInfo['status']));
         return true;
     }
     if ($planInfo['propId'] != $queue['proId']) {
         $this->setMsg(sprintf('房源Id[%d - %d]不一致', $queue['proId'], $planInfo['propId']));
         return true;
     }
     $houseInfo = Bll_House_EsfHouse::getHouseBaseInfoEx($queue['proId'], $planInfo['cityId']);
     if (empty($houseInfo)) {
         $this->setMsg(sprintf('房源[%d]信息没有获取到', $queue['proId']));
         return true;
     }
     $housePrice = intval($houseInfo['proPrice'] * 10000);
     $priceIntervalInfo = Model_House_EsfPrice::get_price($planInfo['cityId'], $housePrice);
     if (empty($priceIntervalInfo)) {
         $this->setMsg(sprintf('房源[%d]没有获取到价格段信息[%d]', $queue['proId'], $housePrice));
         return true;
     }
     $priceId = $priceIntervalInfo['id'];
     $communityId = $houseInfo['commId'];
     $data = array('commId' => $communityId);
     if (!Model_Plan_EsfAjkPropSpread::updatePlan($queue['planId'], $data)) {
         $this->setMsg(sprintf('更新计划[%d]信息[%s]失败', $queue['planId'], json_encode($data)));
         return false;
     }
     $bucketInfo = Model_Choice_EsfBidBucket::get_bucket_info($communityId, $priceId);
     if (empty($bucketInfo)) {
         Model_Choice_EsfBidBucket::init_bucket_info($communityId, $priceId, $planInfo['cityId']);
     }
     Model_Choice_EsfBidBucket::increment_used_num_ex($communityId, $priceId);
     $this->setMsg(sprintf('更新计划[%d]信息[%s]成功', $queue['planId'], json_encode($data)));
     $planInfo['proPriceInt'] = $planInfo['propriceint'];
     //todo 添加房源日志 type 小区合并,区域板块变更
     Model_Log_HouseLogNew::create(array('houseId' => $queue['propId'], 'planId' => $queue['planId'], 'brokerId' => $queue['brokerId'], 'cityId' => $planInfo['cityId'], 'type' => Const_ProLogType::LOG_COMMUNITY_MERGE_PROP_CHANGE, 'changeType' => Const_ProPlanChangeType::COMM_MERGE_PROP_CHANGE, 'remark' => '小区合并,精选房源信息变更', 'operatorId' => $this->qInfo['operationId'], 'siteType' => 1), date('Ymd'))->save();
     return $this->choiceComputeRank(array_merge($planInfo, $data));
 }
Пример #22
0
 /**
  * 二手房小区合并
  *
  * @param array $queueInfo
  * @return array
  */
 public static function ajkCommunityMerge($queueInfo)
 {
     if (!isset($queueInfo) || empty($queueInfo)) {
         return static::buildReturn(self::PROCESS_STATUS_ERROR, '小区合并,remark的值为空');
     }
     $communityMergeInfo = json_decode($queueInfo['remark'], true);
     if (!is_array($communityMergeInfo)) {
         return static::buildReturn(self::PROCESS_STATUS_ERROR, '小区合并,remark的值不是JSON');
     }
     /** 获取推广中的小区的精选计划 */
     $choicePlanList = Model_Plan_EsfAjkPropSpread::getSpreadChoicePlanByCommunityId($communityMergeInfo['cityId'], $communityMergeInfo['commId']);
     if (empty($choicePlanList)) {
         return static::buildReturn(self::PROCESS_STATUS_SUCCESS, sprintf('小区小区合并,没有获取到小区[%d]的精选计划信息', $communityMergeInfo['commId']));
     }
     $houseLogWriteError = array();
     $houseLogWriteSuccess = array();
     foreach ($choicePlanList as $choicePlan) {
         $data = array();
         $data['houseId'] = $choicePlan['propId'];
         $data['planId'] = $choicePlan['id'];
         $data['brokerId'] = $choicePlan['brokerId'];
         $data['cityId'] = $queueInfo['city_id'];
         $data['type'] = Const_ProLogType::LOG_COMMUNITY_MERGE;
         $data['changeType'] = $queueInfo['type'];
         $data['remark'] = '小区合并';
         $data['addDate'] = date('Y-m-d H:i:s');
         $data['operatorId'] = 0;
         $data['siteType'] = 1;
         if (!Model_Log_HouseLogNew::create($data, date('Ymd'))->save()) {
             $houseLogWriteError[] = $choicePlan['propId'];
         } else {
             $houseLogWriteSuccess[] = $choicePlan['propId'];
         }
     }
     return static::buildReturn(self::PROCESS_STATUS_SUCCESS, sprintf('小区小区合并,房源日志写入成功[%s],房源日志写入失败[%s]', implode(',', $houseLogWriteSuccess), implode(',', $houseLogWriteError)));
 }
Пример #23
0
 /**
  * app 获取竞价列表
  */
 public static function gitBidProps($broker_id)
 {
     //竞价房源列表
     $bidPlans = Model_Plan_EsfAjkPropSpread::getOnlinePlanByBroker($broker_id, Model_Plan_EsfAjkPropSpread::DEFAULTVERSION);
     $bidProps = array();
     foreach ($bidPlans as $plan) {
         $bidProps[$plan->propId] = $plan;
     }
     return $bidProps;
 }
 /**
  * 页面删除推广操作封装
  *
  * @param $planId
  * @return array
  */
 public static function delete_plan($planId, $brokerId)
 {
     $rstArr = array('status' => 'ok');
     //获取计划信息
     $planInfo = Model_Plan_EsfAjkPropSpread::data_access()->filter('id', $planId)->find_only();
     if (empty($planInfo)) {
         return array('status' => 'fail', 'info' => 'empty plan');
     }
     if ($planInfo->status == Model_Plan_EsfAjkPropSpread::ONLINE) {
         return array('status' => 'fail', 'info' => '计划正在推广中');
     }
     if ($planInfo->status == Model_Plan_EsfAjkPropSpread::ONQUEUE) {
         return array('status' => 'fail', 'info' => '计划正在排队中');
     }
     if ($planInfo->tradestatus != Model_Plan_EsfAjkPropSpread::COMPLETETTRADESTATU) {
         return array('status' => 'fail', 'info' => '计划正在结算中');
     }
     if ($planInfo->status == Model_Plan_EsfAjkPropSpread::DELETE) {
         return array('status' => 'ok', 'info' => '计划已经被删除');
     }
     if ($brokerId != $planInfo->brokerId) {
         return array('status' => 'fail', 'info' => 'invalid broker');
     }
     if (Model_Plan_EsfAjkPropSpread::COMM_CHOICE != $planInfo->model) {
         return array('status' => 'fail', 'info' => 'invalid house');
     }
     //验证choice城市
     $cityId = $planInfo->cityId;
     if (!Bll_City::isChoiceCity($cityId)) {
         return array('status' => 'fail', 'info' => 'starttime not achieved ');
     }
     //更新状态
     $oldStatus = $planInfo->status;
     $planInfo->status = Model_Plan_EsfAjkPropSpread::DELETE;
     if (!$planInfo->save()) {
         return array('status' => 'fail', 'info' => 'update plan status fail');
     }
     //记录日志
     $remark = sprintf("STATUS:%d=>%d", $oldStatus, Model_Plan_EsfAjkPropSpread::DELETE);
     Model_Plan_LogAjkPropspread::addNewLog($planId, $brokerId, Model_Plan_LogAjkPropspread::DEL, $remark);
     return $rstArr;
 }
Пример #25
0
 public function handle_request_internal()
 {
     $brokerId = $this->_params['brokerId'];
     //检查经纪人是否存在
     $brokerInfo = Model_Broker_AjkBrokerExtend::findWithBrokerId($brokerId);
     if (!$brokerInfo) {
         throw new Exception_Broker_NotFound('BrokerId: ' . $brokerId);
     }
     // 判断城市是否开通竞价业务
     $cityId = $brokerInfo->cityId;
     if (!Bll_City::isBidCity($cityId)) {
         throw new Exception_City_NotBidCity('CityId: ' . $cityId);
     }
     //从  竞价计划表 找出该经纪人的所有计划  1:推广中 11: 排队中 2:删除
     $bidPlans = Model_Plan_EsfAjkPropSpread::getPlanByBroker($brokerId, Model_Plan_EsfAjkPropSpread::DEFAULTVERSION);
     $data = array('OnlinePropertyList' => array(), 'QueuedPropertyList' => array(), 'OfflinePropertyList' => array());
     if (empty($bidPlans)) {
         return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => $data);
     }
     $keyedPlans = array();
     foreach ($bidPlans as $plan) {
         $keyedPlans[$plan->propId] = $plan;
         //key:propId 保存时间 状态
     }
     //房源信息
     $propIds = array_keys($keyedPlans);
     $props = Bll_House_EsfHouse::getHouseBaseInfo($propIds, $brokerInfo->cityId);
     //批量获取竞价总点击
     $bidClickInfo = Model_plan_HpProStatsDay::getPropClicks($propIds, $brokerInfo->cityId);
     //批量获取图片
     $propDefImages = Model_House_AjkPropertyData::getDafImages($propIds);
     //拼接房源列表中房源数据
     $propertyList = array();
     foreach ($props as $prop) {
         $row = array();
         $row['propId'] = $prop->proId;
         $row['title'] = $prop->proName;
         $row['commId'] = $prop->commId;
         $row['commName'] = $prop->commName;
         $row['roomNum'] = $prop->roomNum;
         $row['hallNum'] = $prop->hallNum;
         $row['area'] = round($prop->areaNum);
         $row['toiletNum'] = $prop->toiletNum;
         $row['price'] = intval($prop->proPrice);
         $row['priceUnit'] = '万';
         $row['isVisible'] = $prop->isHighQulity;
         $row['isBid'] = 1;
         $row['isChoice'] = 0;
         $row['isMoreImg'] = $prop->isHighQulity;
         $row['isPhonePub'] = $prop->uriCode == 'mobile.asyn' || $prop->uriCode == 'mobile-ajk-broker.asyn' ? 1 : 0;
         $row['isVisible'] = $prop->isVisible;
         $row['createTime'] = $keyedPlans[$prop->proId]->createtime;
         $row['imgUrl'] = $propDefImages[$prop->proId];
         if ($prop->commitionType > 1) {
             $row['isEntrust'] = 1;
         } else {
             $row['isEntrust'] = 0;
         }
         $row['totalClicks'] = $bidClickInfo[$prop->proId]['totalClicks'];
         //房源竞价总点击
         $propertyList[] = $row;
     }
     // 排序
     usort($propertyList, function ($a, $b) {
         if ($a['createTime'] == $b['createTime']) {
             return 0;
         }
         return $a['createTime'] > $b['createTime'] ? -1 : 1;
     });
     // 分组
     $onlinePropertyList = array();
     //推广中列表
     $waitPropertyList = array();
     //排队中列表
     $offlinePropertyList = array();
     //推广结束列表
     foreach ($propertyList as $val) {
         switch ($keyedPlans[$val['propId']]->status) {
             case '1':
                 $onlinePropertyList[] = $val;
                 break;
             case '11':
                 $waitPropertyList[] = $val;
                 break;
             default:
                 $val['isBid'] = 0;
                 $offlinePropertyList[] = $val;
         }
     }
     return array('status' => Const_APIStatus::RETURN_CODE_OK, 'data' => array('OnlinePropertyList' => $onlinePropertyList, 'QueuedPropertyList' => $waitPropertyList, 'OfflinePropertyList' => $offlinePropertyList));
 }
Пример #26
0
 /**
  * 根据房源id获取可以删除的计划
  *
  * @param $houseId
  */
 public static function fitDeletePlan($houseId)
 {
     return Model_Plan_EsfAjkPropSpread::data_access()->filter_by_op('propId', '=', $houseId)->filter_by_op('status', '<>', Model_Plan_EsfAjkPropSpread::ONLINE)->filter_by_op('status', '<>', Model_Plan_EsfAjkPropSpread::ONQUEUE)->filter_by_op('status', '<>', Model_Plan_EsfAjkPropSpread::DELETE)->filter_by_op('tradetype', '=', 1)->filter_by_op('tradestatus', '=', Model_Plan_EsfAjkPropSpread::COMPLETETTRADESTATU)->sort('stoptime', 'asc')->find_only();
 }
 public function run()
 {
     //根据游标获取一定数量的坑位信息
     $bucketInfos = Model_Choice_EsfBidBucket::getBucketInfoById($this->cursor, 0, $this->limit);
     //无需要处理的数据
     if (empty($bucketInfos)) {
         $this->setShStopFlag();
         $this->setCursor(0);
         $this->logQuit("无需要处理的数据.");
     }
     //检验具体的坑位信息
     foreach ($bucketInfos as $bucketInfo) {
         //获取价格信息
         $priceIntervalInfo = Model_House_EsfPrice::data_access()->filter('id', $bucketInfo->priceId)->find_only();
         if (empty($priceIntervalInfo)) {
             $this->addLogger(sprintf("坑位信息%d,价格段id:%d获取失败", $bucketInfo->id, $bucketInfo->priceId));
             continue;
         }
         //获取实际计划数目
         $planNum = Model_Plan_EsfAjkPropSpread::data_access()->filter("commId", $bucketInfo->communityId)->filter("smallprice", $priceIntervalInfo->minPrice)->filter("bigprice", $priceIntervalInfo->maxPrice)->filter("bidVersion", Model_Plan_EsfAjkPropSpread::CHOICEVERSION)->filter("model", Model_Plan_EsfAjkPropSpread::COMM_CHOICE)->filter_by_op('status', 'in', array(Model_Plan_EsfAjkPropSpread::ONLINE, Model_Plan_EsfAjkPropSpread::ONQUEUE))->count();
         if ($planNum == $bucketInfo->usedNum) {
             if (isset($this->exceptionBucket[$bucketInfo->id])) {
                 //移除已经正常的坑位标记
                 unset($this->exceptionBucket[$bucketInfo->id]);
                 $this->addLogger(sprintf("坑位信息%d,坑位恢复到正常%d", $bucketInfo->id, $planNum));
             } else {
                 $this->addLogger(sprintf("坑位信息%d正常", $bucketInfo->id));
             }
             //更新游标
             $this->setCursor($bucketInfo->id);
             //更新异常文件
             $this->exceptionBucketFile->coverLog(json_encode($this->exceptionBucket));
             continue;
         }
         //坑位异常处理
         if (isset($this->exceptionBucket[$bucketInfo->id])) {
             //坑位已异常
             if ($this->exceptionBucket[$bucketInfo->id]["occur"] <= $this->repairOccurNum) {
                 //达到警告线,需要修复数据
                 //已实际计划数为依据更新
                 if (Model_Choice_EsfBidBucket::updateUsedNum($bucketInfo->id, $planNum, $bucketInfo->usedNum)) {
                     unset($this->exceptionBucket[$bucketInfo->id]);
                     $this->addLogger(sprintf("坑位信息%d,更新坑位信息成功, SQL:%s", $bucketInfo->id, Model_Choice_EsfBidBucket::$lastSql));
                 } else {
                     $this->addLogger(sprintf("坑位信息%d,更新坑位信息失败, SQL:%s", $bucketInfo->id, Model_Choice_EsfBidBucket::$lastSql));
                     continue;
                 }
             } else {
                 //未达到警告线,继续标记
                 //记录历史信息
                 if (isset($this->exceptionBucket[$bucketInfo->id]['history'])) {
                     $history = $this->exceptionBucket[$bucketInfo->id]['history'];
                 } else {
                     $history = array();
                 }
                 $history[] = $this->exceptionBucket[$bucketInfo->id];
                 //继续标记
                 $this->exceptionBucket[$bucketInfo->id] = array('planNum' => $planNum, 'usedNum' => $bucketInfo->usedNum, 'occur' => $this->exceptionBucket[$bucketInfo->id]["occur"] + 1);
                 $this->exceptionBucket[$bucketInfo->id]['history'] = $history;
                 //记录日志
                 $this->addLogger(sprintf("坑位信息%d,出现异常%s", $bucketInfo->id, json_encode($this->exceptionBucket[$bucketInfo->id])));
             }
         } else {
             $this->exceptionBucket[$bucketInfo->id] = array('planNum' => $planNum, 'usedNum' => $bucketInfo->usedNum, 'occur' => 1);
             $this->addLogger(sprintf("坑位信息%d,出现异常%s", $bucketInfo->id, json_encode($this->exceptionBucket[$bucketInfo->id])));
         }
         //更新异常文件
         $this->exceptionBucketFile->coverLog(json_encode($this->exceptionBucket));
         //更新游标
         $this->setCursor($bucketInfo->id);
     }
 }
Пример #28
0
 /**
  * 更新房源推广计划的数据
  *
  * $planId 是ajk_propspread的主键
  * $params array() 变更的参数
  */
 public function updatePropSpread($planId, $params = array(), $version = -1)
 {
     $params = array_change_key_case($params);
     //转化为小写
     if ($version === -1) {
         return Model_Plan_EsfAjkPropSpread::updateLayer(array(), $params, $planId);
     } else {
         //乐观锁
         $filter = array(array('id', '=', $planId));
         $queue = Model_Plan_EsfAjkPropSpread::fetchOneLayer($filter);
         if (empty($queue)) {
             return false;
         }
         $field1 = $queue->field1;
         array_push($filter, array('field1', '=', $field1 + 1));
         $rs = Model_Plan_EsfAjkPropSpread::updateLayer($filter, $params, $planId);
         if (isset($rs) && $rs > 0) {
             return $rs;
         } else {
             //todo  log method
             $date = date("Ymd");
             $path = "/data1/logs/haopan.log" . $date;
             $ErrorInfo = "计划id:" . $planId . '更新失败,更新的数据为' . json_encode($params) . 'where 数据为' . json_encode($filter);
             file_put_contents($path, $ErrorInfo, FILE_APPEND);
             return 0;
         }
     }
 }