Giới thiệu dự án

Trong bối cảnh chuyển đổi số giáo dục đại học (Higher Education Digital Transformation), quy trình quản lý học thuật tại các trường đại học đang chuyển dịch mạnh mẽ từ phương thức phân tán sang các nền tảng quản trị tập trung. Theo khảo sát thực tế tại nhiều cơ sở đào tạo, việc quản lý khóa luận tốt nghiệp truyền thống thông qua bảng tính rời rạc (Microsoft Excel), email cá nhân và trao đổi thủ công chiếm tới 35–45% thời gian hành chính của giáo vụ khoa, đồng thời tạo ra tỷ lệ sai sót dữ liệu từ 5–8% trong quá trình tổng hợp điểm số và phân chia hội đồng.

Đề tài "Xây dựng website quản lý khóa luận tốt nghiệp" được thực hiện nhằm giải quyết triệt để các điểm nghẽn nghiệp vụ trong chu trình bảo vệ khóa luận. Hệ thống tập trung chuẩn hóa quy trình phân công đề tài, kiểm soát điều kiện sinh viên, thành lập hội đồng chuyên môn, nhập điểm theo tiêu chí đa chiều và tự động hóa xuất biên bản điểm.

+-----------------------------------------------------------------------------------+
|                        VÒNG ĐỜI KHÓA LUẬN TỐT NGHIỆP                              |
+-----------------------------------------------------------------------------------+
| 1. Import SV đủ ĐK --> 2. Đăng ký & Duyệt --> 3. Lập Hội Đồng --> 4. Chấm & Khóa |
|    (GPA >= 2.5)            (1-2 SV / Đề tài)     (3-5 Giảng viên)    (Tính ĐTB)   |
+-----------------------------------------------------------------------------------+

Problem Statement và Pain Points

Hệ thống quản trị khóa luận truyền thống đối mặt với 4 vấn đề kỹ thuật và nghiệp vụ cốt lõi:

  1. Thiếu kiểm soát ràng buộc dữ liệu tự động: Khó kiểm soát các điều kiện tiên quyết (ví dụ: điểm Đồ án ngành $\ge 8.0$, điểm trung bình tích lũy $\ge 2.5$, không nợ quá 1 môn; giới hạn 1 sinh viên chỉ tham gia 1 đề tài, 1 giảng viên hướng dẫn tối đa 2 đề tài).
  2. Xung đột và vi phạm quy chế hội đồng: Dễ xảy ra sai sót khi xếp giảng viên vào quá 2 hội đồng, hoặc cơ cấu hội đồng không đủ thành phần bắt buộc (Chủ tịch, Thư ký, Giảng viên phản biện).
  3. Rủi ro sai lệch và thiếu minh bạch điểm số: Quá trình tính toán điểm trung bình từ nhiều giảng viên với nhiều tiêu chí chi tiết dễ sai số; thiếu cơ chế chốt sổ (Grade Locking) để ngăn chặn việc sửa đổi điểm sau khi hội đồng bế mạc.
  4. Độ trễ thông tin cao: Việc gửi thông báo cho phản biện và gửi bảng điểm cuối cùng cho sinh viên tốn nhiều ngày làm việc thủ công qua bưu điện hoặc email đơn lẻ.

Mục tiêu của dự án (Project Objectives)

  1. Xây dựng nền tảng web ứng dụng kiến trúc phân tầng (N-tier Architecture) với giao diện người dùng Single Page Application (SPA) trên ReactJS và RESTful Web Services trên nền Java Spring Boot.
  2. Thiết kế và chuẩn hóa cơ sở dữ liệu quan hệ MySQL với 11 thực thể chính, đảm bảo toàn vẹn dữ liệu (Data Integrity) và hỗ trợ xóa mềm (Soft Delete).
  3. Hiện thực hóa hệ thống phân quyền 4 cấp độ (Role-Based Access Control - RBAC): Quản trị viên (Admin), Giáo vụ khoa (Academic Staff), Giảng viên (Lecturer), Sinh viên (Student).
  4. Tự động hóa toàn bộ quy trình tính toán điểm trung bình, khóa hội đồng chống sửa điểm và tích hợp dịch vụ gửi email tự động qua Google Apps Script webhook.
  5. Cung cấp bảng điều khiển (Dashboard) trực quan hóa thống kê phân bố điểm và tỷ lệ tham gia khóa luận theo từng niên khóa/ngành học.

