Giới thiệu dự án

Trong kỷ nguyên số hóa mạnh mẽ sau đại dịch COVID-19, quy trình quản trị nguồn nhân lực (Human Resource Management - HRM) đang chứng kiến bước chuyển dịch từ các phương thức thủ công sang tự động hóa toàn diện. Báo cáo của Bộ Kế hoạch và Đầu tư (MPI) về mức độ sẵn sàng chuyển đổi số cho thấy phần lớn doanh nghiệp vừa và nhỏ (SME) tại Việt Nam đang ở giai đoạn chuyển tiếp, đối mặt với thách thức tối ưu hóa chi phí hạ tầng và năng lực quản trị. Đồ án khóa luận tốt nghiệp "Xây dựng hệ thống quản lý tuyển dụng nhân sự" của tác giả Kiều Hải Long (Ngành Công nghệ Thông tin, Trường Đại học Thăng Long, dưới sự hướng dẫn của T.S Nguyễn Thị Huyền Châu - 2024) tập trung giải quyết bài toán cốt lõi này bằng việc số hóa quy trình tuyển dụng khép kín (End-to-End Recruitment Lifecycle).

Manual Spreadsheets -> Fragmented Emails -> High Churn -> Automated Modular ATS Solution

Đặt vấn đề và thực trạng (Problem Statement)

Phương thức tuyển dụng truyền thống dựa trên bảng tính Microsoft Excel, văn bản rời rạc và trao đổi email thủ công bộc lộ nhiều điểm nghẽn nghiêm trọng:

  • Dữ liệu phân mảnh và không đồng bộ: Hồ sơ ứng viên (Curriculum Vitae - CV) bị thất lạc hoặc trùng lặp giữa các phòng ban, làm tăng 45% thời gian rà soát thông tin.
  • Chi phí vận hành và rủi ro nhân sự cao: Doanh nghiệp vừa và nhỏ khó tiếp cận các nền tảng SaaS quốc tế đắt đỏ (như Workday, BambooHR), dẫn đến việc kéo dài chu kỳ tuyển dụng (Time-to-Hire) từ 30 đến 45 ngày.
  • Trải nghiệm ứng viên kém: Tỷ lệ phản hồi lịch phỏng vấn và thông báo kết quả chậm trễ, ảnh hưởng trực tiếp đến uy tín thương hiệu tuyển dụng của doanh nghiệp.

Mục tiêu dự án

  1. Xây dựng nền tảng quản lý tuyển dụng chuẩn kiến trúc MVC (Model-View-Controller) đảm bảo tính mở rộng và an toàn dữ liệu.
  2. Tự động hóa 100% luồng tiếp nhận hồ sơ, sàng lọc, xếp lịch phỏng vấn và phát hành thư mời nhận việc (Job Offer/Contract).
  3. Tích hợp giải pháp lưu trữ đám mây Google Cloud/Google Drive API nhằm giải quyết bài toán tối ưu chi phí lưu trữ tệp đính kèm.
  4. Xây dựng cơ chế phân quyền dựa trên vai trò (Role-Based Access Control - RBAC) chặt chẽ giữa Quản trị viên, Quản lý, Nhà tuyển dụng, Người phỏng vấn và Ứng viên.
  5. Cung cấp giao diện tương tác hai chiều: Cổng ứng tuyển công khai (Public Job Portal) và Hệ thống quản trị nội bộ (Back-office Dashboard).

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

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

Khảo sát các giải pháp quản lý tuyển dụng phổ biến trên thị trường cho thấy sự phân hóa rõ rệt giữa phần mềm thương mại đóng gói và hệ thống mã nguồn mở tự triển khai:

Tiêu chí Quản lý thủ công (Excel / Email) Phần mềm thương mại đóng gói (SaaS) Hệ thống quản lý tuyển dụng (Đề tài)
Chi phí đầu tư Thấp (chỉ tốn nhân lực) Rất cao (thu phí theo tháng/người dùng) Tối ưu (sử dụng mã nguồn mở)
Tính tùy biến Kém, dễ xung đột phiên bản Hạn chế, phụ thuộc vào nhà cung cấp Rất cao, kiến trúc Module hóa
Bảo mật dữ liệu Kém (nguy cơ lộ dữ liệu nội bộ) Phụ thuộc chính sách bên thứ ba Cao, kiểm soát cơ sở dữ liệu nội bộ
Tự động hóa 0% 85% - 95% 85% (Tự động gửi mail, xếp lịch, xuất Excel)

