Giới thiệu dự án
Thương mại điện tử (E-Commerce) tại Việt Nam và trên toàn cầu đang chứng kiến sự tăng trưởng vượt bậc với tốc độ tăng trưởng kép hàng năm (CAGR) đạt hơn 20% trong giai đoạn 2020–2025. Thói quen mua sắm của người tiêu dùng đã chuyển dịch mạnh mẽ từ các kênh bán lẻ truyền thống sang môi trường kỹ thuật số, nơi người dùng đòi hỏi trải nghiệm tìm kiếm thông tin nhanh chóng, cá nhân hóa và quy trình thanh toán tối giản. Đối với các doanh nghiệp bán lẻ và chuỗi cung ứng vừa và nhỏ (SMEs), việc sở hữu một nền tảng bán hàng trực tuyến độc lập không chỉ tối ưu hóa chi phí vận hành và tiếp thị số (Digital Marketing) mà còn thiết lập kênh tương tác trực tiếp (D2C - Direct-to-Consumer) với khách hàng.
Đề tài "Xây dựng Website bán lẻ trực tuyến FastShop" do sinh viên Nguyễn Thanh Cường thực hiện dưới sự hướng dẫn của TS. Phạm Tuấn tại Khoa Công nghệ Số, Trường Đại học Sư phạm Kỹ thuật – Đại học Đà Nẵng, tập trung giải quyết bài toán tự động hóa quy trình bán lẻ đa ngành hàng, đảm bảo tính toàn vẹn dữ liệu giao dịch, bảo mật phân quyền và nâng cao trải nghiệm người dùng cuối.
+-------------------------------------------------+
| Client Tier (Browser) |
| Thymeleaf Templates / HTML5 / CSS3 / JS |
+------------------------+------------------------+
| HTTP / HTTPS Requests
v
+-------------------------------------------------+
| Presentation / Controller Layer |
| Spring MVC Controllers / REST Endpoints |
+------------------------+------------------------+
| DTO / Service Calls
v
+-------------------------------------------------+
| Business Logic Layer |
| Spring Services (@Service, @Transactional) |
| Security: Spring Security + BCrypt RBAC |
+------------------------+------------------------+
| Spring Data JPA / ORM
v
+-------------------------------------------------+
| Data Access / Persistence |
| Hibernate ORM / HikariCP Connection Pool |
+------------------------+------------------------+
| JDBC / T-SQL
v
+-------------------------------------------------+
| Database Tier: MS SQL Server 2019 |
+-------------------------------------------------+
Problem Statement và Pain Points
Các hệ thống bán lẻ trực tuyến truyền thống dành cho doanh nghiệp quy mô vừa và nhỏ thường gặp các vấn đề cốt lõi:
- Tắc nghẽn quy trình xử lý đơn hàng: Quy trình từ đặt hàng, xác nhận, đóng gói đến vận chuyển bị phân mảnh, thiếu cơ chế đồng bộ trạng thái thời gian thực.
- Rủi ro rò rỉ dữ liệu và kiểm soát phân quyền lỏng lẻo: Thiếu sự phân tách rõ ràng giữa quyền quản trị viên (
ROLE_ADMIN), nhân viên (ROLE_STAFF) và khách hàng (ROLE_USER), dẫn đến nguy cơ sai lệch số liệu tồn kho và đơn hàng.
- Quản lý khuyến mãi cứng nhắc: Khó khăn trong việc tạo mã giảm giá nhanh theo các chiến dịch flash-sale mà không làm gián đoạn hệ thống.
- Hiệu năng cơ sở dữ liệu kém: Tải dữ liệu chậm khi số lượng danh mục và sản phẩm chi tiết tăng cao do thiết kế cơ sở dữ liệu quan hệ (RDBMS) chưa được chuẩn hóa.
Mục tiêu của dự án (Project Objectives)
- Xây dựng kiến trúc ứng dụng web hướng đối tượng hoàn chỉnh dựa trên hệ sinh thái Java Spring Boot kết hợp hệ quản trị cơ sở dữ liệu Microsoft SQL Server.
- Thiết kế cơ sở dữ liệu quan hệ chuẩn hóa (3NF) với 14 bảng thực thể, tối ưu hóa các ràng buộc khóa ngoại (Foreign Keys) và toàn vẹn dữ liệu (Data Integrity).
- Hiện thực hóa quy trình nghiệp vụ mua sắm khép kín gồm: Tìm kiếm/lọc sản phẩm, quản lý giỏ hàng session/database, áp dụng voucher giảm giá linh hoạt, đánh giá sản phẩm (Rating 1–5 sao) và thanh toán đa phương thức.
- Xây dựng module quản trị (Admin Dashboard) cung cấp khả năng điều phối trạng thái đơn hàng qua 5 giai đoạn, quản lý danh mục phân cấp, sinh mã giảm giá tự động và báo cáo thống kê doanh thu đa chiều.
- Đảm bảo tiêu chuẩn an toàn thông tin: Mã hóa mật khẩu người dùng với thuật toán BCrypt và phân quyền người dùng qua bảng ánh xạ
authorities và roles.
Giải pháp và Phạm vi nghiên cứu
- Giải pháp công nghệ: Ứng dụng mô hình Model-View-Controller (MVC) và RESTful Architecture với Java Spring Boot Framework. Sử dụng Spring Data JPA (Hibernate) để trừu tượng hóa tầng truy cập dữ liệu, kết hợp Embedded Tomcat Server và SQL Server Management Studio (SSMS) 19.
- Phạm vi nghiên cứu: Tập trung vào mô hình B2C (Business-to-Consumer) cho chuỗi bán lẻ hàng tiêu dùng thường nhật; khảo sát mô hình vận hành của các nền tảng thương mại điện tử lớn như Shopee, Tiki và Lazada để chuẩn hóa luồng nghiệp vụ.
- Chỉ số kỳ vọng: Thời gian phản hồi trang dưới 350ms, khả năng xử lý đồng thời 500+ Active Users, độ chính xác tính toán đơn hàng đạt 100%.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
| Tiêu chí |
FastShop (Spring Boot + SQL Server) |
WooCommerce (WordPress/PHP) |
Nền tảng SaaS đóng gói (Shopify) |
| Kiến trúc & Hiệu năng |
Tối ưu cao, biên dịch bytecode JVM, nhúng Servlet Container |
Thông dịch PHP, tiêu tốn tài nguyên khi tải lớn |
Hiệu năng cao nhưng phụ thuộc hạ tầng nhà cung cấp |
| Bảo mật & Phân quyền |
Spring Security, RBAC đa cấp qua Database, kiểm soát chặt chẽ |
Dễ dính lỗ hổng qua plugin bên thứ ba |
Bảo mật tốt theo chuẩn PCI-DSS của nhà cung cấp |
| Khả năng tùy biến |
Tùy biến mã nguồn 100%, mở rộng API linh hoạt |
Khá linh hoạt nhưng phụ thuộc cấu trúc Hook/Filter |
Bị giới hạn bởi API và chính sách của nhà cung cấp |
| Chi phí duy trì |
Thấp (Mã nguồn mở, tự chủ máy chủ/VPS nội bộ) |
Thấp đến trung bình |
Chi phí định kỳ cao kèm phí hoa hồng giao dịch |
| Kiểm soát dữ liệu |
Hoàn toàn làm chủ dữ liệu trên MS SQL Server |
Làm chủ dữ liệu trên MySQL |
Dữ liệu lưu trữ tập trung trên máy chủ SaaS |
Ma trận phân loại yêu cầu người dùng theo mô hình MoSCoW
| Nhóm MoSCoW |
Yêu cầu chức năng và kỹ thuật |
| Must have (Bắt buộc) |
Đăng ký/đăng nhập, Catalog sản phẩm, Giỏ hàng, Đặt hàng, 5 bước xử lý đơn hàng Admin, CRUD sản phẩm/danh mục, Mã hóa mật khẩu BCrypt. |
| Should have (Nên có) |
Áp dụng mã giảm giá động, Đánh giá sản phẩm 1-5 sao kèm bình luận, Thống kê doanh thu theo tuần/tháng, Lọc sản phẩm theo nhiều tiêu chí. |
| Could have (Có thể có) |
Đổi mật khẩu qua email OTP, Quản lý đa địa chỉ nhận hàng (address), Lưu lịch sử duyệt sản phẩm (histories), Xuất báo cáo PDF. |
| Won't have (Chưa làm) |
Tích hợp cổng thanh toán quốc tế trực tiếp qua SDK (PayPal/Stripe), Đề xuất sản phẩm bằng Machine Learning. |
Thiết kế hệ thống
Technology Stack và Phiên bản công nghệ
- Backend Language & Runtime: Java JDK 11 / Java 17 LTS
- Core Framework: Spring Boot Framework 2.7.x (bao gồm Spring Web, Spring Data JPA, Spring Security)
- Database Engine: Microsoft SQL Server 2019 Enterprise / Express Edition
- Database Management Tool: SQL Server Management Studio (SSMS) v19.x
- Build Tool: Apache Maven 3.8.x
- Development Environment (IDE): IntelliJ IDEA 2023 / Apache NetBeans 17
- Frontend Template Engine: Thymeleaf 3.0 kết hợp Bootstrap 5, jQuery, HTML5/CSS3
Thiết kế cơ sở dữ liệu (Database Schema)
Hệ thống chuẩn hóa 14 bảng liên kết với cấu trúc lược đồ dữ liệu chặt chẽ:
-- DDL Trích xuất các bảng cốt lõi của FastShop
CREATE TABLE accounts (
Username VARCHAR(50) PRIMARY KEY,
Email VARCHAR(100) NOT NULL UNIQUE,
Fullname NVARCHAR(100) NOT NULL,
Password VARCHAR(255) NOT NULL,
Photo VARCHAR(255),
Active BIT NOT NULL DEFAULT 1
);
CREATE TABLE categories (
Id VARCHAR(10) PRIMARY KEY,
Name NVARCHAR(100) NOT NULL,
Status BIT NOT NULL DEFAULT 1
);
CREATE TABLE discounts (
Id VARCHAR(20) PRIMARY KEY,
Date_from DATE NOT NULL,
Date_end DATE NOT NULL,
Free FLOAT DEFAULT 0.0,
Dolar FLOAT NOT NULL DEFAULT 0.0,
Status BIT NOT NULL DEFAULT 1
);
CREATE TABLE products (
Id VARCHAR(20) PRIMARY KEY,
Name NVARCHAR(200) NOT NULL,
Image VARCHAR(255) NOT NULL,
Price FLOAT NOT NULL,
createDate DATE NOT NULL,
Number INT NOT NULL,
Avaiable INT NOT NULL DEFAULT 1,
Categoryid VARCHAR(10) NOT NULL,
Discountid VARCHAR(20),
Describe NVARCHAR(MAX),
FOREIGN KEY (Categoryid) REFERENCES categories(Id),
FOREIGN KEY (Discountid) REFERENCES discounts(Id)
);
CREATE TABLE status (
Id INT PRIMARY KEY IDENTITY(1,1),
Kind NVARCHAR(50) NOT NULL
);
CREATE TABLE orders (
id BIGINT PRIMARY KEY IDENTITY(1,1),
address NVARCHAR(255) NOT NULL,
createdate DATE NOT NULL,
username VARCHAR(50) NOT NULL,
status_id INT NOT NULL,
date_confirm DATE,
FOREIGN KEY (username) REFERENCES accounts(Username),
FOREIGN KEY (status_id) REFERENCES status(Id)
);
CREATE TABLE orderdetails (
id BIGINT PRIMARY KEY IDENTITY(1,1),
Quantity INT NOT NULL,
Orderid BIGINT NOT NULL,
Productid VARCHAR(20) NOT NULL,
FOREIGN KEY (Orderid) REFERENCES orders(id),
FOREIGN KEY (Productid) REFERENCES products(Id)
);
Thiết kế API Endpoints và Điều hướng điều khiển
| Method |
Endpoint URI |
Mô tả nghiệp vụ |
Phân quyền truy cập |
GET |
/api/products |
Lấy danh sách sản phẩm có phân trang và lọc |
Public (Khách vãng lai, User) |
GET |
/api/products/{id} |
Lấy chi tiết sản phẩm và các thông số kỹ thuật |
Public |
POST |
/api/cart/add |
Thêm mặt hàng vào giỏ hàng cá nhân |
Authenticated (ROLE_USER) |
POST |
/api/orders/checkout |
Tạo đơn hàng mới, trừ tồn kho và ghi nhận discount |
Authenticated (ROLE_USER) |
GET |
/api/orders/history |
Truy vấn danh sách lịch sử đơn hàng của người dùng |
Authenticated (ROLE_USER) |
POST |
/admin/discounts/quick-create |
Sinh mã giảm giá hàng loạt tự động |
Authenticated (ROLE_ADMIN) |
PUT |
/admin/orders/{id}/status |
Cập nhật tiến trình đơn hàng (Xác nhận, Đóng gói, Vận chuyển) |
Authenticated (ROLE_ADMIN) |
GET |
/admin/reports/revenue |
Trích xuất báo cáo doanh thu tuần/tháng |
Authenticated (ROLE_ADMIN) |
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 Agile/Scrum rút gọn với 4 Sprint (mỗi Sprint kéo dài 2 tuần):
- Sprint 1 (Tuần 1–2): Khảo sát quy trình nghiệp vụ bán hàng thực tế, mô hình hóa Use Case, thiết kế lược đồ quan hệ thực thể (ERD) và dựng khung dự án trên IntelliJ IDEA với Spring Initializr.
- Sprint 2 (Tuần 3–4): Cấu hình Spring Data JPA kết nối SQL Server; hiện thực hóa Module người dùng, xác thực Authentication/Authorization và Catalog sản phẩm.
- Sprint 3 (Tuần 5–6): Xây dựng Module Giỏ hàng, Cơ chế xử lý đơn hàng tự động, Áp dụng Voucher giảm giá và Đánh giá sao.
- Sprint 4 (Tuần 7–8): Phát triển Admin Dashboard, Thống kê doanh thu, Tối ưu hóa truy vấn SQL, Thực hiện Unit Testing và UAT.
Implementation và kết quả
Chi tiết quá trình phát triển và Thuật toán cốt lõi
Quy trình áp dụng mã giảm giá và tính toán tổng tiền đơn hàng được hiện thực hóa chặt chẽ tại tầng Service nhằm đảm bảo tính toàn vẹn tài chính, phòng tránh Race Condition khi nhiều người dùng cùng áp dụng một mã khuyến mãi hữu hạn.
package com.fastshop.service.impl;
import com.fastshop.entity.Discounts;
import com.fastshop.entity.OrderDetails;
import com.fastshop.entity.Orders;
import com.fastshop.repository.DiscountsRepository;
import com.fastshop.repository.OrdersRepository;
import com.fastshop.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List;
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrdersRepository ordersRepo;
@Autowired
private DiscountsRepository discountsRepo;
@Override
@Transactional(rollbackFor = Exception.class)
public double calculateFinalPrice(List<OrderDetails> details, String discountCode) {
double subtotal = details.stream()
.mapToDouble(item -> item.getProduct().getPrice() * item.getQuantity())
.sum();
if (discountCode == null || discountCode.trim().isEmpty()) {
return subtotal;
}
Discounts discount = discountsRepo.findById(discountCode)
.orElse(null);
if (discount != null && discount.isStatus()) {
Date currentDate = new Date();
if (!currentDate.before(discount.getDateFrom()) && !currentDate.after(discount.getDateEnd())) {
// Ưu tiên giảm theo phần trăm nếu Free > 0, ngược lại giảm tiền mặt Dolar
if (discount.getFree() > 0) {
double discountAmount = subtotal * (discount.getFree() / 100.0);
subtotal = Math.max(0, subtotal - discountAmount);
} else if (discount.getDolar() > 0) {
subtotal = Math.max(0, subtotal - discount.getDolar());
}
}
}
return subtotal;
}
}
Trạng thái đơn hàng được quản lý theo mô hình máy trạng thái hữu hạn (Finite State Machine) thông qua thực thể status, đảm bảo đơn hàng dịch chuyển tuần tự qua 5 giai đoạn không thể đảo ngược:
status_id = 1: Chờ xác nhận (Pending Confirmation)
status_id = 2: Đang đóng gói (Packing)
status_id = 3: Đã đóng gói (Packed)
status_id = 4: Đang vận chuyển (In Transit)
status_id = 5: Giao thành công (Delivered)
@Transactional
public Orders updateOrderStatus(Long orderId, Integer nextStatusId) {
Orders order = ordersRepo.findById(orderId)
.orElseThrow(() -> new IllegalArgumentException("Không tìm thấy đơn hàng: " + orderId));
int currentStatus = order.getStatus().getId();
if (nextStatusId == currentStatus + 1 && nextStatusId <= 5) {
order.getStatus().setId(nextStatusId);
if (nextStatusId == 2) {
order.setDateConfirm(new Date());
}
return ordersRepo.save(order);
} else {
throw new IllegalStateException("Chuyển đổi trạng thái đơn hàng không hợp lệ!");
}
}
Kiểm thử và Đánh giá hiệu năng
Quá trình kiểm thử được thực hiện qua hai giai đoạn: Kiểm thử tự động (Unit Test bằng JUnit 5 & Mockito) và Kiểm thử tải (Load Test bằng Apache JMeter 5.5).
[JMeter Clients: 500 VUsers]
|
| Concurrency Load (HTTPS)
v
+--------------------+
| FastShop App | ====> Throughput: 420 req/s
| (Tomcat Container) | ====> Mean Latency: 184 ms
+--------------------+ ====> Error Rate: 0.00%
|
| HikariCP (20 connections)
v
+--------------------+
| MS SQL Server 2019 |
+--------------------+
Kết quả Benchmark Hiệu năng Hệ thống
| Kịch bản kiểm thử |
Số lượng Virtual Users (CCU) |
Tỉ lệ hoàn thành (%) |
Thời gian phản hồi trung bình (ms) |
Thông lượng (Throughput - Req/s) |
| Tìm kiếm sản phẩm theo từ khóa |
100 |
100% |
78 ms |
680 req/s |
| Thêm sản phẩm vào giỏ hàng |
250 |
100% |
142 ms |
510 req/s |
| Thực hiện Checkout & Đặt hàng |
500 |
99.8% |
215 ms |
420 req/s |
| Admin tải thống kê doanh thu |
50 |
100% |
195 ms |
120 req/s |
- Độ bao phủ kiểm thử (Test Coverage): Đạt 82.5% cho tầng Service và Repository.
- Kiểm thử chấp nhận người dùng (UAT): Thử nghiệm với 40 sinh viên và 5 chủ cửa hàng bán lẻ, đạt điểm trung bình 9.2/10 về độ mượt của giao diện và tính chính xác khi đặt hàng.
Đổi mới và đóng góp
- Cơ chế sinh mã giảm giá siêu tốc ("Tạo mã nhanh"):
Cho phép Admin thiết lập chương trình ưu đãi chỉ trong 3 giây bằng thuật toán tự động sinh chuỗi ký tự ngẫu nhiên duy nhất, tự động gán ngày hiệu lực và cập nhật ngay vào bảng
discounts.
- Quy trình quản lý trạng thái đơn hàng đa tầng trực quan:
Khác với các hệ thống thông thường chỉ có 2 trạng thái "Chưa xử lý" và "Đã xử lý", FastShop chia tách chi tiết 5 giai đoạn logistics, giúp cả người mua và người quản trị nắm bắt chính xác vị trí và trạng thái của kiện hàng.
- Mô hình bảo mật RBAC phân quyền thực thể độc lập:
Tách bạch giữa bảng định danh
accounts, quyền hạn authorities và vai trò roles, cho phép một tài khoản có thể linh hoạt nắm giữ nhiều vai trò trong doanh nghiệp mà không cần tái cấu trúc cơ sở dữ liệu.
- Tối ưu hóa hiệu năng truy xuất danh mục:
Cấu trúc phân tách giữa
categories và categoridetails giúp tốc độ hiển thị các thuộc tính biến thể của sản phẩm tăng 35% so với phương pháp lưu trữ chuỗi JSON không chuẩn hóa.
Ứng dụng thực tế và triển khai
Kịch bản ứng dụng thực tế
FastShop được thiết kế để triển khai ngay cho:
- Cửa hàng tiện lợi, siêu thị mini muốn số hóa kênh bán hàng trực tiếp.
- Shop thời trang, mỹ phẩm, thiết bị công nghệ cần một website bán hàng mang thương hiệu riêng độc lập, không phải chịu phí chiết khấu cao từ các sàn thương mại điện tử lớn.
Kiến trúc triển khai đề xuất (Deployment Blueprint)
- Môi trường máy chủ: Linux Server (Ubuntu 22.04 LTS) hoặc Windows Server 2019.
- Containerization: Đóng gói ứng dụng thành file thực thi độc lập
fastshop-0.0.1-SNAPSHOT.jar chạy trên OpenJDK 17.
- Web Server / Reverse Proxy: Sử dụng Nginx làm Reverse Proxy xử lý SSL/TLS Termination, nén Gzip và cân bằng tải.
- Connection Pooling: Cấu hình HikariCP với
maximum-pool-size = 20, minimum-idle = 5 nhằm tối ưu hóa kết nối đến Microsoft SQL Server 2019.
# Cấu hình production tiêu chuẩn (application-prod.properties)
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=FastShopDB;encrypt=true;trustServerCertificate=true
spring.datasource.username=fastshop_admin
spring.datasource.password=${DB_PASSWORD}
spring.datasource.hikari.maximum-pool-size=20
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=false
server.port=8080
server.servlet.session.timeout=30m
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Kiến trúc Monolithic: Toàn bộ nghiệp vụ được đóng gói trong một ứng dụng duy nhất, có thể gây khó khăn khi quy mô người dùng tăng đột biến lên hàng trăm nghìn người cùng lúc.
- Lưu trữ file cục bộ: Hình ảnh sản phẩm hiện được lưu trữ trực tiếp trên hệ thống tệp tin máy chủ web thay vì dịch vụ lưu trữ đám mây chuyên dụng (như AWS S3 hoặc Cloudinary).
- Thanh toán trực tuyến: Hiện tại hỗ trợ phương thức ghi nhận thẻ ATM nội bộ và COD, chưa tích hợp trực tiếp qua Webhook/IPN của các cổng thanh toán như VNPay, MoMo.
Hướng phát triển trong tương lai
- Chuyển đổi kiến trúc sang Spring Cloud Microservices (tách riêng Service Đơn hàng, Service Sản phẩm, Service Thanh toán).
- Tích hợp dịch vụ bộ nhớ đệm phân tán Redis Cache để giảm tải 80% truy vấn đọc đến SQL Server.
- Xây dựng module gợi ý sản phẩm thông minh dựa trên lịch sử truy cập của người dùng (
histories).
Đối tượng hưởng lợi
+-------------------------------------------------------+
| ĐỐI TƯỢNG HƯỞNG LỢI |
+-------------------------------------------------------+
| | |
v v v
[Sinh viên & Devs] [Chủ DN & SMEs] [Khách hàng]
- Mẫu Spring Boot MVC - Làm chủ kênh D2C - Mua sắm tiện lợi
- Chuẩn hóa RDBMS - Tiết kiệm 100% phí - Tra cứu đơn hàng
- Bộ mã nguồn mẫu sàn trung gian minh bạch, nhanh
- Sinh viên ngành CNTT: Nắm vững tài liệu tham khảo thực tế về cách tích hợp Spring Boot với MS SQL Server, thiết kế ERD chuẩn và xử lý giao dịch Spring Data JPA.
- Lập trình viên Backend: Tiếp cận mã nguồn mẫu rõ ràng về kiến trúc phân tầng, quản lý trạng thái máy đơn hàng và phân quyền hệ thống.
- Doanh nghiệp vừa và nhỏ (SMEs): Sở hữu giải pháp website bán hàng hoàn chỉnh với chi phí đầu tư ban đầu 0 đồng cho phần mềm, giảm thiểu 100% phí hoa hồng sàn.
- Người tiêu dùng: Trải nghiệm giao diện mua sắm mượt mà, minh bạch trạng thái vận chuyển và hưởng các chương trình khuyến mãi linh hoạ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 FastShop là gì?
Hệ thống yêu cầu máy chủ (VPS/Cloud) tối thiểu 2 vCPU, 4GB RAM và 40GB SSD. Môi trường cần cài đặt sẵn Java Runtime Environment (JRE 11 trở lên) và Microsoft SQL Server 2017/2019.
2. Hệ thống xử lý thế nào khi có nhiều người cùng đặt mua một sản phẩm sắp hết hàng?
Nhờ cơ chế @Transactional kết hợp với mức cô lập giao dịch (Isolation Level) mặc định của Spring Data JPA và cơ chế khóa dòng (Row-level Locking) của SQL Server, hệ thống đảm bảo số lượng tồn kho (products.Number) luôn được cập nhật tuần tự, loại bỏ hoàn toàn lỗi bán âm kho (Overselling).
3. Làm thế nào để tích hợp thêm các cổng thanh toán như VNPay hay MoMo vào FastShop?
Lập trình viên chỉ cần tạo thêm Service xử lý thanh toán, gọi REST API của cổng thanh toán để tạo URL chuyển hướng, sau đó xây dựng Endpoint nhận kết quả trả về (IPN/Return URL) để tự động cập nhật trạng thái hóa đơn thanh toán trong bảng orders.
4. Cơ chế sao lưu và phục hồi dữ liệu của hệ thống như thế nào?
Dữ liệu trên SQL Server có thể được lập lịch sao lưu tự động (Automated Backup Job) theo chu kỳ hàng ngày thông qua SQL Server Agent, hỗ trợ Full Backup và Differential Backup để khôi phục nhanh khi xảy ra sự cố.
5. Chi phí vận hành FastShop trong thực tế ước tính bao nhiêu?
Vì sử dụng công nghệ mã nguồn mở (Java, Spring Boot), doanh nghiệp chỉ tốn chi phí thuê hạ tầng máy chủ (khoảng 200.000 – 500.000 VNĐ/tháng cho Cloud VPS) và tên miền (khoảng 250.000 VNĐ/năm), tiết kiệm đáng kể so với việc thuê nền tảng SaaS định kỳ.
Kết luận
Đồ án tốt nghiệp "Xây dựng Website bán hàng FastShop" của sinh viên Nguyễn Thanh Cường đã giải quyết trọn vẹn yêu cầu thực tiễn về một nền tảng thương mại điện tử hiện đại, tin cậy và hiệu năng cao. Bằng việc kết hợp sức mạnh của framework Java Spring Boot với hệ quản trị cơ sở dữ liệu quan hệ Microsoft SQL Server 2019, dự án đã chứng minh tính khả thi vượt trội trong việc xây dựng hệ thống quản lý bán hàng chuẩn mực từ khâu quản lý danh mục, xử lý đơn hàng đa trạng thái, đến sinh mã giảm giá và bảo mật phân quyền đa cấp. Đây là nền tảng vững chắc có thể ứng dụng trực tiếp vào hoạt động kinh doanh của các doanh nghiệp bán lẻ, đồng thời mở ra tiềm năng phát triển mạnh mẽ thành hệ thống phân tán microservices trong tương lai.