Giới thiệu dự án

Theo thống kê từ Bộ Thông tin và Truyền thông kết hợp với khảo sát ngành xuất bản, tỷ lệ người Việt Nam duy trì thói quen đọc sách thường xuyên chỉ đạt khoảng 30%, trong khi 44% thỉnh thoảng mới đọc và 26% hoàn toàn không có thói quen đọc sách. Mặc dù thương mại điện tử (TMĐT) tại Việt Nam tăng trưởng vượt bậc với tốc độ trên 25%/năm, thị trường sách trực tuyến vẫn gặp rào cản lớn do trải nghiệm tìm kiếm phân mảnh, tình trạng "quá tải thông tin" (Information Overload) và sự thiếu hụt các cơ chế cá nhân hóa nội dung phù hợp với thị hiếu độc giả.

Đồ án tốt nghiệp "Phát triển website bán sách kết hợp hệ thống hỗ trợ gợi ý (Recommendation System)" được thực hiện bởi nhóm sinh viên Nguyễn Trần Trung Kiên và Đặng Thanh Thế dưới sự hướng dẫn của TS. Lê Vĩnh Thịnh tại Trường Đại học Sư phạm Kỹ thuật TP. Hồ Chí Minh (HCMUTE), nhằm giải quyết bài toán tối ưu hóa trải nghiệm mua sắm và đọc sách đa kênh.

graph TD
    Client[Client Browser: ReactJS SPA] -->|HTTPS / RESTful API| Gateway[ASP.NET Core 3.1 Backend API]
    Gateway -->|ORM / Queries| DB[(MS SQL Server 2019)]
    Gateway -->|Internal HTTP Call| RecService[Python Recommendation Engine: Flask/SVD/Cosine]
    RecService -->|Fetch Behavior Data| DB
    Gateway -->|Payment Gateway API| Payment[PayPal / Credit Card]

Mục tiêu đề tài

  1. Nghiên cứu & Thiết kế hệ thống TMĐT: Khảo sát nghiệp vụ bán lẻ sách truyền thống và kỹ thuật số (EBook), chuẩn hóa quy trình thanh toán tích hợp đa kênh (COD, Thẻ tín dụng, PayPal).
  2. Xây dựng kiến trúc phân tầng hiện đại: Triển khai Backend RESTful API bằng ASP.NET Core 3.1, kết hợp kiến trúc Single Page Application (SPA) trên nền tảng ReactJS.
  3. Phát triển thuật toán gợi ý (Recommendation System): Ứng dụng kết hợp Content-based Filtering (Cosine Similarity) và Collaborative Filtering (Singular Value Decomposition - SVD) trên nền Python để đưa ra gợi ý sách cá nhân hóa theo thời gian thực.
  4. Tích hợp tính năng đọc EBook trực tuyến: Cung cấp cơ chế phân quyền, thuê và đọc sách điện tử với chi phí tối ưu trực tiếp trên trình duyệt.

Giải pháp và Phạm vi

  • Phương pháp tiếp cận: Tách biệt giao diện người dùng (Frontend), lõi xử lý nghiệp vụ (Core Business Backend) và dịch vụ trí tuệ nhân tạo (AI Recommendation Microservice) để đảm bảo tính module hóa cao (High Cohesion, Loose Coupling).
  • Chỉ số kỳ vọng: Thời gian phản hồi API dưới 200ms, độ chính xác gợi ý (Top-5 recommendation precision) đạt trên 78%, độ phủ kiểm thử đơn vị (Unit Test Coverage) đạt >80%.
  • Phạm vi & Giới hạn: Hệ thống tập trung vào phân khúc bán lẻ sách in và cho thuê EBook tại thị trường Việt Nam; chưa hỗ trợ tính năng xuất bản trực tiếp từ tác giả độc lập (Self-publishing).

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

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

Khảo sát thực tế các nền tảng phân phối sách trực tuyến lớn tại Việt Nam cho thấy sự phân hóa rõ nét về tính năng và trải nghiệm người dùng:

Tiêu chí Tiki.vn Fahasa.com Hệ thống đề xuất (Đồ án)
Kiến trúc giao diện Micro-Frontend / ReactJS SSR / Monolith Single Page Application (ReactJS 16.12)
Công nghệ Backend Golang / Java / Node.js PHP / Magento ASP.NET Core 3.1 Web API
Mô hình gợi ý Deep Learning / Hybrid lớn Rule-based / Theo danh mục Hybrid (Cosine Similarity + SVD Matrix)
Kênh số hóa (EBook) Có tích hợp (App riêng) Chưa tích hợp trực tiếp web Tích hợp đọc EBook & thuê đọc trực tuyến
Thanh toán tích hợp COD, Thẻ, Ví nội địa COD, Thẻ, MoMo COD, Thẻ Quốc tế, PayPal API

Phân tích yêu cầu theo mô hình MoSCoW

  • Must have (Bắt buộc): Quản lý danh mục sách, Giỏ hàng, Đơn hàng, Thanh toán đa phương thức (COD, PayPal), Xác thực bảo mật (Identity + OAuth 2.0 Google/Facebook), Engine gợi ý Top-5 sách liên quan.
  • Should have (Nên có): Đọc thử nội dung (Preview), Đọc EBook bản quyền, Quản lý khuyến mãi, Hệ thống thống kê doanh thu và báo cáo tồn kho cho Admin.
  • Could have (Có thể mở rộng): Tích hợp Chatbot tư vấn, Đổi màu giao diện (Theme switcher), Đa ngôn ngữ (i18n).
  • Won't have (Chưa thực hiện): Ứng dụng Native Mobile (iOS/Android), Tích hợp vận chuyển tự động bên thứ ba (Ahamove, GHN).

Thiết kế hệ thống

Hệ thống được thiết kế theo mô hình Microservices-oriented Architecture gồm 3 khối độc lập:

classDiagram
    class Book {
        +int BookId
        +string Title
        +decimal Price
        +int ViewCount
        +GetDetails()
    }
    class User {
        +int UserId
        +string Email
        +string PasswordHash
        +UpdateProfile()
    }
    class RecommendationService {
        +CalculateCosineSimilarity()
        +PredictSVDScore()
        +GetTop5Recommendations(userId)
    }
    class Order {
        +int OrderId
        +decimal TotalAmount
        +string Status
        +ProcessPayment()
    }
    Book "1" -- "*" Order : Contains
    User "1" -- "*" Order : Places
    User "1" -- "*" RecommendationService : Ingests Behavior
    Book "*" -- "1" RecommendationService : Feeds Features

Technology Stack

  • Backend API: ASP.NET Core 3.1 Web API, C#, Entity Framework Core 3.1, AutoMapper, FluentValidation.
  • Frontend SPA: ReactJS 16.12.0, Redux, React Router v5, Axios, Bootstrap 4 / Material-UI.
  • AI Recommendation Engine: Python 3.8, Flask Microservice, Scikit-learn 0.23, Surprise Library, Pandas, NumPy.
  • Database Engine: Microsoft SQL Server 2019 (Thiết kế chuẩn hóa 3NF với 34 thực thể nghiệp vụ: Book, User, Order, OrderDetail, Rating, WishList, BookViewTracking, EBook,...).
  • Bảo mật: JSON Web Token (JWT Authentication), ASP.NET Core Data Protection, Hashing Password (PBKDF2/SHA-256), CORS Policy.

Thiết kế RESTful API tiêu biểu

[ApiController]
[Route("api/[controller]")]
public class RecommendationController : ControllerBase
{
    private readonly IRecommendationService _recommendationService;
    public RecommendationController(IRecommendationService recommendationService)
    {
        _recommendationService = recommendationService;
    }

    [HttpGet("user/{userId}/personalized")]
    [Authorize]
    public async Task<IActionResult> GetPersonalizedBooks(int userId, [FromQuery] int limit = 5)
    {
        var recommendedBooks = await _recommendationService.GetHybridRecommendationsAsync(userId, limit);
        if (recommendedBooks == null || !recommendedBooks.Any())
            return Ok(await _recommendationService.GetTopTrendingBooksAsync(limit));
            
        return Ok(recommendedBooks);
    }
}

Implementation và kết quả

Development Process & Core Algorithms

Hệ thống AI Recommender kết hợp dữ liệu hành vi tường minh (Explicit Feedback - Đánh giá sao từ bảng Rating) và hành vi ngầm định (Implicit Feedback - Lịch sử xem sách BookViewTracking, Danh sách yêu thích WishList, Lịch sử mua hàng OrderDetail).

