Giới thiệu dự án

Thành phố Đà Nẵng là trung tâm du lịch và ẩm thực trọng điểm tại miền Trung Việt Nam. Theo thống kê từ Sở Du lịch Đà Nẵng, thành phố đón hàng triệu lượt khách du lịch nội địa và quốc tế mỗi năm, dẫn đến nhu cầu tiêu thụ ẩm thực biển gia tăng đột biến vào các mùa cao điểm du lịch. Tuy nhiên, hệ thống vận hành của nhiều thương hiệu ẩm thực địa phương, điển hình như chuỗi nhà hàng "Hải sản Cua Biển Đà Nẵng", vẫn phụ thuộc chủ yếu vào các phương thức truyền thống như ghi chép sổ tay, nhận đặt bàn qua điện thoại đơn lẻ hoặc tiếp đón khách vãng lai trực tiếp (walk-in).

Mô hình vận hành thủ công này làm bộc lộ nhiều điểm nghẽn nghiêm trọng (pain points):

  • Tình trạng quá tải và xung đột đặt chỗ (overbooking): Nhân viên không thể kiểm soát chính xác số lượng bàn trống theo thời gian thực giữa các chi nhánh, dẫn đến tình trạng khách hàng đã đến nhưng không có bàn hoặc phải chờ đợi từ 30 đến 45 phút.
  • Thiếu minh bạch thông tin ẩm thực: Khách du lịch từ xa gặp khó khăn trong việc tra cứu thực đơn, bảng giá cập nhật, danh mục hải sản tươi sống theo mùa và vị trí địa lý của từng chi nhánh.
  • Rủi ro hủy bàn vào giờ chót (no-show): Việc không có cơ chế thu tiền cọc trực tuyến làm tăng tỷ lệ hủy bàn ảo lên đến 20% - 25% vào các khung giờ cao điểm, gây lãng phí tài nguyên phục vụ và thất thoát doanh thu.
  • Kiểm soát dịch bệnh và sức khỏe cộng đồng: Nhu cầu giãn cách, hạn chế tiếp xúc trực tiếp và đặt trước dịch vụ để tránh tụ tập đông người trở thành tiêu chuẩn vận hành bắt buộc.

Đồ án tốt nghiệp "Xây dựng website quản lý và đặt bàn cho nhà hàng Hải sản Cua Biển Đà Nẵng" do sinh viên Bùi Vạn Đạt (Khoa Công nghệ Số, Trường Đại học Sư phạm Kỹ thuật – Đại học Đà Nẵng) thực hiện dưới sự hướng dẫn của ThS. Nguyễn Thị Hà Quyên, tập trung giải quyết triệt để bài toán số hóa quy trình quản lý chuỗi dịch vụ F&B (Food and Beverage).

Mục tiêu đề tài

  1. Xây dựng cổng thông tin số hóa đa chi nhánh: Cung cấp giao diện trực quan cho phép khách hàng tra cứu chi nhánh, vị trí Google Maps, danh mục thực đơn động theo nhóm và xem các chương trình khuyến mãi.
  2. Tự động hóa quy trình đặt bàn và chọn món trước (Pre-order): Cho phép người dùng kiểm tra trạng thái bàn trống theo khung giờ thực tế (from_time, to_time), chọn vị trí bàn theo khu vực (restaurant_zones), đặt trước thực đơn hải sản và xác nhận tiền cọc (deposit_money).
  3. Phân quyền và tối ưu hóa quản trị nghiệp vụ (RBAC): Xây dựng module quản lý tập trung cho Quản trị viên (Admin) và Nhân viên (Staff), hỗ trợ duyệt đơn đặt bàn, cập nhật sơ đồ bàn, quản lý giá món ăn linh hoạt và kiểm soát doanh thu thời gian thực.
  4. Nâng cao trải nghiệm người dùng (UX/UI): Đảm bảo tốc độ phản hồi trang đạt dưới 300ms, giao diện thân thiện chuẩn Responsive Web Design trên mọi thiết bị di động và máy tính để bàn.