Giải pháp kỹ thuật và Kết quả kỳ vọng

Dự án áp dụng mô hình phân tách hoàn toàn giữa Frontend (ReactJS SPA) và Backend (Spring Boot REST API) giao tiếp qua chuẩn JSON/HTTPS:

  • Thời gian phản hồi nghiệp vụ (API Response Time): Dưới 200ms đối với các tác vụ CRUD thông thường và dưới 500ms đối với tác vụ tính điểm tổng hợp.
  • Tính toàn vẹn nghiệp vụ: Đảm bảo 100% các ràng buộc logic được kiểm tra ở cả tầng client (Client-side validation) và tầng nghiệp vụ (Server-side business validation).
  • Tự động hóa luồng thông tin: 100% giảng viên phản biện và sinh viên nhận được thông báo qua email ngay khi có sự kiện phân công hoặc chốt điểm.

Phạm vi và Giới hạn (Scope & Limitations)

  • Phạm vi: Áp dụng cho quy trình quản lý khóa luận tại cấp Khoa và Trường Đại học, hỗ trợ từ giai đoạn tiếp nhận sinh viên đủ điều kiện đến giai đoạn công bố và lưu trữ điểm số.
  • Giới hạn: Hệ thống chưa tích hợp công cụ kiểm tra đạo văn tự động (Plagiarism Checker Engine) và chưa tích hợp ký số trực tiếp (Digital PKI Signature) trên file PDF xuất ra.

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

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

Tiêu chí phân tích Phương pháp thủ công (Excel/Email) Nền tảng LMS Moodle Hệ thống SIS/Edusoft Hệ thống đề xuất (Website QLKL)
Kiểm soát ràng buộc nghiệp vụ Thủ công, dễ bỏ sót Hạn chế (chỉ nộp bài) Cứng nhắc, cấu hình phức tạp Tự động hóa theo quy chế đào tạo
Cơ chế Hội đồng & Phản biện Phân công ngoài hệ thống Không hỗ trợ workflow hội đồng Quản lý dạng phòng thi thô sơ Chuẩn hóa vai trò (Chủ tịch, Thư ký, Phản biện)
Cơ cấu chấm điểm tiêu chí Nhập vào file tính riêng Rubric chung, khó tách người chấm Nhập 1 cột điểm tổng kết Đa tiêu chí, tổng hợp tự động từ từng thành viên
Cơ chế khóa điểm (Grade Lock) Không có nhật ký khóa Tùy biến phức tạp Khóa theo kỳ học Tự động khóa khi hoàn tất biên bản
Chi phí triển khai & bảo trì Thấp, rủi ro cao Trung bình Rất cao Tối ưu, mã nguồn mở hiện đại

Ma trận ưu tiên yêu cầu người dùng (MoSCoW Prioritization)

+-----------------------------------------------------------------------------------+
|                          MA TRẬN YÊU CẦU THEO MOSCOW                              |
+-----------------------------------------------------------------------------------+
| MUST HAVE:   RBAC, Import Excel SV đủ ĐK, Lập hội đồng (3-5 GV), Chấm điểm,       |
|              Khóa hội đồng, Gửi email tự động.                                    |
| SHOULD HAVE: Dashboard thống kê biểu đồ, Xuất bảng điểm PDF, Lọc/Tìm kiếm động.   |
| COULD HAVE:  Cập nhật đề tài trực tuyến giữa GV và SV, Tích hợp Google Drive API. |
| WON'T HAVE:  Kiểm tra đạo văn tự động, Họp hội đồng trực tuyến tích hợp video.    |
+-----------------------------------------------------------------------------------+

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

Hệ thống được thiết kế theo kiến trúc Client-Server 3 tầng chuẩn mực (3-Tier Layered Architecture):

