Giới thiệu dự án

Theo thống kê từ Tổng cục Thống kê và các khảo sát thị trường lao động giai đoạn 2022–2024, có hơn 72% sinh viên tại các đô thị lớn như Hà Nội và TP. Hồ Chí Minh có nhu cầu tìm kiếm việc làm bán thời gian (part-time). Tuy nhiên, có tới 48% sinh viên từng gặp rủi ro liên quan đến lừa đảo tiền cọc, chậm trả lương hoặc bị bóc lột thời gian do không có hợp đồng lao động ràng buộc. Về phía các doanh nghiệp vừa và nhỏ (SMEs) cùng các hộ kinh doanh cá thể, việc quản lý hồ sơ ứng viên, chấm công ca kíp và quyết toán tiền lương theo giờ vẫn thực hiện phân mảnh qua tin nhắn Zalo, ghi sổ thủ công dẫn đến tỷ lệ thất thoát và sai sót dữ liệu lên đến 25%.

Đề tài "Xây dựng ứng dụng di động quản lý và tìm việc bán thời gian" (JobsFinder) của nhóm tác giả Mai Văn Mạnh và Vũ Tiến Dũng (Khoa Công nghệ Thông tin – Trường Đại học Thăng Long, dưới sự hướng dẫn của Th.S Trần Quang Duy) được nghiên cứu và phát triển nhằm giải quyết triệt để bài toán kết nối cung – cầu lao động ngắn hạn.

+-------------------------------------------------------------------------------+
|                               JOBSFINDER ECOSYSTEM                            |
+-------------------------------------------------------------------------------+
|  [ Job Seekers (Sinh viên) ] <---> [ Platform Core ] <---> [ Employers (Chủ shop) ]
|  - Tìm kiếm & Lọc job real-time     - Firebase BaaS        - Đăng bài & Trừ ký quỹ  |
|  - Check-in / Check-out ca làm      - ZaloPay SDK Gateway  - Phê duyệt ứng viên     |
|  - Ví điện tử & Thống kê thu nhập   - Biometric Security   - Chấm công & Quyết toán |
+-------------------------------------------------------------------------------+

Mục tiêu dự án

  1. Xây dựng nền tảng kết nối 3 bên: Tạo môi trường tương tác khép kín giữa Quản trị viên (Admin), Nhà tuyển dụng (Employer/B-User) và Người tìm việc (Job Seeker/N-User).
  2. Tự động hóa quy trình quản lý nhân sự thời vụ: Tích hợp quy trình từ đăng tuyển, xét duyệt hồ sơ, chấm công 2 chiều (check-in/check-out) đến tự động kết toán tiền công theo ca.
  3. Đảm bảo tính minh bạch tài chính: Tích hợp cổng thanh toán trực tuyến ZaloPay và quản lý ví điện tử trong ứng dụng (In-app Wallet), tự động trừ chi phí ký quỹ khi đăng bài và giải ngân lương sau xác nhận công việc.
  4. Trực quan hóa số liệu: Thiết lập hệ thống biểu đồ báo cáo tài chính, thời gian làm việc và thống kê tăng trưởng người dùng thời gian thực.

Phương pháp tiếp cận và Chỉ số kỳ vọng

Hệ thống áp dụng mô hình Mobile Backend-as-a-Service (MBaaS) với Firebase kết hợp ngôn ngữ Kotlin thuần Android nhằm tối ưu hiệu năng phần cứng di động.

  • Độ trễ đồng bộ dữ liệu: Dưới $250\text{ ms}$ cho các thao tác cập nhật trạng thái ứng tuyển và chấm công.
  • Tính sẵn sàng của hệ thống: Đạt $99.8%$ uptime nhờ hạ tầng đám mây Google Cloud/Firebase.
  • Độ chính xác tài chính: $100%$ không phát sinh sai lệch giữa số dư ví và nhật ký giao dịch nạp/rút ZaloPay.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Tiêu chí Nhóm Facebook / Zalo Nền tảng tuyển dụng truyền thống (TopCV, VietnamWorks) Ứng dụng JobsFinder
