Bối cảnh và vấn đề nghiên cứu
Trong bối cảnh chuyển đổi số ngành bán lẻ, các doanh nghiệp kinh doanh mô hình siêu thị mini đang phải xử lý khối lượng danh mục hàng hóa đa dạng, thường xuyên biến động số lượng và yêu cầu tính chính xác cao trong từng giao dịch. Hoạt động quản trị truyền thống tại các điểm bán lẻ quy mô vừa và nhỏ thường gặp nhiều khó khăn: kiểm soát tồn kho thiếu chính xác, quy trình nhập xuất hàng hóa phức tạp, việc tổng hợp báo cáo kinh doanh chậm trễ và đặc biệt là rủi ro gián đoạn bán hàng khi mất kết nối mạng Internet tại quầy thu ngân.
Đồ án môn học "Xây dựng website quản lý siêu thị mini Lemoo" do nhóm sinh viên Khoa Công nghệ thông tin thực hiện nhằm giải quyết trực tiếp các bài toán vận hành trên thông qua một hệ thống phần mềm chuyên dụng.
Mục tiêu và nhiệm vụ nghiên cứu của đồ án bao gồm:
- Thiết kế và cài đặt hệ thống phần mềm quản lý bán hàng và vận hành siêu thị mini Lemoo, tối ưu hóa cho các doanh nghiệp bán lẻ vừa và nhỏ.
- Xây dựng đầy đủ các phân hệ chức năng nghiệp vụ cốt lõi: quản lý sản phẩm đa biến thể, quản lý mã SKU và mã vạch (barcode), quản lý nhập xuất kho, kiểm soát tồn kho thời gian thực, quản lý ca bán hàng và phân quyền tài khoản người dùng theo vai trò.
- Nghiên cứu và áp dụng kiến trúc ưu tiên ngoại tuyến (Offline-First) kết hợp hệ thống hàng đợi thông điệp (Message Broker) nhằm đảm bảo hoạt động bán hàng tại quầy (POS) diễn ra liên tục, tự động đồng bộ hàng nghìn giao dịch về máy chủ khi kết nối trực tuyến được khôi phục.
Đối tượng và phạm vi nghiên cứu:
- Đối tượng nghiên cứu: Quy trình nghiệp vụ bán lẻ siêu thị mini, quy trình quản lý kho hàng hóa, cơ chế lưu trữ cục bộ trên trình duyệt (IndexedDB), cơ chế xử lý bất đồng bộ và đồng bộ dữ liệu trực tuyến - ngoại tuyến.
- Phạm vi không gian: Đồ án môn học Lập trình Web thực hiện tại Viện Đào tạo Công nghệ thông tin và Chuyển đổi số – Trường Đại học Thủ Dầu Một, tỉnh Bình Dương.
- Phạm vi thời gian: Đồ án hoàn thành vào tháng 12/2024.
Cơ sở lý thuyết và công nghệ sử dụng
Đồ án áp dụng phương pháp phân tích và thiết kế hệ thống hướng đối tượng thông qua ngôn ngữ mô hình hóa thống nhất (UML), kết hợp kiến trúc phần mềm hướng dịch vụ và xử lý bất đồng bộ. Ngăn xếp công nghệ (tech stack) được lựa chọn dựa trên tiêu chí hiệu năng cao, khả năng mở rộng và tính ổn định khi xử lý giao dịch:
- ASP.NET Core MVC và C#: Nền tảng phát triển ứng dụng backend chính. ASP.NET Core cung cấp hiệu năng xử lý cao, kiến trúc module hóa hiện đại và khả năng triển khai đa nền tảng.
- PostgreSQL: Hệ quản trị cơ sở dữ liệu quan hệ chính (RDBMS), đảm nhận lưu trữ toàn bộ dữ liệu cấu trúc của hệ thống, hỗ trợ các truy vấn phức tạp và đảm bảo tính toàn vẹn dữ liệu (ACID).
- Redis: Hệ thống lưu trữ dữ liệu dạng key-value trong bộ nhớ (in-memory data store), được sử dụng để quản lý phiên làm việc của người dùng (session management) và làm bộ nhớ đệm (caching), giúp giảm tải truy vấn trực tiếp cho cơ sở dữ liệu chính.
- Elasticsearch: Công cụ tìm kiếm và phân tích phân tán, phục vụ tìm kiếm toàn văn (full-text search) tốc độ cao đối với danh mục hàng hóa, đơn hàng và hồ sơ khách hàng.
- RabbitMQ: Hệ thống điều phối hàng đợi thông điệp (Message Broker), đóng vai trò trung tâm xử lý các tác vụ bất đồng bộ, tiếp nhận và điều phối hàng nghìn giao dịch đồng bộ từ máy bán hàng POS để các tiến trình worker xử lý song song.
- IndexedDB và Background Sync API: Công nghệ lưu trữ dữ liệu cục bộ trên trình duyệt phía client, cho phép lưu trữ tạm thời danh mục hàng hóa và hóa đơn khi mất mạng, kết hợp cơ chế đồng bộ nền tự động khi có kết nối trở lại.
Thiết kế và triển khai hệ thống
1. Kiến trúc hệ thống và cơ chế Offline-First
Hệ thống Lemoo được thiết kế theo mô hình phân tán nhằm giải quyết triệt để vấn đề gián đoạn vận hành khi mất kết nối mạng. Luồng xử lý giao dịch và đồng bộ dữ liệu được tổ chức như sau:
- Tầng Client (POS App): Giao diện bán hàng tương tác trực tiếp với cơ sở dữ liệu cục bộ IndexedDB trên trình duyệt. Khi ở chế độ offline, mọi thao tác tạo đơn hàng, quét mã vạch và in hóa đơn đều thực hiện trên IndexedDB.
- Tầng điều phối và cân bằng tải: Khi có mạng, các yêu cầu giao dịch hoặc gói dữ liệu đồng bộ được gửi qua bộ cân bằng tải (Load Balancer) để phân phối đến các máy chủ ứng dụng ASP.NET Core.
- Tầng xử lý bất đồng bộ: Thay vì ghi trực tiếp vào PostgreSQL gây nghẽn cổ chai khi đồng bộ số lượng lớn, máy chủ đẩy các gói tin đơn hàng vào hàng đợi RabbitMQ. Các tiến trình xử lý nền (workers) sẽ lấy dữ liệu từ hàng đợi để ghi nhận vào cơ sở dữ liệu và cập nhật số lượng tồn kho.
2. Thiết kế cơ sở dữ liệu
Cơ sở dữ liệu của hệ thống Lemoo được chuẩn hóa thành 20 bảng dữ liệu, quản lý toàn diện các mối quan hệ nghiệp vụ từ tài khoản, chi nhánh, sản phẩm biến thể đến nhật ký kho hàng và hóa đơn:
| STT |
Tên bảng |
Chức năng và ý nghĩa quản lý |
| 1 |
ACCOUNT |
Lưu trữ thông tin tài khoản (id, tên, email, số điện thoại, mật khẩu, avatar, trạng thái kích hoạt, thời gian tạo/cập nhật). |
| 2 |
AUTHORITY |
Quản lý danh mục vai trò/xác thực trong hệ thống. |
| 3 |
PERMISSION |
Định nghĩa các quyền hạn cụ thể (PermissionTypeE). |
| 4 |
AUTHORITY_PERMISSION |
Bảng trung gian liên kết phân quyền cho từng vai trò. |
| 5 |
ACCOUNT_AUTHORITY |
Bảng gán vai trò quyền hạn cho từng tài khoản người dùng. |
| 6 |
STAFF |
Thông tin nhân viên (mã nhân viên, liên kết tài khoản, mã chi nhánh, ngày sinh, địa chỉ, trạng thái). |
| 7 |
STORE |
Thông tin cửa hàng chủ quản. |
| 8 |
BRANCH |
Thông tin các chi nhánh siêu thị (mã cửa hàng, tên chi nhánh, số điện thoại, địa chỉ phân cấp tỉnh/quận/phường). |
| 9 |
PRODUCT |
Thông tin sản phẩm chung (mã sản phẩm, tên, đơn vị tính, mã cửa hàng, mã danh mục, thương hiệu). |
| 10 |
ATTRIBUTE |
Quản lý tên thuộc tính của sản phẩm (ví dụ: kích thước, màu sắc, hương vị). |
| 11 |
ATTRIBUTE_VALUE |
Quản lý các giá trị tương ứng của thuộc tính sản phẩm. |
| 12 |
PRODUCT_VARIENT |
Quản lý các biến thể sản phẩm cụ thể (giá vốn, giá bán, mã SKU, mã vạch Barcode, hình ảnh, cờ cho phép bán). |
| 13 |
VARIENT_ATTRIBUTE |
Bảng liên kết giữa biến thể sản phẩm và giá trị thuộc tính. |
| 14 |
CATEGORY |
Danh mục phân loại sản phẩm. |
| 15 |
BRAND |
Thông tin các thương hiệu hàng hóa. |
| 16 |
INVENTORY |
Quản lý số lượng tồn kho thực tế và số lượng có sẵn (available) theo từng biến thể sản phẩm tại từng chi nhánh. |
| 17 |
INVENTORY_LOG |
Ghi nhật ký biến động kho (mã kho, nhân viên thao tác, hành động, số lượng trước/sau, số lượng sẵn có trước/sau). |
| 18 |
CUSTOMER |
Thông tin khách hàng thành viên. |
| 19 |
ORDER |
Quản lý đơn hàng (mã đặt hàng, mã cửa hàng, người tạo, mã khách hàng, tổng tiền, phương thức thanh toán). |
| 20 |
ORDER_ITEM |
Chi tiết mặt hàng trong đơn hàng (mã sản phẩm biến thể, số lượng, thành tiền). |
3. Phân hệ chức năng và giao diện
Hệ thống triển khai 27 màn hình giao diện phục vụ đầy đủ các tác vụ nghiệp vụ:
- Giao diện POS bán hàng: Bao gồm màn hình bán hàng tại quầy trực tuyến, giao diện bán hàng offline, màn hình kiểm tra sản phẩm chưa đồng bộ và giao diện đóng/mở ca bán hàng, in phiếu giao ca.
- Giao diện quản lý kho và danh mục: Tra cứu tồn kho, danh sách sản phẩm, thêm mới sản phẩm đa biến thể, thêm nhanh sản phẩm, quản lý danh mục và thương hiệu.
- Giao diện quản trị hệ thống: Đăng ký/đăng nhập, danh sách nhân viên, phân quyền vai trò người dùng, cấu hình thông tin cửa hàng và chi nhánh.
Nội dung chính theo từng chương
Chương 1. Giới thiệu đồ án
Chương 1 trình bày bối cảnh thực tiễn của ngành kinh doanh bán lẻ siêu thị mini, các rủi ro và bất cập trong việc quản lý thủ công hàng hóa, tồn kho và doanh thu. Tác giả xác định mục tiêu xây dựng giải pháp phần mềm Lemoo với các tính năng cốt lõi: quản lý nhập xuất kho, kiểm soát tồn kho, tạo đơn qua quét mã vạch, lập báo cáo thời gian thực và tự động hóa vận hành trên giao diện thân thiện.
Chương 2. Phân tích hệ thống
Chương này mô hình hóa toàn bộ yêu cầu nghiệp vụ của hệ thống thông qua hệ thống Use Case và phân tích tác nhân:
-
Danh sách 4 tác nhân (Actors):
Admin: Quản trị toàn quyền tài khoản, phân quyền, hàng hóa, kho, nhà cung cấp và theo dõi báo cáo tổng hợp.
Nhân viên kho: Phụ trách lập phiếu nhập/xuất kho, kiểm tra tồn kho, cập nhật trạng thái hàng hóa và tiếp nhận đơn hàng từ nhà cung cấp.
Quản lý: Theo dõi thống kê tồn kho, giám sát hiệu quả hoạt động xuất/nhập, quản lý hàng hóa quy mô lớn và quan hệ nhà cung cấp.
Khách hàng: Tra cứu thông tin sản phẩm và theo dõi trạng thái đơn hàng.
-
Hệ thống 13 Use Case chức năng: Quản lý tài khoản, Quản lý hàng hóa, Quản lý nhà cung cấp, Quản lý nhập hàng, Quản lý xuất hàng, Thống kê và báo cáo, Đăng nhập, Kiểm tra tồn kho, Quản lý thông tin tài khoản, Tìm kiếm sản phẩm, Nhập dữ liệu (Excel/CSV), Phân quyền người dùng, Đăng ký.
-
Đặc tả chi tiết 7 Use Case trọng tâm:
001_QUANLYNHAPHANG: Quy trình lập, chỉnh sửa, xóa phiếu nhập; tự động cập nhật số lượng tồn kho sau xác nhận; chặn xóa phiếu nhập đã qua đối soát.
002/003_QUANLYTAIKHOAN: Thêm, sửa, xóa, phân quyền tài khoản (Admin, Quản lý, Nhân viên kho); cơ chế gửi email thông báo khi khóa/xóa tài khoản.
004_QUANLYXUATHANG: Kiểm tra số lượng tồn kho khả dụng; cảnh báo lỗi khi không đủ số lượng; cập nhật giảm kho tự động và hỗ trợ in phiếu xuất kho.
005_THONGKEBAOCAO: Trích xuất báo cáo doanh thu, đơn hàng, tồn kho theo các bộ lọc thời gian/khu vực; hỗ trợ xuất định dạng PDF và Excel.
006_DANGNHAP: Kiểm tra xác thực thông tin tài khoản; giới hạn thử sai tối đa 3 lần trước khi tạm khóa để bảo vệ hệ thống; quy trình khôi phục mật khẩu.
007_KIEMTRATONKHO: Tra cứu trạng thái sản phẩm theo mã SKU/tên; hiển thị chi tiết số lượng tồn thực tế, số lượng có sẵn, vị trí lưu trữ và trạng thái hàng hóa (Còn hàng, Hết hàng, Sắp hết hạn, Hư hỏng).
Chương 3. Thiết kế cơ sở dữ liệu
Nội dung chương 3 tập trung vào việc mô hình hóa sơ đồ quan hệ thực thể (ERD) và xây dựng cấu trúc chi tiết cho 20 bảng dữ liệu. Điểm nhấn trong thiết kế cơ sở dữ liệu của Lemoo là việc tách biệt rõ ràng giữa thực thể sản phẩm gốc (PRODUCT) và các biến thể sản phẩm (PRODUCT_VARIENT) thông qua bảng thuộc tính (ATTRIBUTE, ATTRIBUTE_VALUE, VARIENT_ATTRIBUTE). Thiết kế này cho phép một sản phẩm có nhiều quy cách đóng gói, giá vốn, giá bán, mã SKU và barcode riêng biệt. Đồng thời, bảng INVENTORY_LOG lưu trữ đầy đủ biến động số lượng trước và sau mỗi hành động xuất/nhập giúp kiểm soát kho chặt chẽ.
Chương 4. Thiết kế hệ thống ưu tiên offline
Chương 4 phân tích các thách thức kỹ thuật khi triển khai mô hình Offline-First: nguy cơ xung đột dữ liệu, áp lực tải khi đồng bộ đồng thời hàng loạt đơn hàng ngoại tuyến về máy chủ. Đồ án đưa ra giải pháp kết hợp giữa client-side storage (IndexedDB), trình đồng bộ nền (Background Sync) và Message Broker (RabbitMQ). Giao dịch tại quầy thu ngân được xử lý ngay lập tức trên máy trạm và đẩy vào hàng đợi khi trực tuyến, loại bỏ hoàn toàn tình trạng treo ứng dụng hoặc mất dữ liệu bán hàng khi đứt cáp mạng.
Chương 5. Giao diện và cài đặt chương trình
Chương cuối cùng giới thiệu trực quan 27 giao diện người dùng đã được lập trình và cài đặt hoàn chỉnh. Các nhóm giao diện bao gồm: nhóm giao diện xác thực và phân quyền, nhóm giao diện thiết lập cửa hàng/chi nhánh/danh mục, nhóm giao diện quản lý xuất nhập và tra cứu tồn kho, nhóm giao diện POS bán hàng trực tiếp/ngoại tuyến và giao diện quản lý ca làm việc (mở ca, đóng ca, kết toán và in biên bản bàn giao ca).
Kết quả và đóng góp
Kết quả đạt được
- Xây dựng thành công hệ thống phần mềm quản lý siêu thị mini Lemoo hoàn chỉnh trên nền tảng ASP.NET Core MVC và C#, kết nối cơ sở dữ liệu PostgreSQL.
- Triển khai thành công kiến trúc Offline-First tại phân hệ POS bán hàng, cho phép thu ngân tiếp tục tạo hóa đơn bán lẻ khi mất mạng Internet và tự động đồng bộ về máy chủ qua cơ chế Background Sync.
- Ứng dụng thành công RabbitMQ làm message broker trung gian giúp xử lý bất đồng bộ các giao dịch mua bán và đồng bộ đơn hàng mà không gây quá tải cơ sở dữ liệu.
- Tích hợp Redis để quản lý phiên và Elasticsearch để phục vụ tìm kiếm nhanh danh mục sản phẩm theo tên, mã SKU và mã vạch.
- Xây dựng hệ thống phân quyền người dùng theo vai trò chi tiết (Role-Based Access Control) kết hợp cơ chế kiểm soát tồn kho qua nhật ký biến động (
INVENTORY_LOG).
Đóng góp của đồ án
- Cung cấp giải pháp phần mềm quản lý bán lẻ thực tiễn, đáp ứng trực tiếp các yêu cầu vận hành của các cửa hàng tiện lợi và siêu thị mini vừa và nhỏ.
- Đóng góp mô hình kiến trúc tham khảo trong việc kết hợp kiến trúc ưu tiên ngoại tuyến (Offline-First) với hệ thống hàng đợi thông điệp bất đồng bộ (RabbitMQ) trên nền tảng ứng dụng web ASP.NET Core.
Hạn chế và hướng nghiên cứu tiếp
- Hạn chế: Theo phạm vi của đồ án môn học, hệ thống tập trung chủ yếu vào các nghiệp vụ nội bộ tại quầy và quản trị kho bãi của siêu thị, chưa tích hợp các cổng thanh toán điện tử trực tuyến bên thứ ba (ví điện tử, cổng thẻ ngân hàng trực tiếp) và chưa phát triển ứng dụng di động độc lập cho khách hàng.
- Hướng nghiên cứu tiếp:
- Mở rộng tính năng phân tích dữ liệu nâng cao và dự báo nhu cầu nhập hàng dựa trên lịch sử xuất bán.
- Nghiên cứu sâu hơn về các thuật toán tự động giải quyết xung đột dữ liệu nâng cao khi phát sinh đồng bộ đa điểm bán hàng cùng lúc.
- Tích hợp cổng thanh toán không tiền mặt và kết nối API tự động với các đơn vị vận chuyển, nhà cung cấp.
Giá trị tham khảo
Tài liệu đồ án là nguồn tham khảo hữu ích cho:
- Sinh viên ngành Công nghệ thông tin, Kỹ thuật phần mềm, Hệ thống thông tin: Tham khảo phương pháp phân tích thiết kế hệ thống hướng đối tượng qua Use Case, quy trình chuẩn hóa cơ sở dữ liệu quan hệ cho bài toán thương mại bán lẻ.
- Lập trình viên Web (.NET Stack): Tham khảo kiến trúc tích hợp giữa ASP.NET Core MVC với hệ sinh thái công nghệ gồm PostgreSQL, Redis, Elasticsearch và RabbitMQ.
- Nhà phát triển hệ thống POS: Tham khảo giải pháp thiết kế kiến trúc Offline-First sử dụng IndexedDB và Background Sync giải quyết bài toán mất kết nối tại quầy bán hàng.
Các phần có giá trị tham khảo kỹ thuật nổi bật nhất bao gồm: bản đặc tả chi tiết 7 Use Case nghiệp vụ kèm luồng sự kiện chính/phụ, sơ đồ 20 bảng cơ sở dữ liệu quản lý biến thể hàng hóa và mô hình điều phối dữ liệu qua Message Broker RabbitMQ.
Câu hỏi thường gặp
1. Hệ thống Lemoo giải quyết bài toán mất kết nối Internet khi bán hàng tại quầy như thế nào?
Hệ thống áp dụng kiến trúc Offline-First. Phía client sử dụng cơ sở dữ liệu IndexedDB trên trình duyệt để lưu trữ tạm thời danh mục sản phẩm và dữ liệu đơn hàng. Khi mất mạng, nhân viên vẫn thực hiện quét mã vạch và in phiếu bán hàng bình thường. Khi có mạng trở lại, cơ chế Background Sync sẽ tự động gửi dữ liệu đơn hàng lên máy chủ thông qua hàng đợi RabbitMQ để lưu vào cơ sở dữ liệu PostgreSQL.
2. Ngăn xếp công nghệ (tech stack) chính được sử dụng trong đồ án gồm những gì?
Đồ án sử dụng ASP.NET Core MVC (C#) cho tầng backend, PostgreSQL làm cơ sở dữ liệu quan hệ chính, Redis để lưu session và caching, Elasticsearch phục vụ tìm kiếm toàn văn, RabbitMQ làm message broker xử lý tác vụ bất đồng bộ, cùng IndexedDB và Background Sync cho tính năng ngoại tuyến phía client.
3. Hệ thống phân chia bao nhiêu nhóm tác nhân và nhiệm vụ chính của từng tác nhân là gì?
Hệ thống gồm 4 tác nhân: Admin (quản trị toàn diện tài khoản, cấu hình, phân quyền, hàng hóa, báo cáo), Nhân viên kho (nhập/xuất hàng, kiểm kê kho, xử lý đơn nhập từ nhà cung cấp), Quản lý (theo dõi thống kê tồn kho, báo cáo hiệu quả hoạt động, giám sát nhà cung cấp) và Khách hàng (tra cứu thông tin sản phẩm, theo dõi đơn đặt hàng).
4. Cơ sở dữ liệu của Lemoo hỗ trợ quản lý sản phẩm đa biến thể (Product Variant) như thế nào?
Hệ thống tách biệt thông tin sản phẩm chung (PRODUCT) với bảng biến thể (PRODUCT_VARIENT), kết hợp với các bảng ATTRIBUTE, ATTRIBUTE_VALUE và VARIENT_ATTRIBUTE. Cách thiết kế này cho phép mỗi biến thể sản phẩm có giá vốn, giá bán, mã SKU và mã vạch (Barcode) riêng biệt.
5. Luồng xử lý của Use Case Quản lý xuất hàng (004_QUANLYXUATHANG) diễn ra như thế nào khi kho không đủ hàng?
Trong luồng sự kiện chính, hệ thống sẽ tự động kiểm tra số lượng tồn kho khả dụng. Nếu số lượng hàng không đủ đáp ứng, hệ thống sẽ kích hoạt luồng phụ: hiển thị thông báo lỗi chi tiết và yêu cầu nhân viên kho điều chỉnh lại số lượng xuất hoặc chọn sản phẩm thay thế trước khi cho phép xác nhận tạo đơn xuất.
Kết luận
Đồ án môn học "Xây dựng website quản lý siêu thị mini Lemoo" do sinh viên Phạm Minh Hiếu và Lê Văn Hoàng thực hiện dưới sự hướng dẫn của ThS. Võ Quốc Lương (Trường Đại học Thủ Dầu Một) đã hoàn thành toàn diện việc phân tích, thiết kế và cài đặt phần mềm quản lý bán lẻ. Bằng việc ứng dụng kết hợp ASP.NET Core, PostgreSQL, RabbitMQ và kiến trúc Offline-First, hệ thống giải quyết hiệu quả bài toán bán hàng liên tục và kiểm soát tồn kho chính xác cho mô hình siêu thị mini. Đồ án cung cấp một tài liệu kỹ thuật có cấu trúc mạch lạc, chuẩn xác về mặt mô hình hóa và giàu giá trị tham khảo thực tiễn trong phát triển phần mềm ứng dụng web.