graph TD
    Client["Client (Browser / ReactJS SPA)"]
    Controller["Controller Layer (Spring REST Controllers)"]
    Service["Service Layer (Spring Boot Business Logic)"]
    Repo["Repository Layer (Spring Data JPA / Hibernate)"]
    Database[("Database Engine (MySQL 8.0)")]
    MailService["External Service (Google Apps Script API)"]

    Client -->|HTTP/REST JSON| Controller
    Controller --> Service
    Service --> Repo
    Repo -->|JDBC / SQL| Database
    Service -->|HTTPS Webhook| MailService

Danh mục công nghệ và phiên bản sử dụng

Phân hệ / Thành phần Công nghệ / Thư viện Phiên bản Vai trò kỹ thuật
Backend Runtime OpenJDK 11.0.x Môi trường thực thi Java hướng đối tượng
Backend Framework Spring Boot 2.7.x / 3.x Xây dựng REST API, Dependency Injection, Inversion of Control
Build Tool Gradle 7.x Quản lý dependency, tối ưu hóa thời gian biên dịch (Compile Daemon)
Data Persistence Spring Data JPA / Hibernate 5.6.x ORM mapping giữa đối tượng Java và bảng quan hệ
Database MySQL Server 8.0.x Hệ quản trị cơ sở dữ liệu quan hệ, ACID compliance
Frontend Framework ReactJS 18.x Thư viện giao diện người dùng dựa trên Virtual DOM và Component
State Management Redux Toolkit 1.9.x Quản lý trạng thái ứng dụng toàn cục tập trung
UI Component Suite React Bootstrap / Ant Design 5.x / 4.x Bộ thành phần giao diện chuẩn Responsive
Automation Google Apps Script V8 Engine Webhook gửi email thông báo tự động không tốn chi phí SMTP

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

Cơ sở dữ liệu bao gồm 11 bảng chuẩn hóa bậc 3 (3NF) với các liên kết chặt chẽ:

+------------------+         +-----------------------+         +------------------+
|      USER        |         |      USER_ROLES       |         |      ROLES       |
+------------------+         +-----------------------+         +------------------+
| PK id            |<------->| PK,FK user_id         |<------->| PK id            |
|    username      |         | PK,FK roles_id        |         |    name          |
|    password      |         +-----------------------+         +------------------+
|    full_name     |
|    email, phone  |         +-----------------------+         +------------------+
|    faculty_id    |-------->|        FACULTY        |         |     POSITION     |
|    active        |         +-----------------------+         +------------------+
+------------------+         | PK id                 |         | PK id            |
         |                   |    name               |         |    name          |
         |                   +-----------------------+         +------------------+
         |                                                               |
         +---------------------------------------+                       |
         |                                       |                       |
         v                                       v                       v
+-----------------------+             +--------------------------------------+
|    THESIS_POSITION    |             |           COUNCIL_POSITION           |
+-----------------------+             +--------------------------------------+
| PK id                 |             | PK id                                |
| FK user_id            |             | FK user_id                           |
| FK thesis_id          |-----+       | FK council_id                        |---+
|    name (Role)        |     |       | FK position_id                       |   |
+-----------------------+     |       +--------------------------------------+   |
                              |                                                  |
                              v                                                  v
+------------------------------------+                         +------------------+
|               THESIS               |                         |     COUNCIL      |
+------------------------------------+                         +------------------+
| PK id                              |<------------------------| PK id            |
|    name, topic                     |                         |    name          |
|    total_score, file               |                         |    faculty_id    |
|    check (Approved), active        |                         |    active        |
+------------------------------------+                         +------------------+
         |                                                               |
         |                   +-----------------------+                   |
         +------------------>|         SCORE         |<------------------+
                             +-----------------------+
                             | PK id                 |
                             | FK thesis_id          |
                             | FK council_position_id|
                             +-----------------------+
                                         |
                                         v
                             +-----------------------+         +------------------+
                             |     SCORE_DETAIL      |         |     CRITERIA     |
                             +-----------------------+         +------------------+
                             | PK id                 |         | PK id            |
                             | FK score_id           |         |    name          |
                             | FK criteria_id        |<--------|    active        |
                             |    mark               |         +------------------+
                             +-----------------------+

Đoạn mã DDL đại diện cho các thực thể then chốt:

-- Bang nguoi dung
CREATE TABLE `user` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `username` VARCHAR(255) NOT NULL UNIQUE,
    `password` VARCHAR(255) NOT NULL,
    `full_name` VARCHAR(255) NOT NULL,
    `email` VARCHAR(255) NOT NULL,
    `phone` VARCHAR(20) NOT NULL UNIQUE,
    `gender` VARCHAR(20),
    `faculty_id` INT,
    `avatar` VARCHAR(255),
    `active` BIT(1) DEFAULT 1,
    `created_date` DATETIME DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT `fk_user_faculty` FOREIGN KEY (`faculty_id`) REFERENCES `faculty` (`id`)
);

-- Bang khoa luan
CREATE TABLE `thesis` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `name` VARCHAR(255) NOT NULL,
    `topic` VARCHAR(255),
    `file` VARCHAR(255),
    `total_score` FLOAT DEFAULT 0,
    `check` BOOLEAN DEFAULT FALSE,
    `council_id` INT,
    `faculty_id` INT NOT NULL,
    `active` BIT(1) DEFAULT 1,
    `created_date` DATETIME DEFAULT CURRENT_TIMESTAMP,
    CONSTRAINT `fk_thesis_council` FOREIGN KEY (`council_id`) REFERENCES `council` (`id`),
    CONSTRAINT `fk_thesis_faculty` FOREIGN KEY (`faculty_id`) REFERENCES `faculty` (`id`)
);

-- Bang chi tiet diem tung tieu chi
CREATE TABLE `score_detail` (
    `id` INT AUTO_INCREMENT PRIMARY KEY,
    `score_id` INT NOT NULL,
    `criteria_id` INT NOT NULL,
    `mark` FLOAT NOT NULL,
    CONSTRAINT `fk_scoredetail_score` FOREIGN KEY (`score_id`) REFERENCES `score` (`id`),
    CONSTRAINT `fk_scoredetail_criteria` FOREIGN KEY (`criteria_id`) REFERENCES `criteria` (`id`)
);

Thiết kế API (RESTful API Endpoints)

Method Endpoint Quyền truy cập Chức năng nghiệp vụ
POST /api/v1/auth/login Public Xác thực người dùng, trả về JWT Token và Role
POST /api/v1/users/import-excel Admin Đọc file Excel, import danh sách sinh viên đủ điều kiện
POST /api/v1/theses Giáo vụ Tạo đề tài khóa luận và gán sinh viên/giảng viên
PUT /api/v1/theses/{id}/approve Giảng viên Giảng viên hướng dẫn duyệt khóa luận để vào hội đồng
POST /api/v1/theses/{id}/submit Sinh viên Sinh viên nộp báo cáo đính kèm link/file
POST /api/v1/councils Giáo vụ Thành lập hội đồng (3-5 GV) và kích hoạt webhook gửi mail phản biện
POST /api/v1/scores Giảng viên Nhập và cập nhật điểm theo từng tiêu chí
POST /api/v1/councils/{id}/lock Giáo vụ Khóa hội đồng, tính điểm trung bình tổng kết và gửi mail kết quả

Implementation và kết quả

Development Process & Sprint Breakdown

Hệ thống được phát triển theo mô hình Agile/Scrum kéo dài 8 tuần chia thành 4 Sprint:

  • Sprint 1 (Tuần 1–2): Phân tích nghiệp vụ, thiết kế sơ đồ CSDL, cấu hình dự án Spring Boot + ReactJS, xây dựng Module xác thực (Authentication/RBAC) và import Excel.
  • Sprint 2 (Tuần 3–4): Xây dựng Module Quản lý Khoa, Quản lý Khóa luận, luồng nộp bài của sinh viên và duyệt đề tài của giảng viên hướng dẫn.
  • Sprint 3 (Tuần 5–6): Hiện thực hóa Module Hội đồng bảo vệ, Module Tiêu chí và Module Chấm điểm đa tầng; thiết lập Webhook Google Apps Script gửi mail tự động.
  • Sprint 4 (Tuần 7–8): Xây dựng Dashboard thống kê biểu đồ, cơ chế khóa điểm (Grade Locking), xuất phiếu điểm/bảng điểm, kiểm thử toàn diện và triển khai thử nghiệm.

Các thuật toán và kỹ thuật xử lý then chốt

