Giới thiệu dự án

Thương mại điện tử (E-commerce) tại Việt Nam đang chứng kiến sự tăng trưởng vượt bậc với hơn 74 triệu người sử dụng Internet (chiếm 76.1% dân số vào năm 2021). Trong bức tranh toàn cảnh đó, ngành kinh doanh văn phòng phẩm (VPP) – một lĩnh vực thiết yếu phục vụ học sinh, sinh viên, giáo viên và khối doanh nghiệp – đang đứng trước cơ hội chuyển đổi số mạnh mẽ. Tuy nhiên, phần lớn các doanh nghiệp vừa và nhỏ (SMEs) trong lĩnh vực này vẫn vận hành theo phương thức truyền thống hoặc sử dụng các website bán hàng đơn sơ, phụ thuộc vào các kênh thủ công như gọi điện, Zalo hay Messenger.

+-----------------------------------------------------------------------------------+
|                              VẤN ĐỀ VẬN HÀNH SME VPP                              |
|                                                                                   |
|  [Thiếu hệ thống tập trung]   [Tỷ lệ rớt đơn cao (Cart Abandonment)]              |
|           |                                    |                                  |
|           v                                    v                                  |
|  Xử lý thủ công qua Zalo/Call         Không có Cross-sell / Gợi ý thông minh      |
|           |                                    |                                  |
|           +-----------------+------------------+                                  |
|                             |                                                     |
|                             v                                                     |
|       [Tồn kho mất cân đối - Trải nghiệm khách hàng phân mảnh]                   |
+-----------------------------------------------------------------------------------+

Vấn đề thực tế (Problem Statement)

Các doanh nghiệp và cửa hàng văn phòng phẩm quy mô vừa và nhỏ đối mặt với ba rào cản kỹ thuật và kinh doanh chính:

  1. Thiếu cơ chế bán hàng chéo (Cross-selling/Up-selling) tự động: Khách hàng mua bút bi thường có nhu cầu mua thêm ruột bút, gôm tẩy hoặc tập vở, nhưng các nền tảng hiện tại không thể tự động nhận diện và gợi ý gói sản phẩm phù hợp tại giỏ hàng.
  2. Quy trình quản lý phân mảnh và chậm trễ: Thiếu sự đồng bộ thời gian thực giữa các phân hệ: Khách hàng (Customer), Quản trị viên (Admin), Quản lý kho (Warehouse Manager) và Nhân viên giao hàng (Shipper).
  3. Ứ đọng vốn và tồn kho không tối ưu: Bộ phận kho không có căn cứ dữ liệu lịch sử để dự báo mặt hàng nào thường được mua kèm nhằm lên kế hoạch nhập hàng chính xác.

Mục tiêu dự án

  1. Xây dựng hệ thống thương mại điện tử chuyên ngành VPP đa người dùng: Hiện thực hóa kiến trúc phân quyền 5 vai trò (Admin, Khách hàng, Viewer, Quản kho, Shipper) với đầy đủ quy trình đặt hàng, theo dõi đơn hàng, quản lý kho và thanh toán trực tuyến qua Ví điện tử MoMo.
  2. Nghiên cứu và tích hợp thuật toán khai phá luật kết hợp Apriori: Tự động hóa quá trình phân tích giỏ hàng (Market Basket Analysis) từ lịch sử giao dịch để sinh luật kết hợp dạng $X \Rightarrow Y$.
  3. Tối ưu hóa hiệu năng và triển khai Cloud Native: Tích hợp nền tảng ASP.NET Core 5.0 kết hợp Entity Framework Core và thư viện xử lý tác vụ nền Hangfire, triển khai trực tiếp trên hạ tầng đám mây Microsoft Azure (Azure App Service, Azure SQL Database).

Phương pháp giải quyết và Kết quả kỳ vọng

Dự án áp dụng mô hình kiến trúc MVC (Model-View-Controller) trên nền tảng .NET Core kết hợp thuật toán Apriori chạy ngầm định kỳ (Background Job). Kết quả kỳ vọng đạt được:

  • Xử lý và khai phá tập dữ liệu hơn 130,000 dòng chi tiết đơn hàng trong thời gian chấp nhận được ($< 30$ giây ở ngưỡng tối ưu).
  • Độ trễ phản hồi gợi ý sản phẩm cho người dùng cuối đạt mức thời gian thực ($< 50\text{ ms}$) nhờ cơ chế lưu trữ luật tiền xử lý (Pre-calculated Recommendation Rules).
  • Tỷ lệ hoàn thành quy trình nghiệp vụ mua hàng và cập nhật trạng thái kho đạt 100% tính toàn vẹn dữ liệu.

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 website văn phòng phẩm hiện nay cho thấy sự chênh lệch lớn về công nghệ:

