public function handle_request()
 {
     $dealStatus = array(Const_HzStatus::VERIFY, Const_HzStatus::REMOVE, Const_HzStatus::EXPIRED);
     $condition = array(array('proid', '>', $this->_startId), array('updated', '>=', strtotime($this->_startTime)), array('updated', '<=', strtotime($this->_endTime)));
     $houseList = Model_House_HzPropSearch::getPropLists($this->_cityId, $condition, self::BATCH_LIMIT);
     foreach ($houseList as $houseInfo) {
         $houseId = $houseInfo['proid'];
         $this->setFlag(array('id' => $houseId, 'time' => date('Y-m-d H:i:s')));
         if (!in_array($houseInfo['status'], $dealStatus)) {
             $this->setLog(sprintf('房源[%d]房源状态[%d]不在[%s]不处理', $houseId, $houseInfo['status'], implode(',', $dealStatus)));
             continue;
         }
         $houseRelation = Bll_Combo_HouseRelation::getRelationByHouseId($houseId, Bll_Combo_HouseRelation::SITE_TYPE_HZ);
         if (empty($houseRelation)) {
             $this->setLog(sprintf('房源[%d - %d],没有获取到套餐关系', $houseId, $houseInfo['status']));
             continue;
         }
         /** 如果房源关系已经不是在线的,就不修复 */
         if (false == Bll_Combo_HouseRelation::isRelationOnline($houseRelation['state'])) {
             $this->setLog(sprintf('房源[%d - %d],已经不在线,不处理', $houseId, $houseRelation['state']));
             continue;
         }
         switch ($houseInfo['status']) {
             case Const_HzStatus::VERIFY:
                 $relationState = Model_Combo_HouseRelation::ENUM_HOUSE_ILLEGAL;
                 break;
             case Const_HzStatus::REMOVE:
                 $relationState = Model_Combo_HouseRelation::ENUM_HOUSE_DELETE;
                 break;
             case Const_HzStatus::EXPIRED:
                 $relationState = Model_Combo_HouseRelation::ENUM_HOUSE_EXPIRE;
                 break;
             default:
                 $relationState = Model_Combo_HouseRelation::ENUM_HOUSE_DELETE;
                 continue;
         }
         /** 修正房源套餐推广关系 */
         if (1 == Bll_Combo_HouseRelation::updateComboStatusById($houseRelation['id'], $relationState, Bll_Combo_HouseRelation::SITE_TYPE_HZ)) {
             $this->setLog(sprintf('房源[%d - %d],套餐推广关系[%d-%d]修复成功', $houseId, $houseInfo['status'], $houseRelation['id'], $houseRelation['state']));
         } else {
             $this->setLog(sprintf('房源[%d - %d],套餐推广关系[%d-%d]修复失败', $houseId, $houseInfo['status'], $houseRelation['id'], $houseRelation['state']));
         }
         $this->noticeComboSolr($houseInfo['cityid'], $houseInfo['userid'], $houseId);
     }
     if (count($houseList) < self::BATCH_LIMIT) {
         $this->setLog(sprintf('[%d - %d]已经处理完成...', $this->_cityId, $this->_startId));
         $this->setShStopFlag();
         $this->removeFlag();
     } else {
         $this->setShCommonSleepTime(1);
     }
 }
 /**
  * 获取一段时间内,二手房、租房的房源状态发生变更的房源
  */
 public function handle_request_internal()
 {
     $request = APF::get_instance()->get_request();
     $routeMatches = $request->get_router_matches();
     $business = $routeMatches[1];
     /** 处理二手房 */
     if (strcasecmp($business, 'ajk') == 0) {
         $siteType = Bll_Combo_HouseRelation::SITE_TYPE_AJK;
     } elseif (strcasecmp($business, 'hz') == 0) {
         $siteType = Bll_Combo_HouseRelation::SITE_TYPE_HZ;
     } else {
         $this->responseJSON('error', array(), '非法请求');
         return;
     }
     $params = $request->get_parameters();
     if (!isset($params['start_time']) || !isset($params['end_time'])) {
         $this->responseJSON('error', array(), '参数不全');
         return;
     }
     $startId = 0;
     if (isset($params['start_id'])) {
         $startId = intval($params['start_id']);
     }
     $startTime = intval($params['start_time']);
     $endTime = intval($params['end_time']);
     if ($endTime - $startTime > 600) {
         $this->responseJSON('error', array(), '只能获取10分钟以内的推广状态变更的房源');
         return;
     }
     $condition = array(array('state', 'IN', array(101, 201, 202, 203, 204, 205)), array('updateTime', '>=', date('Y-m-d H:i:s', $startTime)), array('updateTime', '<=', date('Y-m-d H:i:s', $endTime)));
     if ($startId > 0) {
         $condition[] = array('houseId', '>', $startId);
     }
     $houseComboRelationList = Model_Combo_HouseRelation::getList($siteType, $condition, 1000, array('houseId', 'asc'));
     if (empty($houseComboRelationList)) {
         $this->responseJSON('ok', array(), '没有获取到房源推广信息');
         return;
     }
     $result = array('spread_house' => array(), 'not_spread_house' => array(), 'last_id' => 0);
     foreach ($houseComboRelationList as $houseComboRelation) {
         $result['last_id'] = $houseComboRelation['houseId'];
         if (Bll_Combo_HouseRelation::isRelationOnline($houseComboRelation['state'])) {
             $result['spread_house'][] = $houseComboRelation['houseId'];
         } else {
             $result['not_spread_house'][] = $houseComboRelation['houseId'];
         }
     }
     $this->responseJSON('ok', $result, sprintf('%s - %s 时间内推广状态发生变更的房源[%d]', date('Y-m-d H:i:s', $startTime), date('Y-m-d H:i:s', $endTime), $startId));
 }
