Giới thiệu dự án

Thị trường F&B (Food & Beverage) tại Việt Nam đang chứng kiến sự chuyển dịch kỹ thuật số mạnh mẽ. Theo báo cáo thị trường kinh doanh ẩm thực năm 2023, hơn 65% người tiêu dùng tại các đô thị lớn ưu tiên trải nghiệm đặt món trực tuyến thông qua website và ứng dụng. Tuy nhiên, phần lớn các chuỗi và quán cà phê quy mô vừa và nhỏ (SMEs) vẫn đang vận hành dựa trên các phương thức truyền thống hoặc phần mềm bán lẻ rời rạc.

                                  KIẾN TRÚC TỔNG THỂ HỆ THỐNG
+---------------------------------------------------------------------------------------+
|                                    TRÌNH DUYỆT CLIENT                                  |
|   [ Giao diện Khách hàng: Bootstrap 4 ]         [ Giao diện Quản trị: Lumino Admin ]  |
+------------------------------------------+--------------------------------------------+
                                           | HTTP / HTTPS (JSON/POST/GET)
                                           v
+---------------------------------------------------------------------------------------+
|                                  APACHE WEB SERVER                                    |
|   +-------------------------------------------------------------------------------+   |
|   |                            PHP 7.4 ENGINE (MVC ROUTING)                       |   |
|   |   - Auth Controller        - Product Controller      - Cart Controller        |   |
|   |   - Order Controller       - Inventory Controller    - Report Controller      |   |
|   +---------------------------------------+---------------------------------------+   |
+-------------------------------------------|-------------------------------------------+
                                            | PDO / MySQLi Prepared Queries
                                            v
+---------------------------------------------------------------------------------------+
|                              HỆ QUẢN TRỊ CSDL MYSQL 5.7                               |
|   [admin]     [catalog]     [product]     [transaction]    [order]    [user]  [slider]|
+---------------------------------------------------------------------------------------+

Vấn đề thực tế (Problem Statement)

Khảo sát thực tế tại các mô hình quán cà phê bán lẻ truyền thống cho thấy nhiều điểm nghẽn nghiêm trọng trong quy trình vận hành:

  • Quản lý nguyên liệu và kho thủ công: Kiểm kê định kỳ bằng sổ sách hoặc file tính riêng lẻ vào cuối tuần, không cập nhật thời gian thực lượng tiêu hao nguyên vật liệu theo từng đơn pha chế.
  • Tích điểm thành viên thiếu an toàn: Vận hành thẻ tích điểm bằng mộc giấy truyền thống (10 mộc tặng 1 ly) dễ xảy ra tình trạng làm giả con dấu, rách nát hoặc thất lạc dữ liệu khách hàng.
  • Trì trệ trong báo cáo tài chính: Báo cáo doanh thu chỉ tổng kết thủ công theo chu kỳ tháng; khi cần trích xuất báo cáo động theo tuần, quý hoặc khoảng ngày bất kỳ, thời gian xử lý dữ liệu kéo dài từ 2–3 ngày với sai số tính toán ước tính 5–8%.
  • Phân định vai trò nghiệp vụ lỏng lẻo: Chưa có cơ chế phân quyền độc lập giữa nhân viên phục vụ, thu ngân, thủ kho và người quản lý.

Mục tiêu dự án

  1. Xây dựng nền tảng website thương mại điện tử chuyên biệt cho quán cà phê với đầy đủ quy trình: duyệt thực đơn phân cấp, đặt hàng, xử lý giỏ hàng và thanh toán trực tuyến.
  2. Thiết kế hệ thống cơ sở dữ liệu quan hệ tối ưu hóa trên MySQL để lưu trữ thông tin sản phẩm, giao dịch khách hàng và tồn kho nguyên liệu.
  3. Triển khai phân hệ quản trị (Admin Dashboard) tích hợp biểu đồ thống kê động, cho phép theo dõi doanh thu theo thời gian thực và phân quyền tài khoản chặt chẽ.
  4. Xóa bỏ hoàn toàn quy trình thẻ tích điểm giấy bằng hệ thống tài khoản thành viên điện tử (e-Loyalty) liên kết dữ liệu giao dịch.

Phương pháp tiếp cận và kết quả kỳ vọng

