private function checkConsume($brokerId, $cityId) { $result = array('isFree' => 0, 'isPlan' => 0, 'data' => ''); $isComboCity = Bll_Combo_HouseRelation::ifComboCity($cityId); if ($isComboCity) { $conbosProNum = Bll_Combo_Broker_BrokerComboInfo::getTotalCombosProNum($brokerId); // 检查是否购买套餐 if ($conbosProNum['totalSalePropNum'] <= 0) { $result['isPlan'] = 0; echo json_encode($result); exit; } else { $result['isPlan'] = 1; } } else { $result['isPlan'] = 1; } // 检查城市是否收费 $checkFree = Bll_Broker_EntrustPrice::getInstance()->checkCityConsumeStatus($cityId); if ($checkFree == true) { // 收费 // 获取余额 $userId = Bll_Broker_BrokerCheckInfo::getUserIdByBrokerId($brokerId, 'sale'); $balance = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerMoney($userId); // 获取委托价格 $startDate = date("Ymd"); $price = Bll_Broker_EntrustPrice::getInstance()->getSalePrice(self::$BrokerInfo['BaseInfo']['CITYID'], $startDate); $price = $price / 100; if ($balance >= $price) { $isEnough = 1; } else { $isEnough = 0; } $result['isFree'] = 0; $result['data'] = array('isEnough' => $isEnough, 'balance' => $balance . "元", 'price' => $price . "元"); } else { // 不收费 $houseId = intval($this->params['houseId']); $brokerName = self::$BrokerInfo['BaseInfo']['TRUENAME']; $brokerPhone = self::$BrokerInfo['BaseInfo']['USERMOBILE']; $consume = Bll_Broker_EntrustQuery::getInstance()->saleRush($houseId, $brokerId, $brokerName, $brokerPhone, $cityId, Const_Entrust::RUSH_FROM_PC, false, $isComboCity); $result['isFree'] = 1; $result['data'] = $consume; } echo json_encode($result); exit; }
/** * 把经纪人因为套餐到期停止推广的房源(套餐规定的可推广房源数)重新上线,(按房源发布时间 倒序排列) * @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, '开始套餐推广'); } }
public function handle_request_internal() { $this->apf = APF::get_instance(); $this->request = $this->apf->get_request(); $this->response = $this->apf->get_response(); $params = $this->request->get_parameters(); $brokerId = self::$BrokerInfo['BaseInfo']['BROKERID']; // TODO 替换为其他的方式 $cityId = self::$BrokerInfo['BaseInfo']['CITYID']; try { // 必须使用POST请求 if (!$this->request->is_post_method()) { throw new Exception('请使用POST请求。'); } /* if($cityId == 11){ APF::get_instance()->get_response()->redirect('/ajkbroker/commissions/my'); return false; } */ // 判断是否套餐城市 $isComboCity = Bll_Combo_HouseRelation::ifComboCity($cityId); if ($isComboCity == true) { // 判断经纪人是否购买了租房套餐 $conbosProNum = Bll_Combo_Broker_BrokerComboInfo::getTotalCombosProNum($brokerId); if ($conbosProNum['totalRentPropNum'] <= 0) { $isPlan = 0; throw new Exception('经纪人无租房套餐。'); } else { $isPlan = 1; } } else { $isPlan = 1; } // 判断房源ID $id = isset($params['id']) & intval($params['id']) > 0 ? intval($params['id']) : 0; if ($id <= 0) { throw new Exception('无效的房源编号。'); } // 判断委托房源是否存在 $house = Model_House_CommissionHouse::data_access()->filter('id', $id)->find_only(); if (!$house) { throw new Exception('房源不可委托:房源不存在或已被业主删除。'); } // 判断类型是否是出租 if ($house->commissionType != Model_House_CommissionHouse::COMMISSION_TYPE_RENT) { throw new Exception('房源类型不是出租'); } // 判断委托房源状态 if ($house->proStatus != Model_House_CommissionHouse::STATUS_ONGOING) { throw new Exception('房源不可委托:已过期或已被删除。'); } // 判断委托房源已委托数量 if ($house->openBrokerCnt >= Model_House_CommissionHouse::allowedMaxCommissionCount()) { throw new Exception('委托已满。', 37); } // 判断是否已抢过委托 $commission = Model_House_Commission::data_access()->filter('brokerId', $brokerId)->filter('houseId', $house->id)->find_only(); if ($commission) { throw new Exception('你已经委托了该房源。', 77); } // 防并发(先插入,再检测(超出,删除),最后更新) // TODO 该方案层使用在2013圣诞活动“找锤子,砸金蛋”,并导致数据库多次TMC,但是在该业务场景中瞬时并发并没有那么多,暂定使用 by 胡言言 2014.02.28 $commission = Model_House_Commission::create(array('type' => $house->commissionType, 'ownerId' => $house->userId, 'houseId' => $house->id, 'brokerId' => $brokerId, 'createTime' => date('Y-m-d H:i:s'), 'updateTime' => date('Y-m-d H:i:s'))); $commission->save(); $rank = Model_House_Commission::data_access()->filter_by_op('houseId', '=', $house->id)->filter_by_op('id', '<=', $commission->id)->sort('id', 'asc')->count(); if ($rank > Model_House_CommissionHouse::allowedMaxCommissionCount()) { $commission->delete(); throw new Exception('委托已满。', 37); } // 更新房源的委托数量 $house->incrCommissionCount(); // 更新推送房源状态 $pushedHouse = Model_House_CommissionHousePushed::data_access()->filter('brokerId', $brokerId)->filter('propertyId', $house->id)->find_only(); if ($pushedHouse) { $pushedHouse->propertyStatus = Model_House_CommissionHousePushed::STATUS_RUSHED; $pushedHouse->save(); } // 拼装返回数据 $result = array('isPlan' => $isPlan, 'code' => 0, 'data' => array('owner' => $house->userName, 'phone' => $house->getPhone(), 'title' => '', 'summary' => '')); $area = '[' . implode('-', $house->getAreaCodeNames()) . '] '; $houseModel = "{$house->roomNum}室{$house->hallNum}厅{$house->toiletNum}卫,{$house->areaNum}平方米,"; switch ($house->commissionType) { case Model_House_CommissionHouse::COMMISSION_TYPE_SALE: // 记录到commission_sale_log日志表 $this->insertCommissionSaleLog($house, $brokerId); $result['data']['title'] = '[出售] ' . $house->commName; $result['data']['summary'] = $area . $houseModel . $house->proPrice . '万元'; break; case Model_House_CommissionHouse::COMMISSION_TYPE_RENT: $result['data']['title'] = '[出租] ' . $house->commName; $result['data']['summary'] = $area . $houseModel . $house->proPrice . '元/月'; break; } } catch (Exception $e) { $result = array('code' => $e->getCode() ? $e->getCode() : 1, 'message' => $e->getMessage(), 'isPlan' => $isPlan); } $baseDomain = APF::get_instance()->get_config('base_domain', 'common'); $baseUri = defined('BASE_URI') ? BASE_URI : ''; $result['data']['manageUrl'] = "http://my.{$baseDomain}{$baseUri}/commissions/my"; $this->response->add_header('Content-type', 'application/json'); echo json_encode($result); die; }
public function handle_request_internal() { $this->apf = APF::get_instance(); $this->request = $this->apf->get_request(); $this->response = $this->apf->get_response(); $baseDomain = APF::get_instance()->get_config('base_domain', 'common'); $baseUri = defined('BASE_URI') ? BASE_URI : ''; $pageUrl = "http://my.{$baseDomain}{$baseUri}/commissions"; /* * 1.参数获取 */ $params = $this->request->get_parameters(); $type = isset($params['type']) && in_array($params['type'], array('rent', 'sale')) ? $params['type'] : ''; // 房源类型:不限、出粗、出售 // $room = (isset($params['room']) && in_array($params['room'], array('1', '2', '3', '4'))) ? $params['room'] : ''; // 房源房型:不限、一室、二室、三室、三室以上 //$areaId = (isset($params['area']) && is_numeric($params['area'])) ? intval($params['area']) : 0; // 房源区域:主版块 //$subAreaId = ($areaId && isset($params['subArea']) && is_numeric($params['subArea'])) ? intval($params['subArea']) : 0; // 房源区域:子版块 $cityId = $this->request->getBrokerCityId(); //如果是审核直接跳到我得房源库 /* if($cityId == 11){ APF::get_instance()->get_response()->redirect($pageUrl.'/mysale'); return false; } */ $brokerId = self::$BrokerInfo['BaseInfo']['BROKERID']; // TODO 替换为其他的方式 $per = 10; $page = isset($params[Const_Listing::PARAM_N_PAGE]) && intval($params[Const_Listing::PARAM_N_PAGE]) > 0 ? intval($params[Const_Listing::PARAM_N_PAGE]) : 1; /* * 2.获取经纪人主营板块下的所有委托房源(按照创建时间排序) */ $rushedHouses = array(); $daHouse = Model_House_CommissionHouse::data_access()->filter('cityId', $cityId)->filter('proStatus', Model_House_CommissionHouse::STATUS_ONGOING)->filter_by_op('openBrokerCnt', '<', Model_House_CommissionHouse::allowedMaxCommissionCount()); // 房源区域 /*$areas = $this->getCityAreas($cityId); $subAreas = array(); if ($areaId) { $subAreas = $this->getSubAreas($areaId); if ($subAreas) { $subAreaIds = array(); $subAreaCodes = array(); foreach ($subAreas as $subArea) { $subAreaIds[$subArea->typeId] = $subArea->typeId; $subAreaCodes[$subArea->typeId] = $subArea->typeCode; } if ($subAreaId && isset($subAreaCodes[$subAreaId])) { $daHouse->filter('areaCode', $subAreaCodes[$subAreaId]); } else { $daHouse->filter('areaCode', $subAreaCodes); } } else { $daHouse->filter('areaCode', 0); } } */ // 房源类型 if ($type) { switch ($type) { case 'rent': $daHouse->filter('commissionType', Model_House_CommissionHouse::COMMISSION_TYPE_RENT); break; case 'sale': $daHouse->filter('commissionType', Model_House_CommissionHouse::COMMISSION_TYPE_SALE); break; } } /* // 房源房型 if ($room) { switch ($room) { case '1': case '2': case '3': $daHouse->filter('roomNum', $room); break; case '4': $daHouse->filter_by_op('roomNum', '>=', $room); break; } } */ // 获取经纪人的区域id $brokerAreaCode = $this->getBrokerAreaCode(self::$BrokerInfo['BaseInfo']); if (!empty($brokerAreaCode)) { $daHouse->filter_by_op('areaCode', 'like', "{$brokerAreaCode}%"); } else { $daHouse->filter('id', 0); // 没有区域id,则不显示数据 } // 获取满足条件的总量 $daTotal = clone $daHouse; $total = $daTotal->count(); // 分页 $pager = Util_MultiPage::multiPage($params, '', $total, $per, 10, $pageUrl); $this->request->set_attribute('page', $page); $this->request->set_attribute('pager', $pager); $this->request->set_attribute('showPager', $total > $per); // 当前页面的个人房源 $houses = $daHouse->limit($per)->offset(($page - 1) * $per)->sort('created', 'desc')->find_all(); //print_r($daHouse->get_last_sql()); $overHouses = $this->getHasOverHouses($cityId); // 获取小区默认图片 和 区域板块名称 $houseIds = array(); $communityIds = array(); $areaCodes = array(); foreach ($houses as $house) { $houseIds[] = $house->id; $communityIds[] = $house->commId; $areaCodes[] = $house->areaCode; } // 判断已经抢完的数据是否存在 if (!empty($overHouses)) { foreach ($overHouses as $house) { $houseIds[] = $house->id; $communityIds[] = $house->commId; $areaCodes[] = $house->areaCode; } } // 房东房源图片 $propImageUrls = Bll_Image_UtilsImage::getCommissionProImage($houseIds); $this->request->set_attribute('propImageUrls', $propImageUrls); // 小区默认图片 $communityImageUrls = $this->getCommunityImageUrls($communityIds); $this->request->set_attribute('communityImageUrls', $communityImageUrls); // 区域板块 $areaCodesNames = $this->getAreaCodeNames($areaCodes); $this->request->set_attribute('areaCodeNames', $areaCodesNames); // 获取当前经纪人房源委托情况,如果已经委托,提示已委托 if ($houseIds) { $rushedCommissions = Model_House_Commission::data_access()->filter('houseId', $houseIds)->filter('brokerId', $brokerId)->find_all(); $rushedHouses = array(); foreach ($rushedCommissions as $rushedCommission) { $rushedHouses[$rushedCommission->houseId] = $rushedCommission->id; } } $rechargeUrl = "http://my.{$baseDomain}/user/broker/hpsupplement"; $isCombo = Bll_Combo_HouseRelation::ifComboCity(self::$BrokerInfo['BaseInfo']['CITYID']); if ($isCombo == ture) { // 获取经纪人套餐房源数 $conbosProNum = Bll_Combo_Broker_BrokerComboInfo::getTotalCombosProNum($brokerId); $this->request->set_attribute('conbosProNum', $conbosProNum); } $this->request->set_attribute('isCombo', $isCombo); $this->request->set_attribute('type', $type); //$this->request->set_attribute('room', $room); //$this->request->set_attribute('area', $areaId); //$this->request->set_attribute('subArea', $subAreaId); //$this->request->set_attribute('areas', $areas); //$this->request->set_attribute('subAreas', $subAreas); $this->request->set_attribute('pageUrl', $pageUrl); $this->request->set_attribute('houses', $houses); $this->request->set_attribute('rushedHouses', $rushedHouses); $this->request->set_attribute('overHouses', $overHouses); $this->request->set_attribute('rechargeUrl', $rechargeUrl); return 'House_Commission_All'; }
/** * 抢委托操作流程 * @param $houseId 房源id * @param $brokerId 二手房经纪人Id * @param $brokerName 二手房经纪人真实姓名 * @param $brokerPhone 经纪人手机电话 * @param $cityId 经纪人城市id * @param $comeFrom 来源 * @param $isConsume 是否扣费 * @param $conboOn 套餐是否开启 * @return array */ public function saleRush($houseId, $brokerId, $brokerName, $brokerPhone, $cityId, $comeFrom = Const_Entrust::RUSH_FROM_PC, $isConsume = true, $conboOn = false) { $result = array('status' => 0, 'data' => array(), 'errorMsg' => ""); if (empty($houseId) || empty($brokerId) || empty($cityId) || empty($brokerName) || empty($brokerPhone)) { $result['status'] = 99; $result['errorMsg'] = "输入的参数不正确"; return $result; } // 验证套餐开关是否开启 if ($conboOn == true) { $conbosProNum = Bll_Combo_Broker_BrokerComboInfo::getTotalCombosProNum($brokerId); if ($conbosProNum['totalSalePropNum'] <= 0) { $result['status'] = 20; $result['errorMsg'] = "没有购买出售套餐。"; return $result; } } // 判断房源ID $id = isset($houseId) & intval($houseId) > 0 ? intval($houseId) : 0; if ($houseId <= 0) { $result['status'] = 2; $result['errorMsg'] = "无效的房源编号。"; return $result; } // 判断委托房源是否存在 $house = Model_House_CommissionHouse::data_access()->filter('id', $id)->find_only(); if (!$house) { $result['status'] = 3; $result['errorMsg'] = "房源不可委托:房源不存在。"; return $result; } if ($house->commissionType != Model_House_CommissionHouse::COMMISSION_TYPE_SALE) { $result['status'] = 4; $result['errorMsg'] = "房源类型不是二手房"; return $result; } // 判断委托房源状态 if ($house->proStatus != Model_House_CommissionHouse::STATUS_ONGOING) { if ($house->proStatus == Model_House_CommissionHouse::STATUS_DELETED) { $result['status'] = 9; $result['errorMsg'] = "房源不可委托:已被房东删除。"; } elseif ($house->proStatus == Model_House_CommissionHouse::STATUS_ILLEGAL) { $result['status'] = 10; $result['errorMsg'] = "房源不可委托:已被违规删除。"; } elseif ($house->proStatus == Model_House_CommissionHouse::STATUS_STOP) { $result['status'] = 11; $result['errorMsg'] = "房源不可委托:已被停止委托。"; } elseif ($house->proStatus == Model_House_CommissionHouse::STATUS_SAVE) { $result['status'] = 12; $result['errorMsg'] = "房源不可委托:已被估价保存。"; } else { $result['status'] = 5; $result['errorMsg'] = "房源不可委托:已过期。"; } return $result; } // 判断委托房源已委托数量 if ($house->openBrokerCnt >= Model_House_CommissionHouse::allowedMaxCommissionCount()) { $result['status'] = 6; $result['errorMsg'] = '委托已满。'; return $result; } // 判断是否已抢过委托 $commission = Model_House_Commission::data_access()->filter('brokerId', $brokerId)->filter('houseId', $house->id)->find_only(); if ($commission) { $result['status'] = 7; $result['errorMsg'] = '你已经委托了该房源。'; return $result; } if ($isConsume === true) { // 获取余额 $userId = Bll_Broker_BrokerCheckInfo::getUserIdByBrokerId($brokerId, 'sale'); $balance = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerMoney($userId); $balance = $balance * 100; // 获取委托价格 $startDate = date("Ymd"); $price = Bll_Broker_EntrustPrice::getInstance()->getSalePrice($cityId, $startDate); // 判断余额是否足够 if ($balance < $price) { $result['status'] = 8; $result['errorMsg'] = '对不起,您的账户余额不足,请充值。'; return $result; } } // 判断15天内未发布的房源的数量是否最多3套 $tmpTime = time() - 15 * 24 * 3600; $startTime = date("Y-m-d H:i:s", $tmpTime > strtotime(Const_Entrust::EUSH_3HOUSE_RULE_STARTTIME) ? $tmpTime : strtotime(Const_Entrust::EUSH_3HOUSE_RULE_STARTTIME)); $tmpCommission = Model_House_Commission::data_access()->load_field('id')->load_field('type')->load_field('brokerHouseId')->load_field('publishTime')->load_field('isDelete')->filter('brokerId', $brokerId)->filter_by_op('createTime', '>', $startTime)->find(); // bug46464 慢查询,故把数据获取后来处理 $tmpCount = 0; if (!empty($tmpCommission)) { foreach ($tmpCommission as $val) { if ($tmpCount == 5000) { break; } if ($val['publishTime'] == '0000-00-00 00:00:00' && $val['isDelete'] == Model_House_Commission::DELETE_NO && $val['type'] == Model_House_Commission::TYPE_SALE && $val['brokerHouseId'] == 0) { $tmpCount++; } } } if ($tmpCount == 5000) { $result['status'] = 15; $result['errorMsg'] = '15天之内已抢房源中有5000套未发,禁止经纪人继续抢房'; return $result; } // 更新commission_prop表的openBrokerCnt+1 if (!$house->updateCommissionCount()) { $result['status'] = 6; $result['errorMsg'] = '委托已满。'; return $result; } // 更新成功 插入e_commission表 $commission = Model_House_Commission::create(array('type' => $house->commissionType, 'ownerId' => $house->userId, 'houseId' => $house->id, 'brokerId' => $brokerId, 'origin' => $comeFrom, 'createTime' => date('Y-m-d H:i:s'), 'updateTime' => date('Y-m-d H:i:s'))); $commission->save(); if ($isConsume === true) { // 插入扣费队列 $insertQueryArr = array('cityId' => $cityId, 'commissionId' => $commission->id, 'status' => 0, 'dateIndex' => date("Ymd"), 'createTime' => time(), 'updateTime' => date("Y-m-d H:i:s")); Bll_Broker_EntrustQuery::getInstance()->insertOneData($insertQueryArr); } // 更新推送房源状态 $pushedHouse = Model_House_CommissionHousePushed::data_access()->filter('brokerId', $brokerId)->filter('propertyId', $house->id)->find_only(); if ($pushedHouse) { $pushedHouse->propertyStatus = Model_House_CommissionHousePushed::STATUS_RUSHED; $pushedHouse->save(); } // 记录到commission_sale_log日志表 Bll_Broker_EntrustConsumeLog::getInstance()->insertCommissionSaleLog($house, $brokerId); // 给房东发送短信 if ($house->ownerMobile) { // 小区名称 $commName = mb_strlen($house->commName, "utf-8") <= 12 ? $house->commName : mb_substr($house->commName, 0, 12, "utf-8") . "..."; // 经纪人信息 $content = $house->userName . "您好,您在安居客发布的" . $commName . "的委托已被经纪人" . $brokerName . "接受,联系方式" . $brokerPhone; Bll_Broker_ShowcaseCommon::getInstance()->sendAlertMsg(array($house->ownerMobile), $content, 1010); } //给app房东推送消息,added by xiongjiewu at 2014-08-07 $this->pushEntrustMsg($brokerId, $id); // 拼装返回数据 $result['status'] = 1; // 抢委托成功 $result['data'] = array('owner' => $house->userName, 'phone' => $house->getPhone(), 'title' => '', 'summary' => '', 'manageUrl' => ''); $area = '[' . implode('-', $house->getAreaCodeNames()) . '] '; $houseModel = "{$house->roomNum}室{$house->hallNum}厅{$house->toiletNum}卫,{$house->areaNum}平方米,"; $baseDomain = APF::get_instance()->get_config('base_domain', 'common'); $baseUri = defined('BASE_URI') ? BASE_URI : ''; $result['data']['title'] = '[出售] ' . $house->commName; $result['data']['summary'] = $area . $houseModel . $house->proPrice . '万元'; $result['data']['manageUrl'] = "http://my.{$baseDomain}{$baseUri}/commissions/mysale"; return $result; }