/** * 手动暂停金铺经纪人的定价计划 * * @param int $jpBrokerId * @param int $cityId * @param array $fixPlan */ private function stopJpFixPlan($jpBrokerId, $cityId, $fixPlan) { try { $ajkBrokerId = Bll_Broker_User::getAjkBrokerIdByJpBrokerId($jpBrokerId); } catch (Exception $e) { $this->logMsg($e->getMessage()); return; } $this->logMsg(sprintf('经纪人[%d - %d - %d]金铺的定价计划,处理开始。', $cityId, $ajkBrokerId, $jpBrokerId)); $this->logMsg(sprintf('经纪人[%d - %d - %d]定价计划[%d - %d - %d]状态。', $cityId, $ajkBrokerId, $jpBrokerId, $fixPlan['id'], $fixPlan['status'], $fixPlan['stopReason'])); $data = array('houseId' => 0, 'planId' => 0, 'brokerId' => $ajkBrokerId, 'cityId' => $cityId, 'type' => 207, 'remark' => '切新端口,暂停定价计划', 'flag' => 0, 'addDate' => time(), 'dealRemark' => '', 'operateId' => 0, 'from' => __METHOD__, 'siteType' => 3); $this->logMsg(json_encode($fixPlan)); if (false == Bll_Plan_Fix_JpPlan::stopPlanByHand($fixPlan['id'])) { $this->logMsg(sprintf('经纪人[%d - %d - %d]定价计划[%d - %d]手动暂停失败。', $cityId, $ajkBrokerId, $jpBrokerId, $fixPlan['id'], $fixPlan['stopReason'])); return; } $this->logMsg(sprintf('经纪人[%d - %d - %d]定价计划[%d - %d]手动暂停成功。', $cityId, $ajkBrokerId, $jpBrokerId, $fixPlan['id'], $fixPlan['stopReason'])); if ($fixPlan['status'] == 4) { $this->logMsg(sprintf('经纪人[%d - %d - %d]定价计划[%d - %d]已经停止,不通知上下架。', $cityId, $ajkBrokerId, $jpBrokerId, $fixPlan['id'], $fixPlan['stopReason'])); return; } /** * 记录上下架队列 */ $data['planId'] = $fixPlan['id']; if (!Model_House_UpDown_Task::create($data, date('Ymd'))->save()) { $this->logMsg(sprintf('%s 记录上下架队列失败。', json_encode($data))); } else { $this->logMsg(sprintf('%s 记录上下架队列成功。', json_encode($data))); } $this->logMsg(sprintf('经纪人[%d - %d - %d]金铺的定价计划,处理结束。', $cityId, $ajkBrokerId, $jpBrokerId)); }
public static function getFykStatus($userId, $cityId) { $userInfo = Model_Fyk_Users::data_access()->filter(Model_Fyk_Users::USER_ID, $userId)->get_row(); $isOpen = 0; $status = -1; $message = '未开通房源库功能'; //判断城市开关 $cityInfo = Bll_Fyk_Prop_Manage::getInstance()->getCityConfig($cityId); if (empty($cityInfo)) { $data = array('isOpen' => 0, 'status' => -1, 'message' => '未开通房源库功能'); return $data; } if (!empty($userInfo)) { $isOpen = 1; $openDate = intval($userInfo['openDate']); $today = intval(date('Ymd', time())); if ($userInfo['status'] == Model_Fyk_Users::INIT) { $message = '房源库功能尚未激活'; $status = $userInfo['status']; } if ($userInfo['status'] == Model_Fyk_Users::INVITATION) { if ($today >= $openDate) { $message = '房源库功能已经激活'; $status = $userInfo['status']; } else { $message = '您已被关入小黑屋,暂不能使用房源库功能'; $status = Model_Fyk_Users::BLACK; } } } //4.3版本 对之前版本做的兼容处理 if ($status == -1) { $brokerInfo = Bll_Broker_User::getBrokerInfoByUserId($userId); if (!empty($brokerInfo)) { $companyId = intval($brokerInfo['companyId']); if (!empty($_SERVER['PG_TEST'])) { //如果是PG $blackList = APF::get_instance()->get_config('pg_blacklist_company_ids'); $userBlackList = array(); } else { $blackList = APF::get_instance()->get_config('blacklist_company_ids'); $userBlackList = APF::get_instance()->get_config('blacklist_user_ids'); } if (!in_array($companyId, $blackList) && !in_array($userId, $userBlackList)) { //若不在黑名单公司,则显示房源库入口 $isOpen = 1; $status = 0; $message = '房源库功能尚未激活'; } } } // TODO 获取用户激活状态 $data = array('isOpen' => $isOpen, 'status' => $status, 'message' => $message); return $data; }
public function handle_request_internal() { $request = APF::get_instance()->get_request(); $brokerId = $request->getBrokerId(); $userId = $request->getUserId(); $params = $request->get_parameters(); $BrokerServiceObj = new Bll_Service_Broker(); $sq1 = $BrokerServiceObj->getBasicInfo(array('brokerId' => $brokerId)); $replies1 = $BrokerServiceObj->aps_wait_for_replies(); if (empty($replies1)) { apf_require_class("Uri_Http"); Uri_Http::redirect_header('/user/broker/new/brokeremail?type=modify'); } $oldEmail = $replies1[$sq1]['data']['email']; $flag = 0; if ($request->is_post_method()) { $password = Bll_Broker_User::getPasswordByUserId($userId); if (base64_encode(md5($params['password'])) == $password) { $userIdByEmail = Bll_Broker_User::getUserIdByEmail($params['email']); if (empty($userIdByEmail)) { try { //可以更改邮箱 $apsParams = array('brokerId' => $brokerId, 'email' => trim($params['email'])); $sq2 = $BrokerServiceObj->setBasicInfo($apsParams); $replies2 = $BrokerServiceObj->aps_wait_for_replies(); $flag = $replies2[$sq2]['status'] == 'ok' ? Broker_EditEmailController::EDIT_SUCCESS : Broker_EditEmailController::EDIT_ERROR; } catch (Exception $e) { $flag = Broker_EditEmailController::EDIT_ERROR; } } else { //邮箱已经存在 //$flag = $userIdByEmail == $userId ? Broker_EditEmailController::EDIT_ERROR : Broker_EditEmailController::EMAIL_IS_EXIST; $flag = Broker_EditEmailController::EMAIL_IS_EXIST; } } else { if (empty($params['password'])) { $flag = Broker_EditEmailController::PASSWORD_EMPTY; } else { $flag = Broker_EditEmailController::PASSWORD_ERROR; } } $request->set_attribute("newEmail", $params['email']); $request->set_attribute("url", $this->getURL('my', '/ajkbroker/broker/brokerinfo')); } $request->set_attribute("flag", $flag); $request->set_attribute("oldEmail", $oldEmail); return "Broker_EditEmail"; }
public function handle_request_internal() { $userId = $this->_params['userId']; $type = $this->_params['type']; $source = $this->_params['source']; $amount = $this->_params['amount']; //$amount = 1; $userAccoutId = Bll_Fyk_Payment_User::getInstance()->getUserAccountId($userId); if (empty($userAccoutId)) { return array("status" => "error", "errcode" => Const_APIStatus::E_FYK_PROP_ACTION_ACCOUNT_IS_NULL, "message" => "支付中心账户创建失败"); } /*****************创建充值订单**********/ $addArr = array('userId' => $userId, 'accountId' => $userAccoutId, 'price' => $amount, 'payType' => $type, 'status' => Model_Fyk_RechargeOrder::STATUS_NODEAL, 'source' => $source, 'createTime' => time()); $id = Bll_Fyk_Payment_Recharge::getInstance()->insertRechargeOrder($addArr); $tmpData = Bll_Fyk_Payment_Recharge::getInstance()->getRechargeOrderDataById($id); if (empty($id) || empty($tmpData)) { return array("status" => "error", "errcode" => Const_APIStatus::E_UNKNOWN, "message" => "充值插入数据库失败"); } $rechargeOrder = $tmpData[0]; $requestId = Bll_Fyk_Payment_Common::getInstance()->createRequsetId("recharge", $id); $orderNo = Bll_Fyk_Payment_Common::getInstance()->createOrderNo("recharge", $requestId); $this->updateRechargeOrderTable($rechargeOrder, array('orderNo' => $orderNo, 'status' => Model_Fyk_RechargeOrder::STATUS_DEALING)); /*****************生成支付中心充值参数**********/ // 获取ack $tmpAckResult = Bll_Fyk_Payment_Common::getInstance()->getAckValue($userAccoutId); $ack = $tmpAckResult['status'] ? $tmpAckResult['sessionkey'] : ""; $userData = Bll_Broker_User::getBrokerInfoByUserId($userId); $apps = APF::get_instance()->get_config('apps', 'acenter'); $userName = !empty($userData) ? $userData['trueName'] : ''; $orderName = "移动经纪人钱包充值"; $appId = $apps['fyk']['appId']; $backUrl = $this->getBackUrl($id, $userId, $amount); $cityId = !empty($userData) ? $userData['cityId'] : ''; $mobile = !empty($userData) ? $userData['userMobile'] : ''; if (empty($userAccoutId) || empty($ack) || empty($userName) || empty($cityId) || empty($mobile)) { return array('status' => "error", "errcode" => Const_APIStatus::E_PARAM_MISS, "message" => "参数不正确"); } $objApi = new Uri_PayCenterAPI(); $acUrl = $objApi->redirectWabPayCenter($amount / 100, $userAccoutId, $ack, $userName, $orderName, $appId, $backUrl, $orderNo, $cityId, $mobile, $orderNo); return array('status' => "ok", 'data' => array('acUrl' => $acUrl), "message" => "成功"); }
private function moveJpPPCFixPlanRelation($cityId, $jpBrokerId, $fixPlan) { try { $ajkBrokerId = Bll_Broker_User::getAjkBrokerIdByJpBrokerId($jpBrokerId); } catch (Exception $e) { $this->logMsg($e->getMessage()); return; } if ($ajkBrokerId == 0) { $this->logMsg(sprintf('经纪人[%d - %d]没有获取到二手房经纪人ID。', $cityId, $jpBrokerId)); return; } $fixPlanId = $fixPlan['id']; $fixPlanHouseRelationList = Model_House_JpHouseIdx::getHouseInfoByFixPlanIdEx($fixPlanId); if (empty($fixPlanHouseRelationList)) { $this->logMsg(sprintf('经纪人[%d - %d - %d - %d]没有获取到金铺定价计划房源。', $cityId, $ajkBrokerId, $jpBrokerId, $fixPlanId)); return; } foreach ($fixPlanHouseRelationList as $fixPlanHouseRelation) { $comboHouseRelation = Bll_Combo_HouseRelation::getRelationByHouseId($fixPlanHouseRelation['id'], Model_Combo_HouseRelation::SITE_TYPE_JP); if (!empty($comboHouseRelation)) { if ($comboHouseRelation['state'] == Model_Combo_HouseRelation::ENUM_COMBO_EXPIRE) { $this->logMsg(sprintf('房源[%d]的套餐关系存在id[%d],且state==205', $fixPlanHouseRelation['id'], $comboHouseRelation['id'])); continue; } if (1 == Bll_Combo_HouseRelation::updateComboStatusById($comboHouseRelation['id'], Model_Combo_HouseRelation::ENUM_COMBO_EXPIRE, Model_Combo_HouseRelation::SITE_TYPE_JP)) { $this->logMsg(sprintf('房源[%d]的套餐关系存在id[%d],更新成功', $fixPlanHouseRelation['id'], $comboHouseRelation['id'])); } else { $this->logMsg(sprintf('房源[%d]的套餐关系存在id[%d],更新失败', $fixPlanHouseRelation['id'], $comboHouseRelation['id'])); } continue; } $data = array('houseId' => $fixPlanHouseRelation['id'], 'brokerId' => $ajkBrokerId, 'cityId' => $cityId, 'state' => Model_Combo_HouseRelation::ENUM_COMBO_EXPIRE, 'created' => $fixPlanHouseRelation['createTime']); if (1 == Model_Combo_HouseRelation::create($data, Model_Combo_HouseRelation::SITE_TYPE_JP)->save()) { $this->logMsg(sprintf('房源[%d]转移成功', $fixPlanHouseRelation['id'])); } else { $this->logMsg(sprintf('房源[%d]转移失败', $fixPlanHouseRelation['id'])); } } }
private function getBrokerAreaCode($brokerInfo) { if (empty($brokerInfo)) { return 0; } if (!empty($brokerInfo['AREACODE'])) { return strlen($brokerInfo['AREACODE']) >= 8 ? substr($brokerInfo['AREACODE'], 0, 8) : 0; } // 经纪人没有区域,去经纪人对应的门店中获取相应的区域 $brokerCompanyId = $brokerInfo['CST_BROKER_COMPANY_ID']; if (empty($brokerCompanyId)) { return 0; } $brokerCompanyData = Bll_Broker_User::getBrokerCompanyData($brokerCompanyId); if (!empty($brokerCompanyData)) { $tmpCode = !empty($brokerCompanyData[0]['areaCode']) ? $brokerCompanyData[0]['areaCode'] : 0; return strlen($tmpCode) >= 8 ? substr($tmpCode, 0, 8) : 0; } else { return 0; } }
/** * 创建log * @param $logInfo */ private function createLog($logInfo) { if (!$logInfo) { return false; } $accountId = $logInfo['account_id']; //获取用户信息 if (!($accountInfo = BLL_Payment_Account::getAccountMapping($accountId))) { echo 'balbanceLogId=' . $logInfo['id'] . ',获取accountInfo信息失败:$accountId=' . $accountId . PHP_EOL; return false; } $accountInfo = (array) $accountInfo; // 初始参数 $userId = $accountInfo['userId']; $createTime = $logInfo['created_time']; $logDay = date("Ymd", strtotime($createTime)); $amount = $logInfo['amount']; $inTable = false; // 是否写入子表 $isStatic = false; // 是否定价 $logType = $logInfo['log_type']; //只有定价扣费和退费才进子表 //定价扣费 if ($logInfo['log_type'] == 2) { if (in_array($logInfo['appid'], array(26, 47, 48, 30, 40))) { if (in_array($logInfo['appid'], array(30, 40)) && strstr($logInfo['note'], '定价') !== false) { $inTable = true; $isStatic = true; } elseif (in_array($logInfo['appid'], array(26, 47, 48))) { $inTable = true; $isStatic = true; } else { $logType = 8; //竞价 } } else { $logType = 8; //竞价 } } //退费 if ($logInfo['log_type'] == 1 && ($logInfo['parentId'] == $logInfo['orderid'] && intval($logInfo['parentId'] > 0)) && $logInfo['account_id'] == $logInfo['payid']) { $inTable = true; $logType = 7; } $note = $logInfo['note']; // 在线充值 if (substr($note, 0, strlen('from ')) == 'from ') { $note = '在线充值'; } elseif ($logType == 1 && strpos($note, '返还') !== false) { //$note = '活动返还'; } elseif ($logType == 7) { $note = '无效点击扣费返还'; } elseif ($isStatic) { $note = '定价推广消费'; } // 加钱 if (in_array($logType, array(1, 4, 6, 7))) { if (!($broker = Dao_Broker_BrokerInfo::getBrokerInfoByUserId($userId))) { echo 'balbanceLogId=' . $logInfo['id'] . ',获取broker信息失败:userid=' . $userId . PHP_EOL; return false; } $cityId = $broker['CITYID']; $brokerId = $broker['BROKERID']; $isNotify = false; if ($logType == 4) { $result = $this->getBalance($accountInfo); if ($result['status'] == 'ok') { if ($result['data']['balance'] > 0) { $isNotify = true; } } } else { $isNotify = true; } if ($isNotify) { // 通知租房 金浦 //$this->notifyZufang($brokerId, $amount);//20140626 启用新队列 //$this->notifyJinpu($brokerId, $amount);//20140626 启用新队列 // 通知安居客上架 //if (!Bll_House_AjkHpProSpread::insertProSpreadChange(0, 0, $brokerId, $cityId, 7, '支付中心日志同步:加钱', __CLASS__)) { // echo 'balbanceLogId=' . $logInfo['id'] . '通知安居客上架失败' . PHP_EOL; // return false; //} $ProPlanChangeApiBll = Bll_ProPlanChangeApiBll::get_instance(); $Result = $ProPlanChangeApiBll->insertProPlanChange(array('broker_id' => $brokerId, 'pro_id' => 0, 'plan_id' => 0, 'type' => 'BROKER_HAVE_MONEY', 'from' => __CLASS__, 'remark' => '支付中心日志同步:加钱;logType:' . $logType, 'site_type' => 4), 0); if ($Result['status'] != 'ok') { echo 'balbanceLogId=' . $logInfo['id'] . '通知安居客上架失败,msg:' . $Result['msg'] . PHP_EOL; } } } // 账户钱变多, 通知生命周期队列 if ($logType == 1) { //推广动作触发表 if (!Bll_Broker_User::insertLifeQueen(array('BrokerId' => $brokerId, 'Type' => 2))) { echo 'balbanceLogId=' . $logInfo['id'] . '通知生命周期队列失败' . PHP_EOL; } } $isHaved = false; // 是否插入过 if ($inTable) { if (Bll_Broker_BrokerAccountParticulars::getBalanceLogSubByAcenterId($logInfo['id'], $logDay)) { $isHaved = true; } } else { if (Bll_Broker_BrokerAccountParticulars::getBalanceLogByAcenterId($logInfo['id'], $logDay)) { $isHaved = true; } } // 重跑, 如果有记录则跳过 if (!$isHaved) { $result = null; if ($inTable) { $result = (array) Bll_Broker_BrokerAccountParticulars::getBalanceLogWithCache($userId, $logType, $logDay); } if ($result) { //消费和退费 $id = $result['id']; if ($createTime >= $result['createTimeEnd']) { $createdTimeEnd = $createTime; } else { $createdTimeEnd = date('Y-m-d H:i:s'); } // 更新账户日志 if (!Bll_Broker_BrokerAccountParticulars::updateBalanceLogById($id, $amount, $note, $createdTimeEnd)) { echo 'balbanceLogId=' . $logInfo['id'] . ',账户日志更新失败' . PHP_EOL; return false; } } else { // 新增账户日志 if (!$userId) { echo '+++++userid为空:'; var_dump($userId); echo PHP_EOL . '支付中心账户日志id:' . $logInfo['id'] . ';获取$accountInfo为:'; var_dump($accountInfo); echo PHP_EOL; } if (!($id = Bll_Broker_BrokerAccountParticulars::insertBalanceLog($userId, $amount, $logType, $note, $logDay, $createTime, $logInfo['id']))) { echo 'balbanceLogId=' . $logInfo['id'] . ',账户日志新增失败' . PHP_EOL; return false; } } } else { if (!$inTable) { echo 'balbanceLogId=' . $logInfo['id'] . ',已经存在表中' . PHP_EOL; return true; } } if ($inTable) { //消费和退费 // 重跑 判断子表是否有, 有则直接返回 if ($isHaved) { echo 'balbanceLogId=' . $logInfo['id'] . ',已经存在子表中' . PHP_EOL; } // 插入子表 if (!($id = Bll_Broker_BrokerAccountParticulars::insertBalanceLogSub($id, $userId, $accountId, $amount, $logType, $logInfo['note'], $createTime, $logInfo['id']))) { echo 'balbanceLogId=' . $logInfo['id'] . ',账户子日志新增失败' . PHP_EOL; } } }
/** * @param $audit * @param $type * @return bool */ private function _insertDataByType($audit, $type) { $brokerInfo = Bll_Broker_User::getBrokerInfoByUserId(intval($audit['userId'])); $message = $this->_punishMsg($audit); $punishMsg = '发布了假房源 (' . $message . ')'; if ($type == Model_Fyk_UserPunish::DETENTION) { $openTime = strtotime('+' . Const_Fyk::DETENTION_TIME . ' day'); $openDate = intval(date('Ymd', $openTime)); } else { $openDate = 0; } $data = array('cityId' => $audit['cityId'], 'userId' => $audit['userId'], 'brokerId' => $brokerInfo['brokerId'], 'status' => $type, 'openDate' => $openDate, 'actionType' => $audit['type'], 'punishReason' => $punishMsg, 'createTime' => date('Y-m-d H:i:s', time())); $punishId = Model_Fyk_UserPunish::getInstance()->insertData($data); return $punishId; }
/** * 手动暂停金铺经纪人的定价计划 * * @param int $ajkBrokerId * @param int $cityId */ private function stopJpFixPlan($ajkBrokerId, $cityId) { $jpBrokerId = Bll_Broker_User::getJpBrokerInfoByAjkBrokerId($ajkBrokerId); if ($jpBrokerId == 0) { $this->logMsg(sprintf('经纪人[%d - %d]没有获取到金铺经纪人ID。', $cityId, $ajkBrokerId)); return; } $this->logMsg(sprintf('经纪人[%d - %d - %d]金铺的定价计划,处理开始。', $cityId, $ajkBrokerId, $jpBrokerId)); $spreadingPlanList = Bll_Plan_Fix_JpPlan::getValidaFixPlanByMemberId($jpBrokerId); $insufficientBalancePlanList = Bll_Plan_Fix_JpPlan::getStopByInsufficientBalancePlanList($jpBrokerId); $fixPlanList = array_merge($spreadingPlanList, $insufficientBalancePlanList); if (empty($fixPlanList)) { $this->logMsg(sprintf('经纪人[%d - %d - %d]没有获取到金铺定价计划。', $cityId, $ajkBrokerId, $jpBrokerId)); return; } $data = array('houseId' => 0, 'planId' => 0, 'brokerId' => $ajkBrokerId, 'cityId' => $cityId, 'type' => 207, 'remark' => '切新端口,暂停定价计划', 'flag' => 0, 'addDate' => time(), 'dealRemark' => '', 'operateId' => 0, 'from' => __METHOD__, 'siteType' => 3); foreach ($fixPlanList as $fixPlan) { $this->logMsg(json_encode($fixPlan)); if (false == Bll_Plan_Fix_JpPlan::stopPlanByHand($fixPlan['id'])) { $this->logMsg(sprintf('经纪人[%d - %d - %d]定价计划[%d - %d]手动暂停失败。', $cityId, $ajkBrokerId, $jpBrokerId, $fixPlan['id'], $fixPlan['stopReason'])); continue; } $this->logMsg(sprintf('经纪人[%d - %d - %d]定价计划[%d - %d]手动暂停成功。', $cityId, $ajkBrokerId, $jpBrokerId, $fixPlan['id'], $fixPlan['stopReason'])); /** * 记录上下架队列 */ $data['planId'] = $fixPlan['id']; if (!Model_House_UpDown_Task::create($data, date('Ymd'))->save()) { $this->logMsg(sprintf('%s 记录上下架队列失败。', json_encode($data))); } else { $this->logMsg(sprintf('%s 记录上下架队列成功。', json_encode($data))); } } $this->logMsg(sprintf('经纪人[%d - %d - %d]金铺的定价计划,处理结束。', $cityId, $ajkBrokerId, $jpBrokerId)); }
/** * 购买房源 * @param $userId * @param $propId * @param $source * @return array */ public function addUserProp($userId, $propId, $source) { //$t1 = microtime(true); $result = array('status' => false, 'errcode' => '', 'msg' => ''); if (empty($userId) || empty($propId) || empty($source)) { $result['errcode'] = Const_APIStatus::E_UNKNOWN; $result['msg'] = '参数不正确'; return $result; } /* * 1、验证经纪人是否已经购买 */ $tmpUserPropData = $this->getUserPropByUserIdAndPropId($userId, $propId); if (!empty($tmpUserPropData)) { $result['errcode'] = Const_APIStatus::E_FYK_PROP_ACTION_HAVE_TO_BUY; $result['msg'] = '该房源已购买'; return $result; } /* * 2、验证房源是否存在 */ $propData = $this->getPropInfo($propId, array(Const_Fyk::PROPSTATUS_SELLING, Const_Fyk::PROPSTATUS_NOSELL)); if (empty($propData)) { $result['errcode'] = Const_APIStatus::E_FYK_PROP_INFO_IS_NULL; $result['msg'] = '该房源不存在'; return $result; } // 判断是否是测试账户 if (!empty($_SERVER['PG_TEST'])) { //PG $testCommIds = APF::get_instance()->get_config('fyk_pg_test_commIds'); $tmpTestUserIds = APF::get_instance()->get_config('fyk_pg_test_userIds'); } else { $testCommIds = APF::get_instance()->get_config('fyk_ga_test_commIds'); $tmpTestUserIds = APF::get_instance()->get_config('fyk_ga_test_userIds'); } $testUserIds = array_values($tmpTestUserIds); if (in_array($userId, $testUserIds) && !in_array($propData[$propId]['commId'], $testCommIds)) { $result['errcode'] = Const_APIStatus::E_UNKNOWN; $result['msg'] = '测试账户,不能购买其他房源'; return $result; } else { if (!in_array($userId, $testUserIds) && in_array($propData[$propId]['commId'], $testCommIds)) { $result['errcode'] = Const_APIStatus::E_UNKNOWN; $result['msg'] = '测试房源,您不能购买'; return $result; } } //$t2 = microtime(true); //echo '1.本地耗时'.round($t2-$t1,3)."<br>"; $cityId = empty($propData[$propId]['cityId']) ? 0 : $propData[$propId]['cityId']; $userCityId = Bll_Broker_User::getCityIdByUserId($userId); if (empty($cityId) || empty($userCityId) || $cityId != $userCityId) { $result['errcode'] = Const_APIStatus::E_UNKNOWN; $result['msg'] = '经纪人城市id信息异常'; return $result; } /* * 3、验证余额是否足够 */ $userAccoutId = Bll_Fyk_Payment_User::getInstance()->getUserAccountId($userId); if (empty($userAccoutId)) { $result['errcode'] = Const_APIStatus::E_FYK_PROP_ACTION_ACCOUNT_IS_NULL; $result['msg'] = '支付账号不存在'; return $result; } //$t3 = microtime(true); //echo '2.本地耗时'.round($t3-$t2,3)."<br>"; $balanceResult = Bll_Fyk_Payment_Amount::getInstance()->getBalance($userId, $userAccoutId); $balance = $balanceResult['status'] ? $balanceResult['balance'] : 0; //$t4 = microtime(true); //echo '3.查询余额耗时'.round($t4-$t3,3)."<br>"; // 获取购买价格 $startDate = date("Ymd"); $price = Bll_Fyk_Payment_Price::getInstance()->getPropUnitPrice($cityId, $startDate, Model_Fyk_CityPriceConfig::TYPE_BUY); if (empty($price)) { $result['errcode'] = Const_APIStatus::E_FYK_PROP_ACTION_PRICE_ANOMALIES; $result['msg'] = '支付价格异常'; return $result; } if ($balance < $price) { $result['errcode'] = Const_APIStatus::E_FYK_PROP_ACTION_LACK_OF_BALANCE; $result['msg'] = '余额不足'; return $result; } /* * 4、添加订单 */ $addOrderData = array('accountId' => $userAccoutId, 'userId' => $userId, 'propId' => $propId, 'price' => $price, 'status' => Model_Fyk_UserOrder::ORDER_STATUS_NODEAL, 'requestId' => 0, 'source' => $source, 'createTime' => time()); $orderId = Bll_Fyk_Order_Manage::getInstance()->insertData($addOrderData); // $t5 = microtime(true); // echo '5.本地耗时'.round($t5-$t4,3)."<br>"; /* * 5.扣费 */ $note = "购买房源扣款,房源id为{$propId}"; $requestId = Bll_Fyk_Payment_Common::getInstance()->createRequsetId("order", $orderId); $payResult = Bll_Fyk_Payment_Amount::getInstance()->chargeMoney($userId, $price, $userAccountId = "", $note, $requestId); //$t6 = microtime(true); //echo '6.扣费耗时'.round($t6-$t5,3)."<br>"; if ($payResult['status'] == false) { // 更新订单状态支付失败 $updateOrderArr = array("status" => Model_Fyk_UserOrder::ORDER_STATUS_PAYFAIL, "requestId" => $requestId); Bll_Fyk_Order_Manage::getInstance()->updateData(array("id" => $orderId), $updateOrderArr); $result['errcode'] = Const_APIStatus::E_FYK_PROP_ACTION_PAY_FAILURE; $result['msg'] = '支付失败'; } else { // 记录到账户流水表 $addBalanceLogArr = array('userId' => $userId, 'accountId' => $userAccoutId, 'propId' => $propId, 'listId' => $orderId, 'price' => $price, 'realPrice' => $price, 'amount' => $payResult['balance'], 'requestId' => $requestId, 'type' => Const_Fyk::USER_BUY_PROP, 'createTime' => time()); Bll_Fyk_Payment_Log::getInstance()->insertBalanceLog($addBalanceLogArr); // 更新订单状态支付成功 $updateOrderArr = array("status" => Model_Fyk_UserOrder::ORDER_STATUS_PAYSUCCESS, "requestId" => $requestId); Bll_Fyk_Order_Manage::getInstance()->updateData(array("id" => $orderId), $updateOrderArr); // 插入我的房源列表 $addUserPropArr = array('cityId' => $cityId, 'userId' => $userId, 'propId' => $propId, 'source' => $source, 'status' => !empty($propData[$propId]['status']) ? $propData[$propId]['status'] : Const_Fyk::PROPSTATUS_DELETE, 'comeFrom' => Model_Fyk_UserProps::COME_FROM_BUY, 'createTime' => time()); Model_Fyk_UserProps::getInstance()->insertData($addUserPropArr); Bll_Fyk_UserUnReadData::getInstance()->updateUnReadNum($userId, Model_Fyk_UserUnread::TYTE_AMOUNT); $result['status'] = true; } // 记录到扣费详细日志 //$t7 = microtime(true); //echo '7.耗时'.round($t7-$t6,3)."<br>"; //echo '8.总耗时'.round($t7-$t1,3).'秒';exit; return $result; }