Giải pháp và Phạm vi

  • Giải pháp kỹ thuật: Ứng dụng kiến trúc phân tầng MVC (Model-View-Controller) trên nền tảng PHP Laravel Framework kết hợp cơ sở dữ liệu quan hệ MySQL, đảm bảo tính toàn vẹn dữ liệu và khả năng mở rộng.
  • Phạm vi nghiên cứu: Triển khai nghiệp vụ cho toàn bộ các chi nhánh thuộc hệ thống nhà hàng "Hải sản Cua Biển Đà Nẵng" trên địa bàn thành phố Đà Nẵng.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Tiêu chí Quản lý thủ công (Sổ sách/Gọi điện) Nền tảng trung gian (PasGo, TableNow) Website độc quyền Hải sản Cua Biển
Chi phí duy trì Thấp nhưng tốn chi phí nhân sự Chiết khấu cao (8% - 15%/đơn thành công) Chi phí đầu tư một lần, không phí hoa hồng
Cập nhật dữ liệu Rất chậm, dễ sai sót dữ liệu bàn Đồng bộ chậm, phụ thuộc bên thứ 3 Đồng bộ tức thì theo thời gian thực (Real-time)
Dữ liệu khách hàng Không lưu trữ được lịch sử Thuộc sở hữu của nền tảng trung gian Doanh nghiệp sở hữu 100% dữ liệu (Data Ownership)
Tùy biến món ăn Khó khăn khi đổi giá hải sản theo mùa Bị giới hạn bởi cấu trúc nền tảng Chủ động quản lý danh mục, giá sale_price linh hoạt

Hệ thống xác định yêu cầu nghiệp vụ dựa trên mô hình phân loại MoSCoW:

  • Must have (Bắt buộc có): Module đặt bàn theo ngày giờ; Module đặt món ăn kèm; Cơ chế tính tiền cọc (deposit_money); Phân quyền hệ thống (Admin, Staff, Customer); Quản lý trạng thái bàn (restaurant_tables).
  • Should have (Nên có): Tích hợp bản đồ Google Maps định tuyến; Module đánh giá/bình luận chất lượng; Hệ thống quản lý tin tức (news) và khuyến mãi.
  • Could have (Có thể có): Tích hợp cổng thanh toán trực tuyến tự động qua API Ngân hàng/Ví điện tử; Thông báo xác nhận tự động qua SMS/Email.
  • Won't have (Chưa phát triển trong giai đoạn này): Ứng dụng di động chuyên biệt (Native iOS/Android App); Hệ thống gợi ý món ăn thông minh bằng AI.

Thiết kế hệ thống

Hệ thống tuân thủ mô hình kiến trúc MVC phân tầng tiêu chuẩn:

  • Presentation Layer (View): Xây dựng bằng Blade Template Engine, HTML5, CSS3, JavaScript ES6 và Bootstrap framework, tối ưu hóa giao diện hiển thị cho cả thiết bị máy tính và điện thoại.
  • Application Layer (Controller & Business Logic): Xử lý luồng dữ liệu, xác thực request thông qua Laravel Middleware, kiểm tra logic chống trùng lặp giờ đặt bàn và tính toán tổng chi phí booking.
  • Data Access Layer (Model & Eloquent ORM): Ánh xạ cấu trúc bảng quan hệ thành các thực thể đối tượng trong mã nguồn, xử lý quan hệ giữa các thực thể thông qua Active Record pattern.
       +-------------------------------------------------------+
       |                  Client Browser (UI)                  |
       +-------------------------------------------------------+
                                  | HTTP / HTTPS (RESTful)
                                  v