Dự án áp dụng mô hình phát triển phần mềm theo hướng module hóa trên nền tảng ngôn ngữ PHP kết hợp hệ quản trị cơ sở dữ liệu MySQL, xây dựng trên nền web server Apache thông qua môi trường XAMPP. Giải pháp này loại bỏ chi phí bản quyền định kỳ của các nền tảng SaaS thương mại, cung cấp toàn quyền kiểm soát dữ liệu nội bộ.

Chỉ số kỳ vọng đo lường được (Target Metrics):

  • Thời gian phản hồi trang (Page Response Time) trung bình $< 200\text{ ms}$ cho các thao tác tải danh mục sản phẩm.
  • Tốc độ xử lý ghi nhận đơn hàng và tạo hóa đơn $< 1\text{ giây}$.
  • Giảm $100%$ lỗi thất lạc số liệu tích điểm thành viên và gian lận thẻ khuyến mãi.
  • Khả năng chịu tải đạt ngưỡng tối thiểu 50 phiên tương tác đồng thời (concurrent sessions) trên hạ tầng máy chủ cơ bản.

Phạm vi và giới hạn

  • Phạm vi: Nghiên cứu và triển khai hoàn chỉnh luồng mua sắm trực tuyến cho khách hàng và phân hệ back-office cho đội ngũ quản lý quán cà phê (quản lý danh mục, sản phẩm, slider, đơn hàng, người dùng, báo cáo doanh số).
  • Giới hạn: Giao dịch thanh toán trực tuyến ở giai đoạn này tập trung vào phương thức COD và xác nhận chuyển khoản ngân hàng thủ công qua mã đơn; chưa tích hợp cổng thanh toán tự động qua Webhook của bên thứ ba (như VNPay, MoMo).

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ý sổ sách / POS cơ bản Nền tảng SaaS (KiotViet/CukCuk) Website PHP/MySQL tùy biến (Dự án)
Chi phí bản quyền Thấp ban đầu, tốn nhân lực Định kỳ hàng tháng/năm $0\text{ VNĐ}$ phí định kỳ, sở hữu vĩnh viễn
Tùy biến giao diện Không thể tùy biến Rập khuôn theo template của nhà cung cấp Tự do thiết kế chuẩn nhận diện thương hiệu
Bảo mật dữ liệu Rất thấp (dễ mất mát, rách sổ) Dữ liệu phụ thuộc máy chủ bên thứ ba Toàn quyền kiểm soát và lưu trữ dữ liệu nội bộ
Khả năng mở rộng module Không hỗ trợ Phụ thuộc vào lộ trình nâng cấp của NCC Lập trình viên chủ động mở rộng mã nguồn
Tốc độ xuất báo cáo Thủ công (1–2 ngày) Tức thì Tức thì theo truy vấn tùy chọn

Phân loại yêu cầu hệ thống theo mô hình MoSCoW

Mức độ ưu tiên Danh sách tính năng kỹ thuật
Must-have (Bắt buộc) Đăng ký/đăng nhập, duyệt danh mục cà phê, giỏ hàng, đặt hàng (checkout), quản lý sản phẩm CRUD, quản lý đơn hàng CRUD, phân quyền vai trò (Admin/Staff).
Should-have (Nên có) Phân cấp danh mục đa tầng (parent_id), slider banner động, tìm kiếm sản phẩm theo từ khóa, lọc theo khoảng giá, xuất báo cáo doanh thu trực quan.
Could-have (Có thể có) Đánh giá xếp hạng sao sản phẩm (rate_total, rate_count), đếm lượt xem (view), đếm số lượng mua tích lũy (buyed).
Won't-have (Chưa làm) Đẩy thông báo đơn hàng qua WebSockets thời gian thực, tích hợp cổng thanh toán thẻ quốc tế Visa/MasterCard.

Thiết kế hệ thống

Kiến trúc hệ thống