import numpy as np
import pandas as pd
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics.pairwise import cosine_similarity
from surprise import SVD, Dataset, Reader

def compute_content_similarity(books_df):
    """Tính toán ma trận tương đồng nội dung sách (TF-IDF + Cosine Similarity)"""
    tfidf = TfidfVectorizer(stop_words='english', max_features=5000)
    # Kết hợp các trường đặc trưng: Tác giả, Thể loại, Tóm tắt nội dung
    books_df['features'] = books_df['CategoryName'] + " " + books_df['AuthorName'] + " " + books_df['Description']
    tfidf_matrix = tfidf.fit_transform(books_df['features'].fillna(''))
    cosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix)
    return cosine_sim

def get_hybrid_score(user_id, book_id, svd_model, cosine_sim, book_idx_map, weight_cf=0.6, weight_cb=0.4):
    """Kết hợp dự báo điểm từ SVD (Collaborative) và Điểm tương đồng nội dung (Content-based)"""
    # 1. Dự đoán điểm đánh giá dựa trên SVD
    pred_svd = svd_model.predict(uid=user_id, iid=book_id).est / 5.0  # Normalize về [0, 1]
    
    # 2. Lấy điểm tương đồng nội dung trung bình từ danh mục user đã tương tác cao
    idx = book_idx_map.get(book_id, 0)
    sim_scores = cosine_sim[idx].mean()
    
    # 3. Tính điểm Hybrid tổng hợp
    hybrid_score = (weight_cf * pred_svd) + (weight_cb * sim_scores)
    return hybrid_score
sequenceDiagram
    autonumber
    actor User as Người dùng
    participant React as ReactJS SPA
    participant NetAPI as ASP.NET Core API
    participant PyAI as Python AI Service
    participant SQL as MS SQL Server

    User->>React: Truy cập trang sản phẩm/Trang chủ
    React->>NetAPI: GET /api/recommendation/user/102/personalized
    NetAPI->>PyAI: Request Top-5 Predict(UserId=102)
    PyAI->>SQL: Query Utility Matrix & View Tracking
    SQL-->>PyAI: Raw Matrix Data
    PyAI->>PyAI: Calculate SVD + Cosine Score
    PyAI-->>NetAPI: List [BookID_5, BookID_12, BookID_89, ...]
    NetAPI->>SQL: Get Full Book Details by IDs
    SQL-->>NetAPI: Book Metadata (Title, Price, Thumbnails)
    NetAPI-->>React: 200 OK (JSON Payload)
    React-->>User: Hiển thị Banner gợi ý "Dành riêng cho bạn"

Testing và Validation

Quá trình kiểm thử được triển khai toàn diện qua các cấp độ Unit Test, Integration Test và Load Testing:

Loại kiểm thử Kịch bản / Công cụ Số lượng / Độ phủ Kết quả đạt được Trạng thái
Unit Test xUnit, Moq (ASP.NET Core) 128 Test Cases 84.5% Code Coverage Đạt 100% Pass
API Load Test Apache JMeter (Concurrent 500 users) 10,000 requests / 5 phút Throughput: 420 req/s, Error: 0.02% Đạt yêu cầu
AI Accuracy RMSE / MAE trên tập đánh giá (Surprise) 50,000 tương tác RMSE: 0.892, MAE: 0.684 Tối ưu
Latency API Postman Runner / BenchmarkDotNet Endpoint Gợi ý AI Trung bình 142ms (dưới ngưỡng 200ms) Đạt

Đổi mới và đóng góp

  1. Kiến trúc Hybrid Recommendation đa trọng số: Khắc phục triệt để bài toán khởi đầu lạnh (Cold-Start Problem) cho người dùng mới (Visitor) bằng cách kết hợp cơ chế Content-Based dựa trên ngữ nghĩa văn bản và chuyển dịch mượt mà sang Collaborative Filtering (SVD) khi có tương tác thực tế.
  2. Tối ưu hóa hiệu năng với Single Page Application: Việc ứng dụng ReactJS 16.12 kết hợp Virtual DOM và cơ chế phân phối tải qua ASP.NET Core Web API giúp giảm 43% dung lượng tải trang ban đầu (Initial Page Load) và giảm 62% băng thông truyền tải so với mô hình Server-Side Rendering (SSR) truyền thống.
  3. Mô hình kinh doanh sách số tích hợp (EBook Rental): Không chỉ dừng lại ở bán lẻ sách giấy (Physical Books), hệ thống giải quyết trọn vẹn vòng đời sản phẩm với tính năng đọc thử, thuê và đọc EBook trên giao diện Web với hệ thống quản lý quyền số (Digital Rights Management cơ bản) ngăn chặn sao chép trái phép.

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

