Mobifone là nền tảng thương mại điện tử viễn thông toàn diện mã nguồn mở, được xây dựng bằng Laravel 11 bởi sinh viên Trường Đại học An Giang (AGU). Hệ thống cho phép khách hàng tra cứu, đăng ký các gói cước di động, mua SIM số trực tuyến và quản lý dịch vụ viễn thông Mobifone. Dự án tích hợp đầy đủ hệ thống quản trị (Admin Panel) với phân quyền chi tiết, hỗ trợ quy trình nghiệp vụ từ tiếp thị, bán hàng đến chăm sóc khách hàng.
- Xây dựng hệ thống quản lý dịch vụ viễn thông tập trung
- Thay thế quy trình thủ công bằng nền tảng số hiện đại
- Đảm bảo khả năng mở rộng cao và dễ sử dụng
- Trường Đại học An Giang (AGU)
- Đồ án tốt nghiệp - Hệ thống quản lý dịch vụ viễn thông Mobifone
|
Abdol Hamid Portfolio abdolhamid.dev@gmail.com GitHub Báo cáo thực tập (Ấn phẩm khoa học) |
Nếu bạn thấy dự án hữu ích, hãy ủng hộ tôi một ly cà phê nhé:
URL Production: https://mobifone.onrender.com
| Danh mục | Công nghệ |
|---|---|
| Backend | Laravel 11, PHP 8.2+ |
| Frontend | Blade Templates, Tailwind CSS 3, DaisyUI, Alpine.js |
| Database | MySQL 8 / MariaDB |
| Build Tool | Vite 6 |
| Xác thực | Custom Login, OTP (SMS) |
| Phân quyền | Spatie Laravel Permission (RBAC) |
| Real-time | Pusher Channels (Chat) |
| Xuất/Nhập | Maatwebsite/Laravel-Excel (XLSX, CSV) |
| Bảng dữ liệu | Yajra Laravel DataTables |
| QR Code | endroid/qr-code, SimpleSoftwareIO/simple-qrcode |
| HTTP Client | GuzzleHTTP |
| Bản đồ | JavaScript Map API |
| Cache | Redis (predis) |
- Trang chủ - Banner quảng cáo, gói cước nổi bật, tin tức, đăng ký nhanh
- Gói cước di động - Tra cứu, lọc theo loại thuê bao (trả trước/trả sau), chi tiết, đăng ký online
- Gói DATA - Tra cứu gói data 4G/5G với bộ lọc
- Mua SIM số - Chọn theo kho số, lọc VIP/ thường, đặt mua 2 bước, QR code, tra cứu đơn hàng
- Chuyển mạng giữ số (MNP) - Đăng ký chuyển mạng online
- Dịch vụ quốc tế - Cước gọi quốc tế, roaming, VoIP, nhà khai thác
- Cửa hàng - Tìm cửa hàng Mobifone gần nhất
- Tin tức & KM - Bài viết khuyến mãi
- Tuyển dụng - Việc làm, nộp CV online
- Chat hỗ trợ - Hỗ trợ thời gian thực (cần OTP)
- Xác thực OTP - Đăng nhập SMS, tra cứu gói, lịch sử hủy
- Hồ sơ KH - Gói đã đăng ký, lịch sử hủy
| Module | Mô tả | Quyền |
|---|---|---|
| Quản lý nhân viên | CRUD, gán vai trò | quản lý nhân viên |
| Quản lý vai trò | Tạo/sửa/xóa vai trò, phân quyền | quản lý vai trò |
| Gói cước | CRUD, Excel, quản lý trạng thái | quản lý gói cước |
| Gói DATA | CRUD, Excel import/export | quản lý gói data |
| Số thuê bao | Quản lý kho SIM, Excel | quản lý số thuê bao |
| Tin tức & KM | Đăng bài, kiểm duyệt, kích hoạt | quản lý tin tức |
| Loại thuê bao | Quản lý danh mục | quản lý loại thuê bao |
| Dịch vụ | Quản lý dịch vụ GTGT | quản lý dịch vụ |
| Quốc gia | Quản lý danh mục quốc gia | quản lý quốc gia |
| Nhà khai thác | Quản lý nhà khai thác quốc tế | quản lý nhà khai thác |
| Cước quốc tế | Bảng giá cước gọi | quản lý cước quốc tế |
| VoIP | Gói cước VoIP | quản lý VoIP |
| Đăng ký gói | Danh sách đăng ký | quản lý đăng ký gói |
| Gói tự tạo | Gói cước khách hàng tạo | quản lý gói tự tạo |
| Đơn hàng | Quản lý đăng ký, thanh toán, giao hàng | quản lý đăng ký |
| Chuyển mạng | Quản lý chuyển đổi mạng | quản lý chuyển mạng |
| Tuyển dụng | Quản lý tin tuyển dụng | quản lý tuyển dụng |
| CV | Quản lý CV ứng viên | quản lý CV |
| Cửa hàng | Quản lý danh sách | quản lý cửa hàng |
| Liên hệ | Yêu cầu liên hệ | quản lý liên hệ |
| Hủy gói | Lịch sử hủy gói | quản lý hủy gói |
| Chat | Quản lý tin nhắn | quản lý chat |
Hệ thống gồm 25+ bảng chính:
| Bảng | Mô tả |
|---|---|
users |
Người dùng (admin + khách hàng) |
roles / permissions |
Phân quyền (Spatie) |
goicuocs / goicuoc_details |
Gói cước thoại/SMS |
goidatas / goidata_details |
Gói data |
so_thue_bao |
Kho SIM |
orders / temporary_orders |
Đơn hàng SIM |
dang_ky_chuyen_doi_mang |
Chuyển mạng giữ số |
subscription_types / loaithuebao |
Loại thuê bao |
dichvus / dichvu_chitiet |
Dịch vụ GTGT |
package_registrations |
Lịch sử đăng ký gói |
package_cancellations |
Lịch sử hủy gói |
custom_packages |
Gói tự tạo |
quoc_gia / nha_khai_thac |
Quốc gia & nhà khai thác |
gia_cuoc_quoc_te |
Cước quốc tế |
goi_voip_cuoc_phi |
VoIP & cước phí |
news |
Tin tức & khuyến mãi |
tuyendung / cv |
Tuyển dụng & CV |
stores |
Cửa hàng |
contacts |
Liên hệ |
conversations / messages |
Chat hỗ trợ |
Lọc gói cước
|
Mua SIM số
|
|
Tra cứu đơn hàng
|
|
- PHP 8.2+
- Composer 2.x
- MySQL 8.0 / MariaDB 10+
- Node.js 20+ (frontend)
- Redis (tùy chọn)
# 1. Clone repository
git clone https://github.com/AbdolHamidDev/Mobifone.git
cd Mobifone
# 2. Cài đặt PHP dependencies
composer install
# 3. Cấu hình môi trường
cp .env.example .env
php artisan key:generate
# 4. Thiết lập database
php artisan migrate
mysql -u root -p mobifone < database/sample/mobifone.sql
# 5. Cài đặt frontend
npm install
npm run build
# 6. Chạy server
php artisan serveQuan trọng: File
database/sample/mobifone.sqllà bắt buộc để ứng dụng hoạt động.
Dự án được deploy lên Render sử dụng Docker. Live demo: https://mobifone.onrender.com
Yêu cầu bắt buộc: File
Dockerfilephải có ở root repository để Render có thể build và deploy.
- Đăng ký / đăng nhập tại Aiven Console
- Tạo service mới → chọn MySQL (free tier)
- Chọn region gần Việt Nam, ví dụ:
aws-ap-southeast-1(Singapore) - Sau khi service sẵn sàng, vào tab Connection information để lấy thông tin:
- Host:
mysql-xxxxx.aivencloud.com - Port:
3306 - User:
avnadmin - Password: (mật khẩu bạn đặt khi tạo service)
- Database:
defaultdb
- Host:
Trước khi deploy, cần import dữ liệu mẫu vào database Aiven:
Cách 1: Dùng Aiven Query Editor (khuyến nghị)
- Vào MySQL service trên Aiven Console
- Chọn tab Query editor
- Mở file
database/sample/mobifone.sqltrong dự án - Copy toàn bộ nội dung và paste vào Query editor
- Click Execute
Cách 2: Dùng MySQL CLI
mysql -h mysql-xxxxx.aivencloud.com -P 3306 -u avnadmin -p defaultdb < database/sample/mobifone.sql- Đảm bảo code đã push lên GitHub và có đủ các file sau ở root repository:
Dockerfilerender.yml
- Vào Render Dashboard
- Click New + → Web Service
- Connect GitHub repository của bạn
- Cấu hình cơ bản:
- Name:
mobifone - Environment:
Docker - Plan: Free (đủ cho demo) hoặc Starter
- Region: chọn region gần Aiven database (ví dụ: Singapore)
- Name:
- Render sẽ tự động đọc
Dockerfilevàrender.ymlcho build và deploy
Vào tab Environment của Web Service, thêm các biến sau:
| Key | Value | Ghi chú |
|---|---|---|
APP_ENV |
production |
|
APP_DEBUG |
false |
Tắt debug ở production |
APP_URL |
https://mobifone.onrender.com |
Thay bằng domain thực tế |
APP_KEY |
(Render tự generate) | Hoặc chạy php artisan key:generate |
DB_CONNECTION |
mysql |
|
DB_HOST |
mysql-xxxxx.aivencloud.com |
Host từ Aiven |
DB_PORT |
3306 |
|
DB_DATABASE |
defaultdb |
Từ Aiven |
DB_USERNAME |
avnadmin |
Từ Aiven |
DB_PASSWORD |
your_password |
Password từ Aiven |
SESSION_DRIVER |
cookie |
Render không hỗ trợ session database |
CACHE_STORE |
file |
|
QUEUE_CONNECTION |
sync |
|
BROADCAST_DRIVER |
log |
Tắt Pusher realtime |
MAIL_MAILER |
log |
Log mail thay vì gửi thật |
TRUSTED_PROXIES |
* |
Cho phép Render proxy |
- Click Create Web Service
- Đợi 5-10 phút để Render build Docker image và deploy
File render.yml ở root repository xử lý deploy với Docker:
services:
- type: web
name: mobifone
env: docker
dockerfilePath: ./Dockerfile
dockerContext: .
envVars:
- key: APP_KEY
generateValue: true
- key: APP_ENV
value: production
- key: APP_DEBUG
value: false
- key: APP_URL
value: https://mobifone.onrender.com
- key: TRUSTED_PROXIES
value: "*"
- key: DB_CONNECTION
value: mysql
- key: DB_HOST
sync: false
- key: DB_PORT
sync: false
- key: DB_DATABASE
sync: false
- key: DB_USERNAME
sync: false
- key: DB_PASSWORD
sync: false
- key: SESSION_DRIVER
value: cookie
- key: CACHE_STORE
value: file
- key: QUEUE_CONNECTION
value: sync
- key: BROADCAST_DRIVER
value: log
- key: MAIL_MAILER
value: logLưu ý:
env: dockerbắt buộc để Render sử dụng Docker builddockerfilePath: ./Dockerfilechỉ định đường dẫn đến Dockerfile- Các biến
DB_HOST,DB_PORT,DB_DATABASE,DB_USERNAME,DB_PASSWORDđược đánh dấusync: falsenghĩa là bạn cần nhập thủ công trên Render Dashboard
# Application
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:YOUR_APP_KEY
APP_DEBUG=true
APP_URL=http://localhost
# Database
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=mobifone
DB_USERNAME=root
DB_PASSWORD=
# Real-time (Pusher)
PUSHER_APP_ID=your_app_id
PUSHER_APP_KEY=your_app_key
PUSHER_APP_SECRET=your_app_secret
PUSHER_APP_CLUSTER=ap1
BROADCAST_DRIVER=pusher
# Cache (Redis - optional)
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379# Chạy toàn bộ test suite
php artisan test
# Hoặc dùng PHPUnit
./vendor/bin/phpunit- Laravel 11 Docs
- Tailwind CSS
- DaisyUI
- Spatie Permission
- Yajra DataTables
- Laravel Excel
- Pusher Channels
Chúng tôi hoan nghênh mọi đóng góp! Vui lòng:
- Fork dự án
- Tạo branch:
git checkout -b feature/ten-tinh-nang - Commit:
git commit -m 'Thêm tính năng mới' - Push:
git push origin feature/ten-tinh-nang - Mở Pull Request
- Người hướng dẫn: Huỳnh Thanh Việt
- Cố vấn học tập, Tiến sĩ Giảng viên: Huỳnh Lý Thanh Nhàn
- Nguyễn Hoàng Tùng
- Nguyễn Văn Đông
- Mentor tại Mobifone: Lê Đường
- Trường Đại học An Giang (AGU) đã tạo điều kiện và hỗ trợ
- Mobifone đã cung cấp API và hỗ trợ
- Laravel framework mạnh mẽ
- Cộng đồng open source với các thư viện tuyệt vời
Dự án được cấp phép MIT License. Xem LICENSE để biết thêm.
Nếu dự án hữu ích, hãy ủng hộ tôi một ly cà phê!
| Kênh | Link |
|---|---|
| Portfolio | https://hamid.id.vn |
| linkedin.com/in/hamidabdol | |
| GitHub | github.com/AbdolHamidDev |
| abdolhamid.dev@gmail.com | |
| Báo cáo thực tập | Ấn phẩm VNULIB |
