JDTexLab — پلتفرم خدمات و سفارش‌های آزمایشگاهی
JDTexLab — پلتفرم خدمات و سفارش‌های آزمایشگاهی
JDTexLab — پلتفرم خدمات و سفارش‌های آزمایشگاهی
JDTexLab — پلتفرم خدمات و سفارش‌های آزمایشگاهی

JDTexLab — پلتفرم خدمات و سفارش‌های آزمایشگاهی

JDTexLab یک پلتفرم تخصصی برای مدیریت خدمات آزمایشگاهی و تعامل با مشتریان یک آزمایشگاه آزمون نساجی است که وب‌سایت عمومی، پنل مشتری و پنل مدیریتی را در یک اکوسیستم یکپارچه قرار می‌دهد. این پروژه را به‌صورت مستقل توسعه دادم و بخش‌های اصلی مربوط به سفارش خدمات، رزرو تجهیزات، پرداخت، اعلان‌ها، پنل مشتری، احراز هویت و مدیریت نتایج را طراحی و پیاده‌سازی کردم.

هسته اصلی سیستم حول فرآیند سفارش و پردازش خدمات آزمایشگاهی شکل گرفته است. یکی از بخش‌های مهم توسعه، بازطراحی جریان سفارش برای پشتیبانی از سفارش‌های چندنمونه‌ای بود؛ به‌طوری‌که مشتری می‌تواند برای هر سفارش چند نمونه و برای هر نمونه مجموعه‌ای از آزمون‌های موردنظر را ثبت کند. ساختار داده، validation و پردازش سفارش برای مدیریت این ساختار تو در تو طراحی شده و اطلاعات انتخاب‌شده در زمان ثبت سفارش به شکلی مستقل نگهداری می‌شوند تا تغییرات بعدی در کاتالوگ خدمات، اطلاعات تاریخی سفارش را تحت تأثیر قرار ندهد.

در سمت مدیریت، چرخه کامل سفارش از مرحله بررسی و قیمت‌گذاری تا پردازش، ثبت کد رهگیری و بارگذاری نتیجه پیاده‌سازی شده است. این جریان با کنترل‌های مالکیت، وضعیت سفارش و مدیریت فایل همراه شده تا دسترسی مشتری به نتیجه فقط در شرایط مجاز امکان‌پذیر باشد. عملیات حساس مرتبط با سفارش و فایل نیز در نقاط لازم با transactionهای دیتابیس مدیریت شده‌اند.

برای بخش مالی، یک لایه اختصاصی برای ارتباط با Zarinpal توسعه دادم که به‌جای وابستگی مستقیم منطق سفارش به درگاه، پرداخت را در قالب یک مدل polymorphic مدیریت می‌کند. در نتیجه یک ساختار پرداخت مشترک می‌تواند برای انواع مختلف سفارش مورد استفاده قرار گیرد. فرآیند ایجاد پرداخت، انتقال به درگاه، callback، verification و ثبت نتیجه تراکنش مدیریت شده و وضعیت مالی سفارش بر اساس پرداخت‌های موفق و مبلغ باقی‌مانده محاسبه می‌شود.

یکی از بخش‌های مهم معماری پروژه، زیرساخت اعلان‌های پیامکی است. به‌جای قرار دادن منطق ارسال SMS مستقیماً داخل کنترلرها، یک جریان مبتنی بر Observer و Notification طراحی کردم که تغییرات مهم در سفارش و نتیجه را تشخیص داده و اعلان مناسب را ایجاد می‌کند. در ادامه، یک Channel اختصاصی و لایه Driver برای سرویس پیامک ایجاد شده است که امکان استفاده از Kavenegar در محیط واقعی و Driver لاگ در محیط توسعه را فراهم می‌کند. این ساختار، منطق کسب‌وکار را از provider خارجی جدا کرده و امکان تغییر provider بدون بازنویسی جریان سفارش را فراهم می‌کند.

بخش رزرو تجهیزات نیز به‌عنوان یک workflow مستقل توسعه داده شده است. به‌جای استفاده از یک فرم عمومی برای تمام تجهیزات، ساختار درخواست بر اساس نوع فرآیند تفکیک شده و برای سناریوهای مختلف، فرم و validation متناسب با اطلاعات موردنیاز طراحی شده است. این بخش شامل پشتیبانی از درخواست‌های عمومی تجهیزات و workflow اختصاصی تجهیزات الکتروریسی با مجموعه‌های مختلف محلول و پارامترهای مرتبط است.

