ساعت رسمی سرور (تهران): 18:31:00 امروز: دوشنبه ۱۴۰۵/۰۷/۲۷
نوبت‌دهی باز است (ویژه فردا: سه‌شنبه ۱۴۰۵/۰۷/۲۸)

سامانه نوبت‌دهی تجهیزات آزمایشگاه مرکزی

اولویت ثبت با نفر اول • سهمیه ۱ نوبت سانتریفوژها و هود با کد دانشجویی ۱۳ رقمی • آزادی رزرو همزمان سایر دستگاه‌ها

پژوهشگر / دانشجو:
پژوهشگر نمونه کد: 1404111198032 (09123456789)
تقویم پیوسته کاری آزمایشگاه (شنبه تا چهارشنبه): (شنبه ۱۴۰۵/۰۷/۲۵ تا چهارشنبه ۱۴۰۵/۰۷/۲۹)
نوبت‌دهی برای «سه‌شنبه ۱۴۰۵/۰۷/۲۸» هم‌اکنون باز است! با کلیک روی هر سانس آزاد، نوبت به نام شما قفل می‌شود.
کل تجهیزات آزمایشگاه
۲۲ دستگاه
سانس‌های آزاد امروز
۸۴
نوبت‌های ثبت‌شده امروز
۰
در انتظار تایید لغو
۰
قوانین سهمیه روزانه (بر اساس کد دانشجویی ۱۳ رقمی): در هر یک از دستگاه‌های «سانتریفوژ ۱»، «سانتریفوژ ۲» و «هود لامینار» هر نفر حداکثر ۱ نوبت می‌تواند بگیرد (اما رزرو همزمان آن‌ها با یکدیگر و تکرار رزرو در سایر دستگاه‌ها کاملاً آزاد است).
رزرو همزمان چند دستگاه (حتی با تداخل ساعتی): کاملاً مجاز | سهمیه ۱ نوبت: فقط سانتریفوژها و هود لامینار (بر اساس کد دانشجویی ۱۳ رقمی)

سانتریفوژ یخچال‌دار(۱)

۳ سانس آزاد
سهمیه هر کد دانشجویی ۱۳ رقمی: حداکثر ۱ نوبت
محدودیت‌ها: فقط میکروتیوب!

سانتریفوژ یخچال‌دار(۲)

۳ سانس آزاد
سهمیه هر کد دانشجویی ۱۳ رقمی: حداکثر ۱ نوبت
محدودیت‌ها: فقط فالکون!

Real-time PCR

Out of Order / خارج از سرویس
علت خرابی: کالیبراسیون سنسور نوری
زمان بازگشت به سرویس: اطلاع‌رسانی در گروه آزمایشگاه

الایزاریدر

۶ سانس آزاد
امکان تکرار رزرو و همزمانی با سایر دستگاه‌ها مجاز است
محدودیت‌ها: فقط فیلترهای 405، 450، 492، 545 و 630 نانومتر موجود است!

Freeze Dryer

Out of Order / خارج از سرویس
علت خرابی: سرویس پمپ وکیوم
زمان بازگشت به سرویس: هفته آینده

اسپکتروفتومتر (۱)

۶ سانس آزاد
امکان تکرار رزرو و همزمانی با سایر دستگاه‌ها مجاز است

اسپکتروفتومتر (۲)

۶ سانس آزاد
امکان تکرار رزرو و همزمانی با سایر دستگاه‌ها مجاز است

HPLC

Out of Order / خارج از سرویس
علت خرابی: تعویض ستون کروماتوگرافی
زمان بازگشت به سرویس: متعاقباً اعلام می‌شود

فور

۳ ظرفیت اشتراک دمای یکسان آزاد
امکان تکرار رزرو و همزمانی با سایر دستگاه‌ها مجاز است
محدودیت‌ها: حداکثر دما تا ۲۰۰ درجه و ۲ ساعت!

انکوباتور معمولی

۳ ظرفیت اشتراک دمای یکسان آزاد
امکان تکرار رزرو و همزمانی با سایر دستگاه‌ها مجاز است
محدودیت‌ها: حداکثر دما تا ۹۰ درجه!

هود لامینار

۳ سانس آزاد
سهمیه هر کد دانشجویی ۱۳ رقمی: حداکثر ۱ نوبت

هموژنایزر مکانیکی

۶ سانس آزاد
امکان تکرار رزرو و همزمانی با سایر دستگاه‌ها مجاز است

Ultrasonic homogenizer