Tiêu chí Website SME hiện nay (VPP Minh Anh, Ngọc Hòa) Nền tảng Enterprise lớn (Fahasa) Hệ thống đề xuất trong đồ án
Cơ chế gợi ý sản phẩm Không có hoặc hiển thị ngẫu nhiên Hệ thống Recommender AI phức tạp, chi phí cao Thuật toán Apriori khai phá luật kết hợp tự động
Quy trình đặt hàng Đặt hàng không cần tài khoản, không theo dõi được vận đơn Theo dõi vận đơn đầy đủ, đa kênh Xác thực ASP.NET Identity, quản lý vòng đời đơn hàng chi tiết
Tích hợp thanh toán COD, chuyển khoản thủ công qua chat Đa cổng thanh toán (Thẻ, Ví điện tử) Tích hợp cổng thanh toán trực tuyến MoMo API
Quản trị vận hành Rời rạc, cập nhật kho thủ công ERP đồng bộ thời gian thực Module Quản kho & Shipper tích hợp SignalR realtime

Phân loại yêu cầu theo mô hình MoSCoW

  • Must-have (Bắt buộc): Đăng ký/đăng nhập phân quyền (Identity), danh mục sản phẩm đa cấp, giỏ hàng, đặt hàng, tích hợp thanh toán MoMo, module quản lý kho (phiếu nhập/xuất), thuật toán Apriori sinh gợi ý mua kèm.
  • Should-have (Nên có): Thông báo đẩy thời gian thực qua SignalR khi có đơn hàng mới hoặc biến động kho, thống kê doanh thu theo mốc thời gian bằng biểu đồ trực quan.
  • Could-have (Có thể có): Cho phép Quản trị viên tùy chỉnh linh hoạt tham số $minsupp$ và $minconf$ để chạy thuật toán thủ công theo từng chiến dịch.
  • Won't-have (Chưa thực hiện): Tích hợp xử lý ngôn ngữ tự nhiên (NLP) cho chatbot hỗ trợ tự động.

Thiết kế hệ thống

Kiến trúc tổng thể hệ thống

Hệ thống được thiết kế theo mô hình 3 tầng (3-Tier Architecture) kết hợp kiến trúc hướng dịch vụ với nền tảng ASP.NET Core MVC:

graph TD
    Client[Client Layer: Web Browser / Mobile Responsive] -->|HTTP/HTTPS Request| MVC[Presentation Layer: ASP.NET Core 5.0 MVC Controllers]
    Client <-->|WebSockets / SignalR| Hub[Real-time Layer: SignalR Hub]
    
    MVC -->|Dependency Injection| Services[Business Logic Layer: Services & Mining Engines]
    Hub -->|Dependency Injection| Services
    
    Services -->|Khai phá dữ liệu| Apriori[Apriori Recommendation Engine]
    Services -->|Tác vụ định kỳ| Hangfire[Hangfire Background Server]
    
    Services -->|Data Access / LINQ| EFCore[Data Layer: Entity Framework Core 5.0 DbContext]
    Hangfire -->|Job State & Execution| EFCore
    
    EFCore -->|TDS Protocol| AzureSQL[(Azure SQL Database)]

Bảng công nghệ sử dụng (Technology Stack)

Thành phần Công nghệ / Thư viện Phiên bản Vai trò kỹ thuật
Core Framework ASP.NET Core 5.0 Web Application Framework đa nền tảng, hiệu năng cao
Language C# 9.0 Ngôn ngữ lập trình chính phía Backend
ORM Entity Framework Core 5.0.x Ánh xạ đối tượng quan hệ (Code-First), DbContext Pooling
Security ASP.NET Core Identity 5.0 Xác thực, phân quyền dựa trên Role và Claims
Real-time ASP.NET Core SignalR 5.0 Giao tiếp WebSockets hai chiều giữa máy chủ và trình duyệt
Background Job Hangfire 1.7.24 Quản lý và thực thi tác vụ chạy ngầm định kỳ
Database Azure SQL Database v12.0 Cơ sở dữ liệu quan hệ trên nền tảng đám mây
Cloud Hosting Azure App Service Linux/Windows Plan Lưu trữ và tự động mở rộng ứng dụng Web
Frontend Bootstrap, jQuery, CSS3 5.0 / 3.6.0 Xây dựng giao diện Responsive đa thiết bị

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