+---------------------------------------------------------------------+
|                         Web Server (Apache)                         |
|  +---------------------------------------------------------------+  |
|  |                 Routing & Middleware Security                 |  |
|  +---------------------------------------------------------------+  |
|                                 |                                   |
|  +------------------------------v--------------------------------+  |
|  |                   Laravel Controller Layer                    |  |
|  |    [BookingController]   [MenuController]   [AdminController] |  |
|  +---------------------------------------------------------------+  |
|                                 |                                   |
|  +------------------------------v--------------------------------+  |
|  |                   Eloquent ORM (Model Layer)                  |  |
|  |    User | RestaurantBranch | RestaurantTable | BookingFood    |  |
|  +---------------------------------------------------------------+  |
+---------------------------------------------------------------------+
                                  |
                                  v
       +-------------------------------------------------------+
       |               Database Engine (MySQL)                 |
       |  - 14 Bảng dữ liệu quan hệ chuẩn 3NF                 |
       +-------------------------------------------------------+

Thiết kế cơ sở dữ liệu quan hệ (Database Design)

Cơ sở dữ liệu bao gồm 14 bảng quan hệ được chuẩn hóa ở mức 3NF nhằm loại bỏ dư thừa dữ liệu và đảm bảo toàn vẹn tham chiếu:

  • users: Quản lý danh tính người dùng (id, name, phone, email, role_id, password, bank_formation).
  • roles: Bảng phân quyền hệ thống (id, name).
  • restaurant_branchs: Thông tin chi nhánh (id, name, address, user_id, phone).
  • restaurant_zones & restaurant_tables: Quản lý khu vực (restaurant_zone_id) và chi tiết bàn ăn (max_seat).
  • menus, menu_groups, menu_items: Quản lý thực đơn phân cấp, hỗ trợ giá gốc (price) và giá ưu đãi (sale_price) với khoảng thời gian hợp lệ (valid_from, valid_to).
  • bookings, booking_tables, booking_foods: Bộ ba bảng cốt lõi quản lý tiến trình đặt chỗ, liên kết người dùng, ngày giờ nhận bàn (date, from_time, to_time), tổng tiền (total_money), tiền cọc (deposit_money), trạng thái duyệt (status), cùng danh mục món ăn đặt trước (quantity, price, total_price).
  • news, news_categories: Hệ thống truyền thông và tin tức ưu đãi.

Kiến trúc an toàn thông tin (Security Architecture)

  • Xác thực và phân quyền: Sử dụng Laravel Guards và Middleware tùy chỉnh để phân tách quyền truy cập giữa khách hàng và quản trị viên, ngăn chặn lỗ hổng IDOR (Insecure Direct Object References).
  • Mã hóa mật khẩu: Sử dụng thuật toán hàm băm một chiều bcrypt với chi phí tính toán cao (work factor), vô hiệu hóa các cuộc tấn công tra cứu bảng cầu vồng (Rainbow Table).
  • Chống tấn công phổ biến: Cơ chế bảo vệ CSRF Token tự động trên mọi form submit (ngăn ngừa Cross-Site Request Forgery), ràng buộc tham số qua Eloquent PDO Prepared Statements (loại bỏ hoàn toàn nguy cơ SQL Injection) và cơ chế escape HTML tự động trong Blade Template Engine (chống tấn công XSS - Cross-Site Scripting).

Phương pháp luận phát triển (Methodology)

Dự án áp dụng mô hình phát triển phần mềm lặp từng bước (Iterative Development) kết hợp nguyên lý Agile:

  • Giai đoạn 1 (Tuần 1 - 3): Khảo sát và Phân tích: Khảo sát quy trình phục vụ tại chỗ tại các chi nhánh Hải sản Cua Biển Đà Nẵng; lập sơ đồ Use Case tổng quát và UCD (Use Case Diagram); thiết kế từ điển dữ liệu.
  • Giai đoạn 2 (Tuần 4 - 8): Thiết kế & Lập trình khung lõi: Cấu hình môi trường XAMPP/PHPStorm, tạo các migration trong Laravel, hoàn thiện module Quản lý thực đơn và Xác thực người dùng (Auth).
  • Giai đoạn 3 (Tuần 9 - 13): Xây dựng tính năng nâng cao: Lập trình thuật toán kiểm tra xung đột thời gian đặt bàn, tính toán chi phí cọc và xây dựng giao diện giỏ hàng/đặt món.
  • Giai đoạn 4 (Tuần 14 - 16): Kiểm thử & Đánh giá: Thực hiện kiểm thử đơn vị (Unit Testing), kiểm thử chấp nhận người dùng (UAT), tối ưu hóa truy vấn SQL và đóng gói bàn giao.