Ưu tiên yêu cầu theo mô hình MoSCoW

  • Must Have (Bắt buộc): Đăng nhập OAuth2 Google và tài khoản nhân sự; Quản lý hồ sơ ứng viên; Đăng tin tuyển dụng; Quản lý lịch phỏng vấn; Tạo và duyệt hợp đồng; Gửi email thông báo tự động.
  • Should Have (Nên có): Xuất báo cáo danh sách ứng viên và hợp đồng ra file Excel (.xlsx); Bắt buộc đổi mật khẩu trong lần đăng nhập đầu tiên của nhân sự mới.
  • Could Have (Có thể có): Lọc nâng cao theo trạng thái phỏng vấn và phòng ban tuyển dụng.
  • Won't Have (Chưa thực hiện): Tích hợp phân tích CV tự động bằng AI/NLP hoặc gọi video trực tuyến trong hệ thống.

Thiết kế hệ thống

Kiến trúc tổng thể (Architectural Design)

Hệ thống được thiết kế theo mô hình Monolithic Modular nhiều tầng (Layered Architecture), tuân thủ nguyên lý tách biệt trách nhiệm (Separation of Concerns):

graph TD
    Client[Web Browser Client - Responsive UI] -->|HTTP / HTTPS Request| Security[Spring Security & OAuth2 Layer]
    Security --> Controller[Controller Layer - Request Routing]
    Controller --> Service[Service Layer - Business Logic]
    Service --> Repository[Repository Layer - Spring Data JPA]
    Repository --> Database[(Microsoft SQL Server Database)]
    Service --> GoogleDrive[Google Cloud API - Drive Storage]
    Service --> MailServer[SMTP Mail Service - JavaMailSender]

Ngăn xếp công nghệ (Technology Stack)

  • Backend Framework: Java 17, Spring Boot 3.x (Spring MVC, Spring Data JPA, Spring Security).
  • Frontend Template Engine: Thymeleaf 3.1, HTML5, CSS3, JavaScript (ECMAScript 12), Bootstrap 5.
  • Database Management System: Microsoft SQL Server (MSSQL) 2019/2022.
  • Cloud & External Services: Google Drive API v3 (Lưu trữ CV), Gmail SMTP Service (Hạ tầng email).
  • Build & Development Tools: Apache Maven 3.9, IntelliJ IDEA Ultimate, Git.

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

Cơ sở dữ liệu được chuẩn hóa ở dạng 3NF (Third Normal Form) gồm các thực thể cốt lõi:

-- Thiết kế lược đồ bảng Ứng viên (Candidate) và Lịch phỏng vấn (Interview)
CREATE TABLE Candidates (
    id BIGINT IDENTITY(1,1) PRIMARY KEY,
    full_name NVARCHAR(150) NOT NULL,
    email VARCHAR(100) NOT NULL,
    phone_number VARCHAR(15) NOT NULL,
    cv_url NVARCHAR(500) NOT NULL,
    status NVARCHAR(50) DEFAULT 'APPLIED',
    job_id BIGINT FOREIGN KEY REFERENCES Jobs(id),
    created_at DATETIME DEFAULT GETDATE()
);

CREATE TABLE Interviews (
    id BIGINT IDENTITY(1,1) PRIMARY KEY,
    candidate_id BIGINT FOREIGN KEY REFERENCES Candidates(id),
    interviewer_id BIGINT FOREIGN KEY REFERENCES Employees(id),
    interview_date DATETIME NOT NULL,
    location NVARCHAR(255),
    result NVARCHAR(50) DEFAULT 'PENDING',
    notes NVARCHAR(MAX)
);

Thiết kế API và Điều hướng Controller

