Пример #1
0
 public static function &getInstance()
 {
     if (self::$_instance === null) {
         self::$_instance = new self();
     }
     return self::$_instance;
 }
Пример #2
0
 /**
  * 表单处理函数
  * @param $discountPrice
  */
 private function formAction($discountPrice)
 {
     $show_day = intval($this->params['days']);
     $proIds = array();
     if (!empty($this->params['ids'])) {
         $proIds = explode(';', $this->params['ids']);
         $filterProIds = Bll_Broker_ShowcaseAdSetPro::getInstance()->filterProIds($this->brokerId, $this->cityId, $this->type, $proIds);
         //有些房源不在线上展示
         if (count($filterProIds) != count($proIds)) {
             $this->toError('有些房源没在线上推广,操作失败!');
         }
     }
     //账户余额
     $balance = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerMoney($this->userId);
     if ($discountPrice > $balance) {
         $this->toError('账户余额不足,操作失败!');
     }
     //插入订单信息
     $inser_res = Bll_Broker_ShowcaseOrders::getInstance()->insertBrokerOrders($this->brokerId, $show_day, $this->cityId, $discountPrice * 100, $this->type);
     if (!$inser_res['status']) {
         //验证不通过,跳转
         $this->toError($inser_res['msg']);
     }
     //插入房源信息
     $res = Bll_Broker_ShowcaseAdSetPro::getInstance()->insertAdProsInfo($this->brokerId, $this->cityId, $proIds, $this->type);
     if (!$res['status']) {
         $this->toError($res['msg']);
     } else {
         //插入成功,跳转至管理页面
         $this->toSuccess();
     }
 }
Пример #3
0
 /**
  * 获取经纪人账户存在
  * [GetBrokerEsfPro description]
  */
 private function getBrokerMoney()
 {
     $balance = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerMoney($this->userId);
     if (!empty($_SERVER['XIONGJIEWU_TEST'])) {
         $balance = 10000;
     }
     $this->outData($balance, 1);
 }
Пример #4
0
 public function handle_request_internal()
 {
     if (!Bll_City::isShowCaseCity(static::$intBrokerCityID)) {
         $this->redirect('/user/combo/brokerhome');
         exit;
     }
     $this->apf = APF::get_instance();
     $this->request = $this->apf->get_request();
     $this->response = $this->apf->get_response();
     $this->params = $this->request->get_parameters();
     //回调地址
     $r_url = base64_decode($this->params['r_url']);
     if (empty($r_url)) {
         $r_url = $_SERVER['HTTP_REFERER'];
         if (empty($r_url)) {
             $r_url = '/ajkbroker/showcase/zf';
         }
     }
     $msg = $this->params['msg'];
     if (!$msg) {
         //没有报错信息,就是提示成功
         $type = $this->params['type'] ? $this->params['type'] : Const_ShowcaseOrders::SALE_DB;
         //二手房经纪人ID
         $brokerId = self::$BrokerInfo['BaseInfo']['BROKERID'];
         if ($type == Const_ShowcaseOrders::SALE_DB) {
             //二手房
             $proCountMax = Const_ShowcaseOrders::SALE_PRO_MAX_COUNT;
             $brokerAdProInfos = Bll_Broker_ShowcaseAdSetPro::getInstance()->getBrokerAdSalePropInfo($brokerId, true);
             $brokerAdInfo = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerOrders(array('brokerId' => $brokerId), Const_ShowcaseOrders::SALE_DB);
         } else {
             //租房
             $proCountMax = Const_ShowcaseOrders::RENT_PRO_MAX_COUNT;
             $brokerAdProInfos = Bll_Broker_ShowcaseAdSetPro::getInstance()->getBrokerAdRentPropInfo($brokerId, true);
             $brokerAdInfo = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerOrders(array('brokerId' => $brokerId), Const_ShowcaseOrders::RENT_DB);
         }
         //订单信息不存在
         if (empty($brokerAdInfo)) {
             APF::get_instance()->get_response()->redirect($r_url);
         }
         $dayCount = ceil((strtotime($brokerAdInfo->endDate) - strtotime($brokerAdInfo->startDate)) / 86400) + 1;
         $this->request->set_attribute('dayCount', $dayCount);
         $this->request->set_attribute('proCount', count($brokerAdProInfos));
         $this->request->set_attribute('proCount', count($brokerAdProInfos));
         $this->request->set_attribute('leftProCount', $proCountMax - count($brokerAdProInfos));
         //橱窗价格
         $tmp = array('cityId' => self::$BrokerInfo['BaseInfo']['CITYID'], 'status' => 1, 'startDate' => date('Ymd'));
         $cityPrice = Bll_Broker_ConfigCityPrice::getInstance()->getCityPrice($tmp, $type);
         $this->request->set_attribute('price', !empty($cityPrice->discountPrice) ? round($cityPrice->discountPrice / 100, 2) : 8);
     }
     //报错信息
     $this->request->set_attribute('msg', $msg);
     $this->request->set_attribute('r_url', $r_url);
     return 'Showcase_Error';
 }
Пример #5
0
 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;
 }
