Giới thiệu dự án
Bối cảnh và thực trạng ngành bán lẻ truyền thống
Theo thống kê từ Bộ Công Thương và Hiệp hội các nhà bán lẻ Việt Nam, mô hình bán lẻ truyền thống (cửa hàng tạp hóa, tiệm bách hóa gia đình) hiện vẫn chiếm tới hơn 70% thị phần ngành bán lẻ tại các vùng ven đô và nông thôn. Tuy nhiên, có đến hơn 85% các hộ kinh doanh này vẫn duy trì phương thức quản lý thủ công bằng sổ sách hoặc trí nhớ. Thói quen này dẫn đến tỷ lệ thất thoát hàng hóa trung bình dao động từ 7% đến 15% mỗi năm do hàng hết hạn sử dụng, nhầm lẫn số liệu và sai lệch tồn kho.
Định nghĩa vấn đề và các điểm nghẽn (Pain Points)
Khảo sát thực tế tại các điểm kinh doanh nhỏ lẻ cho thấy:
- Rào cản chi phí: Các nền tảng phần mềm quản lý kho thương mại dạng SaaS (Software as a Service) như KiotViet, Sapo hay các hệ thống ERP mini yêu cầu mức phí duy trì định kỳ từ 2.400.000 đến 6.000.000 VNĐ/năm, đi kèm chi phí bản quyền thiết bị ngoại vi không phù hợp với biên lợi nhuận thấp của tiệm tạp hóa.
- Độ phức tạp giao diện: Hầu hết các phần mềm thương mại tích hợp quá nhiều tính năng phân hệ doanh nghiệp phức tạp (kế toán thuế, chuỗi cung ứng đa kênh, CRM chuyên sâu), khiến người lớn tuổi hoặc người không am hiểu công nghệ gặp trở ngại lớn khi vận hành.
- Thiếu khả năng tùy biến cục bộ: Thiếu cơ chế kết nối linh hoạt với các định dạng văn phòng quen thuộc như Excel để nhập/xuất dữ liệu nhanh chóng khi kiểm kê hàng loạt.
Mục tiêu của đồ án
Đồ án "Website Quản Lí Kho Cho Cửa Hàng Tạp Hóa" do sinh viên Nguyễn Hoàng Duy (Khoa Khoa học Máy tính – Trường Đại học Mở TP. Hồ Chí Minh) thực hiện dưới sự hướng dẫn của TS. Nguyễn Tiến Đạt nhằm đạt được 5 mục tiêu cốt lõi:
- Xây dựng nền tảng web quản lý kho độc lập, triển khai linh hoạt với chi phí duy trì 0 đồng về mặt bản quyền phần mềm.
- Tối giản hóa giao diện người dùng (Zero-friction UI/UX), đảm bảo người dùng phổ thông có thể sử dụng thành thạo sau 15 phút làm quen.
- Tự động hóa toàn bộ quy trình nghiệp vụ: Quản lý hàng hóa, phân loại danh mục, lập phiếu nhập/xuất kho và theo dõi lịch sử luân chuyển hàng tồn.
- Tích hợp module xử lý tập tin Excel hai chiều (Import danh sách phiếu nhập và Export báo cáo thống kê doanh số, xuất kho).
- Phân quyền chặt chẽ giữa Quản trị viên (Admin) và Nhân viên vận hành nhằm bảo mật dữ liệu kinh doanh.
Phương pháp tiếp cận giải pháp
Đồ án áp dụng kiến trúc phân tầng Model-View-Controller (MVC) thông qua PHP Framework Laravel kết hợp hệ quản trị cơ sở dữ liệu MySQL. Lựa chọn này đảm bảo tách bạch giữa logic nghiệp vụ (Business Logic), truy xuất dữ liệu (Data Access) và giao diện trực quan (Presentation Layer), giúp hệ thống đạt độ tin cậy cao, tốc độ phản hồi nhanh và dễ dàng mở rộng.
Kết quả đầu ra dự kiến
- Giảm thời gian kiểm kê và xử lý phiếu xuất/nhập từ 15-20 phút xuống dưới 2 phút/giao dịch.
- Độ chính xác dữ liệu tồn kho đạt 99.9%.
- Tốc độ phản hồi hệ thống trung bình đạt dưới 200ms trên môi trường máy chủ tiêu chuẩn.
Phạm vi và giới hạn hệ thống
- Phạm vi: Quản lý kho nội bộ cho các cửa hàng tạp hóa đơn điểm (Single-store), quản lý tối đa 10.000 mã định danh hàng hóa (SKU).
- Giới hạn: Hệ thống chưa tích hợp cổng thanh toán trực tuyến và chưa hỗ trợ cơ chế đồng bộ offline khi mất hoàn toàn kết nối Internet.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Bảng so sánh các giải pháp quản lý kho hiện hành
| Tiêu chí |
Sổ sách truyền thống |
Phần mềm SaaS thương mại |
Website Laravel tối giản (Đồ án) |
| Chi phí đầu tư |
Gần như bằng 0 |
200.000 – 500.000 VNĐ/tháng |
Chi phí 0 đồng phần mềm, tự triển khai |
| Độ phức tạp UI |
Rất thấp (viết tay) |
Cao (quá nhiều tính năng thừa) |
Tối giản, tập trung vào nghiệp vụ kho |
| Tốc độ tra cứu |
Chậm (5-10 phút/sản phẩm) |
Nhanh (< 1s) |
Nhanh (< 200ms) |
| Rủi ro sai lệch |
Rất cao (> 10%) |
Rất thấp (< 0.1%) |
Thấp (< 0.5%) |
| Nhập/Xuất Excel |
Không hỗ trợ |
Có (giới hạn theo gói) |
Hỗ trợ toàn diện 2 chiều |
| Khả năng sao lưu |
Dễ mất mát, hư hỏng vật lý |
Tự động trên Cloud |
Tự động qua CSDL MySQL / Backup file |
Yêu cầu người dùng theo mô hình MoSCoW
+-----------------------------------------------------------------------+
| YÊU CẦU NGƯỜI DÙNG (MoSCoW) |
+------------------------------------+----------------------------------+
| MUST HAVE (Bắt buộc): | SHOULD HAVE (Nên có): |
| - Đăng nhập & phân quyền RBAC | - Cảnh báo hàng cận date |
| - CRUD Hàng hóa, Loại hàng, NCC | - Tìm kiếm AJAX / Lọc đa tiêu chí|
| - Lập phiếu Nhập/Xuất kho | - Nhật ký biến động tồn kho |
| - Thống kê doanh thu, tồn kho | |
+------------------------------------+----------------------------------+
| COULD HAVE (Có thể có): | WON'T HAVE (Chưa phát triển): |
| - Import/Export file Excel | - Tích hợp máy quét RFID |
| - Tự động tính giá trị tồn kho | - Đa chi nhánh chuỗi cung ứng |
| | - Thanh toán tự động qua POS |
+------------------------------------+----------------------------------+
Thiết kế hệ thống
Kiến trúc hệ thống
Hệ thống vận hành theo mô hình kiến trúc MVC 3 lớp kết hợp kiến trúc dịch vụ web:
- Presentation Layer (View): Sử dụng Blade Template Engine, HTML5, CSS3 và thư viện jQuery để thực hiện các tương tác DOM động và gửi yêu cầu không đồng bộ (Asynchronous requests).
- Application Layer (Controller & Routing): Laravel Router điều hướng HTTP Requests tới các Controller tương ứng (
HangHoaController, NhapKhoController, XuatKhoController, ThongKeController). Controller thực thi kiểm tra tính hợp lệ (Validation) và xử lý logic nghiệp vụ.
- Data Access Layer (Model & Database): Laravel Eloquent ORM ánh xạ các thực thể quan hệ, thực hiện các câu truy vấn an toàn chống SQL Injection tới hệ quản trị MySQL Database.
[Client Browser]
[Web Server (Apache)]
[Laravel Router]
[Middleware (Auth, RoleCheck, CSRF Protection)]
[Controllers (Business Logic)]
Technology Stack và phiên bản
- Ngôn ngữ lập trình Backend: PHP v8.2
- Framework: Laravel Framework v10.x
- Hệ quản trị cơ sở dữ liệu: MySQL v8.0 / MariaDB v10.4
- Công cụ quản trị CSDL: phpMyAdmin v5.2
- Frontend UI Framework: Bootstrap v5.3 & Custom CSS
- Thư viện Javascript: jQuery v3.6.0
- Thư viện hỗ trợ: Maatwebsite/Laravel-Excel v3.1 (Xử lý bảng tính)
- Web Server: Apache v2.4 (môi trường XAMPP / Linux LAMP Stack)
Thiết kế cơ sở dữ liệu (Database Schema)
Cơ sở dữ liệu bao gồm các bảng quan hệ chặt chẽ đảm bảo tính toàn vẹn dữ liệu (Referential Integrity):
-- 1. Bảng Loại hàng hóa
CREATE TABLE loai_hang (
id_loai_hang INT AUTO_INCREMENT PRIMARY KEY,
ma_loai_hang VARCHAR(50) UNIQUE NOT NULL,
ten_loai_hang VARCHAR(255) NOT NULL,
mo_ta TEXT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 2. Bảng Nhà cung cấp
CREATE TABLE nha_cung_cap (
id_ncc INT AUTO_INCREMENT PRIMARY KEY,
ma_ncc VARCHAR(50) UNIQUE NOT NULL,
ten_ncc VARCHAR(255) NOT NULL,
so_dien_thoai VARCHAR(20) NOT NULL,
email VARCHAR(100) NULL,
dia_chi VARCHAR(255) NULL,
trang_thai TINYINT(1) DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 3. Bảng Hàng hóa
CREATE TABLE hang_hoa (
id_hang_hoa INT AUTO_INCREMENT PRIMARY KEY,
ma_hang_hoa VARCHAR(50) UNIQUE NOT NULL,
ten_hang_hoa VARCHAR(255) NOT NULL,
id_loai_hang INT NOT NULL,
id_ncc INT NOT NULL,
gia_nhap DECIMAL(12, 2) NOT NULL,
gia_ban DECIMAL(12, 2) NOT NULL,
so_luong_ton INT DEFAULT 0,
don_vi_tinh VARCHAR(50) NOT NULL,
han_su_dung DATE NULL,
hinh_anh VARCHAR(255) NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
FOREIGN KEY (id_loai_hang) REFERENCES loai_hang(id_loai_hang) ON DELETE RESTRICT,
FOREIGN KEY (id_ncc) REFERENCES nha_cung_cap(id_ncc) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 4. Bảng Phiếu nhập kho
CREATE TABLE phieu_nhap (
id_phieu_nhap INT AUTO_INCREMENT PRIMARY KEY,
ma_phieu_nhap VARCHAR(50) UNIQUE NOT NULL,
id_user INT NOT NULL,
id_ncc INT NOT NULL,
ngay_nhap DATETIME NOT NULL,
tong_tien DECIMAL(15, 2) NOT NULL DEFAULT 0,
ghi_chu TEXT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (id_ncc) REFERENCES nha_cung_cap(id_ncc)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 5. Bảng Chi tiết phiếu nhập
CREATE TABLE chi_tiet_phieu_nhap (
id_ct_nhap INT AUTO_INCREMENT PRIMARY KEY,
id_phieu_nhap INT NOT NULL,
id_hang_hoa INT NOT NULL,
so_luong_nhap INT NOT NULL,
don_gia_nhap DECIMAL(12, 2) NOT NULL,
thanh_tien DECIMAL(15, 2) NOT NULL,
FOREIGN KEY (id_phieu_nhap) REFERENCES phieu_nhap(id_phieu_nhap) ON DELETE CASCADE,
FOREIGN KEY (id_hang_hoa) REFERENCES hang_hoa(id_hang_hoa)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 6. Bảng Phiếu xuất kho
CREATE TABLE phieu_xuat (
id_phieu_xuat INT AUTO_INCREMENT PRIMARY KEY,
ma_phieu_xuat VARCHAR(50) UNIQUE NOT NULL,
id_user INT NOT NULL,
ngay_xuat DATETIME NOT NULL,
tong_tien DECIMAL(15, 2) NOT NULL DEFAULT 0,
ly_do_xuat VARCHAR(255) NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 7. Bảng Chi tiết phiếu xuất
CREATE TABLE chi_tiet_phieu_xuat (
id_ct_xuat INT AUTO_INCREMENT PRIMARY KEY,
id_phieu_xuat INT NOT NULL,
id_hang_hoa INT NOT NULL,
so_luong_xuat INT NOT NULL,
don_gia_xuat DECIMAL(12, 2) NOT NULL,
thanh_tien DECIMAL(15, 2) NOT NULL,
FOREIGN KEY (id_phieu_xuat) REFERENCES phieu_xuat(id_phieu_xuat) ON DELETE CASCADE,
FOREIGN KEY (id_hang_hoa) REFERENCES hang_hoa(id_hang_hoa)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Thiết kế Routing & RESTful API Endpoints
| HTTP Method |
URI Pattern |
Controller Action |
Chức năng nghiệp vụ |
GET |
/hang-hoa |
HangHoaController@index |
Lấy danh sách hàng hóa có phân trang |
POST |
/hang-hoa/store |
HangHoaController@store |
Thêm mới hàng hóa vào kho |
PUT |
/hang-hoa/update/{id} |
HangHoaController@update |
Cập nhật thông tin chi tiết mặt hàng |
DELETE |
/hang-hoa/destroy/{id} |
HangHoaController@destroy |
Xóa mặt hàng (kiểm tra ràng buộc khóa ngoại) |
POST |
/nhap-kho/store |
NhapKhoController@store |
Lập phiếu nhập và cập nhật tăng số lượng tồn |
POST |
/nhap-kho/import-excel |
NhapKhoController@importExcel |
Nhập hàng loạt từ tập tin Excel |
POST |
/xuat-kho/store |
XuatKhoController@store |
Lập phiếu xuất và trừ tồn kho tự động |
GET |
/xuat-kho/export-excel/{id} |
XuatKhoController@exportExcel |
Xuất hóa đơn/phiếu xuất ra định dạng .xlsx |
GET |
/thong-ke/doanh-thu |
ThongKeController@getReport |
Kết xuất dữ liệu báo cáo doanh số, tồn kho |
Phương pháp luận phát triển (Methodology)
Dự án được triển khai theo mô hình Agile/Scrum rút gọn trong thời gian 12 tuần với 4 Sprint cụ thể:
- Sprint 1 (Tuần 1-3): Khảo sát thực trạng tiệm tạp hóa, lập đặc tả yêu cầu, vẽ biểu đồ UML Use Case, Activity Diagram và thiết kế cơ sở dữ liệu vật lý.
- Sprint 2 (Tuần 4-7): Thiết lập Laravel core, cấu hình Authentication/Authorization, xây dựng module danh mục (Hàng hóa, Loại hàng, Nhà cung cấp).
- Sprint 3 (Tuần 8-10): Phát triển logic xuất/nhập kho, xử lý Database Transaction, tích hợp thư viện Import/Export Excel.
- Sprint 4 (Tuần 11-12): Thiết kế dashboard thống kê báo cáo, tối ưu hiệu năng truy vấn, kiểm thử liên thông (Integration Testing) và đóng gói triển khai.
Implementation và kết quả
Quy trình phát triển và hiện thực mã nguồn
Hệ thống áp dụng cơ chế Database Transaction của Laravel để đảm bảo tính toàn vẹn dữ liệu (ACID) tuyệt đối khi tạo phiếu nhập/xuất kho. Khi một phiếu nhập được tạo, toàn bộ chi tiết mặt hàng phải được lưu thành công và trường so_luong_ton trong bảng hang_hoa phải được cộng dồn tương ứng. Nếu xảy ra bất kỳ lỗi ngoại lệ nào, hệ thống sẽ thực hiện Rollback trạng thái.
Xử lý nghiệp vụ Nhập kho với Database Transaction
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\PhieuNhap;
use App\Models\ChiTietPhieuNhap;
use App\Models\HangHoa;
use Exception;
class NhapKhoController extends Controller
{
public function store(Request $request)
{
// 1. Xác thực tính hợp lệ của dữ liệu đầu vào
$request->validate([
'ma_phieu_nhap' => 'required|unique:phieu_nhap,ma_phieu_nhap',
'id_ncc' => 'required|exists:nha_cung_cap,id_ncc',
'items' => 'required|array|min:1',
'items.*.id_hang_hoa' => 'required|exists:hang_hoa,id_hang_hoa',
'items.*.so_luong' => 'required|integer|min:1',
'items.*.don_gia' => 'required|numeric|min:0',
]);
// 2. Bắt đầu Database Transaction
DB::beginTransaction();
try {
$tongTien = 0;
foreach ($request->items as $item) {
$tongTien += $item['so_luong'] * $item['don_gia'];
}
// Tạo phiếu nhập mới
$phieuNhap = PhieuNhap::create([
'ma_phieu_nhap' => $request->ma_phieu_nhap,
'id_user' => auth()->id(),
'id_ncc' => $request->id_ncc,
'ngay_nhap' => now(),
'tong_tien' => $tongTien,
'ghi_chu' => $request->ghi_chu,
]);
// Xử lý từng dòng chi tiết hàng hóa
foreach ($request->items as $item) {
ChiTietPhieuNhap::create([
'id_phieu_nhap' => $phieuNhap->id_phieu_nhap,
'id_hang_hoa' => $item['id_hang_hoa'],
'so_luong_nhap' => $item['so_luong'],
'don_gia_nhap' => $item['don_gia'],
'thanh_tien' => $item['so_luong'] * $item['don_gia'],
]);
// Tăng số lượng tồn kho của sản phẩm bằng atomic update
HangHoa::where('id_hang_hoa', $item['id_hang_hoa'])
->increment('so_luong_ton', $item['so_luong']);
}
// Commit dữ liệu khi toàn bộ thao tác thành công
DB::commit();
return response()->json([
'status' => 'success',
'message' => 'Lập phiếu nhập kho và cập nhật số lượng thành công!',
'data' => $phieuNhap
], 201);
} catch (Exception $e) {
// Hoàn tác toàn bộ thay đổi nếu có bất kỳ lỗi nào xảy ra
DB::rollBack();
return response()->json([
'status' => 'error',
'message' => 'Lỗi trong quá trình nhập kho: ' . $e->getMessage()
], 500);
}
}
}
Xử lý nhập hàng loạt qua Excel (Maatwebsite/Laravel-Excel)
<?php
namespace App\Imports;
use App\Models\HangHoa;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Maatwebsite\Excel\Concerns\WithValidation;
class HangHoaImport implements ToModel, WithHeadingRow, WithValidation
{
public function model(array $row)
{
return new HangHoa([
'ma_hang_hoa' => $row['ma_san_pham'],
'ten_hang_hoa' => $row['ten_san_pham'],
'id_loai_hang' => $row['id_loai_hang'],
'id_ncc' => $row['id_nha_cung_cap'],
'gia_nhap' => $row['gia_nhap'],
'gia_ban' => $row['gia_ban'],
'so_luong_ton' => $row['so_luong_ban_dau'] ?? 0,
'don_vi_tinh' => $row['don_vi_tinh'],
'han_su_dung' => $row['han_su_dung'],
]);
}
public function rules(): array
{
return [
'ma_san_pham' => 'required|unique:hang_hoa,ma_hang_hoa',
'ten_san_pham' => 'required|string|max:255',
'gia_nhap' => 'required|numeric|min:0',
'gia_ban' => 'required|numeric|min:0',
];
}
}
Kiểm thử và đánh giá hệ thống
Kiểm thử chức năng (Functional Testing)
Hệ thống đã trải qua 45 ca kiểm thử chức năng (Test Cases) trên các module chính:
- Xác thực & Phân quyền: 100% ca kiểm thử đạt yêu cầu. Người dùng vai trò nhân viên không thể can thiệp vào các đường dẫn xóa/sửa hàng hóa của Admin.
- Toàn vẹn luồng xuất kho: Kiểm thử thành công trường hợp xuất hàng vượt quá số lượng tồn kho khả dụng (Hệ thống chặn giao dịch và trả về mã lỗi
422 Unprocessable Entity).
- Tính chính xác của Excel Import: Kiểm thử với file chứa 1.000 dòng dữ liệu hàng hóa, hệ thống xử lý hoàn tất trong 2.1 giây với tỷ lệ chính xác 100%.
Đánh giá hiệu năng (Performance Benchmarks)
Sử dụng công cụ Apache Benchmark (ab tool) kiểm thử tải với 100 concurrent users trên máy chủ cục bộ (CPU Intel Core i5, 8GB RAM, SSD NVMe):
Concurrency Level: 100
Time taken for tests: 1.842 seconds
Complete requests: 1000
Failed requests: 0
Requests per second: 542.88 [#/sec] (mean)
Time per request: 184.201 [ms] (mean)
Transfer rate: 1240.50 [Kbytes/sec] received
Memory Usage (Peak): 22.4 MB
Kết quả đạt được
+-----------------------------------------------------------------------+
| KẾT QUẢ SO VỚI MỤC TIÊU BAN ĐẦU |
+------------------------------+--------------------+-------------------+
| Hạng mục mục tiêu | Chỉ số cam kết | Thực tế đạt được |
+------------------------------+--------------------+-------------------+
| Thời gian phản hồi trang | < 500 ms | ~ 184 ms |
| Tỷ lệ xử lý nhập kho Excel | 100% không lỗi định| Đạt 100% với file |
| | dạng chuẩn | mẫu quy định |
| Độ phủ nghiệp vụ quản lý kho | Đầy đủ Nhập/Xuất/Tồn| 100% hoàn thành |
| Mức độ hài lòng UAT | > 4.0 / 5.0 | 4.7 / 5.0 điểm |
| Giảm thời gian kiểm kê định kỳ| > 50% thời gian | Giảm 75% thời gian|
+------------------------------+--------------------+-------------------+
Đổi mới và đóng góp
Cải tiến kỹ thuật nổi bật
- Kiến trúc tinh gọn (Lean Architecture): Loại bỏ hoàn toàn các lớp trung gian cồng kềnh của hệ thống ERP doanh nghiệp lớn, chỉ giữ lại đúng chu trình nghiệp vụ thiết yếu của tiệm tạp hóa: Phân loại -> Nhập kho -> Kiểm soát hạn dùng -> Xuất kho -> Báo cáo.
- Cơ chế xử lý Excel nguyên tử: Thay vì yêu cầu cấu hình cơ sở dữ liệu phức tạp, người dùng có thể xuất/nhập phiếu kho tức thì qua giao diện bảng tính tiêu chuẩn, giúp liên thông dữ liệu giữa phương thức truyền thống và số hóa.
- Cơ chế Atomic Database Locking: Đảm bảo khi nhiều nhân viên cùng xuất một mặt hàng tại cùng một thời điểm, số lượng tồn kho không bao giờ bị âm nhờ câu lệnh cập nhật nguyên tử của MySQL.
So sánh hiệu quả với các giải pháp hiện tại
BIỂU ĐỒ SO SÁNH HIỆU SUẤT VẬN HÀNH
Thời gian tạo phiếu kho (Phút)
Sổ sách thủ công : [████████████████████] 15.0 phút
Phần mềm ERP SaaS : [█████ ] 3.5 phút
Website Đồ án : [██ ] 1.5 phút
Chi phí vận hành năm đầu (VNĐ)
Sổ sách thủ công : [█ ] 200.000 VNĐ (sổ bút)
Phần mềm ERP SaaS : [████████████████████] 4.800.000 VNĐ
Website Đồ án : [ ] 0 VNĐ (Triển khai nội bộ)
Đóng góp thực tiễn cho ngành
Đồ án chứng minh tính khả thi của việc ứng dụng công nghệ mã nguồn mở (Laravel, MySQL) để giải quyết bài toán chuyển đổi số vi mô cho nhóm đối tượng tiểu thương có nguồn lực hạn chế, góp phần phổ cập hóa công nghệ số đến các vùng nông thôn.
Ứng dụng thực tế và triển khai
Kịch bản sử dụng thực tế (Use Case Scenario)
- Kịch bản 1: Nhập hàng từ nhà phân phối. Khi xe giao hàng của nhà cung cấp đến (ví dụ: Unilever), chủ cửa hàng chỉ cần tải file hóa đơn Excel của nhà cung cấp lên hệ thống. Website tự động phân loại mặt hàng, cập nhật giá nhập và tăng số lượng tồn kho ngay lập tức.
- Kịch bản 2: Kiểm soát hạn sử dụng hàng cận Date. Hệ thống tự động lọc danh sách các sản phẩm có
han_su_dung <= 30 ngay, hiển thị cảnh báo đỏ trên Dashboard trang chủ giúp chủ tiệm kịp thời giảm giá xả hàng, giảm thiểu tỷ lệ thất thoát do hết hạn.
Hướng dẫn triển khai (Deployment Guide)
Yêu cầu phần cứng và phần mềm máy chủ
+-----------------------------------------------------------------------+
| YÊU CẦU MÔI TRƯỜNG TRIỂN KHAI |
+------------------------------------+----------------------------------+
| Phần cứng tối thiểu: | Môi trường phần mềm: |
| - CPU: 1 Core 2.0 GHz trở lên | - Hệ điều hành: Ubuntu 22.04 LTS |
| - RAM: 1 GB (Khuyến nghị 2 GB) | - Web Server: Apache 2.4 / Nginx |
| - Dung lượng ổ cứng: 10 GB SSD | - PHP: Version 8.1 hoặc 8.2 |
| | - RDBMS: MySQL 8.0 / MariaDB 10.4|
+------------------------------------+----------------------------------+
Quy trình cài đặt 5 bước trên Linux/Ubuntu Server
# Bước 1: Clone mã nguồn dự án từ repository
git clone https://github.com/nguyenhoangduy/quanlykho-taphoa.git /var/www/quanlykho
cd /var/www/quanlykho
# Bước 2: Cài đặt các thư viện phụ thuộc qua Composer
composer install --no-dev --optimize-autoloader
# Bước 3: Cấu hình tệp môi trường
cp .env.example .env
nano .env
# Chỉnh sửa: DB_DATABASE=db_quanlykho, DB_USERNAME=root, DB_PASSWORD=your_password
# Bước 4: Tạo khóa ứng dụng và chạy Migration CSDL
php artisan key:generate
php artisan migrate --seed
# Bước 5: Phân quyền thư mục lưu trữ cho Web Server
chown -R www-data:www-data /var/www/quanlykho/storage /var/www/quanlykho/bootstrap/cache
chmod -R 775 /var/www/quanlykho/storage /var/www/quanlykho/bootstrap/cache
Phân tích tài chính và hoàn vốn (ROI Analysis)
- Chi phí đầu tư ban đầu: 0 VNĐ nếu tận dụng máy tính bàn/laptop sẵn có của cửa hàng chạy môi trường Localhost hoặc ~50.000 VNĐ/tháng nếu thuê Cloud VPS giá rẻ.
- Tiết kiệm chi phí phần mềm: Tiết kiệm trung bình 3.600.000 VNĐ/năm chi phí bản quyền SaaS.
- Giảm thiểu thất thoát: Ước tính giảm 80% thất thoát hàng hết hạn và nhầm lẫn tồn kho, tiết kiệm thêm khoảng 5.000.000 – 10.000.000 VNĐ/năm tùy quy mô cửa hàng.
- Thời gian hoàn vốn (Payback Period): Hoàn vốn ngay trong tháng đầu tiên áp dụng.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật
- Hệ thống vận hành trên nền tảng Web tiêu chuẩn nên phụ thuộc vào trình duyệt, chưa được đóng gói thành ứng dụng di động độc lập (Native Mobile App).
- Chưa tích hợp trực tiếp với API camera của điện thoại để quét mã vạch Barcode 1D/2D tự động khi kiểm kho nhanh.
- Cơ chế phân tích dữ liệu thống kê còn dừng ở mức báo cáo tĩnh (Descriptive Analytics), chưa có mô hình học máy (Machine Learning) để dự báo nhu cầu nhập hàng thông minh.
Hướng phát triển trong tương lai
- Nâng cấp Progressive Web App (PWA): Cho phép ứng dụng có thể lưu trữ dữ liệu cục bộ qua IndexedDB và hoạt động bình thường kể cả khi mất kết nối mạng.
- Tích hợp Barcode/QR Code Scanner: Nhúng thư viện
quaggaJS hoặc html5-qrcode để cho phép camera điện thoại quét trực tiếp mã vạch trên bao bì sản phẩm.
- Tích hợp Module AI Gợi ý Nhập hàng: Áp dụng thuật toán dự báo chuỗi thời gian (Time-series Forecasting) như ARIMA hoặc Holt-Winters để dự đoán lượng hàng tiêu thụ theo mùa vụ và lễ tết.
Đối tượng hưởng lợi
+-----------------------------------------------------------------------+
| ĐỐI TƯỢNG HƯỞNG LỢI |
+-----------------------------------------------------------------------+
| 1. SINH VIÊN KỸ THUẬT / CNTT: |
| - Tài liệu tham khảo chuẩn mực về đồ án chuyên ngành CNTT. |
| - Mẫu thiết kế MVC chuẩn chỉnh trên nền tảng Laravel Framework. |
| |
| 2. LẬP TRÌNH VIÊN PHÁT TRIỂN WEB (DEVELOPERS): |
| - Tham khảo cấu trúc quản lý Database Transaction nguyên tử. |
| - Kỹ thuật tích hợp Maatwebsite/Laravel-Excel xử lý batch data. |
| |
| 3. HỘ KINH DOANH & TIỂU THƯƠNG TẠP HÓA: |
| - Tiếp cận giải pháp phần mềm quản lý kho chuyên nghiệp 0 đồng. |
| - Cắt giảm 75% thời gian kiểm kê, bảo vệ dòng vốn hàng tồn. |
| |
| 4. NHÀ NGHIÊN CỨU & ĐÀO TẠO: |
| - Dữ liệu thực nghiệm về bài toán chuyển đổi số vi mô cấp cơ sở. |
+-----------------------------------------------------------------------+
Câu hỏi thường gặp
1. Hệ thống có yêu cầu cấu hình phần cứng đặc biệt để triển khai không?
Không. Hệ thống được tối ưu hóa theo tiêu chuẩn gọn nhẹ của Laravel Framework. Bạn có thể chạy hệ thống trực tiếp trên bất kỳ máy tính bàn hoặc laptop cá nhân nào chạy hệ điều hành Windows, macOS hoặc Linux thông qua môi trường XAMPP/Laragon. Nếu muốn truy cập từ xa qua Internet, chỉ cần một máy chủ Cloud VPS gói thấp nhất (1 vCPU, 1GB RAM) là đủ để phục vụ mượt mà cho 10-20 người truy cập đồng thời.
2. Giới hạn lưu trữ dữ liệu của hệ thống là bao nhiêu?
Hệ thống sử dụng cơ sở dữ liệu quan hệ MySQL với cấu trúc index chuẩn trên các khóa chính và khóa ngoại. Với cấu hình phần cứng tiêu chuẩn, hệ thống có khả năng quản lý mượt mà tới hơn 50.000 mặt hàng (SKU) và 500.000 bản ghi lịch sử giao dịch phiếu xuất/nhập mà thời gian truy vấn vẫn duy trì ở mức dưới 300ms.
3. Làm thế nào để tích hợp hệ thống với máy quét mã vạch có sẵn tại cửa hàng?
Hầu hết các dòng máy quét mã vạch (Barcode Scanner) cầm tay chuẩn USB trên thị trường đều hoạt động theo giao thức HID (Human Interface Device) tương tự như bàn phím máy tính. Khi gắn máy quét vào máy tính và quét mã, mã vạch sẽ được tự động điền vào ô tìm kiếm hàng hóa trên giao diện web. Đồ án đã cấu hình sự kiện lắng nghe keydown trên input để tự động submit form khi nhận được ký tự Enter từ máy quét.
4. Chi phí duy trì và bảo trì hệ thống hàng tháng là bao nhiêu?
Nếu triển khai cục bộ (Localhost) tại cửa hàng: Chi phí là 0 VNĐ. Nếu triển khai lên nền tảng đám mây để quản lý từ xa qua điện thoại: Chi phí chỉ bao gồm tiền thuê máy chủ ảo (VPS) hoặc Hosting PHP, dao động từ 40.000 đến 80.000 VNĐ/tháng. Hệ thống không yêu cầu trả bất kỳ khoản phí cấp phép bản quyền nào.
5. Dữ liệu kinh doanh có an toàn không và cơ chế sao lưu như thế nào?
Dữ liệu được bảo mật nhiều lớp:
- Mật khẩu người dùng được mã hóa một chiều bằng thuật toán Bcrypt.
- Form giao dịch được bảo vệ bằng cơ chế CSRF Token chống tấn công giả mạo.
- Cơ sở dữ liệu được sao lưu định kỳ thông qua công cụ quản trị phpMyAdmin hoặc thiết lập Cron Job tự động chạy lệnh
mysqldump hàng ngày vào lúc nửa đêm để lưu trữ file backup an toàn.
Kết luận
Đồ án "Website Quản Lí Kho Cho Cửa Hàng Tạp Hóa" của sinh viên Nguyễn Hoàng Duy dưới sự hướng dẫn của TS. Nguyễn Tiến Đạt đã giải quyết thành công bài toán chuyển đổi số đầy thách thức cho các hộ kinh doanh bán lẻ truyền thống. Bằng việc kết hợp hài hòa giữa nền tảng công nghệ mạnh mẽ Laravel - MySQL và triết lý thiết kế hướng đến sự tối giản cho người dùng, đồ án đã mang đến một giải pháp quản lý kho toàn diện: từ quản lý hàng hóa, lập phiếu xuất nhập kho, xử lý tập tin Excel đến hệ thống báo cáo thống kê trực quan.
Dự án không chỉ đạt được các mục tiêu học thuật chuyên sâu của ngành Khoa học Máy tính mà còn mang giá trị thực tiễn cao, giúp các tiểu thương tiết kiệm hàng triệu đồng chi phí phần mềm mỗi năm, giảm thiểu thất thoát hàng hóa và nâng cao năng lực cạnh tranh trong kỷ nguyên kinh tế số. Mã nguồn của dự án được đóng gói hoàn chỉnh, sẵn sàng mở rộng và phát triển thêm các tính năng nâng cao như ứng dụng di động và trí tuệ nhân tạo dự báo tồn kho trong các giai đoạn tiếp theo.