Beispiel #3
0
 /**
  * 获取二手房、好租房源的推广状态
  */
 public function handle_request_internal()
 {
     $request = APF::get_instance()->get_request();
     if (!$request->is_post_method()) {
         $this->responseJSON('error', array(), '请以POST方式发送请求');
         return;
     }
     $routeMatches = $request->get_router_matches();
     $business = $routeMatches[1];
     /** 处理二手房 */
     if (strcasecmp($business, 'ajk') == 0) {
         $siteType = Bll_Combo_HouseRelation::SITE_TYPE_AJK;
     } elseif (strcasecmp($business, 'hz') == 0) {
         $siteType = Bll_Combo_HouseRelation::SITE_TYPE_HZ;
     } else {
         $this->responseJSON('error', array(), '非法请求');
         return;
     }
     $params = $request->get_parameters();
     if (!isset($params['house_id'])) {
         $this->responseJSON('error', array(), '请提交房源id');
         return;
     }
     if (strpos($params['house_id'], ',') === false) {
         $houseIds = intval($params['house_id']);
     } else {
         $houseIds = explode(',', $params['house_id']);
     }
     $houseComboRelationList = Bll_Combo_HouseRelation::getRelationByHouseIdEx($houseIds, $siteType);
     if (empty($houseComboRelationList)) {
         $this->responseJSON('ok', array(), '没有获取到房源推广信息');
         return;
     }
     $result = array('spread_house' => array(), 'not_spread_house' => array());
     foreach ($houseComboRelationList as $houseComboRelation) {
         if (Bll_Combo_HouseRelation::isRelationOnline($houseComboRelation['state'])) {
             $result['spread_house'][] = $houseComboRelation['houseId'];
         } else {
             $result['not_spread_house'][] = $houseComboRelation['houseId'];
         }
     }
     $this->responseJSON('ok', $result, $request->get_parameter('house_id'));
 }
 public function handle_request()
 {
     $condition = array(array('proid', '>', $this->_startId), array('cityid', '=', $this->_cityId), array('created', '<', $this->_expireTime), array('status', '<>', Const_HzStatus::EXPIRED), array('status', '<>', Const_HzStatus::REMOVE));
     $houseList = Model_House_HzPropSearch::getPropLists($this->_cityId, $condition, self::BATCH_LIMIT);
     if (empty($houseList)) {
         $this->setShStopFlag();
         $this->setLog('处理完成');
         return;
     }
     foreach ($houseList as $house) {
         $houseId = $house['proid'];
         $this->setLog(sprintf('开始处理房源[%d], 房源发布时间[%s]: %s', $houseId, date('Y-m-d H:i:s', $house['created']), json_encode($house)));
         $this->setFlag(array('id' => $houseId), $this->_cursorFile);
         if (1 != Model_House_HzPropSearch::updatePropStatus($this->_cityId, $houseId, Const_HzStatus::EXPIRED)) {
             $this->setLog(sprintf('房源[%d]更新房源状态失败', $houseId));
             continue;
         }
         $comboHouseRelation = Bll_Combo_HouseRelation::getRelationByHouseId($houseId, Bll_Combo_HouseRelation::SITE_TYPE_HZ, false);
         if (empty($comboHouseRelation)) {
             $this->setLog(sprintf('房源[%d]没有获取到套餐推广关系', $houseId));
             continue;
         }
         $this->setLog(sprintf('房源[%d]套餐推广关系: %s', $houseId, json_encode($comboHouseRelation)));
         if (!Bll_Combo_HouseRelation::isRelationOnline($comboHouseRelation['state'])) {
             $this->setLog(sprintf('房源[%d]套餐推广状态不在线[%d]', $houseId, $comboHouseRelation['state']));
             continue;
         }
         $this->setLog(sprintf('房源[%d]套餐推广状态在线[%d]', $houseId, $comboHouseRelation['state']));
         if (1 != Bll_Combo_HouseRelation::updateComboStatusById($comboHouseRelation['id'], Model_Combo_HouseRelation::ENUM_COMBO_EXPIRE, Bll_Combo_HouseRelation::SITE_TYPE_HZ)) {
             $this->setLog(sprintf('更新房源[%d]套餐关系[%d : %d -> %d]失败', $houseId, $comboHouseRelation['id'], $comboHouseRelation['state'], Model_Combo_HouseRelation::ENUM_COMBO_EXPIRE));
             continue;
         }
         $this->setLog(sprintf('更新房源[%d]套餐关系[%d : %d -> %d]成功', $houseId, $comboHouseRelation['id'], $comboHouseRelation['state'], Model_Combo_HouseRelation::ENUM_COMBO_EXPIRE));
         $this->noticeComboSolr($this->_cityId, $house['userid'], $houseId, $comboHouseRelation['brokerId']);
     }
     if (count($houseList) < self::BATCH_LIMIT) {
         $this->setShStopFlag();
     }
 }
