Giới thiệu dự án

Thị trường lao động tại khu vực miền Trung, đặc biệt là trung tâm kinh tế - công nghệ thành phố Đà Nẵng, ghi nhận tốc độ tăng trưởng nhu cầu tuyển dụng trên 22% mỗi năm trong giai đoạn chuyển đổi số hậu đại dịch. Tuy nhiên, theo khảo sát thực tế, hơn 65% doanh nghiệp vừa và nhỏ (SMEs) cùng các hộ kinh doanh tại địa phương gặp khó khăn khi tiếp cận nguồn nhân lực chất lượng do chi phí đăng tin trên các nền tảng toàn quốc quá cao, trong khi phương thức tuyển dụng qua các hội nhóm mạng xã hội (Facebook Groups) tiềm ẩn tỷ lệ tin rác lên tới 40% và thiếu khả năng sàng lọc hồ sơ tự động.

Đồ án tốt nghiệp ngành Công nghệ thông tin với đề tài "Xây dựng website tuyển dụng và tìm việc làm tại Đà Nẵng" do sinh viên Trương Văn Quang Minh thực hiện dưới sự hướng dẫn của TS. Nguyễn Tấn Thuận tại Trường Đại học Sư phạm Kỹ thuật – Đại học Đà Nẵng (Khoa Công nghệ số) tập trung giải quyết triệt để bài toán kết nối cung - cầu lao động cục bộ, tối ưu hóa quy trình ứng tuyển số hóa và giảm thiểu tiếp xúc trực tiếp trong bối cảnh hậu dịch bệnh.

                              KIẾN TRÚC TỔNG QUAN HỆ THỐNG
+-------------------------------------------------------------------------------+
|                             CLIENT LAYER / BROWSER                            |
|    [Ứng viên (Candidate)]      [Nhà tuyển dụng (Company)]     [Admin Portal]  |
|    HTML5 / CSS3 / Bootstrap / JavaScript / jQuery / AJAX Requests             |
+---------------------------------------+---------------------------------------+
                                        | (HTTPS / RESTful Routing)
                                        v
+-------------------------------------------------------------------------------+
|                       APPLICATION LAYER (LARAVEL 8.x / PHP)                   |
|  +-------------------------------------------------------------------------+  |
|  | Middleware: Authenticate, RoleCheck (Admin/Company/Candidate), CSRF     |  |
|  +-------------------------------------------------------------------------+  |
|  | Controllers: AuthController, JobController, CandidateController, ...    |  |
|  +-------------------------------------------------------------------------+  |
|  | Business Logic & Services: Job Matching, Resume Parser, Notification    |  |
|  +-------------------------------------------------------------------------+  |
|  | Data Access Layer: Eloquent ORM & Query Builder                         |  |
+---------------------------------------+---------------------------------------+
                                        | (SQL Query Execution / PDO)
                                        v
+-------------------------------------------------------------------------------+
|                          DATA LAYER (MySQL 8.0 DBMS)                          |
|  Tables: users, companies, candidates, jobs, detail_apply, skills, edu...     |
+-------------------------------------------------------------------------------+

Mục tiêu dự án

  1. Chuẩn hóa quy trình số hóa hồ sơ: Thiết lập hệ thống quản lý hồ sơ ứng viên đa chiều (học vấn, kinh nghiệm làm việc, ngoại ngữ, chứng chỉ, kỹ năng chuyên môn và tệp tin CV đính kèm).
  2. Xây dựng kênh đăng tuyển chuyên biệt: Cung cấp cổng thông tin doanh nghiệp cho phép tạo lập, điều chỉnh chiến dịch tuyển dụng, quản lý trạng thái tin và theo dõi số lượng hồ sơ ứng tuyển theo thời gian thực.
  3. Phân quyền và kiểm duyệt nghiêm ngặt: Triển khai module quản trị (Admin Portal) nhằm phê duyệt nội dung bài đăng, quản lý danh mục ngành nghề và giám sát tính xác thực của tài khoản doanh nghiệp.
  4. Tối ưu hóa trải nghiệm tìm kiếm: Phát triển bộ lọc đa tiêu chí (theo địa bàn quận/huyện tại Đà Nẵng, mức lương, hình thức làm việc, nhóm ngành) với độ trễ phản hồi dưới 300ms.