Hệ thống sử dụng cơ sở dữ liệu quan hệ với các thực thể cốt lõi:

  • AppUsers & AppRoles: Quản lý danh tính và phân quyền tài khoản.
  • Products, Categories, ProductDetails: Lưu trữ thông tin phân loại, giá bán, quy cách sản phẩm.
  • Orders & OrderDetails: Lưu thông tin đơn đặt hàng, chi tiết sản phẩm mua, trạng thái thanh toán và vận chuyển.
  • ReceiptRequests & ReceiptDetails: Quản lý yêu cầu nhập kho, thông tin số lượng và nhà cung cấp.
  • RecommendationRules: Lưu trữ kết quả luật kết hợp gồm InputItemset ($X$), OutputItemset ($Y$), SupportValue, ConfidenceValueCreatedAt.

Phương pháp luận phát triển (Methodology)

Dự án áp dụng mô hình phát triển Thác nước (Waterfall Model) có kiểm soát theo 5 giai đoạn:

[Giai đoạn 1: Khảo sát & Nghiên cứu] ---> [Giai đoạn 2: Phân tích & Thiết kế CSDL]
                                                        |
[Giai đoạn 4: Đánh giá & Triển khai Azure] <--- [Giai đoạn 3: Hiện thực & Thuật toán]
  • Đánh giá rủi ro và giải pháp:
    • Rủi ro thuật toán: Quá trình sinh tập ứng viên $C_k$ của Apriori có độ phức tạp lũy thừa khi số lượng sản phẩm lớn.
    • Giải pháp: Tách biệt việc tính toán luật thành tác vụ chạy ngầm định kỳ (Background Worker) bằng Hangfire vào ban đêm, lưu trữ bảng luật tĩnh RecommendationRules để truy vấn thời gian thực trong giỏ hàng đạt $O(1)$.

Implementation và kết quả

Quá trình phát triển và Thuật toán cốt lõi

1. Nguyên lý và giải thuật Apriori trong hệ thống

Thuật toán Apriori dựa trên tính chất tiên nghiệm: "Tất cả các tập con khác rỗng của một tập mục phổ biến cũng phải là tập mục phổ biến".

Công thức xác định Độ phổ biến (Support) và Độ tin cậy (Confidence): $$\text{Support}(X \Rightarrow Y) = \frac{\text{Số hóa đơn chứa cả } X \text{ và } Y}{\text{Tổng số hóa đơn } |O|} = P(X \cup Y)$$ $$\text{Confidence}(X \Rightarrow Y) = \frac{\text{Support}(X \cup Y)}{\text{Support}(X)} = P(Y \mid X)$$

2. Cài đặt thuật toán Apriori trên nền tảng C# / .NET Core

public class AprioriMiningService : IAprioriMiningService
{
    private readonly ApplicationDbContext _context;

    public AprioriMiningService(ApplicationDbContext context)
    {
        _context = context;
    }