Tính xác thực tin tuyển dụng Rất thấp (nhiều tin rác, lừa đảo cọc) Trung bình (tập trung vào full-time chuyên nghiệp) Cao (xác minh thông tin & ký quỹ chi phí tuyển dụng)
Quản lý chấm công theo ca Hoàn toàn thủ công Không hỗ trợ Tích hợp sẵn module Check-in / Check-out 2 chiều
Quyết toán tiền lương Chuyển khoản rời rạc, dễ nợ lương Doanh nghiệp tự chi trả ngoài sàn Hệ thống Ví nội bộ liên kết cổng ZaloPay
Cơ chế đánh giá 2 chiều Không có 1 chiều (chỉ ứng viên đánh giá công ty) 2 chiều minh bạch (Nhà tuyển dụng $\leftrightarrow$ Ứng viên)
Chi phí triển khai Miễn phí nhưng rủi ro cao Phí đăng tin cao đối với việc làm thời vụ Tối ưu cho mô hình trả phí linh hoạt theo bài đăng

Phân loại yêu cầu người dùng theo mô hình MoSCoW

  • Must-have: Xác thực tài khoản (Email/Password & Sinh trắc học Biometric), Đăng tuyển việc làm (tính phí/trừ ví), Ứng tuyển & Phê duyệt, Chấm công 2 chiều, Nạp tiền ZaloPay và Rút tiền về tài khoản ngân hàng.
  • Should-have: Bộ lọc tìm kiếm nâng cao (theo mức lương, khu vực, loại hình công việc), Hệ thống thông báo đẩy (In-app Notifications), Đánh giá nhân viên và xem lịch sử phản hồi.
  • Could-have: Báo cáo phân tích thu chi/số giờ làm việc đa chiều với biểu đồ tương tác (MPAndroidChart), Hỗ trợ đa ngôn ngữ Anh - Việt.
  • Won't-have (giai đoạn này): Tính năng định vị vệ tinh GPS Geofencing khi điểm danh, Hợp đồng điện tử có chữ ký số CA.

Thiết kế hệ thống

+---------------------------------------------------------------------------------+
|                        MOBILE CLIENT (ANDROID - KOTLIN)                         |
|  +---------------------------------------------------------------------------+  |
|  | UI Layer (Views/Fragments, XML, ViewBinding, Splash/Lottie Animations)    |  |
|  +---------------------------------------------------------------------------+  |
|                                       ^                                         |
|                                       | LiveData / StateFlow                    |
|                                       v                                         |
|  +---------------------------------------------------------------------------+  |
|  | ViewModel Layer (Lifecycle-Aware, Coroutines, State Management)           |  |
|  +---------------------------------------------------------------------------+  |
|                                       ^                                         |
|                                       v                                         |
|  +---------------------------------------------------------------------------+  |
|  | Repository Layer (Data Normalization, Business Logic, Local Cache Engine) |  |
|  +---------------------------------------------------------------------------+  |
+---------------------------------------------------------------------------------+
         |                                |                               |
 (HTTPS / TLS 1.3)                (REST / HMAC-SHA256)             (Local SQLite)
         v                                v                               v
+------------------+             +------------------+             +---------------+
| FIREBASE CLOUD   |             | ZALOPAY GATEWAY  |             | ROOM PERSIST. |
| - Authentication |             | - Tokenization   |             | - Local User  |
| - Realtime DB    |             | - Payment Order  |             |   Preferences |
| - Cloud Storage  |             | - IPN Callback   |             | - Auth Token  |
+------------------+             +------------------+             +---------------+

Technology Stack và Phiên bản

- Ngôn ngữ lập trình: Kotlin 1.9.20 (JVM 17 Target)
- Nền tảng phát triển: Android SDK 34 (Android 14) | Min SDK: 24 (Android 7.0)
- Kiến trúc phần mềm: MVVM (Model-View-ViewModel) + Repository Pattern
- Cơ sở dữ liệu đám mây: Firebase Realtime Database (JSON Tree Structure)
- Dịch vụ xác thực: Firebase Authentication v22.3.1 + AndroidX Biometric 1.2.0
- Cổng thanh toán: ZaloPay Android Integration SDK v3.1
- Thư viện trực quan hóa: MPAndroidChart v3.1.0
- Quản lý bất đồng bộ: Kotlin Coroutines 1.7.3
- Nạp tài nguyên hình ảnh: Bumptech Glide 4.16.0
- Hiệu ứng động: Airbnb Lottie for Android 6.3.0
- Database cục bộ: Android Room Persistence Library 2.6.1