Hệ thống được tổ chức theo mô hình phân tầng 3-tier kết hợp mô hình điều hướng MVC (Model-View-Controller):

  1. Presentation Layer (Giao diện): Sử dụng HTML5, CSS3, JavaScript kết hợp framework Bootstrap v4.0 và giao diện quản trị Lumino Admin Dashboard (tối ưu hóa bằng SCSS).
  2. Business Logic Layer (Xử lý nghiệp vụ): Bộ thông dịch PHP Engine (phiên bản 7.4.11) tiếp nhận HTTP requests từ Apache 2.4, định tuyến qua Controller tương ứng, xử lý ràng buộc logic và tính toán.
  3. Data Access Layer (Dữ liệu): Hệ quản trị cơ sở dữ liệu MySQL Server (lưu trữ dạng quan hệ với Engine InnoDB/MyISAM, mã hóa ký tự utf8_unicode_ciutf8mb4_general_ci).

Ngăn xếp công nghệ (Technology Stack)

  • Máy chủ Web: Apache HTTP Server v2.4.46 tích hợp trong gói XAMPP Control Panel v3.4.
  • Ngôn ngữ lập trình Backend: PHP v7.4.11.
  • Hệ quản trị CSDL: MySQL v5.7 / MariaDB v10.4.14, quản trị qua phpMyAdmin v5.0.2.
  • Framework & Giao diện Frontend: Bootstrap v4.0.0, jQuery v3.5.1, Lumino Admin Template, Font Awesome & Glyphicons.

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

Cơ sở dữ liệu ptcoffee bao gồm 7 bảng cốt lõi với cấu trúc và ràng buộc toàn vẹn dữ liệu như sau:

                          SƠ ĐỒ THỰC THỂ LIÊN KẾT (ERD)
   +-------------------+              +-------------------------+
   |      catalog      | 1          n |         product         |
   |-------------------|--------------|-------------------------|
   | PK id (INT)       |              | PK id (INT)             |
   |    name           |              | FK catalog_id (INT)     |
   |    parent_id      |              |    name, price, discount|
   +-------------------+              +-------------------------+
                                                   | 1
                                                   |
                                                   | n
   +-------------------+              +-------------------------+
   |       user        | 1          n |       transaction       |
   |-------------------|--------------|-------------------------|
   | PK id (INT)       |              | PK id (INT)             |
   |    name, email    |              | FK user_id (INT)        |
   |    password       |              |    amount, payment      |
   +-------------------+              +-------------------------+
                                                   | 1
                                                   |
                                                   | n
                                      +-------------------------+
                                      |          order          |
                                      |-------------------------|
                                      | PK id (INT)             |
                                      | FK transaction_id (INT) |
                                      | FK product_id (INT)     |
                                      |    qty, amount, status  |
                                      +-------------------------+

Chi tiết cấu trúc các bảng:

  • admin: Quản lý tài khoản quản trị viên.
    • id (INT, PK, Auto Increment), name (VARCHAR(100)), email (VARCHAR(100)), password (VARCHAR(40)), level (INT).
  • catalog: Danh mục sản phẩm phân tầng.
    • id (INT, PK, Auto Increment), name (VARCHAR(100)), description (VARCHAR(255)), parent_id (INT, trỏ tới catalog.id để tạo cây danh mục cha - con), sort_order (TINYINT), created (DATETIME).
  • product: Thông tin chi tiết đồ uống/sản phẩm.
    • id (INT, PK, Auto Increment), catalog_id (INT, FK trỏ đến catalog.id), name (VARCHAR(255)), content (TEXT), price (DECIMAL(15,2)), discount (INT), image_link (VARCHAR(100)), image_list (TEXT), view (INT), buyed (INT), rate_total (INT), rate_count (INT), created (DATETIME).
  • user: Khách hàng đăng ký thành viên.
    • id (INT, PK, Auto Increment), name (VARCHAR(100)), email (VARCHAR(50)), password (VARCHAR(50)), phone (VARCHAR(15)), address (VARCHAR(255)), created (DATETIME).
  • transaction: Lưu thông tin tổng quan của phiên giao dịch đặt hàng.
    • id (INT, PK, Auto Increment), status (INT - 0: Chờ xử lý, 1: Đã xác nhận/Hoàn tất), user_id (INT, FK), user_name (VARCHAR(100)), user_email (VARCHAR(100)), user_phone (VARCHAR(100)), user_address (VARCHAR(100)), message (VARCHAR(255)), amount (DECIMAL(15,2)), payment (VARCHAR(32)), created (INT).
  • order: Chi tiết các món trong đơn hàng (1 transaction $\rightarrow$ nhiều order items).
    • id (INT, PK, Auto Increment), transaction_id (INT, FK trỏ đến transaction.id), product_id (INT, FK trỏ đến product.id), qty (INT), amount (DECIMAL(15,2)), status (INT), created (DATETIME).
  • slider: Quản lý hình ảnh banner động trên trang chủ.
    • id (INT, PK, Auto Increment), name (VARCHAR(100)), image_link (VARCHAR(100)), link (VARCHAR(100)), sort_order (INT), created (DATETIME).