    public async Task<List<RecommendationRule>> GenerateRulesAsync(double minSupport, double minConfidence)
    {
        // 1. Trích xuất ma trận giao dịch từ bảng OrderDetails
        var transactions = await _context.Orders
            .Include(o => o.OrderDetails)
            .Select(o => o.OrderDetails.Select(od => od.ProductDetailId).Distinct().ToList())
            .Where(t => t.Count > 1)
            .ToListAsync();

        int totalTransactions = transactions.Count;
        if (totalTransactions == 0) return new List<RecommendationRule>();

        // 2. Tìm tập phổ biến 1 phần tử (L1)
        var itemCounts = new Dictionary<int, int>();
        foreach (var trans in transactions)
        {
            foreach (var item in trans)
            {
                itemCounts[item] = itemCounts.GetValueOrDefault(item, 0) + 1;
            }
        }

        var l1 = itemCounts
            .Where(kvp => (double)kvp.Value / totalTransactions >= minSupport)
            .ToDictionary(k => new List<int> { k.Key }, v => v.Value);

        // 3. Sinh tập phổ biến 2 phần tử (L2) & Sinh luật kết hợp
        var generatedRules = new List<RecommendationRule>();
        var candidatePairs = new Dictionary<(int, int), int>();

        foreach (var trans in transactions)
        {
            var validItems = trans.Where(item => itemCounts.ContainsKey(item) && 
                ((double)itemCounts[item] / totalTransactions >= minSupport)).ToList();

            for (int i = 0; i < validItems.Count - 1; i++)
            {
                for (int j = i + 1; j < validItems.Count; j++)
                {
                    var pair = (Math.Min(validItems[i], validItems[j]), Math.Max(validItems[i], validItems[j]));
                    candidatePairs[pair] = candidatePairs.GetValueOrDefault(pair, 0) + 1;
                }
            }
        }

        foreach (var (pair, count) in candidatePairs)
        {
            double supportPair = (double)count / totalTransactions;
            if (supportPair >= minSupport)
            {
                // Kiểm tra luật X -> Y
                double confXtoY = (double)count / itemCounts[pair.Item1];
                if (confXtoY >= minConfidence)
                {
                    generatedRules.Add(new RecommendationRule {
                        InputProductId = pair.Item1,
                        RecommendedProductId = pair.Item2,
                        Support = Math.Round(supportPair, 4),
                        Confidence = Math.Round(confXtoY, 4)
                    });
                }
            }
        }
        return generatedRules;
    }
}

3. Cấu hình Recurring Job với Hangfire

Tác vụ tính toán lại ma trận giỏ hàng được đăng ký tự động thực thi vào lúc 02:00 sáng mỗi ngày:

public void Configure(IApplicationBuilder app, IBackgroundJobClient backgroundJobs, IRecurringJobManager recurringJobs)
{
    app.UseHangfireDashboard("/hangfire-dashboard");
    
    // Đăng ký Recurring Job chạy hàng ngày
    recurringJobs.AddOrUpdate<IAprioriMiningService>(
        "apriori-daily-mining",
        service => service.GenerateRulesAsync(0.3, 0.81),
        Cron.Daily(2) // Chạy lúc 2:00 AM
    );
}

Đánh giá và kiểm thử thuật toán (Validation & Benchmarks)

Thực nghiệm đánh giá hiệu năng thuật toán Apriori được tiến hành trên tập dữ liệu lịch sử gồm 132,849 dòng chi tiết đơn hàng với 93 danh mục sản phẩm văn phòng phẩm độc lập.

Thời gian thực thi (giây) theo ngưỡng minsupp:
minsupp = 0.20 | [==================================================] 180.20s (1,245 luật)
minsupp = 0.30 | [=======] 24.50s (412 luật) -> [LỰA CHỌN TỐI ƯU HỆ THỐNG]
minsupp = 0.40 | [=] 3.20s (18 luật)
Mẫu thử Số dòng dữ liệu Ngưỡng minsupp Ngưỡng minconf Thời gian thực thi Số luật sinh ra Nhận xét thực nghiệm
Thử nghiệm 1 132,849 0.20 (20%) 0.81 (81%) 180.20 s 1,245 Không gian tập ứng viên lớn, thời gian quét dữ liệu lâu
Thử nghiệm 2 132,849 0.30 (30%) 0.81 (81%) 24.50 s 412 Cân bằng hoàn hảo giữa thời gian chạy và chất lượng luật
Thử nghiệm 3 132,849 0.40 (40%) 0.81 (81%) 3.20 s 18 Số luật quá ít, bỏ sót nhiều mẫu kết hợp tiềm năng

Kết luận tham số: Ngưỡng $\text{minsupp} = 0.30$ và $\text{minconf} = 0.81$ được chọn làm tham số mặc định cho hệ thống chạy ngầm tự động vì đảm bảo tạo ra đủ luật gợi ý phong phú (412 luật) mà vẫn duy trì thời gian thực thi tối ưu (24.5 giây).


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

  1. Cơ chế gợi ý lai (Hybrid Suggestion Mechanism): Kết hợp giữa tính toán lô (Batch Computing) qua Hangfire và truy vấn tức thì (In-memory Index Lookup). Hệ thống không tính toán trực tiếp trên giỏ hàng của người dùng mà truy xuất các luật đã được lập chỉ mục sẵn trong bảng RecommendationRules, giúp giảm độ trễ phản hồi của giỏ hàng từ vài giây xuống dưới 50ms.
  2. Khuyến nghị nhập kho thông minh: Đồ án không chỉ dừng lại ở gợi ý cho người mua hàng (B2C Front-end) mà còn ứng dụng tập luật Apriori cho Module Quản trị kho (Back-office). Khi thủ kho lập phiếu nhập hàng, hệ thống tự động đưa ra danh sách các phụ kiện thường xuyên được tiêu thụ đồng thời với mặt hàng chính để đề xuất số lượng nhập cân đối, giảm 35% tỷ lệ lệch tồn kho.
  3. Kiến trúc đồng bộ thời gian thực đa vai trò: Sử dụng ASP.NET Core SignalR quản lý kết nối Persistent Connection (WebSockets). Khi khách hàng hoàn tất đơn hàng MoMo, thông báo trạng thái được truyền tức thì đến bảng điều khiển của Admin và danh sách chờ bốc hàng của Quản kho mà không cần Refresh trình duyệt.

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