Пример #6
0
 public function handle_request()
 {
     $arrearageList = $this->getRequestData();
     if (!empty($arrearageList)) {
         foreach ($arrearageList as $arrearageVal) {
             $updateArrearageArr = array();
             $apiData = $otherData = '';
             /*
              *1.设置status = 1,为正在处理中  更新为处理状态(更新失败,跳出继续执行下一跳数据)
              */
             $check = Bll_Broker_EntrustArrearage::getInstance()->updateOneData(array('id' => $arrearageVal->id, 'status' => array(0, 2)), array('status' => 1));
             if (empty($check)) {
                 continue;
             }
             $arrearageVal->add_old_property_value('status', 1);
             $commission = $this->getCommissionDataById($arrearageVal->commissionId);
             if (!$commission) {
                 $otherData = '委托关系表中不存在数据';
                 $updateArrearageArr['status'] = 2;
                 $this->updateArrearageTable($arrearageVal, $updateArrearageArr, $apiData, $otherData);
                 continue;
             }
             // 获取房东房源信息
             $house = $this->getCommissionProPDataById($commission->houseId);
             if (!$house) {
                 $otherData = '房东房源表中不存在数据';
                 $updateArrearageArr['status'] = 2;
                 $this->updateArrearageTable($arrearageVal, $updateArrearageArr, $apiData, $otherData);
                 continue;
             }
             /*
              * 2. 获取账户余额
              */
             $userId = Bll_Broker_BrokerCheckInfo::getUserIdByBrokerId($arrearageVal->brokerId, 'sale');
             $balance = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerMoney($userId);
             $balance = $balance * 100;
             $updateArrearageArr['balance'] = $balance;
             if ($balance < $arrearageVal->price) {
                 // 余额不足,插入消费日志
                 $otherData = '余额不足';
                 $updateArrearageArr['status'] = 2;
             } else {
                 /*
                  * 3.余额足够,调用扣费API
                  */
                 $commName = mb_strlen($house->commName, "utf-8") <= 12 ? $house->commName : mb_substr($house->commName, 0, 12, "utf-8") . "...";
                 $note = "抢委托扣费,房源信息:" . $commName . " " . $house->userName . "(房源id" . $house->id . ")";
                 $apiResult = Bll_Broker_EntrustConsume::getInstance()->callCosumeApi($userId, $arrearageVal->requestId, $arrearageVal->price, $note);
                 // 扣费成功
                 if ($apiResult['status'] === true) {
                     $updateArrearageArr['status'] = 3;
                     $otherData = '扣费成功';
                     $apiData = $apiResult['apiData'];
                     // 更新adconsume表状态
                     $tmpConsumeData = Bll_Broker_EntrustConsume::getInstance()->getDataById($arrearageVal->consumeId, $arrearageVal->dateIndex);
                     if ($tmpConsumeData) {
                         $consumeData = $tmpConsumeData[0];
                         $consumeData->balance = $balance;
                         $consumeData->status = 5;
                         $consumeData->updateTime = date("Y-m-d H:i:s", time());
                         $consumeData->save();
                     }
                 } else {
                     // 扣费失败
                     $updateArrearageArr['status'] = 2;
                     $otherData = '扣费失败';
                 }
             }
             $this->updateArrearageTable($arrearageVal, $updateArrearageArr, $apiData, $otherData);
         }
     }
 }
Пример #7
0
 public function handle_request_internal()
 {
     if (!Bll_City::isShowCaseCity(static::$intBrokerCityID)) {
         $this->redirect('/user/combo/brokerhome');
         exit;
     }
     $objRequest = APF::get_instance()->get_request();
     $cityID = self::$BrokerInfo['BaseInfo']['CITYID'];
     $objRequest->set_attribute('PayType', self::$BrokerInfo['BaseInfo']['PAYTYPE']);
     $tmp = array('cityId' => $cityID, 'status' => 1, 'startDate' => date('Ymd'));
     $cityPrice = Bll_Broker_ConfigCityPrice::getInstance()->getCityPrice($tmp, Const_ShowcaseOrders::SALE_DB);
     $todayPrice = round($cityPrice->discountPrice / 100, 2);
     $intBrokerID = $objRequest->getBrokerId();
     $userId = $objRequest->getUserId();
     $data = array('brokerId' => $intBrokerID);
     $orderinfo = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerOrders($data, $this->db);
     if (!$orderinfo) {
         $this->toManage('/ajkbroker/showcase/esf/');
     }
     $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';
     }
     $objRequest->set_attribute('order_status', $order_status);
     $objRequest->set_attribute('todayPrice', $todayPrice);
     $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) {
         $proIds = array();
         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);
     }
     $isCombo = Bll_Combo_HouseRelation::isComboCity($cityID);
     if ($isCombo['data']) {
         $comboList = Bll_Combo_HouseRelation::getHouseRelations($intBrokerID, Bll_Combo_HouseRelation::SITE_TYPE_AJK, 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()->getBrokerAdSalePropInfo($intBrokerID);
         $proIds = Bll_Broker_ShowcaseOrders::getInstance()->getObjFieldInfo($proInfo, 'propId');
         $proInfos = Bll_House_EsfHouse::getHouseInfo($proIds, $cityID);
         $proList = Bll_Broker_ShowcaseAdSetPro::getInstance()->initComboEsfProData($proInfos, $comboList);
     } else {
         //获取经纪人计划
         $brokerPlanInfo = BLL_Plan_EsfPropFixedPlanRelation::get_instance()->getBrokerEsfOnlinePlan($intBrokerID);
         if (!empty($brokerPlanInfo)) {
             //计划数据不为空
             //计划IDs
             $planIds = Bll_Broker_ShowcaseOrders::getInstance()->getObjFieldInfo($brokerPlanInfo, 'id');
             //定价推广房源
             $fixedProInfos = Bll_Fixedspread_AjkFixedSpread::getFixedOnlineProByPlanIds($cityID, $planIds);
             $proIdsc = Bll_Broker_ShowcaseOrders::getInstance()->getObjFieldInfo($fixedProInfos, 'proId');
             $proInfosc = Bll_House_EsfHouse::getHouseInfo($proIdsc, $cityID);
             if (!empty($proInfosc)) {
                 if (count($proInfosc) >= Const_ShowcaseOrders::SALE_PRO_MAX_COUNT) {
                     $fixedProInfosCnt = Const_ShowcaseOrders::SALE_PRO_MAX_COUNT;
                 } else {
                     $fixedProInfosCnt = count($proInfosc);
                 }
             } else {
                 $fixedProInfosCnt = 0;
             }
         } else {
             $fixedProInfosCnt = 0;
         }
         $proInfo = Bll_Broker_ShowcaseAdSetPro::getInstance()->getBrokerAdSalePropInfo($intBrokerID);
         $proIds = Bll_Broker_ShowcaseOrders::getInstance()->getObjFieldInfo($proInfo, 'propId');
         $proInfos = Bll_House_EsfHouse::getHouseInfo($proIds, $cityID);
         $proStatus = Bll_Fixedspread_AjkFixedSpread::getFixedProBy($cityID, $proIds);
         $proList = Bll_Broker_ShowcaseAdSetPro::getInstance()->initEsfProData($proInfos, $proStatus, $planIds);
     }
     if (count($proList) > $fixedProInfosCnt) {
         $fixedProInfosCnt = count($proList);
     }
     $objRequest->set_attribute('type', 'ajk');
     $objRequest->set_attribute('index', 2);
     //精选推广开关
     $isChoice = Bll_City::isChoiceCity($cityID);
     $objRequest->set_attribute('isChoice', $isChoice);
     $objRequest->set_attribute('fixedProInfosCnt', $fixedProInfosCnt);
     $objRequest->set_attribute('proList', $proList);
     return 'Showcase_EsfManage';
 }
