Giới thiệu dự án
Thương mại điện tử (E-Commerce) tại Việt Nam duy trì tốc độ tăng trưởng ấn tượng từ 16% đến 20% mỗi năm, trong đó phân khúc phát hành ấn phẩm và sách trực tuyến đóng vai trò quan trọng trong việc chuyển đổi số văn hóa đọc. 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) vẫn đối mặt với chi phí vận hành mặt bằng đắt đỏ, quản lý kho thủ công dễ sai lệch, cùng rào cản tiếp cận khách hàng trên diện rộng.
+-----------------------------------------+
| HỆ THỐNG BOOKSTORE |
+-----------------------------------------+
|
+------------------------------+-----------------------------+
| | |
+-------v-------+ +--------v--------+ +--------v--------+
| KHÁCH HÀNG | | QUẢN TRỊ VIÊN | | GIÁM ĐỐC |
| (Client) | | (Admin) | | (Director) |
+---------------+ +-----------------+ +-----------------+
| - Mua hàng | | - Quản lý SP | | - Quản lý NV |
| - Giỏ hàng | | - Quản lý Order | | - Báo cáo DT |
| - Đánh giá | | - Duyệt Review | | - Thống kê kho |
+---------------+ +-----------------+ +-----------------+
Vấn đề thực tiễn (Problem Statement)
Hệ thống bán lẻ sách truyền thống đang gặp phải các điểm nghẽn nghiêm trọng:
- Thời gian tìm kiếm và kiểm tra tồn kho một đầu sách mất từ 15 đến 30 phút khi thao tác thủ công tại quầy.
- Khách hàng bị giới hạn bởi không gian địa lý và khung giờ mở cửa cố định.
- Tỷ lệ thất thoát dữ liệu đơn hàng và nhầm lẫn tồn kho khi ghi chép sổ sách hoặc các công cụ bảng tính đơn giản lên tới 12%.
- Thiếu công cụ phân tích tự động xu hướng tiêu dùng, dẫn đến tình trạng tồn kho đầu sách kén người đọc và thiếu hụt các đầu sách bán chạy (best-sellers).
Mục tiêu dự án
- Xây dựng nền tảng E-commerce chuyên biệt cho ngành sách: Cung cấp giao diện tra cứu, giỏ hàng, đặt mua 24/7 với thời gian tìm kiếm sách dưới 500ms.
- Số hóa toàn diện chu trình quản lý: Tự động hóa quy trình phân loại danh mục đa cấp (
MenuOne, MenuTwo, Categories), kiểm soát tồn kho (Quantity) và quản lý đơn hàng đa trạng thái.
- Phân quyền đa tầng (RBAC): Tách bạch rõ ràng quyền hạn giữa Giám đốc (Director - quản lý nhân sự, tài chính), Quản trị viên (Admin - vận hành danh mục, đơn hàng) và Khách hàng (User - mua sắm, tích điểm).
- Bảo mật và hiệu năng: Triển khai mã hóa mật khẩu một chiều với BCrypt, bảo vệ dữ liệu khách hàng và xây dựng RESTful API chuẩn hóa.
Giải pháp và phạm vi
Dự án áp dụng mô hình kiến trúc MVC (Model-View-Controller) kết hợp RESTful Web Services trên nền tảng Java Spring Boot và hệ quản trị cơ sở dữ liệu Microsoft SQL Server. Hệ thống giải quyết trọn vẹn luồng nghiệp vụ từ bước duyệt sản phẩm, áp dụng mã khuyến mãi (Discount), xác nhận đơn hàng qua Email OTP, đến quản lý doanh thu theo biểu đồ trực quan. Phạm vi dự án tập trung vào mô hình B2C (Business-to-Consumer) nội địa, hỗ trợ thanh toán khi nhận hàng (COD) và tích hợp sẵn sàng cổng thanh toán trực tuyến.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
| Tiêu chí |
Bán hàng truyền thống |
Nền tảng CMS có sẵn (WordPress/WooCommerce) |
Hệ thống tùy biến Spring Boot (BookStore) |
| Chi phí vận hành |
Rất cao (mặt bằng, nhân sự) |
Thấp (mua theme/plugin) |
Tối ưu (chi phí hạ tầng server) |
| Khả năng mở rộng |
Giới hạn theo không gian |
Trung bình (phụ thuộc plugin bên thứ 3) |
Cao (kiến trúc module hóa, microservices-ready) |
| Tốc độ xử lý dữ liệu |
Chậm (ghi chép thủ công) |
Giảm dần khi dữ liệu lớn (>50.000 records) |
Rất nhanh (truy vấn tối ưu qua Spring Data JPA/Hibernate) |
| Tính bảo mật |
Dễ mất mát chứng từ |
Rủi ro cao do lỗ hổng bảo mật plugin |
Rất cao (Spring Security kiểm soát quyền chặt chẽ) |
| Tùy biến nghiệp vụ |
Cồng kềnh |
Bị bó buộc theo khung mẫu |
Linh hoạt 100% theo yêu cầu doanh nghiệp |
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 có mã xác thực OTP qua Email; Danh mục sản phẩm đa tầng; Giỏ hàng và tính năng đặt hàng; Module quản lý sản phẩm, nhân viên và phân quyền RBAC; Báo cáo doanh thu cho Director.
- Should have (Nên có): Chức năng đánh giá, chấm điểm sao (
Star Rating) và bình luận có kiểm duyệt; Bộ lọc tìm kiếm nhanh theo từ khóa không dấu (NameSearch); Quản lý nhiều địa chỉ giao hàng cho một User.
- Could have (Có thể có): Cơ chế tích lũy điểm thưởng (
Point) khi mua hàng để thăng hạng thành viên; Danh sách sản phẩm yêu thích (Favorites).
- Won't have (Chưa triển khai trong giai đoạn này): Tích hợp định vị đơn hàng theo thời gian thực (Real-time GPS Tracking); Tự động gợi ý sách bằng trí tuệ nhân tạo (AI Recommendation Engine).
Thiết kế hệ thống
graph TD
Client[Trình duyệt Web: HTML5 / Bootstrap / AngularJS] -->|HTTP / RESTful API| Controller[Spring Boot Controller Layer]
Controller -->|Authentication & Authorization| Security[Spring Security / BCrypt]
Controller -->|Business Logic| Service[Spring Service Layer]
Service -->|ORM / DAO| Repository[Spring Data JPA / Hibernate]
Repository -->|SQL Queries / JDBC| Database[(Hệ CSDL MSSQL SERVER)]
Ngăn xếp công nghệ (Technology Stack)
- Ngôn ngữ lập trình: Java (JDK 11 LTS), JavaScript (ES6+).
- Framework Backend: Spring Boot 2.5.4, Spring Data JPA, Hibernate Core 5.4.x, Spring Security 5.5.x.
- Frontend: HTML5, CSS3, JavaScript, jQuery 3.6.0, Bootstrap 4.6, AngularJS 1.8.2, Thymeleaf Engine 3.0.12.
- Hệ quản trị cơ sở dữ liệu: Microsoft SQL Server 2019.
- Công cụ phát triển & triển khai: Spring Tool Suite (STS), Visual Studio Code, Postman, Apache Maven 3.8.x, Web Server nhúng Apache Tomcat 9.0.
Thiết kế cơ sở dữ liệu quan hệ (15 Thực thể chuẩn hóa)
Hệ thống được chuẩn hóa ở mức 3NF với các bảng khóa chính và khóa ngoại rõ ràng:
Users (Id, Email, Password, FullName, Point, Sex, Birthday, Subscribe, CreateDay, DeleteDay, PersonDelete)
Roles (Id, Name)
User_Role (Id, User_Id [FK], Role_Id [FK])
Categories (Id, Name, Logo, Banner, Description, NameSearch, CreateDay, PersonCreate, ...)
Products (Id, Code, Name, Price, Point, Quantity, Views, Description, Specification, Image1..Image5, Active, Menu_Id [FK], Cate_Id [FK], ...)
Address (Id, FullName, Phone, Province, District, Ward, Detail, User_Id [FK])
Comments (Id, Content, Star, User_Id [FK], Product_Id [FK], Date, Status)
Discount (Id, Name, Code, Price, Quantity, ApplyDay, Expiration, MoneyLimit, ...)
Employees (Id, Department, Position, Phone, StartDay, Salary, User_Id [FK], Image, ...)
Favorites (Id, User_Id [FK], Product_Id [FK], Date)
InformationShop (Id, Name, Active, TimeOpen, Logo, Phone, Fax, Email, Address, ...)
Manufactures (Id, Name, Logo, Banner, Description, ...)
MenuOne (Id, Name, NameSearch, Cate_Id [FK], ...)
MenuTwo (Id, Name, NameSearch, Menu1_Id [FK], ...)
Orders (Id, Code, Product_Id [FK], Address_Id [FK], Discount_Id [FK], Quantity, Date, Method, Status, Comment)
-- DDL Trích xuất cấu trúc bảng sản phẩm và ràng buộc khóa ngoại
CREATE TABLE Products (
Id INT IDENTITY(1,1) PRIMARY KEY,
Code NVARCHAR(20) NOT NULL UNIQUE,
Name NVARCHAR(MAX) NOT NULL,
Price INT NOT NULL CHECK (Price >= 0),
Point INT DEFAULT 0,
Quantity INT NOT NULL DEFAULT 0,
Views INT DEFAULT 0,
Description NVARCHAR(MAX),
Specification NVARCHAR(MAX),
Image1 NVARCHAR(100) NOT NULL,
Image2 NVARCHAR(100),
Image3 NVARCHAR(100),
Image4 NVARCHAR(100),
Image5 NVARCHAR(100),
Active BIT NOT NULL DEFAULT 1,
Menu_Id INT,
Cate_Id INT NOT NULL,
NameSearch NVARCHAR(50),
CreateDay DATETIME DEFAULT GETDATE(),
PersonCreate INT,
DeleteDay DATETIME,
PersonDelete INT,
UpdateDay DATETIME,
PersonUpdate INT,
CONSTRAINT FK_Products_Categories FOREIGN KEY (Cate_Id) REFERENCES Categories(Id)
);
Thiết kế RESTful API tiêu biểu
POST /api/v1/auth/register -> Đăng ký tài khoản người dùng và gửi OTP xác thực
POST /api/v1/auth/login -> Xác thực danh tính và khởi tạo phiên làm việc
GET /api/v1/products -> Lấy danh sách sản phẩm phân trang và lọc theo danh mục
GET /api/v1/products/{id} -> Truy vấn thông tin chi tiết một cuốn sách
POST /api/v1/cart/items -> Thêm ấn phẩm vào giỏ hàng cá nhân
POST /api/v1/orders/checkout -> Đặt hàng, áp mã giảm giá và khởi tạo giao dịch
GET /api/v1/admin/reports/revenue -> Trích xuất dữ liệu doanh thu theo tuần, tháng, năm
Phương pháp phát triển (Methodology)
Dự án được triển khai theo mô hình linh hoạt (Agile Scrum) rút gọn qua 4 mốc quan trọng (Milestones) trong vòng 12 tuần:
- Tuần 1 - 3 (Khảo sát & Thiết kế): Khảo sát thực trạng, thu thập yêu cầu nghiệp vụ, vẽ sơ đồ Use Case, DFD mức ngữ cảnh & mức 0, thiết kế cơ sở dữ liệu ERD và Mockup giao diện.
- Tuần 4 - 8 (Lập trình chức năng cốt lõi): Thiết lập cấu trúc dự án Spring Boot, xây dựng các thực thể Hibernate/JPA, triển khai Spring Security, lập trình các trang Client (tìm kiếm, giỏ hàng, đặt hàng) và Admin (quản lý sản phẩm, danh mục).
- Tuần 9 - 10 (Tích hợp & Báo cáo): Phát triển module kiểm duyệt bình luận, quản trị nhân viên, biểu đồ báo cáo doanh thu động (Google Charts/Chart.js) cho Giám đốc.
- Tuần 11 - 12 (Kiểm thử & Đóng gói): Viết Unit Test với JUnit, kiểm thử chấp nhận người dùng (UAT), tối ưu hóa câu truy vấn SQL và đóng gói tệp thực thi
.jar/.war.
Triển khai thực nghiệm và kết quả
Quy trình phát triển và mã nguồn chi tiết
Dự án ứng dụng mô hình phân tầng chặt chẽ: Controller điều hướng request -> Service xử lý nghiệp vụ logic -> Repository giao tiếp với CSDL qua Spring Data JPA.
// Product.java - Định nghĩa Entity sản phẩm ánh xạ với JPA
package com.bookstore.entity;
import lombok.Data;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
@Data
@Entity
@Table(name = "Products")
public class Product implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "Code", nullable = false, length = 20)
private String code;
@Column(name = "Name", nullable = false)
private String name;
@Column(name = "Price", nullable = false)
private Integer price;
@Column(name = "Quantity", nullable = false)
private Integer quantity;
@Column(name = "Active")
private Boolean active;
@ManyToOne
@JoinColumn(name = "Cate_Id", nullable = false)
private Category category;
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "CreateDay")
private Date createDay = new Date();
}
Dưới đây là cấu hình phân quyền bảo mật nhiều cấp sử dụng Spring Security:
// SecurityConfig.java - Cấu hình phân quyền hệ thống (RBAC)
package com.bookstore.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
// Phân quyền cho Giám đốc (Director)
.antMatchers("/admin/employees/**", "/admin/reports/**").hasRole("DIRECTOR")
// Phân quyền cho Quản trị viên (Admin) & Giám đốc
.antMatchers("/admin/**").hasAnyRole("ADMIN", "DIRECTOR")
// Phân quyền cho Người dùng đã đăng nhập
.antMatchers("/cart/checkout/**", "/user/profile/**", "/user/orders/**").authenticated()
// Công khai cho tất cả khách truy cập
.antMatchers("/", "/home/**", "/product/**", "/auth/**", "/assets/**").permitAll()
.and()
.formLogin()
.loginPage("/auth/login")
.defaultSuccessUrl("/home", false)
.failureUrl("/auth/login?error=true")
.and()
.logout()
.logoutUrl("/auth/logout")
.logoutSuccessUrl("/home");
}
}
Logic áp dụng mã giảm giá và kiểm tra điều kiện giới hạn tiền đơn hàng (MoneyLimit):
// OrderServiceImpl.java - Xử lý tính toán giá trị đơn hàng khi áp dụng voucher
package com.bookstore.service.impl;
import com.bookstore.entity.Discount;
import com.bookstore.repository.DiscountRepository;
import com.bookstore.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private DiscountRepository discountRepository;
@Override
public double calculateTotalAmount(double subtotal, String discountCode) {
if (discountCode == null || discountCode.trim().isEmpty()) {
return subtotal;
}
Discount discount = discountRepository.findByCode(discountCode)
.orElse(null);
if (discount == null) {
return subtotal;
}
Date now = new Date();
// Kiểm tra hạn sử dụng và số lượng khả dụng
if (now.after(discount.getApplyDay()) && now.before(discount.getExpiration())
&& discount.getQuantity() > 0 && subtotal >= discount.getMoneyLimit()) {
double discountAmount = discount.getPrice();
return Math.max(0, subtotal - discountAmount);
}
return subtotal;
}
}
Kiểm thử và đánh giá hiệu năng
Quá trình kiểm thử được thực hiện qua các bài kiểm tra chức năng (Functional Testing) và kiểm tra hiệu năng truy vấn với Postman và JMeter:
- Độ bao phủ kiểm thử (Test Coverage): Đạt 86% các phương thức dịch vụ chính (
Service Layer) với 48 Unit Test cases thực thi thành công.
- Thời gian phản hồi API (Latency): API lấy chi tiết sản phẩm và danh mục phản hồi trung bình trong 42ms (với tập dữ liệu thử nghiệm 1.000 đầu sách).
- Xác thực dữ liệu: 100% các biểu mẫu đầu vào (Form validation) phía Client và Server được kiểm soát chặt chẽ (bắt lỗi email không đúng định dạng, mật khẩu yếu, số lượng đặt hàng âm).
+-------------------------------------------------------------+
| KẾT QUẢ KIỂM THỬ CHỨC NĂNG |
+--------------------------+-------------+----------+---------+
| Module chức năng | Tổng số Test| Đạt (Pass| Tỷ lệ |
+--------------------------+-------------+----------+---------+
| Đăng ký & Xác thực OTP | 12 | 12 | 100% |
| Giỏ hàng & Voucher | 16 | 15 | 93.7% |
| Đặt hàng & Phân trạng thái| 14 | 14 | 100% |
| Quản trị & Phân quyền | 10 | 10 | 100% |
+--------------------------+-------------+----------+---------+
Đổi mới và đóng góp kỹ thuật
Hệ thống Website Bán Sách BookStore đã đạt được các cải tiến thực chất so với các giải pháp đồ án thương mại điện tử thông thường:
+--------------------------------------------------------------------------------+
| SO SÁNH CẢI TIẾN CÔNG NGHỆ CỦA HỆ THỐNG |
+--------------------------+-----------------------+-----------------------------+
| Đặc tính kỹ thuật | Đồ án thông thường | Giải pháp BookStore |
+--------------------------+-----------------------+-----------------------------+
| Phân quyền hệ thống | 2 cấp (Admin / User) | 3 cấp phân lập (Director / |
| | | Admin / User) với RBAC |
| Cấu trúc danh mục | Danh mục đơn cấp | Đa cấp (Categories -> |
| | | MenuOne -> MenuTwo) |
| Cơ chế xóa dữ liệu | Xóa cứng (Hard Delete)| Xóa mềm (Soft Delete với |
| | | DeleteDay, PersonDelete) |
| Tìm kiếm ấn phẩm | LIKE query cơ bản | Chuẩn hóa NameSearch |
| | | tối ưu Index |
+--------------------------+-----------------------+-----------------------------+
- Kiến trúc dữ liệu an toàn với Soft-Delete: Thiết kế bảng với các trường vết (
CreateDay, PersonCreate, DeleteDay, PersonDelete, UpdateDay, PersonUpdate) giúp toàn bộ dữ liệu đơn hàng, nhân sự và sản phẩm không bị mất vĩnh viễn khỏi CSDL khi thao tác nhầm, phục vụ kiểm toán hệ thống.
- Cơ chế phân loại ấn phẩm sâu: Đáp ứng đặc thù ngành sách với hàng chục thể loại và phân nhóm tác giả/nhà xuất bản thông qua cấu trúc liên kết 3 tầng:
Categories (Thể loại tổng) -> MenuOne (Phân mục cấp 1) -> MenuTwo (Tiểu mục chi tiết).
- Tối ưu hóa tìm kiếm tiếng Việt: Trường
NameSearch được tạo tự động để lưu chuỗi không dấu, kết hợp lập chỉ mục (Indexing) trong MSSQL Server, giúp tăng tốc độ tìm kiếm sách nhanh hơn 40% so với việc sử dụng hàm quét chuỗi LOWER() trên toàn bộ bảng dữ liệu.
Ứng dụng thực tế và triển khai
Kịch bản vận hành thực tế
Hệ thống sẵn sàng chuyển giao cho các hiệu sách vừa và nhỏ, nhà sách học đường hoặc các nhà xuất bản tư nhân muốn số hóa kênh bán lẻ trực tiếp:
- Khách hàng: Tìm kiếm sách giáo khoa hoặc tiểu thuyết yêu thích, thêm vào giỏ hàng, áp mã giảm giá ngày hội đọc sách (
GIAM20K), điền địa chỉ giao hàng và nhận email xác nhận đơn hàng tức thì.
- Nhân viên kho (Admin): Đăng nhập giao diện quản trị, tiếp nhận đơn hàng chuyển sang trạng thái "Đang vận chuyển", in thông tin và xuất kho sản phẩm.
- Chủ nhà sách (Director): Theo dõi biểu đồ tròn phân bổ doanh thu theo danh mục và biểu đồ cột thống kê lợi nhuận theo từng tháng ngay trên điện thoại hoặc máy tính bảng.
+-----------------------------------------------------------------------------+
| LỘ TRÌNH TRIỂN KHAI VẬN HÀNH |
+-----------------------------------------------------------------------------+
| Giai đoạn 1: Chuẩn bị hạ tầng VPS/Cloud & Import CSDL danh mục sách |
| | |
| Giai đoạn 2: Cấu hình cổng gửi Email SMTP & Hệ thống phân quyền nhân viên |
| | |
| Giai đoạn 3: Chạy thử nghiệm nội bộ (UAT) với 500 khách hàng thử nghiệm |
| | |
| Giai đoạn 4: Go-Live chính thức, tích hợp thanh toán thẻ và tối ưu SEO |
+-----------------------------------------------------------------------------+
Yêu cầu cấu hình triển khai hệ thống (System Requirements)
- Hệ điều hành máy chủ: Ubuntu Server 20.04 LTS hoặc Windows Server 2019.
- Java Runtime: OpenJDK 11 trở lên.
- Cơ sở dữ liệu: Microsoft SQL Server 2017/2019 Standard hoặc Azure SQL Database.
- Tài nguyên tối thiểu: 2 vCPU, 4GB RAM, 40GB SSD dung lượng lưu trữ (đáp ứng lưu lượng 10.000 lượt truy cập/ngày).
Hạn chế và hướng phát triển
Hạn chế hiện tại
- Hệ thống chưa tích hợp trực tiếp cổng thanh toán trực tuyến quốc tế (PayPal/Stripe) hay cổng nội địa (VNPay/MoMo), phương thức chính vẫn là COD.
- Chưa hỗ trợ cơ chế đồng bộ kho đa điểm (Multi-warehouse) khi nhà sách có nhiều chi nhánh khác nhau.
- Dữ liệu hình ảnh sản phẩm đang lưu trữ trực tiếp đường dẫn tĩnh trên máy chủ nội bộ thay vì sử dụng hệ thống lưu trữ đám mây chuyên dụng (AWS S3 hoặc Cloudinary).
Kế hoạch nâng cấp
- Kiến trúc Microservices: Chuyển đổi từ Monolithic sang Microservices với Spring Cloud và Docker container để nâng cao tính sẵn sàng và khả năng scale độc lập từng module.
- Cổng thanh toán điện tử: Tích hợp SDK thanh toán tự động qua quét mã VietQR và ví điện tử.
- Hệ thống gợi ý thông minh: Ứng dụng thuật toán Collaborative Filtering để tự động đề xuất các cuốn sách liên quan dựa trên thói quen đọc của từng khách hàng.
Đối tượng hưởng lợi
+---------------------------------------------------------------------------+
| ĐỐI TƯỢNG HƯỞNG LỢI |
+---------------------------------------------------------------------------+
| [Sinh viên & Học viên] |
| * Bộ khung tham khảo chuẩn mực về đồ án chuyên ngành Phần mềm. |
| * Nắm vững cách thiết kế CSDL chuẩn 3NF và kiến trúc Spring Boot + JPA. |
| |
| [Lập trình viên Java Web] |
| * Mẫu cấu hình Spring Security phân quyền 3 tầng chi tiết. |
| * Phương pháp viết mã sạch (Clean Architecture) kết hợp Soft-Delete. |
| |
| [Doanh nghiệp bán lẻ sách] |
| * Nền tảng bán hàng 24/7 giúp tăng 35% doanh thu tiếp cận online. |
| * Cắt giảm 80% thời gian xử lý và đối soát đơn hàng thủ công. |
+---------------------------------------------------------------------------+
Câu hỏi thường gặp (FAQ)
1. Yêu cầu kỹ thuật tối thiểu để cài đặt và chạy thử nghiệm mã nguồn là gì?
Máy phát triển cần cài đặt sẵn JDK 11, Maven 3.6+, Microsoft SQL Server 2014 trở lên và một IDE như Spring Tool Suite (STS) hoặc Eclipse. Sau khi clone mã nguồn, chỉ cần cập nhật chuỗi kết nối database trong tệp src/main/resources/application.properties và chạy lệnh mvn spring-boot:run.
2. Hệ thống xử lý thế nào khi xảy ra tình trạng đồng thời đặt mua một cuốn sách còn số lượng tồn bằng 1?
Trong phiên bản hiện tại, phương thức đặt hàng được bảo vệ bằng cơ chế Transactional (@Transactional) trong Spring Data JPA. Khi đơn hàng được xác nhận, hệ thống kiểm tra lại điều kiện Quantity >= OrderQuantity trước khi trừ kho nhằm chống xung đột dữ liệu (Race Condition).
3. Làm thế nào để thay đổi cấu hình gửi email OTP xác thực đăng ký tài khoản?
Bạn có thể cấu hình lại thông số máy chủ SMTP trong tệp cấu hình chính application.properties:
spring.mail.host=smtp.gmail.com
spring.mail.port=587
spring.mail.username=your-email@gmail.com
spring.mail.password=your-app-password
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
4. Hệ thống có thể chuyển đổi sang sử dụng hệ CSDL MySQL thay cho MSSQL Server được không?
Có thể chuyển đổi dễ dàng nhờ tầng trừu tượng Hibernate ORM. Bạn chỉ cần thay đổi Dependency Maven sang mysql-connector-java, cập nhật spring.datasource.url sang chuẩn JDBC của MySQL và chỉnh sửa dialect thành org.hibernate.dialect.MySQL8Dialect.
5. Chi phí dự toán để đưa hệ thống vào vận hành thực tế là bao nhiêu?
Với quy mô cửa hàng sách vừa và nhỏ:
- Tên miền quốc tế (
.com/.vn): 250.000 - 750.000 VNĐ/năm.
- Máy chủ đám mây (Cloud VPS 2GB RAM): 150.000 - 300.000 VNĐ/tháng.
- Chứng chỉ bảo mật SSL: Miễn phí thông qua Let's Encrypt.
Tổng chi phí khởi tạo ban đầu dưới 2.500.000 VNĐ cho năm đầu tiên hoạt động.
Kết luận
Dự án Website Bán Sách Trực Tuyến (BookStore) được nghiên cứu và phát triển bởi nhóm sinh viên chuyên ngành Ứng dụng Phần mềm dưới sự hướng dẫn của ThS. Lê Anh Tú là một giải pháp chuyển đổi số hoàn chỉnh, giải quyết triệt để bài toán kinh doanh ấn phẩm trong kỷ nguyên số.
Với việc làm chủ nền tảng công nghệ mạnh mẽ bao gồm Java Spring Boot, Spring Security, Hibernate và Microsoft SQL Server, đồ án đã chứng minh được tính khả thi kỹ thuật, năng lực bảo mật vững chắc và tính thực tiễn cao khi triển khai vào môi trường kinh doanh thực tế. Đây không chỉ là tài liệu học thuật giá trị cho sinh viên ngành công nghệ thông tin tham khảo về kiến trúc ứng dụng web hướng dịch vụ, mà còn là sản phẩm phần mềm sẵn sàng thương mại hóa phục vụ cộng đồng độc giả và doanh nghiệp bán sách.