Out of Order / خارج از سرویس
علت خرابی: تعمیر پروب اولتراسونیک
زمان بازگشت به سرویس: در دست بررسی

ترموسایکلر پی‌سی‌آر

۳ سانس آزاد
امکان تکرار رزرو و همزمانی با سایر دستگاه‌ها مجاز است

الکتروفورز افقی ژل آگارز

۳ سانس آزاد
امکان تکرار رزرو و همزمانی با سایر دستگاه‌ها مجاز است

نانودراپ

۶ سانس آزاد
امکان تکرار رزرو و همزمانی با سایر دستگاه‌ها مجاز است

میکروسکوپ نوری دوربین دار

۶ سانس آزاد
امکان تکرار رزرو و همزمانی با سایر دستگاه‌ها مجاز است

میکروسکوپ نوری

۶ سانس آزاد
امکان تکرار رزرو و همزمانی با سایر دستگاه‌ها مجاز است

انکوباتور شیکر یخچالدار

۳ ظرفیت اشتراک دمای یکسان آزاد
امکان تکرار رزرو و همزمانی با سایر دستگاه‌ها مجاز است

ترازوی 4 رقم اعشار

۶ سانس آزاد
امکان تکرار رزرو و همزمانی با سایر دستگاه‌ها مجاز است

هیتر استیرر

۶ سانس آزاد
امکان تکرار رزرو و همزمانی با سایر دستگاه‌ها مجاز است

pHمتر

۶ سانس آزاد
امکان تکرار رزرو و همزمانی با سایر دستگاه‌ها مجاز است

راهنمای استقرار روی سرور لینوکس ایران + دانلود مستقیم فایل‌ها

آماده نصب روی سرور لینوکس (Ubuntu / Debian / AlmaLinux / cPanel / DirectAdmin)

این فایل index.html به صورت خودکار به api.php متصل می‌شود، ساعت رسمی تهران را از سرور شما می‌خواند و تمام نوبت‌ها را با قفل اتمیک (flock) ذخیره می‌کند.

کد کامل فایل api.php (در کنار index.html روی سرور قرار دهید):
<?php
// Central Biology Lab Booking Backend (api.php)
// Enforces Asia/Tehran Anti-Cheat Server Time, Strict 13-Digit Student ID (e.g. 1404111198032) & Atomic File Locking (flock)
date_default_timezone_set('Asia/Tehran');
header('Content-Type: application/json; charset=utf-8');

function normalizeStudentIdServer($str) {
    $persian = ['۰','۱','۲','۳','۴','۵','۶','۷','۸','۹','٠','١','٢','٣','٤','٥','٦','٧','٨','٩'];
    $english = ['0','1','2','3','4','5','6','7','8','9','0','1','2','3','4','5','6','7','8','9'];
    $clean = str_replace($persian, $english, (string)$str);
    return preg_replace('/[^\d]/', '', $clean);
}

$dbFile = __DIR__ . '/lab_bookings_v4.json';
$fp = fopen($dbFile, 'c+');
if (!flock($fp, LOCK_EX)) {
    http_response_code(503);
    echo json_encode(['error' => 'سرور مشغول است، مجدداً تلاش کنید.'], JSON_UNESCAPED_UNICODE);
    exit;
}

$raw = stream_get_contents($fp);
$state = $raw ? json_decode($raw, true) : [];
if (!is_array($state)) $state = ['days' => [], 'blacklist' => [], 'rules' => [], 'deviceMeta' => []];

if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    $state['serverTimeMs'] = round(microtime(true) * 1000);
    $state['serverIso'] = date('c');
    echo json_encode($state, JSON_UNESCAPED_UNICODE);
    flock($fp, LOCK_UN);
    fclose($fp);
    exit;
}

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $input = json_decode(file_get_contents('php://input'), true);
    if (isset($input['fullState']) && is_array($input['fullState'])) {
        $state['days'] = $input['fullState']['days'] ?? $state['days'];
        $state['blacklist'] = $input['fullState']['blacklist'] ?? $state['blacklist'];
        $state['rules'] = $input['fullState']['rules'] ?? $state['rules'];
        $state['deviceMeta'] = $input['fullState']['deviceMeta'] ?? $state['deviceMeta'];
    }
    ftruncate($fp, 0);
    rewind($fp);
    fwrite($fp, json_encode($state, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT));
    fflush($fp);
    $state['serverTimeMs'] = round(microtime(true) * 1000);
    echo json_encode($state, JSON_UNESCAPED_UNICODE);
}
flock($fp, LOCK_UN);
fclose($fp);
?>