Implementation và kết quả

Quy trình phát triển và Thuật toán cốt lõi

Trọng tâm của giải pháp nằm ở cơ chế phát hiện xung đột bàn ăn và quản lý trạng thái đặt bàn theo khung giờ động. Khi khách hàng gửi yêu cầu đặt bàn tại một chi nhánh cụ thể, hệ thống sẽ thực hiện truy vấn kiểm tra sự chồng lấn thời gian (Time Overlap Detection Algorithm).

Thuật toán đảm bảo không một bàn nào (restaurant_table_id) bị gán cho 2 booking khác nhau nếu khung giờ giao nhau: $$\text{Overlap} \iff (\text{Booking}{\text{new_from}} < \text{Booking}{\text{exist_to}}) \land (\text{Booking}{\text{new_to}} > \text{Booking}{\text{exist_from}})$$

Dưới đây là đoạn mã nguồn triển khai kiểm tra tính khả dụng của bàn trên Laravel Eloquent:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Booking;
use App\Models\BookingTable;
use App\Models\RestaurantTable;
use Carbon\Carbon;

class BookingController extends Controller
{
    /**
     * Kiểm tra tính khả dụng của bàn tại chi nhánh trong khung giờ cụ thể
     */
    public function checkTableAvailability($branchId, $tableId, $date, $fromTime, $toTime)
    {
        // Kiểm tra xem bàn có nằm trong chi nhánh được chọn hay không
        $tableExists = RestaurantTable::where('id', $tableId)
            ->whereHas('zone', function ($query) use ($branchId) {
                $query->where('restaurant_branch_id', $branchId);
            })->exists();

        if (!$tableExists) {
            return false;
        }

        // Truy vấn kiểm tra trùng lặp lịch đặt bàn đã duyệt hoặc đang chờ xử lý
        $isConflict = BookingTable::where('restaurant_table_id', $tableId)
            ->whereHas('booking', function ($query) use ($date, $fromTime, $toTime) {
                $query->where('date', $date)
                      ->whereIn('status', [1, 2]) // 1: Chờ duyệt, 2: Đã duyệt
                      ->where(function ($timeQuery) use ($fromTime, $toTime) {
                          $timeQuery->where(function ($q) use ($fromTime, $toTime) {
                              $q->where('from_time', '<', $toTime)
                                ->where('to_time', '>', $fromTime);
                          });
                      });
            })->exists();

        return !$isConflict;
    }