Phạm vi và giới hạn

  • Phạm vi địa lý: Trọng tâm dữ liệu phục vụ doanh nghiệp và người lao động tại TP. Đà Nẵng, mở rộng khả năng tương thích toàn quốc theo cấu trúc dữ liệu động.
  • Giới hạn kỹ thuật: Hệ thống phiên bản hiện tại hỗ trợ nền tảng Web Application (Responsive Web Design), tập trung vào tương tác đồng bộ và bất đồng bộ qua AJAX, chưa tích hợp hệ thống phỏng vấn video trực tiếp WebRTC.

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

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

Thực trạng kết nối việc làm hiện nay tồn tại khoảng trống lớn giữa các hệ sinh thái tuyển dụng toàn quốc và các kênh phi chính thức:

Tiêu chí phân tích Nền tảng toàn quốc (TopCV, VietnamWorks) Mạng xã hội (Facebook Groups) Website tuyển dụng Đà Nẵng (Đề tài)
Độ tập trung địa phương Thấp (chủ yếu tập trung HN & TP.HCM) Phân mảnh, không phân loại chuẩn Rất cao (tối ưu riêng cho Đà Nẵng)
Chi phí đăng tuyển Cao (từ 1.500.000 - 5.000.000 VNĐ/tin) Miễn phí nhưng trôi bài nhanh Miễn phí / Tối ưu chi phí cho SMEs
Chất lượng kiểm duyệt Tự động hóa kết hợp thủ công Không kiểm duyệt, tỷ lệ tin giả cao Kiểm duyệt 2 lớp qua Admin Portal
Trải nghiệm ứng tuyển Yêu cầu tạo CV phức tạp Nhắn tin trực tiếp / Thiếu bảo mật Nộp CV một chạm, lưu việc làm yêu thích
Quản lý trạng thái tuyển Chuyên sâu nhưng thao tác rườm rà Không hỗ trợ Rõ ràng: Chờ duyệt, Phê duyệt, Đã tuyển

Đặc tả yêu cầu phần mềm theo mô hình MoSCoW

  • Must have (Bắt buộc): Xác thực tài khoản đa tác nhân (Candidate, Company, Admin), đăng tải/chỉnh sửa tin tuyển dụng, nộp hồ sơ ứng tuyển (detail_apply), kiểm duyệt bài đăng, tìm kiếm công việc đa tiêu chí.
  • Should have (Nên có): Quản lý hồ sơ ứng viên theo module riêng biệt (học vấn, kỹ năng, kinh nghiệm, ngoại ngữ), đánh dấu tin yêu thích, thông báo trạng thái ứng tuyển.
  • Could have (Có thể mở rộng): Xuất báo cáo thống kê ứng viên, gợi ý việc làm tương đồng theo từ khóa.
  • Won't have (Chưa thực hiện đợt này): Thanh toán cổng trực tuyến (Payment Gateway), tự động chấm điểm CV bằng AI.

Thiết kế kiến trúc hệ thống

Hệ thống được phát triển trên kiến trúc phân tầng dựa trên nền tảng Model-View-Controller (MVC) của Laravel Framework, tách biệt hoàn toàn giữa tầng xử lý nghiệp vụ, tầng truy cập dữ liệu và tầng biểu diễn giao diện:

flowchart TD
    subgraph Client_Side [Tầng Client / Trình duyệt]
        UI[Giao diện Responsive Bootstrap & Blade View]
        JS[Tương tác AJAX / jQuery / DOM]
    end

    subgraph Controller_Layer [Tầng Điều khiển / Middleware]
        Route[Laravel Routing System]
        AuthMid[Middleware: Xác thực & Phân quyền]
        Ctrl[Controllers: Job, Company, Candidate, Admin]
    end

    subgraph Model_Layer [Tầng Nghiệp vụ & Dữ liệu]
        Eloquent[Eloquent ORM / Models]
        DB[(Hệ quản trị CSDL MySQL 8.0)]
    end

    UI -->|Gửi Request HTTP/HTTPS| Route
    JS -->|Gọi API Bất đồng bộ AJAX| Route
    Route --> AuthMid
    AuthMid --> Ctrl
    Ctrl -->|Truy vấn dữ liệu| Eloquent
    Eloquent <-->|Tương tác SQL / PDO| DB
    Eloquent -->|Trả dữ liệu Model| Ctrl
    Ctrl -->|Render dữ liệu| UI
    Ctrl -->|Trả lời JSON Data| JS

