/** * 获取房源 * @param $brokerId 二手房经纪人id * @param $dateIndex * @param $dataBase * @return array|int */ public function getBrokerHouses($brokerId, $dateIndex, $dataBase) { if ($dataBase == Const_ShowcaseOrders::SALE_DB) { return Model_House_PpcdsStatsBrokerDay::getInstance()->getFixedSalePpcByBrokerIDAndDayDate($brokerId, $dateIndex); } elseif ($dataBase == Const_ShowcaseOrders::RENT_DB) { // 二手房经纪人id 转化成 租房经纪人id $rentBrokerId = Bll_Broker_BrokerCheckInfo::getHzBrokerIdByAjkBrokerId($brokerId); return Model_House_PropPromotionData::getInstance()->getFixPropNumByBrokerIDAndReportDate($rentBrokerId, $dateIndex); } else { return 0; } }
/** *增值业务插入订单操作 * $brokerid 经纪人id * $count 订单天数 * $cityid 城市id * $type 好租是 rent 二手房sale */ public function insertBrokerOrders($brokerid, $count, $cityid, $price, $type = 'sale') { $days = intval($count); $ShowcaseOrders = APF::get_instance()->get_config('ShowcaseOrders'); if ($days < $ShowcaseOrders['min'] || $days > $ShowcaseOrders['max']) { $res = array('status' => false, 'msg' => Const_ShowcaseOrders::DAYS_ERROR); return $res; } if ($type == Const_ShowcaseOrders::SALE_DB) { $Data = array('brokerId' => $brokerid); $info = Model_Broker_AdSetSale::getInstance()->getBrokerInfo($Data); if ($info) { $res = array('status' => false, 'msg' => Const_ShowcaseOrders::BROKERID_EXIST); return $res; } } elseif ($type == Const_ShowcaseOrders::RENT_DB) { $Data = array('brokerId' => $brokerid); $info = Model_Broker_AdSetRent::getInstance()->getBrokerInfo($Data); if ($info) { $res = array('status' => false, 'msg' => Const_ShowcaseOrders::BROKERID_EXIST); return $res; } } else { return false; } $data = array(); $data['brokerId'] = $brokerid; if ($type == Const_ShowcaseOrders::RENT_DB) { //好租经纪人ID $data['hzUserId'] = intval(Bll_Broker_BrokerCheckInfo::getHzBrokerIdByAjkBrokerId($brokerid)); } $data['cityId'] = $cityid; $data['startDate'] = date('Ymd'); $ndays = $days - 1; $data['endDate'] = date('Ymd', strtotime('+' . $ndays . ' day')); $data['isStop'] = Const_ShowcaseOrders::OPEN_ORDER; $data['status'] = Const_ShowcaseOrders::STATUS_VALID; $data['createTime'] = time(); $ary = array(); $ary['brokerId'] = $brokerid; $ary['cityId'] = $cityid; $ary['startDate'] = date('Ymd'); $ary['endDate'] = date('Ymd', strtotime('+' . $ndays . ' day')); $ary['totalDays'] = $days; $ary['opType'] = Const_ShowcaseOrders::OPTYPE_1; $ary['createTime'] = time(); $order = $this->insertOrderInfo($data, $type); if ($order['status']) { $Column = Bll_Broker_ShowcaseConsumeQuery::getInstance()->addConsumeData($brokerid, $cityid, $price, 0, date('Ymd'), '新订单,插入队列', $type); if (!$Column['status']) { $res = array('status' => false, 'msg' => Const_ShowcaseOrders::COLUMN_ERROR); } $logId = $this->insertSetLog($ary, $type); if (!$logId['status']) { $res = array('status' => false, 'msg' => Const_ShowcaseOrders::LOG_ERROR); } } else { $res = array('status' => false, 'msg' => Const_ShowcaseOrders::ORDERS_ERROR); } if (!$res) { $res = array('status' => true, 'msg' => Const_ShowcaseOrders::ORDERS_OK, 'id' => $order['id']); } return $res; }
/** * 获取租房房源数据 * [getBrokerEsfPro description] */ private function getBrokerZfPro() { $data = $proClickInfo = array(); $isCombo = Bll_Combo_HouseRelation::isComboCity($this->cityId); if ($isCombo['data']) { $comboList = Bll_Combo_HouseRelation::getHouseRelations($this->brokerId, Bll_Combo_HouseRelation::SITE_TYPE_HZ, 1); $proIds = $this->getObjFieldInfo($comboList, 'houseId'); $clicksInfo = Bll_Ppc_NewPackageStatsBrokerDay::getHouseComboClickInfo($proIds, date('Ymd'), Model_Ppc_NewPackageStatsHouseDay::SITE_TYPE_HZ); if (!empty($clicksInfo)) { foreach ($clicksInfo as $val) { if (isset($proClickInfo[$val['propId']])) { $proClickInfo[$val['propId']] += intval($val['cnum']); } else { $proClickInfo[$val['propId']] = intval($val['cnum']); } } } } else { $hzBrokerId = Bll_Broker_BrokerCheckInfo::getHzBrokerIdByAjkBrokerId($this->brokerId); //定价房源信息 $fixedProInfos = Bll_House_FixedPro::getInstance()->getBrokerHzFiexdProInfo($hzBrokerId); if (empty($fixedProInfos)) { $this->outData($data, 1); } $proIds = $this->getObjFieldInfo($fixedProInfos, 'proid'); //房源点击量信息 $proClicks = Bll_House_HzPro::getInstance()->getProClicks($proIds, array(), date('Ymd')); if (!empty($proClicks)) { //将房源ID作为key拼接点击量信息 foreach ($proClicks as $proClickVal) { $proClickInfo[$proClickVal['proid']] = intval($proClickVal['cnt']); } } } $proInfos = Bll_House_HzPro::getInstance()->getBrokerHzProInfo($proIds, $this->cityId); if (empty($proInfos)) { $this->outData($data, 1); } //经纪人橱窗房源设置信息 $adProInfos = Bll_Broker_ShowcaseAdSetPro::getInstance()->getBrokerAdRentPropInfo($this->brokerId); $addPro = array(); if (!empty($adProInfos)) { foreach ($adProInfos as $adProVal) { $addPro[$adProVal->propId] = true; } } //房源主表信息 $propMianInfo = Bll_House_HzPro::getInstance()->getHzProInfoByIds($proIds); $propMianNew = array(); foreach ($propMianInfo as $propMianVal) { $propMianNew[$propMianVal->propId]['contentBasic'] = json_decode($propMianVal->contentBasic, true); $propMianNew[$propMianVal->propId]['contentOther'] = json_decode($propMianVal->contentOther, true); } $this->initZfProData($proInfos, $proClickInfo, $addPro, $propMianNew); }
/** * 开始处理数据 */ protected function proccessData() { if (empty($this->jobData)) { //没有数据 if ($this->jobYmd != $this->currentYmd) { //如果job年月不等于当前年月日,则将job年月初始化为当前年月日 $this->jobYmd = $this->currentYmd; $this->id = 0; } return false; } //将相同经纪人数据合并成一个大数组 $brokerMergeData = $this->mergeBrokerData(); foreach ($brokerMergeData as $brokerId => $brokerMergeVal) { //经纪人橱窗信息 $brokerAdInfo = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerOrders(array('brokerId' => $brokerId), $this->jobType); //经纪人橱窗没有开启,则跳过处理下一个人 if (empty($brokerAdInfo) || !($brokerAdInfo->isStop == Const_ShowcaseOrders::OPEN_ORDER && $brokerAdInfo->endDate >= $this->currentYmd)) { continue; } //将同一套房源的动作作合并处理 $mergeProData = $this->mergeProData($brokerMergeVal); if (empty($mergeProData)) { continue; } //经纪人选择主推房源信息 $brokerAdSetPros = $brokerAdSetProInfo = $brokerAdSetShowPros = $brokerAdSetShowProInfo = array(); $this->actionBrokerId = $brokerId; if ($this->jobType == Const_ShowcaseOrders::SALE_DB) { $proCountMax = Const_ShowcaseOrders::SALE_PRO_MAX_COUNT; $brokerAdSetPros = Bll_Broker_ShowcaseAdSetPro::getInstance()->getBrokerAdSalePropInfo($brokerId, true); } elseif ($this->jobType == Const_ShowcaseOrders::RENT_DB) { $this->actionBrokerId = intval(Bll_Broker_BrokerCheckInfo::getHzBrokerIdByAjkBrokerId($brokerId)); $proCountMax = Const_ShowcaseOrders::RENT_PRO_MAX_COUNT; $brokerAdSetPros = Bll_Broker_ShowcaseAdSetPro::getInstance()->getBrokerAdRentPropInfo($brokerId, true); } else { $proCountMax = 5; } //经纪人展示房源信息 $brokerAdSetShowPros = Bll_Broker_ShowcaseAdSetPro::getInstance()->getBrokerAdPropShowInfo($brokerId, $this->jobType); //提取选择房源ID组成的选择房源数组信息 if (!empty($brokerAdSetPros)) { foreach ($brokerAdSetPros as $brokerAdSetProsVal) { $brokerAdSetProInfo[$brokerAdSetProsVal->propId] = $brokerAdSetProsVal; } } //提取展示房源ID组成的展示房源数组信息 if (!empty($brokerAdSetShowPros)) { foreach ($brokerAdSetShowPros as $brokerAdSetShowProsVal) { $brokerAdSetShowProInfo[$brokerAdSetShowProsVal->propId] = $brokerAdSetShowProsVal; } } //将推广房源或者取消推广房源各自拼到一个大数组中 $spreadProsIds = $cancelProsIds = array(); foreach ($mergeProData as $mergeProVal) { if ($mergeProVal['actionType'] == 5) { //推广房源IDs $spreadProsIds[] = $mergeProVal['proId']; } else { //取消推广房源IDs $cancelProsIds[] = $mergeProVal['proId']; } } //必须展示的选择房源ID+插入系统房源ID $addChoiseProIds = $addSysProIds = $deleteProIds = array(); //编辑是否需要系统补足房源 $mustAddSysPro = false; //取消推广房源处理 if (!empty($cancelProsIds)) { foreach ($cancelProsIds as $cancelProId) { if (!empty($brokerAdSetShowProInfo[$cancelProId])) { $mustAddSysPro = true; //只有在存在房源被删除才存在系统补足操作 $brokerAdSetShowProInfo[$cancelProId]->delete(); $deleteProIds[] = $cancelProId; //插入日志表 $this->insertProLog($cancelProId, $brokerId, $brokerAdInfo->cityId, $brokerAdSetShowProInfo[$cancelProId]->type, Const_ShowcaseOrders::PRO_CHANGE_LOG_FLAG_OUT); unset($brokerAdSetShowProInfo[$cancelProId]); } } } //推广房源数据处理 if (!empty($spreadProsIds)) { foreach ($spreadProsIds as $spreadProId) { if (!empty($brokerAdSetProInfo[$spreadProId])) { //存在于选择房源中 if (empty($brokerAdSetShowProInfo[$spreadProId])) { //但是不存在于展示房源中 $addChoiseProIds[] = $spreadProId; } } else { //不存在于选择房源中 if (empty($brokerAdSetShowProInfo[$spreadProId])) { //也不存在于展示房源中 $addSysProIds[] = $spreadProId; //标记为可以以系统选择插入的房源ID } } } } //存在必须插入的选择的房源ID $addChoiseProIdsCount = count($addChoiseProIds); $currentShorProsCount = count($brokerAdSetShowProInfo); $totalCount = $addChoiseProIdsCount + $currentShorProsCount; if ($addChoiseProIdsCount > 0) { if ($totalCount > $proCountMax) { //必须插入的房源ID插入之后房源数大于限制最大房源数,则作删除系统选择房源操作 //按房源ID升序排序 ksort($brokerAdSetShowProInfo); $deleteCount = 0; foreach ($brokerAdSetShowProInfo as $brokerAdSetShowProKey => $brokerAdSetShowProVal) { if ($deleteCount >= $totalCount - $proCountMax) { break; } if ($brokerAdSetShowProVal->type == Const_ShowcaseOrders::PRO_CHANGE_LOG_TYPE_SYS) { $brokerAdSetShowProVal->delete(); $deleteProIds[] = $brokerAdSetShowProVal->propId; //插入日志表 $this->insertProLog($brokerAdSetShowProVal->propId, $brokerId, $brokerAdInfo->cityId, $brokerAdSetShowProVal->type, Const_ShowcaseOrders::PRO_CHANGE_LOG_FLAG_OUT); unset($brokerAdSetShowProInfo[$brokerAdSetShowProKey]); ++$deleteCount; } } } } //给中间件发送房源下架消息 if (!empty($deleteProIds)) { Bll_Broker_ShowcaseAdSetPro::getInstance()->sendAdProChangeMes($brokerId, $brokerAdInfo->cityId, array(Const_ShowcaseOrders::SHOWCASE_CANCEL_SET), $deleteProIds, $this->jobType); } //插入选择的房源信息,为什么不和上面合并,是因为先发送删除消息,再插入,防止用户端显示会超过5套 if ($addChoiseProIdsCount > 0) { $this->insertBrokerShowPros($addChoiseProIds, $brokerId, $brokerAdInfo->cityId, Const_ShowcaseOrders::PRO_CHANGE_LOG_TYPE_SELF); } //存在可以标记为系统插入的房源,而且当前房源数还不够,则插入 if (!empty($addSysProIds) && $totalCount < $proCountMax) { $addSysProIds = array_slice($addSysProIds, 0, $proCountMax - $totalCount); $totalCount += count($addSysProIds); $this->insertBrokerShowPros($addSysProIds, $brokerId, $brokerAdInfo->cityId, Const_ShowcaseOrders::PRO_CHANGE_LOG_TYPE_SYS); } //需要系统补足,而且当前房源不够,则操作系统补足 if ($mustAddSysPro && $totalCount < $proCountMax) { //当前插入数据库中的展示房源Id $currentShowProIds = array(); foreach ($brokerAdSetShowProInfo as $brokerAdSetShowProVal) { $currentShowProIds[] = $brokerAdSetShowProVal->propId; } $currentShowProIds = array_merge($currentShowProIds, $addChoiseProIds, $addSysProIds); //获取系统补足房源ID $addProIds = Bll_Broker_ShowcaseAdSetPro::getInstance()->getBrokerAddProIds($brokerId, $brokerAdInfo->cityId, $proCountMax - $totalCount, $this->jobType, $currentShowProIds); if (!empty($addProIds)) { $this->insertBrokerShowPros($addProIds, $brokerId, $brokerAdInfo->cityId, Const_ShowcaseOrders::PRO_CHANGE_LOG_TYPE_SYS); } } } return true; }
public function handle_request_internal() { if (!Bll_City::isShowCaseCity(static::$intBrokerCityID)) { $this->redirect('/user/combo/brokerhome'); exit; } //获取经纪人id $objRequest = APF::get_instance()->get_request(); $cityid = self::$BrokerInfo['BaseInfo']['CITYID']; $objRequest->set_attribute('PayType', self::$BrokerInfo['BaseInfo']['PAYTYPE']); $isCombo = Bll_Combo_HouseRelation::isComboCity($cityid); $tmp = array('cityId' => $cityid, 'status' => 1, 'startDate' => date('Ymd')); $cityPrice = Bll_Broker_ConfigCityPrice::getInstance()->getCityPrice($tmp, Const_ShowcaseOrders::RENT_DB); $todayPrice = round($cityPrice->discountPrice / 100, 2); $intBrokerID = $objRequest->getBrokerId(); //好租经纪人ID $hzBrokerId = Bll_Broker_BrokerCheckInfo::getHzBrokerIdByAjkBrokerId($intBrokerID); $userId = $objRequest->getUserId(); $data = array('brokerId' => $intBrokerID); $orderinfo = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerOrders($data, $this->db); //判断经纪人是否有订单 if (!$orderinfo) { $this->toManage('/ajkbroker/showcase/zf/'); } $lavedays = ceil((strtotime($orderinfo->endDate) - strtotime(date('Ymd'))) / 3600 / 24); if ($orderinfo->isStop == 1 || $lavedays < 0) { $order_status = 'stop'; } else { $objRequest->set_attribute('lavedays', $lavedays); $objRequest->set_attribute('lastday', date('Y-m-d', strtotime($orderinfo->endDate))); $order_status = 'open'; } //获取参数值 $params = APF::get_instance()->get_request()->get_parameters(); $days = intval($params['days']); //status=2是停止,status=1是续费 if ($params['status'] == 2) { if ($orderinfo->isStop == 0) { $stopstatus = Bll_Broker_ShowcaseOrders::getInstance()->stopBrokerOthers($orderinfo, $cityPrice->discountPrice, $this->db); if ($stopstatus['status']) { $this->toManage(); } else { $this->toError($stopstatus['msg']); } } else { $msg = '订单类型不能操作'; $this->toError($msg); } } elseif ($params['status'] == 1 && $days >= 1) { $BrokerMoney = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerMoney($userId); if ($BrokerMoney < $todayPrice) { $this->toError(Const_ShowcaseOrders::MONEY_NOT_ENOUGH); } $Continueorder = Bll_Broker_ShowcaseOrders::getInstance()->continueBrokerOthers($orderinfo, $days, $cityPrice->discountPrice, $this->db); if ($Continueorder['status']) { $this->toManage(); } else { $this->toError($Continueorder['msg']); } } elseif ($params['status'] == 3) { if (!empty($params['rooms'])) { $proIds = explode(';', $params['rooms']); $filterProIds = Bll_Broker_ShowcaseAdSetPro::getInstance()->filterProIds($intBrokerID, $cityid, $this->db, $proIds); //有些房源不在线上展示 if (count($filterProIds) != count($proIds)) { $this->toError('有些房源没在线上推广,操作失败!'); } $res = Bll_Broker_ShowcaseAdSetPro::getInstance()->insertAdProsInfo($intBrokerID, $cityid, $proIds, $this->db); if (!$res['status']) { $this->toError($res['msg']); } else { //插入成功,跳转至管理页面 if ($orderinfo->isStop == 0) { $log = array(); $log['brokerId'] = $orderinfo->brokerId; $log['cityId'] = $orderinfo->cityId; $log['endDate'] = $orderinfo->endDate; $log['startDate'] = $orderinfo->startDate; $log['opType'] = Const_ShowcaseOrders::OPTYPE_6; $log['totalDays'] = ceil((strtotime($orderinfo->endDate) - strtotime($orderinfo->startDate)) / 3600 / 24) + 1; $log['createTime'] = time(); Bll_Broker_ShowcaseOrders::getInstance()->insertSetLog($log, $this->db); } $this->toManage(); } } } $orderCreated = date('Ymd', $orderinfo->createTime); if ($orderCreated < date('Ymd')) { $click = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerClick($intBrokerID, date('Ymd', strtotime('-1 days')), $this->db); if (!$click->quantityCount) { $objRequest->set_attribute('YClick', 0); } else { $objRequest->set_attribute('YClick', $click->quantityCount); } $objRequest->set_attribute('IS_YClick', true); } if ($isCombo['data']) { $comboList = Bll_Combo_HouseRelation::getHouseRelations($intBrokerID, Bll_Combo_HouseRelation::SITE_TYPE_HZ, 1); if (!empty($comboList)) { if (count($comboList) >= Const_ShowcaseOrders::SALE_PRO_MAX_COUNT) { $fixedProInfosCnt = Const_ShowcaseOrders::SALE_PRO_MAX_COUNT; } else { $fixedProInfosCnt = count($comboList); } } else { $fixedProInfosCnt = 0; } $proInfo = Bll_Broker_ShowcaseAdSetPro::getInstance()->getBrokerAdRentPropInfo($intBrokerID); $proIds = Bll_Broker_ShowcaseOrders::getInstance()->getObjFieldInfo($proInfo, 'propId'); $proInfos = Bll_House_HzPro::getInstance()->getBrokerHzProInfo($proIds, $cityid); $propMianInfo = Bll_House_HzPro::getInstance()->getHzProInfoByIds($proIds); $propMianNew = array(); foreach ($propMianInfo as $propMianVal) { $propMianNew[$propMianVal->propId]['contentBasic'] = json_decode($propMianVal->contentBasic, true); $propMianNew[$propMianVal->propId]['contentOther'] = json_decode($propMianVal->contentOther, true); } $proList = Bll_Broker_ShowcaseAdSetPro::getInstance()->initComboZfProData($proInfos, $propMianNew, $comboList); } else { $fixedProInfos = Bll_House_FixedPro::getInstance()->getBrokerHzFiexdProInfo($hzBrokerId); if (!empty($fixedProInfos)) { $proIds = Bll_Broker_ShowcaseOrders::getInstance()->getObjFieldInfo($fixedProInfos, 'proid'); $proInfos_tmp = Bll_House_HzPro::getInstance()->getBrokerHzProInfo($proIds, $cityid); $proIdsc = Bll_Broker_ShowcaseOrders::getInstance()->getObjFieldInfo($proInfos_tmp, 'proid'); $proInfosc = Bll_House_HzPro::getInstance()->getBrokerHzProInfo($proIdsc, $cityid); if (!empty($proInfosc)) { if (count($proInfosc) >= Const_ShowcaseOrders::RENT_PRO_MAX_COUNT) { $fixedProInfosCnt = Const_ShowcaseOrders::RENT_PRO_MAX_COUNT; } else { $fixedProInfosCnt = count($proInfosc); } } else { $fixedProInfosCnt = 0; } } else { $fixedProInfosCnt = 0; } $proInfo = Bll_Broker_ShowcaseAdSetPro::getInstance()->getBrokerAdRentPropInfo($intBrokerID); $proIds = Bll_Broker_ShowcaseOrders::getInstance()->getObjFieldInfo($proInfo, 'propId'); $proStatus = Bll_House_FixedPro::getInstance()->getBrokerHzFiexdProStatus($proIds); $proInfos = Bll_House_HzPro::getInstance()->getBrokerHzProInfo($proIds, $cityid); $propMianInfo = Bll_House_HzPro::getInstance()->getHzProInfoByIds($proIds); $propMianNew = array(); foreach ($propMianInfo as $propMianVal) { $propMianNew[$propMianVal->propId]['contentBasic'] = json_decode($propMianVal->contentBasic, true); $propMianNew[$propMianVal->propId]['contentOther'] = json_decode($propMianVal->contentOther, true); } $proList = Bll_Broker_ShowcaseAdSetPro::getInstance()->initZfProData($proInfos, $propMianNew, $proStatus); } if (count($proList) > $fixedProInfosCnt) { $fixedProInfosCnt = count($proList); } $objRequest->set_attribute('type', 'hz'); $objRequest->set_attribute('index', 2); //精选推广开关 $isChoice = Bll_City::isChoiceCity($cityid, Const_Site::HAOZU); $objRequest->set_attribute('isChoice', $isChoice); $objRequest->set_attribute('proList', $proList); $objRequest->set_attribute('fixedProInfosCnt', $fixedProInfosCnt); $objRequest->set_attribute('order_status', $order_status); $objRequest->set_attribute('todayPrice', $todayPrice); return 'Showcase_ZfManage'; }
/** * 开始处理数据 */ protected function proccessData() { if (empty($this->jobData)) { //没有数据 if ($this->jobYm != $this->currentYm) { //如果job年月不等于当前年月,则将job年月初始化为当前年月 $this->jobYm = $this->currentYm; $this->id = 0; } return false; } //合并数据 $data = $this->initData(); if (!empty($data)) { foreach ($data as $dataKey => $dataVal) { if ($this->jobType == Const_ShowcaseOrders::SALE_DB) { $this->actionBrokerId = $dataKey; } else { $this->actionBrokerId = intval(Bll_Broker_BrokerCheckInfo::getHzBrokerIdByAjkBrokerId($dataKey)); } if ($dataVal['actionType'] == Const_ShowcaseOrders::OPTYPE_1 || $dataVal['actionType'] == Const_ShowcaseOrders::OPTYPE_6) { //购买动作或者开启换一套,作添加房源动作 $this->addBrokerShowPro($dataKey, $dataVal['cityId'], $dataVal['actionType']); } else { //其他动作(停止、自动到期)都做删除动作 $this->deleteBrokerShowPro($dataKey, $dataVal['cityId'], true, true); } } } return true; }