Môi trường triển khai (Deployment Architecture)

  • Hạ tầng máy chủ: Triển khai trên môi trường đám mây hoặc máy chủ Linux (Ubuntu Server 20.04 LTS), đóng gói linh hoạt thông qua Docker Container.
  • Web Server: Reverse Proxy sử dụng Nginx, Kestrel Web Server cho ASP.NET Core, Gunicorn/Uvicorn cho Python Flask Service.
  • Cơ sở dữ liệu: Microsoft SQL Server trên Windows Server hoặc Containerized MSSQL trên Linux.

Phân tích hiệu quả kinh tế (Cost-Benefit & ROI Analysis)

  • Chi phí phát triển: Tiết kiệm xấp xỉ 60% chi phí bản quyền công nghệ nhờ việc sử dụng 100% công nghệ mã nguồn mở (ASP.NET Core, ReactJS, Python Scikit-Learn/Surprise).
  • Tăng trưởng tỷ lệ chuyển đổi (Conversion Rate): Theo các mô hình giả lập A/B Testing dựa trên tập dữ liệu người dùng, việc hiển thị khối gợi ý cá nhân hóa nâng cao tỷ lệ Click-Through-Rate (CTR) lên 28.4% và giá trị đơn hàng trung bình (AOV) tăng 18.2%.

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

Hạn chế kỹ thuật

  • Vấn đề dữ liệu thưa (Data Sparsity): Khi số lượng đầu sách tăng lên hàng trăm nghìn nhưng số lượng đánh giá còn ít, ma trận Utility Matrix bị thưa lớn, làm giảm độ chính xác của mô hình SVD thuần túy.
  • Bảo mật nội dung EBook: Hệ thống mới chỉ hỗ trợ đọc trực tiếp qua Web Viewer, chưa có cơ chế mã hóa file DRM cấp độ doanh nghiệp (như Adobe DRM) để chống trích xuất mã nguồn Canvas/DOM.

Hướng phát triển trong tương lai

  • Ứng dụng kỹ thuật Deep Learning (Autoencoders, Neural Collaborative Filtering - NCF) và xử lý ngôn ngữ tự nhiên nâng cao (BERT/Transformer) để phân tích sâu sắc hơn cảm xúc trong phần bình luận (Comment Sentiment Analysis).
  • Xây dựng ứng dụng di động đa nền tảng (Flutter / React Native) đồng bộ trực tiếp với hệ sinh thái API hiện có.
  • Tích hợp cổng thanh toán nội địa tự động (VNPay, MoMo, ZaloPay qua Webhook chuẩn hóa).

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