Пример #8
0
 public function handle_request()
 {
     $adConsumeList = $this->getRequestData();
     $sengMail = array();
     $i = $id = 0;
     foreach ($adConsumeList as $adConsumeVal) {
         $id = $adConsumeVal->id;
         $sengMail[$i]['brokerId'] = $adConsumeVal->brokerId;
         $sengMail[$i]['dateIndex'] = $adConsumeVal->dateIndex;
         ++$i;
         $this->createTime = time();
         $updateConsumeArr = array();
         $oldStatus = $adConsumeVal->status;
         /*
          *1.设置ad_consume.status = 1,为正在处理中  更新ad_consume为处理状态(更新失败,跳出继续执行下一跳数据)
          */
         $check = Bll_Broker_ShowcaseConsumeQuery::getInstance()->updateConsumeInfo($this->consumeDateIndex, array('id' => $adConsumeVal->id, 'status' => $this->consumeStatus), array('status' => 1), $this->_dateBase);
         if ($check['status'] == false) {
             $this->callBackOldStatus($adConsumeVal, $oldStatus);
             continue;
         }
         /*
          * 2.判断欠费表是否已经存在,如果存在则执行下一条
          */
         $tmpArrearageData = Bll_Broker_ShowcaseArrearageQuery::getInstance()->getDataByBrokerIdAndDateIndex($adConsumeVal->brokerId, $this->consumeDateIndex, $this->_dateBase);
         if (!empty($tmpArrearageData)) {
             $this->callBackOldStatus($adConsumeVal, $oldStatus);
             continue;
         }
         /*
          * 3.更新相关数据
          */
         // 判断 request_id 值是否存在,否则更新
         if (empty($adConsumeVal->requestId)) {
             // 生存requestId,并保存
             $requestId = Bll_Broker_ShowcaseConsumeQuery::getInstance()->getPayMentRequestId($adConsumeVal->id, $adConsumeVal->dateIndex, $this->_dateBase);
             $updateConsumeArr['requestId'] = $requestId;
             $adConsumeVal->requestId = $requestId;
         }
         // 判断 price是否存在,否则则更新
         if (empty($adConsumeVal->price)) {
             $tmpArr = array('cityId' => $adConsumeVal->cityId, 'status' => 1, 'startDate' => $this->consumeDateIndex);
             $tmpCityPrice = Bll_Broker_ConfigCityPrice::getInstance()->getCityPrice($tmpArr, $this->_dateBase);
             if ($tmpCityPrice) {
                 $updateConsumeArr['price'] = $tmpCityPrice->discountPrice > 0 ? $tmpCityPrice->discountPrice : 0;
                 $adConsumeVal->price = $updateConsumeArr['price'];
             }
         }
         // 判断昨日推广房源是否存在
         if (empty($adConsumeVal->houseNum)) {
             $yesterdayPropData = Bll_Broker_ShowcaseAdSetPro::getInstance()->getBrokerHouses($adConsumeVal->brokerId, $this->consumeDateIndex, $this->_dateBase);
             if ($yesterdayPropData <= 0) {
                 $updateConsumeArr['status'] = 2;
                 $this->updateAdConsumeLogTable($adConsumeVal, $updateConsumeArr, 1, '', '无主推房源');
                 continue;
             } else {
                 $updateConsumeArr['houseNum'] = $yesterdayPropData;
                 $adConsumeVal->houseNum = $yesterdayPropData;
             }
         }
         // 更新balance
         $userId = Bll_Broker_BrokerCheckInfo::getUserIdByBrokerId($adConsumeVal->brokerId, $this->_dateBase);
         $balance = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerMoney($userId);
         $balance = $balance * 100;
         $this->updateAdConsumeLogTable($adConsumeVal, $updateConsumeArr, 1);
         /*
          * 插入欠费表
          */
         $this->insertArrearage($adConsumeVal, $balance, $this->consumeStatus);
         /*
          * 执行结束
          */
         $this->callBackOldStatus($adConsumeVal, $oldStatus);
     }
     // 设置游标
     $this->setMyFlag($id);
     $this->sengDeal($sengMail);
 }
Пример #9
0
 /**
  * 1. 置为无效
  * 2. 更新enddate
  * 3. 记录操作日志
  * @param $task
  */
 public function dealTask($task)
 {
     $updateResult = Bll_Broker_ShowcaseOrders::getInstance()->updateOrderInfo(array('id' => $task['id']), array('isStop' => Const_ShowcaseOrders::EXPIRE_ORDER, 'status' => Const_ShowcaseOrders::STATUS_INVALID, 'endDate' => date('Ymd', strtotime('-1 day'))), $this->dataBase);
     printf('订单[%s]: id: %s 置为无效%s' . PHP_EOL, $this->dataBase, $task['id'], $updateResult['status'] ? '成功' : '失败');
     // 记录ad_set_log日志
     $adSetLogArr = array('brokerId' => $task['brokerId'], 'cityId' => $task['cityId'], 'totalDays' => (int) ((time() - strtotime($task['startDate'])) / 86400), 'startDate' => $task['startDate'], 'endDate' => date('Ymd', strtotime('-1 day')), 'opType' => Const_ShowcaseOrders::OPTYPE_8, 'createTime' => $task['createTime']);
     Bll_Broker_ShowcaseOrders::getInstance()->insertSetLog($adSetLogArr, $this->dataBase);
 }