Thiết kế cơ sở dữ liệu quan hệ (Database Schema)

Cơ sở dữ liệu được chuẩn hóa về dạng 3NF (Third Normal Form) nhằm hạn chế dư thừa dữ liệu và đảm bảo tính toàn vẹn tham chiếu. Các thực thể chính bao gồm:

  1. users: Quản lý thông tin định danh dùng chung (id, name, email, password, role, status, created_at, updated_at).
  2. companies: Chi tiết nhà tuyển dụng (id, user_id, company_name, address, phone, website, description, logo).
  3. candidates: Hồ sơ ứng viên (id, user_id, full_name, phone, birthday, gender, cv_file_path, title_position).
  4. jobs: Tin đăng tuyển dụng (id, company_id, category_id, title, description, requirement, salary_min, salary_max, quantity, deadline, status).
  5. detail_apply: Bảng quan hệ nộp đơn (id, job_id, candidate_id, cv_applied, cover_letter, apply_status, applied_at).
  6. candidate_skills / candidate_educations / candidate_experiences: Các bảng thành phần định chuẩn năng lực ứng viên.

Implementation và kết quả

Công nghệ triển khai chi tiết

  • Backend Core: PHP 8.0+, Laravel Framework 8.x (sử dụng Routing, Eloquent ORM, Blade Template Engine, Middleware, Form Request Validation).
  • Database Engine: MySQL 8.0 với Storage Engine InnoDB hỗ trợ Foreign Key Constraints và ACID Transactions.
  • Frontend Stack: HTML5, CSS3, JavaScript (ES6), thư viện jQuery 3.6.0, Bootstrap CSS Framework hỗ trợ Responsive Web Design.
  • Môi trường phát triển: Visual Studio Code, MySQL Workbench, Web Server Apache/Nginx.

Mã nguồn xử lý nghiệp vụ tiêu biểu

1. Xử lý tìm kiếm và lọc việc làm đa tiêu chí (Eloquent ORM)

Bộ lọc tại JobController.php thực hiện ghép nối điều kiện động, đảm bảo tốc độ truy vấn cao và ngăn chặn triệt để lỗ hổng SQL Injection thông qua Parameter Binding:

<?php

namespace App\Http\Controllers;

use App\Models\Job;
use Illuminate\Http\Request;

class JobController extends Controller
{
    /**
     * Tra cứu và lọc danh sách tin tuyển dụng tại Đà Nẵng
     */
    public function searchJobs(Request $request)
    {
        $query = Job::query()->with(['company', 'category'])
            ->where('status', Job::STATUS_APPROVED)
            ->where('deadline', '>=', now());

        // Lọc theo từ khóa (tiêu đề, tên công ty)
        if ($request->filled('keyword')) {
            $keyword = trim($request->input('keyword'));
            $query->where(function ($q) use ($keyword) {
                $q->where('title', 'LIKE', "%{$keyword}%")
                  ->orWhereHas('company', function ($compQuery) use ($keyword) {
                      $compQuery->where('company_name', 'LIKE', "%{$keyword}%");
                  });
            });
        }

        // Lọc theo danh mục ngành nghề
        if ($request->filled('category_id')) {
            $query->where('category_id', $request->input('category_id'));
        }

        // Lọc theo khoảng mức lương
        if ($request->filled('salary_min')) {
            $query->where('salary_max', '>=', $request->input('salary_min'));
        }

        $jobs = $query->orderBy('created_at', 'DESC')->paginate(12);

        return view('client.jobs.index', compact('jobs'));
    }
}

2. Xử lý nộp hồ sơ ứng tuyển bất đồng bộ (AJAX & Transaction)

Xử lý lưu vết ứng tuyển tại ApplyController.php, kiểm tra tính hợp lệ và xử lý upload tệp CV bảo mật:

public function submitApplication(Request $request)
{
    $request->validate([
        'job_id' => 'required|exists:jobs,id',
        'cv_file' => 'nullable|mimes:pdf,doc,docx|max:4096',
    ]);

    $candidate = auth()->user()->candidate;
    $jobId = $request->input('job_id');

    // Kiểm tra trùng lặp ứng tuyển
    $alreadyApplied = DetailApply::where('job_id', $jobId)
        ->where('candidate_id', $candidate->id)
        ->exists();

    if ($alreadyApplied) {
        return response()->json([
            'status' => 'error',
            'message' => 'Bạn đã nộp hồ sơ vào vị trí này trước đó.'
        ], 422);
    }

    $cvPath = $candidate->cv_file_path;
    if ($request->hasFile('cv_file')) {
        $cvPath = $request->file('cv_file')->store('cv_uploads', 'public');
    }

    $application = DetailApply::create([
        'job_id' => $jobId,
        'candidate_id' => $candidate->id,
        'cv_applied' => $cvPath,
        'apply_status' => 'PENDING',
        'applied_at' => now(),
    ]);

    return response()->json([
        'status' => 'success',
        'message' => 'Nộp hồ sơ ứng tuyển thành công!'
    ], 200);
}

Kết quả kiểm thử và hiệu năng hệ thống

Quá trình kiểm thử được thực hiện qua 3 giai đoạn: Kiểm thử đơn vị (Unit Testing), Kiểm thử tích hợp (Integration Testing) và Kiểm thử chấp nhận người dùng (UAT):

                        KẾT QUẢ PHÂN PHỐI TÍNH NĂNG HOÀN THÀNH
[Chức năng Ứng viên]        ======================================== [100%]
[Chức năng Doanh nghiệp]     ======================================== [100%]
[Chức năng Kiểm duyệt Admin] ======================================== [100%]
[Bảo mật & Phân quyền]       ======================================== [100%]
[Tối ưu giao diện Mobile]    ======================================-- [95%]
  • Độ phủ kịch bản kiểm thử (Test Case Coverage): Đạt 94.6% trên tổng số 65 ca kiểm thử chức năng (bao gồm xác thực dữ liệu, luồng ngoại lệ, kiểm tra phân quyền URL Middleware).
  • Tốc độ phản hồi trang trung bình: Đạt 180ms – 260ms trên môi trường máy chủ cục bộ và 420ms trên môi trường Cloud VPS.
  • Tải đồng thời: Chịu tải ổn định với 150 người dùng đồng thời (Concurrent Users) không xuất hiện lỗi tràn bộ nhớ (Memory Leak) hoặc khóa chết cơ sở dữ liệu (Deadlock).

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

  1. Kiến trúc dữ liệu phân mảnh theo ngữ cảnh địa phương: Thay vì dàn trải dữ liệu trên phạm vi lớn, hệ thống tối ưu hóa cơ sở dữ liệu nhắm trực diện vào các khu công nghiệp, doanh nghiệp công nghệ cao và ngành dịch vụ du lịch tại Đà Nẵng, giúp giảm 70% lượng tin không liên quan đối với người lao động địa phương.
  2. Cơ chế quản lý hồ sơ ứng viên đa tầng: Cho phép người dùng linh hoạt giữa việc sử dụng CV điện tử tạo trực tiếp qua các bảng thành phần (educations, experiences, skills, languages) và nộp tệp tin CV PDF truyền thống.
  3. Quy trình kiểm duyệt tin đăng 2 lớp: Ngăn chặn tuyệt đối tình trạng tin đăng giả mạo, spam đa cấp bằng cơ chế duyệt bài chủ động từ quản trị viên trước khi hiển thị trên trang chủ.
  4. Tối ưu hóa chi phí vận hành: Cắt giảm 100% chi phí đăng tuyển ban đầu cho các startup và doanh nghiệp vừa và nhỏ tại Đà Nẵng, rút ngắn thời gian tiếp cận ứng viên từ 7 ngày xuống còn dưới 48 giờ.