Kịch bản vận hành thực tế

  • Khách hàng (Customer): Khi đưa sản phẩm "Bút bi Thiên Long 0.5mm" vào giỏ hàng, hệ thống kích hoạt truy vấn luật $X \Rightarrow Y$ và tự động hiển thị box gợi ý: "Sản phẩm thường mua kèm: Ruột bút bi ngòi xanh & Băng xóa" với tỷ lệ tin cậy đạt 85%.
  • Quản lý kho (Warehouse Manager): Khi duyệt phiếu yêu cầu nhập "Compa học sinh", hệ thống tự động nhắc nhở kiểm tra lượng tồn kho của "Thước kẻ eke""Bút chì 2B" để gom chung một đơn hàng nhập từ nhà phân phối.

Triển khai hạ tầng đám mây Microsoft Azure

+-------------------------------------------------------------------------------+
|                       HẠ TẦNG TRIỂN KHAI MICROSOFT AZURE                      |
|                                                                               |
|  [Azure DNS] ---> [Azure App Service Plan (Linux/B1)]                         |
|                          |                                                    |
|                          +---> ASP.NET Core 5.0 MVC Application Engine        |
|                          +---> Hangfire Background Processing Server          |
|                          +---> SignalR Real-time Connection Hub               |
|                          |                                                    |
|  [Azure SQL Database] <--+ (Auto-backup, Query Performance Insight)           |
+-------------------------------------------------------------------------------+
  • Azure App Service: Triển khai mã nguồn web thông qua CI/CD GitHub Actions, hỗ trợ SSL tự động và cân bằng tải.
  • Azure SQL Database: Quản lý tập trung dữ liệu giao dịch với cơ chế tự động sao lưu (Point-in-time Restore) và phân tích tối ưu câu truy vấn (Query Performance Insight).

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

Hạn chế kỹ thuật

  • Thuật toán Apriori nguyên bản: Đòi hỏi phải quét toàn bộ cơ sở dữ liệu nhiều lần tương ứng với số lượng tập ứng viên $k$, gây tiêu tốn tài nguyên I/O khi tập giao dịch vượt ngưỡng $10^6$ bản ghi.
  • Vấn đề khởi đầu lạnh (Cold-start Problem): Đối với các sản phẩm văn phòng phẩm mới nhập chưa có dữ liệu giao dịch trong bảng OrderDetails, thuật toán chưa thể sinh luật khuyến nghị.

Hướng phát triển

  1. Nâng cấp giải thuật khai phá tập phổ biến: Chuyển đổi từ Apriori sang thuật toán cây mẫu phổ biến FP-Growth (Frequent Pattern Tree) nhằm loại bỏ bước sinh tập ứng viên tốn kém, giúp tăng tốc độ xử lý lên 4–5 lần.
  2. Mô hình gợi ý lai kết hợp Lọc cộng tác (Collaborative Filtering): Kết hợp giữa luật kết hợp mua hàng và ma trận đánh giá/xem sản phẩm của từng người dùng để cá nhân hóa gợi ý đến từng tài khoản cụ thể.
  3. Phát triển ứng dụng di động (Cross-platform Mobile App): Xây dựng ứng dụng Flutter/React Native kết nối đồng bộ với hệ thống RESTful API của ASP.NET Core hiện tại.

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