    /**
     * Xử lý lưu trữ đơn đặt bàn và tính toán tiền cọc
     */
    public function storeBooking(Request $request)
    {
        $validated = $request->validate([
            'branch_id'     => 'required|integer|exists:restaurant_branchs,id',
            'table_id'      => 'required|integer|exists:restaurant_tables,id',
            'booking_date'  => 'required|date|after_or_equal:today',
            'from_time'     => 'required|date_format:H:i',
            'to_time'       => 'required|date_format:H:i|after:from_time',
            'total_people'  => 'required|integer|min:1',
            'food_items'    => 'nullable|array',
            'food_items.*.id'       => 'required_with:food_items|exists:menu_items,id',
            'food_items.*.quantity' => 'required_with:food_items|integer|min:1'
        ]);

        // Kiểm tra bàn trống
        if (!$this->checkTableAvailability(
            $validated['branch_id'], 
            $validated['table_id'], 
            $validated['booking_date'], 
            $validated['from_time'], 
            $validated['to_time']
        )) {
            return response()->json(['message' => 'Bàn đã có khách đặt trong khung giờ này!'], 422);
        }

        \DB::beginTransaction();
        try {
            $totalFoodMoney = 0;
            // Khởi tạo đối tượng Booking
            $booking = new Booking();
            $booking->user_id = auth()->id() ?? 1; // Khách đăng nhập hoặc Guest ID
            $booking->date = $validated['booking_date'];
            $booking->from_time = $validated['from_time'];
            $booking->to_time = $validated['to_time'];
            $booking->total_people = $validated['total_people'];
            $booking->status = 1; // Trạng thái: Chờ duyệt
            $booking->save();

            // Lưu chi tiết đặt bàn
            $bookingTable = new BookingTable();
            $bookingTable->booking_id = $booking->id;
            $bookingTable->restaurant_table_id = $validated['table_id'];
            $bookingTable->people = $validated['total_people'];
            $bookingTable->price = 0.00;
            $bookingTable->save();

            // Lưu chi tiết món ăn nếu có chọn trước
            if (!empty($validated['food_items'])) {
                foreach ($validated['food_items'] as $item) {
                    $menuItem = \App\Models\MenuItem::findOrFail($item['id']);
                    $itemPrice = $menuItem->sale_price ?? $menuItem->price;
                    $lineTotal = $itemPrice * $item['quantity'];
                    $totalFoodMoney += $lineTotal;

                    \App\Models\BookingFood::create([
                        'booking_table_id' => $bookingTable->id,
                        'menu_item_id'     => $menuItem->id,
                        'quantity'         => $item['quantity'],
                        'price'            => $itemPrice,
                        'total_price'      => $lineTotal
                    ]);
                }
            }

            // Quy định: Đặt cọc 20% tổng giá trị món ăn (hoặc tối thiểu 200.000 VNĐ)
            $depositMoney = max(200000, $totalFoodMoney * 0.20);
            $booking->total_money = $totalFoodMoney;
            $booking->deposit_money = $depositMoney;
            $booking->save();

            \DB::commit();
            return response()->json(['message' => 'Đặt bàn thành công!', 'booking_id' => $booking->id], 201);
        } catch (\Exception $e) {
            \DB::rollBack();
            return response()->json(['message' => 'Lỗi hệ thống: ' . $e->getMessage()], 500);
        }
    }
}

Kiểm thử và Đánh giá (Testing & Validation)

Hệ thống được trải qua quá trình kiểm thử nghiêm ngặt bao gồm kiểm thử hộp đen (Black-box Testing) cho tất cả các kịch bản chức năng và kiểm thử tải hiệu năng cục bộ:

STT Kịch bản kiểm thử (Test Scenario) Dữ liệu đầu vào (Input Data) Kết quả kỳ vọng Trạng thái
TC01 Đăng ký tài khoản mới Email chưa tồn tại, mật khẩu > 6 ký tự Tạo record trong bảng users, trả về session hợp lệ Passed
TC02 Đặt bàn trùng lặp giờ Đặt Bàn 01 (Khu A) lúc 18:00 - 20:00 đã có đơn Báo lỗi 422, yêu cầu chọn khung giờ/bàn khác Passed
TC03 Tính tiền cọc tự động Chọn 3 món ăn tổng giá trị 1.500.000 VNĐ deposit_money tính chính xác 300.000 VNĐ (20%) Passed
TC04 Cập nhật menu phân cấp Thêm món cua sốt me vào menu_group_id = 2 Món hiển thị đúng danh mục, định dạng giá chuẩn Passed
TC05 Phân quyền truy cập Tài khoản khách hàng truy cập /admin/bookings Chặn truy cập, chuyển hướng 403 Forbidden Passed

Đánh giá hiệu năng kỹ thuật:

  • Thời gian phản hồi trang trung bình (Response Time): Đạt 185ms trên môi trường máy chủ cục bộ (Localhost Apache Server) và 240ms khi giả lập độ trễ mạng qua mạng LAN.
  • Tần suất xử lý đồng thời: Chịu tải ổn định ở mức 50 người dùng gửi request đặt bàn đồng thời mà không xảy ra hiện tượng xung đột dữ liệu (Deadlock) nhờ cơ chế Transaction Lock trong MySQL.
  • Độ chính xác dữ liệu: 100% các đơn đặt bàn phân tách chính xác giữa các chi nhánh, không xuất hiện hiện tượng trùng bàn.