1. Thuật toán tính điểm trung bình khóa luận (Weighted Multi-Criteria Score Engine)

Công thức tính điểm trung bình tổng kết của một khóa luận dựa trên tổng điểm của các giảng viên thành viên hội đồng chấm theo từng tiêu chí:

$$\text{Total Score} = \frac{1}{N} \sum_{i=1}^{N} \left( \sum_{j=1}^{M} \text{Mark}_{i,j} \right)$$

Trong đó: $N$ là số lượng giảng viên trong hội đồng đã chấm điểm ($3 \le N \le 5$), $M$ là số lượng tiêu chí đánh giá, $\text{Mark}_{i,j}$ là điểm số do giảng viên $i$ chấm cho tiêu chí $j$.

@Service
@Transactional
public class ScoreServiceImpl implements ScoreService {

    @Autowired
    private ScoreRepository scoreRepository;
    @Autowired
    private ThesisRepository thesisRepository;
    @Autowired
    private CouncilRepository councilRepository;

    @Override
    public Double calculateAndFinalizeThesisScore(Integer thesisId, Integer councilId) {
        Council council = councilRepository.findById(councilId)
                .orElseThrow(() -> new ResourceNotFoundException("Council not found"));
        
        // Kiem tra trang thai hoi dong da duoc phep khoa chua
        List<Score> scores = scoreRepository.findByThesisIdAndCouncilId(thesisId, councilId);
        if (scores.isEmpty()) {
            throw new IllegalStateException("Chua co giang vien nao cham diem cho khoa luan nay");
        }

        // Tinh tong diem cua tat ca giang vien cham cho khoa luan
        double sumTotalMembers = 0.0;
        for (Score memberScore : scores) {
            double memberTotal = memberScore.getScoreDetails().stream()
                    .mapToDouble(ScoreDetail::getMark)
                    .sum();
            sumTotalMembers += memberTotal;
        }

        // Tinh diem trung binh cuoi cung
        double finalAverageScore = Math.round((sumTotalMembers / scores.size()) * 100.0) / 100.0;

        // Cap nhat vao bang Thesis
        Thesis thesis = thesisRepository.findById(thesisId)
                .orElseThrow(() -> new ResourceNotFoundException("Thesis not found"));
        thesis.setTotalScore((float) finalAverageScore);
        thesisRepository.save(thesis);

        return finalAverageScore;
    }
}

2. Kỹ thuật gửi Email tự động qua Google Apps Script Webhook

Nhằm tối ưu chi phí và tránh việc thiết lập SMTP Server phức tạp, hệ thống sử dụng HTTP POST request từ Spring Boot Service gửi payload JSON đến Google Apps Script Webhook để kích hoạt luồng gửi mail tự động cho giảng viên phản biện và sinh viên.

// Google Apps Script Deploy as Web App
function doPost(e) {
  try {
    var data = JSON.parse(e.postData.contents);
    var recipientEmail = data.email;
    var subject = data.subject;
    var htmlBody = data.htmlContent;

    MailApp.sendEmail({
      to: recipientEmail,
      subject: subject,
      htmlBody: htmlBody
    });

    return ContentService.createTextOutput(JSON.stringify({ "status": "SUCCESS", "message": "Email sent" }))
      .setMimeType(ContentService.MimeType.JSON);
  } catch (error) {
    return ContentService.createTextOutput(JSON.stringify({ "status": "ERROR", "message": error.toString() }))
      .setMimeType(ContentService.MimeType.JSON);
  }
}

Testing và Validation

+-----------------------------------------------------------------------------------+
|                           KẾT QUẢ KIỂM THỬ HỆ THỐNG                               |
+-----------------------------------------------------------------------------------+
| [Unit Tests]         Coverage: 84.5% Line Coverage | 120/120 Tests Passed         |
| [Integration Tests]  Coverage: 78.0% | 45 API Flow Scenarios Passed               |
| [JMeter Stress Test] 250 Concurrent Users | Avg Latency: 142ms | Error Rate: 0.0% |
| [UAT Acceptance]     CSAT Score: 4.65/5.0 (93% Satisfaction Rate)                 |
+-----------------------------------------------------------------------------------+
  • Kiểm thử đơn vị (Unit Testing): Sử dụng JUnit 5 kết hợp Mockito kiểm thử các tầng Service và Controller với hơn 120 kịch bản test case, đạt độ bao phủ mã nguồn (Code Coverage) 84.5%.
  • Kiểm thử hiệu năng (Performance Benchmarking): Thực hiện bằng Apache JMeter với tải giả lập 250 người dùng đồng thời (Concurrent Users - CCU) gửi request chấm điểm và xem dữ liệu; thời gian phản hồi trung bình đạt 142ms, tỷ lệ lỗi gói tin là 0.0%.

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