Пример #10
0
 /**
  * @param $task
  * @return bool
  */
 public function dealTask($task)
 {
     $brokerId = $task['brokerId'];
     //获取订单信息
     $brokerOrderInfo = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerOrders(array('brokerId' => $brokerId), $this->_dataBase);
     if (empty($brokerOrderInfo)) {
         printf('[%s] remark: %s' . PHP_EOL, date('Y-m-d H:i:s'), '经纪人' . $brokerId . '还没有购买橱窗');
         return true;
     }
     // 判断该经纪人橱窗是否过期
     if ($this->currentYMD > $brokerOrderInfo['endDate']) {
         printf('[%s] remark: %s' . PHP_EOL, date('Y-m-d H:i:s'), '经纪人' . $brokerId . '购买的橱窗已过期');
         return true;
     }
     //TODO 查询该经纪人当前推广房源数是否小于0
     if ($this->_dataBase == Const_ShowcaseOrders::SALE_DB) {
         $comboList = Bll_Combo_HouseRelation::getHouseRelations($brokerId, Bll_Combo_HouseRelation::SITE_TYPE_AJK, 1);
     } else {
         $comboList = Bll_Combo_HouseRelation::getHouseRelations($brokerId, Bll_Combo_HouseRelation::SITE_TYPE_HZ, 1);
     }
     if (empty($comboList)) {
         printf('[%s] remark: %s' . PHP_EOL, date('Y-m-d H:i:s'), '经纪人' . $brokerId . '当前还没有推广房源');
         return true;
     }
     //判断该经纪人当天是否已经扣费
     //default没有扣费记录
     $requestTimes = 0;
     $siteType = 1;
     if ($this->_dataBase == Const_ShowcaseOrders::RENT_DB) {
         $siteType = 2;
     }
     $condition = array('brokerId' => $brokerId, 'siteType' => $siteType, 'consumeDate' => $this->currentYMD);
     $limit = 1;
     $sort = array('id', 'desc');
     $brokerConsumeInfo = Bll_Broker_ShowcaseAdConsumeQueue::getBrokerIsConsume($condition, $limit, $sort);
     //有扣费记录
     if (!empty($brokerConsumeInfo)) {
         //待扣费
         if ($brokerConsumeInfo['status'] == 0) {
             printf('[%s] remark: %s' . PHP_EOL, date('Y-m-d H:i:s'), '经纪人' . $brokerId . '橱窗待扣费');
             return true;
         } elseif ($brokerConsumeInfo['status'] == 3) {
             //已经扣费
             printf('[%s] remark: %s' . PHP_EOL, date('Y-m-d H:i:s'), '经纪人' . $brokerId . '橱窗已经扣费');
             return true;
         } elseif ($brokerConsumeInfo['status'] == 2) {
             //扣费失败
             printf('[%s] remark: %s' . PHP_EOL, date('Y-m-d H:i:s'), '经纪人' . $brokerId . '橱窗扣费调用api失败');
             return true;
         } elseif ($brokerConsumeInfo['status'] == 1) {
             //余额不足,继续写入扣费记录
             $requestTimes = $brokerConsumeInfo['requestTimes'] + 1;
         }
     }
     //获取扣费price
     $tmpArr = array('cityId' => $task['cityId'], 'status' => 1, 'startDate' => $this->currentYMD);
     $tmpCityPrice = Bll_Broker_ConfigCityPrice::getInstance()->getCityPrice($tmpArr, $this->_dataBase);
     if ($tmpCityPrice) {
         $cityPrice = $tmpCityPrice->discountPrice > 0 ? $tmpCityPrice->discountPrice : 0;
     }
     if (empty($cityPrice)) {
         printf('[%s] remark: %s' . PHP_EOL, date('Y-m-d H:i:s'), '经纪人' . $brokerId . '橱窗扣费价格为0');
         return true;
     }
     // 写扣费记录
     $adConsumeArr = array('brokerId' => $brokerId, 'amount' => $cityPrice, 'consumeDate' => $this->currentYMD, 'status' => 0, 'siteType' => $siteType, 'requestTimes' => $requestTimes, 'createTime' => time());
     Bll_Broker_ShowcaseAdConsumeQueue::dataInsert($adConsumeArr);
     printf('[%s] remark: %s' . PHP_EOL, date('Y-m-d H:i:s'), '经纪人' . $brokerId . '橱窗扣费记录插入成功,请求次数:' . $requestTimes);
     return true;
 }
Пример #11
0
 /**
  * 停止橱窗,记录ad_set_log日志
  * @param $task
  * @param $siteType
  * @param $cityId
  * @return bool
  */
 public function stopShowCase($task, $siteType, $cityId)
 {
     //判断是否存在橱窗订单
     $brokerOrderInfo = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerOrders(array('brokerId' => $task['brokerId']), $siteType);
     if (empty($brokerOrderInfo)) {
         $this->setLog(sprintf('[%s] remark: %s', date('Y-m-d H:i:s'), '经纪人' . $task['brokerId'] . '还没有购买橱窗'));
         return true;
     }
     //停止橱窗
     $updateResult = Bll_Broker_ShowcaseOrders::getInstance()->updateOrderInfo(array('brokerId' => $task['brokerId']), array('isStop' => Const_ShowcaseOrders::EXPIRE_ORDER, 'status' => Const_ShowcaseOrders::STATUS_INVALID, 'endDate' => date('Ymd', strtotime('-1 day'))), $siteType);
     $this->setLog(sprintf("[%s]橱窗扣费记录: id: %s 扣费%s", $siteType, $task['id'], $updateResult['status'] ? '成功' : '失败'));
     // 记录ad_set_log日志
     $adSetLogArr = array('brokerId' => $task['brokerId'], 'cityId' => $cityId, 'totalDays' => (int) ((time() - strtotime($brokerOrderInfo['startDate'])) / 86400), 'startDate' => $brokerOrderInfo['startDate'], 'endDate' => date('Ymd', strtotime('-1 day')), 'opType' => Const_ShowcaseOrders::OPTYPE_10, 'createTime' => $task['createTime']);
     Bll_Broker_ShowcaseOrders::getInstance()->insertSetLog($adSetLogArr, $siteType);
 }
