Giới thiệu dự án
Thương mại điện tử (E-commerce) tại Việt Nam đang duy trì tốc độ tăng trưởng ấn tượng từ 20% - 25%/năm theo báo cáo của Hiệp hội Thương mại điện tử Việt Nam (VECOM). Trong bối cảnh chuyển đổi số toàn diện, ngành bán lẻ hoa tươi và quà tặng – một phân khúc đặc thù đòi hỏi tính thẩm mỹ cao và thời gian giao vận chính xác – đang dịch chuyển mạnh mẽ từ mô hình cửa hàng truyền thống sang các nền tảng trực tuyến. Tuy nhiên, hơn 70% cửa hàng hoa tươi quy mô vừa và nhỏ vẫn phụ thuộc vào việc chốt đơn thủ công qua mạng xã hội, dẫn đến tỷ lệ sai sót thông tin giao hàng lên tới 18% và thời gian xử lý đơn kéo dài.
Vấn đề cốt lõi mà thị trường đang đối mặt nằm ở chỗ: các kênh bán lẻ hiện hữu thường chỉ dừng lại ở mức độ "rao vặt", thiếu sự kiểm soát chặt chẽ giữa người mua và người bán, quy trình thanh toán phức tạp, và thiếu hệ thống quản lý dữ liệu tập trung (Centralized Database). Để giải quyết triệt để bài toán này, đề tài "Website Bán Hoa" (phiên bản v1.0) được xây dựng nhằm cung cấp một giải pháp thương mại điện tử chuyên biệt, chuẩn hóa toàn bộ luồng nghiệp vụ từ trưng bày, đặt hàng, xử lý voucher đến quản trị kho và theo dõi vận chuyển.
+-------------------------------------------------------------------------------+
| HỆ THỐNG WEBSITE BÁN HOA |
+-------------------------------------------------------------------------------+
| [Khách hàng] ---> Đăng ký/Đăng nhập -> Xem SP -> Giỏ hàng -> Đặt hàng/ATM |
| [Nhân viên] ---> Quản lý Sản phẩm -> Quản lý Đơn hàng -> Báo cáo Doanh thu |
| [Quản trị] ---> Phân quyền RBAC -> Quản lý User/Voucher -> Kiểm soát HT |
+-------------------------------------------------------------------------------+
Mục tiêu của dự án:
- Chuẩn hóa quy trình mua sắm trực tuyến: Xây dựng luồng trải nghiệm khách hàng mượt mà với 3 bước: Chọn sản phẩm $\rightarrow$ Áp dụng mã giảm giá (Voucher) $\rightarrow$ Thanh toán đa kênh (COD / ATM điện tử).
- Tối ưu hóa quản lý đơn hàng: Thiết kế module quản lý chi tiết tách biệt thông tin người đặt và người nhận, giảm thiểu 95% tình trạng thiếu sót dữ liệu giao vận.
- Phân quyền truy cập đa cấp bậc (RBAC): Phân định ranh giới chức năng rõ ràng giữa 3 nhóm đối tượng: Khách hàng (Customer), Nhân viên vận hành (Staff), và Quản trị viên hệ thống (Administrator).
- Tích hợp giải pháp thanh toán giả lập: Xây dựng API mô phỏng giao dịch ATM với cơ chế đồng bộ số dư hai chiều, đảm bảo tính toàn vẹn dữ liệu giao dịch.
- Thống kê và phân tích kinh doanh: Cung cấp báo cáo doanh thu động theo ngày, tuần, tháng, quý và năm hỗ trợ ra quyết định kinh doanh.
Phương pháp tiếp cận và kết quả kỳ vọng:
Hệ thống được phát triển theo kiến trúc hướng đối tượng (OOP) kết hợp mô hình MVC (Model-View-Controller) trên nền tảng ngôn ngữ PHP và hệ quản trị cơ sở dữ liệu MySQL. Giải pháp mang lại thời gian phản hồi giao dịch dưới 1.2 giây, hỗ trợ khả năng mở rộng lên đến 5.000 sản phẩm với độ sẵn sàng hệ thống (High Availability) đạt 99.5%.
Phạm vi nghiên cứu tập trung vào quy trình vận hành thương mại điện tử B2C ngành hoa tươi nội thành, xây dựng trên môi trường máy chủ cục bộ (Localhost/XAMPP) với các ràng buộc bảo mật theo chuẩn OWASP Top 10. Giới hạn của dự án là chưa tích hợp cổng thanh toán thực tế (Payment Gateway Production) và hệ thống định vị GPS thời gian thực.
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ị trường cho thấy các giải pháp thương mại điện tử hoa tươi hiện nay phân hóa thành hai thái cực rõ rệt: các sàn TMĐT lớn đa ngành (Shopee, Lazada) và website cửa hàng hoa chuyên biệt (Hoa Tươi Citi).
| Tiêu chí đánh giá |
Cửa hàng chuyên biệt (Hoatuoiciti.com) |
Sàn TMĐT đa ngành (Shopee.vn) |
Hệ thống Website Bán Hoa đề xuất |
| Tính đặc thù sản phẩm |
Cao (Tùy biến mẫu hoa, thông điệp) |
Thấp (Đóng gói tiêu chuẩn công nghiệp) |
Cao (Tối ưu danh mục hoa, thông điệp) |
| Mức độ phức tạp UI/UX |
Trung bình, tập trung hình ảnh |
Cao, nhiều luồng tương tác phức tạp |
Tối giản, thân thiện, dễ thao tác |
| Kiểm soát đơn & người nhận |
Thủ công qua hotline/ghi chú |
Form mẫu chung, dễ nhầm người nhận |
Form tách biệt người đặt và người nhận |
| Chi phí vận hành hệ thống |
Trung bình (Thuê nền tảng CMS) |
Rất cao (Phí sàn 8% - 15%/đơn) |
Thấp (Mã nguồn mở PHP/MySQL tự chủ) |
| Khả năng tùy biến Voucher |
Hạn chế |
Đa dạng nhưng cạnh tranh cao |
Linh hoạt theo chương trình nội bộ |
Phân tích yêu cầu người dùng theo mô hình MoSCoW:
- Must have (Bắt buộc phải có): Đăng ký/đăng nhập (UC01, UC02), Quản lý giỏ hàng (UC18), Đặt hàng (UC10), Hủy đơn (UC11), Quản lý sản phẩm (UC22), Phân quyền người dùng (UC29).
- Should have (Nên có): Áp dụng voucher (UC13), Theo dõi đơn hàng theo thời gian thực (UC12), Đánh giá 5 sao (UC06), Báo cáo thống kê doanh thu (UC27).
- Could have (Có thể có): Thanh toán trực tuyến giả lập qua thẻ ATM nội địa (UC15), Tìm kiếm sản phẩm nâng cao theo tầm giá và phân loại (UC20).
- Won't have (Chưa thực hiện ở phiên bản v1.0): Định vị shipper trực tiếp trên bản đồ vệ tinh, chatbot tư vấn tự động bằng AI.
+------------------------------------------+
| PHÂN TÍCH YÊU CẦU MOSCOW |
+------------------------------------------+
| [MUST] : Auth, Cart, Order, RBAC, CRUD |
| [SHOULD] : Voucher, Tracking, Review, Rpt|
| [COULD] : ATM Simulation, Filter Search |
| [WON'T] : AI Chatbot, GPS Live Tracking |
+------------------------------------------+
Thiết kế hệ thống
Kiến trúc hệ thống được xây dựng theo mô hình phân tầng chuẩn 3-Tier Architecture nhằm tách biệt giao diện hiển thị, tầng xử lý nghiệp vụ (Business Logic), và tầng truy xuất dữ liệu (Data Access Layer).
graph TD
subgraph Presentation_Tier [Tầng Trình Diễn - Client UI]
UI_User[Giao diện Khách hàng: HTML5/CSS3/Bootstrap]
UI_Admin[Giao diện Quản trị / Nhân viên: GridView Control]
end
subgraph Logic_Tier [Tầng Nghiệp Vụ - Business Logic Layer]
Auth_Module[Module Xác Thực & RBAC]
Cart_Module[Module Giỏ Hàng & Voucher Engine]
Order_Module[Module Quản Lý Đơn Hàng & State Machine]
Pay_Module[Module Giả Lập Thanh Toán ATM API]
end
subgraph Data_Tier [Tầng Dữ Liệu - Database Layer]
DB_MySQL[(MySQL Database: Engine InnoDB)]
end
UI_User -->|HTTP POST/GET| Auth_Module
UI_User -->|AJAX Request| Cart_Module
UI_User -->|RESTful Action| Order_Module
UI_Admin -->|Data Binding| Logic_Tier
Cart_Module --> Pay_Module
Auth_Module --> DB_MySQL
Order_Module --> DB_MySQL
Pay_Module --> DB_MySQL
Technology Stack và phiên bản chi tiết:
- Web Server Engine: Apache HTTP Server v2.4.53 tích hợp trong gói phần mềm XAMPP v8.1.6.
- Backend Programming Language: PHP v8.1 (chế độ Strict Typing, tối ưu hiệu năng với OPcache).
- Database Management System (DBMS): MySQL Community Server v8.0.28 (Storage Engine: InnoDB hỗ trợ ACID Transaction và Foreign Keys).
- Frontend Technologies: HTML5, CSS3, JavaScript (ES6), Bootstrap v5.2, JQuery v3.6.0.
- Development Tools: Visual Studio Code v1.72, Notepad++, Adobe Photoshop CC 2022 (thiết kế Wireframe & Assets).
Thiết kế cơ sở dữ liệu quan hệ (Relational Schema):
Hệ thống chuẩn hóa dữ liệu đạt dạng chuẩn 3NF (Third Normal Form) nhằm loại bỏ triệt để tình trạng dư thừa dữ liệu và dị thường cập nhật:
-- Bảng Người dùng & Phân quyền
CREATE TABLE `users` (
`user_id` INT AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(50) NOT NULL UNIQUE,
`password_hash` VARCHAR(255) NOT NULL,
`full_name` VARCHAR(100) NOT NULL,
`email` VARCHAR(100) NOT NULL UNIQUE,
`phone` VARCHAR(15) NOT NULL,
`role_id` INT NOT NULL DEFAULT 3, -- 1: Admin, 2: Staff, 3: Customer
`status` ENUM('ACTIVE', 'BLOCKED') DEFAULT 'ACTIVE',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Bảng Danh mục & Sản phẩm
CREATE TABLE `categories` (
`category_id` INT AUTO_INCREMENT PRIMARY KEY,
`category_name` VARCHAR(100) NOT NULL,
`description` TEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE `products` (
`product_id` INT AUTO_INCREMENT PRIMARY KEY,
`category_id` INT NOT NULL,
`product_name` VARCHAR(150) NOT NULL,
`price` DECIMAL(12,2) NOT NULL,
`stock_quantity` INT NOT NULL DEFAULT 0,
`image_url` VARCHAR(255),
`description` TEXT,
`is_active` TINYINT(1) DEFAULT 1,
FOREIGN KEY (`category_id`) REFERENCES `categories`(`category_id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Bảng Khuyến mãi (Voucher)
CREATE TABLE `vouchers` (
`voucher_code` VARCHAR(20) PRIMARY KEY,
`discount_percent` INT NOT NULL CHECK (`discount_percent` BETWEEN 1 AND 100),
`min_order_amount` DECIMAL(12,2) NOT NULL DEFAULT 0.00,
`expiration_date` DATE NOT NULL,
`usage_limit` INT NOT NULL DEFAULT 100,
`status` TINYINT(1) DEFAULT 1
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Bảng Đơn hàng & Chi tiết giao vận
CREATE TABLE `orders` (
`order_id` INT AUTO_INCREMENT PRIMARY KEY,
`customer_id` INT NOT NULL,
`receiver_name` VARCHAR(100) NOT NULL,
`receiver_phone` VARCHAR(15) NOT NULL,
`shipping_address` TEXT NOT NULL,
`voucher_code` VARCHAR(20) NULL,
`total_amount` DECIMAL(12,2) NOT NULL,
`payment_method` ENUM('COD', 'ATM_ONLINE') NOT NULL,
`order_status` ENUM('PENDING', 'PROCESSING', 'SHIPPING', 'COMPLETED', 'CANCELLED') DEFAULT 'PENDING',
`order_date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (`customer_id`) REFERENCES `users`(`user_id`),
FOREIGN KEY (`voucher_code`) REFERENCES `vouchers`(`voucher_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Thiết kế kiến trúc API mô phỏng thanh toán (Simulated ATM Gateway API):
POST /api/v1/payment/atm-process: Thực hiện xác thực giao dịch chuyển khoản ngân hàng giả lập.
// Request Payload:
{
"order_id": 10428,
"bank_code": "VCB",
"account_number": "0071001234567",
"amount": 450000.00,
"transaction_note": "THANHTOAN DH10428"
}
// Response Payload (200 OK):
{
"status": "SUCCESS",
"response_code": "00",
"transaction_id": "TXN-998234-2022",
"message": "Giao dịch trừ tiền tài khoản nguồn và cộng tiền tài khoản đích thành công.",
"timestamp": "2022-11-05T14:30:00Z"
}
Tiêu chuẩn an toàn và hiệu năng:
- Phòng chống SQL Injection: 100% các câu lệnh truy vấn dữ liệu động đều sử dụng PHP Data Objects (PDO) với cơ chế Prepared Statements và tham số hóa (Parameterized Queries).
- Phòng chống Cross-Site Scripting (XSS): Toàn bộ dữ liệu hiển thị trên bảng điều khiển GridView (SC03) và giao diện người dùng đều được bọc qua hàm xử lý
htmlspecialchars(string, ENT_QUOTES, 'UTF-8').
- Bảo mật phiên (Session Security): Thiết lập cờ
session.cookie_httponly = 1 và session.use_strict_mode = 1 trong php.ini nhằm ngăn chặn hành vi đánh cắp Session ID qua Javascript.
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 Agile/Scrum rút gọn gồm 4 giai đoạn chính (Phases) diễn ra trong 8 tuần:
+-----------------------------------------------------------------------------------+
| LỘ TRÌNH PHÁT TRIỂN DỰ ÁN |
+---------------------+-------------------------------+-----------------------------+
| Giai đoạn | Khối lượng công việc chính | Sản phẩm bàn giao |
+---------------------+-------------------------------+-----------------------------+
| Tuần 1 - Tuần 2 | Khảo sát, thu thập yêu cầu | SRS document v1.0, BR list |
| Tuần 3 - Tuần 4 | Thiết kế ERD, Use Case, Wire | 30 Use Cases, DB Schema DDL |
| Tuần 5 - Tuần 7 | Lập trình PHP, HTML/CSS/JS | Source code v1.0 hoàn chỉnh |
| Tuần 8 | Kiểm thử Black-box, UAT, Fix | Báo cáo kiểm thử, Deploy |
+---------------------+-------------------------------+-----------------------------+
Đánh giá rủi ro và giải pháp khắc phục (Risk Assessment Matrix):
- Rủi ro 1: Lệch pha số lượng tồn kho khi nhiều khách hàng cùng đặt 1 mẫu hoa đồng thời.
$\rightarrow$ Giải pháp: Áp dụng kỹ thuật khóa dòng dữ liệu bi quan (Pessimistic Locking /
SELECT ... FOR UPDATE) trong InnoDB Transaction khi thực thi use case UC10 (Đặt hàng).
- Rủi ro 2: Khách hàng hủy đơn khi hoa đã được cắt cắm và đóng gói.
$\rightarrow$ Giải pháp: Thiết lập Business Rule BR-02: Khách hàng chỉ được phép hủy đơn (UC11) khi trạng thái đơn hàng là
PENDING (Chờ duyệt). Khi đơn chuyển sang SHIPPING, nút Hủy sẽ tự động bị vô hiệu hóa.
Triển khai và kết quả thực nghiệm
Quá trình phát triển (Development Process)
Hệ thống được tổ chức theo cấu trúc thư mục rõ ràng, tuân thủ tiêu chuẩn mã nguồn mở:
flower-ecommerce-v1/
├── assets/ # Chứa CSS, JavaScript, Web Fonts, Images
├── config/ # Cấu hình Database kết nối qua PDO (database.php)
├── controllers/ # Điều hướng logic (AuthController, OrderController, CartController)
├── models/ # Tương tác cơ sở dữ liệu (Product, Order, User, Voucher)
├── views/ # Giao diện hiển thị (User Views & Admin GridView Templates)
├── includes/ # Header, Footer, Helper Functions, Security Filters
└── index.php # Điểm tiếp nhận yêu cầu tập trung (Front Controller)
Thuật toán xử lý Đặt hàng và Áp dụng Voucher (Code Snippet trích từ hệ thống):
<?php
// controllers/OrderController.php - Xử lý nghiệp vụ đặt hàng (UC10 & UC13)
require_once __DIR__ . '/../config/database.php';
class OrderController {
private $db;
public function __construct() {
$database = new Database();
$this->db = $database->getConnection();
}
public function processCheckout($userId, $cartItems, $voucherCode, $receiverData, $paymentMethod) {
try {
// Bắt đầu Transaction đảm bảo tính trọn vẹn dữ liệu (ACID)
$this->db->beginTransaction();
$subtotal = 0.0;
foreach ($cartItems as $item) {
// Kiểm tra số lượng tồn kho với Row Locking
$stmtCheck = $this->db->prepare("SELECT price, stock_quantity FROM products WHERE product_id = :id FOR UPDATE");
$stmtCheck->execute([':id' => $item['product_id']]);
$product = $stmtCheck->fetch(PDO::FETCH_ASSOC);
if (!$product || $product['stock_quantity'] < $item['quantity']) {
throw new Exception("Sản phẩm ID " . $item['product_id'] . " không đủ số lượng tồn kho.");
}
$subtotal += $product['price'] * $item['quantity'];
}
// Xử lý giảm giá Voucher (UC13)
$discountAmount = 0.0;
if (!empty($voucherCode)) {
$stmtVoucher = $this->db->prepare("SELECT discount_percent, min_order_amount, usage_limit FROM vouchers
WHERE voucher_code = :code AND expiration_date >= CURDATE() AND status = 1 FOR UPDATE");
$stmtVoucher->execute([':code' => $voucherCode]);
$voucher = $stmtVoucher->fetch(PDO::FETCH_ASSOC);
if ($voucher && $subtotal >= $voucher['min_order_amount'] && $voucher['usage_limit'] > 0) {
$discountAmount = ($subtotal * $voucher['discount_percent']) / 100;
// Cập nhật giảm lượt sử dụng của voucher
$stmtUpdateVoucher = $this->db->prepare("UPDATE vouchers SET usage_limit = usage_limit - 1 WHERE voucher_code = :code");
$stmtUpdateVoucher->execute([':code' => $voucherCode]);
}
}
$finalTotal = max(0, $subtotal - $discountAmount);
// Lưu thông tin đơn hàng tổng quát (UC10)
$stmtOrder = $this->db->prepare("INSERT INTO orders (customer_id, receiver_name, receiver_phone, shipping_address, voucher_code, total_amount, payment_method, order_status)
VALUES (:uid, :rname, :rphone, :addr, :vcode, :total, :pmethod, 'PENDING')");
$stmtOrder->execute([
':uid' => $userId,
':rname' => htmlspecialchars($receiverData['name'], ENT_QUOTES, 'UTF-8'),
':rphone' => htmlspecialchars($receiverData['phone'], ENT_QUOTES, 'UTF-8'),
':addr' => htmlspecialchars($receiverData['address'], ENT_QUOTES, 'UTF-8'),
':vcode' => $voucherCode ?: null,
':total' => $finalTotal,
':pmethod' => $paymentMethod
]);
$orderId = $this->db->lastInsertId();
// Trừ tồn kho sản phẩm
$stmtUpdateStock = $this->db->prepare("UPDATE products SET stock_quantity = stock_quantity - :qty WHERE product_id = :id");
foreach ($cartItems as $item) {
$stmtUpdateStock->execute([
':qty' => $item['quantity'],
':id' => $item['product_id']
]);
}
// Commit Transaction thành công
$this->db->commit();
return ['status' => true, 'order_id' => $orderId, 'message' => 'Đặt hàng thành công'];
} catch (Exception $e) {
$this->db->rollBack();
return ['status' => false, 'message' => $e->getMessage()];
}
}
}
?>
Kiểm thử và đánh giá chất lượng (Testing & Validation)
Dự án áp dụng phương pháp kiểm thử chức năng hộp đen (Black-box Testing) với 45 kịch bản kiểm thử (Test Cases) phủ rộng 30 Use Cases của hệ thống.
+---------------------------------------------------------------------------+
| KẾT QUẢ KIỂM THỬ HỆ THỐNG (UAT) |
+-------------------+----------------+-------------+------------+-----------+
| Phân hệ chức năng | Số lượng Tests | Passed (Đạt)| Failed (Lỗi)| Tỷ lệ (%) |
+-------------------+----------------+-------------+------------+-----------+
| Quản lý tài khoản | 8 | 8 | 0 | 100% |
| Danh mục & SP | 10 | 10 | 0 | 100% |
| Giỏ hàng & Voucher| 12 | 12 | 0 | 100% |
| Đặt hàng & Hủy đơn| 9 | 9 | 0 | 100% |
| Báo cáo doanh thu | 6 | 6 | 0 | 100% |
+-------------------+----------------+-------------+------------+-----------+
| TỔNG CỘNG | 45 | 45 | 0 | 100% |
+-------------------+----------------+-------------+------------+-----------+
Đo lường hiệu năng thực nghiệm (Performance Benchmarking):
Được đo bằng công cụ ApacheBench (ab -n 1000 -c 50 http://localhost/flower-ecommerce-v1/):
- Throughput (Tải thông lượng): Đạt 285.4 requests/second.
- Time per Request (Thời gian xử lý trung bình): 175.2 ms (trong điều kiện 50 người dùng đồng thời).
- First Contentful Paint (FCP) trên Google Chrome DevTools: 0.85 giây.
- Time to Interactive (TTI): 1.1 giây.
Đổi mới và đóng góp kỹ thuật
- Cơ chế phân định thông tin người đặt và người nhận độc lập: Khác với các website TMĐT truyền thống gộp chung địa chỉ người thanh toán và người nhận vào một khung thông tin duy nhất, giải pháp đã thiết kế cấu trúc dữ liệu kép. Điều này giúp loại trừ hoàn toàn việc nhầm lẫn khi người mua đặt hoa tặng cho bên thứ ba.
- Động cơ xử lý mã giảm giá (Voucher Processing Engine) chống trùng lặp: Hệ thống sử dụng Transaction Lock ở mức bản ghi cơ sở dữ liệu để khóa mã voucher khi đang thực thi thanh toán, ngăn ngừa triệt để lỗi khai thác race-condition nhằm sử dụng voucher quá số lượt cho phép.
- Kiến trúc phân quyền RBAC 3 lớp tối ưu: Tách bạch tuyệt đối giữa quyền quản trị hệ thống (Admin), nghiệp vụ bán hàng & chăm sóc khách hàng (Nhân viên), và thao tác mua sắm (Khách hàng). Dữ liệu nhạy cảm như giá nhập và báo cáo doanh thu được bảo vệ tuyệt đối trước các truy cập trái phép.
- Tối ưu hóa hiệu năng GridView phía quản trị: Dữ liệu bảng quản trị được lập chỉ mục (B-Tree Indexing) trên các trường khóa chính và khóa ngoại, giảm thời gian render danh sách 1.000 đơn hàng từ 1.8s xuống còn 0.22s (tăng tốc độ xử lý 87.7%).
+--------------------------------------------------------------------+
| SO SÁNH HIỆU QUẢ CẢI TIẾN NGHIỆP VỤ |
+------------------------------------+---------------+---------------+
| Chỉ số vận hành | Trước cải tiến| Sau cải tiến |
+------------------------------------+---------------+---------------+
| Thời gian tạo đơn hàng trung bình | 4.5 phút | 1.2 phút |
| Tỷ lệ sai sót địa chỉ giao hoa | 18.0% | 0.5% |
| Thời gian kết xuất báo cáo doanh số| 30 phút (Excel| Tức thì (Real)|
| Chi phí bản quyền phần mềm | 5 - 10 triệu/n| 0 VNĐ (FOSS) |
+------------------------------------+---------------+---------------+
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng thực tế (Use Case Scenario)
Website hoàn toàn phù hợp để ứng dụng trực tiếp tại các shop hoa tươi đô thị như chuỗi cửa hàng hoa sinh nhật, hoa sự kiện, hoa cưới. Ví dụ: Khách hàng A tại Quận 1 muốn gửi tặng bó hoa hướng dương đến bạn B tại Quận 10 vào khung giờ 10:00 sáng. Khách hàng chỉ cần truy cập website, chọn sản phẩm, nhập thông tin người nhận riêng biệt, nhập mã HOATUOI2022 để được giảm 10%, chọn phương thức thanh toán chuyển khoản ATM giả lập và nhận mã theo dõi đơn hàng DH10428. Nhân viên trực web tiếp nhận đơn qua giao diện Admin, cập nhật trạng thái "Đang chuẩn bị" $\rightarrow$ "Đang vận chuyển", giúp khách hàng theo dõi tiến độ một cách minh bạch.
[Khách hàng A] [Hệ thống Web] [Shop / Shipper]
| | |
|--- 1. Đặt hoa + Nhập Voucher ---->| |
|--- 2. Điền thông tin Người nhận ->| |
| |--- 3. Báo đơn mới (Pending) ->|
| | |--- 4. Cắm hoa & Giao
|<-- 5. Cập nhật: Đang giao --------| |
| |<-- 6. Giao thành công (Done)--|
Hướng dẫn triển khai (Deployment Guide):
- Yêu cầu môi trường (Prerequisites):
- Hệ điều hành: Linux Ubuntu Server 20.04 LTS hoặc Windows Server (có cài XAMPP/WAMP).
- PHP version $\ge$ 8.1 với các module kích hoạt:
pdo_mysql, mbstring, openssl.
- MySQL Server v8.0 trở lên.
- Các bước thiết lập:
- Bước 1: Clone mã nguồn vào thư mục root của web server:
/var/www/html/flower-shop/ hoặc C:/xampp/htdocs/flower-shop/.
- Bước 2: Import file cơ sở dữ liệu
database_backup.sql vào MySQL thông qua phpMyAdmin hoặc CLI: mysql -u root -p flower_db < database_backup.sql.
- Bước 3: Cấu hình thông số kết nối tại
config/database.php (DB_HOST, DB_USER, DB_PASS, DB_NAME).
- Bước 4: Thiết lập phân quyền thư mục hình ảnh:
chmod -R 755 /assets/images/products.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại:
- Hệ thống thanh toán trực tuyến mới dừng lại ở mức độ giải pháp giả lập logic (Simulation), chưa kết nối trực tiếp qua SDK/Webhook của các cổng thanh toán chính thức như VNPay, MoMo, ZaloPay.
- Chưa hỗ trợ module quản lý định lượng nguyên phụ liệu chuyên sâu (Bill of Materials - BOM) cho từng bông hoa trong một sản phẩm bó hoa phối hợp.
- Giao diện chưa ứng dụng Single Page Application (SPA), việc tải lại trang ở một số tác vụ quản trị còn phụ thuộc vào HTTP round-trip.
Định hướng nâng cấp:
- Tích hợp Webhook Cổng Thanh Toán Thực tế: Nâng cấp kết nối API RESTful tới cổng VNPAY/MoMo với chữ ký số bảo mật HMAC-SHA512.
- Module Quản lý Tồn kho Chi tiết (Inventory BOM): Xây dựng thuật toán tự động trừ lùi số lượng cành hoa nguyên liệu trong kho khi một bó hoa thành phẩm được xuất bán.
- Tối ưu hóa Trải nghiệm với AI: Ứng dụng mô hình gợi ý sản phẩm (Recommendation System) dựa trên lịch sử mua sắm và sở thích của khách hàng vào các dịp lễ đặc biệt.
Đối tượng hưởng lợi
- Sinh viên ngành Công nghệ thông tin: Có được tài liệu tham khảo thực tế về mô hình phân tích thiết kế hệ thống thông tin hoàn chỉnh, từ tài liệu đặc tả SRS, biểu đồ Use Case, Activity Diagram đến thiết kế CSDL chuẩn 3NF.
- Lập trình viên Web (Junior Developers): Nắm bắt phương pháp tổ chức mã nguồn PHP sạch, kỹ thuật xử lý Transaction an toàn trong cơ sở dữ liệu và cách phòng chống các lỗ hổng bảo mật phổ biến OWASP.
- Chủ doanh nghiệp / Cửa hàng hoa tươi vừa và nhỏ: Tiếp cận một giải pháp thương mại điện tử chi phí thấp (0 VNĐ phí bản quyền), giải quyết triệt để bài toán quản lý đơn hàng quà tặng và kiểm soát doanh thu chính xác.
- Các nhà nghiên cứu ứng dụng E-commerce: Cơ sở dữ liệu và mô hình phân tích hành vi đặt hàng là nguồn dữ liệu thực nghiệm giá trị cho các nghiên cứu tối ưu hóa chuỗi cung ứng hàng tươi sống.
Câu hỏi thường gặp
1. Hệ thống cần cấu hình phần cứng tối thiểu như thế nào để vận hành mượt mà?
Hệ thống yêu cầu máy chủ tối thiểu 1 vCPU, 1GB RAM và 10GB dung lượng lưu trữ SSD nếu triển khai trên nền tảng Linux (Ubuntu Server). Đối với môi trường phát triển cục bộ (Localhost), máy tính cá nhân chạy Windows 10/11 có cài đặt XAMPP v8.1+ với 4GB RAM là hoàn toàn đáp ứng tốt.
2. Làm thế nào để giải quyết xung đột khi nhiều người dùng cùng mua một sản phẩm sắp hết hàng?
Hệ thống sử dụng cơ chế Pessimistic Locking (SELECT ... FOR UPDATE) bên trong một Database Transaction của MySQL InnoDB. Khi một tiến trình checkout đang xử lý, bản ghi tồn kho của sản phẩm đó sẽ bị khóa tạm thời; các giao dịch đến sau phải chờ cho đến khi giao dịch trước hoàn tất (Commit hoặc Rollback), ngăn ngừa hoàn toàn tình trạng bán vượt tồn kho (Overselling).
3. Website có hỗ trợ tích hợp các đơn vị vận chuyển bên thứ ba như Giao Hàng Tiết Kiệm, Ahamove không?
Kiến trúc mã nguồn ở tầng Controller được thiết kế theo hướng mở (Open-Closed Principle). Khi cần tích hợp, lập trình viên chỉ cần tạo thêm ShippingService class và gọi API tạo đơn của bên vận chuyển thông qua cURL trong hàm processCheckout() mà không cần viết lại cấu trúc lõi của hệ thống.
4. Chi phí duy trì hệ thống trên môi trường Production ước tính là bao nhiêu?
Nhờ tối ưu hóa mã nguồn PHP thuần không sử dụng các framework cồng kềnh, website có thể chạy ổn định trên một gói Cloud VPS giá rẻ (khoảng 100.000 - 150.000 VNĐ/tháng) kết hợp tên miền quốc tế (.com/.net khoảng 250.000 VNĐ/năm) và chứng chỉ bảo mật SSL Let's Encrypt hoàn toàn miễn phí. Tổng chi phí duy trì chỉ khoảng 1.500.000 VNĐ/năm.
5. Dữ liệu báo cáo doanh thu có thể xuất ra các định dạng văn phòng không?
Hệ thống đã tích hợp sẵn chức năng render dữ liệu ra bảng in ấn chuẩn CSS Print và hỗ trợ kết xuất dữ liệu dạng bảng (CSV/Excel format) thông qua các tiêu đề HTTP Header do PHP khởi tạo trực tiếp từ kết quả truy vấn thống kê UC27.
Kết luận
Đồ án môn học Thương mại điện tử với đề tài "Website Bán Hoa" của nhóm sinh viên Trường Đại học Ngoại ngữ - Tin học TPHCM (HUFLIT) đã giải quyết trọn vẹn và thực chất các bài toán đặt ra trong nghiệp vụ kinh doanh hoa tươi trực tuyến. Dự án không chỉ dừng lại ở việc xây dựng giao diện tương tác thẩm mỹ cho khách hàng mà còn tập trung chuyên sâu vào việc chuẩn hóa quy trình quản trị, bảo mật giao dịch và tối ưu hóa luồng dữ liệu giao vận.
Những đóng góp chính của đề tài bao gồm:
- Hoàn thiện hệ thống tài liệu phân tích thiết kế chuẩn mực với 30 Use Cases và 28 giao diện chức năng hoàn chỉnh.
- Cung cấp giải pháp phân tách thông tin người đặt - người nhận chuyên biệt cho thị trường quà tặng.
- Hiện thực hóa mô hình quản lý phân quyền đa vai trò RBAC an toàn, đáp ứng các tiêu chuẩn phòng ngừa tấn công mạng cơ bản theo OWASP Top 10.
Hệ thống mã nguồn mở này là nền tảng vững chắc để tiếp tục mở rộng thêm các tính năng cao cấp như thanh toán ví điện tử thời gian thực, quản lý kho nguyên liệu đa tầng và tối ưu hóa chuỗi cung ứng thông minh trong tương lai. Bạn đọc và các nhà phát triển quan tâm có thể tham khảo toàn bộ tài liệu đặc tả và cấu trúc cơ sở dữ liệu để áp dụng cho các dự án thương mại điện tử thực tế.