/** * @param $brokerId * @param $planId * @param $actionId * @param $month * @param int $operationId * @param string $createRemark * @param string $ip * @param int $houseId */ public static function insert($brokerId, $planId, $actionId, $month, $operationId = 0, $createRemark = '', $ip = '', $houseId = 0) { $mysqlAccessor = new Model_Choice_ActionQueue($month); $mysqlAccessor->siteType = Model_Choice_ActionQueue::ENUM_SITE_ANJUKE; $mysqlAccessor->brokerId = $brokerId; $mysqlAccessor->planId = $planId; $mysqlAccessor->actionId = $actionId; $mysqlAccessor->operationId = $operationId; $mysqlAccessor->createRemark = $createRemark; $mysqlAccessor->ip = $ip; $mysqlAccessor->proId = $houseId; $mysqlAccessor->createTime = time(); return $mysqlAccessor->save(); }
public function dealTask($task) { $planId = $task['id']; // 查询对应关系 $planning = Model_Plan_HzPlanning::getPlanByPlanId($planId); if (count($planning) > 0) { return true; } // 不需要处理 // 获取当时的房子 Model_Choice_ActionQueue::data_access(date('m', $task['created']))->filter('siteType', 2)->filter('status', self::ENUM_FAIL)->get_row(); // 解冻 // 更新计划删除 // 记录有问题精选计划id file_put_contents('/data1/logs/Zufang_FixExistOnLineChoicePlanNoPlanning_ErrorPlanIds', $planId . PHP_EOL, FILE_APPEND); return true; }
public function handle_request() { $sqlSelectErrorQueue = 'SELECT * from q_new_bid_deal_06 WHERE `actionId`=2 AND `siteType`=2 AND `status`=2 AND `id` >7330;'; $errorQueueList = Model_Choice_ActionQueue::data_access(date('m'))->native_sql($sqlSelectErrorQueue, array()); foreach ($errorQueueList as $errorQueue) { $this->log("开始修复: ID={$errorQueue['id']}\tBrokerId={$errorQueue['brokerId']}\tPlanId={$errorQueue['planId']}"); $ajkBrokerExtend = Model_Broker_AjkBrokerExtend::getDataByBrokerId($errorQueue['brokerId']); /** TODO 添加获取二手房经纪人信息为空日志 */ if (empty($ajkBrokerExtend)) { $this->log(sprintf('获取经纪人(%d)的UserId失败(%d)。', $errorQueue['brokerId'], $errorQueue['id'])); continue; } $planExtend = Dao_Broker_HzPlan::get_bid_sn($errorQueue['planId']); /** TODO 添加获取SN 失败日志 */ if (empty($planExtend)) { $this->log(sprintf('获取计划(%d)的SN失败(%d)。', $errorQueue['planId'], $errorQueue['id'])); continue; } $planInfo = Dao_Broker_HzPlan::get_plan($errorQueue['planId']); /** TODO 添加获取计划信息失败日志*/ if (empty($planInfo)) { $this->log(sprintf('获取计划(%d)的信息失败(%d)。', $errorQueue['planId'], $errorQueue['id'])); continue; } //精选结算 $amount = $planInfo['total_consume']; $note = urlencode(sprintf('精选推广(%d)扣费失败修复', $errorQueue['planId'])); $this->log("传递的参数:UserId={$ajkBrokerExtend['userId']}\tamount={$amount}\tplanId={$errorQueue['planId']}\tSN={$planExtend['sn']}"); $charge_sn = Bll_PayAccount::cancel_frozen($ajkBrokerExtend['userId'], $amount, $errorQueue['planId'], Const_PaymentApp::HZ_CHOICE, $planExtend['sn'], $note, true); if ($charge_sn['data']['status'] === 'ok') { $this->log('修复成功。'); } else { $this->log('修复失败。'); } $this->log(print_r($charge_sn, true)); } return 'success'; }
/** * 金铺-精选房源设置 * * @param $ajkBrokerId * @param $cityId * @param $propId * @param array $params * @return array */ public static function jp_setting_post($ajkBrokerId, $cityId, $propId, $params = array()) { $jpBrokerInfo = Model_Broker_JpBroker::getJpBrokerInfoByAjkBrokerId($ajkBrokerId); //check房源是否已经加入精选推广 $bidObj = Model_Plan_Jp::getBidPlanByHouseIdEx($ajkBrokerId, $propId, true); if (!empty($bidObj)) { if ($bidObj['status'] == Model_Plan_Jp::ENUM_STATUS_ONLINE || $bidObj['status'] == Model_Plan_Jp::ENUM_STATUS_CHOICE_HOLD) { return array('err_no' => self::BID_HOUSE_ALREADY_IN_BID, 'err_msg' => '房源已经加入精选推广'); } elseif ($bidObj['status'] == Model_Plan_Jp::ENUM_STATUS_HOLD) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '房源正在结算中,请稍后...'); } } $bidChoiceCount = Model_Plan_Jp::getBidChoiceInfoEx($cityId, $ajkBrokerId); //获取精选推广预算 $brokerInfo = Bll_BrokerBaseBll::get_instance()->get_broker_info($ajkBrokerId); $brokerCompanyId = $brokerInfo['BaseInfo']['COMPANYID']; $choiceSet = APF::get_instance()->get_config('choice_set'); if (isset($choiceSet[$brokerCompanyId]) && !empty($choiceSet[$brokerCompanyId])) { $min_budget = $choiceSet[$brokerCompanyId]['jp']['JP_CHOICE_MIN_BUDGET']; $max_budget = $choiceSet[$brokerCompanyId]['jp']['JP_CHOICE_MAX_BUDGET']; } else { $min_budget = $choiceSet['default']['jp']['JP_CHOICE_MIN_BUDGET']; $max_budget = $choiceSet['default']['jp']['JP_CHOICE_MAX_BUDGET']; } if ($params['budget'] < $min_budget || $params['budget'] > $max_budget) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '推广预算最低' . $min_budget . '安币,最高' . $max_budget . '安币'); } $status = isset($bidObj['status']) ? $bidObj['status'] : 0; if (count($bidChoiceCount) >= self::ALL_JP_PLAN_NUM && $status != 4) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '精选推广房源已经超过' . self::ALL_JP_PLAN_NUM . '套'); } if (0 == $jpBrokerInfo) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '您不是金铺经纪人'); } /** 获取房源基本信息 */ $propInfo = Bll_House_JpHouseInfo::getHouseInfoById($propId); if (empty($propInfo)) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '房源不存在'); } if ($propInfo['base']['memberId'] != $jpBrokerInfo['id']) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '房源不属于该经纪人'); } /** 判断是否是精选开放城市 */ if (!Bll_City::isChoiceIndependentCity($cityId, Const_Site::JINPU)) { /** 判断房源是否在套餐推广 */ $propCombos = Bll_Combo_HouseRelation::getOnlineRelationByHouseId($propId, Bll_Combo_HouseRelation::SITE_TYPE_JP); if (empty($propCombos)) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '房源必须在套餐推广才能参与精选'); } } if (false == $propInfo['info']['isExquisite']) { return array('err_no' => self::BID_FAIL_QUALITY_OR_NEW, 'err_msg' => '精品、新发15天房源才能参与精选推广', 'params' => array('site' => 'jp')); } $limitDay = intval(date('Ymd', strtotime('-15 days'))); $postDay = intval(date('Ymd', strtotime($propInfo['base']['createTime']))); if ($limitDay > $postDay) { return array('err_no' => self::BID_FAIL_QUALITY_OR_NEW, 'err_msg' => '精品、新发15天房源才能参与精选推广', 'params' => array('site' => 'jp')); } /** 获取板块信息 **/ $blockArr = Bll_House_JpHouseInfo::getBlock($propInfo['base']['houseType'], $propInfo['info']); if (!$blockArr['blockId'] && !$blockArr['newBlockId']) { return array('err_no' => self::BID_HOUSE_ALREADY_IN_BID, 'err_msg' => '房源缺少板块信息'); } /** 获取价格信息 **/ $arrPrice = Bll_House_JpHouseInfo::getPrice($cityId, $propInfo['base']['houseType'], $propInfo['info']); if (empty($arrPrice['price_id'])) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '缺少价格段信息'); } /** 获取点击单价开始 */ try { $apiParams = array('brokerId' => $ajkBrokerId, 'cityId' => $cityId, 'price' => $arrPrice['price'] ?: 0, 'blockId' => $blockArr['blockId'] ?: 0, 'newBlockId' => $blockArr['newBlockId'] ?: 0, 'houseType' => $propInfo['base']['houseType']); /** * @var Bll_Service_Client_HttpResponse $clickPrice */ for ($i = 0; $i < 3; $i++) { $clickPrice = Bll_Service_Choice::jpClickPrice($apiParams); if ($clickPrice->isSucceeded()) { break; } } if (!$clickPrice->isSucceeded() || $clickPrice['status'] == 'error') { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '系统繁忙(code:-1000)'); } if ($params['budget'] * 100 < $clickPrice['realTradeAmount']) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '推广预算不能小于点击单价'); } /** 点击单价不能小于当前系统内的单价 防止恶意操作 */ if ($params['price'] < $clickPrice['realTradeAmount'] / 100) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '点击单价错误'); } } catch (Exception $e) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '系统繁忙(code:-2000)'); } /** 防并发 */ if (false === self::rejectSameRequest(Bll_Plan_Bid_Choice::SITE_JP, $ajkBrokerId, $propId)) { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '系统繁忙(code:-906)'); } /** 往冻结队列里添加记录,获取request id*/ $bidFreezeOrder = new Bll_Plan_BidFreezeOrderNum(date('Y')); $ajk_user_id = Bll_Broker_MainBusiness::getDataByEsfId($ajkBrokerId)->memberId; $requestId = $bidFreezeOrder->getRequestId(Bll_Plan_BidFreezeOrderNum::JP, $ajk_user_id, date('Y'), 0, $propId); /** 冻结金额 **/ $freezeResult = self::bid_freeze($ajkBrokerId, $params['budget'] * 100, $requestId, sprintf('金铺精选房源冻结,房源ID是: %d', $propId), Const_PaymentApp::JP_CHOICE); /** 判断是否冻结成功 **/ $freezeResponse = $freezeResult->getResponse(); if (!$freezeResult->isSucceeded() || $freezeResponse['status'] == 'error') { return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => isset($freezeResult['info']) ? $freezeResult['info'] . "code:" . $freezeResult['code'] : '冻结金额失败'); } //检查是否有坑位 坑位+1 $bucketStatus = Model_Choice_JPBidBucket::incrementUsedNum($blockArr['blockId'], $blockArr['newBlockId'], $propInfo['base']['houseType'], $arrPrice['price_id']); if (!$bucketStatus) { return array('err_no' => self::BID_WAIT_FAIL, 'err_msg' => '精选推广已满,请稍后再试'); } /** 获取最小竞价单元的精选信息 **/ $bucketInfo = Model_Choice_JPBidBucket::getBucketInfo($blockArr['blockId'], $blockArr['newBlockId'], $propInfo['base']['houseType'], $arrPrice['price_id']); /** 根据最小竞价单位里面的房源数判断当前的房源应该是排队还是推广中 **/ /* if ($bucketInfo['usedNum'] > $bucketInfo['maxOnlineNum']) { $planStatus = Model_Plan_Jp::ENUM_STATUS_CHOICE_HOLD; } else { $planStatus = Model_Plan_Jp::ENUM_STATUS_ONLINE; } */ $planStatus = Model_Plan_Jp::ENUM_STATUS_CHOICE_HOLD; /** 如果计划已经存在删除该计划**/ if (isset($bidObj['status']) && $bidObj['status'] == 4) { Model_Plan_Jp::data_access()->set_field('isDelete', 1)->filter('id', $bidObj['id'])->update(); } /** 构造计划数据 创建计划**/ $planData = self::buildJpPlanData($cityId, $jpBrokerInfo['id'], $params['budget'], $freezeResult['data']['sn'], $propId, $blockArr['blockId'], $blockArr['newBlockId'], $arrPrice['price_id'], $propInfo['base']['houseType'], $planStatus); $planData['ajkBrokerId'] = $ajkBrokerId; $PlanObj = Model_Plan_Jp::create($planData); $PlanObj->save(); if (empty($PlanObj->id)) { /** 坑位-1 **/ Model_Choice_JPBidBucket::decrementUsedNum($blockArr['blockId'], $blockArr['newBlockId'], $propInfo['base']['houseType'], $arrPrice['price_id']); Model_Plan_Jp::data_access()->set_field('isDelete', 0)->filter('id', $bidObj['id'])->update(); return array('err_no' => self::BID_FAIL_OTHER, 'err_msg' => '创建计划失败'); } /** 更新房源里面的竞价计划id **/ $propInfo['base']->bidSpreadId = $PlanObj->id; $propInfo['base']->save(); /** 更新房源分表信息 **/ //$propInfo['info']->isList = 1; $propInfo['info']->spreadOffer = $clickPrice['realTradeAmount']; $propInfo['info']->spreadOfferTime = time(); $propInfo['info']->save(); /** 构建精选动作处理数据 **/ $choiceData = self::buildJpChoiceData($ajkBrokerId, Model_Choice_ActionQueue::ENUM_BEGIN_BY_HAND, $PlanObj->id, '经纪人手动推广', $propId); /** 插入到精选动作处理队列表 **/ Model_Choice_ActionQueue::create($choiceData, date('m'))->save(); $bidFreezeOrder->updateRequestComplete($requestId, $freezeResult['data']['sn'], $PlanObj->id); if ($bucketInfo['usedNum'] > $bucketInfo['maxOnlineNum']) { $rank = $bucketInfo['usedNum'] - $bucketInfo['maxOnlineNum']; return array('err_no' => self::BID_WAIT_SUCCESS, 'err_msg' => '精选排队成功', 'rank' => $rank); } else { return array('err_no' => self::BID_SHOW_SUCCESS, 'err_msg' => '精选推广成功'); } }
/** * 获取精选计划解冻失败的记录 * * @param int $startId * @param int $siteType * @param int $splitSuffix * @return array */ public static function getFailedAbandonFee($startId, $siteType = self::ENUM_HAOZU, $splitSuffix = 0) { if (empty($splitSuffix)) { $splitSuffix = date('m'); } try { return Model_Choice_ActionQueue::data_access($splitSuffix)->filter('siteType', $siteType)->filter('status', self::ENUM_FAIL)->filter('actionId', self::ENUM_STOP_BY_HAND)->filter('updateRemark', '扣费失败')->filter_by_op('id', '>', $startId)->get_row(); } catch (Exception $e) { return array(); } }
/** * 处理金铺房源板块变更的日志 * * @param array $houseLog */ private function jpHouseBlockIdChange($houseLog) { if ($houseLog['type'] != Const_ProLogType::LOG_PROPERTY_AREA_CHANGE && $houseLog['type'] != Const_ProLogType::LOG_BUILDING_AREA_CHANGE || $houseLog['siteType'] != 3) { $this->setLog(sprintf('房源日志类型[%d]错误/不是金铺[%d]房源日志', $houseLog['type'], $houseLog['siteType'])); return; } Model_Choice_ActionQueue::addBidQueen(array('siteType' => 3, 'brokerId' => $houseLog['brokerId'], 'planId' => $houseLog['planId'], 'proId' => $houseLog['houseId'], 'actionId' => Const_ChoiceType::CHOICE_HOUSE_AREA_CHANGE, 'createTime' => time(), 'createRemark' => sprintf('房源日志id:%d;type:%d', $houseLog['id'], $houseLog['type']), 'status' => 0, 'operationId' => $houseLog['operatorId'], 'ip' => 'Choice_CheckProLogToBidQueen')); $this->setLog(sprintf('房源[%d - %d]板块变更,通知精选队列', $houseLog['houseId'], $houseLog['planId'])); }
/** * 金铺精选推广 放弃排队 删除推广 放弃推广 动作 * 2-推广中 4-结束 6排队中 */ public static function spreadOperation($act, $id) { $result = array('status' => 'error'); $request = APF::get_instance()->get_request(); $ajkBlockId = $request->getBrokerId(); $jpBrokerInfo = Model_Broker_JpBroker::getJpBrokerInfoByAjkBrokerId($ajkBlockId); if (isset($act) && intval($id)) { $spreadInfo = Model_Plan_Jp::data_access()->filter('isDelete', 0)->filter('id', $id)->get_row(); if (!empty($spreadInfo) && $spreadInfo['memberId'] == $jpBrokerInfo->id) { switch ($act) { case 'delete': if ($spreadInfo['status'] == 4) { //删除计划ID Model_Plan_Jp::data_access()->set_field('isDelete', 1)->set_field('updateTime', date('Y-m-d H:i:s'))->filter('id', $id)->update(); //设置房源bidSpreadId为0 Model_House_JpHouseIdx::data_access()->set_field('bidSpreadId', 0)->filter('id', $spreadInfo['houseId'])->update(); $result = array('status' => 'ok'); } elseif ($spreadInfo['status'] == 3) { $result = array('status' => '该房源正在结算中,请稍后'); } else { $result = array('status' => '该房源正在推广或排队中'); } break; case 'stopQueue': case 'stopPlan': if ($spreadInfo['status'] == 3) { $result = array('status' => '该房源正在结算中,请稍后'); } elseif ($spreadInfo['status'] == 2 || $spreadInfo['status'] == 6) { $choiceData = Bll_Plan_Bid_Choice::buildJpChoiceData($ajkBlockId, Model_Choice_ActionQueue::ENUM_STOP_BY_HAND, $id, '停止精品推广', $spreadInfo['houseId']); if (1 != Model_Choice_ActionQueue::create($choiceData, date('m'))->save()) { $result = array('status' => '系统繁忙'); break; } //更新计划状态为计算中 $updatePlanStatus = Model_Plan_Jp::data_access()->set_field('status', Model_Plan_Jp::ENUM_STATUS_HOLD)->set_field('updateTime', date('Y-m-d H:i:s'))->filter('id', $id)->update(); if ($updatePlanStatus == 0) { $result = array('status' => '暂停计划失败'); break; } //设置房源bidSpreadId为0 $updateBidSpreadId = Model_House_JpHouseIdx::data_access()->set_field('bidSpreadId', 0)->filter('id', $spreadInfo['houseId'])->update(); if (1 != $updateBidSpreadId) { $result = array('status' => '暂停计划失败'); break; } //坑位表减一 Model_Choice_JPBidBucket::decrementUsedNum($spreadInfo['blockId'], $spreadInfo['newBlockId'], $spreadInfo['houseType'], $spreadInfo['priceId']); $result = array('status' => 'ok'); break; } default: break; } } } return $result; }
public function handle_request() { $currentTableSplitSuffix = date('m'); $failedActionQueue = Model_Choice_ActionQueue::getFailedAbandonFee($this->queueId, Model_Choice_ActionQueue::ENUM_HAOZU, $this->tableSplitSuffix); if (empty($failedActionQueue)) { /** 如果不是同一个月的话,那么前一个月没有需要修复的数据就开始修复本月的数据 */ if (strcmp($currentTableSplitSuffix, $this->tableSplitSuffix) != 0) { $this->saveCursor($currentTableSplitSuffix, 0); } return; } $this->log("开始修复: ID={$failedActionQueue['id']}\tBrokerId={$failedActionQueue['brokerId']}\tPlanId={$failedActionQueue['planId']}\tupdateRemark={$failedActionQueue['updateRemark']}"); $ajkBrokerExtend = Model_Broker_AjkBrokerExtend::getDataByBrokerId($failedActionQueue['brokerId']); /** TODO 添加获取二手房经纪人信息为空日志 */ if (empty($ajkBrokerExtend)) { $this->log(sprintf(' 获取经纪人(%d)的UserId失败(%d)。', $failedActionQueue['brokerId'], $failedActionQueue['id'])); $this->saveCursor($this->tableSplitSuffix, $failedActionQueue['id']); return; } $planExtend = Dao_Broker_HzPlan::get_bid_sn($failedActionQueue['planId']); /** TODO 添加获取SN 失败日志 */ if (empty($planExtend)) { $this->log(sprintf(' 获取计划(%d)的SN失败(%d)。', $failedActionQueue['planId'], $failedActionQueue['id'])); $this->saveCursor($this->tableSplitSuffix, $failedActionQueue['id']); return; } // $planInfo = Dao_Broker_HzPlan::get_plan($failedActionQueue['planId']); $planInfo = Model_Plan_HzPlanBasic::get_plan_by_id($failedActionQueue['planId']); /** TODO 添加获取计划信息失败日志*/ if (empty($planInfo)) { $this->log(sprintf(' 获取计划(%d)的信息失败(%d)。', $failedActionQueue['planId'], $failedActionQueue['id'])); $this->saveCursor($this->tableSplitSuffix, $failedActionQueue['id']); return; } //精选结算 $amount = $planInfo['total_consume']; $note = '%E8%A7%A3%E5%86%BB'; $this->log(" 传递的参数:UserId={$ajkBrokerExtend['userId']}\tamount={$amount}\tplanId={$failedActionQueue['planId']}\tSN={$planExtend['sn']}"); $unlockSuccess = Bll_PayAccount::cancel_frozen($ajkBrokerExtend['userId'], $amount, $failedActionQueue['planId'], Const_PaymentApp::HZ_CHOICE, $planExtend['sn'], $note, true); if ($unlockSuccess === true) { $this->log(' 解冻成功。'); $this->saveCursor($this->tableSplitSuffix, $failedActionQueue['id']); $repairRemark = $failedActionQueue['updateRemark'] . ', 解冻修复成功'; /** 更新队列状态为处理成功 */ Model_Choice_ActionQueue::setBidQueenStatusById($this->tableSplitSuffix, $failedActionQueue['id'], Model_Choice_ActionQueue::ENUM_SUCCESS, $repairRemark); return; } $this->log(' 解冻失败。'); }
/** * */ public function handle_request() { //分表 $date = date('Ymd'); //获取游标 $dateFlag = $this->getFlag(); if (!empty($dateFlag)) { $date = $dateFlag['date']; } //竞价队列数据获取 $split = date('m', strtotime($date)); $year = date('Y', strtotime($date)); $day = date('d', strtotime($date)); $BidList = Model_Choice_ActionQueue::getBidQueenList($split); //判断当前队列是否处理完成 if (empty($BidList)) { //判断是否切换表 if ($split + 0 != date('m') + 0) { $split += 1; if ($split < 10) { $date = $year . '0' . $split . $day; } elseif ($split <= 12) { $date = $year . $split . $day; } else { $date = $year + 1 . '0' . ($split - 12) . $day; } //记录表游标 $this->setFlag(array('date' => $date)); } //休息1秒钟 $this->setShCommonSleepTime(1); $this->setLog(date('Y-m-d H:i:s') . ' 处理完成'); exit; } //队列数据处理 foreach ($BidList as $list) { try { $AjkChoice = new Bll_Plan_Bid_AjkChoice(); $AjkBlockChoice = new Bll_Plan_Bid_AjkBlockChoice(); $result = ''; if ($list['siteType'] == 1) { //查询计划信息 $propSpread = Model_Plan_AjkPropspread::getAjkPropspreadById($list['planId']); } switch ($list['actionId']) { case 1: //精选推广 if ($list['siteType'] == 1) { $list['bidStatus'] = 1; if ($propSpread['model'] == 1) { $result = $AjkChoice->choiceStartForJobByBroker($list); } elseif ($propSpread['model'] == 2) { $result = $AjkBlockChoice->blockChoiceStartForJobByBroker($list); } } elseif ($list['siteType'] == 2) { $result = Bll_Plan_Bid_HzChoice::choiceSpread($list); } elseif ($list['siteType'] == 3) { $result = Bll_Plan_Bid_JpChoice::choicePromotion($list); } break; case 2: //手动停止 if ($list['siteType'] == 1) { $list['bidStatus'] = 3; if ($propSpread['model'] == 1) { $result = $AjkChoice->choiceStopForJobByBroker($list); } elseif ($propSpread['model'] == 2) { $result = $AjkBlockChoice->blockChoiceStopForJobByBroker($list); } } elseif ($list['siteType'] == 2) { $result = Bll_Plan_Bid_HzChoice::stopChoiceSpread($list); } elseif ($list['siteType'] == 3) { $result = Bll_Plan_Bid_JpChoice::stopSpread($list); } break; case 3: //计划14天到期 if ($list['siteType'] == 1) { $list['bidStatus'] = 6; if ($propSpread['model'] == 1) { $result = $AjkChoice->choiceStopForJobBySystem($list); } elseif ($propSpread['model'] == 2) { $result = $AjkBlockChoice->blockChoiceStopForJobBySystem($list); } } elseif ($list['siteType'] == 2) { $result = Bll_Plan_Bid_HzChoice::timeIsUp($list); } elseif ($list['siteType'] == 3) { $result = Bll_Plan_Bid_JpChoice::expireSpread($list); } break; case 4: //计划没钱 if ($list['siteType'] == 1) { $list['bidStatus'] = 5; if ($propSpread['model'] == 1) { $result = $AjkChoice->choiceStopForJobByNoMoney($list); } elseif ($propSpread['model'] == 2) { $result = $AjkBlockChoice->blockChoiceStopForJobByNoMoney($list); } } elseif ($list['siteType'] == 2) { $result = Bll_Plan_Bid_HzChoice::planNoMoney($list); } elseif ($list['siteType'] == 3) { $result = Bll_Plan_Bid_JpChoice::noMoneySpread($list); } break; case 5: //房源移出定价计划,导致精选停止(房源日志发起) if ($list['siteType'] == 1) { $list['bidStatus'] = 2; if ($propSpread['model'] == 1) { $result = $AjkChoice->choiceStopForJobBySystem($list); } elseif ($propSpread['model'] == 2) { $result = $AjkBlockChoice->blockChoiceStopForJobBySystem($list); } } elseif ($list['siteType'] == 2) { $result = Bll_Plan_Bid_HzChoice::removeFixPlanForChoice($list); } elseif ($list['siteType'] == 3) { $result = Bll_Plan_Bid_JpChoice::removeFixSpread($list); } break; case 6: //房源价格变更(房源日志发起) $priceaArr = json_decode($list['createRemark'], true); $list = array_merge($list, $priceaArr); if ($list['siteType'] == 1) { $list['bidStatus'] = 4; if ($propSpread['model'] == 1) { $result = $AjkChoice->choiceChangePriceForJob($list); } elseif ($propSpread['model'] == 2) { $result = $AjkBlockChoice->blockChoiceChangePriceForJob($list); } } elseif ($list['siteType'] == 2) { $result = Bll_Plan_Bid_HzChoice::changeProPrice($list); } elseif ($list['siteType'] == 3) { $result = Bll_Plan_Bid_JpChoice::changePriceForHouse($list); } break; case 7: //房源移出定价计划,导致竞价停止(房源日志发起)20140717 caoyang 新增 if ($list['siteType'] == 1) { /** 二手房走老队列 */ } elseif ($list['siteType'] == 2) { $result = Bll_Plan_Bid_HzChoice::removeFixPlanForBid($list); } elseif ($list['siteType'] == 3) { $result = Bll_Plan_Bid_JpBidManage::stopJpBidData($list); } break; case Const_ChoiceType::CHOICE_REMOVE_FROM_COMBO: //房源取消套餐推广,导致精选停止(房源日志发起)20140815 caoyang 新增 if ($list['siteType'] == 1) { $list['bidStatus'] = 2; if ($propSpread['model'] == 1) { $result = $AjkChoice->choiceStopForJobBySystem($list); } elseif ($propSpread['model'] == 2) { $result = $AjkBlockChoice->blockChoiceStopForJobBySystem($list); } } elseif ($list['siteType'] == 2) { $result = Bll_Plan_Bid_HzChoice::removeComboForChoice($list); } elseif ($list['siteType'] == 3) { $result = Bll_Plan_Bid_JpChoice::removeFixSpread($list); } break; case Const_ChoiceType::BID_REMOVE_FROM_COMBO: //房源取消套餐推广,导致竞价停止(房源日志发起)20140815 caoyang 新增 if ($list['siteType'] == 1) { /** 二手房走老队列 */ } elseif ($list['siteType'] == 2) { $result = Bll_Plan_Bid_HzChoice::removeFixPlanForBid($list); } elseif ($list['siteType'] == 3) { $result = Bll_Plan_Bid_JpBidManage::stopJpBidData($list); } break; /** 精选房源板块变更 */ /** 精选房源板块变更 */ case Const_ChoiceType::CHOICE_HOUSE_AREA_CHANGE: if ($list['siteType'] == 1) { if ($propSpread['model'] == 1) { $result = $AjkChoice->communityMerge($list); } elseif ($propSpread['model'] == 2) { $result = $AjkBlockChoice->communityMerge($list); } break; } if ($list['siteType'] == 2) { $result = Bll_Plan_Bid_HzChoice::houseAreaChange($list); break; } else { if ($list['siteType'] == 3) { $result = Bll_Plan_Bid_JpChoice::houseBlockChange($list); } } break; /** 精选房源价格段变更 */ /** 精选房源价格段变更 */ case Const_ChoiceType::CHOICE_PRICE_INTERVAL_CHANGE: $result = array('status' => 2, 'msg' => '未知的动作类型'); if ($list['siteType'] == 1) { if ($propSpread['model'] == 1) { $result = $AjkChoice->choicePriceIntervalChange($list); } elseif ($propSpread['model'] == 2) { $result = $AjkBlockChoice->choicePriceIntervalChange($list); } } break; /** 精选上下架状态维护,该上没上,改下没下 */ /** 精选上下架状态维护,该上没上,改下没下 */ case Const_ChoiceType::NOTIFY_SOLR_UP_DOWN: switch ($list['siteType']) { case Const_Site::ANJUKE: $result = $AjkChoice->notifySolrUpDown($list); break; case Const_Site::HAOZU: $result = Bll_Plan_Bid_HzChoice::notifySolrUpDown($list); break; case Const_Site::JINPU: $result = Bll_Plan_Bid_JpChoice::notifySolrUpDown($list); break; } break; default: $result = array('status' => 2, 'msg' => '未知的动作类型'); break; } //解析返回值 if ($list['siteType'] == 1) { $status = $result ? 1 : 2; if ($propSpread['model'] == 1) { $updateRemark = $AjkChoice->getMsg(); } elseif ($propSpread['model'] == 2) { $updateRemark = $AjkBlockChoice->getMsg(); } } elseif ($list['siteType'] == 2) { $status = $result['status'] ? 1 : 2; $updateRemark = is_array($result['msg']) ? implode(';', $result['msg']) : $result['msg']; } elseif ($list['siteType'] == 3) { $status = $result['status'] ? 1 : 2; $updateRemark = is_array($result['msg']) ? implode(';', $result['msg']) : $result['msg']; } else { $status = 2; $updateRemark = '未知的网站类型'; } } catch (Exception $e) { $status = 2; $updateRemark = print_r($e, true); } //更新队列状态 Model_Choice_ActionQueue::setBidQueenStatusById($split, $list['id'], $status, $updateRemark); //记录处理日志 $this->setLog(date('Y-m-d H:i:s') . ' id:' . $list['id'] . '; 网站: ' . $list['siteType'] . '; split:' . $split . '; remark:' . $updateRemark); //记录表游标 $this->setFlag(array('date' => $date)); } //休息10毫秒 $this->setShCommonSleepTime(0.01); }
/** * 经纪人手动停止精选推广 * 只将计划的状态状态设置为 Const_HzPlan::MENUOVER * * @param $ajkBrokerId * @param $planId * @param $ip * @return array */ public static function stopChoicePlan($ajkBrokerId, $planId, $ip) { $result = array('status' => 'ok'); $planInfo = Model_Plan_HzPlanBasic::get_plan_by_id($planId); if (empty($planInfo)) { return array('status' => 'error', 'msg' => '计划不存在。'); } if ($planInfo['status'] != Const_HzPlan::SPREAD) { return array('status' => 'error', 'msg' => '计划不在推广中。'); } $hzBrockId = Model_Broker_HzMapping::get_hz_broker_id($ajkBrokerId); if ($planInfo['user_id'] != $hzBrockId) { return array('status' => 'error', 'msg' => '计划不属于当前经纪人。'); } $blockId = $planInfo['blockId']; $priceId = $planInfo['priceId']; // 根据plan_id查pro_id $planning = Dao_Broker_HzPlan::get_planning($planId, 2); $proId = $planning ? $planning[0]['proid'] : 0; $bidQueueData = array('siteType' => Model_Choice_ActionQueue::ENUM_HAOZU, 'brokerId' => $ajkBrokerId, 'planId' => $planId, 'proId' => $proId, 'actionId' => Model_Choice_ActionQueue::ENUM_STOP_BY_HAND, 'createTime' => time(), 'createRemark' => '经纪人手动停止推广', 'operationId' => $ajkBrokerId, 'ip' => $ip); Model_Choice_ActionQueue::addBidQueen($bidQueueData); /** 更新计划状态为手工结束状态 */ //Bll_HzBidPlan::updatePlanStatus($planId, Const_HzPlan::MENUOVER); $updatePlanResult = Model_Plan_HzPlanBasic::updatePlan($planId, array('status' => Const_HzPlan::MENUOVER, 'stop_date' => time())); $updatePlanningResult = Model_Plan_HzPlanning::updatePropPlanStatusByPlanId($planId, Const_HzPlan::MENUOVER); // 计划和关系更新成功后坑才-1 if ($updatePlanResult && $updatePlanningResult) { Model_Choice_HzBidBucket::decrement_used_num($blockId, $priceId); } else { return array('status' => 'error', 'msg' => '更新计划或者关系失败。'); } return $result; }