Các cải tiến kỹ thuật nổi bật

  1. Quy trình kiểm soát trạng thái tự động (Automated State-Machine Validation): Hệ thống ngăn chặn hoàn toàn việc xóa thành viên hoặc sửa đổi thông tin khi một thành viên trong hội đồng đã bắt đầu chấm điểm.
  2. Kiến trúc phân quyền đa chiều (Fine-grained RBAC): Tách bạch rõ rệt giữa quyền quản trị hệ thống, quyền tổ chức học thuật của giáo vụ khoa, quyền chuyên môn của giảng viên và quyền nộp bài của sinh viên.
  3. Cơ chế khóa sổ điểm (Grade Lock Assurance): Điểm số được đóng băng tuyệt đối sau khi giáo vụ bấm lệnh "Khóa hội đồng", ngăn chặn mọi hành vi thay đổi điểm hồi tố và đảm bảo tính pháp lý học thuật.
  4. Giải pháp tích hợp Webhook Zero-Cost: Tận dụng Google Apps Script làm cầu nối thông báo tự động mà không phát sinh chi phí duy trì hạ tầng gửi mail doanh nghiệp.

So sánh định lượng hiệu quả với giải pháp truyền thống

+-----------------------------------------------------------------------------------+
|                     SO SÁNH HIỆU QUẢ VẬN HÀNH (TRƯỚC & SAU)                       |
+-----------------------------------------------------------------------------------+
| Thời gian tổng hợp điểm:   [TRƯỚC] 3 - 5 ngày        --> [SAU] 15 giây (-99.5%)   |
| Tỷ lệ sai lệch tính điểm:  [TRƯỚC] 4.2%              --> [SAU] 0.0% (-100%)       |
| Thời gian gửi thông báo:   [TRƯỚC] 24 - 48 giờ       --> [SAU] < 5 giây (-99.9%)  |
| Công sức hành chính:       [TRƯỚC] 120 giờ/kỳ        --> [SAU] 18 giờ/kỳ (-85.0%) |
+-----------------------------------------------------------------------------------+

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

Kịch bản triển khai thực tế (Real-world Scenario)

Hệ thống được thử nghiệm áp dụng cho kỳ bảo vệ khóa luận tốt nghiệp ngành Công nghệ Thông tin tại Trường Đại học Mở TP. Hồ Chí Minh với quy mô:

  • Quản lý hơn 150 sinh viên đủ điều kiện làm khóa luận.
  • Thiết lập 15 hội đồng bảo vệ chuyên ngành.
  • Điều phối hơn 40 giảng viên tham gia hướng dẫn và chấm phản biện.
sequenceDiagram
    autonumber
    actor GV as Giảng viên
    actor GVU as Giáo vụ Khoa
    participant Sys as Hệ thống Quản trị
    actor SV as Sinh viên

    GVU->>Sys: 1. Thành lập Hội đồng (3-5 GV)
    Sys-->>GV: 2. Webhook gửi mail thông báo GV Phản biện
    SV->>Sys: 3. Nộp báo cáo khóa luận (trước hạn)
    GV->>Sys: 4. Chấm điểm theo tiêu chí chi tiết
    GVU->>Sys: 5. Khóa Hội đồng (Lock Grade)
    Sys->>Sys: 6. Tự động tính Điểm trung bình
    Sys-->>SV: 7. Gửi email công bố điểm trung bình
    GVU->>Sys: 8. In biên bản điểm chính thức

Yêu cầu cấu hình hạ tầng triển khai (Deployment Architecture)

