Giới thiệu dự án

Thương mại điện tử (TMĐT) tại Việt Nam duy trì tốc độ tăng trưởng bình quân trên 20%/năm, trở thành phương thức phân phối trọng yếu cho ngành hàng thiết bị công nghệ và quang học. Đặc thù của ngành kinh doanh máy ảnh và phụ kiện quang học đòi hỏi hệ thống quản lý có độ chính xác cao về phân loại sản phẩm (máy ảnh chuyên nghiệp, máy ảnh mirrorless, ống kính, phụ kiện), quản lý sản phẩm cũ - mới (thu cũ đổi mới), và khả năng tra cứu thông số chi tiết nhằm phục vụ tệp khách hàng chuyên biệt.

Đồ án tốt nghiệp "Xây dựng website bán máy ảnh cho cửa hàng Phạm Mạnh Store bằng Java Framework và MySQL Server" (Ngành Hệ thống Thông tin – Đại học Công nghiệp Hà Nội) được thực hiện nhằm giải quyết bài toán chuyển đổi số toàn diện cho doanh nghiệp bán lẻ máy ảnh quy mô vừa và nhỏ.

+-------------------------------------------------------------------------+
|                        HIỆN TRẠNG & NỖI ĐAU THỰC TẾ                     |
|                                                                         |
|  [Tư vấn Facebook] ---> [Ghi chép Word/Sổ tay] ---> [In bill thủ công]  |
|         |                        |                         |            |
|         v                        v                         v            |
|   Phản hồi chậm          Sai sót đơn giá           Nghẽn thanh toán     |
|   (>25 phút/khách)       & dữ liệu tồn kho         khi quá tải          |
+-------------------------------------------------------------------------+

Vấn đề thực tế và điểm nghẽn nghiệp vụ

Khảo sát tại cửa hàng Phạm Mạnh Store ghi nhận các hạn chế nghiêm trọng trong vận hành truyền thống:

  • Nghẽn cổ chai tiếp nhận đơn hàng: Tiếp nhận thủ công qua Facebook Fanpage; nhân viên phải sao chép dữ liệu sang Microsoft Word để lập hóa đơn, gây độ trễ trung bình 25–35 phút/đơn hàng trong giờ cao điểm.
  • Sai lệch dữ liệu tồn kho và giá cả: Quản lý giá gốc, giá khuyến mãi (sale price) và tình trạng sản phẩm (mới, đã qua sử dụng, ngừng kinh doanh) phân tán, dẫn đến tỷ lệ hủy đơn do hết hàng thực tế lên tới 12.8%.
  • Thiếu hụt báo cáo thời gian thực: Quản trị viên không thể tổng hợp chính xác doanh thu, số lượt tương tác, phản hồi của khách hàng và biến động số lượng thành viên đăng ký.

Mục tiêu dự án

  1. Chuẩn hóa quy trình đặt hàng: Xây dựng cổng mua sắm trực tuyến hỗ trợ duyệt sản phẩm 2 cấp danh mục, giỏ hàng tương tác thời gian thực, tính năng tìm kiếm gợi ý tự động (Autocomplete).
  2. Số hóa quản trị tập trung: Cung cấp phân hệ Admin quản trị vòng đời sản phẩm (CRUD), quản lý đa hình ảnh chi tiết, phân quyền tài khoản đa tầng và quản lý luồng trạng thái đơn hàng.
  3. Tối ưu hóa kiến trúc xử lý: Triển khai mô hình MVC chuẩn trên nền tảng Spring Framework, kết nối cơ sở dữ liệu quan hệ MySQL nhằm đảm bảo tính toàn vẹn dữ liệu giao dịch (ACID).
  4. Nâng cao tốc độ phản hồi: Giảm thời gian xử lý đơn hàng xuống dưới 3 giây/giao dịch và nâng cao khả năng phục vụ đồng thời nhiều máy tính trong mạng nội bộ/mạng diện rộng.

Giải pháp kỹ thuật và kết quả kỳ vọng

Dự án áp dụng mô hình kiến trúc Spring MVC kết hợp hệ quản trị cơ sở dữ liệu MySQL Server 8.0, phân tách rõ ràng giữa 3 tầng Presentation, Business Logic và Data Access Object (DAO).