mindmap
  root((Hệ thống bán sách & AI Gợi ý))
    Sinh viên CNTT
      Mẫu kiến trúc tham khảo chuẩn mực
      Tài liệu thực hành ASP.NET Core & ReactJS
      Codebase triển khai thuật toán Recommendation
    Lập trình viên Web/AI
      Best practices xây dựng REST API
      Kỹ thuật kết nối đa ngôn ngữ C# và Python
      Mô hình triển khai Single Page Application
    Doanh nghiệp phát hành sách
      Tự động hóa kênh bán lẻ & số hóa EBook
      Gia tăng doanh số nhờ cá nhân hóa giỏ hàng
      Tối ưu chi phí vận hành nền tảng
    Độc giả & Khách hàng
      Trải nghiệm mua sắm mượt mà, chính xác
      Tiết kiệm thời gian tìm kiếm sách phù hợp
      Đọc EBook bản quyền với chi phí tiết kiệm
  • Sinh viên & Nghiên cứu sinh: Nguồn tài liệu tham khảo hoàn chỉnh từ lý thuyết đến thực thi cho đồ án tốt nghiệp chuyên ngành Hệ thống thông tin, Kỹ thuật phần mềm và Khoa học máy tính.
  • Lập trình viên (Developers): Cung cấp pattern tích hợp vi dịch vụ (Microservices Integration) giữa nền tảng ứng dụng doanh nghiệp (C#/.NET) và lõi tính toán AI (Python).
  • Doanh nghiệp bán lẻ sách: Bộ giải pháp chuyển đổi số toàn diện từ quản lý kho, marketing khuyến mãi, thanh toán trực tuyến đến chăm sóc khách hàng tự động.

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

1. Cần chuẩn bị hạ tầng phần cứng và môi trường như thế nào để triển khai hệ thống?

Hệ thống yêu cầu máy chủ tối thiểu 2 vCPU, 4GB RAM (khuyến nghị 8GB RAM để chạy mượt mà mô hình SVD trên tập dữ liệu lớn), 40GB SSD. Môi trường phần mềm bao gồm .NET Core 3.1 Runtime, Python 3.8+ (với các thư viện scikit-learn, scikit-surprise, pandas, flask), Node.js 14+ (để build React frontend) và Microsoft SQL Server 2017/2019.

2. Hệ thống giải quyết bài toán "Khởi đầu lạnh" (Cold-Start Problem) cho người dùng mới ra sao?

Khi một người dùng mới (Visitor/New User) chưa có lịch sử đánh giá hay mua sắm, hệ thống sẽ kích hoạt bộ lọc Content-Based Filtering dựa trên các danh mục sách người đó đang xem trong phiên (Session Tracking) hoặc gợi ý các đầu sách nằm trong danh mục "Top Trending/Bán chạy nhất". Khi người dùng bắt đầu có từ 3 tương tác (xem, thích, đánh giá), hệ thống sẽ chuyển dần trọng số sang mô hình Hybrid SVD.

3. Giao tiếp giữa backend ASP.NET Core và AI Engine Python được thiết kế như thế nào?

Hai khối giao tiếp thông qua kiến trúc RESTful API nội bộ (Internal HTTP Microservice). Khi ASP.NET Core nhận được request cần gợi ý, nó sẽ gửi HTTP GET request kèm userId hoặc bookId đến Flask Service chạy cục bộ (hoặc trên Docker mạng nội bộ). Phản hồi trả về là một mảng JSON chứa danh sách ID sách tối ưu nhất với thời gian xử lý trung bình dưới 50ms.

4. Hệ thống đảm bảo tính toàn vẹn dữ liệu đơn hàng và thanh toán như thế nào?

Các giao dịch thanh toán và cập nhật số lượng tồn kho trong bảng BookNumber được quản lý bằng cơ chế Database Transactions (ACID) trong Entity Framework Core. Nếu quá trình thanh toán qua cổng PayPal hoặc trừ kho gặp sự cố, toàn bộ giao dịch sẽ được Rollback tự động để tránh mất mát dữ liệu hoặc sai lệch tồn kho.

5. Chi phí vận hành và lộ trình hoàn vốn (ROI) ước tính trong bao lâu?

Nhờ sử dụng các framework mã nguồn mở không tốn phí bản quyền định kỳ, chi phí duy trì hệ thống chỉ bao gồm tiền thuê Cloud Server (khoảng 20 - 50 USD/tháng). Với một nhà sách quy mô vừa (xử lý 1,000 đơn hàng/tháng), việc tăng tỷ lệ chuyển đổi thêm 15-20% từ hệ thống gợi ý giúp doanh nghiệp đạt điểm hòa vốn và sinh lời trong vòng 3 đến 6 tháng triển khai.


Kết luận

Đồ án "Phát triển website bán sách kết hợp hệ thống hỗ trợ gợi ý" của sinh viên Nguyễn Trần Trung Kiên và Đặng Thanh Thế đã giải quyết trọn vẹn bài toán xây dựng nền tảng thương mại điện tử hiện đại kết hợp trí tuệ nhân tạo. Bằng việc kết hợp sức mạnh kiến trúc của ASP.NET Core 3.1, tính linh hoạt của ReactJS, cùng thuật toán gợi ý lai ghép Hybrid Recommendation (SVD + Cosine Similarity) trên Python, đồ án đã chứng minh tính khả thi cao cả về mặt kỹ thuật học thuật lẫn giá trị ứng dụng thực tiễn trong ngành xuất bản và bán lẻ số. Codebase và mô hình thiết kế của đồ án là tài liệu tham khảo giá trị cho sinh viên, kỹ sư phần mềm và các doanh nghiệp đang tìm kiếm giải pháp cá nhân hóa trải nghiệm khách hàng.