示例#1
0
 /**
  * @return array
  */
 public function handle_request_internal()
 {
     $brokerId = $this->_params['broker_id'];
     $deviceId = $this->_params['device_id'];
     // 升级提示
     $rushStartTime = APF::get_instance()->get_config('v2_rush_customer_consume_coupon_time', 'customer');
     if (time() >= strtotime($rushStartTime)) {
         return array('status' => 'error', 'message' => "抢客户功能大升级!快去最新版中体验吧!");
     }
     // 判断经纪人和客户之间关系是否存在(当日内)
     $relation = Model_Mobile_BrokerUserRelation::getBrokerCustomerTodayRelation($brokerId, $deviceId);
     if (!$relation) {
         throw new Exception_CustomerRush_RelationNotFound("BrokerId: {$brokerId}, CustomerId: {$deviceId}");
     }
     /** 判断经纪人和用户是否已经是有效的临时绑定关系 */
     if (Bll_Customer_BrokerUserRelation::checkBrokerUserRelationStatusIsBind($deviceId, $brokerId)) {
         return array('status' => 'ok', 'data' => array('success' => 1, 'description' => '经纪人和用户已经是锁定关系'));
     }
     if (false === Bll_Customer_Lock::checkBrokerCanBind($brokerId)) {
         return array('status' => 'ok', 'data' => array('success' => 0, 'description' => '经纪人锁定次数已经满3次了'));
     }
     if (false == Bll_Customer_Lock::checkUserCanBind($deviceId)) {
         return array('status' => 'ok', 'data' => array('success' => 0, 'description' => '用户锁定次数已经满3次了'));
     }
     /** 防并发 开始 */
     if (false === Bll_Customer_Parallel::lockBroker($brokerId)) {
         return array('status' => 'ok', 'data' => array('success' => 0, 'description' => '经纪人并发锁失败'));
     }
     if (false === Bll_Customer_Parallel::lockUser($deviceId)) {
         Bll_Customer_Parallel::unlockBroker($brokerId);
         return array('status' => 'ok', 'data' => array('success' => 0, 'description' => '用户并发锁失败'));
     }
     // 临时锁定,更新关系
     $relation->tempLock();
     // 临时锁定,更新锁定
     Model_Mobile_CustomerLock::tempLock($relation->id, $relation->uploadDt, $relation->brokerId, $relation->userDeviceId);
     Bll_Customer_Parallel::unlockBroker($brokerId);
     Bll_Customer_Parallel::unlockUser($deviceId);
     /** 防并发 结束 */
     $result = array('status' => 'ok', 'data' => array('success' => 1));
     return $result;
 }
示例#2
0
 /**
  * 更新经纪人用户关系为临时锁定,同时对经纪人永久锁定次数和用户的永久锁定次数做 -1 操作
  *
  * @param string $deviceId
  * @param int $brokerId
  */
 private function unlockCustomer($deviceId, $brokerId)
 {
     Bll_Customer_BrokerUserRelation::setBrokerUserRelationTempLock($deviceId, $brokerId);
 }