Kết quả đạt được

Hệ thống đã hoàn thiện toàn bộ các trang chức năng theo cam kết ban đầu:

  • Trang chủ & Giới thiệu (Hình 3.1, Hình 3.2): Trình bày banner quảng bá, giới thiệu hình ảnh thương hiệu và định vị chuỗi nhà hàng trên bản đồ.
  • Thực đơn & Món ngon trong tháng (Hình 3.3, Hình 3.4): Phân loại món ăn theo danh mục, hiển thị hình ảnh món ăn trực quan, giá niêm yết và giá khuyến mãi.
  • Hệ thống đặt bàn & Giỏ hàng (Hình 3.6, Hình 3.8, Hình 3.10): Cho phép tùy chọn số lượng người, ngày giờ, khu vực chỗ ngồi và giỏ hàng chứa danh sách món hải sản đặt trước.
  • Bảng điều khiển quản trị (Hình 3.14, Hình 3.15, Hình 3.16): Giúp nhân viên và quản lý theo dõi danh sách đặt bàn theo trạng thái (Chờ duyệt, Đã duyệt, Hoàn thành, Đã hủy) và xuất hóa đơn chi tiết.

Đổi mới và đóng góp

  1. Số hóa khép kín quy trình phục vụ (End-to-End Digitalization): Thay vì chỉ dừng lại ở tính năng hiển thị thực đơn tĩnh, website kết hợp chặt chẽ việc đặt chỗ bàn ăn gắn liền với chọn món theo thực tế kho hải sản và xác nhận đặt cọc giữ chỗ trước 2 - 3 tiếng nếu không chuyển khoản, giúp giảm 90% thời gian xử lý thủ công của lễ tân.
  2. Kiến trúc dữ liệu quản lý đa chi nhánh (Multi-branch Data Architecture): Thiết kế bảng cơ sở dữ liệu có tính phân cấp cao (restaurant_branchs -> restaurant_zones -> restaurant_tables), cho phép chủ doanh nghiệp mở rộng quy mô thêm nhiều chi nhánh mới trên địa bàn thành phố mà không cần tái cấu trúc cơ sở dữ liệu.
  3. Minh bạch hóa trải nghiệm khách hàng: Tích hợp tính năng phản hồi, đánh giá sao (ratings) và định vị tuyến đường trực tiếp qua Google Maps, giúp du khách nước ngoài và khách ngoại tỉnh dễ dàng tiếp cận nhà hàng một cách tin cậy.

Ứng dụng thực tế và triển khai

Kịch bản sử dụng thực tế (Real-world Scenarios)

  • Kịch bản 1 - Du khách đặt bàn trước kỳ nghỉ: Một gia đình 6 người từ Hà Nội chuẩn bị du lịch Đà Nẵng truy cập website, chọn chi nhánh Cua Biển gần bãi biển Mỹ Khê, đặt trước bàn ăn phòng VIP lúc 19:00 ngày cuối tuần, chọn trước 1 phần Cua sốt me và 1 phần Tôm hùm hấp, chuyển khoản tiền cọc 300.000 VNĐ. Khi đến nơi, bàn và món ăn đã được chuẩn bị sẵn sàng mà không cần chờ đợi.
  • Kịch bản 2 - Nhân viên vận hành tại chỗ: Lễ tân nhà hàng mở giao diện quản trị (Hình 3.16), tiếp nhận yêu cầu đặt bàn của khách vãng lai gọi điện đến, chọn nhanh bàn trống trực tiếp trên màn hình cảm ứng POS để khóa vị trí bàn trong hệ thống.
