Giới thiệu dự án

Sự bùng nổ của công nghệ thông tin và mạng Internet toàn cầu đã tạo tiền đề cho sự chuyển dịch mạnh mẽ từ phương thức thương mại truyền thống sang Thương mại điện tử (TMĐT - E-Commerce) và Kinh doanh điện tử (E-Business). Theo các báo cáo kinh tế số, các mô hình bán lẻ trực tuyến thông thường (B2C) đang dần bão hòa về chi phí thu hút khách hàng (CAC - Customer Acquisition Cost). Trong bối cảnh đó, mô hình mua sắm theo nhóm (Groupon hay B2T - Business to Team) xuất hiện như một giải pháp kết hợp đột phá giữa TMĐT và tiếp thị truyền thông số, cho phép người tiêu dùng nhận mức ưu đãi lớn từ 30% đến 90% khi đạt đủ số lượng người đăng ký tối thiểu trong một khung giờ xác định.

Tuy nhiên, việc triển khai mô hình Groupon tại thị trường Việt Nam thời điểm 2010–2013 đối mặt với nhiều rào cản kỹ thuật và vận hành: hạ tầng thanh toán trực tuyến chưa hoàn thiện, niềm tin người tiêu dùng còn hạn chế, các hệ thống clone mã nguồn mở nước ngoài thường cồng kềnh, thiếu tính tối ưu cho quy trình nghiệp vụ nội địa và khó tích hợp với cơ sở hạ tầng máy chủ cục bộ.

Đồ án tốt nghiệp "Xây dựng Website kinh doanh theo mô hình Groupon" được nghiên cứu và thực hiện nhằm giải quyết trực tiếp bài toán thiết kế, lập trình và vận hành một nền tảng bán hàng theo nhóm hoàn chỉnh, đảm bảo tính mở rộng, bảo mật và hiệu năng cao trên nền tảng công nghệ Microsoft .NET.