HTTP Method Endpoint URI Phân quyền (Role) Mô tả chức năng
GET /jobs Public (All) Danh sách tin tuyển dụng khả dụng
POST /jobs/apply Candidate Nộp hồ sơ và tải CV lên hệ thống
GET /admin/candidates Recruiter, Manager, Admin Xem và lọc danh sách ứng viên
POST /admin/interviews/schedule Recruiter, Manager Lên lịch phỏng vấn và gửi mail tự động
POST /admin/contracts/create Manager, Admin Tạo hợp đồng thử việc / chính thức
GET /admin/contracts/export Manager, Admin Xuất danh sách hợp đồng ra file Excel

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 (Iterative Waterfall kết hợp các chu kỳ Agile/Scrum rút gọn):

  • Giai đoạn 1 (Tuần 1 - 3): Khảo sát nghiệp vụ HRM, phân tích yêu cầu phần mềm và mô hình hóa Use Case/Activity Diagram.
  • Giai đoạn 2 (Tuần 4 - 8): Thiết kế Database ERD, cấu hình Spring Boot skeleton, tích hợp Spring Security và OAuth2.
  • Giai đoạn 3 (Tuần 9 - 13): Xây dựng các Controller/Service nghiệp vụ (Tuyển dụng, Ứng viên, Phỏng vấn, Hợp đồng, Google Cloud Drive API).
  • Giai đoạn 4 (Tuần 14 - 16): Kiểm thử hệ thống (Unit Testing, Integration Testing, UAT), sửa lỗi và đóng gói triển khai.

Implementation và kết quả

Quy trình phát triển và hiện thực hóa mã nguồn

1. Cấu hình bảo mật và Phân quyền RBAC

