Giới thiệu dự án
Thương mại điện tử (E-Commerce) tại Việt Nam đang trải qua giai đoạn tăng trưởng bứt phá với tốc độ tăng trưởng kép hàng năm (CAGR) đạt trên 20%, quy mô thị trường dự kiến vượt mốc 25 tỷ USD. Cùng với sự thay đổi thói quen tiêu dùng từ mua sắm truyền thống sang trực tuyến, nhu cầu về các nền tảng thương mại điện tử đa người bán (Multi-vendor Marketplace) có hiệu năng cao, linh hoạt và bảo mật ngày càng trở nên cấp thiết đối với các doanh nghiệp vừa và nhỏ (SMB).
Đề tài "Xây dựng website E-Commerce YD" do sinh viên Phạm Huy Phong (Khoa Công nghệ Thông tin – Trường Đại học Điện Lực, dưới sự hướng dẫn của TS. Nguyễn Văn Đoàn) nghiên cứu và phát triển nhằm giải quyết triệt để bài toán phân mảnh của các website bán lẻ đơn lẻ. Các giải pháp truyền thống thường giới hạn ở mô hình một người bán (Single-vendor), chi phí vận hành cao, khó mở rộng danh mục hàng hóa và thiếu cơ chế tự động hóa trong quản trị phân quyền đa cấp.
graph TD
A[Người Mua - Customer] -->|Duyệt, Đặt hàng, Thanh toán VNPay| B(Website E-Commerce YD)
C[Người Bán - Seller] -->|Quản lý sản phẩm, Đơn hàng, Doanh thu| B
D[Quản Trị Viên - Admin] -->|Phê duyệt Shop, Quản lý danh mục/User| B
B --> E[(MySQL RDBMS)]
B --> F[VNPay Payment Gateway]
Mục tiêu của dự án
- Xây dựng kiến trúc phân tầng chuyên biệt: Tách biệt hoàn toàn Frontend và Backend thông qua mô hình Single-Page Application (SPA) kết hợp kiến trúc RESTful API.
- Thiết lập quy trình nghiệp vụ đa tác nhân: Hỗ trợ 3 nhóm người dùng độc lập: Khách hàng (Customer), Người bán hàng (Seller), và Quản trị viên hệ thống (Administrator) với phân quyền Role-Based Access Control (RBAC).
- Tự động hóa chu trình bán hàng: Tích hợp cổng thanh toán trực tuyến qua VNPAY, module xử lý đơn hàng thời gian thực, quản lý Flash Sale và thống kê doanh thu đa chiều.
- Tối ưu hóa quy trình kiểm thử và triển khai: Áp dụng công nghệ đóng gói Docker container, thiết lập luồng CI/CD tự động hóa kiểm thử trên GitLab và triển khai lên hạ tầng đám mây AWS.
Chỉ số kỳ vọng và phạm vi
- Thời gian phản hồi API: Dưới 200ms đối với 95% các tác vụ truy vấn dữ liệu tiêu chuẩn.
- Tính sẵn sàng (High Availability): Đạt 99.9% uptime trong môi trường kiểm thử tải.
- Phạm vi hệ thống: Tập trung vào chuỗi giá trị cốt lõi từ duyệt sản phẩm, quản lý giỏ hàng, đặt hàng, thanh toán VNPAY, quản lý kho/doanh thu của Seller, đến phê duyệt người bán của Admin.
- Giới hạn: Hệ thống chưa tích hợp thuật toán gợi ý AI theo hành vi cá nhân hóa sâu và chưa triển khai phân tán đa cụm cơ sở dữ liệu.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Nghiên cứu thị trường và phân tích so sánh kỹ thuật giữa các giải pháp thương mại điện tử hiện nay:
| Tiêu chí |
WooCommerce (WordPress / PHP) |
Nền tảng SaaS (Shopify / Haravan) |
Hệ thống E-Commerce YD (Customized) |
| Kiến trúc |
Monolithic (Đơn khối) |
Đóng kín (Proprietary Cloud) |
Decoupled (Spring Boot + Vue.js SPA) |
| Tùy biến nghiệp vụ |
Trung bình (phụ thuộc Plugins) |
Thấp (giới hạn bởi API/Theme) |
Tuyệt đối (toàn quyền can thiệp mã nguồn) |
| Hiệu năng & Tải |
Kém khi dữ liệu lớn (>50k SKUs) |
Rất tốt nhưng chi phí tăng theo tải |
Cao (nhờ connection pool HikariCP & Vue SPA) |
| Chi phí vận hành |
Thấp ban đầu, tăng khi scale |
Rất cao (phí thuê bao + % giao dịch) |
Tối ưu (chỉ trả phí hạ tầng server/cloud) |
| Quy trình Multi-vendor |
Cần cài thêm plugin bên thứ 3 |
Cần gói Enterprise cao cấp |
Tích hợp sẵn quy trình phê duyệt & quản lý |
Ưu tiên hóa yêu cầu người dùng theo phương pháp MoSCoW:
- Must-Have: Xác thực người dùng (JWT, Spring Security), Giỏ hàng & Đặt hàng, Thanh toán trực tuyến VNPay, Quản lý sản phẩm & đơn hàng cho Seller, Phê duyệt người bán cho Admin.
- Should-Have: Kênh trao đổi trực tuyến (Chat real-time), Quản lý Flash Sale, Thống kê biểu đồ doanh thu theo chu kỳ, Quản lý thông báo và hỏi đáp hệ thống.
- Could-Have: Đánh giá/bình luận sản phẩm kèm hình ảnh, Quản lý banner động trên Landing Page.
- Won't-Have (Giai đoạn này): Tích hợp ví điện tử quốc tế (PayPal/Stripe), Đa ngôn ngữ và đa tiền tệ.
Thiết kế hệ thống
Kiến trúc hệ thống được xây dựng theo mô hình Client-Server hiện đại, phân tách hoàn toàn giữa giao diện người dùng và lớp dịch vụ backend.
graph TB
subgraph Client_Layer ["Client Layer (Vue.js SPA)"]
UI_Customer["Giao diện Khách hàng"]
UI_Seller["Giao diện Kênh Người bán"]
UI_Admin["Giao diện Quản trị viên"]
end
subgraph Gateway_Security ["Security & Routing"]
Nginx["Nginx Reverse Proxy / SSL"]
Security["Spring Security + JWT Filter"]
end
subgraph Service_Layer ["Backend Service Layer (Spring Boot)"]
AuthService["Auth & User Service"]
ProductService["Product & Catalog Service"]
OrderService["Order & Cart Service"]
PaymentService["VNPay Integration Service"]
RevenueService["Revenue & Analytics Service"]
ChatService["Chat & Notification Service"]
end
subgraph Data_Layer ["Data Persistence & Storage"]
MySQL[("MySQL 8.0 Database")]
S3["AWS S3 / File Storage"]
end
UI_Customer -->|HTTPS / REST API| Nginx
UI_Seller -->|HTTPS / REST API| Nginx
UI_Admin -->|HTTPS / REST API| Nginx
Nginx --> Security
Security --> AuthService
Security --> ProductService
Security --> OrderService
Security --> PaymentService
Security --> RevenueService
Security --> ChatService
AuthService --> MySQL
ProductService --> MySQL
OrderService --> MySQL
PaymentService --> MySQL
RevenueService --> MySQL
ChatService --> MySQL
ProductService --> S3
Technology Stack và phiên bản chi tiết
- Backend Framework: Spring Boot
2.7.x / 3.0 trên nền tảng Java SE 17 (LTS).
- Frontend Framework: Vue.js
3.2.x (Single File Components - SFC, Vue Router, Pinia/Vuex).
- Database Management System: MySQL
8.0.x hỗ trợ engine InnoDB bảo đảm tính toàn vẹn dữ liệu ACID.
- Security Stack: Spring Security
5.7+, JSON Web Token (JWT 0.11.5), thuật toán mã hóa mật khẩu BCrypt (Strength = 12).
- DevOps & Deployment: Docker
20.10+, Docker Compose, GitLab CI/CD Pipeline, Nginx Reverse Proxy, AWS EC2 & RDS.
Thiết kế Cơ sở dữ liệu (Database Schema)
Cơ sở dữ liệu bao gồm các thực thể cốt lõi với khóa ngoại và quan hệ chặt chẽ:
users (id, username, password_hash, email, phone, role, status, created_at)
shops (id, user_id [FK], shop_name, description, rating, status_approved, created_at)
categories (id, parent_id [FK], name, slug, image_url, is_active)
products (id, shop_id [FK], category_id [FK], name, sku, price, stock_quantity, is_flash_sale, discount_rate, status)
orders (id, user_id [FK], shop_id [FK], total_amount, shipping_address, payment_method, order_status, created_at)
order_items (id, order_id [FK], product_id [FK], quantity, unit_price, subtotal)
payments (id, order_id [FK], vnp_txn_ref, amount, bank_code, response_code, status, paid_at)
Thiết kế RESTful API tiêu biểu
| Endpoint |
Method |
Phân quyền |
Chức năng nghiệp vụ |
/api/v1/auth/login |
POST |
Public |
Xác thực thông tin đăng nhập, trả về Access Token JWT |
/api/v1/users/register-seller |
POST |
ROLE_USER |
Gửi yêu cầu đăng ký mở gian hàng (Shop) lên hệ thống |
/api/v1/admin/sellers/{id}/approve |
PUT |
ROLE_ADMIN |
Phê duyệt hoặc từ chối đơn đăng ký thành người bán |
/api/v1/seller/products |
POST |
ROLE_SELLER |
Tạo sản phẩm mới kèm thông số tồn kho và Flash Sale |
/api/v1/orders/checkout |
POST |
ROLE_USER |
Khởi tạo đơn hàng và sinh URL điều hướng cổng thanh toán VNPay |
/api/v1/payment/vnpay-callback |
GET |
Public / Webhook |
Nhận IPN từ VNPay, kiểm tra mã băm và cập nhật trạng thái đơn |
Methodology
Dự án áp dụng mô hình phát triển phần mềm linh hoạt (Agile/Scrum) với chu kỳ 4 Sprint (mỗi Sprint kéo dài 2 tuần):
- Sprint 1: Khảo sát yêu cầu, thiết kế UML (Use Case, Class, Sequence, Activity Diagram) và khởi tạo Database Schema.
- Sprint 2: Xây dựng Core API Backend (Auth, User, Product, Category), thiết lập Base UI Vue.js.
- Sprint 3: Triển khai nghiệp vụ nâng cao: Giỏ hàng, Tích hợp cổng VNPay, Kênh Người bán (Seller Dashboard), Thống kê doanh thu.
- Sprint 4: Xây dựng Admin Panel, quản lý phê duyệt Seller, Chat module, tối ưu hóa hiệu năng, viết Unit Test và đóng gói Docker/CI-CD.
Implementation và kết quả
Development process & Key algorithms
Hệ thống tuân thủ nghiêm ngặt mô hình kiến trúc phân lớp chuẩn của Spring Boot: Controller Layer $\rightarrow$ Service Layer $\rightarrow$ Repository Layer (Spring Data JPA) $\rightarrow$ Database Entity.
Một trong những module kỹ thuật quan trọng nhất của hệ sinh thái E-Commerce YD là module tích hợp thanh toán VNPAY, đòi hỏi xử lý thuật toán tạo chữ ký bảo mật (HMAC-SHA512 checksum) để chống giả mạo dữ liệu giao dịch.
package vn.edu.epu.ecommerce.service.impl;
import org.springframework.stereotype.Service;
import vn.edu.epu.ecommerce.config.VNPayConfig;
import vn.edu.epu.ecommerce.dto.PaymentRequestDTO;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.*;
@Service
public class VNPayServiceImpl {
public String createPaymentUrl(PaymentRequestDTO request, String clientIp) throws Exception {
Map<String, String> vnp_Params = new HashMap<>();
vnp_Params.put("vnp_Version", VNPayConfig.VNP_VERSION);
vnp_Params.put("vnp_Command", "pay");
vnp_Params.put("vnp_TmnCode", VNPayConfig.VNP_TMN_CODE);
vnp_Params.put("vnp_Amount", String.valueOf(request.getAmount() * 100)); // VNPay quy định nhân 100
vnp_Params.put("vnp_CurrCode", "VND");
vnp_Params.put("vnp_TxnRef", request.getOrderCode());
vnp_Params.put("vnp_OrderInfo", "Thanh toan don hang: " + request.getOrderCode());
vnp_Params.put("vnp_OrderType", "other");
vnp_Params.put("vnp_Locale", "vn");
vnp_Params.put("vnp_ReturnUrl", VNPayConfig.VNP_RETURN_URL);
vnp_Params.put("vnp_IpAddr", clientIp);
Calendar cld = Calendar.getInstance(TimeZone.getTimeZone("Etc/GMT+7"));
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss");
String vnp_CreateDate = formatter.format(cld.getTime());
vnp_Params.put("vnp_CreateDate", vnp_CreateDate);
// Sắp xếp các tham số theo thứ tự alphabet
List<String> fieldNames = new ArrayList<>(vnp_Params.keySet());
Collections.sort(fieldNames);
StringBuilder hashData = new StringBuilder();
StringBuilder query = new StringBuilder();
for (Iterator<String> itr = fieldNames.iterator(); itr.hasNext();) {
String fieldName = itr.next();
String fieldValue = vnp_Params.get(fieldName);
if ((fieldValue != null) && (fieldValue.length() > 0)) {
hashData.append(fieldName).append('=').append(URLEncoder.encode(fieldValue, StandardCharsets.US_ASCII.toString()));
query.append(URLEncoder.encode(fieldName, StandardCharsets.US_ASCII.toString())).append('=').append(URLEncoder.encode(fieldValue, StandardCharsets.US_ASCII.toString()));
if (itr.hasNext()) {
query.append('&');
hashData.append('&');
}
}
}
String queryUrl = query.toString();
String vnp_SecureHash = VNPayConfig.hmacSHA512(VNPayConfig.VNP_HASH_SECRET, hashData.toString());
queryUrl += "&vnp_SecureHash=" + vnp_SecureHash;
return VNPayConfig.VNP_PAYURL + "?" + queryUrl;
}
}
Tại tầng Frontend (Vue.js), trạng thái giỏ hàng và dữ liệu phân quyền người dùng được đóng gói trong Vue Store với cơ chế Reactive State:
// store/modules/cart.js - Vue 3 Pinia Store Pattern
import { defineStore } from 'pinia';
import apiClient from '@/api/axiosInstance';
export const useCartStore = defineStore('cart', {
state: () => ({
cartItems: [],
loading: false
}),
getters: {
totalItems: (state) => state.cartItems.reduce((acc, item) => acc + item.quantity, 0),
totalPrice: (state) => state.cartItems.reduce((acc, item) => acc + (item.quantity * item.product.price), 0)
},
actions: {
async addItemToCart(productId, quantity = 1) {
this.loading = true;
try {
const response = await apiClient.post('/api/v1/cart/items', { productId, quantity });
this.cartItems = response.data.items;
} finally {
this.loading = false;
}
}
}
});
Testing và validation
Hệ thống trải qua quy trình kiểm thử toàn diện từ Unit Test, Integration Test đến Load Testing:
- Unit Testing: Viết hơn 120 test cases sử dụng JUnit 5 và Mockito trên Backend, đạt tỷ lệ Line Coverage là 84.5%.
- Performance Benchmarking: Kiểm thử tải bằng Apache JMeter giả lập 500 người dùng đồng thời (Concurrent Users):
- Throughput: Đạt 420 Requests/Second (RPS) trên cấu hình máy chủ thử nghiệm tiêu chuẩn (4 vCPU, 8GB RAM).
- Average Latency: 142ms đối với các API đọc danh mục và chi tiết sản phẩm.
- Error Rate: 0.00% trong bài kiểm tra kiểm tra luồng đặt hàng và tính toán số lượng tồn kho (Concurreny Inventory Check).
| Loại bài test |
Công cụ thực hiện |
Số lượng kịch bản |
Tỷ lệ thành công |
| API Functional Test |
Postman / Newman |
85 endpoints |
100% Passed |
| Backend Unit Test |
JUnit 5 + Mockito |
124 test methods |
100% Passed (84.5% Coverage) |
| Stress & Load Test |
Apache JMeter |
5 kịch bản tải cao |
0% Failed requests ở 500 CCU |
| UAT (User Acceptance) |
35 người dùng thử nghiệm |
15 luồng chức năng |
94.2% hài lòng |
Kết quả đạt được
- Hoàn thiện 100% các chức năng cốt lõi theo đề cương phân tích thiết kế: 3 giao diện tác nhân riêng biệt, quy trình xét duyệt Seller minh bạch, hệ thống giỏ hàng và thanh toán VNPay hoàn chỉnh.
- Cải thiện tốc độ tải trang ban đầu (First Contentful Paint) xuống còn 0.9 giây nhờ kỹ thuật Lazy Loading component trong Vue Router.
- Dữ liệu tài chính và số lượng hàng hóa được bảo vệ toàn vẹn thông qua cơ chế Transaction Management (
@Transactional isolation levels) của Spring Data JPA.
Đổi mới và đóng góp
Các điểm cải tiến kỹ thuật nổi bật
- Cơ chế Phê duyệt Người bán (Seller Lifecycle Management): Không cho phép tự do mở bán tràn lan. Người dùng phải gửi hồ sơ xác thực và chờ Quản trị viên duyệt qua hệ sinh thái dashboard riêng biệt. Điều này giảm thiểu tối đa tình trạng gian lận và hàng giả so với các nền tảng mở không kiểm soát.
- Kiến trúc Decoupled tối ưu hóa băng thông: Thay vì sử dụng cơ chế Server-Side Rendering truyền thống (JSP/Thymeleaf) gây tốn tài nguyên máy chủ, hệ thống ứng dụng kiến trúc REST API chuẩn Stateless kết hợp JWT. Điều này giúp giảm 62% lưu lượng mạng truyền tải giữa máy khách và máy chủ.
- Cơ chế quản lý Flash Sale động: Cho phép người bán thiết lập khung giờ và tỷ lệ giảm giá trực tiếp. Hệ thống tự động chuyển đổi trạng thái hiển thị của sản phẩm khi số lượng tồn kho đạt mức 0 mà không cần can thiệp thủ công.
So sánh hiệu quả tải trang và tiêu thụ tài nguyên:
├── Monolith JSP/Thymeleaf : [████████████████████] 3.2s Load Time (100% CPU overhead)
└── E-Commerce YD (Vue+Spring): [█████ ] 0.9s Load Time (-71.8% latency)
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng
Nền tảng E-Commerce YD có khả năng ứng dụng thực tế ngay lập tức cho các mô hình:
- Sàn thương mại điện tử chuyên ngành: Nông sản sạch, thời trang thiết kế, thiết bị điện tử gia dụng.
- Hệ thống phân phối B2B/B2C nội bộ: Ứng dụng cho các chuỗi phân phối cần quản lý nhiều đại lý (mỗi đại lý là một Seller) với sự giám sát chặt chẽ từ Tổng công ty (Admin).
Chiến lược triển khai (Deployment Pipeline)
Quy trình tự động hóa triển khai (CI/CD) được thiết lập thông qua tệp cấu hình GitLab Pipeline và Dockerfile:
# Multi-stage build cho Spring Boot Backend
FROM maven:3.8.5-openjdk-17 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests
FROM eclipse-temurin:17-jre-alpine
WORKDIR /app
COPY --from=build /app/target/ecommerce-yd-0.0.1-SNAPSHOT.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=prod", "app.jar"]
sequenceDiagram
autonumber
actor Dev as Developer
participant Git as GitLab Repository
participant Runner as GitLab CI Runner
participant Docker as Docker Registry
participant AWS as AWS EC2 Server
Dev->>Git: Git Push (main branch)
Git->>Runner: Trigger Pipeline
Runner->>Runner: Run Unit Tests (Maven)
Runner->>Docker: Build & Push Docker Images
Runner->>AWS: SSH & Deploy (docker-compose pull & up)
AWS-->>Dev: Deployment Success Notification
Phân tích hiệu quả kinh tế (Cost-Benefit Analysis)
- Chi phí bản quyền phần mềm: 0 VNĐ (Sử dụng 100% công nghệ mã nguồn mở: Java, Spring Boot, MySQL, Vue.js, Linux).
- Chi phí hạ tầng: Dự toán ~45 USD/tháng cho cụm máy chủ AWS EC2 (t3.medium) và RDS MySQL (db.t3.small), đáp ứng tốt lưu lượng 30.000 lượt truy cập/tháng.
- Thời gian thu hồi vốn (ROI): Dự kiến sau 6-8 tháng vận hành dựa trên mức thu phí hoa hồng giao dịch 2.5% trên mỗi đơn hàng thành công của các gian hàng.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Cơ sở dữ liệu đang vận hành trên một cụm MySQL đơn lẻ, chưa thiết lập kiến trúc Read/Write Replicas (Master-Slave) để phân tải triệt để cho các truy vấn báo cáo nặng.
- Chức năng tìm kiếm sản phẩm đang sử dụng truy vấn
LIKE %...% cơ bản của SQL, chưa tối ưu hiệu năng đối với kho dữ liệu hàng triệu bản ghi.
- Module Chat đang lưu trữ trực tiếp vào RDBMS thay vì sử dụng kiến trúc Message Broker chuyên dụng.
Hướng nâng cấp tương lai
- Tích hợp Elasticsearch: Thay thế công cụ tìm kiếm SQL bằng cụm Elasticsearch cluster để hỗ trợ Full-Text Search, gợi ý từ khóa (Autocomplete) và lọc đa tiêu chí với độ trễ dưới 20ms.
- Áp dụng Redis Caching: Lưu trữ tạm thời giỏ hàng, thông tin session người dùng và danh mục sản phẩm hot trên bộ nhớ đệm In-Memory Redis để giảm tải 70% truy vấn trực tiếp vào MySQL.
- Chuyển dịch sang kiến trúc Microservices: Tách rời Product Service, Order Service, Notification Service thành các dịch vụ độc lập kết nối qua Apache Kafka hoặc RabbitMQ khi lưu lượng người dùng vượt ngưỡng 100.000 CCU.
Đối tượng hưởng lợi
mindmap
root((Hệ Sinh Thái E-Commerce YD))
Sinh viên & Giảng viên
Tham khảo đồ án chuẩn UML
Học cấu trúc Spring Boot + Vue 3
Tài liệu thực hành CI/CD & Docker
Lập trình viên
Mẫu tích hợp cổng VNPay chuẩn
Thiết kế RESTful API an toàn với JWT
Xử lý State Management với Pinia
Doanh nghiệp & Hộ kinh doanh
Nền tảng Multi-vendor không mất phí bản quyền
Bảng điều khiển trực quan theo dõi doanh thu
Bảo mật dữ liệu giao dịch tài chính
- Sinh viên ngành Công nghệ Thông tin: Tiếp cận đồ án mẫu chuẩn mực từ phân tích yêu cầu (UML Use Case, Sequence, Activity), thiết kế cơ sở dữ liệu quan hệ đến triển khai thực tế.
- Lập trình viên Fullstack: Nắm bắt kiến trúc tích hợp giữa Spring Boot và Vue.js, quy trình bảo mật với JWT, mã nguồn chuẩn cho thuật toán ký số VNPay HMAC-SHA512.
- Doanh nghiệp bán lẻ: Sở hữu giải pháp nền tảng độc lập, giảm 100% chi phí bản quyền phần mềm định kỳ, toàn quyền làm chủ dữ liệu khách hàng.
Câu hỏi thường gặp
1. Yêu cầu phần cứng và môi trường tối thiểu để triển khai hệ thống là gì?
Để triển khai hệ thống trong môi trường sản xuất (Production), cấu hình tối thiểu khuyến nghị gồm: Máy chủ chạy hệ điều hành Ubuntu Server 20.04/22.04 LTS, CPU 2 Core, RAM 4GB, Ổ cứng SSD 40GB. Cần cài đặt sẵn Docker Engine 20.10+ và Docker Compose v2+.
2. Hệ thống xử lý thế nào khi có xung đột tồn kho trong sự kiện Flash Sale?
Tại tầng Backend, Service xử lý đặt hàng áp dụng cơ chế khóa bi quan (Pessimistic Locking) hoặc khóa lạc quan (Optimistic Locking qua trường @Version trong JPA Entity) kết hợp mức cô lập giao dịch @Transactional(isolation = Isolation.READ_COMMITTED). Điều này ngăn chặn triệt để hiện tượng Race Condition khi nhiều khách hàng cùng thanh toán sản phẩm cuối cùng.
3. Làm thế nào để đảm bảo tính an toàn cho giao dịch khi nhận Callback từ VNPay?
Hệ thống không chỉ dựa vào phản hồi chuyển hướng trên trình duyệt của người dùng (Return URL), mà còn triển khai Endpoint nhận tín hiệu ngầm (IPN - Instant Payment Notification) từ server VNPay. Khi nhận dữ liệu, hệ thống tự động tái tạo chuỗi băm từ các tham số nhận được và so khớp với vnp_SecureHash. Chỉ khi mã băm khớp và số tiền giao dịch chính xác với đơn hàng thì trạng thái đơn mới được chuyển sang PAID.
4. Hệ thống phân quyền hoạt động như thế nào giữa các vai trò khác nhau?
Hệ thống sử dụng cơ chế Phân quyền dựa trên vai trò (RBAC) thông qua Spring Security. Mỗi request đến backend bắt buộc mang theo token JWT tại header Authorization: Bearer <token>. Lớp JwtAuthenticationFilter giải mã token, trích xuất danh sách Claims/Roles (ROLE_CUSTOMER, ROLE_SELLER, ROLE_ADMIN) và nạp vào SecurityContextHolder. Các API được bảo vệ nghiêm ngặt bằng annotation @PreAuthorize("hasRole('ADMIN')").
5. Chi phí duy trì và khả năng mở rộng hệ thống trong dài hạn ra sao?
Nhờ kiến trúc module hóa đóng gói trong Docker, việc mở rộng có thể thực hiện theo chiều dọc (Vertical Scaling bằng cách tăng tài nguyên phần cứng server) hoặc theo chiều ngang (Horizontal Scaling bằng cách thêm các instance backend chạy song song phía sau bộ cân bằng tải Nginx Load Balancer). Chi phí bảo trì hàng tháng duy trì ở mức tối thiểu từ 30 - 50 USD cho máy chủ đám mây.
Kết luận
Đồ án tốt nghiệp "Xây dựng website E-Commerce YD" của sinh viên Phạm Huy Phong (Trường Đại học Điện Lực) là một công trình nghiên cứu ứng dụng toàn diện, kết hợp thành công các công nghệ phát triển phần mềm hiện đại: Java Spring Boot, Vue.js, MySQL, Docker và cổng thanh toán VNPAY.
Dự án không chỉ giải quyết trọn vẹn bài toán thương mại điện tử đa người bán với quy trình xét duyệt và quản trị chuyên nghiệp, mà còn cung cấp tài liệu kỹ thuật, sơ đồ UML và mã nguồn mẫu có giá trị ứng dụng cao cho cộng đồng học thuật và doanh nghiệp. Nền tảng sở hữu nền móng kiến trúc vững chắc, sẵn sàng tích hợp các công nghệ dữ liệu lớn và trí tuệ nhân tạo trong các giai đoạn phát triển tiếp theo.