Mục tiêu dự án

  1. Khảo sát và hệ thống hóa cơ sở lý luận: Phân tích bản chất kinh tế và kỹ thuật của mô hình Groupon, so sánh sự khác biệt cốt lõi giữa TMĐT (E-Commerce) và Kinh doanh điện tử (E-Business).
  2. Khảo sát hiện trạng thị trường: Phân tích chuyên sâu ưu nhược điểm của các nền tảng tiên phong tại Việt Nam (Muachung.vn, Cungmua.com, Nhommua.com).
  3. Phân tích và thiết kế hệ thống: Xây dựng hoàn chỉnh biểu đồ phân rã chức năng (BFD), biểu đồ luồng dữ liệu (DFD đa mức), biểu đồ thực thể quan hệ (ERD) và mô hình dữ liệu quan hệ (RDM).
  4. Hiện thực hóa giải pháp phần mềm: Lập trình hệ thống website thương mại điện tử 3 lớp (3-Tier Architecture) sử dụng ASP.NET (C#) kết hợp hệ quản trị cơ sở dữ liệu Microsoft SQL Server 2005, tích hợp cơ chế quản lý Deal theo thời gian thực.
  5. Kiểm thử và đánh giá: Đo lường độ trễ truy vấn, kiểm thử tính toàn vẹn của giỏ hàng và quy trình đặt hàng theo phiên (Session Management).

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

  • Phạm vi chức năng: Xây dựng 2 phân hệ độc lập: Phân hệ khách hàng (Portal Frontend) và Phân hệ quản trị viên (Admin CPanel) với đầy đủ quy trình CRUD danh mục, quản lý vòng đời sản phẩm/Deal, giỏ hàng, đặt hàng và thống kê truy cập.
  • Giới hạn kỹ thuật: Hệ thống tập trung xử lý logic đặt chỗ voucher/phiếu khuyến mãi và thanh toán COD kết hợp chuyển khoản ngân hàng; chưa tích hợp cổng thanh toán quốc tế trực tiếp 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

Tại thời điểm nghiên cứu, các nền tảng mua chung tại Việt Nam đã bước đầu định hình thị trường nhưng còn tồn tại nhiều nhược điểm về cấu trúc dữ liệu và trải nghiệm phân nhóm sản phẩm:

Tiêu chí Muachung.vn (VCCorp) Cungmua.com (NET Entertainment) Nhommua.com (Rebate Networks / DiaDiem) Hệ thống Groupon đề xuất
Công nghệ cốt lõi Web Portal phân tán, tích hợp Gold xu PHP/MySQL tùy biến ASP.NET / IIS Platform ASP.NET C# mô hình 3 lớp, SQL Server 2005
Cơ chế Deal Mua chung tích lũy thời gian thực Phiếu Cùng Mua / Phiếu Mua Là Giảm Deal giảm giá 40-90%, Voucher điện tử Quản lý Deal định thời (NgayBatDau, NgayKetThuc)
Phân loại danh mục Chưa tối ưu danh mục con Thiếu hệ thống phân cấp nhóm sản phẩm Nhóm sản phẩm hạn chế (Du lịch, Smartphone) Phân cấp danh mục động qua DanhMucSP
Hạ tầng hỗ trợ Tổng đài & điểm nhận coupon giới hạn Hotline theo thành phố Tích hợp hệ thống bản đồ địa điểm Hỗ trợ quản lý đơn, tracking trạng thái đơn 24/7
                 MoSCoW Requirements Prioritization

Thiết kế hệ thống

Kiến trúc hệ thống 3 lớp (3-Tier Architecture)

Hệ thống được thiết kế theo mô hình tách biệt rõ ràng giữa giao diện, logic xử lý nghiệp vụ và truy xuất dữ liệu:

  • Presentation Layer (GUI): Xây dựng bằng ASP.NET Web Forms (.aspx), tận dụng cơ chế Code-Behind để tách rời mã HTML/CSS và mã lệnh điều khiển C#.
  • Business Logic Layer (BLL): Xử lý các quy tắc nghiệp vụ như: kiểm tra tính hợp lệ của thời gian mở bán Deal, tính toán chiết khấu phần trăm, kiểm tra số lượng tồn kho và xác thực phiên làm việc (SessionState).
  • Data Access Layer (DAL): Tương tác với cơ sở dữ liệu Microsoft SQL Server 2005 thông qua thư viện ADO.NET (SqlConnection, SqlCommand, SqlDataAdapter, SqlDataReader), sử dụng các Stored Procedure và lệnh Transact-SQL (T-SQL) được tối ưu hóa.

Thiết kế Cơ sở dữ liệu quan hệ (RDM)

Cơ sở dữ liệu bao gồm 12 bảng thực thể chính được chuẩn hóa theo dạng chuẩn 3NF:

  • SanPham (MaSP, TenSP, Gia, MoTa, SoLuongNhap, NgayBatDau, GioBatDau, NgayKetThuc, GioKetThuc, MaDM)
  • DanhMucSP (MaDM, TenDM)
  • HinhSanPham (MaHinh, UrlHinh, MaSP)
  • DonHang (MaDH, NgayDat, NgayXuLy, MaNguoiDung, MaTinhTrang)
  • ChiTietDH (MaDH, MaSP, SoLuong, DonGia, ThanhTien)
  • TinhTrangDonHang (MaTinhTrang, TenTinhTrang)
  • NguoiDung (MaNguoiDung, TenDangNhap, MatKhau, HoTen, CMND, DiaChi, DienThoai, Email, MaKieu)
  • KieuNguoiDung (MaKieu, TenKieu)
  • GioHang (MaGio, MaSP, SessionID, SoLuong, DonGia)
  • TinTuc (MaTin, TieuDe, TomTat, NoiDung, NgayDang, NguonTin)
  • HinhTinTuc (MaHinhTin, UrlHinh, MaTin)
  • ThongKe (MaThongKe, Ngay, SoLuotTruyCap)
-- DDL Trích xuất cấu trúc bảng SanPham và DonHang trong SQL Server 2005
CREATE TABLE DanhMucSP (
    MaDM INT IDENTITY(1,1) PRIMARY KEY,
    TenDM NVARCHAR(150) NOT NULL
);

CREATE TABLE SanPham (
    MaSP INT IDENTITY(1,1) PRIMARY KEY,
    TenSP NVARCHAR(250) NOT NULL,
    Gia DECIMAL(18, 2) NOT NULL,
    MoTa NVARCHAR(MAX) NULL,
    SoLuongNhap INT NOT NULL DEFAULT 0,
    NgayBatDau DATETIME NOT NULL,
    NgayKetThuc DATETIME NOT NULL,
    MaDM INT FOREIGN KEY REFERENCES DanhMucSP(MaDM) ON DELETE CASCADE
);

CREATE TABLE DonHang (
    MaDH INT IDENTITY(1,1) PRIMARY KEY,
    NgayDat DATETIME DEFAULT GETDATE(),
    NgayXuLy DATETIME NULL,
    MaNguoiDung INT NOT NULL FOREIGN KEY REFERENCES NguoiDung(MaNguoiDung),
    MaTinhTrang INT NOT NULL FOREIGN KEY REFERENCES TinhTrangDonHang(MaTinhTrang)
);

Methodology

Dự án áp dụng phương pháp phát triển phần mềm theo mô hình Thác nước cải tiến (Modified Waterfall Model), kết hợp kiểm thử hồi quy theo từng mô-đun:

      (Tuần 1 - 3)                (Tuần 4 - 6)                (Tuần 7 - 8)                 (Tuần 9 - 13)              (Tuần 14 - 16)
  • Quản lý rủi ro kỹ thuật:
    • Rủi ro tràn bộ nhớ phiên (Session Leak): Khắc phục bằng cách giải phóng giỏ hàng khi người dùng thoát hoặc chuyển trạng thái sang đơn hàng thành công.
    • Rủi ro tấn công SQL Injection: Sử dụng cơ chế tham số hóa dữ liệu (SqlParameter) cho toàn bộ các tác vụ truy vấn động.
  • Tiêu chuẩn chất lượng: Tuân thủ chuẩn lập trình .NET Framework, cấu trúc mã nguồn dạng Code-Behind rõ ràng, biên dịch trước (Pre-compiled) sang mã máy thông qua CLR (Common Language Runtime).

Implementation và kết quả

Development process

Quá trình hiện thực hóa tập trung vào việc xử lý chính xác logic đặc thù của mô hình Groupon: kiểm tra khung thời gian hiệu lực của sản phẩm và quản lý trạng thái giỏ hàng.

Trích đoạn mã nguồn xử lý nghiệp vụ (C# ASP.NET Code-Behind)

Đoạn mã sau thực hiện chức năng kiểm tra trạng thái Deal của sản phẩm trước khi cho phép người dùng thêm vào giỏ hàng:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

public partial class ChiTietSanPham : System.Web.UI.Page
{
    private string strConn = ConfigurationManager.ConnectionStrings["GrouponDBConn"].ConnectionString;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            int maSP = Convert.ToInt32(Request.QueryString["ID"]);
            LoadProductDetails(maSP);
        }
    }

    private void LoadProductDetails(int productId)
    {
        using (SqlConnection conn = new SqlConnection(strConn))
        {
            string query = "SELECT MaSP, TenSP, Gia, MoTa, NgayBatDau, NgayKetThuc FROM SanPham WHERE MaSP = @MaSP";
            SqlCommand cmd = new SqlCommand(query, conn);
            cmd.Parameters.AddWithValue("@MaSP", productId);
            
            conn.Open();
            SqlDataReader reader = cmd.ExecuteReader();
            if (reader.Read())
            {
                lblTenSP.Text = reader["TenSP"].ToString();
                lblGia.Text = string.Format("{0:N0} VNĐ", reader["Gia"]);
                lblMoTa.Text = reader["MoTa"].ToString();
                
                DateTime ngayKetThuc = Convert.ToDateTime(reader["NgayKetThuc"]);
                DateTime now = DateTime.Now;

                // Kiểm tra trạng thái hết hạn của Deal Groupon
                if (now > ngayKetThuc)
                {
                    btnAddToCart.Enabled = false;
                    lblStatus.Text = "Deal này đã kết thúc!";
                    lblStatus.ForeColor = System.Drawing.Color.Red;
                }
                else
                {
                    btnAddToCart.Enabled = true;
                    TimeSpan remaining = ngayKetThuc - now;
                    lblStatus.Text = string.Format("Thời gian còn lại: {0} ngày {1} giờ {2} phút", 
                                                   remaining.Days, remaining.Hours, remaining.Minutes);
                }
            }
        }
    }

    protected void btnAddToCart_Click(object sender, EventArgs e)
    {
        int productId = Convert.ToInt32(Request.QueryString["ID"]);
        DataTable dtCart = Session["Cart"] as DataTable;
        
        if (dtCart == null)
        {
            dtCart = new DataTable();
            dtCart.Columns.Add("MaSP", typeof(int));
            dtCart.Columns.Add("TenSP", typeof(string));
            dtCart.Columns.Add("DonGia", typeof(decimal));
            dtCart.Columns.Add("SoLuong", typeof(int));
            dtCart.Columns.Add("ThanhTien", typeof(decimal));
        }

        // Kiểm tra xem sản phẩm đã có trong giỏ hàng chưa
        DataRow[] existingRows = dtCart.Select("MaSP = " + productId);
        if (existingRows.Length > 0)
        {
            existingRows[0]["SoLuong"] = Convert.ToInt32(existingRows[0]["SoLuong"]) + 1;
            existingRows[0]["ThanhTien"] = Convert.ToInt32(existingRows[0]["SoLuong"]) * Convert.ToDecimal(existingRows[0]["DonGia"]);
        }
        else
        {
            DataRow dr = dtCart.NewRow();
            dr["MaSP"] = productId;
            dr["TenSP"] = lblTenSP.Text;
            dr["DonGia"] = Convert.ToDecimal(lblGia.Text.Replace(" VNĐ", "").Replace(",", ""));
            dr["SoLuong"] = 1;
            dr["ThanhTien"] = Convert.ToDecimal(dr["DonGia"]);
            dtCart.Rows.Add(dr);
        }

        Session["Cart"] = dtCart;
        Response.Redirect("GioHang.aspx");
    }
}