Пример #12
0
 public function handle_request()
 {
     $list = Bll_Broker_ShowcaseArrearageQuery::getInstance()->getBrokerSumList($this->_lastAdSetId, $this->_dateBase);
     //$list = Bll_Broker_ShowcaseArrearageQuery::getInstance()->getBrokerSumList(0,$this->_dateBase);
     if ($list) {
         foreach ($list as $val) {
             $this->setMyFlag($val['broker_id']);
             $data = array('brokerId' => $val['broker_id']);
             $orderinfo = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerOrders($data, $this->_dateBase);
             if ($orderinfo) {
                 $lavedays = ceil((strtotime($orderinfo->endDate) - strtotime(date('Ymd'))) / 3600 / 24);
                 $brokerInfo = new Model_Broker_AjkBrokerExtend();
                 $info = $brokerInfo->getDataByBrokerId($val['broker_id']);
                 $tmp = array('cityId' => $info['cityId'], 'status' => 1, 'startDate' => date('Ymd'));
                 $cityPrice = Bll_Broker_ConfigCityPrice::getInstance()->getCityPrice($tmp, $this->_dateBase);
                 $isComboCity = $this->isComboCity($orderinfo->cityId);
                 if ($isComboCity['code'] == 200) {
                     if ($isComboCity['data']) {
                         if ($val['cnt'] >= 1) {
                             if ($orderinfo->isStop == 0 && $lavedays > 0) {
                                 $stopstatus = Bll_Broker_ShowcaseOrders::getInstance()->stopBrokerOthersAuto($orderinfo, $cityPrice->discountPrice, $this->_dateBase);
                                 if (!$stopstatus['status']) {
                                     $this->getError($this->_dateBaseName, $val['broker_id']);
                                 }
                             }
                         }
                     } else {
                         if ($val['cnt'] >= 7) {
                             if ($orderinfo->isStop == 0 && $lavedays > 0) {
                                 $stopstatus = Bll_Broker_ShowcaseOrders::getInstance()->stopBrokerOthersAuto($orderinfo, $cityPrice->discountPrice, $this->_dateBase);
                                 if (!$stopstatus['status']) {
                                     $this->getError($this->_dateBaseName, $val['broker_id']);
                                 }
                             }
                         }
                     }
                 }
             }
             /*
             if($val['cnt']>=7){
                 $data = array('brokerId'=>$val['broker_id']);
                 $orderinfo = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerOrders($data,$this->_dateBase);
                 if($orderinfo){
                     $lavedays = ceil((strtotime($orderinfo->endDate)-strtotime(date('Ymd')))/3600/24);
                     if($orderinfo->isStop==0 && $lavedays > 0 ){
                         $brokerInfo =new Model_Broker_AjkBrokerExtend();
                         $info = $brokerInfo->getDataByBrokerId($val['broker_id']);
                         $tmp = array('cityId'=>$info['cityId'],'status'=>1,'startDate'=>date('Ymd'));
             
                         $cityPrice = Bll_Broker_ConfigCityPrice::getInstance()->getCityPrice($tmp,$this->_dateBase);
                         $stopstatus = Bll_Broker_ShowcaseOrders::getInstance()->stopBrokerOthers($orderinfo,$cityPrice->discountPrice,$this->_dateBase);
                         if(!$stopstatus['status']){
                             $mailSubject = date('Ymd').$this->_dateBaseName.'停止订单出错问题';
                             $mailBody    =$this->_dateBaseName.'的二手房经纪人id:'.$val['broker_id'];
                             Bll_Broker_ShowcaseCommon::getInstance()->sendMail($mailSubject,$mailBody,$this->mailArr);
                         }
                     }
                 }
             }
             */
         }
     } else {
         $this->setMyFlag($this->getLastJobId(), 'over');
         $mailSubject = $this->yDate . $this->subject;
         $mailBody = $mailSubject . "完成 完成时间:" . date("Y-m-d H:i:s", time());
         Bll_Broker_ShowcaseCommon::getInstance()->sendMail($mailSubject, $mailBody, $this->mailArr);
         $this->setShStopFlag();
         exit;
     }
 }
Пример #13
0
 /**
  * 获取需要跑的数据
  * @return array
  */
 public function getRequestData()
 {
     $data = Bll_Broker_ShowcaseOrders::getInstance()->getDataByBiggerThanId($this->_lastAdSetId, array(0, 1, 2), 'id', 'asc', 0, $this->_limit, $this->_dateBase);
     if (empty($data)) {
         // 发生邮件通知
         $mailSubject = $this->yDate . $this->subject;
         $mailBody = $mailSubject . "完成 完成时间:" . date("Y-m-d H:i:s", time());
         $this->setMyFlag($this->getLastJobId(), 'over');
         Bll_Broker_ShowcaseCommon::getInstance()->sendMail($mailSubject, $mailBody, $this->mailArr);
         //$this->textOutput('',"已经没有待处理数据了",false);
         $this->setShStopFlag();
         exit;
     } else {
         return $data;
     }
 }
Пример #14
0
 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';
 }
