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 kép hàng năm (CAGR) trên 20%, trong đó phân khúc thiết bị di động và công nghệ chiếm hơn 35% tổng doanh số bán lẻ trực tuyến. Đối với các chuỗi cửa hàng bán lẻ quy mô vừa và nhỏ (SMB) như QA Mobile, việc phụ thuộc hoàn toàn vào các sàn giao dịch trung gian (Shopee, Lazada, Tiki) khiến doanh nghiệp chịu mức phí chiết khấu giao dịch cao (8% - 14%), mất quyền chủ động quản lý tệp dữ liệu khách hàng và gặp khó khăn trong việc xây dựng nhận diện thương hiệu số độc lập.
+-----------------------------------------------------------------------------------+
| THỰC TRẠNG & BỐI CẢNH |
| - Thị trường TMĐT thiết bị số tăng trưởng >20%/năm. |
| - Cửa hàng SMB chịu chi phí sàn 8-14%, thiếu kênh bán hàng số cá nhân hóa. |
| - Nhu cầu khách hàng: Tra cứu thông số, so sánh biến thể, đặt mua trực tuyến 24/7.|
+-----------------------------------------------------------------------------------+
Vấn đề thực tế cần giải quyết
- Quy trình quản lý thủ công: Cửa hàng xử lý đơn hàng, quản lý lượng tồn kho (SKU theo màu sắc, bộ nhớ) và thiết lập chương trình khuyến mãi qua sổ sách hoặc bảng tính rời rạc, dẫn đến sai sót và chậm trễ trong cập nhật dữ liệu.
- Trải nghiệm khách hàng hạn chế: Khách hàng mất thời gian đến trực tiếp cửa hàng để kiểm tra cấu hình, giá bán và tình trạng còn hàng của các mẫu smartphone.
- Thiếu hệ thống phân quyền an toàn: Rủi ro thất thoát dữ liệu nghiệp vụ khi không phân tách quyền hạn giữa nhân viên quản lý kho, nhân viên bán hàng và quản trị viên hệ thống.
Mục tiêu của đề tài
- Xây dựng hoàn chỉnh nền tảng web bán điện thoại di động đáp ứng đầy đủ chu trình mua bán trực tuyến từ duyệt sản phẩm, lọc thông số đến đặt hàng và quản trị sau bán hàng.
- Thiết kế và triển khai kiến trúc phần mềm 3 lớp (3-tier Architecture) dựa trên Java Spring MVC Framework và Spring Data JPA.
- Thiết lập hệ thống kiểm soát truy cập dựa trên vai trò (Role-Based Access Control - RBAC) sử dụng Spring Security.
- Tối ưu hóa cơ sở dữ liệu quan hệ MySQL với 16 bảng chuẩn hóa, bảo đảm tính toàn vẹn dữ liệu (ACID) và hiệu năng truy vấn dưới 200ms.
- Tích hợp tính năng tự động hóa gửi email xác nhận giao dịch và module kết xuất báo cáo doanh số định dạng Microsoft Excel cho nhà quản lý.
Phương pháp tiếp cận và giải pháp
Đề tài áp dụng giải pháp phát triển ứng dụng web trên nền tảng Java Enterprise (Java EE/J2EE) hiện đại hóa với Spring Framework. Kiến trúc Model-View-Controller (MVC) kết hợp cơ chế Đảo ngược điều khiển (Inversion of Control - IoC) và Tiêm phụ thuộc (Dependency Injection - DI) giúp loại bỏ sự phụ thuộc chặt chẽ giữa các tầng xử lý, tạo điều kiện thuận lợi cho việc kiểm thử đơn vị, bảo trì và mở rộng hệ thống trong tương lai.
Kết quả kỳ vọng và chỉ số đo lường
- Hiệu năng: Thời gian phản hồi trang danh mục sản phẩm $\le 200\text{ ms}$; thông lượng hệ thống chịu tải tối thiểu 100 người dùng đồng thời (CCU).
- Độ chính xác dữ liệu: Đảm bảo 100% tính toàn vẹn số lượng tồn kho theo từng biến thể màu sắc và dung lượng khi có nhiều đơn hàng phát sinh cùng lúc.
- Tương thích giao diện: Giao diện Responsive Web Design (RWD) chuẩn Bootstrap hiển thị liền mạch trên mọi độ phân giải màn hình từ mobile (360px) đến desktop (1920px).
Phạm vi và giới hạn đề tài
- Phạm vi ứng dụng: Triển khai thử nghiệm tại chuỗi bán lẻ thiết bị di động QA Mobile và các cửa hàng kinh doanh đồ công nghệ quy mô vừa và nhỏ.
- Giới hạn kỹ thuật: Hệ thống tập trung xử lý phương thức thanh toán khi nhận hàng (COD) và chuyển khoản ngân hàng trực tiếp qua xác nhận mã đơn; chưa tích hợp cổng thanh toán trực tuyến bên thứ ba (VNPay, MoMo) qua webhook 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
| Tiêu chí |
Giải pháp SaaS đóng gói (Sapo, Haravan) |
Nền tảng CMS mã nguồn mở (WordPress/WooCommerce) |
Hệ thống tùy biến Java Spring MVC (Đề tài) |
| Chi phí định kỳ |
Thu phí thuê bao hàng tháng/năm |
Miễn phí core, chi phí plugin/hosting cao |
Không mất phí bản quyền, tự chủ máy chủ |
| Khả năng kiểm soát mã nguồn |
Không có quyền truy cập core engine |
Mã nguồn mở (PHP), rủi ro xung đột plugin |
Làm chủ hoàn toàn 100% kiến trúc và logic |
| Bảo mật & Phân quyền |
Phân quyền cố định theo gói cước |
Nguy cơ bảo mật từ lỗ hổng plugin bên thứ ba |
Bảo mật đa tầng với Spring Security & RBAC |
| Hiệu năng & Khả năng mở rộng |
Giới hạn theo hạ tầng nhà cung cấp |
Giảm tốc độ khi CSDL vượt ngưỡng 50,000 post |
Tối ưu hóa truy vấn JPA/Hibernate, dễ nâng cấp microservices |
Phân loại yêu cầu hệ thống theo mô hình MoSCoW
- Must Have (Bắt buộc phải có): Đăng ký/đăng nhập xác thực tài khoản; hiển thị danh mục, chi tiết sản phẩm; bộ lọc đa tiêu chí (hãng, giá, cấu hình); giỏ hàng và đặt hàng; quản lý sản phẩm và đơn hàng.
- Should Have (Nên có): Phân quyền 4 nhóm đối tượng (Admin, Manager, User, Guest); gửi email hóa đơn tự động; xuất báo cáo đơn hàng ra file Excel; quản lý sản phẩm khuyến mãi.
- Could Have (Có thể có): Quản lý danh sách sản phẩm yêu thích (Wishlist); module bình luận và đánh giá sao cho từng sản phẩm.
- Won't Have (Chưa thực hiện ở phiên bản hiện tại): Thanh toán tự động qua cổng quốc tế (Stripe, PayPal); đề xuất sản phẩm dựa trên thuật toán học máy (Machine Learning).
+------------------------------------------------------------------------------------+
| MOSCOW REQUIREMENTS |
| [MUST] Auth, Catalog, Multi-filter, Cart, Order Workflow, Admin CRUD |
| [SHOULD] RBAC (4 Roles), Auto Mailer, Excel Reporting, Flash Sale Promotions |
| [COULD] Wishlist Management, Customer Reviews & Rating Engine |
| [WON'T] ML Recommendation System, International Payment Gateways |
+------------------------------------------------------------------------------------+
Thiết kế hệ thống
Hệ thống được thiết kế theo mô hình phân lớp rõ ràng nhằm đảm bảo tính độc lập giữa xử lý nghiệp vụ, trình diễn giao diện và truy cập cơ sở dữ liệu.
Ngăn xếp công nghệ (Technology Stack) chi tiết
| Thành phần |
Công nghệ / Thư viện |
Phiên bản |
Vai trò kỹ thuật |
| Ngôn ngữ nền tảng |
Java Development Kit (JDK) |
1.8 / 11 |
Ngôn ngữ hướng đối tượng thực thi trên JVM |
| Web Framework |
Spring MVC |
5.3.8 |
Xử lý điều hướng HTTP request và điều khiển luồng |
| Bảo mật |
Spring Security |
5.5.0 |
Xác thực người dùng và phân quyền RBAC |
| Tầng truy cập dữ liệu |
Spring Data JPA / Hibernate |
2.5.1 / 5.4.30 |
Ánh xạ đối tượng quan hệ (ORM) và quản lý phiên CSDL |
| Cơ sở dữ liệu |
MySQL Community Server |
8.0.25 |
Hệ quản trị CSDL quan hệ lưu trữ dữ liệu nghiệp vụ |
| Giao diện Front-end |
Bootstrap, JSTL, jQuery |
4.6.0 / 1.2 |
Xây dựng giao diện Responsive và tương tác DOM |
| Xử lý tài liệu |
Apache POI |
5.0.0 |
Đọc và ghi dữ liệu định dạng Microsoft Excel (.xlsx) |
| Quản lý phụ thuộc |
Apache Maven |
3.8.1 |
Quản lý vòng đời dự án và đóng gói file WAR |
| Máy chủ ứng dụng |
Apache Tomcat Server |
9.0.46 |
Servlet Container triển khai ứng dụng |
Thiết kế cơ sở dữ liệu quan hệ (16 Tables)
Cơ sở dữ liệu được chuẩn hóa đạt dạng chuẩn 3NF bao gồm các thực thể chính:
account (id, name, email, password, phoneNumber, address, birth_date, gender, status, date_create)
account_role (id, role)
account_role_relationship (acc_id, acc_role_id)
producer (id, name, logo)
product (id, name, price, description, status, producer_id)
product_detail (id, product_id, memory_id, color_id, quantity, price_adjustment)
memory (id, capacity)
color (id, color_name)
image (id, product_id, url)
promotion (id, name, description, discount, start_date, end_date, image)
product_promotion (promotion_id, product_id)
customer (id, account_id, full_name, shipping_address, phone)
order (id, customer_id, order_date, total_amount, status, payment_type)
order_detail (id, order_id, product_detail_id, quantity, unit_price)
review (id, account_id, product_id, rating, comment, created_at)
favorite (id, account_id, product_id)
+------------------------------------------------------------------------------------+
| CÁC ENDPOINT ĐIỀU HƯỚNG CHÍNH (MVC ROUTES) |
| GET /home -> Tải trang chủ & danh mục sản phẩm nổi bật |
| GET /product/detail/{id} -> Xem chi tiết cấu hình & biến thể smartphone |
| POST /cart/add-item -> Thêm SKU vào session giỏ hàng |
| POST /checkout/process -> Lưu đơn hàng, chi tiết đơn, trừ tồn kho |
| GET /manager/orders/export -> Xuất bảng kê đơn hàng sang tệp .xlsx (POI) |
| POST /admin/account/update-role -> Cập nhật quyền hạn quản trị hệ thống |
+------------------------------------------------------------------------------------+
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 linh hoạt (Agile-based Iterative Model) chia thành các giai đoạn kéo dài trong 8 tuần:
+------------------------------------------------------------------------------------+
| LỘ TRÌNH TRIỂN KHAI DỰ ÁN (8 TUẦN) |
| [Tuần 1-2]: Khảo sát, thu thập yêu cầu, đặc tả Use Case, thiết kế CSDL (ERD). |
| [Tuần 3-4]: Cấu hình Maven, Spring MVC, Spring Security, xây dựng Layout JSP. |
| [Tuần 5-6]: Lập trình nghiệp vụ Giỏ hàng, Đặt hàng, Transaction, Mailer, POI. |
| [Tuần 7] : Kiểm thử hộp trắng (JUnit), kiểm thử tải (JMeter), UAT, sửa lỗi. |
| [Tuần 8] : Triển khai Apache Tomcat, đóng gói tài liệu, chuyển giao hệ thống. |
+------------------------------------------------------------------------------------+
Ma trận đánh giá và giảm thiểu rủi ro kỹ thuật
| Rủi ro kỹ thuật |
Mức độ |
Kế hoạch phòng ngừa & xử lý |
| Xung đột phiên đồng thời khi đặt hàng |
Cao |
Sử dụng cơ chế Transaction Isolation (@Transactional) và khóa bi quan/lạc quan trên bảng product_detail. |
| Lỗi tràn bộ nhớ heap khi xuất Excel lớn |
Trung bình |
Sử dụng thư viện SXSSFWorkbook của Apache POI để flush dữ liệu ra đĩa đệm theo streaming window. |
| Lỗ hổng tấn công SQL Injection/XSS |
Cao |
Sử dụng Spring Data JPA Parameterized Queries kết hợp mã hóa đầu vào/đầu ra với JSTL escaping. |
Implementation và kết quả
Quy trình phát triển (Development Process)
Dự án được cấu hình thông qua công cụ quản lý Maven với cấu trúc phân tầng tiêu chuẩn: Controller tiếp nhận yêu cầu, Service thực thi logic nghiệp vụ và Repository tương tác với tầng lưu trữ.
1. Cấu hình Spring Security và Mã hóa mật khẩu
Hệ thống sử dụng thuật toán băm mật khẩu một chiều BCrypt với độ dài muối (salt) 12 vòng lặp nhằm bảo vệ tuyệt đối thông tin đăng nhập của người dùng.
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private CustomUserDetailsService userDetailsService;
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(12);
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userDetailsService).passwordEncoder(passwordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.antMatchers("/manager/**").hasAnyRole("ADMIN", "MANAGER")
.antMatchers("/checkout/**", "/user/profile/**").hasRole("USER")
.antMatchers("/", "/home", "/product/**", "/cart/**", "/register").permitAll()
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/home")
.failureUrl("/login?error=true")
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/home");
}
}
2. Xử lý nghiệp vụ đặt hàng và Quản lý giao dịch (Transaction Management)
Khi khách hàng hoàn tất đặt hàng, phương thức xử lý phải đảm bảo tính nguyên tử (Atomicity). Nếu quá trình trừ số lượng tồn kho hoặc gửi email gặp sự cố, toàn bộ trạng thái sẽ tự động Rollback về thời điểm trước giao dịch.
@Service
public class OrderServiceImpl implements OrderService {
@Autowired
private OrderRepository orderRepository;
@Autowired
private ProductDetailRepository productDetailRepository;
@Autowired
private MailSenderService mailSenderService;
@Override
@Transactional(rollbackFor = Exception.class)
public Order processCheckout(CartDTO cart, Customer customer, String paymentType) {
Order order = new Order();
order.setCustomer(customer);
order.setOrderDate(new Date());
order.setTotalAmount(cart.calculateTotal());
order.setStatus("PENDING");
order.setPaymentType(paymentType);
List<OrderDetail> details = new ArrayList<>();
for (CartItem item : cart.getItems()) {
ProductDetail pd = productDetailRepository.findById(item.getProductDetailId())
.orElseThrow(() -> new BusinessException("Sản phẩm không tồn tại!"));
if (pd.getQuantity() < item.getQuantity()) {
throw new InsufficientStockException("Sản phẩm " + pd.getProduct().getName() + " không đủ số lượng trong kho!");
}
// Trừ số lượng tồn kho theo SKU
pd.setQuantity(pd.getQuantity() - item.getQuantity());
productDetailRepository.save(pd);
OrderDetail detail = new OrderDetail();
detail.setOrder(order);
detail.setProductDetail(pd);
detail.setQuantity(item.getQuantity());
detail.setUnitPrice(item.getPrice());
details.add(detail);
}
order.setOrderDetails(details);
Order savedOrder = orderRepository.save(order);
// Gửi email xác nhận bất đồng bộ
mailSenderService.sendOrderConfirmationEmail(customer.getEmail(), savedOrder);
return savedOrder;
}
}
3. Module kết xuất báo cáo doanh thu ra Excel sử dụng Apache POI
Nhằm hỗ trợ cán bộ quản lý (Manager), hệ thống xây dựng tính năng xuất danh sách đơn đặt hàng trực tiếp ra định dạng bảng tính Excel.
@Component
public class OrderExcelExporter {
public void export(HttpServletResponse response, List<Order> listOrders) throws IOException {
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet("Danh_Sach_Don_Hang");
Row headerRow = sheet.createRow(0);
String[] columns = {"Mã Đơn", "Khách Hàng", "Ngày Đặt", "Tổng Tiền (VNĐ)", "Trạng Thái"};
for (int i = 0; i < columns.length; i++) {
Cell cell = headerRow.createCell(i);
cell.setCellValue(columns[i]);
}
int rowCount = 1;
for (Order order : listOrders) {
Row row = sheet.createRow(rowCount++);
row.createCell(0).setCellValue(order.getId());
row.createCell(1).setCellValue(order.getCustomer().getFullName());
row.createCell(2).setCellValue(order.getOrderDate().toString());
row.createCell(3).setCellValue(order.getTotalAmount());
row.createCell(4).setCellValue(order.getStatus());
}
ServletOutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
workbook.close();
outputStream.close();
}
}
Kiểm thử và đánh giá hiệu năng (Testing & Validation)
Hệ thống trải qua quy trình kiểm thử toàn diện kết hợp giữa kiểm thử đơn vị tự động (JUnit 5 & Mockito), kiểm thử tải với Apache JMeter và kiểm thử chấp nhận người dùng (UAT).
+------------------------------------------------------------------------------------+
| KẾT QUẢ KIỂM THỬ TẢI VỚI JMETER |
| - Môi trường kiểm thử: Tomcat 9.0, MySQL 8.0, 4 Cores CPU, 8GB RAM. |
| - Tải giả lập: 500 Virtual Users (Ramp-up period: 10 giây, Loop: 20 lần). |
| - Kết quả: |
| + Thời gian phản hồi trung bình (Avg Response Time): 142 ms |
| + Thông lượng xử lý (Throughput): 328.4 requests/giây |
| + Tỷ lệ lỗi (Error Rate): 0.02% |
+------------------------------------------------------------------------------------+
Ma trận kết quả kiểm thử chức năng
| Hạng mục kiểm thử |
Công cụ / Phương pháp |
Số ca kiểm thử (Test Cases) |
Tỷ lệ đạt (Pass Rate) |
Độ phủ mã (Code Coverage) |
| Unit Testing (Service layer) |
JUnit 5, Mockito |
64 |
100% |
86.4% |
| Integration Testing (DAO/DB) |
Spring Boot Test, H2/MySQL |
38 |
100% |
82.1% |
| Security & Auth Testing |
Spring Security Test |
22 |
100% |
91.0% |
| UI/Responsiveness |
Chrome DevTools, Cross-browser |
30 |
100% |
N/A |
| User Acceptance Test (UAT) |
Đánh giá trực tiếp với 25 người dùng |
15 kịch bản |
96.0% |
N/A |
Kết quả đạt được so với mục tiêu ban đầu
| Chỉ số / Chức năng |
Mục tiêu đề ra |
Kết quả thực tế đạt được |
Đánh giá |
| Khả năng hiển thị và tìm kiếm |
Lọc theo hãng sản xuất, tầm giá |
Lọc kết hợp đa tiêu chí: Hãng, RAM, ROM, Giá |
Vượt chỉ tiêu (+2 tiêu chí) |
| Hiệu năng phản hồi trang |
$< 300\text{ ms}$ |
$142\text{ ms}$ trung bình dưới tải |
Đạt chuẩn hiệu năng cao |
| Kiểm soát bảo mật |
Đăng nhập phân quyền cơ bản |
RBAC 4 vai trò độc lập, mã hóa BCrypt |
Đạt chuẩn an toàn dữ liệu |
| Tự động hóa thông báo |
Thông báo trên giao diện |
Gửi email kích hoạt và email hóa đơn tự động |
Đạt 100% yêu cầu |
| Báo cáo quản trị |
Thống kê số lượng trên web |
Kết xuất động ra file Excel định dạng .xlsx |
Đạt 100% yêu cầu |
Đổi mới và đóng góp
- Chuẩn hóa kiến trúc phân lớp hướng dịch vụ: Thay thế mô hình kết nối JDBC thuần phân mảnh bằng kiến trúc Spring MVC kết hợp Spring Data JPA. Điều này giúp giảm 45% lượng mã nguồn boilerplate (mã lặp lại) trong các thao tác CRUD cơ sở dữ liệu.
- Thiết kế quản lý biến thể sản phẩm (SKU Matrix) chi tiết: Thay vì lưu sản phẩm đơn lẻ, hệ thống tách bạch thực thể
product và product_detail (kết hợp memory, color). Thiết kế này cho phép quản lý chính xác số lượng tồn kho và giá bán chênh lệch theo từng phiên bản dung lượng/màu sắc.
- Cải thiện 55% tốc độ xử lý đơn hàng của quản trị viên: Nhờ tích hợp module xuất dữ liệu tự động với Apache POI, cán bộ quản lý kho không còn phải nhập liệu thủ công từng đơn hàng vào phần mềm kế toán.
- Cơ chế xác thực đa tầng an toàn: Tích hợp đầy đủ Spring Security Interceptors ngăn chặn hoàn toàn các kỹ thuật tấn công phổ biến như CSRF (Cross-Site Request Forgery) và Session Fixation.
Ứng dụng thực tế và triển khai
Kịch bản sử dụng thực tế (Use-Case Scenarios)
- Khách hàng cá nhân: Truy cập website trên điện thoại di động, sử dụng bộ lọc tìm smartphone Samsung có RAM 8GB giá dưới 10 triệu đồng, chọn phiên bản màu Đen, thêm vào giỏ hàng và đặt hàng nhận tại nhà chỉ qua 3 bước đơn giản mà không cần gọi điện xác nhận.
- Nhân viên quản lý (Manager): Cuối ngày đăng nhập vào phân hệ quản trị, xem danh sách 50 đơn hàng mới phát sinh, nhấn nút "Xuất Excel" để tải bảng kê chi tiết và bàn giao cho đơn vị vận chuyển.
+------------------------------------------------------------------------------------+
| MÔ HÌNH TRIỂN KHAI PRODUCTION |
| |
| [Client] ---> HTTPS (Port 443) ---> [Nginx Reverse Proxy & SSL] |
| | |
| Proxy Pass (Port 8080) |
| v |
| [Apache Tomcat 9.0] |
| (qa-mobile-app.war) |
| | |
| HikariCP Connection Pool |
| v |
| [MySQL Server 8.0] |
+------------------------------------------------------------------------------------+
Yêu cầu cấu hình hệ thống triển khai
| Thành phần |
Cấu hình tối thiểu (Development) |
Cấu hình đề xuất (Production SMB) |
| Hệ điều hành |
Windows 10 / Ubuntu 18.04 LTS |
Ubuntu Server 20.04 LTS / CentOS 8 |
| Vi xử lý (CPU) |
Intel Core i3 (2 Cores) |
4 vCPU (2.5GHz trở lên) |
| Bộ nhớ (RAM) |
4 GB |
8 GB - 16 GB |
| Lưu trữ |
20 GB HDD |
50 GB SSD (NVMe khuyến nghị) |
| Môi trường chạy |
OpenJDK 8/11, Tomcat 9, MySQL 8 |
OpenJDK 11, Tomcat 9.0.x, MySQL 8.0, Nginx |
Hiệu quả kinh tế và thời gian hoàn vốn (Cost-Benefit Analysis)
- Chi phí phát triển & vận hành: Tiết kiệm ~15.000.000 VNĐ/năm phí duy trì nền tảng SaaS bên thứ ba; chi phí hạ tầng máy chủ VPS tự quản trị chỉ khoảng 300.000 - 500.000 VNĐ/tháng.
- Thời gian hoàn vốn ước tính: 4 - 6 tháng thông qua việc cắt giảm chi phí trung gian sàn thương mại điện tử và tối ưu hóa 30% nhân sự trực tổng đài nhận đơn.
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ộ ứng dụng được đóng gói trong một file WAR duy nhất. Khi lưu lượng truy cập tăng đột biến ở module xem sản phẩm, toàn bộ hệ thống phải scale đồng thời thay vì scale cục bộ.
- Xử lý lưu trữ hình ảnh: Ảnh sản phẩm đang được lưu trữ trực tiếp trên thư mục máy chủ cục bộ (Local File System), chưa tích hợp dịch vụ lưu trữ đám mây phân tán chuyên dụng (Amazon S3 hoặc Cloudinary).
- Bộ nhớ đệm (Caching): Chưa áp dụng lớp cache bộ nhớ phân tán (như Redis/Memcached) cho các truy vấn danh mục sản phẩm tĩnh thường xuyên được đọc.
Kế hoạch nâng cấp và mở rộng
- Chuyển đổi sang Spring Boot & Microservices: Phân tách hệ thống thành các dịch vụ độc lập:
Auth-Service, Product-Catalog-Service, Order-Processing-Service kết nối qua Spring Cloud Gateway.
- Tích hợp cổng thanh toán trực tuyến: Triển khai tích hợp SDK cổng thanh toán nội địa (VNPay QR, ZaloPay, MoMo) với cơ chế xác thực chữ ký số bảo mật (Checksum/HMAC SHA256).
- Ứng dụng Elasticsearch & Redis Cache: Cải thiện tốc độ tìm kiếm văn bản tự do (Full-text search) và giảm 80% tải đọc CSDL cho các trang thông tin sản phẩm tĩnh.
Đối tượng hưởng lợi
+------------------------------------------------------------------------------------+
| ĐỐI TƯỢNG HƯỞNG LỢI |
| - Sinh viên CNTT: Nắm vững kiến trúc Spring MVC chuẩn, cấu hình bảo mật RBAC. |
| - Lập trình viên: Tái sử dụng mẫu thiết kế (Design Patterns), module POI/Mail. |
| - Doanh nghiệp SMB: Sở hữu website bán hàng độc lập, cắt giảm 8-14% phí sàn. |
| - Nhà nghiên cứu: Dữ liệu thực nghiệm về tối ưu truy vấn ORM trong TMĐT. |
+------------------------------------------------------------------------------------+
- Sinh viên chuyên ngành CNTT/Phần mềm: Tài liệu tham khảo trực quan, chi tiết về quy trình phân tích thiết kế hệ thống theo chuẩn UML, thiết kế CSDL thực tế và áp dụng Spring Framework chuẩn công nghiệp vào đồ án tốt nghiệp.
- Lập trình viên (Developers): Cung cấp các đoạn mã nguồn mẫu giải quyết các bài toán thực tế: Quản trị giao dịch
@Transactional, cấu hình Spring Security, xử lý bất đồng bộ JavaMail và thao tác xuất tệp tin Excel với Apache POI.
- Doanh nghiệp và Chủ cửa hàng kinh doanh: Giải pháp công nghệ thực tiễn giúp số hóa quy trình bán lẻ với chi phí tối ưu, quản lý chính xác tồn kho theo phiên bản phần cứng và nâng cao năng lực cạnh tranh số.
- Nhà nghiên cứu ứng dụng: Cung cấp số liệu thực nghiệm về năng lực chịu tải của hệ thống Spring MVC truyền thống khi so sánh với các kiến trúc mã nguồn mở khác.
Câu hỏi thường gặp
1. Yêu cầu cấu hình phần cứng và phần mềm tối thiểu để triển khai website là gì?
Hệ thống yêu cầu máy chủ cài đặt môi trường Java Runtime Environment (JRE) phiên bản 8 hoặc 11, máy chủ web Apache Tomcat 9.0.x và hệ quản trị CSDL MySQL 8.0 trở lên. Về phần cứng, cấu hình tối thiểu là 2 CPU Cores, 4GB RAM và 20GB dung lượng ổ cứng khả dụng.
2. Hệ thống xử lý thế nào khi xảy ra xung đột nhiều người cùng đặt một sản phẩm còn lại cuối cùng?
Hệ thống sử dụng cơ chế quản lý giao dịch @Transactional kết hợp kiểm tra số lượng tồn kho trực tiếp tại tầng Service trước khi lưu đơn hàng. Khi có 2 giao dịch đồng thời, giao dịch nào commit trước sẽ trừ tồn kho thành công; giao dịch thứ hai sẽ nhận ngoại lệ InsufficientStockException và kích hoạt cơ chế Rollback toàn bộ trạng thái mà không phát sinh đơn hàng ảo.
3. Làm thế nào để tích hợp thêm các cổng thanh toán online như VNPay hay MoMo vào hệ thống?
Để tích hợp cổng thanh toán, lập trình viên tạo thêm PaymentController tiếp nhận yêu cầu từ client, tạo URL thanh toán kèm mã hóa chữ ký số bảo mật (HMAC SHA512) theo tài liệu của nhà cung cấp. Sau đó, xây dựng endpoint /payment-return (IPN Webhook) để tiếp nhận phản hồi bất đồng bộ từ cổng thanh toán và cập nhật trạng thái đơn hàng sang PAID.
4. Hệ thống cần quy trình bảo trì định kỳ và sao lưu dữ liệu ra sao?
Cần thiết lập cron job tự động sao lưu CSDL MySQL hàng ngày (mysqldump) vào lúc 02:00 sáng và nén đẩy lên hạ tầng lưu trữ đám mây. Định kỳ hàng tháng tiến hành dọn dẹp các bản ghi session hết hạn và tối ưu hóa phân mảnh bảng dữ liệu (Optimize Table).
5. Chi phí ước tính và thời gian thu hồi vốn (ROI) khi cửa hàng đưa website vào hoạt động?
Với chi phí đầu tư ban đầu ước tính khoảng 10.000.000 - 15.000.000 VNĐ cho việc đăng ký tên miền, chứng chỉ SSL và thuê máy chủ VPS năm đầu tiên, cửa hàng có thể tiết kiệm trực tiếp 8% - 14% phí hoa hồng sàn thương mại điện tử trên mỗi đơn hàng. Thời gian hoàn vốn trung bình đạt từ 4 đến 6 tháng đối với cửa hàng có doanh số từ 100 triệu VNĐ/tháng.
Kết luận
Khóa luận tốt nghiệp "Thiết kế website bán điện thoại di động" của tác giả Hồ Quốc Anh (Đại học Quảng Nam) đã giải quyết toàn diện bài toán chuyển đổi số và tự động hóa quy trình kinh doanh cho các cửa hàng bán lẻ thiết bị di động. Đề tài không chỉ hoàn thành xuất sắc các mục tiêu nghiên cứu lý thuyết mà còn xây dựng thành công một sản phẩm phần mềm hoàn chỉnh, có tính ứng dụng thực tiễn cao trên nền tảng công nghệ Java Spring MVC, Spring Security và MySQL.
Dự án cung cấp một kiến trúc chuẩn mực, đảm bảo hiệu năng xử lý ổn định, khả năng bảo mật đa tầng và giao diện thân thiện với người dùng cuối. Đây là nền tảng vững chắc để tiếp tục mở rộng thành hệ thống phân tán đa dịch vụ (Microservices), tích hợp trí tuệ nhân tạo trong cá nhân hóa trải nghiệm mua sắm và kết nối toàn diện với các dịch vụ thanh toán, logistics hiện đại trong kỷ nguyên số.