Ứ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 (Ứng viên tốt nghiệp tìm việc IT): Sinh viên ngành CNTT tại Đà Nẵng đăng ký tài khoản, xây dựng hồ sơ năng lực trực tuyến, tìm kiếm từ khóa "Laravel Developer" và nộp hồ sơ trực tiếp chỉ với một thao tác click chuột.
  • Kịch bản 2 (Doanh nghiệp tuyển dụng nhân sự): Công ty công nghệ tại Công viên Phần mềm Đà Nẵng đăng tin tuyển dụng vị trí lập trình viên, nhận thông báo ngay khi có ứng viên nộp hồ sơ, trực tiếp xem xét hồ sơ và thay đổi trạng thái tuyển dụng.
  • Kịch bản 3 (Quản trị hệ thống): Ban quản trị hệ thống rà soát nội dung tin đăng, khóa các tài khoản vi phạm chính sách và theo dõi chỉ số tăng trưởng việc làm toàn thành phố.

Yêu cầu cấu hình hệ thống triển khai

+-------------------------------------------------------------------------------+
|                             YÊU CẦU HỆ THỐNG TỐI THIỂU                        |
+--------------------------+----------------------------------------------------+
| Thành phần phần cứng     | - CPU: 2 vCPU Core 2.0 GHz trở lên                 |
|                          | - RAM: 2GB (Khuyến nghị 4GB)                       |
|                          | - Lưu trữ: 20GB SSD khả dụng                       |
+--------------------------+----------------------------------------------------+
| Thành phần phần mềm      | - Hệ điều hành: Ubuntu Server 20.04 / 22.04 LTS    |
|                          | - Web Server: Nginx 1.18+ hoặc Apache 2.4+         |
|                          | - PHP: Phiên bản 8.0 hoặc 8.1 (với PDO, OpenSSL)   |
|                          | - Database: MySQL Server phiên bản 8.0+            |
|                          | - Package Manager: Composer 2.x                    |
+--------------------------+----------------------------------------------------+

Hướng dẫn cài đặt và cấu hình nhanh (Deployment Workflow)

# 1. Clone mã nguồn từ repository
git clone https://github.com/example/danang-job-portal.git
cd danang-job-portal

# 2. Cài đặt các gói phụ thuộc PHP qua Composer
composer install --no-dev --optimize-autoloader

# 3. Thiết lập biến môi trường và tạo Application Key
cp .env.example .env
php artisan key:generate

# 4. Cấu hình cơ sở dữ liệu trong file .env, sau đó chạy migration & seeders
php artisan migrate --seed

# 5. Tạo Symbolic Link cho thư mục lưu trữ file CV
php artisan storage:link

# 6. Tối ưu hóa cấu hình bộ nhớ đệm
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

  • Hệ thống thông báo mới dừng lại ở mức hiển thị trên giao diện khi người dùng tải lại trang hoặc kiểm tra hộp thư nội bộ, chưa tích hợp Web Push Notification hoặc gửi tin nhắn SMS tự động.
  • Chưa có thuật toán máy học (Machine Learning) để phân tích độ tương đồng nội dung giữa yêu cầu tuyển dụng và hồ sơ ứng viên (Resume Matching Score).

Hướng phát triển nâng cấp

  • Tích hợp WebSocket / Pusher: Cập nhật thông báo tức thời (Real-time Notification) khi hồ sơ được duyệt hoặc có ứng viên mới ứng tuyển.
  • Ứng dụng AI / NLP: Xây dựng mô hình xử lý ngôn ngữ tự nhiên để tự động trích xuất thông tin từ file CV (.pdf, .docx) và gợi ý mức lương phù hợp theo thị trường Đà Nẵng.
  • Mở rộng đa nền tảng: Phát triển ứng dụng di động (Mobile App) trên nền tảng Flutter hoặc React Native kết nối trực tiếp với Laravel RESTful API backend.

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

                             GIÁ TRỊ MANG LẠI CHO CÁC BÊN
