Giới thiệu dự án
Sự phát triển mạnh mẽ của phong trào thể dục thể thao quần chúng tại các đô thị lớn tại Việt Nam kéo theo nhu cầu sử dụng sân bãi tăng vọt, đặc biệt là các bộ môn bóng đá mini và cầu lông. Cung thể thao Tiên Sơn (quận Hải Châu, thành phố Đà Nẵng) là một trong những trung tâm thể thao trọng điểm của khu vực miền Trung, sở hữu hệ thống cụm 5 sân bóng đá mini cùng khu liên hợp sân cầu lông tiêu chuẩn. Tuy nhiên, quy trình vận hành trước đây chủ yếu dựa trên ghi chép sổ sách thủ công, trao đổi rời rạc qua điện thoại hoặc tin nhắn Zalo, dẫn đến nhiều hạn chế nghiêm trọng:
- Chồng chéo lịch đặt sân (Double-booking): Tỷ lệ nhầm lẫn lịch giờ cao điểm chiếm từ 8% đến 12% tổng số giao dịch, gây ảnh hưởng xấu đến trải nghiệm của khách hàng và uy tín của trung tâm.
- Thất thoát doanh thu dịch vụ đi kèm: Việc theo dõi các dịch vụ cộng thêm (nước uống, thuê bóng, thuê vợt, áo tập) trên chứng từ giấy thường xuyên xảy ra sai sót, làm giảm từ 15% đến 20% doanh thu phụ trợ tiềm năng.
- Khách hàng mất nhiều thời gian tra cứu: Người chơi mất trung bình 15–30 phút để liên hệ nhân viên xác nhận xem khung giờ còn trống hay không.
- Thiếu hụt dữ liệu thống kê: Ban quản lý không có công cụ trực quan hóa để theo dõi hiệu suất khai thác sân, biến động doanh thu theo khung giờ vàng và lịch sử giao dịch của khách hàng.
Đề tài "Xây dựng website đặt sân cầu lông và sân bóng đá online tại Cung thể thao Tiên Sơn Đà Nẵng" do sinh viên Võ Quang Huy thực hiện dưới sự hướng dẫn của ThS. Đỗ Phú Huy (Khoa Công nghệ Số, Trường Đại học Sư phạm Kỹ thuật – Đại học Đà Nẵng) được triển khai nhằm số hóa toàn diện quy trình quản lý và vận hành sân thể thao.
Mục tiêu của dự án
- Xây dựng cổng thông tin và đặt sân trực tuyến 24/7: Cho phép người dùng dễ dàng tra cứu trạng thái sân trống theo thời gian thực, lựa chọn loại sân (sân 5, sân 7, sân cầu lông), chọn khung giờ phù hợp và đặt lịch trực tiếp trên nền tảng web.
- Tích hợp đa kênh thanh toán tự động: Kết nối cổng thanh toán điện tử VNPAY song song với hình thức thanh toán tại quầy, đảm bảo tính bảo mật và tính toàn vẹn giao dịch.
- Tự động hóa quản lý biểu giá linh hoạt: Xây dựng module điều chỉnh bảng giá theo từng khung giờ đặc thù (giờ thấp điểm sáng/trưa và giờ cao điểm chiều tối), hỗ trợ quản lý phụ thu dịch vụ đi kèm.
- Phân quyền kiểm soát truy cập chặt chẽ (Role-Based Access Control - RBAC): Thiết lập 3 phân hệ người dùng độc lập: Khách hàng (Customer), Nhân viên (Staff) và Quản lý (Admin) với quyền hạn rõ ràng.
- Cung cấp bảng điều khiển phân tích số liệu: Xây dựng hệ thống báo cáo doanh thu, tần suất đặt/hủy sân và phân tích hành vi khách hàng theo ngày, tuần, tháng, năm.
Phạm vi và giới hạn của đề tài
- Địa bàn áp dụng: Cung thể thao Tiên Sơn, đường Phan Đăng Lưu, phường Hòa Cường Bắc, quận Hải Châu, TP. Đà Nẵng.
- Nghiệp vụ cốt lõi: Quản lý sân bóng đá mini (sân 5, sân 7), sân cầu lông, dịch vụ cho thuê trang thiết bị, tính cước theo khung giờ, tiếp nhận và hoàn tất thủ tục hủy sân theo chính sách quy định.
- Giới hạn kỹ thuật: Hệ thống xây dựng dưới dạng ứng dụng Web Responsive trên nền tảng PHP/Laravel và MySQL, chưa phát hành ứng dụng di động độc lập (Native Mobile App) trên iOS/Android.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
Trước khi tiến hành phát triển phần mềm, đề tài đã tiến hành khảo sát thực tế và phân tích đối chiếu các phương pháp quản lý sân thể thao hiện có trên thị trường:
| Tiêu chí so sánh |
Quản lý sổ sách truyền thống |
Ứng dụng POS offline cục bộ |
Website Tiên Sơn Booking (Đề tài) |
| Khả năng đặt sân 24/7 |
Không (Chỉ trong giờ làm việc) |
Không (Phụ thuộc nhân viên) |
Có (Hoàn toàn tự động) |
| Xử lý xung đột lịch đặt |
Dễ nhầm lẫn, phụ thuộc trí nhớ |
Kiểm tra thủ công trên máy quầy |
Tự động khóa slot real-time |
| Cơ chế thanh toán |
Tiền mặt / Chuyển khoản thủ công |
Tiền mặt / Thẻ tại quầy |
Cổng VNPAY (QR, ATM, Visa) & Quầy |
| Biểu giá động theo giờ |
Tính nhẩm, dễ sai sót |
Cấu hình phức tạp |
Lập lịch giá tự động theo khung giờ |
| Báo cáo doanh thu |
Cộng sổ cuối ngày/cuối tháng |
Báo cáo nội bộ tại máy chủ quầy |
Trực quan hóa real-time qua Web |
| Chi phí đầu tư ban đầu |
Thấp |
Cao (Bản quyền phần mềm + POS) |
Tối ưu (Mã nguồn mở Laravel/MySQL) |
Phân loại yêu cầu người dùng theo mô hình MoSCoW
- Must have (Bắt buộc phải có):
- Đăng ký, xác thực tài khoản người dùng và bảo mật phiên làm việc.
- Xem ma trận lưới sân theo thời gian thực và đặt sân theo khung giờ.
- Thanh toán trực tuyến qua cổng VNPAY và thanh toán trực tiếp.
- Quản lý danh mục sân, loại sân, quản lý giá theo khung giờ và quản lý dịch vụ.
- Should have (Nên có):
- Hủy đặt sân theo khung thời gian cho phép trước giờ bắt đầu.
- Tìm kiếm và lọc lịch sử đặt sân theo mã hóa đơn, số điện thoại khách hàng.
- Thống kê doanh thu theo biểu đồ cột và biểu đồ đường theo tuần, tháng.
- Could have (Có thể có):
- Xuất báo cáo tài chính định dạng Excel/PDF.
- Gửi email thông báo xác nhận đặt sân tự động.
- Won't have (Chưa thực hiện trong phiên bản này):
- Tự động gợi ý tìm đối thủ giao hữu thể thao (Matchmaking).
- Tích hợp IoT điều khiển hệ thống chiếu sáng sân bóng tự động.
Thiết kế hệ thống
Kiến trúc phần mềm được xây dựng theo mô hình Model-View-Controller (MVC) chuẩn trên nền tảng framework Laravel, tách biệt rành mạch giữa tầng giao diện người dùng, tầng xử lý logic nghiệp vụ và tầng lưu trữ dữ liệu.
Ngăn xếp công nghệ (Technology Stack) chi tiết
- Tầng Backend: PHP phiên bản 8.1.x, Laravel Framework phiên bản 9.x (hỗ trợ Eloquent ORM, Blade Template Engine, CSRF Middleware, Routing Engine).
- Tầng Cơ sở dữ liệu: Hệ quản trị cơ sở dữ liệu quan hệ MySQL 8.0 với chuẩn bảng InnoDB hỗ trợ ràng buộc khóa ngoại và ACID Transactions.
- Tầng Frontend: HTML5, CSS3, JavaScript (ES6), thư viện CSS Bootstrap 5.2, jQuery và Chart.js phục vụ trực quan hóa dữ liệu thống kê.
- Cổng thanh toán: VNPAY Payment Gateway API v2.1.0 (sử dụng thuật toán mã hóa SHA-256 tạo Secure Hash).
- Môi trường triển khai: Web Server Apache 2.4 / Nginx trên hệ điều hành Linux Ubuntu 22.04 LTS.
Thiết kế lược đồ cơ sở dữ liệu quan hệ (Relational Database Schema)
Dưới đây là đặc tả mã nguồn DDL cho các bảng nòng cốt giải quyết bài toán đặt sân và quản lý biểu giá linh động:
-- Bảng loại sân: Phân loại sân cầu lông, sân 5, sân 7
CREATE TABLE loai_san (
id INT AUTO_INCREMENT PRIMARY KEY,
ten_loai_san VARCHAR(100) NOT NULL,
mo_ta TEXT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Bảng sân bóng/sân cầu lông
CREATE TABLE san (
id INT AUTO_INCREMENT PRIMARY KEY,
ten_san VARCHAR(100) NOT NULL,
id_loai_san INT NOT NULL,
trang_thai ENUM('hoat_dong', 'bao_tri', 'ngung_hoat_dong') DEFAULT 'hoat_dong',
FOREIGN KEY (id_loai_san) REFERENCES loai_san(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Bảng định nghĩa khung giờ hoạt động trong ngày
CREATE TABLE khung_gio (
id INT AUTO_INCREMENT PRIMARY KEY,
gio_bat_dau TIME NOT NULL,
gio_ket_thuc TIME NOT NULL,
UNIQUE KEY uq_khung_gio (gio_bat_dau, gio_ket_thuc)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Bảng quản lý giá sân theo từng khung giờ (Giờ vàng vs Giờ thường)
CREATE TABLE gia_khung_gio (
id INT AUTO_INCREMENT PRIMARY KEY,
id_san INT NOT NULL,
id_khung_gio INT NOT NULL,
gia_tien DECIMAL(12,2) NOT NULL,
FOREIGN KEY (id_san) REFERENCES san(id) ON DELETE CASCADE,
FOREIGN KEY (id_khung_gio) REFERENCES khung_gio(id) ON DELETE CASCADE,
UNIQUE KEY uq_san_khung_gio (id_san, id_khung_gio)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- Bảng phiếu đặt sân
CREATE TABLE phieu_dat_san (
id INT AUTO_INCREMENT PRIMARY KEY,
ma_phieu VARCHAR(20) UNIQUE NOT NULL,
id_user INT NOT NULL,
id_san INT NOT NULL,
id_khung_gio INT NOT NULL,
ngay_dat DATE NOT NULL,
tong_tien DECIMAL(12,2) NOT NULL,
phuong_thuc_thanh_toan ENUM('vnpay', 'tien_mat') NOT NULL,
trang_thai ENUM('cho_thanh_toan', 'da_thanh_toan', 'da_nhan_san', 'da_huy') DEFAULT 'cho_thanh_toan',
vnp_transaction_no VARCHAR(100) NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (id_san) REFERENCES san(id),
FOREIGN KEY (id_khung_gio) REFERENCES khung_gio(id),
INDEX idx_check_booking (id_san, id_khung_gio, ngay_dat, trang_thai)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Thiết kế danh mục API giao tiếp
| Phương thức |
Endpoint URI |
Phân quyền |
Chức năng chi tiết |
GET |
/api/v1/courts/availability |
Public |
Tra cứu danh sách sân trống theo date và type_id |
POST |
/api/v1/booking/store |
Customer |
Khởi tạo đơn đặt sân và khóa tạm thời slot giữ chỗ |
POST |
/api/v1/payment/vnpay/create |
Customer |
Sinh URL chuyển hướng sang cổng thanh toán VNPAY |
GET |
/api/v1/payment/vnpay/return |
Public |
Tiếp nhận kết quả thanh toán từ VNPAY (ReturnURL) |
PUT |
/api/v1/staff/booking/{id}/checkin |
Staff / Admin |
Xác nhận bàn giao sân và xuất phiếu nhận sân thực tế |
POST |
/api/v1/admin/pricing/update |
Admin |
Cập nhật bảng giá dịch vụ và giá theo khung giờ |
Phương pháp luận phát triển (Methodology)
Dự án áp dụng mô hình phát triển phần mềm lặp Agile/Scrum với chu kỳ 4 Sprint trong vòng 12 tuần:
- Sprint 1 (Tuần 1–3): Khảo sát hiện trạng Cung thể thao Tiên Sơn, thu thập yêu cầu người dùng, thiết kế biểu đồ Use-case và chuẩn hóa cơ sở dữ liệu 3NF.
- Sprint 2 (Tuần 4–7): Xây dựng tầng Core Backend bằng Laravel, thiết kế giao diện Bootstrap 5, hoàn thiện module Quản lý danh mục sân, Khung giờ và Phân quyền RBAC.
- Sprint 3 (Tuần 8–10): Phát triển nghiệp vụ Đặt sân trực tuyến, thuật toán kiểm tra xung đột lịch, tích hợp cổng VNPAY và xây dựng module Bán dịch vụ bổ trợ.
- Sprint 4 (Tuần 11–12): Triển khai module Thống kê trực quan, tối ưu hóa câu truy vấn SQL, thực hiện kiểm thử UAT và hoàn thiện tài liệu kỹ thuật.
Implementation và kết quả
Quy trình phát triển và thuật toán cốt lõi
Thách thức kỹ thuật lớn nhất trong hệ thống đặt sân thể thao trực tuyến là giải quyết bài toán tranh chấp tài nguyên (Concurrency Race Condition) khi nhiều khách hàng cùng chọn một sân trong một khung giờ cao điểm tại cùng một thời điểm.
Thuật toán kiểm tra và khóa giao dịch đặt sân (Pessimistic Locking & Database Transaction)
Để đảm bảo tính nhất quán dữ liệu tuyệt đối (ACID), hệ thống áp dụng cơ chế DB::transaction kết hợp với kiểm tra tồn tại của lịch đặt trước khi tạo bản ghi mới:
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Models\PhieuDatSan;
use Exception;
class BookingController extends Controller
{
/**
* Xử lý đặt sân an toàn chống xung đột lịch
*/
public function processBooking(Request $request)
{
$validated = $request->validate([
'id_san' => 'required|integer|exists:san,id',
'id_khung_gio' => 'required|integer|exists:khung_gio,id',
'ngay_dat' => 'required|date|after_or_equal:today',
'id_user' => 'required|integer',
'payment_method'=> 'required|in:vnpay,tien_mat'
]);
return DB::transaction(function () use ($validated) {
// Kiểm tra xem sân đã được đặt trong ngày và khung giờ này chưa
$isAlreadyBooked = PhieuDatSan::where('id_san', $validated['id_san'])
->where('id_khung_gio', $validated['id_khung_gio'])
->where('ngay_dat', $validated['ngay_dat'])
->whereIn('trang_thai', ['cho_thanh_toan', 'da_thanh_toan', 'da_nhan_san'])
->lockForUpdate() // Khóa bản ghi ngăn chặn race condition
->exists();
if ($isAlreadyBooked) {
return response()->json([
'success' => false,
'message' => 'Rất tiếc! Sân đã có người vừa giữ chỗ trong khung giờ này.'
], 409);
}
// Truy xuất đơn giá theo khung giờ
$pricing = DB::table('gia_khung_gio')
->where('id_san', $validated['id_san'])
->where('id_khung_gio', $validated['id_khung_gio'])
->first();
$tongTien = $pricing ? $pricing->gia_tien : 0;
// Khởi tạo phiếu đặt sân mới
$booking = PhieuDatSan::create([
'ma_phieu' => 'TS-' . strtoupper(uniqid()),
'id_user' => $validated['id_user'],
'id_san' => $validated['id_san'],
'id_khung_gio' => $validated['id_khung_gio'],
'ngay_dat' => $validated['ngay_dat'],
'tong_tien' => $tongTien,
'phuong_thuc_thanh_toan' => $validated['payment_method'],
'trang_thai' => 'cho_thanh_toan'
]);
return response()->json([
'success' => true,
'booking' => $booking
], 201);
});
}
}
Thuật toán tạo URL thanh toán bảo mật với VNPAY
Quá trình giao tiếp với cổng thanh toán VNPAY đòi hỏi mã hóa toàn bộ chuỗi tham số truy vấn bằng khóa bí mật bí mật (vnp_HashSecret) qua thuật toán SHA-256:
namespace App\Services;
class VNPayService
{
public function generatePaymentUrl(array $orderData): string
{
$vnp_Url = config('vnpay.url');
$vnp_TmnCode = config('vnpay.tmn_code');
$vnp_HashSecret = config('vnpay.hash_secret');
$inputData = [
"vnp_Version" => "2.1.0",
"vnp_TmnCode" => $vnp_TmnCode,
"vnp_Amount" => $orderData['amount'] * 100, // Đơn vị tính bằng VNĐ (x100)
"vnp_Command" => "pay",
"vnp_CreateDate" => date('YmdHis'),
"vnp_CurrCode" => "VND",
"vnp_IpAddr" => request()->ip(),
"vnp_Locale" => "vn",
"vnp_OrderInfo" => "Thanh toan don dat san: " . $orderData['order_id'],
"vnp_OrderType" => "other",
"vnp_ReturnUrl" => config('vnpay.return_url'),
"vnp_TxnRef" => $orderData['order_id'],
];
ksort($inputData);
$query = "";
$i = 0;
$hashdata = "";
foreach ($inputData as $key => $value) {
if ($i == 1) {
$hashdata .= '&' . urlencode($key) . "=" . urlencode($value);
} else {
$hashdata .= urlencode($key) . "=" . urlencode($value);
$i = 1;
}
$query .= urlencode($key) . "=" . urlencode($value) . '&';
}
$vnp_Url = $vnp_Url . "?" . $query;
$vnpSecureHash = hash_hmac('sha512', $hashdata, $vnp_HashSecret);
$vnp_Url .= 'vnp_SecureHash=' . $vnpSecureHash;
return $vnp_Url;
}
}
Kiểm thử và đánh giá hiệu năng (Testing & Validation)
Hệ thống đã trải qua quá trình kiểm thử toàn diện với các tiêu chuẩn nghiêm ngặt:
- Unit Testing & Integration Testing:
- Sử dụng framework PHPUnit với 42 kịch bản kiểm thử tự động bao phủ các controller, model Eloquent và middleware xác thực.
- Tỷ lệ bao phủ mã nguồn (Code Coverage) đạt 86.4%.
- Đo lường hiệu năng chịu tải (Performance Benchmarking):
- Sử dụng công cụ Apache Benchmark (
ab -n 1000 -c 50) mô phỏng 50 người dùng đồng thời gửi 1.000 truy vấn tìm kiếm khung giờ trống.
- Throughput (Thông lượng): Đạt 142.8 requests/second.
- Latency (Độ trễ trung bình): 138ms trên môi trường máy chủ cục bộ.
- Tỷ lệ lỗi trùng lịch (Double Booking Rate): 0.0% nhờ cơ chế
lockForUpdate() trên bảng phieu_dat_san.
- User Acceptance Testing (UAT):
- Tiến hành thử nghiệm thực tế với 10 cán bộ quản lý/nhân viên tại Cung thể thao Tiên Sơn và 50 khách hàng thường xuyên.
- 94% khách hàng đánh giá giao diện đặt sân trực quan, dễ thao tác trong vòng 3 bước.
- 100% nhân viên xác nhận hệ thống tra cứu thông tin khách hàng và check-in nhanh hơn gấp 5 lần so với tra sổ tay.
Đổi mới và đóng góp
- Ma trận định giá theo khung giờ động (Dynamic Time-Slot Pricing Matrix): Khắc phục nhược điểm của các hệ thống cũ vốn chỉ hỗ trợ đơn giá cố định. Hệ thống cho phép thiết lập giá sân thay đổi linh hoạt theo giờ vàng (17h00 - 20h30), cuối tuần hoặc ngày lễ chỉ với vài thao tác từ trang Admin.
- Xử lý luồng nghiệp vụ khép kín (End-to-End Workflow): Kết nối liền mạch chuỗi hoạt động từ: Khách xem lịch -> Đặt sân -> Thanh toán VNPAY -> Nhân viên đối soát check-in -> Gọi thêm dịch vụ tại sân -> Xuất hóa đơn tổng hợp -> Lưu vết dữ liệu thống kê.
- Bảo mật dữ liệu và chuẩn hóa kỹ thuật:
- Mật khẩu người dùng được mã hóa một chiều qua thuật toán
Bcrypt với chi phí tính toán (cost factor) là 10.
- 100% các biểu mẫu (Form) được bảo vệ bằng token CSRF ngăn chặn tấn công giả mạo yêu cầu.
- Tách biệt truy vấn thông qua PDO Prepared Statements triệt tiêu nguy cơ lỗ hổng SQL Injection.
Ứng dụng thực tế và triển khai
Kịch bản vận hành thực tế
- Kịch bản 1: Khách hàng đặt sân giờ cao điểm: Người dùng truy cập trang chủ, lọc sân bóng mini 5 người vào lúc 18h00 ngày thứ Bảy. Hệ thống hiển thị màu sắc trực quan (Xanh: Sân trống, Đỏ: Đã có người đặt). Người dùng chọn sân số 3, chọn thêm 2 két nước giải khát, chọn thanh toán quét mã VNPAY-QR. Giao dịch hoàn tất trong 90 giây.
- Kịch bản 2: Nhân viên tiếp nhận khách tại quầy: Khi khách đến sân, nhân viên nhập mã phiếu hoặc số điện thoại vào màn hình quản trị. Hệ thống ngay lập tức hiển thị thông tin sân đã thanh toán, nhân viên nhấn nút "Nhận sân" để cập nhật trạng thái vận hành theo thời gian thực.
- Kịch bản 3: Ban quản lý điều chỉnh biểu giá mùa giải: Khi bước vào mùa giải thể thao cao điểm cuối năm, quản lý truy cập module "Quản lý giá theo khung giờ", điều chỉnh tăng giá khung 19h00 - 20h30 thêm 20%. Toàn bộ hệ thống đặt sân lập tức cập nhật giá mới cho các giao dịch phát sinh từ thời điểm lưu.
Yêu cầu cấu hình hệ thống triển khai (System Requirements)
- Phần cứng máy chủ (Server Minimum Requirements):
- CPU: 2 vCPU Core (2.0 GHz trở lên).
- RAM: Tối thiểu 4 GB (Khuyến nghị 8 GB cho lượng truy cập cao).
- Dung lượng lưu trữ: 40 GB SSD (Hỗ trợ chuẩn ghi NVMe).
- Băng thông mạng: 100 Mbps đối xứng.
- Phần mềm nền tảng:
- Hệ điều hành: Linux Ubuntu Server 20.04 / 22.04 LTS.
- Web Server: Nginx 1.18+ hoặc Apache 2.4+.
- PHP Engine: PHP 8.1 trở lên (Kích hoạt các extension:
OpenSSL, PDO, Mbstring, Tokenizer, XML, Ctype, JSON, BCMath).
- Cơ sở dữ liệu: MySQL 8.0.x hoặc MariaDB 10.5+.
Hướng dẫn cài đặt và cấu hình (Deployment Guide)
# 1. Clone mã nguồn từ kho lưu trữ Git
git clone https://github.com/vqh-tienson/san-bong-da.git /var/www/san-bong-da
# 2. Cài đặt các thư viện phụ thuộc qua Composer
cd /var/www/san-bong-da
composer install --no-dev --optimize-autoloader
# 3. Thiết lập tệp cấu hình môi trường
cp .env.example .env
php artisan key:generate
# 4. Cấu hình thông số Database & VNPAY trong file .env
# DB_HOST=127.0.0.1
# DB_DATABASE=db_tienson_booking
# DB_USERNAME=tienson_user
# DB_PASSWORD=SecretPassword123!
# VNP_TMN_CODE=TIENSON01
# VNP_HASH_SECRET=ABCXYZ123456789HASHSECRET
# 5. Chạy Migration và Seed dữ liệu ban đầu
php artisan migrate --seed
# 6. Thiết lập quyền truy cập thư mục lưu trữ và cache
sudo chown -R www-data:www-data /var/www/san-bong-da/storage /var/www/san-bong-da/bootstrap/cache
sudo chmod -R 775 /var/www/san-bong-da/storage
# 7. Tối ưu hóa bộ nhớ đệm ứng dụng
php artisan config:cache
php artisan route:cache
php artisan view:cache
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Phụ thuộc đường truyền Internet: Trường hợp mất kết nối mạng, nhân viên tại Cung thể thao Tiên Sơn chưa thể thao tác offline do chưa tích hợp công nghệ Local Storage / Progressive Web App (PWA).
- Chưa có thông báo tức thời (Push Notification): Hệ thống thông báo mới hiển thị trên giao diện web, chưa gửi tin nhắn SMS Brandname hoặc Zalo ZNS trực tiếp tới khách hàng khi đơn đặt hoàn tất.
- Chưa tích hợp Trí tuệ nhân tạo (AI): Bảng giá khung giờ vẫn cần quản trị viên cấu hình bán tự động bằng tay, chưa có thuật toán Machine Learning tự động dự báo nhu cầu đặt sân để tối ưu hóa doanh thu (Dynamic Yield Management).
Hướng phát triển trong tương lai
- Phát triển Mobile App Native: Xây dựng ứng dụng di động đa nền tảng bằng Flutter hoặc React Native cho cả hai hệ điều hành Android và iOS, bổ sung tính năng quét mã QR tại cửa kiểm soát.
- Tích hợp phần cứng IoT thông minh: Kết nối API hệ thống với tủ điện điều khiển rơ-le thông minh (Smart Relay IoT) để tự động bật dàn đèn chiếu sáng đúng giờ khách nhận sân và tự động ngắt điện khi hết giờ.
- Mở rộng mạng lưới liên kết sân: Nâng cấp kiến trúc phần mềm thành nền tảng SaaS (Software-as-a-Service) đa khách hàng (Multi-tenancy), cho phép các trung tâm thể thao khác trên địa bàn TP. Đà Nẵng cùng tham gia cung cấp dịch vụ đặt sân.
Đối tượng hưởng lợi
- Người chơi thể thao (Khách hàng): Tiết kiệm 85% thời gian tra cứu và đặt sân, không cần gọi điện thoại xác nhận nhiều lần, trải nghiệm thanh toán không tiền mặt tiện lợi và minh bạch.
- Ban quản lý và Nhân viên Cung thể thao Tiên Sơn: Loại bỏ 100% sai sót ghi chép nhầm lẫn trên sổ sách, tiết kiệm 40% chi phí nhân lực vận hành, nâng cao tỷ lệ lấp đầy sân vào các khung giờ thấp điểm thông qua chính sách giá linh hoạt.
- Sinh viên và Lập trình viên trẻ: Cung cấp tài liệu tham khảo thực tiễn chất lượng cao về việc xây dựng ứng dụng Web hướng đối tượng hoàn chỉnh, triển khai các kỹ thuật cơ sở dữ liệu quan hệ, phân quyền người dùng và tích hợp cổng thanh toán trực tuyến tại Việt Nam.
Câu hỏi thường gặp
1. Yêu cầu phần cứng và phần mềm tối thiểu để triển khai website lên máy chủ thực tế là gì?
Hệ thống yêu cầu máy chủ Linux (khuyến nghị Ubuntu 20.04/22.04 LTS), tối thiểu 2 vCPU, 4GB RAM và 40GB SSD. Về mặt phần mềm, máy chủ cần cài đặt PHP 8.1+ (kèm các module bắt buộc như PDO, OpenSSL, Mbstring), MySQL 8.0+ và Web Server Nginx hoặc Apache.
2. Hệ thống giải quyết thế nào khi có 2 khách hàng cùng nhấn đặt 1 sân tại cùng một giây?
Hệ thống sử dụng cơ chế Database Transaction kết hợp khóa bi quan lockForUpdate() trên câu lệnh truy vấn kiểm tra trùng lặp. Giao dịch đầu tiên tới trước sẽ khóa bản ghi và tạo phiếu đặt; giao dịch thứ hai bị chặn lại, nhận thông báo lỗi xung đột (HTTP 409 Conflict) và hệ thống sẽ yêu cầu người dùng chọn lại khung giờ khác mà không làm sai lệch dữ liệu cơ sở dữ liệu.
3. Nếu khách hàng quét mã VNPAY bị trừ tiền nhưng mạng gặp sự cố làm ngắt kết nối thì xử lý ra sao?
Hệ thống tích hợp cơ chế đồng bộ trạng thái giao dịch thông qua IPN (Instant Payment Notification) từ VNPAY. Server VNPAY sẽ tự động gửi webhook ngầm tới backend của website để xác thực trạng thái thanh toán thành công và cập nhật trạng thái phiếu đặt sang da_thanh_toan độc lập với phiên duyệt web của người dùng.
4. Chi phí duy trì hệ thống hàng tháng ước tính là bao nhiêu?
Chi phí vận hành bao gồm: Thuê Cloud VPS (khoảng 150.000 – 300.000 VNĐ/tháng), tên miền quốc tế/Việt Nam (khoảng 300.000 – 750.000 VNĐ/năm) và chứng chỉ bảo mật SSL (miễn phí qua Let's Encrypt). Tổng chi phí vận hành chỉ dao động từ 2.000.000 đến 4.000.000 VNĐ/năm, rất tối ưu cho các trung tâm thể thao quy mô vừa và lớn.
5. Website có hỗ trợ tùy chỉnh thêm các loại sân khác (sân Tennis, bóng bàn) không?
Có. Nhờ thiết kế cơ sở dữ liệu dạng bảng quan hệ chuẩn hóa tách biệt giữa bảng loai_san, san và gia_khung_gio, người quản trị hoàn toàn có thể vào trang Admin để tạo mới các loại sân thể thao khác nhau mà không cần phải can thiệp hay sửa đổi cấu trúc mã nguồn ban đầu.
Kết luận
Đồ án tốt nghiệp "Xây dựng website đặt sân cầu lông và sân bóng đá online tại Cung thể thao Tiên Sơn Đà Nẵng" của tác giả Võ Quang Huy đã giải quyết trọn vẹn bài toán chuyển đổi số trong công tác quản lý và khai thác dịch vụ thể thao công cộng. Bằng việc ứng dụng khung kiến trúc MVC mạnh mẽ của Laravel 9, hệ quản trị cơ sở dữ liệu quan hệ MySQL chuẩn hóa cùng cổng thanh toán điện tử VNPAY, hệ thống không chỉ giải quyết triệt để vấn đề chồng chéo lịch và thất thoát tài chính mà còn nâng cao chất lượng phục vụ người dân thành phố Đà Nẵng. Đề tài sở hữu tính ứng dụng thực tiễn cao, cấu trúc mã nguồn mẫu mực và mở ra tiền đề thuận lợi cho việc mở rộng tích hợp các giải pháp công nghệ vạn vật kết nối (IoT) trong quản lý sân bãi thông minh tương lai.