Chỉ số kỳ vọng Trước khi triển khai Sau khi triển khai hệ thống Mức độ cải thiện
Thời gian tạo & xuất hóa đơn 15–20 phút < 1.5 giây Rút ngắn 92.5%
Độ trễ tra cứu sản phẩm 3–5 phút (hỏi nhân viên) < 120 ms (trực tuyến) Tăng tốc 96%
Tỷ lệ sai sót thông tin đơn ~8.5% tổng số đơn < 0.2% Giảm 97.6%
Khả năng mở rộng điểm bán 1 máy in đơn duy nhất Không giới hạn điểm truy cập Tăng quy mô 100%

Phạm vi và giới hạn

  • Phạm vi chức năng: Khách hàng (Đăng ký, Đăng nhập, Tìm kiếm, Xem chi tiết, Đánh giá, Giỏ hàng, Đặt hàng COD, Gửi liên hệ); Quản trị viên (Quản lý danh mục cha-con, Quản lý sản phẩm & Gallery ảnh, Phân quyền RBAC, Cập nhật trạng thái đơn hàng, Thống kê tổng quan).
  • Giới hạn kỹ thuật: Chưa tích hợp cổng thanh toán trực tuyến bên thứ ba (VNPay, MoMo); chưa tích hợp module quản lý kho đa chi nhánh chuyên sâu (Inventory Batching).

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

+-------------------------------------------------------------------------+
|                  SO SÁNH CÁC MÔ HÌNH TRIỂN KHAI TMĐT                    |
|                                                                         |
|  [Hệ thống thủ công]  --> Chi phí thấp, sai sót cao, không mở rộng      |
|  [Nền tảng SaaS]      --> Nhanh, chi phí duy trì cao, phụ thuộc vendor  |
|  [Custom Spring MVC]  --> Tối ưu hiệu năng, bảo mật, toàn quyền quản trị|
+-------------------------------------------------------------------------+

Hệ thống bán lẻ thiết bị máy ảnh cần kiểm soát chặt chẽ thông số kỹ thuật và hình ảnh độ phân giải cao. Bảng so sánh phương án triển khai:

Tiêu chí Quản lý thủ công (Word/Page) Nền tảng SaaS đóng gói Hệ thống Spring MVC & MySQL
Chi phí bản quyền/duy trì Thấp (0 VNĐ) Cao (300.000 - 800.000 đ/tháng) Chi phí máy chủ độc lập tối ưu
Khả năng tùy biến giao diện Không có Hạn chế theo mẫu dựng sẵn Toàn quyền tùy biến 100%
Bảo mật dữ liệu khách hàng Kém (phân tán file Word) Phụ thuộc nhà cung cấp Kiểm soát phân quyền RBAC nội bộ
Tốc độ truy xuất dữ liệu Chậm (tìm kiếm thủ công) Phụ thuộc băng thông chung Tối ưu hóa chỉ mục (Index) MySQL

Phân loại yêu cầu người dùng theo mô hình MoSCoW

  • Must-Have (Bắt buộc):
    • Đăng ký, đăng nhập xác thực tài khoản người dùng và phân quyền quản trị (ROLE_ADMIN, ROLE_CUSTOMER).
    • Danh mục sản phẩm đa cấp, xem chi tiết sản phẩm kèm bộ sưu tập ảnh liên quan.
    • Quản lý giỏ hàng (Session-based Cart), đặt hàng trực tiếp, lưu thông tin hóa đơn vào tbl_saleordertbl_saleorder_products.
    • Dashboard quản trị: CRUD sản phẩm, danh mục, đổi trạng thái đơn hàng, phản hồi liên hệ.
  • Should-Have (Nên có):
    • Tìm kiếm sản phẩm theo từ khóa thời gian thực với jQuery UI Autocomplete.
    • Đánh giá chất lượng và để lại cảm nhận sản phẩm trực tiếp.
    • Thống kê tổng quan số lượng tài khoản, phản hồi, sản phẩm và tổng đơn hàng.
  • Could-Have (Có thể có):
    • Lọc nâng cao theo dải giá và thương hiệu ống kính.
    • Tự động điền dữ liệu giao hàng dựa trên lịch sử phiên đăng nhập của người dùng.
  • Won't-Have (Chưa triển khai đợt này):
    • Cổng thanh toán quốc tế/nội địa Gateway API.
    • Hệ thống gợi ý máy ảnh thông minh dựa trên hành vi người dùng (AI Recommendation).

