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)); }
/** * 获取二手房、好租房源的推广状态 */ 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(); } }
/** * 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'] . ']手动套餐推广日志写入成功')); }
/** * 警告:未得到授权,不能使用。所有者: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; }
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); }