/** * 房源开始套餐推广 * * @param int $brokerId * @param int $cityId * @param int|array $houseIds * @param string $siteType * @return bool */ public static function houseStartComboSpread($brokerId, $cityId, $houseIds, $siteType = self::SITE_TYPE_AJK) { // TODO 房源开始套餐推广 && 修改套餐推广房源数 // TODO 先查出所有需要推广的房源 再统一更新 和 新加 $condition = array('brokerId' => $brokerId, 'cityId' => $cityId, 'houseId' => $houseIds); $houseRelationList = Model_Combo_HouseRelation::getList($siteType, $condition); $spreadHouseCount = 0; if (empty($houseRelationList)) { foreach ($houseIds as $houseId) { if (0 < static::insertHouseRelation($brokerId, $cityId, $houseId, Model_Combo_HouseRelation::ENUM_HOUSE_ONLINE, $siteType)) { $spreadHouseCount++; } } /** TODO 添加上下架通知 */ static::notifyHouseUpDownTask($brokerId, $houseIds, $cityId, $siteType, Model_House_UpDown_Task::TYPE_PRO_START_COMBO, '房源手动套餐推广', __METHOD__, $brokerId); return true; } $spreadHouse = array(); foreach ($houseRelationList as $houseRelation) { $spreadHouse[] = $houseRelation['houseId']; } $firstSpreadHouse = array_diff($houseIds, $spreadHouse); $spreadHouseCount = Model_Combo_HouseRelation::updateHouseComboSpreadStateEx($brokerId, $cityId, $spreadHouse, Model_Combo_HouseRelation::ENUM_HOUSE_ONLINE, $siteType); if ($spreadHouseCount == 0) { return false; } foreach ($firstSpreadHouse as $houseId) { if (0 < static::insertHouseRelation($brokerId, $cityId, $houseId, Model_Combo_HouseRelation::ENUM_HOUSE_ONLINE, $siteType)) { $spreadHouseCount++; } } /** TODO 添加上下架通知 */ static::notifyHouseUpDownTask($brokerId, $houseIds, $cityId, $siteType, Model_House_UpDown_Task::TYPE_PRO_START_COMBO, '房源手动套餐推广', __METHOD__, $brokerId); return true; }
/** * 502 经纪人套餐生效 * * @param $queueInfo * @return array */ public static function comboEffect($queueInfo) { $dealRemark = array(); $currentCombo = Bll_Combo_Broker_BrokerComboInfo::getBrokerCurrentCombo($queueInfo['broker_id'], Bll_Combo_Broker_BrokerComboInfo::SITE_TYPE_AJK); $onlineHouseRelationList = Bll_Combo_HouseRelation::getOnlineHouseList($queueInfo['broker_id'], $queueInfo['city_id'], Bll_Combo_HouseRelation::SITE_TYPE_AJK); /** 当前没有生效的套餐,下掉所有的房子 */ if (empty($currentCombo)) { $dealRemark[] = sprintf('%d 经纪人当前[%s]没有生效的租售套餐', $queueInfo['id'], date('Y-m-d H:i:s')); $data = static::buildHouseLog($queueInfo, 21, '经纪人套餐生效,未获取到套餐信息房源下架', 0); if (!empty($onlineHouseRelationList)) { foreach ($onlineHouseRelationList as $onlineHouseRelation) { $data['houseId'] = $onlineHouseRelation['houseId']; if (!Model_Log_HouseLogNew::create($data, date('Ymd'))->save()) { $dealRemark[] = sprintf('%d 套餐生效,未获取到套餐信息,下掉房源(%d) 失败', $queueInfo['id'], $onlineHouseRelation['houseId']); continue; } $dealRemark[] = sprintf('%d 套餐生效,未获取到套餐信息,下掉房源(%d) 成功', $queueInfo['id'], $onlineHouseRelation['houseId']); } } return static::buildReturn(self::PROCESS_STATUS_SUCCESS, $dealRemark); } /** 添加打通的套餐的逻辑 */ if (Bll_Combo_Broker_BrokerComboInfo::isOpenUp($currentCombo)) { $dealRemark[] = '当前套餐为打通套餐'; $comboSpreadHouseCount = $currentCombo['salePropNum'] + $currentCombo['rentPropNum']; $hzHouseOnlineRelationList = Bll_Combo_HouseRelation::getOnlineHouseList($queueInfo['broker_id'], $queueInfo['city_id'], Bll_Combo_HouseRelation::SITE_TYPE_HZ); $spreadHouseCount = count($hzHouseOnlineRelationList) + count($onlineHouseRelationList); if ($spreadHouseCount >= $comboSpreadHouseCount) { $dealRemark[] = sprintf('%d 经纪人当前[%s]套餐,可推广房源数小于当前在线房源数,不处理。', $queueInfo['id'], date('Y-m-d H:i:s')); return static::buildReturn(self::PROCESS_STATUS_SUCCESS, $dealRemark); } /** 上架房源 */ $needSpreadHouseCount = $comboSpreadHouseCount - $spreadHouseCount; $hzExpiredHouseRelationList = Bll_Combo_HouseRelation::getHouseRelations($queueInfo['broker_id'], Bll_Combo_HouseRelation::SITE_TYPE_HZ, Model_Combo_HouseRelation::ENUM_COMBO_EXPIRE); $ajkExpiredHouseRelationList = Bll_Combo_HouseRelation::getHouseRelations($queueInfo['broker_id'], Bll_Combo_HouseRelation::SITE_TYPE_AJK, Model_Combo_HouseRelation::ENUM_COMBO_EXPIRE); $rangedHouseRelation = Bll_Combo_Updown_AjkDealJob::calculateRangeByCreated($ajkExpiredHouseRelationList, $hzExpiredHouseRelationList); /** 过滤无效房源 */ $validateHouseRelation = array(); foreach ($rangedHouseRelation as $houseRelation) { $houseId = $houseRelation['houseId']; if ($houseRelation['siteType'] == Bll_Combo_HouseRelation::SITE_TYPE_HZ) { $houseInfo = Model_House_HzPropSearch::get_prop_by_prop_id($queueInfo['city_id'], $houseId); if (empty($houseInfo)) { $dealRemark[] = sprintf('好租房源[%d]不存在', $houseId); continue; } if (in_array($houseInfo['status'], array(Const_HzStatus::VERIFY, Const_HzStatus::REMOVE, Const_HzStatus::EXPIRED))) { $dealRemark[] = sprintf('好租房源[%d]不是有效的房源', $houseId); continue; } $validateHouseRelation[] = $houseRelation; continue; } $houseInfo = Bll_House_EsfHouse::getHouseBaseInfoEx($houseId, $queueInfo['city_id']); if (empty($houseInfo)) { $dealRemark[] = sprintf('二手房房源[%d]不是有效的房源', $houseId); continue; } if ($houseInfo['isVisible'] == 0 && $houseInfo['expireWorker'] != 'propertyReport') { $dealRemark[] = sprintf('二手房房源(%d)违规,不做处理', $houseId); continue; } $validateHouseRelation[] = $houseRelation; } $houseUpRelationList = array_slice($validateHouseRelation, 0, $needSpreadHouseCount); $data = static::buildHouseLog($queueInfo, 20, '经纪人套餐生效,房源上架', 0); foreach ($houseUpRelationList as $onlineHouseRelation) { $site = $onlineHouseRelation['siteType'] == Bll_Combo_HouseRelation::SITE_TYPE_AJK ? '二手房' : '好租'; if (1 == Model_Combo_HouseRelation::updateHouseComboSpreadStateEx($queueInfo['broker_id'], $queueInfo['city_id'], $onlineHouseRelation['houseId'], Model_Combo_HouseRelation::ENUM_HOUSE_ONLINE, $onlineHouseRelation['siteType'])) { $dealRemark[] = sprintf('上架' . $site . '房源[%d]成功', $onlineHouseRelation['houseId']); } else { $dealRemark[] = sprintf('上架' . $site . '房源[%d]失败', $onlineHouseRelation['houseId']); } $data['houseId'] = $onlineHouseRelation['houseId']; $data['siteType'] = $onlineHouseRelation['siteType'] == Bll_Combo_HouseRelation::SITE_TYPE_AJK ? 1 : 2; if (!Model_Log_HouseLogNew::create($data, date('Ymd'))->save()) { $dealRemark[] = sprintf('%d 套餐生效,上架' . $site . '房源(%d) 失败', $queueInfo['id'], $onlineHouseRelation['houseId']); continue; } $dealRemark[] = sprintf('%d 套餐生效,上架' . $site . '房源(%d) 成功', $queueInfo['id'], $onlineHouseRelation['houseId']); } $dealRemark[] = sprintf('%d [%s] 经纪人套餐生效,上架%d套房源。', $queueInfo['id'], date('Y-m-d H:i:s'), $spreadHouseCount); return static::buildReturn(self::PROCESS_STATUS_SUCCESS, $dealRemark); } /** * 下掉超出限制的房源 */ if (count($onlineHouseRelationList) >= $currentCombo['salePropNum']) { $data = static::buildHouseLog($queueInfo, 21, '经纪人套餐生效,下掉多余房子', 0); $offLineHouseList = array_slice($onlineHouseRelationList, $currentCombo['salePropNum']); if (empty($offLineHouseList)) { return static::buildReturn(self::PROCESS_STATUS_SUCCESS, sprintf('%d [%s] 经纪人在线房源数已经达到套餐限制[%d]。', $queueInfo['id'], date('Y-m-d H:i:s'), $currentCombo['salePropNum'])); } foreach ($offLineHouseList as $offLineHouse) { $data['houseId'] = $offLineHouse['houseId']; if (!Model_Log_HouseLogNew::create($data, date('Ymd'))->save()) { $dealRemark[] = sprintf('%d 套餐生效,未获取到套餐信息,下掉房源(%d) 失败', $queueInfo['id'], $offLineHouse['houseId']); continue; } $dealRemark[] = sprintf('%d 套餐生效,未获取到套餐信息,下掉房源(%d) 成功', $queueInfo['id'], $offLineHouse['houseId']); } return static::buildReturn(self::PROCESS_STATUS_SUCCESS, $dealRemark); } $expiredHouseRelationList = Bll_Combo_HouseRelation::getHouseRelations($queueInfo['broker_id'], Bll_Combo_HouseRelation::SITE_TYPE_AJK, Model_Combo_HouseRelation::ENUM_COMBO_EXPIRE); if (empty($expiredHouseRelationList)) { return static::buildReturn(self::PROCESS_STATUS_SUCCESS, sprintf('%d [%s] 没有获取到经纪人因套餐到期而下架的房源。', $queueInfo['id'], date('Y-m-d H:i:s'))); } $expiredHouseRelationIds = array(); foreach ($expiredHouseRelationList as $expiredHouseRelation) { $expiredHouseRelationIds[] = $expiredHouseRelation['houseId']; } $houseInfoList = Bll_House_EsfHouse::getHouseInfoByHouseIdEx($queueInfo['broker_id'], $expiredHouseRelationIds, $queueInfo['city_id'], array('proId', 'expireWorker', 'isVisible')); if (empty($houseInfoList)) { return static::buildReturn(self::PROCESS_STATUS_SUCCESS, sprintf('%d [%s] 没有获取到房源(%s)信息。', $queueInfo['id'], date('Y-m-d H:i:s'), implode(',', $expiredHouseRelationIds))); } /** 过滤掉违规房源 */ $validateHouseIds = array(); foreach ($houseInfoList as $houseInfo) { if ($houseInfo['isVisible'] == 0 && $houseInfo['expireWorker'] != 'propertyReport') { $dealRemark[] = sprintf('房源(%d)违规,不做处理', $houseInfo['proId']); continue; } $validateHouseIds[] = $houseInfo['proId']; } /** 按照房源ID 排序 */ sort($validateHouseIds, SORT_NUMERIC); if (count($validateHouseIds) > $currentCombo['salePropNum']) { $onlineHouseIds = array_slice($validateHouseIds, count($validateHouseIds) - $currentCombo['salePropNum']); } else { $onlineHouseIds = $validateHouseIds; } $data = static::buildHouseLog($queueInfo, 20, '经纪人套餐生效,房源上架', 0); foreach ($onlineHouseIds as $onlineHouseId) { $data['houseId'] = $onlineHouseId; if (!Model_Log_HouseLogNew::create($data, date('Ymd'))->save()) { $dealRemark[] = sprintf('%d 套餐生效,上架房源(%d) 失败', $queueInfo['id'], $onlineHouseId); continue; } $dealRemark[] = sprintf('%d 套餐生效,上架房源(%d) 成功', $queueInfo['id'], $onlineHouseId); } $spreadHouseCount = Model_Combo_HouseRelation::updateHouseComboSpreadStateEx($queueInfo['broker_id'], $queueInfo['city_id'], $onlineHouseIds, Model_Combo_HouseRelation::ENUM_HOUSE_ONLINE, Bll_Combo_HouseRelation::SITE_TYPE_AJK); $dealRemark[] = sprintf('%d [%s] 经纪人套餐生效,上架%d套房源[%s]。', $queueInfo['id'], date('Y-m-d H:i:s'), $spreadHouseCount, implode(',', $onlineHouseIds)); return static::buildReturn(self::PROCESS_STATUS_SUCCESS, $dealRemark); }