Thiết kế Cơ sở dữ liệu Firebase (NoSQL JSON Schema)

Cơ sở dữ liệu được tổ chức theo dạng cây JSON phi quan hệ (denormalized JSON tree) để tối ưu hóa tốc độ đọc (Read-heavy workload):

{
  "users": {
    "user_id_01": {
      "user_role": "EMPLOYER",
      "email": "recruiter@company.com",
      "name": "Chu Van An Bakery",
      "phone": "0987654321",
      "wallet": {
        "balance": 1500000,
        "currency": "VND",
        "last_updated": 1719705600000
      }
    }
  },
  "jobs": {
    "job_id_101": {
      "employer_id": "user_id_01",
      "title": "Nhân viên phục vụ part-time",
      "job_type_id": "FNB_SERVICE",
      "hourly_rate": 25000,
      "total_budget": 500000,
      "status": "OPEN",
      "created_at": 1719705600000
    }
  },
  "check_in": {
    "job_id_101": {
      "applicant_id_99": {
        "date_2024_06_30": {
          "time_in": "08:00:15",
          "time_out": "12:00:20",
          "hours_worked": 4.0,
          "is_confirmed_by_employer": true,
          "daily_salary": 100000
        }
      }
    }
  }
}

Phương pháp phát triển phần mềm (Methodology)

Dự án được triển khai theo quy trình Agile Scrum kéo dài trong 12 tuần với chu kỳ 2 tuần/Sprint:

  • Sprint 1–2 (Tuần 1–4): Khảo sát nghiệp vụ, thiết kế Wireframe/Figma, thiết kế lược đồ JSON schema trên Firebase, thiết lập khung MVVM.
  • Sprint 3–4 (Tuần 5–8): Xây dựng Authentication, Module Đăng tin/Ứng tuyển, tích hợp AndroidX Biometric Prompt.
  • Sprint 5 (Tuần 9–10): Tích hợp SDK thanh toán ZaloPay (Sandbox/Production environment), module tính toán ví và trừ phí tự động.
  • Sprint 6 (Tuần 11–12): Triển khai Module Điểm danh 2 chiều, phân hệ Thống kê MPAndroidChart, Kiểm thử UAT, tối ưu hóa bộ nhớ và đóng gói APK/AAB.

Implementation và kết quả

Chi tiết giải thuật và Code Snippet

1. Thuật toán kiểm tra số dư và trừ quỹ đăng bài tự động (Kotlin Coroutines)

Trước khi công việc được kích hoạt trạng thái OPEN, hệ thống kiểm tra số dư tài khoản của nhà tuyển dụng nhằm đảm bảo khả năng thanh toán cho người tìm việc:

suspend fun validateAndDeductPostingFee(
    employerId: String, 
    jobCost: Double, 
    jobData: JobEntity
): Result<Boolean> = withContext(Dispatchers.IO) {
    val walletRef = FirebaseDatabase.getInstance().getReference("users/$employerId/wallet")
    val jobsRef = FirebaseDatabase.getInstance().getReference("jobs")
    
    val snapshot = walletRef.get().await()
    val currentBalance = snapshot.child("balance").getValue(Double::class.java) ?: 0.0
    
    if (currentBalance < jobCost) {
        return@withContext Result.failure(InsufficientBalanceException("Số dư không đủ để thanh toán phí đăng tuyển."))
    }
    
    val newBalance = currentBalance - jobCost
    val updates = hashMapOf<String, Any>(
        "users/$employerId/wallet/balance" to newBalance,
        "users/$employerId/buser_expense_by_date/${System.currentTimeMillis()}" to jobCost,
        "jobs/${jobData.id}" to jobData.copy(status = "OPEN")
    )
    
    return@withContext try {
        FirebaseDatabase.getInstance().reference.updateChildren(updates).await()
        Result.success(true)
    } catch (e: Exception) {
        Result.failure(e)
    }
}

2. Xử lý mã hóa chữ ký giao dịch ZaloPay (HMAC-SHA256)

Đảm bảo an toàn luồng thanh toán giữa ứng dụng và ZaloPay Server:

fun generateZaloPayMac(appId: String, appTransId: String, appUser: String, amount: Long, appTime: Long, embedData: String, item: String, key1: String): String {
    val data = "$appId|$appTransId|$appUser|$amount|$appTime|$embedData|$item"
    val sha256HMAC = Mac.getInstance("HmacSHA256")
    val secretKey = SecretKeySpec(key1.toByteArray(Charsets.UTF_8), "HmacSHA256")
    sha256HMAC.init(secretKey)
    val hash = sha256HMAC.doFinal(data.toByteArray(Charsets.UTF_8))
    return hash.joinToString("") { "%02x".format(it) }
}

Kiểm thử và Đánh giá hiệu năng (Testing & Validation)

+---------------------------------------------------------------------------------+
|                              TEST EXECUTION SUITE                               |
+---------------------------------------------------------------------------------+
|  [ Unit Tests (JUnit 5 + Mockk) ]       --> Coverage: 84.5% (Target: >80%)      |
|  [ UI / Instrumented (Espresso) ]       --> 28 Use-cases automated executed     |
|  [ Security / Penetration Testing ]     --> 0 High/Critical vulnerabilities     |
|  [ Performance Benchmark (Firebase) ]   --> Real-time sync latency: 180ms       |
+---------------------------------------------------------------------------------+
  • Môi trường thử nghiệm thiết bị: Google Pixel 6 (Android 14), Samsung Galaxy A52 (Android 13), Xiaomi Redmi Note 11 (Android 12).
  • Bộ nhớ tiêu thụ: Mức sử dụng RAM trung bình đạt $78\text{ MB} - 112\text{ MB}$, không phát sinh hiện tượng Memory Leak qua kiểm tra với LeakCanary.
  • Tốc độ render khung hình (UI Rendering): Duy trì ổn định ở mức $60\text{ fps}$, thời gian nạp giao diện danh sách công việc (Recycler View kèm Glide Disk Caching) $< 0.4\text{ s}$ trên mạng 4G tiêu chuẩn.
  • Tỷ lệ giao dịch ví ZaloPay thành công: Đạt $99.2%$ trên môi trường Sandbox thử nghiệm với 250 lượt nạp/rút giả lập.

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

  1. Kiến trúc Escrow ký quỹ mini trên Mobile: Khác với các hệ thống thông thường chỉ đóng vai trò bảng tin (Bulletin Board), JobsFinder đưa ra cơ chế trừ tiền ký quỹ tuyển dụng vào cơ sở dữ liệu buser_expense_job_type_id. Điều này loại bỏ hoàn toàn các tin tuyển dụng ảo và bảo vệ tuyệt đối quyền lợi tài chính của sinh viên.
  2. Cơ chế Điểm danh 2 lớp thời gian thực: Kết hợp giữa hành động gửi yêu cầu từ phía người tìm việc và bước phê duyệt của người sử dụng lao động trong bảng dữ liệu check_in. Giảm thiểu tranh chấp số giờ làm việc từ $32%$ xuống dưới $1.5%$.
  3. Phân tích số liệu tài chính trực quan đa chiều: Ứng dụng tích hợp trực tiếp MPAndroidChart để phân tích dòng tiền:
    • Biểu đồ cột (Bar Chart): Thống kê chi phí/thu nhập theo tuần, tháng, năm.
    • Biểu đồ tròn (Pie Chart): Cơ cấu nguồn thu nhập theo từng nhóm công việc (F&B, Gia sư, Sự kiện, Bán lẻ).
    • Biểu đồ đường (Line Chart): Xu hướng tổng giờ tích lũy lao động qua từng mốc thời gian.
+---------------------------------------------------------------------------------+
|                   HIỆU QUẢ CẢI TIẾN CỦA JOBSFINDER SO VỚI TRUYỀN THỐNG          |
+---------------------------------------------------------------------------------+
| Thời gian ghép nối việc làm : [ -65% ] (Từ 48h xuống còn trung bình 16h)        |
| Tỷ lệ bùng ca / sai lệch giờ: [ -88% ] (Nhờ Check-in & Xác nhận realtime)       |
| Tốc độ thanh toán tiền công : [ Tức thì ] (Tự động chuyển vào ví sau duyệt ca)  |
| Thời gian nắm bắt ứng dụng  : [ < 15 phút ] (Giao diện Material trực quan)     |
+---------------------------------------------------------------------------------+

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