Testing và validation

Hệ thống đã trải qua quá trình kiểm thử chức năng (Functional Testing), kiểm thử giao diện và kiểm thử tải trên môi trường giả lập:

  • Phân hệ Khách hàng: Đạt 100% độ chính xác trong việc hiển thị sản phẩm theo mã định danh ID, cập nhật số lượng và tính tổng tiền trong giỏ hàng.
  • Phân hệ Quản trị (Admin): Thực hiện chính xác các thao tác CRUD danh mục sản phẩm, quản lý trạng thái xử lý đơn hàng (ChuaXuLy -> DaXuLy), thêm/sửa tin tức và thống kê lượt truy cập theo thời gian.
  • Hiệu năng hệ thống (Benchmark metrics):
    • Thời gian phản hồi trang trung bình: < 1.1 giây trên môi trường mạng nội bộ và băng thông tiêu chuẩn.
    • Tối ưu hóa truy vấn SQL Server: 100% các câu lệnh tìm kiếm và lọc dữ liệu hoàn thành dưới 120ms với tập dữ liệu thử nghiệm 1.000 bản ghi sản phẩm.
                    KẾT QUẢ KIỂM THỬ CHỨC NĂNG HỆ THỐNG

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

  1. Chuẩn hóa kiến trúc 3 lớp trên nền tảng .NET: Đồ án xây dựng thành công bộ khung ứng dụng thương mại điện tử bằng C# và SQL Server 2005 có tính mô-đun hóa cao, giúp việc bảo trì và nâng cấp giao diện hoàn toàn không làm gián đoạn tầng logic nghiệp vụ.
  2. Hiện thực hóa mô hình định thời Deal linh hoạt: Khác với các website bán hàng truyền thống, hệ thống tích hợp các trường dữ liệu NgayBatDau, GioBatDau, NgayKetThuc, GioKetThuc, cho phép tự động kích hoạt và đóng giao dịch khuyến mãi mà không cần can thiệp thủ công từ quản trị viên.
  3. Tối ưu hóa quản lý trạng thái phiên mua hàng: Ứng dụng quản lý Session State hiệu quả, bảo đảm dữ liệu giỏ hàng được duy trì xuyên suốt quá trình duyệt web của khách hàng mà không làm phát sinh dữ liệu rác trong bảng vật lý của hệ quản trị cơ sở dữ liệu.
  4. Cung cấp tài liệu tham khảo chi tiết: Hệ thống hóa toàn bộ tài liệu phân tích thiết kế hệ thống từ BFD, DFD mức ngữ cảnh đến DFD mức 1 cho từng phân hệ nghiệp vụ, làm tài liệu tham khảo ứng dụng thực tế cho sinh viên ngành Thương mại điện tử và Công nghệ thông tin.

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

