public function handle_request_internal() { $brokerId = $this->_params['brokerId']; $customerId = $this->_params['customerId']; $result = array('status' => 'error', 'message' => ''); // 验证经纪人是否合法 $broker = Model_Broker_AjkBrokerExtend::findWithBrokerId($brokerId); if (!$broker) { $result['message'] = '经纪人不合法'; return $result; } // 判断是否已经抢过(永久锁定) $lock = Bll_CustomerRush_Lock::getDataByBrokerIdAndCustomerId($brokerId, $customerId); if (!empty($lock)) { $result['message'] = '已经被抢过了'; return $result; } // 判断是否有临时关系 $date = date('Y-m-d', strtotime("-2 day")); $relation = Bll_CustomerRush_BrokerUserRelation::getInstance()->getLastRalationData($brokerId, $customerId, $date); if (!$this->_isTmpRelation($relation) || empty($relation)) { $result['message'] = '已超时,请重新抢我'; return $result; } if (!$this->_isFree()) { // 获取最早的一张可用劵数据 $coupon = Bll_CustomerRush_Coupon::getInstance()->getBrokerOldestCouponEx($brokerId); if (empty($coupon) || $coupon->totalNum <= $coupon->usedNum) { $result['message'] = '没有可抢次数'; return $result; } } // 获取经纪人锁 if (!Bll_Customer_Parallel::lockBroker($brokerId)) { $result['message'] = '锁经纪人异常'; return $result; } /* * 兼容5.0版本 ,先判断coustomer_locks表中是否有临时性数据,如果有数据则更新,否则新增插入 */ $latestTryLock = Model_Mobile_CustomerLock::getV2BrokerCustomerLatestTempLock($brokerId, $customerId, $relation->uploadDt); if (empty($latestTryLock)) { // 插入永久锁定 $insertCusomerLockData = array('uploadDt' => $relation->uploadDt, 'relationId' => $relation->brokerUserRelationId, 'brokerId' => $brokerId, 'userDeviceId' => $customerId, 'status' => 2, 'foreverLockTime' => date("Y-m-d H:i:s"), 'createTime' => date("Y-m-d H:i:s"), 'updateTime' => date("Y-m-d H:i:s")); Bll_CustomerRush_Lock::insertCustomerLock($insertCusomerLockData); } else { // 更新customer_locks表 $latestTryLock->relationId = $relation->brokerUserRelationId; $latestTryLock->status = 2; $latestTryLock->foreverLockTime = date("Y-m-d H:i:s"); $latestTryLock->updateTime = date("Y-m-d H:i:s"); $latestTryLock->save(); } if (!$this->_isFree()) { // 消耗劵 $this->_updateBrokerCoupon($coupon); } // 更新永久锁定,加1 Bll_CustomerRush_Lock::incrForeverLockCount($brokerId, 1); // 更新临时表的关系 $relation->status = Model_Mobile_BrokerUserRelationSub::STATUS_FOREVER_LOCKED; $relation->updateTime = date("Y-m-d H:i:s"); $relation->tempLockTime = '0000-00-00 00:00:00'; $relation->tempLockExpireTime = '0000-00-00 00:00:00'; $relation->save(); // 释放经纪人锁 Bll_Customer_Parallel::unlockBroker($brokerId); $result['status'] = 'ok'; $result['message'] = '成功'; return $result; }