Kịch bản vận hành thực tế

  • Doanh nghiệp / Hộ kinh doanh (Quán Cà phê, Cửa hàng tiện lợi): Khi thiếu hụt 2 nhân viên ca tối, quản lý đăng tin với hạn mức ngân sách được trích tự động từ ví. Ứng viên nộp hồ sơ, quản lý duyệt trực tiếp sau khi xem hồ sơ và đánh giá sao từ các chủ shop khác. Khi nhân viên đến làm, chỉ cần nhấn Check-in trên ứng dụng, quản lý xác thực bằng 1 chạm.
  • Sinh viên tìm việc: Tìm các công việc xung quanh địa bàn học tập, lọc theo mức lương $>30.000\text{ đ/giờ}$. Sau ca làm việc, nhận thông báo xác nhận giờ công và số dư ví tăng ngay trong ngày, có thể rút thẳng về tài khoản Vietcombank, Techcombank, MB Bank... thông qua cổng ZaloPay.

Yêu cầu hệ thống và Triển khai

+---------------------------------------------------------------------------------+
|                       YÊU CẦU CẤU HÌNH & HẠ TẦNG VẬN HÀNH                       |
+---------------------------------------------------------------------------------+
| Phía Client:                                                                    |
|   - Hệ điều hành: Android 7.0 (Nougat / API Level 24) trở lên                   |
|   - RAM: Tối thiểu 2GB (Khuyến nghị 4GB+)                                       |
|   - Dung lượng bộ nhớ trống: 60MB khả dụng                                      |
|   - Cảm biến sinh trắc học: Vân tay / Nhận diện khuôn mặt (Tùy chọn)            |
| Phía Hạ tầng Serverless:                                                        |
|   - Google Cloud Project với Firebase Blaze Plan (Pay-as-you-go)                |
|   - ZaloPay Merchant Business Account & Public/Private Keys (Production)        |
|   - Google Play Console Developer Account (Phân phối ứng dụng)                  |
+---------------------------------------------------------------------------------+

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

Hạn chế kỹ thuật

  1. Phụ thuộc vào mạng liên tục: Do sử dụng kiến trúc Firebase Realtime Database làm trung tâm, ứng dụng yêu cầu kết nối Internet liên tục để đồng bộ trạng thái điểm danh và thanh toán.
  2. Chưa hỗ trợ hệ điều hành iOS: Bản thử nghiệm hiện tại mới tập trung tối ưu trên nền tảng Android (Native Kotlin).
  3. Xác thực vị trí điểm danh: Hiện tại dựa trên cơ chế xác nhận tin cậy của nhà tuyển dụng chứ chưa áp dụng định vị GPS bán kính hẹp (Geofencing).

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

  • Tích hợp GPS Geofencing & QR Code Dynamic: Tự động mở khóa nút Check-in khi thiết bị của sinh viên ở trong phạm vi $50\text{ m}$ quanh địa điểm làm việc.
  • AI Job Matching Engine: Ứng dụng mô hình Recommendation System dựa trên lịch sử tìm kiếm, ngành học và đánh giá kỹ năng của sinh viên để gợi ý công việc phù hợp nhất.
  • Mở rộng đa nền tảng: Chuyển đổi tầng UI sang Kotlin Multiplatform (KMP) hoặc Jetpack Compose Multiplatform để phát hành đồng thời trên iOS.

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

+---------------------------------------------------------------------------------+
|                               BENEFICIARY MATRIX                                |
+---------------------------------------------------------------------------------+
| [ Sinh viên & Người tìm việc ] --> Tiếp cận 100% việc thật, tránh bẫy lừa đảo,  |
|                                    theo dõi tài chính và nhận lương minh bạch.  |
| [ Chủ doanh nghiệp / Quản lý ] --> Cắt giảm 70% thời gian quản trị giấy tờ,    |
|                                    chủ động nguồn nhân lực thời vụ tức thì.     |
| [ Lập trình viên di động ]     --> Bộ tài liệu tham khảo chuẩn về MVVM,         |
|                                    tích hợp Firebase NoSQL và ZaloPay SDK.      |
| [ Nhà nghiên cứu học thuật ]   --> Khung tham chiếu về ứng dụng kinh tế số      |
|                                    và giải pháp giải quyết việc làm sinh viên.  |
+---------------------------------------------------------------------------------+

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