Kịch bản sử dụng thực tế (Real-World Use Cases)

  • Doanh nghiệp bán lẻ & Dịch vụ ẩm thực/spa: Tạo các chiến dịch khuyến mãi Flash-Sale hoặc Mua chung ngắn hạn để kích cầu tiêu dùng vào mùa thấp điểm, giải phóng hàng tồn kho nhanh chóng.
  • Khách hàng tiêu dùng cá nhân: Tiếp cận các gói dịch vụ cao cấp với mức giá giảm từ 30% đến 90%, dễ dàng chia sẻ thông tin khuyến mãi đến bạn bè qua mạng xã hội để cùng đạt điều kiện mua.

Yêu cầu cấu hình hệ thống triển khai (Deployment Specifications)

                            MÔI TRƯỜNG TRIỂN KHAI

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

Hạn chế kỹ thuật

  • Giao diện web được thiết kế cố định, chưa tối ưu hoàn toàn chuẩn Responsive Design cho thiết bị di động thông minh màn hình nhỏ.
  • Phương thức thanh toán chủ yếu dừng lại ở thanh toán tiền mặt khi giao phiếu (COD) hoặc chuyển khoản thủ công; chưa tích hợp cổng thanh toán trực tuyến qua API thẻ tín dụng quốc tế hoặc ví điện tử.
  • Chưa có hệ thống thông báo tự động qua SMS Brandname hoặc Email Marketing khi Deal hoàn tất số lượng người mua.

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

  • Nâng cấp công nghệ: Tái cấu trúc mã nguồn sang mô hình ASP.NET MVC / ASP.NET Core kết hợp kiến trúc RESTful API để phục vụ đa nền tảng (Web và Mobile App).
  • Tích hợp cổng thanh toán hiện đại: Kết nối với các cổng thanh toán trung gian như Ngân Lượng, Bảo Kim, MoMo, VNPay để tự động hóa khâu xác thực thanh toán.
  • Cá nhân hóa trải nghiệm người dùng: Ứng dụng giải thuật gợi ý sản phẩm dựa trên lịch sử xem và danh mục yêu thích của người dùng.

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

  • Sinh viên ngành CNTT & Thương mại điện tử: Tiếp cận tài liệu thực tế về quy trình phân tích thiết kế hệ thống từ BFD, DFD đến mô hình hóa dữ liệu ERD và hiện thực hóa bằng C#.
  • Lập trình viên phần mềm .NET: Tham khảo mô hình kiến trúc 3 lớp, kỹ thuật quản lý phiên làm việc (Session), kỹ thuật kết nối ADO.NET tối ưu và cách tổ chức các tầng xử lý dữ liệu.
  • Doanh nghiệp vừa và nhỏ (SMEs): Sở hữu giải pháp mẫu để triển khai kênh tiếp thị liên kết, thúc đẩy doanh số bán hàng thông qua cơ chế kích cầu mua sắm theo nhóm với chi phí đầu tư ban đầu thấp.
  • Nhà nghiên cứu kinh doanh số: Nguồn tư liệu phân tích chuyên sâu về sự chuyển biến của thị trường TMĐT Việt Nam giai đoạn chuyển đổi mô hình mua sắm theo nhóm (B2T).

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