Beispiel #5
0
 /**
  * 111 房源手动套餐推广
  *
  * 1. 判断房源信息
  * 2. 获取经纪人套餐信息
  * 3. 获取经纪人当前推广中的房源数
  * 4. 判断经纪人已经推广的房源数 是否超过 套餐限制
  *      1. 超过 则 设置房源 套餐推广关系为未推广 结束
  * 5. 通知 用户端上线房源
  *
  * @param $params
  * @return array
  */
 public static function pro_start_combo($params)
 {
     $currentCombo = Bll_Combo_Broker_BrokerComboInfo::getBrokerCurrentCombo($params['broker_id'], Bll_Combo_Broker_BrokerComboInfo::SITE_TYPE_AJK);
     /** 经纪人当前没有生效的套餐 */
     if (empty($currentCombo)) {
         return static::build_return(1, array(sprintf('%d 经纪人当前[%s]没有生效的租售套餐', $params['id'], date('Y-m-d H:i:s'))));
     }
     /** 获取经纪人当前在线的房源数 */
     /* 此处不需要判断。由于前台已经插入关系或者并发 都导致这个地方失败
         $onlineHouseCount = Bll_Combo_HouseRelation::getHouseCountEx($params['broker_id'], $params['city_id'], Bll_Combo_HouseRelation::SITE_TYPE_AJK);
        if ($onlineHouseCount >= $currentCombo['salePropNum']) {
            return static::build_return(1, sprintf('%d 经纪人当前[%s]推广中的房源数[%d]超出套餐可推广房源数[%d]。', $params['id'], date('Y-m-d H:i:s'), $onlineHouseCount, $currentCombo['salePropNum']));
        }*/
     // 查询套餐关系
     if (!($comboRelations = Bll_Combo_HouseRelation::getRelationByHouseId($params['pro_id'], Bll_Combo_HouseRelation::SITE_TYPE_AJK))) {
         return self::build_return(0, array('房源[' . $params['pro_id'] . ']套餐关系为空'));
     }
     if (!Bll_Combo_HouseRelation::isRelationOnline($comboRelations['state'])) {
         return self::build_return(0, array('房源[' . $params['pro_id'] . ']套餐关系不在线'));
     }
     $data = self::build_prop_log($params, 20, '房源手动套餐推广;队列表id为' . $params['id'], $params['broker_id']);
     if (!Model_Log_HouseLogNew::create($data, date('Ymd'))->save()) {
         return self::build_return(0, array('房源[' . $params['pro_id'] . ']手动套餐推广日志写入失败'));
     }
     return self::build_return(1, array('房源[' . $params['pro_id'] . ']手动套餐推广日志写入成功'));
 }
Beispiel #6
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;
 }