در پنل مشتری، جریان سفارش به پرداخت، مشاهده وضعیت، دریافت نتیجه و مشاهده اسناد متصل شده است. در سمت مدیریت نیز سیستم Role/Permission برای تفکیک دسترسی‌های عملیاتی پیاده‌سازی شده تا بخش‌هایی مانند مدیریت سفارش‌ها، خدمات، تجهیزات، قیمت‌گذاری، محتوا و سایر عملیات مدیریتی بر اساس سطح دسترسی کنترل شوند.

برای احراز هویت نیز فرآیند تأیید شماره موبایل و بازیابی رمز عبور از طریق SMS توسعه داده شده و دسترسی به بخش‌های حساس سیستم به وضعیت احراز کاربر وابسته شده است. همچنین برای سفارش‌ها و خدمات مختلف، رسیدهای قابل ارائه به مشتری تولید می‌شوند و فرآیند دریافت نتیجه و اسناد از طریق کنترل‌های سمت سرور محافظت شده است.

از نظر فنی، پروژه بر پایه Laravel 12 و PHP 8.3 و با MySQL توسعه داده شده و از Blade، Bootstrap 5، Vite و Spatie Laravel Permission استفاده می‌کند. ساختار برنامه یک Laravel Monolith است که در آن منطق دامنه در Serviceها، Observerها، Notificationها و لایه‌های اختصاصی سرویس‌های خارجی تفکیک شده است. این ساختار در کنار middlewareها، policyهای دسترسی و validationهای اختصاصی، امکان مدیریت workflowهای مختلف سیستم را بدون وابستگی مستقیم بین لایه‌های مختلف فراهم می‌کند.

در ادامه توسعه، بخش‌هایی از سیستم برای استفاده در محیط واقعی نیز harden شدند؛ از جمله جلوگیری از double submission، بهینه‌سازی برخی عملیات، مدیریت cache و assetها، کنترل مشکلات مربوط به case-sensitivity در محیط Linux و بهبود پایداری بخش‌های مختلف در زمان استقرار.

JDTexLab برای من نمونه‌ای از توسعه یک سامانه Laravel در مقیاس واقعی است که در آن صرفاً پیاده‌سازی CRUD مطرح نبوده؛ بلکه طراحی و اتصال چندین workflow وابسته به یکدیگر، مدیریت تراکنش‌های مالی، integration با سرویس‌های خارجی، معماری event-driven برای اعلان‌ها، کنترل دسترسی، مدیریت فایل و ایجاد یک مسیر end-to-end از ثبت درخواست تا پرداخت و تحویل نتیجه در کنار یکدیگر قرار گرفته‌اند.

اطلاعات پروژه

  • دسته: وب‌اپلیکیشن
  • مشتری: آزمایشگاه نساجی جهاد دانشگاهی
  • تاریخ پروژه: 1 شهریور 1404
  • آدرس پروژه: https://jdtexlab.com

ویژگی های کلیدی

ثبت و مدیریت فرآیندهای آزمایشگاهی
طراحی و توسعه جریان کامل سفارش از انتخاب آزمون و ثبت چندنمونه‌ای تا قیمت‌گذاری، پرداخت، پردازش و تحویل نتیجه

موتور سفارش چندنمونه‌ای و آزمون‌ها
بازطراحی ساختار سفارش برای پشتیبانی از چند نمونه، گروه‌بندی آزمون‌ها، اعتبارسنجی تو در تو و نگهداری مستقل اطلاعات سفارش

معماری پرداخت یکپارچه
پیاده‌سازی سرویس پرداخت مبتنی بر Zarinpal با مدل Payment چندریختی، پشتیبانی از انواع سفارش و محاسبه پرداخت‌های تکمیل‌شده و مانده حساب

سیستم رزرو تجهیزات با جریان‌های اختصاصی
طراحی فرآیندهای متفاوت رزرو برای انواع تجهیزات و پیاده‌سازی فرم‌ها و اعتبارسنجی‌های وابسته به نوع درخواست

معماری اعلان‌های رویدادمحور
پیاده‌سازی Observer، Notification Channel و Driver Layer برای ارسال خودکار اعلان‌های سفارش و نتیجه با قابلیت تعویض سرویس پیامک

مدیریت چرخه کامل سفارش در پنل‌ها
تفکیک جریان‌های مشتری و مدیریت برای قیمت‌گذاری، تغییر وضعیت، پرداخت، کد رهگیری، فایل نتیجه و کنترل دسترسی

احراز هویت و دسترسی چندلایه
پیاده‌سازی احراز شماره موبایل، بازیابی رمز عبور پیامکی و Role/Permission برای مدیریت دسترسی کاربران و تیم عملیاتی

مدیریت امن نتایج و اسناد
کنترل مالکیت و وضعیت سفارش پیش از دسترسی به نتایج، مدیریت فایل‌ها و تولید اسناد و رسیدهای قابل ارائه به مشتری

نظر خود را وارد کنید