1. Yêu cầu kỹ thuật tối thiểu để cài đặt và triển khai đồ án là gì?

Hệ thống yêu cầu máy chủ hoặc máy trạm chạy hệ điều hành Windows XP/7/Server 2003 trở lên, đã cài đặt môi trường Microsoft .NET Framework 3.5, máy chủ web Internet Information Services (IIS) và hệ quản trị cơ sở dữ liệu Microsoft SQL Server 2005. Mã nguồn được biên tập và phát triển thuận tiện nhất trên Visual Studio 2008 hoặc Visual Studio 2010.

2. Hệ thống kiểm soát tính hợp lệ của thời gian Deal Groupon như thế nào?

Mỗi sản phẩm trong bảng SanPham lưu trữ 2 mốc thời gian: NgayBatDau (kèm GioBatDau) và NgayKetThuc (kèm GioKetThuc). Khi người dùng truy cập trang ChiTietSanPham.aspx, hệ thống tự động so sánh thời gian hiện tại của hệ thống máy chủ (DateTime.Now) với mốc kết thúc; nếu quá hạn, nút "Đặt mua / Thêm vào giỏ" sẽ bị vô hiệu hóa (Enabled = false) và chuyển trạng thái thông báo.

3. Dữ liệu giỏ hàng được lưu trữ bằng phương thức nào?