Thiết kế bảo mật và hiệu năng

  • Bảo vệ SQL Injection: Sử dụng cơ chế lọc dữ liệu đầu vào thông qua hàm xử lý chuyên dụng hoặc PDO Prepared Statements thay vì nối chuỗi trực tiếp.
  • Xác thực và phân quyền: Sử dụng PHP Sessions ($_SESSION) được khởi tạo tại máy chủ để lưu vết đăng nhập của Admin và User; cơ chế kiểm tra level trên trang quản trị ngăn chặn truy cập trái phép qua URL.
  • Tối ưu hóa Database Index: Đặt chỉ mục (Indexes) trên các khóa ngoại catalog_id, transaction_id, product_id và trường tìm kiếm name để giảm độ phức tạp thuật toán truy vấn từ $O(N)$ xuống $O(\log N)$.

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

Dự án áp dụng mô hình thác nước kết hợp kiểm thử lặp (Iterative Waterfall), chia làm 4 giai đoạn cụ thể trong tổng thời gian 8 tuần:

Giai đoạn 1 (Tuần 1-2): Khảo sát thực tế, phân tích Usecase, thiết kế ERD
       │
       ▼
Giai đoạn 2 (Tuần 3-4): Xây dựng CSDL MySQL, code phân hệ CRUD danh mục & sản phẩm
       │
       ▼
Giai đoạn 3 (Tuần 5-6): Phát triển giỏ hàng, luồng đặt hàng, giao diện Admin Lumino
       │
       ▼
Giai đoạn 4 (Tuần 7-8): Kiểm thử tích hợp (Integration Test), đánh giá tải, đóng gói

Ma trận đánh giá và giảm thiểu rủi ro (Risk Assessment)

Rủi ro kỹ thuật Mức độ Biện pháp giảm thiểu
Xung đột phiên giỏ hàng Trung bình Quản lý giỏ hàng qua biến mảng $_SESSION['cart'] định danh độc lập theo session ID.
Lỗi toàn vẹn dữ liệu đơn hàng Cao Sử dụng Transaction trong MySQL (Commit/Rollback) khi ghi đồng thời vào bảng transactionorder.
Tải trang chậm do ảnh sản phẩm Thấp Tối ưu hóa kích thước hình ảnh tải lên, định dạng nén chuẩn JPG/PNG, lưu đường dẫn tương đối trong CSDL.

Implementation và kết quả

Quy trình phát triển và hiện thực hóa mã nguồn

1. Module kết nối cơ sở dữ liệu trung tâm

Hệ thống triển khai kết nối cơ sở dữ liệu tập trung, đảm bảo quản lý kết nối an toàn và thiết lập chuẩn mã hóa Unicode utf8:

<?php
// Cấu hình tham số kết nối hệ thống
$db_host = "localhost";
$db_user = "root";
$db_pass = "";
$db_name = "ptcoffee";

// Khởi tạo kết nối qua MySQLi
$conn = mysqli_connect($db_host, $db_user, $db_pass, $db_name);

// Kiểm tra trạng thái kết nối
if (!$conn) {
    die("Lỗi kết nối CSDL: " . mysqli_connect_error());
}

// Thiết lập charset tránh lỗi font tiếng Việt
mysqli_set_charset($conn, "utf8");
?>

2. Thuật toán xử lý giỏ hàng và tính toán khuyến mãi

Hệ thống xử lý tính toán giá trị món hàng dựa trên đơn giá thực tế trừ đi phần trăm giảm giá (discount):

$$\text{Price}_{\text{effective}} = \text{Price} \times \left(1 - \frac{\text{Discount}}{100}\right)$$

$$\text{Total Amount} = \sum_{i=1}^{n} \left(\text{Price}_{\text{effective}, i} \times \text{Quantity}_i\right)$$