+-----------------------------------------------------------------------------------+
|                        Lộ trình triển khai hệ thống (Roadmap)                     |
+-----------------------------------------------------------------------------------+
| Giai đoạn 1: Triển khai thử nghiệm tại Chi nhánh 1 (1 tháng)                      |
| -> Đào tạo nhân viên lễ tân, tối ưu hóa giao diện dựa trên góp ý thực tế.         |
+-----------------------------------------------------------------------------------+
| Giai đoạn 2: Nhân rộng toàn bộ chuỗi nhà hàng tại Đà Nẵng (2 tháng)               |
| -> Đồng bộ hóa dữ liệu toàn hệ thống, chạy chiến dịch marketing trên mạng xã hội. |
+-----------------------------------------------------------------------------------+
| Giai đoạn 3: Nâng cấp thanh toán tự động & Ứng dụng di động (3 tháng)             |
| -> Tích hợp cổng thanh toán VNPay/Momo và quét mã QR Code gọi món tại bàn.        |
+-----------------------------------------------------------------------------------+

Phân tích Chi phí - Lợi ích (Cost-Benefit Analysis)

  • Chi phí triển khai ban đầu: Dự toán khoảng 8 - 12 triệu VNĐ (chi phí thuê máy chủ Cloud VPS, tên miền .vn, chứng chỉ SSL và duy trì kỹ thuật).
  • Lợi ích kinh tế:
    • Tiết kiệm 100% chi phí hoa hồng cho các nền tảng trung gian (ước tính tiết kiệm từ 15 - 30 triệu VNĐ/tháng đối với chuỗi nhà hàng doanh thu vừa).
    • Giảm tỷ lệ no-show từ 25% xuống dưới 3% nhờ chính sách đặt cọc minh bạch.
    • Dự kiến hoàn vốn đầu tư (ROI) chỉ sau 1 - 2 tháng vận hành chính thức.

Hạn chế và hướng phát triển

Hạn chế hiện tại

  • Cơ chế xác nhận thanh toán bán tự động: Tính năng thanh toán tiền cọc hiện dựa trên hình thức chuyển khoản ngân hàng thủ công (bank_formation) và nhân viên phải đối soát sao kê để bấm duyệt trạng thái trên hệ thống.
  • Phụ thuộc vào môi trường Web Browser: Chưa có hệ thống thông báo đẩy (Push Notification) tức thời qua ứng dụng di động cho nhân viên phục vụ bàn.

Hướng phát triển trong tương lai

  1. Tích hợp cổng thanh toán tự động (Payment Gateway): Đấu nối API trực tiếp với VNPay, MoMo hoặc ZaloPay để tự động cập nhật trạng thái đơn đặt cọc ngay khi giao dịch thành công thông qua Webhook.
  2. Ứng dụng công nghệ quét mã QR tại bàn (Table QR Code Ordering): Cung cấp mã QR định danh cho từng bàn, cho phép khách hàng ngồi tại chỗ quét mã để gọi thêm món ăn hoặc yêu cầu thanh toán mà không cần gọi nhân viên.
  3. Phát triển Ứng dụng di động (Mobile App): Xây dựng ứng dụng đa nền tảng bằng Flutter cho cả hệ điều hành Android và iOS dành riêng cho quản lý và nhân viên bếp.

Đối tượng hưởng lợi

  • Sinh viên & Học viên ngành CNTT: Tài liệu mẫu chuẩn mực về việc xây dựng ứng dụng web quản lý F&B từ khâu khảo sát nghiệp vụ, phân tích Use Case, thiết kế cơ sở dữ liệu chuẩn hóa đến lập trình Laravel Framework thực chiến.
  • Lập trình viên Web (Developers): Cung cấp giải pháp mẫu về thuật toán xử lý xung đột thời gian trong bài toán Booking và cấu trúc phân quyền RBAC an toàn.
  • Chủ doanh nghiệp F&B & Quản lý nhà hàng: Sở hữu mô hình giải pháp số hóa chi phí thấp, giúp chủ động quản lý chuỗi chi nhánh, kiểm soát doanh số và giảm thiểu phụ thuộc vào các ứng dụng giao đồ ăn/đặt chỗ trung gian.
  • Khách hàng & Khách du lịch: Trải nghiệm dịch vụ ẩm thực hiện đại, minh bạch về giá cả, tiết kiệm thời gian chờ đợi và đảm bảo có vị trí ngồi ưng ý trong các dịp cao điểm.

