/** * 动作 7 * 房源移出定价计划,导致竞价停止(房源日志发起) * 结算 * 更新计划为停止状态 * 通知solr下(停止的房源) * 记录房源日志(停止的房源) * 根据停止的房源,取出坑位里面的推广、排队房源 * 计算排名 * 更新计划状态(坑位里面的异动房源更新状态) * 通知solr(坑位里面的异动房源通知solr) * 记房源日志(坑位里面的房源异动日志) * @param array $params * @return array|bool */ public static function removeFixPlanForBid($params = array()) { self::$qInfo = $params; // 检查参数 $checkParams = self::checkParams($params); if (!$checkParams['status']) { return $checkParams; } // 获取信息,组装$params $joinParams = self::joinParams($params); if (!$joinParams['status']) { return $joinParams; } $all_return = array(); //判断竞价计划是否删除 if ($params['flag'] != 1) { return Bll_HzPropBll::build_return(0, '无效的竞价计划' . json_encode($params)); } //非推广的计划 if ($params['status'] != 1) { return Bll_HzPropBll::build_return(0, '非推广的竞价计划' . json_encode($params)); } // 非精选判断 if ($params['bidVersion'] == 2) { return Bll_HzPropBll::build_return(0, '房源为精选' . json_encode($params)); } //获取竞价计划的冻结号 $sn = Dao_Broker_HzPlan::get_bid_sn($params['planId']); $sn = $sn['sn']; if (empty($sn)) { return Bll_HzPropBll::build_return(0, Const_HzErrorInfo::PROPERROR . json_encode($params)); } //获取竞价花费 $amount = $params['totalConsume']; $note = urlencode('推广房源' . $params['proId']); $user_id = Bll_HzBroker::get_userid_by_hzbrokerid($params['']); /** 竞价结算 调用3次 */ $charge_sn = false; $unfreezeOrderData = array('userId' => $user_id, 'proId' => $params['proId'], 'serialNumber' => $sn, 'planId' => $params['planId'], 'amount' => $amount); $unfreezeOrder = Bll_Ppc_BidUnfreeze::createHzOrder($unfreezeOrderData); for ($i = 0; $i < 3 && !$charge_sn; $i++) { $charge_sn = Bll_PayAccount::cancel_frozen($user_id, $amount, '', Const_PaymentApp::HZ_BID, $sn, $note, true); } if (!$charge_sn) { $unfreezeOrder->fail(); $flag_array['msg'] = Const_HzErrorInfo::CHARGEFAIL; // 此处不需要block,由job保证此处解冻正确 //return $flag_array; } else { $unfreezeOrder->complete(); } //维护竞价关联关系 if (!Dao_Broker_HzPlan::update_planning($params['planId'], Const_HzPlan::DELETE)) { $flag_array['msg'] = '维护竞价关联关系,数据更新失败.'; return $flag_array; } //维护计划状态 if (!Dao_Broker_HzPlan::update_plan_status($params['planId'], Const_HzPlan::DELETE)) { $flag_array['msg'] = '维护计划状态,数据更新失败.'; return $flag_array; } // 更新计划的flag为删除状态 if (!Dao_Broker_HzPlan::update_history_bids($params['planId'])) { $flag_array['msg'] = '更新计划的flag为删除状态,数据更新失败.'; return $flag_array; } //记录房源日志 $data = array('houseId' => $params['proId'], 'planId' => $params['planId'], 'brokerId' => $params['ajkBrokerId'], 'cityId' => $params['cityId'], 'type' => 15, 'changeType' => 407, 'remark' => '房源' . $params['proId'] . '移出定价计划。竞价' . $params['planId'] . '(id)取消竞价推广。', 'addDate' => date('Y-m-d H:i:s'), 'operatorId' => $params['operationId'], 'siteType' => 2); if (!Model_Log_HouseLogNew::create($data, date('Ymd'))->save()) { return Bll_HzPropBll::build_return(0, array("日志写入失败")); } //计算房源状态 Bll_HzPropBll::bulidHzProStatu($params['proId']); return Bll_HzPropBll::build_return(1, array('竞价' . $params['planId'] . '(id)取消竞价推广。')); }
/** * */ 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); }