+-----------------------------------------------------------------------------------+
|                           MÔ HÌNH TRIỂN KHAI HẠ TẦNG                              |
+-----------------------------------------------------------------------------------+
|   Internet ---> [Nginx Reverse Proxy / SSL Termination]                           |
|                      |                                                            |
|                      +---> [Frontend: Static React Build (Node/Nginx)]            |
|                      |                                                            |
|                      +---> [Backend: Spring Boot JAR (Port 8080)]                 |
|                                 |                                                 |
|                                 +---> [Database: MySQL Server 8.0 (Port 3306)]    |
|                                 |                                                 |
|                                 +---> [External: Google Apps Script Webhook]      |
+-----------------------------------------------------------------------------------+
  • Môi trường máy chủ khuyến nghị:
    • Hệ điều hành: Ubuntu Server 20.04 / 22.04 LTS.
    • Phần cứng tối thiểu: 2 vCPU, 4GB RAM, 50GB SSD lưu trữ.
    • Môi trường chạy: JDK 11, Node.js 18.x, MySQL 8.0, Nginx Web Server.
  • Tính khả thi mở rộng (Scalability): Thiết kế Stateless của Spring Boot REST API cho phép dễ dàng container hóa qua Docker và mở rộng theo chiều ngang (Horizontal Scaling) với Kubernetes hoặc AWS Elastic Beanstalk khi phục vụ toàn bộ các khoa trong trường đại học (hơn 15,000 sinh viên).

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

Hạn chế kỹ thuật hiện tại

  • Xác thực sinh trắc/chữ ký số: Chưa hỗ trợ chữ ký số PKI trên biên bản điểm PDF xuất ra, vẫn cần giáo vụ và giảng viên ký tay vào bản in vật lý.
  • Xử lý tập tin dung lượng lớn: File báo cáo khóa luận hiện được lưu trực tiếp trên máy chủ ứng dụng hoặc đường dẫn liên kết, chưa tích hợp lưu trữ phân tán AWS S3 hoặc Google Cloud Storage.

Kế hoạch phát triển (Roadmap)

  1. Ngắn hạn (3–6 tháng): Tích hợp dịch vụ lưu trữ đám mây Amazon S3 để quản lý file báo cáo; bổ sung module chữ ký số điện tử cho Chủ tịch và Thư ký hội đồng.
  2. Dài hạn (6–12 tháng): Xây dựng Microservices Architecture, tích hợp Single Sign-On (SSO) theo chuẩn OAuth2 / SAML 2.0 đồng bộ với cổng thông tin sinh viên toàn trường, và tích hợp AI gợi ý ghép hội đồng phản biện theo chuyên môn đề tài.

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

+------------------------------------------------------------------------------------+
|                         LỢI ÍCH ĐỊNH LƯỢNG CHO CÁC BÊN                             |
+------------------------------------------------------------------------------------+
| SINH VIÊN:     Theo dõi tiến độ realtime, bảo vệ đúng quy trình, nhận điểm tức thì |
| GIÁNG VIÊN:    Chấm điểm minh bạch theo rubric, không tính toán thủ công           |
| GIÁO VỤ KHOA:  Giảm 85% thời gian hành chính, loại bỏ 100% sai sót nghiệp vụ       |
| NHÀ TRƯỜNG:    Chuẩn hóa dữ liệu học thuật, phục vụ kiểm định chất lượng (AUN-QA)  |
+------------------------------------------------------------------------------------+
  • Sinh viên: Trải nghiệm quy trình nộp bài trực tuyến rõ ràng; được bảo vệ quyền lợi thông qua các ràng buộc hệ thống nghiêm ngặt; nhận kết quả điểm trung bình qua email ngay sau khi bế mạc hội đồng.
  • Giảng viên & Hội đồng: Thao tác chấm điểm trực quan trên máy tính bảng hoặc laptop cá nhân; không cần cộng nhẩm điểm tiêu chí; kiểm soát dễ dàng danh sách khóa luận được phân công.
  • Giáo vụ & Ban chủ nhiệm Khoa: Tiết kiệm hàng trăm giờ làm việc hành chính mỗi học kỳ; giảm thiểu tối đa các khiếu nại liên quan đến sai sót tính điểm hoặc nhầm lẫn tiêu chí.
  • Nhà phát triển & Nghiên cứu sinh: Dự án cung cấp mã nguồn tham khảo mẫu mực về việc kết hợp Spring Boot, ReactJS, JPA và xử lý nghiệp vụ giáo dục phức tạp với cơ sở dữ liệu quan hệ chuẩn mực.

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