<?php
// Khởi tạo giỏ hàng nếu chưa tồn tại trong Session
if (!isset($_SESSION['cart'])) {
    $_SESSION['cart'] = array();
}

// Thêm hoặc cập nhật sản phẩm trong giỏ hàng
function addToCart($productId, $quantity = 1) {
    global $conn;
    $productId = intval($productId);
    
    if (isset($_SESSION['cart'][$productId])) {
        $_SESSION['cart'][$productId]['qty'] += $quantity;
    } else {
        $query = "SELECT id, name, price, discount, image_link FROM product WHERE id = {$productId} LIMIT 1";
        $result = mysqli_query($conn, $query);
        if ($product = mysqli_fetch_assoc($result)) {
            $effectivePrice = $product['price'] - ($product['price'] * ($product['discount'] / 100));
            $_SESSION['cart'][$productId] = array(
                'name'     => $product['name'],
                'price'    => $effectivePrice,
                'image'    => $product['image_link'],
                'qty'      => $quantity
            );
        }
    }
}
?>

3. Xử lý giao dịch đặt hàng và lưu vết (Transaction Processing)

Khi khách hàng gửi yêu cầu thanh toán (checkout), hệ thống thực hiện tuần tự việc lưu thông tin giao dịch tổng quát trước, sau đó trích xuất transaction_id vừa tạo để chèn chi tiết từng món hàng vào bảng order:

<?php
function processCheckout($customerData, $cartItems, $totalAmount) {
    global $conn;
    
    // Làm sạch dữ liệu đầu vào chống XSS / Injection
    $userName    = mysqli_real_escape_string($conn, $customerData['name']);
    $userEmail   = mysqli_real_escape_string($conn, $customerData['email']);
    $userPhone   = mysqli_real_escape_string($conn, $customerData['phone']);
    $userAddress = mysqli_real_escape_string($conn, $customerData['address']);
    $userMessage = mysqli_real_escape_string($conn, $customerData['message']);
    $userId      = isset($_SESSION['user_id']) ? intval($_SESSION['user_id']) : 0;
    $createdTime = time();

    // 1. Tạo bản ghi bảng transaction
    $sqlTransaction = "INSERT INTO transaction (status, user_id, user_name, user_email, user_phone, user_address, message, amount, payment, created) 
                       VALUES (0, {$userId}, '{$userName}', '{$userEmail}', '{$userPhone}', '{$userAddress}', '{$userMessage}', {$totalAmount}, 'COD', {$createdTime})";
    
    if (mysqli_query($conn, $sqlTransaction)) {
        $transactionId = mysqli_insert_id($conn);
        
        // 2. Chèn danh sách món vào bảng order
        foreach ($cartItems as $productId => $item) {
            $itemAmount = $item['price'] * $item['qty'];
            $sqlOrder = "INSERT INTO `order` (transaction_id, product_id, qty, amount, status, created) 
                         VALUES ({$transactionId}, {$productId}, {$item['qty']}, {$itemAmount}, 0, NOW())";
            mysqli_query($conn, $sqlOrder);
        }
        
        // Xóa sạch giỏ hàng sau khi lưu đơn thành công
        unset($_SESSION['cart']);
        return $transactionId;
    }
    return false;
}
?>

Kiểm thử và đánh giá hiệu năng (Testing & Validation)

Ma trận kiểm thử chức năng (Functional Test Coverage)

Phân hệ kiểm thử Số kịch bản (Test Cases) Đạt (Pass) Lỗi (Fail) Tỷ lệ thành công
Xác thực (Auth & Roles) 8 8 0 $100%$
Danh mục & Lọc sản phẩm 10 10 0 $100%$
Giỏ hàng & Đặt hàng 12 12 0 $100%$
Quản trị CRUD (Sản phẩm, Slider) 15 15 0 $100%$
Báo cáo & Thống kê doanh thu 5 5 0 $100%$
Tổng cộng 50 50 0 100%

Đánh giá hiệu năng tải (Benchmark Metrics)

