redis, RedisKeyUtil::lockUser($userID), RedisLock::FLAG_CATCH_EXCEPTIONS); if (!$lock->acquire(10)) return ResultStatusServices::RS_SAME_TIME_OPERATION; try { if (self::hasGrantedSeed($userID)) return ResultStatusServices::RS_OPERATION_SUCCESS; $log = SystemLogUtil::get( $userID, SystemLogUtil::TYPE_ITEM, self::NEWBIE_SEED_ITEM_ID, 1, SystemLogUtil::FROM_TYPE_NEWBIE_SEED, [] ); return ItemServices::checkAndModifyNum($userID, self::NEWBIE_SEED_ITEM_ID, true, 1, $log); } finally { $lock->release(); } } public static function hasGrantedSeed($userID) { return SystemLog::find() ->where([ 'user_id' => (int)$userID, 'from_type' => SystemLogUtil::FROM_TYPE_NEWBIE_SEED, 'value' => self::NEWBIE_SEED_ITEM_ID, ]) ->exists(); } public static function isNewbieCrop($cropID) { return (int)$cropID === self::NEWBIE_CROP_ID; } }