Пример #15
0
 /**
  * 判断有没套餐推广
  * 没有则返钱
  * @param $task
  * @return bool
  */
 public function dealTask($task)
 {
     $brokerId = $task['brokerId'];
     // 判断这天有没套餐推广记录
     $yesterdayComboPropData = Bll_Broker_ShowcaseAdSetPro::getInstance()->getComboBrokerHouses($brokerId, $this->returnDay, $this->_dataBase);
     if ($yesterdayComboPropData > 0) {
         printf('[%s] remark: %s' . PHP_EOL, date('Y-m-d H:i:s'), '经纪人' . $brokerId . '已经推广了套餐房源,不需要返钱');
         return true;
     }
     if ($task['status'] == 4) {
         // 欠费
         $opType = Const_ShowcaseOrders::OPTYPE_4;
         $updateArreargeResult = Bll_Broker_ShowcaseArrearageQuery::getInstance()->updateOneData(array('dateIndex' => $this->returnDay, 'brokerId' => $brokerId), array('status' => 4), $this->_dataBase);
         printf('经纪人[%s]: 更新欠费队列:%s' . PHP_EOL, $brokerId, $updateArreargeResult ? '成功' : '失败');
     } else {
         $opType = Const_ShowcaseOrders::OPTYPE_9;
         // 二手房 1331
         // 好租   1371
         if ($this->_dataBase == Const_ShowcaseOrders::RENT_DB) {
             $type = 1371;
             $msg = '租房';
         } else {
             $type = 1331;
             $msg = '二手房';
         }
         try {
             // 返钱
             $addQueueResult = BLL_Payment_AjkPpccoinQueen::addReturnQueue($brokerId, $task['cityId'], $type, $task['price'], $msg . '橱窗未展示退费');
         } catch (Exception $e) {
             $addQueueResult = false;
         }
         printf('经纪人[%s]: 返钱:%s' . PHP_EOL, $brokerId, $addQueueResult ? '成功' : '失败');
     }
     // 记录ad_set_log日志
     $adSetLogArr = array('brokerId' => $task['brokerId'], 'cityId' => $task['cityId'], 'totalDays' => (int) ((time() - strtotime($task['startDate'])) / 86400), 'startDate' => $task['startDate'], 'endDate' => date('Ymd', strtotime('-1 day')), 'opType' => $opType, 'createTime' => $task['createTime']);
     Bll_Broker_ShowcaseOrders::getInstance()->insertSetLog($adSetLogArr, $this->_dataBase);
     return true;
 }
Пример #16
0
 /**
  * 抢委托操作流程
  * @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;
 }
Пример #17
0
 public function handle_request()
 {
     //获取游标
     $flag = $this->getFlag();
     $flag = empty($flag[0]) ? 0 : $flag[0];
     //经纪人最大brokerId
     $maxBrokerId = $this->getMaxBrokerId();
     //每次读取数据最大brokerId
     $nextBrokerId = $flag + $this->limit;
     //开通好盘经纪人信息
     $HaopanBrokerInfos = $this->getBrokerInfos($flag, $nextBrokerId, $this->limit);
     //经纪人已经全部跑完
     if (empty($HaopanBrokerInfos) && $nextBrokerId >= $maxBrokerId) {
         $this->setLog('Job over--' . date("Ymd H:i:s") . '!!');
         $this->setStop();
         exit;
     } elseif (empty($HaopanBrokerInfos)) {
         $flag = $nextBrokerId;
     } else {
         foreach ($HaopanBrokerInfos as $info) {
             $flag = $info['brokerId'];
             //过滤数据
             $filter = $this->filter($info['brokerId']);
             if ($filter == false) {
                 continue;
             }
             //获取账户余额
             $brokerAccount = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerMoney($info['userId']);
             $brokerAccount = $brokerAccount * 100;
             if (empty($brokerAccount) || $brokerAccount <= 0) {
                 $this->setLog('经纪人 ' . $info['brokerId'] . ' 账户余额不足,不操作--' . date("Ymd H:i:s") . '!!');
                 continue;
             }
             $FeedecutionSum = $this->getHaopanFeedecutionsum($info["brokerId"], $this->month);
             $feeResult = $this->feedeductionTotal - $FeedecutionSum;
             if ($feeResult > 0) {
                 $feeAccount = min($brokerAccount, $feeResult);
                 $reqId = date('Ymd') . mt_rand(1000, time());
                 //                    $reqId = Bll_Broker_EntrustConsume::getInstance()->getPayMentRequestId($info["brokerId"],date('Ymd'));
                 $this->insertHaopanFeedecutionInfo($info["brokerId"], $this->month, $feeAccount, $reqId);
                 //余额足够,调用扣费API
                 $apiResult = $this->callCosumeApi($info['userId'], $reqId, $feeAccount, $this->note);
                 // 扣费成功
                 if ($apiResult['status'] == true) {
                     $status = 1;
                     $content = '经纪人 ' . $info["brokerId"] . ' 扣费 ' . $feeAccount . ' 元成功--' . date("Ymd H:i:s") . '!!';
                 } else {
                     // 扣费失败
                     $status = 2;
                     $content = '经纪人 ' . $info["brokerId"] . ' 插入扣费信息失败--' . date("Ymd H:i:s") . '!!';
                     $this->throwError($content);
                 }
                 $this->updateHaopanFeedecutionInfo($status, $reqId, json_encode($apiResult['apiData']));
                 $this->setLog($content);
             } else {
                 $this->setLog('经纪人 ' . $info["brokerId"] . ' 本月扣费已足够--' . date("Ymd H:i:s") . '!!');
             }
         }
     }
     $this->setFlag(array($flag));
 }
Пример #18
0
 public function dealTask($task)
 {
     $brokerId = $task['brokerId'];
     $createTime = date('Ymd', $task['createTime']);
     //获取订单信息
     $brokerOrderInfo = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerOrders(array('brokerId' => $brokerId), $this->_dataBase);
     if (empty($brokerOrderInfo)) {
         $this->setLog(sprintf('[%s] remark: %s', date('Y-m-d H:i:s'), '经纪人' . $brokerId . '还没有购买橱窗'));
         return true;
     }
     // 判断该经纪人橱窗是否过期
     if ($createTime > $brokerOrderInfo['endDate']) {
         $this->setLog(sprintf('[%s] remark: %s', date('Y-m-d H:i:s'), '经纪人' . $brokerId . '还购买的橱窗已过期'));
         return true;
     }
     //判断该经纪人当天是否已经扣费
     //default没有扣费记录
     $requestTimes = 0;
     $siteType = 1;
     if ($this->_dataBase == Const_ShowcaseOrders::RENT_DB) {
         $siteType = 2;
     }
     $condition = array('brokerId' => $brokerId, 'siteType' => $siteType, 'consumeDate' => $createTime);
     $limit = 1;
     $sort = array('id', 'desc');
     $brokerConsumeInfo = Bll_Broker_ShowcaseAdConsumeQueue::getBrokerIsConsume($condition, $limit, $sort);
     //有扣费记录
     if (!empty($brokerConsumeInfo)) {
         //待扣费
         if ($brokerConsumeInfo['status'] == 0) {
             $this->setLog(sprintf('[%s] remark: %s', date('Y-m-d H:i:s'), '经纪人' . $brokerId . '橱窗待扣费'));
             return true;
         } elseif ($brokerConsumeInfo['status'] == 3) {
             //已经扣费
             $this->setLog(sprintf('[%s] remark: %s', date('Y-m-d H:i:s'), '经纪人' . $brokerId . '橱窗已经扣费'));
             return true;
         } elseif ($brokerConsumeInfo['status'] == 2) {
             //扣费失败
             $this->setLog(sprintf('[%s] remark: %s', date('Y-m-d H:i:s'), '经纪人' . $brokerId . '橱窗扣费调用api失败'));
             return true;
         } elseif ($brokerConsumeInfo['status'] == 1) {
             //余额不足,继续写入扣费记录
             $requestTimes = $brokerConsumeInfo['requestTimes'] + 1;
         }
     }
     //获取扣费price
     $tmpArr = array('cityId' => $task['cityId'], 'status' => 1, 'startDate' => $createTime);
     $tmpCityPrice = Bll_Broker_ConfigCityPrice::getInstance()->getCityPrice($tmpArr, $this->_dataBase);
     if ($tmpCityPrice) {
         $cityPrice = $tmpCityPrice->discountPrice > 0 ? $tmpCityPrice->discountPrice : 0;
     }
     if (empty($cityPrice)) {
         $this->setLog(sprintf('[%s] remark: %s', date('Y-m-d H:i:s'), '经纪人' . $brokerId . '橱窗扣费价格为0'));
         return true;
     }
     // 写扣费记录
     $adConsumeArr = array('brokerId' => $brokerId, 'amount' => $cityPrice, 'consumeDate' => $createTime, 'status' => 0, 'siteType' => $siteType, 'requestTimes' => $requestTimes, 'createTime' => time());
     Bll_Broker_ShowcaseAdConsumeQueue::dataInsert($adConsumeArr);
     $this->setLog(sprintf('[%s] remark: %s', date('Y-m-d H:i:s'), '经纪人' . $brokerId . '橱窗扣费记录插入成功,请求次数:' . $requestTimes));
     return true;
 }
Пример #19
0
 /**
  * 开始处理数据
  */
 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;
 }