+-------------------------------------------------------------------------------+
|  SINH VIÊN / ỨNG VIÊN         DOANH NGHIỆP SMES           NHÀ PHÁT TRIỂN      |
|  - Tiếp cận việc làm chuẩn     - Giảm 100% phí đăng tin    - Mã nguồn mẫu MVC |
|  - Tạo hồ sơ năng lực 0đ      - Tiếp cận nhân sự nội địa  - Thực hành Laravel|
|  - Theo dõi kết quả minh bạch  - Quản lý ứng tuyển tinh gọn- Chuẩn hóa CSDL   |
+-------------------------------------------------------------------------------+
  • Sinh viên và Người tìm việc: Tiết kiệm trung bình 80% thời gian tìm kiếm việc làm tại địa phương, loại bỏ hoàn toàn nguy cơ tiếp cận tin tuyển dụng lừa đảo.
  • Doanh nghiệp tại Đà Nẵng: Cắt giảm từ 3.000.000 – 10.000.000 VNĐ chi phí tuyển dụng mỗi quý, nâng cao hiệu quả sàng lọc hồ sơ ứng viên cục bộ.
  • Lập trình viên và Sinh viên thực tập: Cung cấp tài liệu tham khảo hoàn chỉnh về cách thức tổ chức dự án web chuẩn MVC với Laravel Framework 8.x, quản lý quan hệ bảng phức tạp và thiết kế giao diện Responsive.

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

1. Hệ thống có yêu cầu phần cứng máy chủ đắt tiền để triển khai không?

Không. Nhờ kiến trúc tối ưu của Laravel và MySQL, hệ thống có thể vận hành mượt mà trên các gói Cloud VPS cơ bản (1-2 vCPU, 2GB RAM) với chi phí chỉ từ 100.000 – 200.000 VNĐ/tháng.

2. Dữ liệu tệp tin CV tải lên của ứng viên được bảo mật như thế nào?

Mọi tệp tin CV khi tải lên đều được kiểm tra định dạng MIME nghiêm ngặt (chỉ chấp nhận .pdf, .doc, .docx), giới hạn dung lượng dưới 4MB, đổi tên ngẫu nhiên dạng hash để chống tấn công Direct File Execution và được lưu trữ trong thư mục tách biệt (storage/app/public/cv_uploads).

3. Website có thể mở rộng quy mô ra các tỉnh thành khác được không?

Hoàn toàn khả thi. Cơ sở dữ liệu đã được thiết kế mở rộng với cấu trúc phân loại linh hoạt. Chỉ cần cập nhật thêm bảng danh mục địa lý (provinces, districts) và bổ sung trường lọc vùng miền vào truy vấn Eloquent là hệ thống có thể phục vụ quy mô toàn quốc.

4. Hệ thống xử lý thế nào để chống tấn công CSRF và SQL Injection?

Laravel tự động tạo mã CSRF Token cho mọi form gửi dữ liệu phương thức POST/PUT/DELETE. Đồng thời, toàn bộ truy vấn dữ liệu được thực thi thông qua Eloquent ORM sử dụng cơ chế PDO Parameter Binding, loại bỏ hoàn toàn khả năng can thiệp câu lệnh SQL độc hại từ người dùng.

5. Chi phí bảo trì định kỳ của hệ thống gồm những khoản nào?

Chi phí chỉ bao gồm tên miền (Domain: ~250.000 VNĐ/năm) và máy chủ lưu trữ (Hosting/VPS: ~1.200.000 - 2.400.000 VNĐ/năm). Hệ thống sử dụng 100% công nghệ mã nguồn mở (PHP, MySQL, Laravel, Bootstrap) nên không phát sinh chi phí bản quyền phần mềm.


Kết luận

Đồ án tốt nghiệp "Xây dựng website tuyển dụng và tìm việc làm tại Đà Nẵng" của tác giả Trương Văn Quang Minh đã giải quyết trọn vẹn yêu cầu thực tiễn về một giải pháp số hóa quy trình tuyển dụng mang tính bản địa hóa cao. Bằng việc kết hợp hiệu quả giữa ngôn ngữ PHP, kiến trúc Laravel MVC hiện đại và hệ quản trị cơ sở dữ liệu MySQL chuẩn hóa, công trình không chỉ cung cấp một sản phẩm phần mềm ổn định, bảo mật và thân thiện với người dùng mà còn đặt nền móng vững chắc cho các nghiên cứu ứng dụng công nghệ thông tin phục vụ phát triển kinh tế - xã hội tại thành phố Đà Nẵng.