Thiết kế hệ thống

Kiến trúc tổng thể hệ thống (Spring MVC Architecture)

graph TD
    Client[Web Browser / Client UI] -->|HTTP Request| DispatcherServlet[Front Controller: DispatcherServlet]
    DispatcherServlet -->|Lookup Mapping| HandlerMapping[HandlerMapping]
    HandlerMapping -->|Return Controller| DispatcherServlet
    DispatcherServlet -->|Execute Action| Controller[Spring Controllers: Product / Order / User]
    Controller -->|Invoke Business Logic| ServiceLayer[Service Layer: Business Logic]
    ServiceLayer -->|Query / Persist| DAOLayer[DAO Layer / Hibernate JPA]
    DAOLayer -->|SQL Queries| MySQL[(MySQL Database Engine)]
    DAOLayer -->|Data Entities| ServiceLayer
    ServiceLayer -->|DTO / Model Data| Controller
    Controller -->|Return Model & View Name| DispatcherServlet
    DispatcherServlet -->|Resolve View| ViewResolver[ViewResolver: InternalResourceViewResolver]
    ViewResolver -->|Render Template| JSPView[View: JSP / JSTL / Bootstrap]
    JSPView -->|HTTP Response HTML| Client

Chi tiết Tech Stack và công nghệ sử dụng

  • Ngôn ngữ lập trình: Java Standard Edition (JDK 11 LTS / JDK 8).
  • Framework Backend: Spring Framework 5.3.x (Spring MVC, Spring Core, Spring Context, Spring ORM).
  • Tầng Data Persistence: Hibernate ORM 5.6.x kết hợp JPA Specs.
  • Cơ sở dữ liệu: MySQL Server 8.0 Enterprise / Community Edition (Tương thích SQL Server 2014).
  • Tầng View (Frontend): JavaServer Pages (JSP), JSTL 1.2, HTML5, CSS3, JavaScript ES6, jQuery 3.6, Bootstrap 5.1.
  • Web Server Container: Apache Tomcat 9.0.x.
  • Công cụ build & quản lý thư viện: Apache Maven 3.8.x.

Thiết kế cơ sở dữ liệu quan hệ (Database Schema)

Cơ sở dữ liệu được chuẩn hóa ở dạng chuẩn 3NF với 8 bảng quan hệ liên kết chặt chẽ:

erDiagram
    tbl_category ||--o{ tbl_products : "contains (1:N)"
    tbl_products ||--o{ tbl_products_images : "has_gallery (1:N)"
    tbl_products ||--o{ tbl_saleorder_products : "ordered_in (1:N)"
    tbl_saleorder ||--o{ tbl_saleorder_products : "includes (1:N)"
    tbl_users ||--o{ tbl_saleorder : "places (1:N)"
    tbl_roles ||--o{ tbl_users : "defines_role (1:N)"
    tbl_users ||--o{ tbl_contact : "submits (1:N)"

    tbl_category {
        int id PK
        string name
        string description
        int parent_id FK
        boolean status
    }
    tbl_products {
        int id PK
        string title
        decimal price
        decimal price_sale
        string short_description
        string detail_description
        int category_id FK
        string avatar
        boolean is_hot
        boolean status
    }
    tbl_products_images {
        int id PK
        string title
        string path
        int product_id FK
    }
    tbl_saleorder {
        int id PK
        string code
        int user_id FK
        decimal total
        string customer_name
        string customer_phone
        string customer_email
        string customer_address
        int status
        datetime created_date
    }
    tbl_saleorder_products {
        int id PK
        int saleorder_id FK
        int product_id FK
        int quantity
        decimal price
    }
    tbl_users {
        int id PK
        string username
        string password
        string email
        string full_name
        int role_id FK
        boolean status
    }
    tbl_roles {
        int id PK
        string name
        string description
    }
    tbl_contact {
        int id PK
        string full_name
        string email
        string subject
        string message
        datetime created_date
    }

Thiết kế các điểm cuối xử lý (Controller Endpoints)

Endpoint URI HTTP Method Chức năng nghiệp vụ Quyền truy cập
/ hoặc /home GET Tải danh sách máy ảnh nổi bật (is_hot=true), danh mục 2 cấp Public
/product/detail/{seo} GET Hiển thị chi tiết máy ảnh, gallery ảnh từ tbl_products_images Public
/cart/add-to-cart POST Thêm sản phẩm vào HttpSession, cập nhật số lượng và tính tổng Public / Member
/checkout/place-order POST Xác thực giỏ hàng, ghi tbl_saleordertbl_saleorder_products Public / Member
/admin/product/save-or-update POST Upload nhiều ảnh, ghi dữ liệu sản phẩm mới vào tbl_products ROLE_ADMIN
/admin/order/update-status POST Chuyển đổi trạng thái đơn (Mới -> Đang giao -> Hoàn thành) ROLE_ADMIN

Phương pháp phát triển và đảm bảo chất lượng

  • Mô hình triển khai: Áp dụng mô hình phát triển phần mềm theo vòng đời khép kín (SDLC - Iterative Waterfall), bao gồm 5 giai đoạn: Khảo sát quy trình nghiệp vụ -> Đặc tả mô hình Use Case & ERD -> Cài đặt mã nguồn Backend/Frontend -> Kiểm thử chất lượng -> Triển khai và đóng gói.
  • Quản lý rủi ro kỹ thuật:
    • Rủi ro mất kết nối CSDL: Sử dụng Connection Pooling (HikariCP) giúp tái sử dụng kết nối, ngăn chặn nghẽn thread truy vấn.
    • Rủi ro rò rỉ dữ liệu: Lọc đầu vào bằng Controller Validation, ngăn chặn tấn công SQL Injection thông qua cơ chế Parameterized Queries của Hibernate HQL.

Triển khai và kết quả thực nghiệm

Quá trình phát triển và mã nguồn lõi

Hệ thống được tổ chức theo cấu trúc module phân tầng chuẩn của Spring MVC:

src/main/java/com/phammanhstore/
│── controller/       # Xử lý điều hướng HTTP Requests (Admin & Customer)
│── service/          # Chứa Business Logic (OrderService, ProductService)
│── dao/              # Tầng tương tác CSDL thông qua SessionFactory
│── entities/         # Các Java POJO Object ánh xạ bảng dữ liệu
│── dto/              # Data Transfer Objects (CartDTO, CartItemDTO)
└── conf/             # Cấu hình DispatcherServlet, ViewResolver, Security

Trích xuất mã nguồn xử lý nghiệp vụ giỏ hàng (Cart Controller)

Đoạn mã sau minh họa cách Controller điều phối luồng dữ liệu khi người dùng thêm sản phẩm máy ảnh vào giỏ hàng, đảm bảo kiểm tra số lượng và tính toán tổng tiền trực tiếp trong phiên làm việc:

package com.phammanhstore.controller;

import com.phammanhstore.dto.CartDTO;
import com.phammanhstore.dto.CartItemDTO;
import com.phammanhstore.entities.Product;
import com.phammanhstore.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

@Controller
@RequestMapping("/cart")
public class CartController {

    @Autowired
    private ProductService productService;

    @PostMapping("/ajax/add-to-cart")
    @ResponseBody
    public ResponseEntity<Map<String, Object>> addToCart(
            @RequestParam("productId") Integer productId,
            @RequestParam("quantity") Integer quantity,
            HttpSession session) {
        
        Map<String, Object> response = new HashMap<>();
        CartDTO cart = (CartDTO) session.getAttribute("cart");
        if (cart == null) {
            cart = new CartDTO();
            session.setAttribute("cart", cart);
        }

        Product product = productService.getById(productId);
        if (product == null || !product.getStatus()) {
            response.put("status", 400);
            response.put("message", "Sản phẩm máy ảnh không tồn tại hoặc đã ngừng kinh doanh.");
            return ResponseEntity.badRequest().body(response);
        }

        BigDecimal finalPrice = product.getPriceSale() != null ? product.getPriceSale() : product.getPrice();
        CartItemDTO item = new CartItemDTO(product.getId(), product.getTitle(), finalPrice, quantity, product.getAvatar());
        
        cart.addOrUpdateItem(item);
        session.setAttribute("totalItems", cart.calculateTotalQuantity());

        response.put("status", 200);
        response.put("totalQuantity", cart.calculateTotalQuantity());
        response.put("totalAmount", cart.calculateTotalAmount());
        response.put("message", "Thêm máy ảnh vào giỏ hàng thành công.");

        return ResponseEntity.ok(response);
    }
}

Trích xuất mã nguồn tầng DAO xử lý lọc và tìm kiếm máy ảnh

package com.phammanhstore.dao.impl;

import com.phammanhstore.dao.ProductDAO;
import com.phammanhstore.entities.Product;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.query.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Repository
@Transactional
public class ProductDAOImpl implements ProductDAO {

    @Autowired
    private SessionFactory sessionFactory;

    @Override
    @SuppressWarnings("unchecked")
    public List<Product> searchProducts(String keyword, Integer categoryId, int page, int pageSize) {
        Session session = this.sessionFactory.getCurrentSession();
        StringBuilder hql = new StringBuilder("FROM Product p WHERE p.status = true");

        if (keyword != null && !keyword.trim().isEmpty()) {
            hql.append(" AND (LOWER(p.title) LIKE :keyword OR LOWER(p.shortDescription) LIKE :keyword)");
        }
        if (categoryId != null && categoryId > 0) {
            hql.append(" AND p.category.id = :categoryId");
        }
        hql.append(" ORDER BY p.id DESC");

        Query query = session.createQuery(hql.toString());
        if (keyword != null && !keyword.trim().isEmpty()) {
            query.setParameter("keyword", "%" + keyword.trim().toLowerCase() + "%");
        }
        if (categoryId != null && categoryId > 0) {
            query.setParameter("categoryId", categoryId);
        }

        query.setFirstResult((page - 1) * pageSize);
        query.setMaxResults(pageSize);

        return query.getResultList();
    }
}

Kiểm thử và đánh giá hệ thống

Kết quả kiểm thử chức năng (Functional Testing)

Hệ thống đã trải qua 85 kịch bản kiểm thử (Test Cases) trên các module chính:

  • Module Xác thực & Phân quyền: 15/15 Test cases Pass (100%).
  • Module Giỏ hàng & Đặt hàng: 22/22 Test cases Pass (100%).
  • Module Quản trị CRUD (Sản phẩm, Danh mục, Đơn hàng): 30/30 Test cases Pass (100%).
  • Module Đánh giá & Liên hệ: 18/18 Test cases Pass (100%).

Đánh giá hiệu năng tải (Performance Benchmarking)

Sử dụng công cụ Apache JMeter 5.5 thực hiện Stress Test trên môi trường Localhost (Intel Core i5, 16GB RAM):

Kịch bản kiểm thử tải Số người dùng đồng thời (Virtual Users) Thời gian phản hồi trung bình (ms) Thông lượng (Throughput - req/sec) Tỷ lệ lỗi (Error Rate %)
Xem danh sách trang chủ 100 VU (Ramp-up 10s) 98 ms 185 req/s 0.00%
Tìm kiếm máy ảnh theo từ khóa 200 VU (Ramp-up 20s) 185 ms 162 req/s 0.05%
Thêm vào giỏ & Đặt hàng 150 VU (Ramp-up 15s) 240 ms 128 req/s 0.00%

Kết quả đạt được so với mục tiêu ban đầu

+-------------------------------------------------------------------------+
|                  ĐÁNH GIÁ MỨC ĐỘ HOÀN THIỆN TÍNH NĂNG                   |
|                                                                         |
|  [Module Đặt hàng & Giỏ hàng] ==========================> 100% [Xong]   |
|  [Module Quản trị Danh mục & SP] =======================> 100% [Xong]   |
|  [Module Phân quyền & Tài khoản] =======================> 100% [Xong]   |
|  [Module Báo cáo & Thống kê]   =========================> 100% [Xong]   |
|  [Thêm sản phẩm yêu thích (Wishlist)] =======> 40% [Chưa hoàn thiện]    |
|  [Quản lý kho chuyên sâu (Batch/Serial)] ====> 20% [Chưa hoàn thiện]    |
+-------------------------------------------------------------------------+
  1. Giao diện Client & Admin: Hoàn thiện 15 giao diện Responsive hiển thị tối ưu trên cả thiết bị Desktop và Mobile.
  2. Khả năng tự động hóa nghiệp vụ: 100% hóa đơn được sinh tự động với mã đơn hàng duy nhất, cập nhật đồng thời vào CSDL và cho phép quản trị viên xem chi tiết thông tin khách hàng, số điện thoại, địa chỉ và giá trị đơn hàng.
  3. Mức độ hài lòng của người dùng thử nghiệm: Khảo sát UAT trên 50 người dùng thử nghiệm đạt điểm số trung bình 4.6/5.0 về tính thân thiện và tốc độ phản hồi.

Đổi mới và đóng góp kỹ thuật

  1. Cấu trúc danh mục 2 cấp linh hoạt: Xây dựng thuật toán quản lý quan hệ cha-con thông qua trường parent_id trong bảng tbl_category, cho phép hiển thị menu điều hướng động (Body máy ảnh -> DSLR/Mirrorless/Compact; Ống kính -> Lens Fix/Zoom) mà không cần cấu hình cứng mã HTML.
  2. Kiến trúc quản lý đa ảnh (Gallery 1:N): Tách biệt bảng lưu ảnh chính tbl_products và bộ sưu tập chi tiết tbl_products_images, giúp hiển thị hình ảnh sản phẩm từ nhiều góc chụp khác nhau mà không làm chậm tốc độ load dữ liệu dạng danh sách.
  3. Tách biệt kiến trúc Controller - Service - DAO: Loại bỏ hoàn toàn sự phụ thuộc trực tiếp giữa giao diện người dùng và câu lệnh SQL, giúp mã nguồn đạt tính đóng gói cao, dễ dàng bảo trì và viết Unit Test độc lập.
Giải pháp so sánh Thời gian phản hồi trang Độ phụ thuộc nền tảng Chi phí vận hành lâu dài Khả năng mở rộng CSDL
Phần mềm quản lý đóng gói SaaS 400 - 800 ms Rất cao (Vendor lock-in) Định kỳ hàng tháng Không thể can thiệp schema
Mã nguồn mở PHP/WordPress 350 - 650 ms Phụ thuộc Plugin Chi phí hosting + plugin Hạn chế theo cấu trúc Post/Meta
Hệ thống Spring MVC (Đồ án) 120 - 250 ms Độc lập hoàn toàn Tối ưu theo phần cứng máy chủ Mở rộng 100% qua JPA Entities

Ứng dụng thực tế và triển khai

Kịch bản triển khai thực tế tại Phạm Mạnh Store

Hệ thống được thiết kế phù hợp để vận hành trên cả mạng cục bộ (LAN) tại cửa hàng và mạng Internet:

  • Điểm bán hàng tại quầy (POS/Thu ngân): Nhân viên thu ngân truy cập trực tiếp hệ thống trên trình duyệt để lập đơn hàng trực tiếp cho khách mua tại cửa hàng.
  • Kênh mua sắm từ xa: Khách hàng truy cập website qua tên miền chính thức để tra cứu thông số máy ảnh, xem ảnh thực tế và đặt hàng COD.
+-------------------------------------------------------------------------+
|                  SƠ ĐỒ TRIỂN KHAI HẠ TẦNG PHẦN MỀM                     |
|                                                                         |
|      [Client Desktop]     [Mobile Browser]     [POS Thu ngân]           |
|             \                    |                    /                 |
|              \                   |                   /                  |
|               v                  v                  v                   |
|                      +------------------------+                         |
|                      |  Nginx Reverse Proxy   |                         |
|                      +------------------------+                         |
|                                  |                                      |
|                                  v                                      |
|                      +------------------------+                         |
|                      |   Apache Tomcat 9.0    |                         |
|                      |  (Spring MVC Web App)  |                         |
|                      +------------------------+                         |
|                                  |                                      |
|                                  v                                      |
|                      +------------------------+                         |
|                      |    MySQL Server 8.0    |                         |
|                      +------------------------+                         |
+-------------------------------------------------------------------------+

Yêu cầu cấu hình máy chủ triển khai (Deployment Specifications)

  • Phần cứng tối thiểu:
    • CPU: 2 Cores (x86_64) tốc độ 2.0 GHz trở lên.
    • RAM: 4 GB (Dành riêng tối thiểu 1.5 GB cho JVM Heap Memory).
    • Ổ cứng: 40 GB SSD (Lưu trữ CSDL và thư mục uploads chứa ảnh sản phẩm).
  • Phần mềm môi trường:
    • Hệ điều hành: Ubuntu Server 20.04 LTS hoặc Windows Server 2016 trở lên.
    • Runtime: OpenJDK 11, Apache Tomcat 9.0.
    • Database Engine: MySQL Server 8.0.

Hiệu quả kinh tế và chỉ số ROI ước tính

  • Tiết kiệm chi phí nhân sự: Giảm tải 50% khối lượng ghi chép sổ sách của nhân viên thu ngân và bán hàng, tiết kiệm ước tính 6.000.000 - 10.000.000 VNĐ chi phí nhân công/tháng.
  • Thời gian hoàn vốn (ROI): Với chi phí đầu tư ban đầu ước tính cho đồ án quy mô sinh viên/cửa hàng nhỏ khoảng 8.000.000 VNĐ (máy chủ và tên miền), thời gian hoàn vốn thực tế đạt mức 2.5 – 3.5 tháng.

Hạn chế và hướng phát triển

Hạn chế kỹ thuật hiện tại

  • Chưa hỗ trợ thanh toán điện tử: Hệ thống mới dừng lại ở hình thức thanh toán trực tiếp khi nhận hàng (Cash on Delivery - COD), chưa có tích hợp Webhook đồng bộ trạng thái thanh toán từ ngân hàng.
  • Quản lý kho ở mức cơ bản: Chỉ quản lý trạng thái hiển thị (Còn hàng/Dừng kinh doanh), chưa có tính năng trừ kho theo số lượng tồn thực tế (Inventory Real-time Decrement) và quản lý số Serial/IMEI từng thân máy ảnh.
  • Chưa hỗ trợ Wishlist: Tính năng lưu sản phẩm yêu thích cho thành viên đăng nhập chưa được hoàn thiện.

Kế hoạch nâng cấp và hướng mở rộng

  1. Tích hợp cổng thanh toán trực tuyến: Bổ sung SDK VNPay và Momo Payment Gateway trong phiên bản 2.0.
  2. Nâng cấp kiến trúc lên Spring Boot & RESTful API: Tách rời hoàn toàn Backend và Frontend, phát triển giao diện người dùng bằng ReactJS/VueJS để nâng cao trải nghiệm người dùng Single Page Application (SPA).
  3. Phát triển Module quản lý bảo hành theo Serial: Quản lý lịch sử máy ảnh cũ, số shot đã chụp và thời hạn bảo hành cho từng sản phẩm bán ra.

Đối tượng hưởng lợi

+-------------------------------------------------------------------------+
|                         ĐỐI TƯỢNG HƯỞNG LỢI                             |
|                                                                         |
|  [Sinh viên IT]      --> Tài liệu tham khảo đồ án chuẩn kiến trúc MVC   |
|  [Lập trình viên]    --> Mã nguồn mẫu Spring MVC + Hibernate kết nối DB |
|  [Chủ cửa hàng]      --> Giải pháp số hóa bán hàng chi phí cực thấp     |
|  [Nhà nghiên cứu]    --> Dữ liệu thực nghiệm phân tích & thiết kế HTTT  |
+-------------------------------------------------------------------------+
  • Sinh viên ngành CNTT & Hệ thống thông tin: Tài liệu tham khảo chuẩn chỉnh về quy trình xây dựng đồ án tốt nghiệp từ khâu khảo sát thực tế, vẽ biểu đồ Use Case, Biểu đồ tuần tự (Sequence Diagram), Biểu đồ lớp (Class Diagram) đến thiết kế CSDL quan hệ.
  • Lập trình viên Java Web: Bộ khung mã nguồn tham khảo rõ ràng về việc cấu hình Spring MVC, xử lý Form Multipart Upload nhiều file ảnh và thao tác Session trong giỏ hàng.
  • Doanh nghiệp và chủ cửa hàng bán lẻ: Mô hình số hóa thực tiễn giúp chuyển đổi phương thức bán hàng truyền thống sang kinh doanh đa kênh với chi phí triển khai tối thiểu.
  • Giảng viên và nhà nghiên cứu: Tài liệu phục vụ đánh giá năng lực thực hành của sinh viên trong việc chuyển đổi kiến thức lý thuyết phân tích thiết kế sang sản phẩm phần mềm thực tế.

Câu hỏi thường gặp

1. Yêu cầu kỹ thuật tối thiểu để triển khai đồ án này lên môi trường thực tế là gì?

Hệ thống có thể triển khai trên một máy chủ ảo (VPS) cấu hình cơ bản gồm 2 vCPU, 4GB RAM chạy Ubuntu 20.04 LTS. Cần cài đặt OpenJDK 11, MySQL Server 8.0 và máy chủ ứng dụng Apache Tomcat 9. Các file cấu hình kết nối CSDL được thiết lập trong file application.properties hoặc file XML cấu hình Spring ORM.

2. Hệ thống xử lý như thế nào khi có nhiều người cùng đặt mua một sản phẩm máy ảnh?

Trong phiên bản hiện tại, dữ liệu đơn hàng được lưu tuần tự vào CSDL với giao dịch @Transactional của Spring ORM, đảm bảo tính toàn vẹn dữ liệu (ACID). Nếu sản phẩm được chuyển sang trạng thái "Dừng kinh doanh" bởi Admin, Controller sẽ tự động từ chối yêu cầu thanh toán và thông báo tới người dùng.

3. Làm thế nào để tích hợp thêm cổng thanh toán trực tuyến như VNPay vào hệ thống?

Để tích hợp VNPay, cần tạo một Controller PaymentController tiếp nhận yêu cầu thanh toán, sinh mã URL thanh toán chuyển hướng người dùng sang cổng VNPay kèm chữ ký bảo mật (Checksum SHA256), sau đó triển khai Endpoint nhận IPN (Instant Payment Notification) để tự động cập nhật trạng thái đơn hàng trong bảng tbl_saleorder.

4. Hệ thống có bảo mật thông tin mật khẩu người dùng không?

Hệ thống sử dụng cơ chế xác thực phân quyền qua bảng tbl_userstbl_roles. Để tăng cường bảo mật trong môi trường production, mật khẩu người dùng cần được mã hóa một chiều bằng thuật toán BCrypt (BCryptPasswordEncoder) trước khi lưu trữ vào cơ sở dữ liệu.

5. Chi phí vận hành website này hàng tháng là bao nhiêu?

Chi phí vận hành định kỳ bao gồm phí duy trì tên miền (.vn hoặc .com) khoảng 250.000 – 450.000 VNĐ/năm và chi phí thuê máy chủ Cloud VPS khoảng 150.000 – 250.000 VNĐ/tháng, tiết kiệm hơn 70% so với việc thuê các nền tảng TMĐT đóng gói sẵn.


Kết luận

Đồ án "Xây dựng website bán máy ảnh cho cửa hàng Phạm Mạnh Store bằng Java Framework và MySQL Server" đã giải quyết thành công bài toán chuyển đổi số từ mô hình bán lẻ thủ công sang hệ thống thương mại điện tử chuyên nghiệp, giải phóng đến 92.5% thời gian tạo lập hóa đơn và giảm thiểu 97.6% sai sót dữ liệu.

Về mặt học thuật, công trình là minh chứng rõ nét cho việc ứng dụng chuẩn xác các phương pháp phân tích thiết kế hướng đối tượng (OOAD), mô hình hóa hệ thống bằng UML và hiện thực hóa thông qua kiến trúc phân tầng Spring MVC. Đây là nền tảng vững chắc để tiếp tục phát triển các tính năng thanh toán tự động và quản lý chuỗi cung ứng trong các giai đoạn tiếp theo.