Beispiel #7
0
 public static function change_prop_price($params)
 {
     $all_return = array("队列(" . $params['id'] . ")开始处理");
     $houseStatus = json_decode($params['remark'], 1);
     //根据查询结果判定房源是否在线
     if (Bll_City::isComboCity($params['city_id'])) {
         $houseRelationList = Bll_Combo_HouseRelation::getHouseRelation($params['broker_id'], $params['city_id'], array($params['pro_id']), Bll_Combo_HouseRelation::SITE_TYPE_JP);
         if (empty($houseRelationList)) {
             $all_return[] = '房源套餐关系为空';
             return self::build_return(1, $all_return);
         }
         foreach ($houseRelationList as $houseRelation) {
             if (Bll_Combo_HouseRelation::isRelationOnline($houseRelation['state'])) {
                 $data = self::build_prop_log($params, 4, '房源更新;队列表id为' . $params['id'], $params['broker_id']);
                 if (!Model_Log_HouseLogNew::create($data, date('Ymd'))->save()) {
                     $all_return[] = '房源更新日志写入失败';
                 } else {
                     $all_return[] = '房源更新日志写入成功';
                 }
             }
         }
         //            return self::build_return(1, $all_return);
     }
     //PPC经纪人 房源是否在线
     $isHouseOnline = Bll_Plan_JpPlanManage::getInstance()->isHouseOnline($params['pro_id']);
     if ($isHouseOnline) {
         //写房源更新solr日志
         $data = self::build_prop_log($params, 4, "房源价格变更需要更新solr", $params['broker_id']);
         $houseStatus['newPrice'] = $houseStatus['price'];
         $houseStatus['msg'] = $data['remark'];
         $data['remark'] = json_encode($houseStatus);
         if (Model_Log_HouseLogNew::create($data, date('Ymd'))->save()) {
             $all_return[] = "房源" . $params['pro_id'] . "更新solr成功";
             //价格变更需要重新rebuild房源的spreadPrice字段
             Bll_Plan_JpPlanManage::getInstance()->rebuildSpreadPrice($params['pro_id'], true);
         } else {
             $all_return[] = "房源" . $params['pro_id'] . "更新solr失败";
         }
     }
     //写房源修改价格日志
     $data = self::build_prop_log($params, 2, "房源修改价格", $params['broker_id']);
     $houseStatus['newPrice'] = $houseStatus['price'];
     $houseStatus['msg'] = $data['remark'];
     $data['remark'] = json_encode($houseStatus);
     if (Model_Log_HouseLogNew::create($data, date('Ymd'))->save()) {
         $all_return[] = '房源修改价格日志写入成功';
         return self::build_return(1, $all_return);
     } else {
         $all_return[] = '房源修改价格日志写入失败';
         return self::build_return(0, $all_return);
     }
 }
 private function repairComboSpreadRelation($memberId, $houseId, $houseState, $houseType)
 {
     $relationState = Model_Combo_HouseRelation::ENUM_HOUSE_DELETE;
     switch ($houseState) {
         case self::HOUSE_STATE_EXPIRED:
             $relationState = Model_Combo_HouseRelation::ENUM_HOUSE_EXPIRE;
             break;
         case self::HOUSE_STATE_ILLEGAL:
             $relationState = Model_Combo_HouseRelation::ENUM_HOUSE_ILLEGAL;
             break;
     }
     $houseRelation = Bll_Combo_HouseRelation::getRelationByHouseId($houseId, Bll_Combo_HouseRelation::SITE_TYPE_JP);
     if (empty($houseRelation)) {
         $this->logMsg(sprintf('房源[%d - %d],没有获取到套餐关系', $houseId, $houseState));
         return;
     }
     /** 如果房源关系已经不是在线的,就不修复 */
     if (false == Bll_Combo_HouseRelation::isRelationOnline($houseRelation['state'])) {
         $this->logMsg(sprintf('房源[%d - %d]关系已经是不在线,不修复', $houseId, $houseRelation['state']));
         return;
     }
     /** 记录到文件里,方便发送邮件 */
     $emailContent = sprintf('房源[%d - %d],套餐推广关系[%d-%d]不一致' . PHP_EOL, $houseId, $houseState, $houseRelation['id'], $houseRelation['state']);
     file_put_contents($this->_email, $emailContent, FILE_APPEND);
     /** 修正房源套餐推广关系 */
     if (1 == Bll_Combo_HouseRelation::updateComboStatusById($houseRelation['id'], $relationState, Bll_Combo_HouseRelation::SITE_TYPE_JP)) {
         $this->logMsg(sprintf('房源[%d - %d],套餐推广关系[%d-%d]修复成功', $houseId, $houseState, $houseRelation['id'], $houseRelation['state']));
     } else {
         $this->logMsg(sprintf('房源[%d - %d],套餐推广关系[%d-%d]修复失败', $houseId, $houseState, $houseRelation['id'], $houseRelation['state']));
     }
     $this->noticeComboSolr($memberId, $houseId, $houseType);
 }