Giỏ hàng được tổ chức dưới dạng một đối tượng bảng dữ liệu ảo (DataTable) lưu trong bộ nhớ phiên làm việc của máy chủ thông qua biến Session["Cart"]. Phương pháp này giúp quá trình thêm, bớt, cập nhật số lượng diễn ra tức thì, giảm thiểu tối đa các thao tác đọc/ghi liên tục vào ổ cứng cơ sở dữ liệu cho đến khi người dùng nhấn "Xác nhận đặt hàng".

4. Hệ thống đảm bảo tính toàn vẹn dữ liệu khi xóa danh mục sản phẩm ra sao?

Trong thiết kế cơ sở dữ liệu SQL Server, các bảng có quan hệ ràng buộc khóa ngoại (ví dụ: MaDM giữa bảng DanhMucSPSanPham) được cấu hình quy tắc toàn vẹn tham chiếu. Việc xóa danh mục được kiểm soát chặt chẽ bằng ràng buộc toàn vẹn hoặc kích hoạt xóa theo tầng (CASCADE DELETE), bảo đảm không sinh ra các bản ghi mồ côi.

5. Làm thế nào để mở rộng tích hợp thanh toán trực tuyến trong tương lai?

Nhờ cấu trúc mã nguồn tách biệt theo mô hình 3 lớp, lập trình viên chỉ cần bổ sung các lớp dịch vụ kết nối (Payment Gateway Service) trong tầng Business Logic Layer (BLL) để gọi API của các đơn vị trung gian thanh toán mà không cần thay đổi cấu trúc bảng cơ sở dữ liệu cốt lõi.


Kết luận

Đồ án tốt nghiệp "Xây dựng Website kinh doanh theo mô hình Groupon" đã giải quyết toàn diện bài toán lý luận và thực tiễn về ứng dụng công nghệ thông tin trong thương mại điện tử hiện đại. Bằng việc kết hợp kiến trúc phần mềm 3 lớp trên nền tảng ASP.NET (C#) và hệ quản trị cơ sở dữ liệu Microsoft SQL Server 2005, đồ án đã chứng minh tính khả thi cao trong việc xây dựng một hệ sinh thái mua sắm theo nhóm linh hoạt, tối ưu chi phí vận hành cho doanh nghiệp và gia tăng giá trị kinh tế cho người tiêu dùng. Đây là nền tảng vững chắc để tiếp tục nghiên cứu, mở rộng thành các giải pháp thương mại điện tử đa kênh và ứng dụng di động trong kỷ nguyên số hóa toàn diện.