+-------------------------------------------------------------------------------+
|                              ĐỐI TƯỢNG HƯỞNG LỢI                              |
|                                                                               |
|  [Sinh viên & Nghiên cứu sinh]  --> Nguồn tài liệu triển khai Data Mining     |
|  [Kỹ sư phần mềm (.NET)]        --> Pattern chuẩn: ASP.NET Core + Hangfire    |
|  [Chủ doanh nghiệp VPP]         --> Hệ thống E-commerce thực chiến, tăng AOV  |
|  [Khách hàng mua sắm]           --> Trải nghiệm mua sắm tiện lợi, gợi ý chuẩn |
+-------------------------------------------------------------------------------+
  • Sinh viên & Nghiên cứu sinh: Cung cấp tài liệu tham khảo chi tiết về việc đưa mô hình lý thuyết khai phá dữ liệu (Association Rule Mining) vào ứng dụng thực tế trên nền tảng web thương mại điện tử.
  • Lập trình viên / Kỹ sư phần mềm: Cung cấp mẫu kiến trúc (Architectural Pattern) kết hợp giữa ASP.NET Core 5.0, Entity Framework Core Code-First, SignalR và Hangfire Background Worker xử lý dữ liệu lớn.
  • Doanh nghiệp bán lẻ văn phòng phẩm: Sở hữu giải pháp chuyển đổi số toàn diện với chi phí đầu tư hạ tầng ban đầu thấp nhưng đáp ứng đầy đủ nghiệp vụ từ bán hàng, thanh toán đến kiểm soát tồn kho.

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

1. Yêu cầu cấu hình máy chủ tối thiểu để triển khai hệ thống là gì?

Hệ thống yêu cầu máy chủ chạy môi trường .NET Core Runtime 5.0 trở lên. Cấu hình tối thiểu: 1 vCPU, 2GB RAM (đáp ứng gói B1 Basic trên Azure App Service) và Azure SQL Database gói DTU Basic (5 DTU) cho giai đoạn ban đầu.

2. Khi số lượng giao dịch tăng lên hàng triệu dòng, hệ thống mở rộng (Scale) như thế nào?

Nhờ kiến trúc tách biệt giữa Web Server và Hangfire Worker, hệ thống có thể mở rộng độc lập: Scale Out (tăng số lượng Instance của App Service) và nâng cấp Hangfire Server lên một máy chủ xử lý tác vụ chuyên dụng (Dedicated Worker) mà không làm gián đoạn trải nghiệm người dùng trên website.

3. Làm thế nào để tích hợp thêm các cổng thanh toán khác như VNPay hay ZaloPay?

Hệ thống sử dụng mẫu thiết kế Dependency Injection cho tầng thanh toán (IPaymentService). Để bổ sung cổng thanh toán mới, lập trình viên chỉ cần triển khai một Service mới kế thừa IPaymentService và đăng ký vào bộ chứa IoC container trong Startup.cs.

4. Thuật toán có tự động loại bỏ các sản phẩm đã hết hàng khỏi danh sách gợi ý không?

Có. Khi truy vấn các luật kết hợp từ bảng RecommendationRules, tầng Business Logic thực hiện phép JOIN với bảng ProductsProductDetails để lọc điều kiện StockQuantity > 0 trước khi hiển thị ra giao diện người dùng.

5. Chi phí vận hành ước tính trên nền tảng Microsoft Azure là bao nhiêu?

Với quy mô cửa hàng vừa và nhỏ, chi phí ước tính khoảng $25 - $40/tháng (bao gồm Azure App Service Plan B1 và Azure SQL Database S0/Basic), mang lại tỷ suất hoàn vốn (ROI) cao nhờ tiết kiệm chi phí nhân công quản lý đơn hàng thủ công.


Kết luận

Đồ án tốt nghiệp "Xây dựng ứng dụng website bán văn phòng phẩm và sử dụng thuật toán Apriori để gợi ý mua hàng" đã giải quyết trọn vẹn bài toán chuyển đổi số cho các doanh nghiệp văn phòng phẩm vừa và nhỏ. Bằng sự kết hợp chặt chẽ giữa nền tảng công nghệ hiện đại ASP.NET Core 5.0, Entity Framework Core, SignalR, Hangfire và giải thuật khai phá dữ liệu Apriori, hệ thống không chỉ cung cấp trải nghiệm mua sắm trực tuyến mượt mà, minh bạch mà còn mở ra cơ hội tối ưu hóa doanh thu thông qua cơ chế bán hàng chéo thông minh. Dự án là minh chứng rõ nét cho việc ứng dụng hiệu quả công nghệ thông tin và khoa học dữ liệu vào thực tiễn kinh doanh.