Câu hỏi thường gặp

1. Yêu cầu cấu hình hệ thống máy chủ (System Requirements) để triển khai website là gì?

Hệ thống yêu cầu máy chủ Web chạy hệ điều hành Linux (Ubuntu Server 20.04/22.04 LTS) hoặc Windows Server, cài đặt Web Server Apache 2.4/Nginx, phiên bản PHP >= 7.4 (khuyến nghị PHP 8.x có cài đặt các extension pdo_mysql, mbstring, openssl, tokenizer, xml, ctype, json), và hệ quản trị cơ sở dữ liệu MySQL >= 5.7 hoặc MariaDB >= 10.3.

2. Hệ thống xử lý như thế nào khi có 2 khách hàng cùng bấm đặt một bàn tại cùng một thời điểm?

Hệ thống áp dụng kỹ thuật Database Transaction kết hợp cơ chế kiểm tra tính khả dụng của bàn ở tầng Controller trước khi ghi dữ liệu. Khi có tranh chấp đồng thời, request đến trước trong vòng vài mili-giây sẽ giành quyền ghi nhận và chuyển trạng thái bàn sang "Chờ duyệt", trong khi request đến sau sẽ nhận được thông báo lỗi 422 ("Bàn đã có khách đặt trong khung giờ này") và gợi ý chọn bàn khác.

3. Website có khả năng mở rộng (Scalability) khi nhà hàng mở thêm 10 chi nhánh mới không?

Cơ sở dữ liệu được thiết kế tối ưu hóa quan hệ 1-N giữa chuỗi chi nhánh (restaurant_branchs) với khu vực (restaurant_zones) và bàn ăn (restaurant_tables). Quản trị viên chỉ cần thêm dữ liệu chi nhánh mới thông qua giao diện quản trị mà không cần chỉnh sửa bất kỳ dòng mã nguồn nào.

4. Dữ liệu đặt bàn và thông tin khách hàng được bảo mật như thế nào?

Mọi thông tin mật khẩu đều được băm bằng thuật toán bcrypt an toàn. Các biểu mẫu gửi lên máy chủ đều bắt buộc có mã xác thực CSRF Token. Dữ liệu truy vấn qua cơ sở dữ liệu được kiểm soát 100% bằng Eloquent ORM sử dụng PDO parameter binding, loại bỏ hoàn toàn nguy cơ rò rỉ dữ liệu qua tấn công SQL Injection.

5. Chi phí vận hành hàng tháng của hệ thống ước tính khoảng bao nhiêu?

Chi phí vận hành định kỳ rất tiết kiệm, bao gồm phí duy trì Cloud VPS (khoảng 150.000 - 300.000 VNĐ/tháng) và tên miền (khoảng 30.000 VNĐ/tháng). Tổng chi phí vận hành chỉ chiếm chưa đến 1% chi phí vận hành chung của một chi nhánh nhà hàng.


Kết luận

Đề tài "Xây dựng website quản lý và đặt bàn cho nhà hàng Hải sản Cua Biển Đà Nẵng" do sinh viên Bùi Vạn Đạt thực hiện đã giải quyết toàn diện bài toán tin học hóa quản lý cho ngành dịch vụ ẩm thực địa phương. Đồ án không chỉ hoàn thành xuất sắc các mục tiêu học thuật về phân tích thiết kế hệ thống thông tin và lập trình Web trên nền tảng Laravel/MySQL mà còn mang lại giá trị thực tiễn to lớn: giúp tối ưu hóa 80% quy trình phục vụ, gia tăng tính minh bạch thông tin và nâng cao năng lực cạnh tranh cho thương hiệu ẩm thực trong kỷ nguyên chuyển đổi số.