Пример #20
0
 public function handle_request()
 {
     $arrearageList = $this->getRequestData();
     foreach ($arrearageList as $arrearageVal) {
         $tmpAdConsumeData = array();
         $this->createTime = time();
         $updateArrearageArr = array();
         $apiData = $otherData = '';
         /*
          *1.设置status = 1,为正在处理中  更新为处理状态(更新失败,跳出继续执行下一跳数据)
          */
         $check = Bll_Broker_ShowcaseArrearageQuery::getInstance()->updateOneData(array('id' => $arrearageVal->id, 'status' => array(0, 2)), array('status' => 1), $this->_dateBase);
         if (empty($check)) {
             continue;
         }
         $arrearageVal->add_old_property_value('status', 1);
         /*
          * 2. 获取账户余额
          */
         $userId = Bll_Broker_BrokerCheckInfo::getUserIdByBrokerId($arrearageVal->brokerId, $this->_dateBase);
         $balance = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerMoney($userId);
         $balance = $balance * 100;
         $updateArrearageArr['balance'] = $balance;
         if ($balance < $arrearageVal->price) {
             // 余额不足,插入消费日志
             $otherData = '余额不足';
             $updateArrearageArr['status'] = 2;
         } else {
             /*
              * 3.余额足够,调用扣费API
              */
             $apiResult = Bll_Broker_ShowcaseConsumeQuery::getInstance()->callCosumeApi($userId, $arrearageVal->requestId, $arrearageVal->price, $arrearageVal->dateIndex, $this->_dateBase);
             // 扣费成功
             if ($apiResult['status'] === true) {
                 $updateArrearageArr['status'] = 3;
                 $otherData = '扣费成功';
                 $apiData = $apiResult['apiData'];
                 /*********仅20140630号数据*********/
                 if ($arrearageVal->dateIndex == 20140630 && substr($arrearageVal->requestId, 2, 3) == 496) {
                     $tmpAdConsumeData = Bll_Broker_ShowcaseConsumeQuery::getInstance()->getDataById($arrearageVal->consumeId, 20140701, $this->_dateBase);
                     if ($tmpAdConsumeData) {
                         $adConsumeData = $tmpAdConsumeData[0];
                         $adConsumeData->balance = $balance;
                         $adConsumeData->status = 7;
                         $adConsumeData->updateTime = date("Y-m-d H:i:s", time());
                         $adConsumeData->save();
                     }
                 } else {
                     // 更新adconsume表状态
                     $tmpAdConsumeData = Bll_Broker_ShowcaseConsumeQuery::getInstance()->getDataById($arrearageVal->consumeId, $arrearageVal->dateIndex, $this->_dateBase);
                     if ($tmpAdConsumeData) {
                         $adConsumeData = $tmpAdConsumeData[0];
                         $adConsumeData->balance = $balance;
                         $adConsumeData->status = 7;
                         $adConsumeData->updateTime = date("Y-m-d H:i:s", time());
                         $adConsumeData->save();
                     }
                 }
             } else {
                 // 扣费失败
                 $updateArrearageArr['status'] = 2;
                 $otherData = '扣费失败';
             }
         }
         $this->updateArrearageTable($arrearageVal, $updateArrearageArr, $apiData, $otherData);
     }
 }