1. Ứng dụng JobsFinder yêu cầu cấu hình thiết bị tối thiểu như thế nào để vận hành mượt mà?

Ứng dụng tương thích với các dòng điện thoại Android sử dụng phiên bản hệ điều hành từ Android 7.0 (API level 24) trở lên, dung lượng RAM tối thiểu từ $2\text{ GB}$ và bộ nhớ trống khả dụng khoảng $60\text{ MB}$. Đối với tính năng đăng nhập vân tay, thiết bị cần hỗ trợ cảm biến Biometric phần cứng theo tiêu chuẩn của Google.

2. Dữ liệu thời gian thực trên Firebase có bị quá tải khi số lượng người dùng đồng thời (CCU) tăng cao không?

Firebase Realtime Database hỗ trợ tới $200.000$ kết nối đồng thời trên một cơ sở dữ liệu đơn lẻ. Khi hệ thống phát triển vượt ngưỡng này, giải pháp phân mảnh dữ liệu (Sharding) trên Firebase sang nhiều database instances hoặc chuyển đổi sang Cloud Firestore sẽ được kích hoạt mà không làm thay đổi cấu trúc logic phía ứng dụng.

3. Quy trình nạp và rút tiền qua ZaloPay trong JobsFinder có an toàn không?

Quy trình giao dịch tuân thủ nghiêm ngặt tiêu chuẩn bảo mật của Ngân hàng Nhà nước và PCI-DSS. Mọi thông tin chuyển tiền đều được băm chữ ký điện tử HMAC-SHA256 kèm Tokenization. Ứng dụng không lưu trữ thông tin thẻ ngân hàng trực tiếp của người dùng mà ủy quyền hoàn toàn qua cổng ZaloPay đã liên kết với 39 ngân hàng nội địa tại Việt Nam.

4. Nếu người tuyển dụng không chịu bấm "Xác nhận điểm danh", sinh viên phải làm gì?

Hệ thống tích hợp chức năng Gửi báo cáo / Khiếu nại (Report Module) trực tiếp lên Quản trị viên (Admin). Admin có quyền truy cập nhật ký dữ liệu hệ thống, kiểm tra lịch sử check-in của ứng viên và can thiệp điều chỉnh số dư ví của hai bên để giải quyết tranh chấp một cách công bằng.

5. Chi phí duy trì và khả năng hoàn vốn (ROI) của dự án JobsFinder được tính toán ra sao?

Nhờ tận dụng mô hình Serverless của Firebase, chi phí hạ tầng máy chủ ban đầu xấp xỉ $0\text{ VNĐ}$ ở quy mô thử nghiệm. Khi thương mại hóa, nền tảng thu phí hoa hồng cố định $5% - 8%$ trên mỗi bài đăng tuyển dụng thành công. Dự kiến với $10.000$ người dùng hoạt động hàng tháng (MAU), điểm hòa vốn (Break-even point) sẽ đạt được trong vòng 6–8 tháng vận hành.


Kết luận

Đồ án tốt nghiệp "Xây dựng ứng dụng di động quản lý và tìm việc bán thời gian" (JobsFinder) của sinh viên Mai Văn Mạnh và Vũ Tiến Dũng đã giải quyết xuất sắc bài toán kết nối việc làm ngắn hạn cho sinh viên trong kỷ nguyên số. Dự án không chỉ dừng lại ở mặt lý thuyết học thuật mà đã tạo ra một sản phẩm hoàn thiện, có tính ứng dụng cao, tích hợp mượt mà các công nghệ tiên tiến nhất hiện nay như Kotlin Native, Firebase BaaS, Android Jetpack và Cổng thanh toán ZaloPay.

Với giao diện trực quan, kiến trúc phần mềm chuẩn mực và quy trình nghiệp vụ chặt chẽ, JobsFinder sở hữu tiềm năng thương mại hóa mạnh mẽ, góp phần xây dựng một thị trường lao động thời vụ minh bạch, an toàn và hiệu quả cho thế hệ trẻ Việt Nam.