Giới thiệu dự án
Ngành dịch vụ ăn uống (F&B - Food and Beverage) đang chứng kiến sự chuyển dịch mạnh mẽ từ các phương thức vận hành truyền thống sang mô hình số hóa toàn diện. Theo các thống kê ngành F&B, việc áp dụng công nghệ vào quy trình quản lý giúp giảm thiểu tới 40% thời gian chờ đợi của khách hàng và hạn chế hơn 60% sai sót trong quá trình ghi nhận đơn hàng (order) và tính tiền. Tuy nhiên, tại nhiều cơ sở kinh doanh vừa và lớn như Nhà hàng Trầu Cau, việc vận hành vẫn phụ thuộc vào hệ thống phần mềm đơn lẻ cài đặt trên hệ điều hành cũ (Windows XP) hoặc sổ sách thủ công, bộc lộ nhiều lỗ hổng nghiêm trọng trong quản lý chuỗi cung ứng, kiểm soát nhân sự và điều phối dịch vụ.
Problem Statement cụ thể: Nhà hàng Trầu Cau đối mặt với tình trạng tắc nghẽn thông tin giữa các bộ phận (phục vụ, thu ngân, kho, bếp và ban quản lý). Dữ liệu tồn kho không được đồng bộ theo thời gian thực với lượng món bán ra; khách hàng không thể tương tác trực tuyến để tra cứu thực đơn hoặc đặt bàn trước; hệ thống cũ thiếu cơ chế bảo mật phân quyền đa cấp, khả năng mở rộng kém và thường xuyên xung đột dữ liệu khi khối lượng giao dịch tăng cao vào giờ cao điểm.
Đề tài "Thiết kế và xây dựng Website quản lý nhà hàng" (áp dụng thực tế tại Nhà hàng Trầu Cau) được thực hiện bởi sinh viên Phạm Thiên Lý, dưới sự hướng dẫn của TS. Vũ Đức Quảng (Khoa Công nghệ Thông tin, Trường Đại học Quảng Nam), nhằm giải quyết triệt để các bài toán trên thông qua các mục tiêu cụ thể:
- Mục tiêu 1: Nghiên cứu chuyên sâu và làm chủ mô hình phát triển web hiện đại dựa trên nền tảng JavaScript đa nền tảng (Full-stack JavaScript), kết hợp môi trường thực thi Node.js, framework Express và hệ quản trị cơ sở dữ liệu quan hệ hướng đối tượng PostgreSQL.
- Mục tiêu 2: Phân tích, chuẩn hóa và mô hình hóa toàn bộ quy trình nghiệp vụ của Nhà hàng Trầu Cau thông qua hệ thống biểu đồ chuẩn UML (Use Case, Sequence Diagram, Collaboration Diagram, State Diagram).
- Mục tiêu 3: Xây dựng hoàn chỉnh ứng dụng web tích hợp đa phân hệ: đặt bàn trực tuyến cho khách hàng, hỗ trợ nghiệp vụ bán hàng (POS - Point of Sale) cho nhân viên phục vụ, thanh toán tự động cho thu ngân, quản lý xuất nhập tồn kho nguyên vật liệu và báo cáo thống kê doanh thu đa chiều cho ban quản lý.
- Mục tiêu 4: Đảm bảo hệ thống đạt hiệu năng cao, thời gian phản hồi API dưới 200ms, hoạt động ổn định trên môi trường mạng nội bộ kết hợp Internet với chi phí triển khai tối ưu nhờ 100% công nghệ mã nguồn mở.
Giải pháp được lựa chọn là xây dựng ứng dụng web theo kiến trúc MVC (Model-View-Controller) trên nền tảng Node.js và Express.js, kết nối cơ sở dữ liệu PostgreSQL. Hướng tiếp cận này tận dụng triệt để cơ chế xử lý bất đồng bộ không chặn (non-blocking I/O) và kiến trúc hướng sự kiện (event-driven) của Node.js, mang lại khả năng xử lý đồng thời hàng trăm kết nối giao dịch mà không làm tiêu tốn tài nguyên phần cứng máy chủ.
Phạm vi nghiên cứu bao gồm việc chuẩn hóa quy trình quản lý chuỗi dịch vụ khép kín tại Nhà hàng Trầu Cau trên môi trường đa máy khách (Clients) kết nối mạng cục bộ/Internet. Giới hạn của dự án tập trung vào phiên bản ứng dụng web tối ưu hóa cho trình duyệt máy tính và thiết bị di động, chưa bao gồm ứng dụng di động độc lập (Native Mobile App) hoặc tích hợp cổng thanh toán trực tuyến của bên thứ ba.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Khảo sát thực tế tại Nhà hàng Trầu Cau cho thấy phần mềm quản trị cũ bộc lộ nhiều điểm nghẽn kỹ thuật khi đối chiếu với các giải pháp thương mại hiện hành:
| Tiêu chí đánh giá |
Hệ thống cũ (Desktop App - Windows XP) |
Giải pháp SaaS thương mại (KiotViet, CukCuk) |
Giải pháp Website đề xuất (Node.js & PostgreSQL) |
| Kiến trúc hệ thống |
Client-Server cục bộ, phụ thuộc OS Windows cũ |
Đám mây tập trung (Multi-tenant Cloud) |
Web-based (Kiến trúc MVC, RESTful API nội bộ/cloud) |
| Khả năng truy cập từ xa |
Không hỗ trợ |
Rất tốt (qua Internet) |
Tốt (truy cập qua mạng LAN hoặc IP Public/Domain) |
| Tương tác khách hàng |
Không (chỉ dành cho nhân viên nội bộ) |
Có (hỗ trợ trang đặt hàng online cơ bản) |
Tích hợp cổng thông tin, đặt bàn & gọi món trực tiếp |
| Chi phí bản quyền/duy trì |
Mua một lần, không có cập nhật mới |
Thu phí định kỳ hàng tháng/năm theo gói |
Chi phí bản quyền phần mềm 0 VNĐ (Mã nguồn mở) |
| Độ tùy biến theo quy trình |
Cố định, không thể mở rộng mã nguồn |
Giới hạn theo tính năng của nhà cung cấp |
Linh hoạt 100%, dễ dàng may đo theo nghiệp vụ Trầu Cau |
| Bảo mật & Phân quyền |
Thấp, dễ mất mát dữ liệu khi hỏng ổ cứng |
Cao (phụ thuộc hạ tầng nhà cung cấp) |
Phân quyền RBAC đa cấp, toàn vẹn dữ liệu ACID |
Yêu cầu người dùng được phân loại theo mô hình MoSCoW:
- Must Have (Bắt buộc): Đăng nhập/xác thực bảo mật; Bán hàng tại bàn (tạo hóa đơn, chuyển bàn, ghép bàn); Quản lý kho (nhập nguyên vật liệu, cảnh báo tồn kho); Thanh toán và in hóa đơn; Thống kê doanh thu theo chu kỳ.
- Should Have (Nên có): Đặt bàn và chọn món trước qua giao diện Web; Quản lý thông tin nhà cung cấp và lịch sử đơn giá nhập; Quản lý hồ sơ nhân viên và chấm công.
- Could Have (Có thể có): Quản lý thẻ ưu đãi khách hàng thân thiết; Tự động chiết khấu theo hóa đơn.
- Won't Have (Chưa thực hiện): Tích hợp thanh toán QR tự động qua cổng ngân hàng (VietQR/Momo); Phân tích dự báo nguyên liệu bằng AI.
Thiết kế hệ thống
Hệ thống được thiết kế theo mô hình 3 tầng (3-Tier Architecture) kết hợp mô hình MVC, đảm bảo tính tách biệt giữa tầng hiển thị (Presentation Layer), tầng xử lý nghiệp vụ (Business Logic Layer) và tầng dữ liệu (Data Access Layer).
graph TD
subgraph Client_Tier [Presentation Layer - Client]
A1[Khách hàng - Web Browser]
A2[Nhân viên phục vụ - Tablet/PC]
A3[Thu ngân / Quản lý - POS PC]
A4[Thủ kho - Warehouse PC]
end
subgraph Application_Tier [Application Layer - Node.js Server]
B1[Reverse Proxy / Routing ExpressJS]
B2[Authentication & Authorization Middleware]
B3[Order & Table Controller]
B4[Warehouse & Inventory Controller]
B5[Billing & Report Controller]
end
subgraph Data_Tier [Database Layer - PostgreSQL]
C1[(PostgreSQL RDBMS Engine)]
C2[Tables: NHANVIEN, BAN, HOADON]
C3[Tables: NGUYENVATLIEU, PHIEUNHAP, KHO]
end
A1 -->|HTTP/HTTPS REST Request| B1
A2 -->|AJAX JSON Request| B1
A3 -->|HTTP POST/GET| B1
A4 -->|HTTP POST/GET| B1
B1 --> B2
B2 --> B3
B2 --> B4
B2 --> B5
B3 -->|pg Client Connection Pool| C1
B4 -->|SQL Queries / Prepared Statements| C1
B5 -->|Aggregated SQL Functions| C1
C1 --- C2
C1 --- C3
Technology Stack và phiên bản cụ thể
- Runtime Environment: Node.js (v10.15.x LTS / tương thích v12+) với V8 JavaScript Engine.
- Backend Framework: Express.js (v4.16.x) định tuyến HTTP route, quản lý middleware.
- Database Engine: PostgreSQL (v10.x / v11.x) - Hệ quản trị cơ sở dữ liệu quan hệ hướng đối tượng (ORDBMS).
- Database Driver:
pg (node-postgres v7.8.x) hỗ trợ connection pooling.
- Frontend Architecture: HTML5 Semantic Tags, CSS3 Responsive Styling, JavaScript (ES6+), jQuery (v3.3.1), Bootstrap UI framework.
Thiết kế cơ sở dữ liệu (Database Schema)
Cơ sở dữ liệu bao gồm các thực thể quan hệ chặt chẽ: NHANVIEN, BAN, HOADON, CHITIET_HOADON, MON, NGUYENVATLIEU, PHIEUNHAP, NHACUNGCAP, KHO.
-- DDL cấu trúc bảng đại diện cho phân hệ Hóa đơn và Bàn ăn
CREATE TABLE BAN (
ma_ban VARCHAR(10) PRIMARY KEY,
ten_ban VARCHAR(50) NOT NULL,
ma_loaiban VARCHAR(10),
vitri VARCHAR(50),
tinhtrang VARCHAR(20) DEFAULT 'TRONG', -- 'TRONG', 'CO_KHACH', 'DAT_TRUOC'
ghichu TEXT
);
CREATE TABLE HOADON (
ma_hd SERIAL PRIMARY KEY,
ma_ban VARCHAR(10) REFERENCES BAN(ma_ban) ON UPDATE CASCADE,
ma_nv VARCHAR(10) NOT NULL,
ngaylap TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
tongtien NUMERIC(15, 2) DEFAULT 0.00,
trangthai VARCHAR(20) DEFAULT 'CHUA_THANH_TOAN', -- 'CHUA_THANH_TOAN', 'DA_THANH_TOAN'
ghichu TEXT
);
CREATE TABLE NGUYENVATLIEU (
ma_nvl VARCHAR(10) PRIMARY KEY,
ten_nvl VARCHAR(100) NOT NULL,
loainvl VARCHAR(50),
soluong NUMERIC(10, 2) DEFAULT 0,
donvitinh VARCHAR(20),
dongia NUMERIC(15, 2) NOT NULL,
hsd DATE
);
Thiết kế REST API Endpoints tiêu chuẩn
POST /api/auth/login: Xác thực danh tính người dùng, cấp phát phiên làm việc (Session/Token).
GET /api/tables: Truy xuất trạng thái danh sách bàn ăn thời gian thực.
POST /api/orders/create: Tạo đơn gọi món mới cho bàn chỉ định.
PUT /api/orders/:id/checkout: Đóng hóa đơn, tính tổng tiền, cập nhật trạng thái bàn về TRONG.
POST /api/inventory/import: Ghi nhận phiếu nhập kho nguyên vật liệu và tăng số lượng tồn.
GET /api/reports/revenue?from=...&to=...: Tổng hợp báo cáo doanh thu theo khoảng thời gian.
Methodology
Dự án được triển khai theo mô hình Agile/Scrum rút gọn, chia thành 4 giai đoạn chính (Sprints) kéo dài trong 12 tuần:
| Giai đoạn (Milestone) |
Thời gian |
Nội dung công việc và Deliverables |
| Sprint 1: Phân tích & Thiết kế |
Tuần 1 - Tuần 3 |
Khảo sát thực địa tại Trầu Cau; Lập tài liệu đặc tả yêu cầu SRS; Thiết kế sơ đồ Use Case, DFD, ERD; Khởi tạo schema PostgreSQL. |
| Sprint 2: Xây dựng Backend Core |
Tuần 4 - Tuần 7 |
Xây dựng REST API bằng Express.js; Cấu hình kết nối cơ sở dữ liệu PostgreSQL (pg pool); Viết các module xác thực, xử lý đơn hàng và quản lý kho. |
| Sprint 3: Xây dựng Frontend UI |
Tuần 8 - Tuần 10 |
Thiết kế giao diện Responsive với Bootstrap & CSS3; Tích hợp luồng AJAX tương tác với API; Hoàn thiện màn hình POS, màn hình Quản trị và màn hình Client. |
| Sprint 4: Kiểm thử & Triển khai |
Tuần 11 - Tuần 12 |
Kiểm thử chức năng (Functional Testing); Kiểm thử tải (Stress Testing); Triển khai thử nghiệm tại máy chủ nội bộ nhà hàng; Bàn giao tài liệu. |
Ma trận đánh giá và giảm thiểu rủi ro kỹ thuật
| Rủi ro kỹ thuật |
Mức độ |
Biện pháp giảm thiểu (Mitigation Strategy) |
| Tranh chấp ghi dữ liệu khi nhiều thu ngân/phục vụ thao tác cùng lúc |
Cao |
Sử dụng Transaction (BEGIN...COMMIT) với mức cô lập thích hợp trong PostgreSQL để đảm bảo tính ACID. |
| Rò rỉ kết nối cơ sở dữ liệu làm sập máy chủ |
Trung bình |
Cấu hình Connection Pooling trong thư viện pg với giới hạn max: 20 kết nối đồng thời và idleTimeoutMillis: 30000. |
| Mất mát dữ liệu khi mất điện đột ngột |
Cao |
Thiết lập cơ chế tự động sao lưu định kỳ (pg_dump cronjob) và cấu hình Write-Ahead Logging (WAL) của PostgreSQL. |
Implementation và kết quả
Development process
Cấu trúc mã nguồn của hệ thống được tổ chức nhất quán theo chuẩn MVC trên nền tảng Node.js:
restaurant-management/
├── app.js # File khởi tạo server, cấu hình middleware và kết nối DB
├── package.json # Khai báo dependencies, scripts và cấu hình dự án
├── config/
│ └── db.js # Cấu hình Pool kết nối PostgreSQL
├── controllers/
│ ├── authController.js # Xử lý đăng nhập, phân quyền người dùng
│ ├── orderController.js # Nghiệp vụ bán hàng, gọi món, tính tiền
│ ├── stockController.js # Quản lý kho, nhập/xuất nguyên vật liệu
│ └── reportController.js# Tổng hợp số liệu, thống kê doanh thu
├── routes/
│ ├── apiRoutes.js # Định tuyến các API endpoints
│ └── viewRoutes.js # Định tuyến hiển thị giao diện trang
├── views/ # Giao diện HTML template
└── public/ # Tài nguyên tĩnh: CSS, JavaScript client, hình ảnh
Xử lý nghiệp vụ Backend và Transaction với Node.js & PostgreSQL
Đoạn mã xử lý thanh toán hóa đơn và giải phóng trạng thái bàn ăn, đảm bảo tính toàn vẹn dữ liệu:
// controllers/orderController.js
const pool = require('../config/db');
exports.thanhToanHoaDon = async (req, res) => {
const { ma_hd, ma_ban, ma_nv, tien_khach_dua } = req.body;
const client = await pool.connect();
try {
await client.query('BEGIN'); // Bắt đầu Transaction
// 1. Tính tổng tiền từ chi tiết hóa đơn
const sumQuery = `
SELECT SUM(soluong * dongia) AS tong_tien
FROM CHITIET_HOADON
WHERE ma_hd = $1
`;
const sumResult = await client.query(sumQuery, [ma_hd]);
const tongTien = parseFloat(sumResult.rows[0].tong_tien || 0);
if (tien_khach_dua < tongTien) {
await client.query('ROLLBACK');
return res.status(400).json({ success: false, message: 'Số tiền khách đưa không đủ thanh toán.' });
}
// 2. Cập nhật trạng thái hóa đơn thành DA_THANH_TOAN
const updateHdQuery = `
UPDATE HOADON
SET tongtien = $1, trangthai = 'DA_THANH_TOAN', ngaylap = CURRENT_TIMESTAMP
WHERE ma_hd = $2
`;
await client.query(updateHdQuery, [tongTien, ma_hd]);
// 3. Cập nhật trạng thái bàn về TRONG
const updateBanQuery = `
UPDATE BAN
SET tinhtrang = 'TRONG'
WHERE ma_ban = $1
`;
await client.query(updateBanQuery, [ma_ban]);
await client.query('COMMIT'); // Hoàn tất Transaction
const tienThoi = tien_khach_dua - tongTien;
return res.status(200).json({
success: true,
data: { ma_hd, tongTien, tien_khach_dua, tienThoi, status: 'Completed' }
});
} catch (error) {
await client.query('ROLLBACK');
console.error('Lỗi khi thực thi thanh toán:', error.stack);
return res.status(500).json({ success: false, message: 'Lỗi máy chủ nội bộ khi xử lý thanh toán.' });
} finally {
client.release(); // Giải phóng client về lại connection pool
}
};
Testing và validation
Hệ thống đã trải qua quá trình kiểm thử nghiêm ngặt bao gồm Unit Test, Integration Test và User Acceptance Testing (UAT).
- Độ bao phủ kiểm thử (Test Coverage):
- Phân hệ Xác thực & Phân quyền: 100% ca kiểm thử đạt yêu cầu.
- Phân hệ Bán hàng & Tính tiền: 98% test case tự động vượt qua (bao gồm các ca kiểm thử biên số tiền, chiết khấu).
- Phân hệ Quản lý Kho & Nhập nguyên vật liệu: 95% pass rate.
- Kiểm thử hiệu năng (Performance Benchmarks):
- Sử dụng công cụ đo tải với mức 100 kết nối đồng thời (concurrency = 100), gửi tổng cộng 5,000 requests.
- Throughput: Đạt 650 requests/giây (req/sec).
- Thời gian đáp ứng trung bình (Average Latency): 42ms cho các truy vấn đơn và 118ms cho các truy vấn tính toán thống kê phức hợp.
- Thống kê lỗi (Bug Tracking): Ghi nhận tổng cộng 32 lỗi trong suốt các đợt alpha/beta testing, trong đó 100% lỗi mức độ Critical và High (như deadlock bảng dữ liệu, sai lệch định dạng tiền tệ) đã được khắc phục hoàn toàn trước giai đoạn nghiệm thu.
Kết quả đạt được
Hệ thống đã hoàn thành 100% các chức năng đề ra trong mục tiêu ban đầu:
| Phân hệ chức năng |
Chỉ tiêu kế hoạch |
Kết quả thực tế |
Tỷ lệ hoàn thành |
| Giao diện Khách hàng |
Xem thực đơn, đặt bàn, gửi yêu cầu món |
Hoàn thiện trên nền Responsive Web |
100% |
| Phân hệ Phục vụ (POS) |
Chọn bàn, chuyển bàn, ghi order món |
Hoạt động mượt mà, phản hồi < 100ms |
100% |
| Phân hệ Thu ngân |
Lập hóa đơn, tính tiền thừa, in phiếu |
Tính toán chính xác 100%, in hóa đơn nhanh |
100% |
| Phân hệ Kho hàng |
Nhập nguyên vật liệu, quản lý NCC, tồn kho |
Đồng bộ trực tiếp với cơ sở dữ liệu |
100% |
| Phân hệ Quản lý |
Báo cáo doanh thu ngày/tháng, nhân sự |
Xuất báo cáo trực quan dạng bảng biểu |
100% |
Đổi mới và đóng góp
- Ứng dụng kiến trúc Full-stack JavaScript tối ưu: Thay vì sử dụng mô hình tạo luồng mới cho mỗi truy vấn (Thread-per-request) truyền thống như PHP/Apache (tiêu tốn nhiều RAM và dễ nghẽn khi tài nguyên hạn chế), đề tài đã áp dụng Node.js với mô hình Non-blocking I/O Single Thread kết hợp Event Loop. Cải tiến này giúp tiết kiệm hơn 65% dung lượng RAM máy chủ và tăng thông lượng xử lý đồng thời lên 3 lần trên cùng một cấu hình phần cứng.
- Khai thác sức mạnh Cơ sở dữ liệu Quan hệ Hướng đối tượng PostgreSQL: Đề tài đã tận dụng khả năng xử lý dữ liệu phức hợp, tính tuân thủ ACID nghiêm ngặt và hỗ trợ mở rộng bảng dữ liệu lên tới 32TB của PostgreSQL, khắc phục triệt để nguy cơ sai lệch số liệu doanh thu và hàng tồn kho thường gặp ở các cơ sở dữ liệu quan hệ dung lượng nhỏ.
- Chuẩn hóa nghiệp vụ khép kín cho nhà hàng địa phương: Xây dựng thành công mối liên kết tự động giữa 5 tác nhân (Khách hàng - Phục vụ - Thu ngân - Thủ kho - Quản lý), loại bỏ hoàn toàn các bước ghi chép giấy tờ trung gian, rút ngắn thời gian xử lý đơn hàng từ lúc khách bước vào đến khi ra món xuống 50%.
Ứng dụng thực tế và triển khai
Môi trường triển khai thực tế
Hệ thống được thiết kế để triển khai linh hoạt trên hạ tầng máy chủ cục bộ (Local Server) tại Nhà hàng Trầu Cau hoặc máy chủ đám mây (Cloud VPS/Ubuntu Server):
- Yêu cầu phần cứng máy chủ tối thiểu:
- CPU: Dual-Core 2.0 GHz trở lên.
- RAM: 2 GB (khuyến nghị 4 GB).
- Ổ cứng: 20 GB dung lượng khả dụng (SSD).
- Yêu cầu phần mềm:
- Hệ điều hành: Ubuntu Server 18.04/20.04 LTS hoặc Windows Server / Windows 10 Pro.
- Node.js Runtime (v10.15+) và PostgreSQL Database Engine (v10+).
- Trình duyệt máy trạm: Google Chrome, Mozilla Firefox, Microsoft Edge, Cốc Cốc.
graph LR
subgraph LAN_Network [Mạng Cục Bộ Nhà Hàng Trầu Cau]
Server[(Node.js & PostgreSQL Server)]
AP[Wireless Router / Wi-Fi Access Point]
POS1[Máy Thu Ngân]
POS2[Máy Quản Lý]
Tab1[Tablet Phục Vụ 1]
Tab2[Tablet Phục Vụ 2]
end
Server <--> AP
AP <--> POS1
AP <--> POS2
AP <--> Tab1
AP <--> Tab2
Phân tích chi phí - lợi ích (Cost-Benefit Analysis & ROI)
- Chi phí phần mềm: 0 VNĐ phí bản quyền hàng tháng (tiết kiệm khoảng 3.600.000 - 6.000.000 VNĐ/năm so với thuê phần mềm SaaS).
- Thời gian hoàn vốn (ROI): Ước tính trong vòng 3.5 tháng nhờ giảm thiểu thất thoát nguyên vật liệu (ước tính giảm 15% hao hụt do kiểm soát kho tự động) và tăng công suất phục vụ bàn thêm 25% trong các khung giờ cao điểm.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Hệ thống hiện sử dụng cơ chế AJAX Polling định kỳ để cập nhật trạng thái bàn ăn, chưa tích hợp giao thức WebSocket hai chiều (Full-duplex WebSocket) thời gian thực hoàn chỉnh giữa khu vực Bếp và Phục vụ.
- Chưa có tính năng tích hợp trực tiếp máy quét mã vạch chuyên dụng cho khâu nhập kho nguyên liệu đóng gói sẵn.
- Giao diện báo cáo thống kê chủ yếu dưới dạng bảng dữ liệu chi tiết, chưa tích hợp các biểu đồ trực quan động (Chart.js/D3.js).
Hướng phát triển trong tương lai
- Tích hợp thư viện Socket.io để xây dựng hệ thống KDS (Kitchen Display System) - hiển thị đơn gọi món tức thì tại màn hình khu vực Bếp ngay khi Phục vụ gửi order.
- Xây dựng Progressive Web App (PWA) hoặc ứng dụng Native Mobile (React Native) dành riêng cho khách hàng VIP và nhân viên phục vụ cầm tay.
- Mở rộng phân hệ trí tuệ nhân tạo (AI/Machine Learning) nhằm dự báo nhu cầu nhập nguyên vật liệu theo từng mùa và đề xuất thực đơn thông minh dựa trên lịch sử gọi món của khách.
Đối tượng hưởng lợi
- Sinh viên & Học viên ngành CNTT: Tài liệu tham khảo hoàn chỉnh về quy trình xây dựng đồ án tốt nghiệp từ khảo sát, phân tích Use Case, thiết kế cơ sở dữ liệu đến lập trình Full-stack với Node.js, Express và PostgreSQL.
- Lập trình viên Web (Developers): Cung cấp mô hình kiến trúc MVC thực tế, kỹ thuật xử lý Transaction đảm bảo toàn vẹn dữ liệu trong cơ sở dữ liệu quan hệ và cách cấu hình Connection Pool trong Node.js.
- Chủ doanh nghiệp F&B & Quản lý nhà hàng: Mô hình giải pháp tinh gọn, tiết kiệm chi phí để hiện đại hóa quy trình vận hành, nâng cao chất lượng dịch vụ và ngăn chặn thất thoát tài chính.
- Nhà nghiên cứu ứng dụng: Khung mẫu (framework) đánh giá tính khả thi khi chuyển đổi hệ thống Legacy sang kiến trúc Web-based trong các doanh nghiệp vừa và nhỏ.
Câu hỏi thường gặp
1. Yêu cầu cấu hình kỹ thuật để triển khai và chạy website là gì?
Máy chủ cần cài đặt Node.js runtime (từ bản 10.x trở lên) và PostgreSQL Database Server (bản 10 hoặc 11). Hệ thống có thể chạy trên cả Linux (Ubuntu, CentOS) lẫn Windows. Máy khách chỉ cần trình duyệt web hiện đại có hỗ trợ JavaScript mà không cần cài thêm bất kỳ phần mềm chuyên biệt nào.
2. Hệ thống xử lý thế nào khi có nhiều nhân viên cùng đặt hoặc chỉnh sửa 1 bàn ăn?
Nhờ cơ chế Database Transaction (BEGIN ... COMMIT) kết hợp trạng thái khóa logic của bảng BAN (tinhtrang = 'CO_KHACH'), khi một yêu cầu order được xác nhận, trạng thái bàn sẽ được cập nhật ngay lập tức. Mọi yêu cầu trùng lặp sau đó sẽ nhận thông báo lỗi từ server, ngăn chặn hiện tượng ghi đè hay đặt trùng bàn.
3. Website có tích hợp được với các loại máy in hóa đơn nhiệt (POS Printer) không?
Có. Giao diện thanh toán hỗ trợ chuẩn in Web tiêu chuẩn (window.print()) được tối ưu hóa CSS cho các khổ giấy in nhiệt phổ biến như K80 (80mm) và K58 (58mm), tự động căn chỉnh lề và kích hoạt lệnh in ngay khi bấm "In Hóa Đơn".
4. Chi phí duy trì và bảo trì hệ thống định kỳ bao gồm những gì?
Do sử dụng hoàn toàn công nghệ mã nguồn mở (Node.js, PostgreSQL, Linux), chi phí phần mềm là 0 VNĐ. Nếu triển khai nội bộ (Local LAN), chi phí chỉ là tiền điện vận hành máy chủ mini. Nếu triển khai Online, chi phí duy trì chỉ bao gồm tiền thuê tên miền (Domain) và máy chủ ảo (Cloud VPS) khoảng 100.000 - 200.000 VNĐ/tháng.
5. Khả năng mở rộng của hệ thống khi nhà hàng mở thêm chi nhánh mới ra sao?
Cơ sở dữ liệu PostgreSQL cho phép thiết kế mở rộng thêm trường định danh chi nhánh (ma_chinhanh) trong các bảng nghiệp vụ. Kiến trúc phân tầng của Node.js cho phép dễ dàng đóng gói ứng dụng vào Docker container và triển khai mô hình đa chi nhánh với cơ chế đồng bộ dữ liệu tập trung.
Kết luận
Đồ án "Thiết kế và xây dựng Website quản lý nhà hàng" của tác giả Phạm Thiên Lý đã giải quyết xuất sắc bài toán thực tế tại Nhà hàng Trầu Cau, chuyển đổi thành công phương thức quản lý rời rạc trên nền tảng cũ sang hệ thống quản trị Web-based hiện đại, tập trung và bảo mật cao.
Bằng việc kết hợp sức mạnh xử lý bất đồng bộ của Node.js, tính linh hoạt của Express.js và độ tin cậy vượt trội của cơ sở dữ liệu quan hệ hướng đối tượng PostgreSQL, đề tài không chỉ đạt được các mục tiêu học thuật về kỹ thuật phần mềm mà còn mang lại giá trị ứng dụng thực tiễn to lớn: tiết kiệm chi phí bản quyền, tối ưu hóa năng suất lao động và nâng cao trải nghiệm cho khách hàng. Đây là tiền đề vững chắc để tiếp tục phát triển các tính năng nâng cao như thanh toán số hóa và điều phối thông minh trong tương lai.