Hệ thống sử dụng Spring Security 6 kết hợp xử lý logic đăng nhập linh hoạt giữa cơ sở dữ liệu nội bộ và Google OAuth2:

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/", "/jobs/**", "/login/**", "/static/**").permitAll()
                .requestMatchers("/admin/users/**").hasRole("ADMIN")
                .requestMatchers("/admin/contracts/**").hasAnyRole("ADMIN", "MANAGER")
                .requestMatchers("/admin/**").hasAnyRole("ADMIN", "MANAGER", "RECRUITER", "INTERVIEWER")
                .anyRequest().authenticated()
            )
            .formLogin(form -> form
                .loginPage("/login")
                .defaultSuccessUrl("/admin/dashboard", true)
            )
            .oauth2Login(oauth2 -> oauth2
                .loginPage("/login")
                .defaultSuccessUrl("/jobs", true)
            );
        return http.build();
    }
}

2. Xử lý nghiệp vụ ứng tuyển và Lưu trữ CV trên Cloud

Service xử lý tiếp nhận thông tin ứng viên, đẩy file CV trực tiếp lên Google Drive qua Google API Client và tự động phát lệnh gửi email:

@Service
@Transactional
public class CandidateServiceImpl implements CandidateService {

    @Autowired
    private CandidateRepository candidateRepo;
    @Autowired
    private GoogleDriveService driveService;
    @Autowired
    private EmailNotificationService emailService;

    @Override
    public Candidate applyJob(CandidateDTO dto, MultipartFile cvFile) throws IOException {
        // Kiểm tra ứng viên nộp trùng công việc
        if (candidateRepo.existsByEmailAndJobId(dto.getEmail(), dto.getJobId())) {
            throw new DuplicateApplicationException("Ứng viên đã nộp hồ sơ vào vị trí này!");
        }

        // Tải tệp CV lên Google Drive
        String driveFileUrl = driveService.uploadFile(cvFile);
        
        Candidate candidate = new Candidate();
        BeanUtils.copyProperties(dto, candidate);
        candidate.setCvUrl(driveFileUrl);
        candidate.setStatus(ApplicationStatus.APPLIED);
        
        Candidate savedCandidate = candidateRepo.save(candidate);

        // Kích hoạt gửi thông báo qua Email
        emailService.sendApplicationConfirmation(savedCandidate.getEmail(), savedCandidate.getFullName());
        return savedCandidate;
    }
}

Kiểm thử và đánh giá hệ thống (Testing & Validation)

Kịch bản kiểm thử chức năng (Functional Testing)

Hệ thống đã trải qua 85 trường hợp kiểm thử (Test Cases) phân bổ trên toàn bộ 5 module chức năng:

Module kiểm thử Số lượng Test Cases Passed Failed Tỷ lệ thành công
Xác thực & Phân quyền (Auth) 15 15 0 100%
Quản lý nhân viên 15 15 0 100%
Quản lý việc làm 15 15 0 100%
Quản lý ứng viên & Lưu trữ CV 20 20 0 100%
Quản lý phỏng vấn & Hợp đồng 20 20 0 100%

Đánh giá hiệu năng tải (Performance Benchmarks)

Sử dụng công cụ Apache JMeter kiểm thử khả năng chịu tải trên cấu hình máy chủ cục bộ (Intel Core i7, 16GB RAM, SSD NVMe):

  • Thời gian phản hồi trung bình (Average Response Time): 185ms đối với các tác vụ truy vấn danh sách (GET /jobs).
  • Throughput (Thông lượng xử lý): Đạt 420 requests/second ở mức 500 người dùng đồng thời (Concurrent Users) không xảy ra hiện tượng tràn bộ nhớ JVM (OutOfMemoryError).

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

  1. Kiến trúc dữ liệu đồng bộ và khép kín: Khắc phục triệt để tình trạng đứt gãy thông tin giữa các giai đoạn: Đăng tuyển $\rightarrow$ Nhận hồ sơ $\rightarrow$ Phỏng vấn $\rightarrow$ Tạo hợp đồng $\rightarrow$ Xuất báo cáo.
  2. Chiến lược tối ưu hóa chi phí đám mây: Sử dụng Google Drive API làm bộ lưu trữ tệp đính kèm phân tán giúp loại bỏ chi phí duy trì hệ thống File Server hoặc AWS S3 đắt đỏ cho các doanh nghiệp vừa và nhỏ.
  3. Cơ chế an toàn dữ liệu nhiều lớp: Kiểm soát vòng đời tài khoản nghiêm ngặt với chức năng bắt buộc đổi mật khẩu trong lần đăng nhập đầu tiên, kết hợp mã hóa BCrypt cho toàn bộ mật khẩu người dùng trong cơ sở dữ liệu.
  4. Nâng cao năng suất vận hành nhân sự: Giảm thiểu 70% các thao tác nhập liệu thủ công lặp lại nhờ tính năng tự động trích xuất bảng biểu ra định dạng Excel tiêu chuẩn qua thư viện Apache POI.

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

Kịch bản triển khai thực tế (Real-World Use Cases)

  • Doanh nghiệp vừa và nhỏ (SME 50 - 500 nhân sự): Sử dụng làm hệ thống tuyển dụng chính thức, giảm phụ thuộc vào các kênh trung gian tốn phí.
  • Công ty dịch vụ Outsourcing / Headhunting quy mô vừa: Quản lý hàng trăm lịch phỏng vấn đồng thời theo từng dự án mà không bị nhầm lẫn phòng ban hay người phỏng vấn.

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

[Phần cứng máy chủ (Server)]
├── CPU: 2 Cores (tối thiểu), 4 Cores (khuyến nghị)
├── RAM: 4GB (tối thiểu), 8GB (khuyến nghị cho JVM + MSSQL)
└── Dung lượng đĩa: 40GB SSD khả dụng

[Môi trường phần mềm]
├── Hệ điều hành: Ubuntu 22.04 LTS hoặc Windows Server 2022
├── Java Runtime: OpenJDK 17 LTS trở lên
├── Database: Microsoft SQL Server 2019/2022 Express hoặc Standard
└── Reverse Proxy: Nginx (Cấu hình SSL Let's Encrypt)

Hiệu quả kinh tế và Hoàn vốn (ROI Analysis)

  • Chi phí triển khai: Tiết kiệm khoảng $1,200 - $2,500/năm chi phí bản quyền phần mềm tuyển dụng dạng thuê bao (SaaS).
  • Thời gian hoàn vốn: Đạt điểm hòa vốn (Break-even point) chỉ sau 3 - 6 tháng áp dụng nhờ cắt giảm thời gian chết của chuyên viên tuyển dụng.

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

Hạn chế hiện tại

  • Giao diện người dùng sử dụng Server-Side Rendering (Thymeleaf) tuy ổn định nhưng độ mượt mà của trải nghiệm Single Page Application (SPA) chưa tối ưu như React hay VueJS.
  • Chưa hỗ trợ tự động bóc tách thông tin CV bằng công nghệ OCR (Optical Character Recognition) hoặc AI Parsing.

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

  • Xây dựng kiến trúc RESTful API tách biệt hoàn toàn để phát triển ứng dụng di động (Mobile App) trên nền tảng Flutter/React Native.
  • Tích hợp các thuật toán AI Matching để tự động chấm điểm độ tương thích giữa CV ứng viên và mô tả công việc (Job Description).
  • Tích hợp WebRTC/Zoom API để hỗ trợ phòng phỏng vấn trực tuyến trực tiếp ngay trên website.

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

                   HỆ THỐNG QUẢN LÝ TUYỂN DỤNG
       ┌───────────────┬───────────────┬───────────────┐
       ▼               ▼               ▼               ▼
   Sinh viên      Lập trình viên   Doanh nghiệp    Nhà nghiên cứu
 (Tài liệu mẫu)   (Mã nguồn chuẩn) (Tối ưu HRM)     (Kiến trúc MVC)
  • Sinh viên chuyên ngành CNTT: Nắm vững phương pháp phân tích thiết kế hệ thống thông tin hướng đối tượng qua sơ đồ UML, Use Case và quy trình thực hiện khóa luận tốt nghiệp chuẩn mực.
  • Lập trình viên Backend Java: Tham khảo cấu trúc thư mục tiêu chuẩn, cách tích hợp Spring Boot 3 với Spring Security, OAuth2 và Google Cloud API.
  • Doanh nghiệp & Đội ngũ HR: Sở hữu giải pháp chuyển đổi số tuyển dụng với chi phí gần như bằng không nhưng mang lại hiệu năng ổn định.
  • Giảng viên & Nhà nghiên cứu: Khung tham chiếu hoàn chỉnh về việc ứng dụng công nghệ mã nguồn mở trong bài toán chuyển đổi số doanh nghiệp.

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

1. Hệ thống có thể triển khai trên môi trường đám mây (AWS, GCP, Azure) được không?

Có. Ứng dụng Spring Boot đóng gói dưới dạng tệp JAR độc lập, dễ dàng đóng gói thành Docker Container và triển khai trên các dịch vụ đám mây như AWS Elastic Beanstalk, Google Cloud Run hoặc máy chủ ảo (VPS Linux).

2. Dung lượng lưu trữ CV có bị giới hạn không khi sử dụng Google Drive API?

Dung lượng lưu trữ phụ thuộc vào tài khoản Google được cấu hình (15GB miễn phí đối với tài khoản cá nhân hoặc không giới hạn đối với Google Workspace Enterprise), giúp mở rộng không giới hạn mà không tốn dung lượng ổ cứng máy chủ web.

3. Làm thế nào để phân quyền một nhân viên làm nhiều vai trò khác nhau?

Hệ thống thiết kế bảng liên kết Employee_Roles cho phép một nhân viên sở hữu đồng thời nhiều quyền (ví dụ: vừa là RECRUITER vừa là INTERVIEWER), đảm bảo tính linh hoạt tối đa trong phân chia công việc nội bộ.

4. Hệ thống bảo vệ dữ liệu cá nhân của ứng viên như thế nào?

Toàn bộ kết nối được mã hóa qua giao thức HTTPS. Mật khẩu nhân viên được băm bằng thuật toán BCrypt với salt ngẫu nhiên. Đường dẫn CV trên Google Drive được quản lý phân quyền truy cập, tránh rò rỉ dữ liệu ra bên ngoài.

5. Chi phí bảo trì và vận hành hệ thống hàng năm là bao nhiêu?

Hệ thống sử dụng mã nguồn mở và dịch vụ miễn phí ở quy mô vừa phải, do đó chi phí bảo trì định kỳ chỉ bao gồm chi phí duy trì tên miền (Domain) và máy chủ ảo (VPS), ước tính khoảng $60 - $120/năm.


Kết luận

Khóa luận tốt nghiệp "Xây dựng hệ thống quản lý tuyển dụng nhân sự" của sinh viên Kiều Hải Long đã giải quyết thành công bài toán chuyển đổi số quy trình tuyển dụng cho doanh nghiệp vừa và nhỏ. Bằng việc kết hợp hài hòa giữa nền tảng công nghệ mạnh mẽ (Spring Boot, MSSQL), dịch vụ đám mây (Google Cloud API) và chuẩn mực bảo mật tiên tiến, hệ thống không chỉ là sản phẩm học thuật chất lượng mà còn mang giá trị thực tiễn cao, mở ra hướng đi bền vững cho các doanh nghiệp đang tìm kiếm giải pháp tối ưu hóa nguồn lực nhân sự.