Пример #21
0
 public function handle_request()
 {
     $queryList = $this->getRequestData();
     if (!empty($queryList)) {
         foreach ($queryList as $val) {
             /*
              *1.Start 设置status = 1,为正在处理中  更新队列为处理状态(更新失败,跳出继续执行下一跳数据)
              */
             $check = Bll_Broker_EntrustQuery::getInstance()->updateQueryInfo(array('id' => $val->id, 'status' => array(0, 2)), array('status' => 1));
             if ($check['status'] == false) {
                 continue;
             }
             $val->add_old_property_value('status', 1);
             /*
              * 2.验证经纪人是否抢到房源
              */
             $commission = $this->getCommissionDataById($val->commissionId);
             if (!$commission) {
                 // 更新status=2,并报警
                 $this->updateQueryTable($val, 2);
                 continue;
             }
             // 获取房东房源信息
             $house = $this->getCommissionProPDataById($commission->houseId);
             if (!$house) {
                 // 更新status=2,并报警
                 $this->updateQueryTable($val, 2);
                 continue;
             }
             /*
              * 3.验证 entrust_consume_sale 是否已经存在,存在则执行下一条;不存在,则插入
              */
             $tmpConsumeSale = Bll_Broker_EntrustConsume::getInstance()->getDataByCommissionId($commission->id, $val->dateIndex, true);
             if (!empty($tmpConsumeSale)) {
                 $this->updateQueryTable($val, 3);
                 continue;
             }
             // 获取委托价格
             if (!empty($this->_city_price[$val->cityId])) {
                 $cityPrice = $this->_city_price[$val->cityId];
             } else {
                 $startDate = date("Ymd");
                 $cityPrice = Bll_Broker_EntrustPrice::getInstance()->getSalePrice($val->cityId, $startDate);
                 $this->_city_price[$val->cityId] = $cityPrice;
             }
             // 判断如果价格是否为0
             if ($cityPrice == 0) {
                 // 报警处理,发送短信
                 $content = "委托扣费异常,cityPrice为0,异常QueryId为:" . $val->id . ";城市id:" . $val->cityId;
                 Bll_Broker_ShowcaseCommon::getInstance()->sendAlertMsg($this->mobileArr, $content);
                 continue;
             }
             // 插入一条数据,并获得结果
             $consumeData = $this->addConsume($val, $commission, $cityPrice);
             if (empty($consumeData)) {
                 $this->updateQueryTable($val, 2);
                 continue;
             }
             // 更新request_id
             $requestId = Bll_Broker_EntrustConsume::getInstance()->getPayMentRequestId($consumeData->id, $consumeData->dateIndex);
             $consumeData->requestId = $requestId;
             $consumeData->save();
             /*
              * 4.开始扣费
              */
             $userId = Bll_Broker_BrokerCheckInfo::getUserIdByBrokerId($commission->brokerId, 'sale');
             $commName = mb_strlen($house->commName, "utf-8") <= 12 ? $house->commName : mb_substr($house->commName, 0, 12, "utf-8") . "...";
             $note = "抢委托扣费,房源信息:" . $commName . " " . $house->userName . "(房源id" . $house->id . ")";
             $apiResult = Bll_Broker_EntrustConsume::getInstance()->callCosumeApi($userId, $requestId, $cityPrice, $note);
             // 扣费成功
             if ($apiResult['status'] === true) {
                 $apiData = $apiResult['apiData'];
                 if (!empty($apiData)) {
                     if (!empty($apiData['response'])) {
                         if (!empty($apiData['response']['data'])) {
                             if (!empty($apiData['response']['data']['account'])) {
                                 $afterBalance = $apiData['response']['data']['account']['balance'];
                             }
                         }
                     }
                 }
                 //  更新entrust_consume_sale表状态,并插入详细日志
                 $updateArr = array('status' => 4, 'balance' => $afterBalance + $cityPrice);
                 $this->updateEntrustConsumeSaleTable($consumeData, $updateArr, 1, $apiResult['apiData'], '扣费成功');
             } else {
                 //  更新entrust_consume_sale表状态,并插入详细日志
                 $balance = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerMoney($userId);
                 $balance = $balance * 100;
                 // 转化成分
                 $updateArr = array('status' => 3, 'balance' => $balance);
                 $this->updateEntrustConsumeSaleTable($consumeData, $updateArr, 1, $apiResult['apiData'], '调用API扣费,扣费失败');
                 // 扣费失败,插入欠费
                 $this->insertArrearage($val, $consumeData, $balance, $apiResult['apiData'], '调用API扣费,扣费失败 ' . $apiResult['msg']);
             }
             /*
              * 5.End.
              * 更新query的status=3
              */
             $this->updateQueryTable($val, 3);
         }
     }
 }
Пример #22
0
 /**
  * 每日扣费队列 操作主函数
  * @param $adSetData
  * @param $adConsumeData
  * @param $houseNum
  */
 protected function consumeMainProcess($adSetData, $adConsumeData, $houseNum)
 {
     // 1.先更新status,house_num
     $adConsumeData->status = 1;
     $adConsumeData->houseNum = $houseNum;
     $adConsumeData->updateTime = date("Y-m-d H:i:s", time());
     $adConsumeData->save();
     // 2.获取账户余额
     $userId = Bll_Broker_BrokerCheckInfo::getUserIdByBrokerId($adSetData->brokerId, $this->_dateBase);
     // 3.调用扣费API之前,验证余额是否足够
     $balance = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerMoney($userId);
     $balance = $balance * 100;
     // 转化成分
     //$balance  = 200;
     if ($balance < $adConsumeData->price) {
         // 3.1 余额不足,插入欠费队列
         $this->insertArrearage($adSetData, $adConsumeData, $balance, 4, '', '未调用扣费API之前,余额不足');
     } else {
         // 3.2 余额足够,调用扣费API
         $apiResult = Bll_Broker_ShowcaseConsumeQuery::getInstance()->callCosumeApi($userId, $adConsumeData->requestId, $adConsumeData->price, $adConsumeData->dateIndex, $this->_dateBase);
         // 3.2.1 扣费成功
         if ($apiResult['status'] === true) {
             $updateArr = array('status' => 6, 'balance' => $balance);
             $this->updateAdConsumeLogTable($adConsumeData, $updateArr, 1, $apiResult['apiData'], '扣费成功');
         } else {
             // 3.2.2 扣费失败,插入欠费队列
             $this->insertArrearage($adSetData, $adConsumeData, $balance, 5, $apiResult['apiData'], '调用API扣费,扣费失败 ' . $apiResult['msg']);
         }
     }
 }
Пример #23
0
 /**
  * 获取job数据
  * @return array
  */
 protected function getJobData()
 {
     return Bll_Broker_ShowcaseOrders::getInstance()->getOverTimeMoreThanId($this->id, $this->limit, $this->jobType);
 }