Giới thiệu dự án
Thị trường F&B (Food & Beverage) tại Việt Nam đang chứng kiến tốc độ chuyển đổi số mạnh mẽ với tốc độ tăng trưởng thương mại điện tử ngành ẩm thực đạt trên 25%/năm. Tại các đô thị phát triển như Đà Nẵng, tỷ lệ người tiêu dùng sở hữu smartphone và thường xuyên đặt đồ ăn, thức uống trực tuyến chiếm hơn 78% nhóm khách hàng trẻ tuổi. Tuy nhiên, phần lớn các quán cà phê, trà sữa quy mô vừa và nhỏ (SME) vẫn vận hành dựa trên sổ sách giấy tờ hoặc nhận đơn thủ công qua mạng xã hội, dẫn đến nhiều điểm nghẽn nghiêm trọng.
Đồ án tốt nghiệp "Xây dựng ứng dụng quản lý đặt nước uống tại quán Sahami ở thành phố Đà Nẵng" do sinh viên Lê Thị Trúc Vy (Lớp 19T1, 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. Trần Bửu Dung (tháng 06/2023), tập trung giải quyết triệt để bài toán số hóa quy trình kinh doanh và nâng cao trải nghiệm khách hàng cho thương hiệu đồ uống Sahami.
+-----------------------------------------------------------------------------+
| THỰC TRẠNG VẬN HÀNH TẠI QUÁN SAHAMI |
+-----------------------------------------------------------------------------+
| [Quy trình thủ công] --> Nhầm lẫn Topping/Đường/Đá (Sai sót ~15-20%) |
| [Khách chờ tại quán] --> Ùn tắc giờ cao điểm, thời gian chờ 15-25 phút |
| [Bán qua App bên thứ 3] -> Chịu chiết khấu cao (20-30%), mất dữ liệu CRM |
+-----------------------------------------------------------------------------+
|
v
+-----------------------------------------------------------------------------+
| GIẢI PHÁP ỨNG DỤNG DI ĐỘNG SAHAMI FLUTTER |
+-----------------------------------------------------------------------------+
| - Khách hàng tự tùy biến: Đường, Đá, Size, Topping (Syrup, Cookie Crumble) |
| - Đồng bộ đơn hàng Realtime qua Firebase Cloud với độ trễ < 500ms |
| - Quản trị viên Dashboard: Biểu đồ PieChart doanh thu, CRUD Nước uống/User |
+-----------------------------------------------------------------------------+
Mục tiêu dự án
- Số hóa 100% quy trình đặt đồ uống: Cho phép khách hàng tra cứu thực đơn, tùy chọn định lượng nguyên liệu và đặt hàng trực tuyến từ xa.
- Xây dựng ứng dụng đa nền tảng tối ưu: Triển khai trên hệ điều hành Android và iOS từ một cơ sở mã nguồn duy nhất bằng Flutter Framework và ngôn ngữ Dart.
- Đồng bộ hóa dữ liệu thời gian thực: Ứng dụng nền tảng đám mây Google Firebase để cập nhật trạng thái đơn hàng tức thì giữa khách hàng và bộ phận pha chế/quản lý.
- Cung cấp công cụ quản trị tập trung: Xây dựng module Admin Dashboard trực quan cho phép theo dõi doanh thu theo ngày/tuần/tháng/năm, quản lý danh mục, sản phẩm và khách hàng.
- Tối ưu hóa chi phí vận hành: Cắt giảm 100% chi phí hoa hồng cho các nền tảng trung gian, giảm thiểu 90% lỗi sai sót đơn hàng do ghi nhận thủ công.
Phạm vi và giới hạn của đề tài
- Phạm vi nghiệp vụ: Phục vụ chuỗi hoạt động bán lẻ đồ uống của quán Sahami tại thành phố Đà Nẵng, bao gồm 3 nhóm tác nhân chính: Khách vãng lai, Khách hàng thành viên và Quản trị viên (Admin).
- Giới hạn kỹ thuật: Hệ thống tập trung vào nền tảng di động (Mobile App), tích hợp thanh toán khi nhận hàng (COD) và chuyển khoản ví điện tử; xử lý dữ liệu qua kiến trúc MVVM kết hợp Realtime Database và SQLite lưu trữ cục bộ.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Trước khi xây dựng ứng dụng Sahami, việc phân tích ma trận giải pháp giúp làm rõ lợi thế cạnh tranh của việc tự chủ công nghệ so với các hình thức vận hành truyền thống hoặc phụ thuộc nền tảng bên thứ ba:
| Tiêu chí đánh giá |
Quản lý sổ sách / Thủ công |
Ứng dụng trung gian (ShopeeFood/GrabFood) |
Ứng dụng chuyên biệt Sahami Flutter |
| Chi phí hoa hồng |
0% |
20% - 30% trên mỗi đơn |
0% (Toàn quyền sở hữu) |
| Tùy biến nguyên liệu/Topping |
Dễ nhầm lẫn, phụ thuộc nhân viên |
Bị giới hạn giao diện chuẩn của sàn |
Đầy đủ chi tiết (Đường, Đá, Syrup, Bánh quy vụn) |
| Thông tin dinh dưỡng sản phẩm |
Không cung cấp |
Rất hạn chế |
Minh bạch (Fat, Protein, Natri, Caffeine) |
| Thời gian tiếp nhận đơn |
3 - 7 phút (qua điện thoại/nhắn tin) |
1 - 2 phút |
Tức thì (< 1 giây qua Firebase Sync) |
| Bảo mật & Dữ liệu khách hàng |
Dễ thất lạc, rò rỉ dữ liệu |
Nền tảng sàn nắm giữ |
Lưu trữ Cloud SSL 2048-bit, phân quyền RBAC |
Phân loại yêu cầu người dùng theo mô hình MoSCoW
+------------------------------------------------------------------------+
| MÔ HÌNH PHÂN HẠNG YÊU CẦU MOSCOW |
+------------------------------------------------------------------------+
| MUST HAVE (Bắt buộc): |
| - Đăng ký, đăng nhập qua Email/Gmail/Facebook |
| - Menu sản phẩm, giỏ hàng, tùy chỉnh Topping & định lượng |
| - Thanh toán, theo dõi trạng thái đơn hàng Realtime |
| - Module Admin: CRUD Nước uống, Danh mục, Đơn hàng, Khách hàng |
+------------------------------------------------------------------------+
| SHOULD HAVE (Nên có): |
| - Xem thông tin dinh dưỡng (Calories, Caffeine, Sugar, Sodium) |
| - Đánh giá sao (1-5 sao) và bình luận phản hồi sau khi mua |
| - Báo cáo thống kê biểu đồ PieChart theo mốc thời gian |
+------------------------------------------------------------------------+
| COULD HAVE (Có thể có): |
| - Tự động định vị GPS và tính toán phí giao hàng theo khoảng cách |
| - Thông báo đẩy (Push Notification) trạng thái pha chế |
+------------------------------------------------------------------------+
| WON'T HAVE (Chưa thực hiện ở phiên bản này): |
| - Tích hợp cổng thanh toán trực tiếp qua thẻ tín dụng quốc tế Visa/Master|
| - Điều hướng đa chi nhánh (Multi-branch Routing) |
+------------------------------------------------------------------------+
Thiết kế hệ thống
Ứng dụng được thiết kế theo mô hình kiến trúc MVVM (Model - View - ViewModel) kết hợp với Repository Pattern, giải quyết triệt để bài toán phân tách giữa giao diện người dùng (UI) và logic nghiệp vụ, đồng thời tận dụng cơ chế phản ứng (Reactive) của Flutter.
+-----------------------------------------------------------------------------+
| KIẾN TRÚC HỆ THỐNG (MVVM PATTERN) |
+-----------------------------------------------------------------------------+
| [VIEW TẦNG GIAO DIỆN] |
| - Flutter UI Widgets (Scaffold, Material Design Components) |
| - ScopedModelDescendant lắng nghe trạng thái (State Changes) |
+-----------------------------------------------------------------------------+
^
| Data Binding / Notification
v
+-----------------------------------------------------------------------------+
| [VIEWMODEL TẦNG LOGIC NGHIỆP VỤ] |
| - ScopedModel / ChangeNotifier: Xử lý giỏ hàng, bộ lọc dinh dưỡng |
| - Quản lý trạng thái bất đồng bộ (Future / Stream Controllers) |
+-----------------------------------------------------------------------------+
^
| Async / Await
v
+-----------------------------------------------------------------------------+
| [REPOSITORY TẦNG DỮ LIỆU] |
| - Data Abstraction Layer: Điều phối nguồn dữ liệu Remote & Local |
+-----------------------------------------------------------------------------+
/ \
v v
+------------------------------------+ +---------------------------------+
| [REMOTE BACKEND: GOOGLE FIREBASE] | | [LOCAL STORAGE: SQLITE/SQFLITE] |
| - Firebase Realtime Database (JSON)| | - Offline Cache dữ liệu giỏ hàng|
| - Firebase Authentication (OAuth2) | | - Đồng bộ khi có kết nối lại |
| - Bảo mật SSL 2048-bit Encryption | +---------------------------------+
+------------------------------------+
Technology Stack và phiên bản sử dụng
- Ngôn ngữ lập trình: Dart SDK 3.0.x (Hỗ trợ Sound Null Safety, AOT/JIT Compilation).
- Framework: Flutter SDK 3.10.x (Google UI Toolkit đa nền tảng).
- State Management: Scoped Model v1.1.0 & Provider pattern.
- Cơ sở dữ liệu đám mây: Google Firebase Realtime Database & Firebase Authentication.
- Cơ sở dữ liệu cục bộ:
sqflite package v2.2.8.
- Công cụ thiết kế & kiểm thử: Android Studio (Flamingo/Electric Eel), StarUML (thiết kế Use Case, ERD), Postman v10.x (Kiểm thử RESTful Services).
Thiết kế cơ sở dữ liệu (Database Schema)
Dữ liệu hệ thống được cấu trúc chuẩn hóa, bao gồm 9 bảng thực thể chính liên kết chặt chẽ:
-- 1. Bảng phân quyền (auth_id)
CREATE TABLE Auth (
auth_id VARCHAR(50) PRIMARY KEY,
user VARCHAR(100) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL,
role VARCHAR(20) NOT NULL -- 'Admin', 'Staff', 'Customer'
);
-- 2. Bảng khách hàng (Customer)
CREATE TABLE Customer (
customer_id VARCHAR(50) PRIMARY KEY,
customer_name VARCHAR(100) NOT NULL,
contact VARCHAR(20) NOT NULL,
email VARCHAR(100),
dob DATE,
gender VARCHAR(10),
auth_id VARCHAR(50) REFERENCES Auth(auth_id)
);
-- 3. Bảng nhân viên (Staff)
CREATE TABLE Staff (
staff_id VARCHAR(50) PRIMARY KEY,
staff_name VARCHAR(100) NOT NULL,
contact VARCHAR(20) NOT NULL,
email VARCHAR(100),
auth_id VARCHAR(50) REFERENCES Auth(auth_id)
);
-- 4. Bảng danh mục (Category)
CREATE TABLE Category (
category_id VARCHAR(50) PRIMARY KEY,
category_name VARCHAR(100) NOT NULL
);
-- 5. Bảng nước uống (Product) - Có thông tin dinh dưỡng chi tiết
CREATE TABLE Product (
product_id VARCHAR(50) PRIMARY KEY,
product_name VARCHAR(150) NOT NULL,
description TEXT,
price DOUBLE PRECISION NOT NULL,
price_sale DOUBLE PRECISION DEFAULT 0,
serving_size INT, -- ml
saturated_fat INT, -- g (Chất béo bão hòa)
protein INT, -- g (Chất đạm)
sodium INT, -- mg (Natri)
sugars INT, -- g (Đường)
caffeine INT, -- mg (Caffeine)
status VARCHAR(30), -- 'Còn hàng', 'Hết hàng'
image VARCHAR(255),
category_id VARCHAR(50) REFERENCES Category(category_id)
);
-- 6. Bảng đơn hàng (Orders)
CREATE TABLE Orders (
order_id VARCHAR(50) PRIMARY KEY,
total INT NOT NULL,
order_status VARCHAR(50) NOT NULL, -- 'Chờ xác nhận', 'Đang pha chế', 'Đang giao', 'Hoàn thành'
payment_status VARCHAR(50) NOT NULL, -- 'Chưa thanh toán', 'Đã thanh toán'
note TEXT,
create_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
update_at TIMESTAMP,
delivery_charge DOUBLE PRECISION DEFAULT 0,
address TEXT NOT NULL,
customer_id VARCHAR(50) REFERENCES Customer(customer_id),
staff_id VARCHAR(50) REFERENCES Staff(staff_id)
);
-- 7. Bảng chi tiết đơn hàng (OrderDetail) - Chứa định lượng Topping
CREATE TABLE OrderDetail (
order_id VARCHAR(50) REFERENCES Orders(order_id),
product_id VARCHAR(50) REFERENCES Product(product_id),
quantity INT NOT NULL,
delivery_type VARCHAR(50),
status VARCHAR(30),
brown_sugar_syrup INT DEFAULT 0, -- Si rô đường nâu (bơm/shot)
caramel_syrup INT DEFAULT 0, -- Si rô caramel
vanilla_syrup INT DEFAULT 0, -- Si rô vani
cookie_crumble_topping INT DEFAULT 0, -- Lớp phủ bánh quy vụn
PRIMARY KEY (order_id, product_id)
);
-- 8. Bảng đánh giá (Review)
CREATE TABLE Review (
review_id VARCHAR(50) PRIMARY KEY,
star_number INT CHECK(star_number BETWEEN 1 AND 5),
comment TEXT,
status VARCHAR(30),
id_product VARCHAR(50) REFERENCES Product(product_id)
);
-- 9. Bảng thanh toán (Payment)
CREATE TABLE Payment (
payment_id VARCHAR(50) PRIMARY KEY,
payment_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
type VARCHAR(50), -- 'COD', 'E-Wallet Transfer'
order_id VARCHAR(50) REFERENCES Orders(order_id)
);
Phương pháp luận (Methodology)
Dự án được triển khai theo phương pháp luận phát triển phần mềm linh hoạt (Agile/Scrum) với thời lượng 8 tuần, chia thành 4 Sprint cụ thể:
| Giai đoạn (Sprint) |
Thời gian |
Nhiệm vụ trọng tâm |
Sản phẩm đầu ra (Deliverables) |
| Sprint 1 |
Tuần 1 - 2 |
Khảo sát thực tế quán Sahami, thu thập yêu cầu, vẽ sơ đồ Use Case, ERD bằng StarUML. |
Tài liệu SRS, bản thiết kế CSDL, wireframe giao diện. |
| Sprint 2 |
Tuần 3 - 4 |
Cấu hình Firebase Backend, khởi tạo kiến trúc MVVM Flutter, xây dựng module Auth & Menu. |
Chức năng Đăng ký/Đăng nhập, duyệt danh mục sản phẩm. |
| Sprint 3 |
Tuần 5 - 6 |
Xây dựng logic tùy chọn Topping, giỏ hàng, thanh toán và Module Admin CRUD, PieChart. |
Hoàn thiện luồng Order & luồng quản lý của Admin. |
| Sprint 4 |
Tuần 7 - 8 |
Kiểm thử tích hợp qua Postman, Flutter Inspector, UAT tại quán Sahami, viết báo cáo tốt nghiệp. |
Bộ mã nguồn hoàn chỉnh, ứng dụng APK, báo cáo đồ án. |
Implementation và kết quả
Quy trình phát triển và hiện thực hóa mã nguồn
Để đảm bảo hiệu năng và tính mở rộng của hệ thống, các module được triển khai dựa trên nguyên tắc lập trình bất đồng bộ (async/await) với Future và Stream trong Dart.
1. Repository Xử lý dữ liệu sản phẩm bất đồng bộ
Đoạn mã hiện thực tầng Repository chịu trách nhiệm truy vấn danh sách nước uống kèm thông số dinh dưỡng từ Firebase Realtime Database:
import 'dart:async';
import 'package:firebase_database/firebase_database.dart';
import '../models/product_model.dart';
class ProductRepository {
final DatabaseReference _dbRef = FirebaseDatabase.instance.ref().child('products');
// Lấy danh sách sản phẩm theo danh mục bất đồng bộ
Future<List<ProductModel>> fetchProductsByCategory(String categoryId) async {
try {
final DataSnapshot snapshot = await _dbRef
.orderByChild('category_id')
.equalTo(categoryId)
.get();
List<ProductModel> products = [];
if (snapshot.exists && snapshot.value != null) {
final Map<dynamic, dynamic> data = snapshot.value as Map<dynamic, dynamic>;
data.forEach((key, value) {
products.add(ProductModel.fromJson(Map<String, dynamic>.from(value), key));
});
}
return products;
} catch (e) {
throw Exception('Lỗi khi truy xuất dữ liệu sản phẩm: $e');
}
}
}
2. Thuật toán tính toán tổng tiền đơn hàng kèm Topping tùy biến
Thuật toán tính tiền giỏ hàng được đóng gói trong ViewModel, tính toán chính xác đơn giá dựa trên giá khuyến mãi (price_sale), số lượng và các loại topping cộng thêm:
class CartItem {
final ProductModel product;
int quantity;
int brownSugarSyrup; // 5.000 VNĐ / shot
int caramelSyrup; // 5.000 VNĐ / shot
int vanillaSyrup; // 5.000 VNĐ / shot
int cookieCrumbleTopping; // 8.000 VNĐ / phần
CartItem({
required this.product,
this.quantity = 1,
this.brownSugarSyrup = 0,
this.caramelSyrup = 0,
this.vanillaSyrup = 0,
this.cookieCrumbleTopping = 0,
});
double calculateItemTotal() {
double unitPrice = product.priceSale > 0 ? product.priceSale : product.price;
double toppingCost = (brownSugarSyrup * 5000.0) +
(caramelSyrup * 5000.0) +
(vanillaSyrup * 5000.0) +
(cookieCrumbleTopping * 8000.0);
return (unitPrice + toppingCost) * quantity;
}
}
+-----------------------------------------------------------------------------+
| QUY TRÌNH XỬ LÝ ĐƠN ĐẶT HÀNG SAHAMI |
+-----------------------------------------------------------------------------+
Khách hàng chọn đồ uống
│
▼
Tùy chọn: Đường/Đá/Syrup/Bánh quy ──► [Kiểm tra địa chỉ nhận hàng]
│
▼
Xác nhận thanh toán (COD / Ví điện tử) ◄── [Có hợp lệ?]
│
▼
Gửi bản ghi lên Firebase Realtime Database (SSL 2048-bit)
│
├─────────────────────────────────┐
▼ ▼
[Client Khách hàng] [Dashboard Admin]
Theo dõi trạng thái: Âm báo đơn mới ──► Tiếp nhận pha chế
"Chờ xác nhận" ──► "Đang giao" Cập nhật trạng thái Realtime
│ │
└────────────────► Hoàn tất ◄─────┘
Kiểm thử và đánh giá hiệu năng
Hệ thống đã trải qua quá trình kiểm thử toàn diện thông qua công cụ Flutter Inspector và Postman:
- Kiểm thử giao diện & Rebuild Widget: Sử dụng Flutter DevTools và Inspector nhằm loại bỏ hiện tượng RenderFlex Overflow, tối ưu hóa cây Widget giúp ứng dụng duy trì tốc độ khung hình ổn định ở mức 60 FPS.
- Kiểm thử chức năng (Functional Testing): Thực hiện 35 Test Cases bao gồm luồng đăng nhập OAuth, kiểm tra validation giỏ hàng (nhắc nhở nhập địa chỉ nếu trống), tính toán topping, cập nhật trạng thái đơn hàng. Tỷ lệ thành công đạt 100% (35/35 test cases).
- Thời gian đáp ứng (Latency): Thời gian đồng bộ dữ liệu giữa thiết bị khách hàng và bảng điều khiển quản trị viên đạt trung bình 240ms trong điều kiện mạng 4G/Wifi tiêu chuẩn.
- Độ ổn định bộ nhớ: Mức chiếm dụng RAM trung bình của ứng dụng di động duy trì ổn định ở mức 78MB - 92MB, thời gian khởi động nguội (Cold Start) đạt 1.18 giây.
+-----------------------------------------------------------------------+
| KẾT QUẢ KIỂM THỬ VẬN HÀNH (METRICS) |
+-----------------------------------------------------------------------+
| - Tỷ lệ khung hình UI (Frame Rate): 60 FPS (Mượt mà) |
| - Độ trễ đồng bộ đơn hàng (Sync Latency): ~240ms |
| - Mức tiêu thụ RAM trung bình: 85 MB |
| - Thời gian khởi động ứng dụng: 1.18 giây |
| - Tỷ lệ vượt qua kiểm thử tính năng: 100% (35/35 Test Cases) |
+-----------------------------------------------------------------------+
Đổi mới và đóng góp
- Minh bạch hóa chỉ số dinh dưỡng F&B: Khác biệt với các ứng dụng đặt hàng phổ thông chỉ hiển thị tên và giá, ứng dụng Sahami tiên phong tích hợp bảng thông tin dinh dưỡng chi tiết (
saturated_fat, protein, sodium, sugars, caffeine) cho từng món đồ uống, phục vụ xu hướng tiêu dùng lành mạnh (Healthy Lifestyle).
- Cơ chế tùy biến Topping ma trận đa tầng: Cho phép khách hàng kết hợp chính xác nhiều loại si-rô và lớp phủ (
brown_sugar_syrup, caramel_syrup, vanilla_syrup, cookie_crumble_topping) trực tiếp trên giao diện trực quan trước khi gửi dữ liệu lên máy chủ.
- Tối ưu hóa hiệu suất vận hành tại điểm bán:
- Giảm thời gian xử lý một đơn hàng từ 4.5 phút xuống còn 1.2 phút (Cải thiện 73.3% tốc độ phục vụ).
- Giảm thiểu sai sót đơn hàng trong pha chế từ 18% xuống dưới 1.5% (Giảm 91.6% tỷ lệ khiếu nại).
- Tiết kiệm 100% chi phí chiết khấu cho nền tảng trung gian, gia tăng biên lợi nhuận ròng trực tiếp cho quán Sahami.
Ứng dụng thực tế và triển khai
Kịch bản triển khai thực tế
- Khách hàng tại văn phòng/từ xa: Mở ứng dụng, lọc trà sữa/cà phê theo danh mục, tùy chỉnh lượng đường/đá, chọn thêm topping bánh quy vụn, thêm địa chỉ giao hàng và gửi đơn hàng. Khách hàng theo dõi trực tiếp trạng thái "Đang chuẩn bị" -> "Đang giao".
- Quản trị viên / Thu ngân quán Sahami: Nhận thông báo đơn hàng mới trên tablet/điện thoại, duyệt đơn hàng, chuyển trạng thái cho quầy bar pha chế. Cuối ngày, truy cập màn hình Thống kê để xem biểu đồ PieChart phân tích doanh thu và số lượng đơn hàng theo từng khung giờ/ngày.
+-----------------------------------------------------------------------------+
| LỘ TRÌNH TRIỂN KHAI VÀ MỞ RỘNG (ROADMAP) |
+-----------------------------------------------------------------------------+
| Giai đoạn 1 (Tháng 06/2023): Thử nghiệm Alpha tại cơ sở Sahami Đà Nẵng |
| Giai đoạn 2 (Quý 3/2023): Tích hợp cổng VNPay / MoMo SDK |
| Giai đoạn 3 (Quý 4/2023): Phát hành chính thức trên Google Play & App Store|
| Giai đoạn 4 (2024): Ứng dụng thuật toán AI gợi ý đồ uống cá nhân hóa |
+-----------------------------------------------------------------------------+
Phân tích hiệu quả tài chính (ROI Analysis)
- Chi phí đầu tư hạ tầng ban đầu (Google Cloud / Firebase Blaze Plan mức cơ sở): Khoảng $10 - $25/tháng (~250.000 - 600.000 VNĐ).
- Tiết kiệm chi phí chiết khấu: Với doanh thu trung bình 80.000.000 VNĐ/tháng qua kênh online, việc không phải trả 25% phí chiết khấu cho sàn giúp quán Sahami giữ lại được 20.000.000 VNĐ lợi nhuận ròng mỗi tháng, đạt điểm hòa vốn đầu tư phát triển hệ thống chỉ sau 2.5 tháng vận hành.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Phương thức thanh toán điện tử hiện tại chủ yếu thông qua quét mã chuyển khoản trung gian, chưa nhúng SDK thanh toán trực tiếp của ngân hàng.
- Chưa tích hợp hệ thống thông báo đẩy nâng cao (FCM Push Notifications) khi ứng dụng đang chạy nền (Background Mode).
- Giới hạn trong quy mô một cửa hàng, chưa có tính năng định tuyến đơn hàng tự động giữa các chi nhánh khi quán mở rộng chuỗi.
Hướng phát triển trong tương lai
- Tích hợp cổng thanh toán trực tuyến tự động qua API VNPay, ZaloPay và MoMo.
- Xây dựng thuật toán học máy (Machine Learning / Collaborative Filtering) dựa trên lịch sử đặt hàng để gợi ý đồ uống phù hợp theo thời tiết và sở thích khách hàng.
- Mở rộng phiên bản Web Admin quản trị chuyên sâu trên nền tảng Flutter Web hoặc ReactJS.
Đối tượng hưởng lợi
- Sinh viên ngành CNTT/Kỹ thuật phần mềm: Đồ án là tài liệu tham khảo thực tế về việc áp dụng kiến trúc MVVM trong Flutter, kết nối Firebase Realtime Database và xây dựng trọn vẹn một ứng dụng di động thương mại điện tử.
- Lập trình viên Mobile (Flutter Developers): Cung cấp các mẫu mã nguồn chuẩn mực về quản lý State, bất đồng bộ (
Future, Stream), xử lý CSDL quan hệ kết hợp NoSQL và tối ưu hóa UI bằng DevTools.
- Chủ doanh nghiệp F&B / Quán cà phê vừa và nhỏ: Nhận được giải pháp công nghệ toàn diện giúp chuyển đổi số với chi phí tối thiểu, nâng cao khả năng quản trị và sở hữu trọn vẹn dữ liệu khách hàng.
- Khách hàng tiêu dùng: Trải nghiệm dịch vụ đặt đồ uống tiện lợi, nắm bắt rõ ràng các thông số dinh dưỡng, bảo vệ sức khỏe và tiết kiệm thời gian chờ đợi.
Câu hỏi thường gặp
1. Yêu cầu cấu hình hệ thống để triển khai và cài đặt ứng dụng là gì?
- Phía Client: Thiết bị di động chạy hệ điều hành Android từ phiên bản 6.0 (Marshmallow) trở lên hoặc iOS từ 12.0 trở lên, dung lượng bộ nhớ trống tối thiểu 50MB.
- Phía Môi trường phát triển: Máy tính cài đặt Android Studio (Electric Eel trở lên) hoặc VS Code, Flutter SDK phiên bản 3.x, Dart SDK 3.x và tài khoản Google Firebase Console có kích hoạt Realtime Database.
2. Hệ thống xử lý thế nào trong trường hợp mất kết nối Internet đột ngột khi đang đặt hàng?
Ứng dụng sử dụng cơ chế lưu trữ đệm cục bộ (Local Cache) thông qua thư viện sqflite. Khi mất kết nối, giỏ hàng và dữ liệu cá nhân vẫn được bảo lưu trên thiết bị. Ngay khi có mạng trở lại, ứng dụng sẽ tự động kích hoạt đồng bộ hóa dữ liệu lên máy chủ Firebase với cơ chế bảo mật kết nối SSL 2048-bit.
3. Việc tích hợp ứng dụng vào hệ thống máy in nhiệt tại quầy pha chế có khả thi không?
Hoàn toàn khả thi. Bằng cách sử dụng các plugin Flutter hỗ trợ giao tiếp Bluetooth / LAN (như esc_pos_printer hoặc blue_thermal_printer), ứng dụng của quản trị viên có thể tự động gửi lệnh in hóa đơn ngay khi trạng thái đơn hàng chuyển sang "Đã xác nhận".
4. Chi phí duy trì nền tảng Firebase Backend cho quán Sahami hàng tháng là bao nhiêu?
Với lượng người dùng của một quán cà phê quy mô vừa (dưới 5.000 khách hàng hoạt động hàng tháng và khoảng 100 - 300 đơn hàng/ngày), mức tiêu thụ băng thông và lượt đọc/ghi của Firebase hoàn toàn nằm trong gói miễn phí (Spark Plan) hoặc gói trả theo dung lượng (Blaze Plan) với chi phí ước tính chỉ từ 0 đến 15 USD/tháng.
5. Ứng dụng phân quyền giữa Khách hàng, Nhân viên và Admin như thế nào?
Hệ thống sử dụng cơ chế kiểm soát truy cập dựa trên vai trò (Role-Based Access Control - RBAC). Khi đăng nhập, ứng dụng kiểm tra trường role trong bảng Auth để điều hướng giao diện tương ứng: Khách hàng chỉ truy cập được giao diện người dùng mua hàng; Nhân viên có quyền xem và đổi trạng thái đơn hàng; Admin có toàn quyền truy cập bảng Dashboard thống kê và CRUD dữ liệu hệ thống.
Kết luận
Đồ án tốt nghiệp "Xây dựng ứng dụng quản lý đặt nước uống tại quán Sahami ở thành phố Đà Nẵng" của sinh viên Lê Thị Trúc Vy đã hiện thực hóa thành công một giải pháp công nghệ di động toàn diện, giải quyết trọn vẹn nhu cầu thực tế của mô hình kinh doanh dịch vụ F&B.
Việc kết hợp chặt chẽ giữa ngôn ngữ Dart, framework Flutter cùng cơ sở dữ liệu thời gian thực Firebase theo mô hình MVVM không chỉ tạo nên một sản phẩm phần mềm có hiệu năng cao, giao diện mượt mà (60 FPS) mà còn mở ra hướng tiếp cận chuẩn mực cho các đề tài phát triển ứng dụng di động ứng dụng thực tế. Đồ án là minh chứng rõ nét cho giá trị của việc ứng dụng công nghệ thông tin vào tối ưu hóa vận hành doanh nghiệp địa phương trong kỷ nguyên kinh tế số.