/** * 表单处理函数 * @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(); } }
/** * 获取经纪人账户存在 * [GetBrokerEsfPro description] */ private function getBrokerMoney() { $balance = Bll_Broker_ShowcaseOrders::getInstance()->getBrokerMoney($this->userId); if (!empty($_SERVER['XIONGJIEWU_TEST'])) { $balance = 10000; } $this->outData($balance, 1); }
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'; }
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; }
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); } } }
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); }
/** * 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); }
/** * @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; }
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); } } }
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'; }
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; } }
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'; }
/** * 判断有没套餐推广 * 没有则返钱 * @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; }
/** * 抢委托操作流程 * @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; }
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)); }
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; }
/** * 停止橱窗,记录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); }
/** * 获取需要跑的数据 * @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; } }
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); } }
/** * 开始处理数据 */ 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; }
/** * 每日扣费队列 操作主函数 * @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']); } } }
/** * 获取job数据 * @return array */ protected function getJobData() { return Bll_Broker_ShowcaseOrders::getInstance()->getOverTimeMoreThanId($this->id, $this->limit, $this->jobType); }