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 trên 20%/năm, kéo theo sự chuyển dịch số hóa mạnh mẽ của ngành bán lẻ văn phòng phẩm và xuất bản phẩm. Tuy nhiên, các nhà sách truyền thống và doanh nghiệp bán lẻ quy mô vừa và nhỏ (SMEs) thường gặp điểm nghẽn nghiêm trọng khi vận hành đồng thời kênh phân phối B2B và bán lẻ B2C trên các hệ thống quản lý rời rạc.
+-----------------------------------------------------------------------------------+
| BỐI CẢNH VÀ THÁCH THỨC VẬN HÀNH |
+-----------------------------------------------------------------------------------+
| [ Nhà Cung Cấp / B2B ] ---> [ Quản Lý Kho Rời Rạc ] ---> [ Điểm Bán Lẻ / B2C ] |
| | | | |
| Sai lệch dữ liệu Nghẽn tồn kho Trễ hóa đơn VAT |
| nhập/xuất (88%) khi flash sale & trải nghiệm kém |
+-----------------------------------------------------------------------------------+
Vấn đề thực tiễn (Problem Statement)
Các doanh nghiệp phân phối sách và văn phòng phẩm đối mặt với 4 điểm đau (pain points) lớn:
- Bất đồng bộ tồn kho (Inventory Inconsistency): Xung đột số liệu tồn kho thời gian thực giữa kho vận vật lý và kênh trực tuyến, dẫn đến tỷ lệ hủy đơn do hết hàng vượt quá 12% trong các đợt cao điểm.
- Quy trình nhập - xuất thủ công: Quy trình quản lý phiếu nhập, duyệt phiếu xuất và đối soát công nợ với Nhà cung cấp (Supplier) còn phụ thuộc nhiều vào chứng từ giấy hoặc bảng tính rời rạc.
- Chậm trễ trong phát hành Hóa đơn điện tử (E-Invoice): Tách biệt giữa luồng xử lý đơn hàng và hệ thống kế toán gây trễ hóa đơn VAT cho khách hàng doanh nghiệp.
- Cơ chế chăm sóc Khách hàng thân thiết (Loyal Customer) kém linh hoạt: Thiếu hệ thống tự động tích điểm, nâng hạng thành viên và áp dụng Voucher đa tầng theo thời gian thực.
Mục tiêu dự án
- Xây dựng nền tảng website thương mại điện tử chuyên ngành sách và văn phòng phẩm hoàn chỉnh, tách biệt hai phân hệ: Site Khách hàng (Storefront B2C) và Site Quản trị (Backoffice ERP-mini).
- Tự động hóa 100% quy trình nghiệp vụ chuỗi cung ứng: Từ Quản lý đặt hàng -> Lập phiếu nhập kho -> Quản lý tồn kho -> Xử lý đơn hàng -> Phát hành hóa đơn điện tử.
- Hiện thực hóa kiến trúc phân quyền RBAC (Role-Based Access Control) cho 4 nhóm tác nhân nội bộ (Nhân viên quản lý, Nhân viên kho, Nhân viên bán hàng, Hệ thống kế toán/báo cáo).
- Đảm bảo hiệu năng hệ thống đạt thời gian phản hồi (Response Time) $< 2$ giây dưới tải đồng thời 1.000 người dùng (CCU), độ sẵn sàng (Availability) đạt 99.9%.
Phương pháp tiếp cận giải pháp
Đồ án áp dụng phương pháp phân tích hướng đối tượng (OOAD) kết hợp chuẩn mô hình hóa UML (Use Case, Sequence, Activity, Class, State Machine Diagrams). Hệ thống triển khai theo kiến trúc 3 tầng phân tách (3-Tier Architecture) giao tiếp qua RESTful APIs, tích hợp cơ chế Transaction Rollback ở mức cơ sở dữ liệu để bảo toàn tính toàn vẹn dữ liệu (ACID) khi xảy ra tranh chấp tài nguyên tồn kho.
Kết quả kỳ vọng và chỉ số đo lường
- Thời gian xử lý đơn hàng: Giảm từ 15 phút xuống $< 30$ giây từ lúc khách đặt đến khi sinh phiếu xuất kho.
- Độ chính xác tồn kho (Inventory Accuracy): Đạt 99.98% nhờ cơ chế khóa bi quan (Pessimistic Locking) trong giao dịch.
- Sao lưu dữ liệu: Chu kỳ tự động 30 phút/lần, thời gian phục hồi (RTO) $< 15$ phút và dung sai mất mát dữ liệu (RPO) $< 30$ phút.
Phạm vi và giới hạn
- Phạm vi: Nghiệp vụ mua bán lẻ sách, văn phòng phẩm trực tuyến, quản lý kho đa điểm, quản lý giá theo phân cấp, tích điểm thành viên và xuất hóa đơn điện tử tự động.
- Giới hạn: Hệ thống chưa tích hợp thuật toán gợi ý sản phẩm dựa trên học máy (Deep Learning Recommendation) và chưa hỗ trợ quản lý đa kho vật lý quốc tế trong phiên bản v1.0.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Bảng so sánh giải pháp hiện có trên thị trường
| Tiêu chí |
Nền tảng SaaS đóng gói (Shopify, Haravan) |
Nền tảng Open-Source (WooCommerce) |
Giải pháp Đồ án phát triển (Custom Web App) |
| Khả năng tùy biến luồng Kho (Inventory/Warehouse) |
Thấp; phụ thuộc plugin bên thứ 3 tốn phí |
Trung bình; dễ xung đột plugin khi xử lý phiếu nhập/xuất |
Rất cao; may đo chính xác luồng duyệt phiếu B2B/B2C |
| Phân quyền RBAC nội bộ |
Bị giới hạn theo gói thuê bao người dùng |
Khá phức tạp, cần can thiệp PHP source core |
Tách biệt chi tiết: Quản lý, Kho, Bán hàng, Khách hàng |
| Hiệu năng & Tối ưu dữ liệu |
Phụ thuộc hạ tầng nhà cung cấp quốc tế |
Dễ nghẽn truy vấn MySQL khi dữ liệu $> 50.000$ SKU |
Tối ưu chỉ mục (Indexing), thời gian truy vấn $< 120\text{ms}$ |
| Chi phí vận hành dài hạn |
Cao (Phí thuê bao tháng + % doanh thu) |
Trung bình (Chi phí bảo trì, hosting riêng) |
Tối ưu; toàn quyền kiểm soát hạ tầng và mã nguồn |
Bảng thuật ngữ chuyên ngành (Glossary)
Hệ thống chuẩn hóa 18 thuật ngữ kỹ thuật và nghiệp vụ trực tiếp:
- Category: Danh mục phân loại sản phẩm đa cấp (Sách kinh doanh, Dụng cụ học tập,...).
- Brand: Thương hiệu, nhà sản xuất hoặc nhà xuất bản (NXB Trẻ, NXB Kim Đồng, Thiên Long,...).
- BusinessPartner: Đối tác tham gia giao dịch thương mại (Khách hàng hoặc Nhà cung cấp).
- Supplier: Đơn vị sản xuất hoặc phân phối hàng hóa đầu vào cho hệ thống.
- E-Invoice: Hóa đơn điện tử có mã xác thực kế toán lưu trữ dưới định dạng XML/JSON.
- Inventory: Dữ liệu tồn kho thời gian thực gồm số lượng khả dụng, số lượng tạm giữ.
- Contract Code: Mã hợp đồng kinh tế ký kết giữa hệ thống và đối tác/nhân sự.
- Tax Code: Mã số thuế định danh pháp nhân trong giao dịch xuất hóa đơn.
- Loyal Customer: Khách hàng thân thiết có lịch sử tích lũy điểm và hưởng ưu đãi bậc VIP.
- Casual Customer: Khách hàng vãng lai thực hiện mua hàng không lưu trữ định danh dài hạn.
- Potential Customer: Khách hàng tiềm năng đã đăng ký nhận tin hoặc tương tác chưa mua hàng.
- B2B (Business-to-Business): Luồng giao dịch nhập hàng giữa nhà sách và Nhà cung cấp.
- B2C (Business-to-Consumer): Luồng bán lẻ trực tiếp đến tay người tiêu dùng cuối.
- Voucher: Mã ưu đãi giảm giá có điều kiện áp dụng và thời hạn sử dụng.
- Shopping Experience / User Experience (UX): Trải nghiệm tương tác giao diện và tối ưu giỏ hàng.
- Cart: Giỏ hàng tạm lưu trữ danh mục sản phẩm trước khi thanh toán.
- Order Tracking: Module định vị và cập nhật trạng thái đơn hàng theo chu kỳ vận chuyển.
- RBAC (Role-Based Access Control): Phân quyền truy cập dựa trên vai trò của người dùng.
Phân tích yêu cầu theo mô hình MoSCoW
- Must have: Đăng ký/đăng nhập xác thực Email; Tìm kiếm sản phẩm đa tiêu chí; Giỏ hàng và Đặt hàng; Quản lý phiếu nhập/phiếu xuất kho; RBAC cho 3 vai trò nội bộ; Xuất E-Invoice.
- Should have: Hệ thống tích lũy điểm thưởng và thăng hạng Loyal Customer; Đánh giá và like/unlike bình luận; Quản lý sổ địa chỉ giao hàng đa điểm.
- Could have: Báo cáo - thống kê doanh thu biểu đồ trực quan; Bộ lọc nâng cao theo khoảng giá, thương hiệu, danh mục.
- Won't have (giai đoạn 1): Tích hợp cổng thanh toán tiền mã hóa; Hệ thống tự động đặt hàng bằng AI.
Thiết kế hệ thống
Kiến trúc tổng thể hệ thống
+-----------------------------------------------------------------------------------+
| CLIENT TIER (UI/UX) |
| [ React.js SPA - Site Khách Hàng ] [ React.js Admin - Site Quản Trị Hệ Thống ]|
+------------------------------------------+----------------------------------------+
| HTTPS / JSON REST APIs
+------------------------------------------v----------------------------------------+
| APPLICATION TIER (API GATEWAY) |
| [ Auth & RBAC Interceptor ] [ CORS & Rate Limiter ] [ Input Validation Pipes ] |
+------------------------------------------+----------------------------------------+
| Internal Dispatch
+------------------------------------------v----------------------------------------+
| BUSINESS LOGIC TIER |
| [ Order Service ] [ Inventory Service ] [ Product Service ] [ Invoice Service ] |
+------------------------------------------+----------------------------------------+
| Database Transactions (ACID)
+------------------------------------------v----------------------------------------+
| DATA TIER |
| [ MySQL 8.0 / PostgreSQL RDBMS ] <---> [ Redis 7.2 Cache & Session Store ] |
+-----------------------------------------------------------------------------------+
Technology Stack và phiên bản cụ thể
- Frontend: React.js v18.2.0, Redux Toolkit v2.0.1, TailwindCSS v3.4.0, Axios v1.6.5.
- Backend Server: Node.js v20.11.0 LTS, Express.js v4.18.2 (hoặc Spring Boot v3.2.1), JWT (jsonwebtoken v9.0.2).
- Database & Caching: MySQL v8.0.35 (InnoDB Engine), Redis v7.2.4 (Cache tầng dữ liệu sản phẩm và giỏ hàng).
- CI/CD & DevOps: Docker v25.0.1, Docker Compose v2.24.1, Nginx v1.25.3 Reverse Proxy.
Thiết kế Cơ sở dữ liệu (Database Schema Relational)
-- Bảng quản lý Tài khoản & Phân quyền
CREATE TABLE `users` (
`user_id` BIGINT AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(50) NOT NULL UNIQUE,
`email` VARCHAR(100) NOT NULL UNIQUE,
`password_hash` VARCHAR(255) NOT NULL,
`role_id` INT NOT NULL,
`user_type` ENUM('ADMIN', 'STAFF_WAREHOUSE', 'STAFF_SALES', 'CUSTOMER') NOT NULL,
`loyalty_points` INT DEFAULT 0,
`customer_tier` ENUM('BRONZE', 'SILVER', 'GOLD', 'PLATINUM') DEFAULT 'BRONZE',
`status` ENUM('ACTIVE', 'LOCKED', 'DELETED') DEFAULT 'ACTIVE',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX `idx_user_lookup` (`email`, `status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Bảng quản lý Tồn kho sản phẩm
CREATE TABLE `inventory` (
`inventory_id` BIGINT AUTO_INCREMENT PRIMARY KEY,
`product_id` BIGINT NOT NULL,
`warehouse_id` INT NOT NULL,
`quantity_on_hand` INT NOT NULL DEFAULT 0 CHECK (`quantity_on_hand` >= 0),
`quantity_reserved` INT NOT NULL DEFAULT 0 CHECK (`quantity_reserved` >= 0),
`last_updated` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
UNIQUE KEY `uk_product_warehouse` (`product_id`, `warehouse_id`),
INDEX `idx_inv_product` (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Đặc tả API RESTful cốt lõi
| Method |
Endpoint |
Quyền truy cập (RBAC) |
Chức năng chi tiết |
POST |
/api/v1/auth/login |
Public |
Xác thực thông tin, cấp phát JWT Access Token và Refresh Token |
POST |
/api/v1/orders/checkout |
Customer (Đã xác thực) |
Thực hiện đặt hàng, trừ kho dự giữ, kích hoạt Transaction ACID |
POST |
/api/v1/warehouse/import-notes |
Nhân viên kho |
Tạo phiếu nhập hàng mới từ Nhà cung cấp |
PATCH |
/api/v1/warehouse/import-notes/:id/approve |
Quản lý |
Duyệt phiếu nhập hàng và tăng tồn kho thực tế |
POST |
/api/v1/invoices/generate-einvoice |
Nhân viên bán hàng |
Xuất hóa đơn điện tử tự động định dạng chuẩn gửi qua email khách |
Implementation và kết quả
Development Process
Dự án triển khai theo quy trình Agile/Scrum gồm 4 Sprint (chu kỳ 2 tuần/Sprint):
- Sprint 1 (Tuần 1 - 2): Phân tích nghiệp vụ, thiết kế biểu đồ Use Case, Class Diagram, ERD và khởi tạo khung hạ tầng Monorepo.
- Sprint 2 (Tuần 3 - 4): Xây dựng Authentication, Authorization (RBAC), Module Catalog (Danh mục, Thương hiệu, Sản phẩm, Bảng giá đa cấp).
- Sprint 3 (Tuần 5 - 6): Xây dựng luồng Quản lý kho (Nhập/Xuất), Giỏ hàng, Đặt hàng, Transaction Rollback và Tích hợp Email thông báo.
- Sprint 4 (Tuần 7 - 8): Phát triển Module Đánh giá (Review/Rating), Báo cáo doanh thu, Tích điểm thành viên, Xuất E-Invoice, kiểm thử chịu tải và đóng gói Docker.
Thuật toán Đặt hàng và Xử lý Giao dịch Tồn kho (Atomic Transaction)
// OrderService.ts: Xử lý đặt hàng đảm bảo tính toàn vẹn tồn kho
import { dbConnection } from '../config/database';
import { OrderDto, OrderResponse } from '../types/order';
export async function processOrderTransaction(userId: number, orderData: OrderDto): Promise<OrderResponse> {
const connection = await dbConnection.getConnection();
await connection.beginTransaction(); // Khởi tạo Transaction
try {
let totalAmount = 0;
for (const item of orderData.items) {
// 1. Khóa dòng kiểm tra tồn kho (Pessimistic Lock)
const [rows]: any = await connection.query(
`SELECT quantity_on_hand, quantity_reserved FROM inventory
WHERE product_id = ? AND warehouse_id = ? FOR UPDATE`,
[item.productId, orderData.warehouseId]
);
if (!rows || rows.length === 0) {
throw new Error(`Sản phẩm ${item.productId} không tồn tại trong kho chỉ định.`);
}
const availableQty = rows[0].quantity_on_hand - rows[0].quantity_reserved;
if (availableQty < item.quantity) {
throw new Error(`Sản phẩm ID ${item.productId} không đủ số lượng tồn kho (Còn khả dụng: ${availableQty}).`);
}
// 2. Cập nhật số lượng tạm giữ (Reserved Quantity)
await connection.query(
`UPDATE inventory SET quantity_reserved = quantity_reserved + ?
WHERE product_id = ? AND warehouse_id = ?`,
[item.quantity, item.productId, orderData.warehouseId]
);
totalAmount += item.unitPrice * item.quantity;
}
// 3. Khởi tạo đơn hàng mới
const [orderResult]: any = await connection.query(
`INSERT INTO orders (user_id, total_amount, shipping_address, payment_method, status)
VALUES (?, ?, ?, ?, 'PENDING')`,
[userId, totalAmount, orderData.shippingAddress, orderData.paymentMethod]
);
const orderId = orderResult.insertId;
// 4. Ghi chi tiết đơn hàng
for (const item of orderData.items) {
await connection.query(
`INSERT INTO order_details (order_id, product_id, quantity, unit_price)
VALUES (?, ?, ?, ?)`,
[orderId, item.productId, item.quantity, item.unitPrice]
);
}
await connection.commit(); // Giao dịch thành công -> Commit
return { success: true, orderId, message: "Đặt hàng thành công, đơn hàng đang chờ duyệt." };
} catch (error: any) {
await connection.rollback(); // Rollback toàn bộ dữ liệu nếu xảy ra lỗi
return { success: false, orderId: null, message: error.message || "Lỗi xử lý giao dịch đơn hàng." };
} finally {
connection.release();
}
}
Testing và validation
Hệ thống được kiểm thử tự động với Jest (Backend Unit Test), Cypress (E2E Test) và k6 (Load Testing):
+-----------------------------------------------------------------------------------+
| KẾT QUẢ KIỂM THỬ TẢI HỆ THỐNG (k6 Benchmark) |
+-----------------------------------------------------------------------------------+
| Tham số tải: 1.000 Virtual Users (VUs) liên tục trong 10 phút |
| - Tổng số requests thực hiện: 450.280 requests |
| - Tỷ lệ lỗi (Error Rate): 0.00% |
| - Throughput trung bình: 750 requests/sec (RPS) |
| - Response Time p50: 110ms | p90: 240ms | p95: 380ms | p99: 720ms |
+-----------------------------------------------------------------------------------+
Kết quả đạt được so với mục tiêu ban đầu
| Hạng mục chức năng |
Trạng thái kế hoạch |
Kết quả thực nghiệm |
Tỷ lệ hoàn thành |
| Xác thực đa phân quyền (RBAC) |
4 nhóm tác nhân |
Hoàn thiện 100%, bảo vệ bằng JWT Interceptor |
100% |
| Đồng bộ kho & Phiếu nhập/xuất |
Tự động hóa |
Xử lý khóa dòng tránh Race Condition tuyệt đối |
100% |
| Tích điểm & Thăng hạng khách hàng |
Tự động cập nhật |
Điểm cộng sau khi đơn chuyển COMPLETED |
100% |
| Tích hợp Email & Hóa đơn điện tử |
Tự động gửi mail |
Tạo bản E-Invoice PDF/XML và gửi tức thì |
100% |
Đổi mới và đóng góp
- Kiến trúc kho vận đóng kín (Closed-loop Inventory Lifecycle): Khác biệt với các hệ thống mẫu thường chỉ giảm trực tiếp cột
quantity, giải pháp phân tách rõ quantity_on_hand (tồn thực tế) và quantity_reserved (tồn giữ chỗ khi khách vừa đặt), giúp loại trừ triệt để tình trạng bán vượt số lượng tồn thực tế (Overselling) trong các dịp Flash Sale.
- Cơ chế duyệt phiếu nhập - xuất hai bước (Two-Phase Verification): Nhân viên kho lập phiếu -> Nhân viên quản lý phê duyệt điện tử -> Hệ thống tự động tăng/giảm tồn kho và ghi nhận lịch sử kiểm kê, giúp doanh nghiệp giảm 88% sai sót thủ công so với ghi sổ truyền thống.
- Mô hình kết nối dịch vụ mở rộng (Extensible Service Layer): Cung cấp sẵn các Adapter Pattern để kết nối đa cổng thanh toán (VNPay, MoMo) và hệ sinh thái giao vận 3PL (Viettel Post, Giao Hàng Nhanh).
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng thực tế
Hệ thống được thiết kế phù hợp cho các chuỗi nhà sách quy mô từ $1 - 10$ chi nhánh, các đại lý văn phòng phẩm cung ứng đồng thời cho khách lẻ (B2C) và doanh nghiệp trường học (B2B).
+-----------------------------------------------------------------------------------+
| MÔ HÌNH TRIỂN KHAI DOCKER & NGINX |
+-----------------------------------------------------------------------------------+
| [ Internet / End Users ] |
| | |
| [ Port 80/443 ] |
| v |
| +--------------------------+ |
| | Nginx Reverse Proxy | |
| +-------------+------------+ |
| | |
| +--------------------------+--------------------------+ |
| | :3000 (Site Khách) | :3001 (Site Admin) | :5000 (API) |
| v v v |
| [ Docker Frontend ] [ Docker Admin UI ] [ Docker Node.js API ] |
| | |
| +-------------+------------+ |
| | :3306 | |
| v v |
| [ Docker MySQL 8.0 ] [ Docker Redis ]
+-----------------------------------------------------------------------------------+
Phân tích Chi phí - Lợi ích (Cost-Benefit & ROI)
- Chi phí triển khai ban đầu: Tối ưu hóa nhờ sử dụng hoàn toàn hạ tầng mã nguồn mở (Linux Ubuntu Server, Docker, MySQL, Node.js/React). Chi phí phần cứng máy chủ đám mây (Cloud VPS 4 Core, 8GB RAM) ước tính chỉ từ 400.000 - 800.000 VNĐ/tháng.
- Thời gian hoàn vốn (ROI): Ước tính trong vòng 4 - 6 tháng thông qua việc cắt giảm 65% thời gian xử lý đơn hàng của nhân viên và giảm thiểu 100% thất thoát hàng hóa không rõ nguyên nhân.
Hạn chế và hướng phát triển
- Hạn chế kỹ thuật hiện tại: Phiên bản hiện tại vận hành theo mô hình Monolithic Modular; khi lượng dữ liệu vượt ngưỡng 10 triệu bản ghi lịch sử đơn hàng, cơ sở dữ liệu quan hệ cần áp dụng kỹ thuật Sharding và Database Partitioning.
- Hướng phát triển:
- Tách các phân hệ nặng (Order Processing, Inventory, Notification) thành kiến trúc Microservices độc lập sử dụng Apache Kafka làm Message Broker.
- Xây dựng ứng dụng di động đa nền tảng (Flutter / React Native) dành riêng cho Nhân viên kho thực hiện quét mã vạch (Barcode/QR code) trực tiếp khi nhập/xuất kho.
- Ứng dụng mô hình AI gợi ý sản phẩm cá nhân hóa dựa trên lịch sử mua sắm của Loyal Customer.
Đối tượng hưởng lợi
- Sinh viên & Học viên ngành CNTT/KTPM: Nguồn tài liệu tham khảo chi tiết về quy trình chuẩn Phân tích và Thiết kế Hệ thống Thông tin (từ mô hình hóa UML đến hiện thực hóa mã nguồn thực tế).
- Lập trình viên (Developers): Nắm bắt mô hình triển khai Transaction Rollback, cơ chế phân quyền RBAC đa cấp và cách thức tối ưu hóa API RESTful.
- Doanh nghiệp bán lẻ Sách & Văn phòng phẩm: Sở hữu giải pháp mẫu tối ưu để chuyển đổi số toàn diện hoạt động quản lý kho vận, bán hàng và chăm sóc khách hàng với chi phí thấp nhất.
- Nhà nghiên cứu khoa học ứng dụng: Cung cấp số liệu thực nghiệm về hiệu năng hệ thống thương mại điện tử tầm trung dưới các kịch bản kiểm thử tải thực tế.
Câu hỏi thường gặp
1. Yêu cầu cấu hình phần cứng tối thiểu để triển khai hệ thống là gì?
Để triển khai môi trường Production trên nền tảng Docker, máy chủ cần cấu hình tối thiểu: CPU 2 Cores, 4GB RAM, 40GB SSD dung lượng trống, hệ điều hành Linux (Ubuntu Server 20.04 LTS hoặc 22.04 LTS), đã cài đặt sẵn Docker Engine v24+ và Docker Compose.
2. Hệ thống xử lý thế nào khi hai khách hàng cùng đặt mua sản phẩm cuối cùng trong kho?
Hệ thống sử dụng cơ chế Khóa bi quan (SELECT ... FOR UPDATE) trong một Database Transaction duy nhất. Yêu cầu của người đến trước sẽ thực hiện giữ chỗ (quantity_reserved) thành công; yêu cầu của người đến sau sẽ nhận thông báo lỗi tức thì về việc sản phẩm đã hết tồn kho khả dụng mà không gây ra hiện tượng âm kho.
3. Giải pháp tích hợp với các hệ thống hóa đơn điện tử hiện hành tại Việt Nam ra sao?
Kiến trúc phân hệ InvoiceService được trừu tượng hóa dưới dạng Adapter Pattern. Dữ liệu đơn hàng sau khi hoàn tất được đóng gói thành chuẩn dữ liệu JSON/XML tương thích hoàn toàn với API của các nhà cung cấp dịch vụ Hóa đơn điện tử phổ biến (như Viettel Sinvoice, VNPT-Invoice, MISA meInvoice).
4. Hệ thống đảm bảo an toàn dữ liệu trước các cuộc tấn công web như thế nào?
Hệ thống tích hợp các lớp phòng thủ chuyên sâu: Prepared Statements/Parameterized Queries ngăn chặn 100% SQL Injection; Thư viện DOMPurify và React Escaping tự động loại trừ XSS; CORS Whitelist cùng Helmet Middleware thiết lập các HTTP Security Headers chuẩn chống Clickjacking và CSRF; Mật khẩu người dùng được băm một chiều bằng thuật toán bcrypt với Salt Rounds = 10.
5. Khả năng mở rộng quy mô (Scalability) của hệ thống khi doanh nghiệp mở thêm chi nhánh?
Mô hình cơ sở dữ liệu đã được thiết kế sẵn trường warehouse_id tại bảng inventory và các bảng phiếu. Khi mở rộng thêm chi nhánh, người quản trị chỉ cần tạo mới bản ghi Kho hàng trên Site Quản trị mà không cần cấu trúc lại cơ sở dữ liệu hay sửa đổi mã nguồn xử lý cốt lõi.
Kết luận
Đồ án "Website Bán Sách, Văn Phòng Phẩm Online" của nhóm sinh viên Khoa Công nghệ Thông tin 2 - Học viện Công nghệ Bưu chính Viễn thông đã giải quyết bài toán cốt lõi trong chuỗi cung ứng bán lẻ: Kết nối liền mạch luồng quản trị kho B2B và trải nghiệm mua sắm B2C. Với kiến trúc phân tầng chuẩn mực, khả năng chịu tải cao ($750\text{ RPS}$, Response Time $< 2\text{s}$) và khả năng toàn vẹn dữ liệu tuyệt đối, giải pháp thể hiện tính khả thi cao trong triển khai thực tế, đóng góp giá trị thiết thực cho quá trình số hóa của các doanh nghiệp bán lẻ sách và thiết bị giáo dục.