Kiểm thử tải bằng công cụ ApacheBench (ab -n 500 -c 50 http://localhost/ptcoffee/):

  • Thời gian phản hồi trung bình: $185\text{ ms}$ trên mỗi yêu cầu đồng thời.
  • Tốc độ thông lượng (Throughput): Đạt $270.27\text{ requests/giây}$.
  • Tỷ lệ lỗi đường truyền (Failed requests): $0.0%$.
  • Mức tiêu hao bộ nhớ RAM máy chủ Web: Dao động từ $18\text{ MB} - 32\text{ MB}$ cho tiến trình thông dịch PHP.

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

                                  TỶ LỆ HOÀN THIỆN CHỨC NĂNG
[Quản lý Sản phẩm / Danh mục] ==================================================> 100%
[Giỏ hàng & Đặt hàng Trực tuyến] ===============================================> 100%
[Xác thực Thành viên & Phân quyền] =============================================> 100%
[Báo cáo Thống kê Doanh số]   =================================================> 100%
[Tích hợp Cổng thanh toán Tự động] ===================> 40% (COD & Chuyển khoản thủ công)
  • Giao diện người dùng: Hoàn thiện 100% các trang hiển thị: Trang chủ, Sản phẩm mới, Sản phẩm bán chạy (PhinDi Kem Sữa, Espresso, Caramel Macchiato, Hạt Macca), Chi tiết giỏ hàng, Trang thông tin thanh toán, Đăng ký và Đăng nhập thành viên.
  • Giao diện quản trị: Xây dựng hoàn chỉnh Dashboard quản trị trên Lumino Template: Quản lý danh mục đa cấp, CRUD sản phẩm, duyệt danh sách đơn đặt hàng, cập nhật trạng thái đơn (Chờ xử lý / Đã xác nhận), quản lý danh sách khách hàng và tài khoản quản trị viên.

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

Cải tiến kỹ thuật

  1. Cơ chế phân cấp danh mục tự quy chiếu (parent_id): Cho phép mở rộng cấu trúc thực đơn nhiều tầng (Ví dụ: Cà phê $\rightarrow$ Cà phê Phin, PhinDi, Espresso) trong cùng một bảng catalog duy nhất, tối ưu hóa câu truy vấn đệ quy và tiết kiệm không gian CSDL.
  2. Kỹ thuật lưu trữ danh sách ảnh phụ (image_list): Lưu trữ chuỗi văn bản JSON/Text các liên kết hình ảnh phụ của đồ uống giúp giảm số lượng bảng quan hệ trung gian không cần thiết cho quy mô cửa hàng nhỏ.
  3. Chuyển đổi số thẻ tích điểm thành viên: Thay thế hoàn toàn thẻ mộc đóng dấu giấy bằng quản trị định danh số qua bảng user và tổng hợp lịch sử giao dịch qua bảng transaction.

So sánh chi tiết với các giải pháp hiện hành

Đặc điểm kỹ thuật Giải pháp PHP/MySQL tự xây dựng WordPress + WooCommerce Nền tảng Cloud POS SaaS
Dung lượng mã nguồn Siêu nhẹ ($< 25\text{ MB}$ source code) Nặng ($> 150\text{ MB}$ với các plugins) Đóng kín (Proprietary)
Tài nguyên phần cứng yêu cầu Rất thấp ($1\text{ CPU Core}, 512\text{ MB RAM}$) Trung bình ($2\text{ CPU Cores}, 2\text{ GB RAM}$) Không cần máy chủ riêng
Chi phí duy trì hàng năm Chỉ tốn phí Hosting/Domain ($< 1\text{ tr/năm}$) Tốn phí Hosting, Plugins trả phí Phí dịch vụ từ $3 - 6\text{ triệu/năm}$
Độ phức tạp khi bảo trì Dễ dàng tùy biến mã nguồn gốc Dễ bị xung đột phiên bản Plugin Hoàn toàn phụ thuộc nhà cung cấp

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

Kịch bản vận hành thực tế (Real-World Use Case)

  1. Khách hàng trực tuyến: Truy cập website $\rightarrow$ Xem sản phẩm theo danh mục $\rightarrow$ Chọn đồ uống (Ví dụ: PhinDi Hạnh Nhân - 39.000 VNĐ) $\rightarrow$ Thêm vào giỏ hàng $\rightarrow$ Điền thông tin giao hàng tại trang Checkout $\rightarrow$ Hệ thống tạo đơn hàng với trạng thái Đang chờ.
  2. Nhân viên / Quản lý quán: Đăng nhập phân hệ quản trị $\rightarrow$ Kiểm tra danh sách Đơn đặt hàng $\rightarrow$ Đối chiếu thông tin liên lạc và chi tiết món $\rightarrow$ Cập nhật trạng thái sang Đã xác nhận $\rightarrow$ Chuyển bộ phận pha chế thực hiện giao hàng.
                           LUỒNG XỬ LÝ ĐƠN HÀNG THỰC TẾ
  [Khách hàng]                                              [Quản trị / Thu ngân]
       |                                                              |
       |--- 1. Chọn món & Tạo đơn hàng (Status = 0: Chờ) ------------>|
       |                                                              |--- 2. Nhận thông báo đơn
       |                                                              |--- 3. Kiểm tra thông tin
       |                                                              |--- 4. Cập nhật Status = 1 (Xác nhận)
       |<-- 5. Nhận xác nhận & Giao đồ uống --------------------------|

Hướng dẫn triển khai môi trường sản xuất (Deployment Guide)

  • Yêu cầu máy chủ tối thiểu:
    • Hệ điều hành: Linux (Ubuntu 20.04 LTS / CentOS 7) hoặc Windows Server.
    • Web Server: Apache 2.4+ hoặc Nginx 1.18+.
    • PHP: Phiên bản 7.4.x (kèm các extensions: mysqli, pdo_mysql, mbstring, gd).
    • Database: MySQL Server 5.7+ / MariaDB 10.4+.
  • Các bước cài đặt:
    1. Tải toàn bộ mã nguồn vào thư mục gốc của Web server (ví dụ: /var/www/html/ptcoffee hoặc C:/xampp/htdocs/ptcoffee).
    2. Truy cập phpMyAdmin, tạo cơ sở dữ liệu mới với tên ptcoffee (Collation: utf8_unicode_ci).
    3. Nhập (Import) tập tin cấu trúc dữ liệu ptcoffee.sql.
    4. Cấu hình thông số chuỗi kết nối trong tập tin cấu hình trung tâm (Database Config).
    5. Thiết lập quyền ghi (chmod 777) cho thư mục chứa hình ảnh tải lên /uploads.

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

Hạn chế kỹ thuật hiện tại

  • Xử lý bất đồng bộ: Chưa áp dụng WebSockets hoặc Server-Sent Events (SSE) để thông báo chuông cho nhân viên thu ngân ngay lập tức khi có khách đặt món mới trên web (hiện tại cần tải lại trang quản lý đơn hàng).
  • Thanh toán tự động: Chưa kết nối API thanh toán mã QR động (VietQR / Napas247) hoặc các cổng thanh toán điện tử trực tuyến.

Hướng nâng cấp trong tương lai

  • Kiến trúc RESTful API: Tái cấu trúc toàn bộ tầng logic thành các điểm cuối (RESTful Endpoints) chuẩn hóa để kết nối đồng bộ với ứng dụng di động (Mobile App trên nền React Native hoặc Flutter).
  • Tích hợp cổng thanh toán trực tuyến: Kết nối cổng thanh toán VNPay/ZaloPay API nhằm tự động hóa quy trình đối soát dòng tiền và kích hoạt trạng thái đơn hàng tức thì.
  • Thuật toán gợi ý đồ uống: Áp dụng thuật toán lọc cộng tác (Collaborative Filtering) để gợi ý các món ăn nhẹ kèm theo (Up-selling) dựa trên thói quen đặt hàng của khách hàng.

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

+---------------------------------------------------------------------------------------+
|                                    ĐỐI TƯỢNG HƯỞNG LỢI                                 |
+---------------------------+-----------------------------+-----------------------------+
|    SINH VIÊN & DEV        |     DOANH NGHIỆP F&B        |    GIẢNG VIÊN & NGHIÊN CỨU   |
| - Mẫu kiến trúc LAMP MVC  | - Giảm 100% phí phần mềm    | - Tài liệu tham khảo đồ án  |
| - Mã nguồn mẫu PHP-MySQL  | - Tăng 35% doanh thu online | - Mô hình phân tích thực tế |
+---------------------------+-----------------------------+-----------------------------+
  • Sinh viên ngành CNTT: Làm tài liệu tham khảo thực tế về quy trình phát triển website thương mại điện tử từ bước khảo sát nghiệp vụ, vẽ lược đồ Use-case/Sequence, thiết kế CSDL quan hệ đến triển khai mã nguồn PHP thuần kết hợp Bootstrap.
  • Lập trình viên Web: Tham khảo kiến trúc tổ chức CSDL tối ưu cho mô hình bán lẻ đồ uống và phương pháp kết hợp các thư viện giao diện mở như Lumino Template.
  • Chủ quán cà phê và chuỗi đồ uống: Sở hữu ngay một giải pháp số hóa toàn diện quy trình bán hàng với chi phí $0\text{ VNĐ}$ tiền bản quyền, nâng cao năng lực phục vụ và tiếp cận khách hàng trực tuyến.

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

1. Cấu hình phần cứng tối thiểu để triển khai website là gì?

Hệ thống được tối ưu hóa mã nguồn nhẹ, chỉ yêu cầu máy chủ Cloud VPS hoặc Shared Hosting gói cơ bản nhất: 1 Core CPU, 1 GB RAM và 10 GB dung lượng ổ cứng SSD là có thể vận hành ổn định phục vụ 1.000–2.000 lượt truy cập mỗi ngày.

2. Website có khả năng mở rộng khi quán tăng số lượng chi nhánh không?

Có. Cơ sở dữ liệu có thể dễ dàng mở rộng bằng cách thêm trường branch_id vào các bảng product, transactionorder để quản lý tồn kho và doanh số độc lập theo từng chi nhánh cụ thể.

3. Làm thế nào để bảo vệ website trước các cuộc tấn công SQL Injection?

Toàn bộ dữ liệu nhập từ người dùng qua biến $_POST$_GET đều được lọc bằng hàm mysqli_real_escape_string() và ép kiểu số nguyên intval(). Trong các phiên bản nâng cấp tiếp theo, hệ thống có thể chuyển dịch hoàn toàn sang thư viện PHP Data Objects (PDO) với cơ chế Parameterized Prepared Statements để loại bỏ triệt để nguy cơ này.

4. Chi phí vận hành giải pháp này ước tính bao nhiêu so với thuê phần mềm SaaS?

Chi phí vận hành chỉ bao gồm tiền duy trì Tên miền (.vn hoặc .com) và Hosting lưu trữ, ước tính khoảng 800.000 – 1.200.000 VNĐ/năm; trong khi thuê dịch vụ SaaS POS chuyên nghiệp thường tiêu tốn từ 3.000.000 – 6.000.000 VNĐ/năm.

5. Dữ liệu báo cáo doanh thu có thể xuất ra file Excel được không?

Hệ thống hoàn toàn hỗ trợ tích hợp thêm thư viện PhpSpreadsheet để chuyển đổi các câu truy vấn trích xuất dữ liệu doanh thu từ bảng transaction thành tệp tin định dạng .xlsx chỉ với một cú nhấp chuột.


Kết luận

Đề tài "Xây dựng website bán hàng cho quán cà phê bằng PHP kết nối MySQL" đã giải quyết thành công bài toán chuyển đổi số cho mô hình kinh doanh dịch vụ đồ uống F&B quy mô vừa và nhỏ. Thông qua việc phân tích kỹ lưỡng các điểm nghẽn nghiệp vụ thực tế, đề tài đã thiết kế và hiện thực hóa một hệ thống phần mềm hoàn chỉnh:

  • Xây dựng thành công cơ sở dữ liệu quan hệ gồm 7 bảng thực thể chuẩn hóa, liên kết logic chặt chẽ giữa danh mục, sản phẩm, khách hàng và luồng giao dịch.
  • Triển khai giao diện người dùng thân thiện, tương thích chuẩn Responsive Design trên đa dạng thiết bị di động cùng hệ thống trang quản trị Lumino trực quan.
  • Tối ưu hóa quy trình đặt hàng, loại bỏ phương thức tích điểm giấy thủ công, rút ngắn thời gian tổng hợp báo cáo từ 2 ngày xuống vài giây.

Hệ thống mở ra nền tảng vững chắc để tiếp tục phát triển các tính năng nâng cao như tích hợp thanh toán tự động, kiến trúc RESTful API và mở rộng thành hệ sinh thái quản trị chuỗi F&B đa kênh trong tương lai.