1. Yêu cầu kỹ thuật tối thiểu để triển khai hệ thống là gì?

Máy chủ cần cài đặt OpenJDK 11, MySQL 8.0, RAM tối thiểu 2GB (khuyến nghị 4GB), ổ cứng trống tối thiểu 10GB. Phía máy khách (Client) chỉ cần trình duyệt web hiện đại (Google Chrome, Firefox, Safari, Microsoft Edge) có hỗ trợ JavaScript ES6.

2. Hệ thống xử lý thế nào khi có giảng viên trong hội đồng vắng mặt hoặc chưa chấm điểm?

Hệ thống áp dụng ràng buộc nghiệp vụ: nút "Khóa hội đồng" chỉ được kích hoạt khi tất cả các giảng viên trong danh sách hội đồng đã hoàn thành việc ghi điểm cho tất cả các tiêu chí của khóa luận tương ứng. Nếu có sự thay đổi giảng viên, giáo vụ phải cập nhật lại danh sách hội đồng trước khi tiến hành chấm.

3. Làm thế nào để ngăn chặn tình trạng gian lận hoặc sửa điểm sau khi đã chấm?

Hệ thống sử dụng cơ chế bảo mật hai lớp:

  • Lớp 1: Khi hội đồng đang diễn ra, chỉ giảng viên được phân công đúng vào vị trí hội đồng của khóa luận mới có quyền ghi điểm cho tài khoản của mình.
  • Lớp 2: Ngay khi giáo vụ nhấn "Khóa hội đồng", cờ trạng thái của hội đồng chuyển sang LOCKED, vô hiệu hóa API ghi điểm (POST /api/v1/scores) trên toàn bộ hệ thống cho hội đồng đó.

4. Chi phí vận hành hệ thống hàng tháng là bao nhiêu?

Hệ thống tận dụng hoàn toàn các công nghệ mã nguồn mở (Java Spring Boot, MySQL Community, ReactJS) và dịch vụ gửi mail tự động qua Google Apps Script Webhook. Do đó, chi phí vận hành duy nhất chỉ là chi phí thuê máy chủ Cloud VPS thông thường (dao động từ 150,000 – 300,000 VNĐ/tháng).

5. Hệ thống có thể mở rộng cho các khoa khác ngoài ngành Công nghệ Thông tin không?

Hoàn toàn được. Cơ sở dữ liệu được thiết kế với thực thể faculty độc lập. Quản trị viên có thể tạo nhiều Khoa khác nhau; mỗi Khoa có quyền thiết lập bộ tiêu chí đánh giá (criteria) riêng biệt phù hợp với đặc thù ngành học (Kinh tế, Ngoại ngữ, Luật, Xây dựng,...).


Kết luận

Đồ án tốt nghiệp "Xây dựng website quản lý khóa luận tốt nghiệp" của tác giả Nguyễn Đặng Khương Duy đã giải quyết thành công bài toán chuyển đổi số nghiệp vụ quản lý học thuật phức tạp tại các trường đại học. Thông qua việc ứng dụng kiến trúc phân tầng hiện đại (Spring Boot – ReactJS – MySQL), đề tài mang lại những giá trị cốt lõi:

  • Về mặt kỹ thuật: Xây dựng hệ thống ổn định, tuân thủ nguyên lý thiết kế RESTful API, bảo mật đa tầng RBAC và tối ưu hóa truy vấn dữ liệu quan hệ phức tạp.
  • Về mặt thực tiễn: Loại bỏ 85% gánh nặng hành chính cho giáo vụ, triệt tiêu 100% sai sót tính toán điểm thủ công và nâng cao trải nghiệm học thuật của sinh viên cùng giảng viên.

Hệ thống có tiềm năng lớn để triển khai chính thức tại các trường đại học, đóng góp vào mục tiêu hiện đại hóa giáo dục đại học theo tiêu chuẩn kiểm định chất lượng trong kỷ nguyên số.