/** * 把经纪人因为套餐到期停止推广的房源(套餐规定的可推广房源数)重新上线,(按房源发布时间 倒序排列) * @return string */ private function reUpExpireHouse() { $currentCombo = Bll_Combo_Broker_BrokerComboInfo::getBrokerCurrentCombo($this->params['ajk_broker_id'], Bll_Combo_Broker_BrokerComboInfo::SITE_TYPE_HZ); if (Bll_Combo_Broker_BrokerComboInfo::isOpenUp($currentCombo)) { return $this->allReturn[] = '打通套餐,好租不处理'; } // 当前在线房源数 $onLineSpreadHouseCount = Bll_Combo_HouseRelation::getOnLineSpreadHouseCount($this->params['ajk_broker_id'], Bll_Combo_HouseRelation::SITE_TYPE_HZ); $comboProNum = Bll_Combo_Broker_BrokerComboInfo::getTotalCombosProNum($this->params['ajk_broker_id']); // 套餐可以推广的房源数 $comboProNum = isset($comboProNum['totalRentPropNum']) ? $comboProNum['totalRentPropNum'] : 0; if (!$comboProNum) { return $this->allReturn[] = "套餐可以推广的房源数0"; } if ($onLineSpreadHouseCount >= $comboProNum) { return $this->allReturn[] = "在线推广房源数{$onLineSpreadHouseCount}, 套餐可推广房源数{$comboProNum},不需要上线套餐到期的房子"; } $shouldUpNum = $comboProNum - $onLineSpreadHouseCount; $allExpireRelations = Bll_Combo_HouseRelation::getHouseRelations($this->params['ajk_broker_id'], Bll_Combo_HouseRelation::SITE_TYPE_HZ, Model_Combo_HouseRelation::ENUM_COMBO_EXPIRE); if (empty($allExpireRelations)) { return $this->allReturn[] = "没有需要上线的推广房子"; } // 房子有效性判断 $num = 0; $shouldUpRelations = array(); foreach ($allExpireRelations as $relation) { $proId = $relation['houseId']; if (!($propInfo = Bll_House_HzHouse::getPropInfo($proId, $relation['cityId'], 2))) { continue; } if (!$propInfo['status'] || in_array($propInfo['msg']['status'], array(Const_HzStatus::VERIFY, Const_HzStatus::REMOVE, Const_HzStatus::EXPIRED))) { continue; } if ($num < $shouldUpNum) { $shouldUpRelations[] = $relation; } $num++; } foreach ($shouldUpRelations as $comboRelation) { $this->params['pro_id'] = $comboRelation['houseId']; // 更新关系 Bll_Combo_HouseRelation::updateComboStatusById($comboRelation['id'], Model_Combo_HouseRelation::ENUM_HOUSE_ONLINE, Bll_Combo_HouseRelation::SITE_TYPE_HZ); // 维护房子状态 Bll_HzPropBll::bulidHzProStatu($this->params['pro_id']); // 写入房源取消套餐推广日志 $this->writePropLog(Const_ProLogType::LOG_ADD_INTO_COMBO, '开始套餐推广'); } }
/** * 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'] . ']手动套餐推广日志写入成功')); }
/** * 获取经纪人当前套餐可推广房源数 * * @param int $brokerId * @return int */ private static function getComboSpreadHouseLimit($brokerId) { $comboInfo = Bll_Combo_Broker_BrokerComboInfo::getBrokerCurrentCombo($brokerId, Bll_Combo_Broker_BrokerComboInfo::SITE_TYPE_AJK); if (empty($comboInfo) || !isset($comboInfo['salePropNum'])) { return 0; } return intval($comboInfo['salePropNum']); }
/** * 判断新套餐 经纪人是否可以推广房源 * * @param int $cityId * @param int $brokerId * @return bool */ public static function ajkComboBrokerCanSpreadHouse($cityId, $brokerId) { $currentCombo = Bll_Combo_Broker_BrokerComboInfo::getBrokerCurrentCombo($brokerId, Bll_Combo_Broker_BrokerComboInfo::SITE_TYPE_AJK); if (empty($currentCombo)) { return false; } if (Bll_Combo_Broker_BrokerComboInfo::isOpenUp($currentCombo)) { $currentSpreadHouseCount = Bll_Combo_HouseRelation::getHouseCount($brokerId, Bll_Combo_HouseRelation::SITE_TYPE_AJK, true); $salePropNum = $currentCombo[Bll_Combo_Broker_BrokerComboInfo::getComboIndexBySiteType(Bll_Combo_Broker_BrokerComboInfo::SITE_TYPE_AJK)]; $rentPropNum = $currentCombo[Bll_Combo_Broker_BrokerComboInfo::getComboIndexBySiteType(Bll_Combo_Broker_BrokerComboInfo::SITE_TYPE_HZ)]; return $currentSpreadHouseCount < $salePropNum + $rentPropNum; } else { $currentSpreadHouseCount = Bll_Combo_HouseRelation::getHouseCountEx($brokerId, $cityId, Bll_Combo_HouseRelation::SITE_TYPE_AJK); return $currentSpreadHouseCount < $currentCombo[Bll_Combo_Broker_BrokerComboInfo::getComboIndexBySiteType(Bll_Combo_Broker_BrokerComboInfo::SITE_TYPE_AJK)]; } }
/** * 505 套餐转入 * 1. 获取经纪人当前的套餐信息 * 2. 如果经纪人没有套餐 * 1. 下掉经纪人所有的的套餐房源&竞价计划 * 3. 判断经纪人当前在线的房源数和经纪人当前生效的套餐能够推广的房源数 * 1. 如果当前推广的房源数 大于 套餐可以推广的房源数,把多余的房子下掉(按关系表的更新时间,优先下线更新时间早的) * 2. 如果当前推广的房源数 小于 套餐可以推广的房源数,把套餐到期的房子下掉(按关系表的更新时间,优先上线更新时间晚的) * * @param $queueInfo */ public static function comboImport($params) { //除日志内容外,基本复制 self::comboExpire $allReturn = array("队列(" . $params['id'] . ")开始处理"); //获取经纪人当前在用的套餐 $brokerCombo = Bll_Combo_Broker_BrokerComboInfo::getBrokerCurrentCombo($params['broker_id'], Bll_Combo_Broker_BrokerComboInfo::SITE_TYPE_JP); //经纪人当前在线房源,按照update_time asc排序 $brokerOnlineProps = Model_Combo_HouseRelation::data_access('jp')->filter('brokerId', $params['broker_id'])->filter_by_op('state', '>=', 101)->filter_by_op('state', '<=', 199)->sort('updateTime', 'asc')->find_all(); $allReturn[] = "经纪人当前套餐ID:" . $brokerCombo['comboId'] . ",可推广jp房源数:" . $brokerCombo['jpPropNum'] . ",经纪人在线房源数:" . count($brokerOnlineProps); if (!empty($brokerCombo)) { //套餐转入,不用下房源,只需要上线房源即可,获取经纪人需要自动上架的房源,state=到期 按照update_time desc 排序 $brokerAutoProp = Model_Combo_HouseRelation::data_access('jp')->filter('brokerId', $params['broker_id'])->filter('state', Model_Combo_HouseRelation::ENUM_COMBO_EXPIRE)->sort('updateTime')->find_all(); if (!empty($brokerAutoProp)) { foreach ($brokerAutoProp as $key => $prop) { if ($key < $brokerCombo['jpPropNum'] - count($brokerOnlineProps)) { //房源信息验证 $check = self::propCheck($prop->houseId, $prop->brokerId); if (!$check['flg']) { $allReturn[] = "房源" . $prop->houseId . "无法上线," . $check['data']; continue; } //房源上线 更新数据 关系表状态 state=上线 $prop->state = Model_Combo_HouseRelation::ENUM_HOUSE_ONLINE; $prop->save(); //写入上线日志 $params['pro_id'] = $prop->houseId; $data = Bll_JpPropBll::build_prop_log($params, 20, "房源开始套餐推广", $params['broker_id']); Model_Log_HouseLogNew::create($data, date('Ymd'))->save(); $allReturn[] = "套餐转入,房源" . $params['pro_id'] . "开始套餐推广日志写入成功"; } } } } else { $allReturn[] = "套餐转入,当前没有查询到套餐,不处理"; } return Bll_JpPropBll::build_return(1, $allReturn); }