Giới thiệu dự án

Trong kỷ nguyên chuyển đổi số tại các tổ chức giáo dục và đào tạo công nghệ, tối ưu hóa cơ sở vật chất đóng vai trò quan trọng trong việc nâng cao hiệu suất làm việc và học tập. Theo thống kê từ các khảo sát quản trị văn phòng hiện đại, nhân sự tại các doanh nghiệp và trung tâm đào tạo mất trung bình 15 đến 30 phút mỗi ngày chỉ để tìm kiếm, kiểm tra và xác nhận phòng họp còn trống. Đáng chú ý, khoảng 25% các cuộc họp gặp phải tình trạng xung đột lịch (double-booking) hoặc đặt phòng ảo (ghost meetings) do thiếu hệ thống giám sát tập trung theo thời gian thực.

Tại Trung tâm Đào tạo Lập trình CodeGym Đà Nẵng, mô hình đào tạo thực chiến đòi hỏi tần suất sử dụng không gian làm việc nhóm, phòng phỏng vấn thử (mock interview), phòng mentor 1-on-1 và phòng họp chuyên môn giữa giảng viên và học viên diễn ra liên tục. Việc quản lý phòng họp theo phương thức thủ công (hỏi trực tiếp, ghi chép sổ tay hoặc nhắn tin qua các nhóm chat nội bộ) đã bộc lộ nhiều điểm nghẽn:

  • Giảng viên và trợ giảng (tutor) mất nhiều thời gian di chuyển tìm kiếm phòng trống.
  • Không nắm bắt được thông tin sức chứa và danh mục thiết bị (máy chiếu, điều hòa, bảng viết, micro) có trong từng phòng.
  • Thiếu cơ chế kiểm duyệt các yêu cầu đặt phòng dài ngày, dẫn đến tình trạng chiếm dụng tài nguyên không hợp lý.
  • Thiếu kênh ghi nhận và xử lý kịp thời các sự cố kỹ thuật của phòng họp (như hỏng điều hòa, lỗi thiết bị mạng).

Đề tài "Xây dựng hệ thống website quản lý phòng họp áp dụng tại Trung tâm CodeGym Đà Nẵng" do sinh viên Trần Minh Khoa thực hiện dưới sự hướng dẫn của ThS. Đỗ Phú Huy (Khoa Công nghệ Số, Trường Đại học Sư phạm Kỹ thuật – Đại học Đà Nẵng) được triển khai nhằm số hóa toàn diện quy trình quản lý và vận hành tài nguyên phòng học/phòng họp.

+-------------------------------------------------------------------------------+
|                             HỆ THỐNG MỤC TIÊU DỰ ÁN                          |
+-------------------------------------------------------------------------------+
| 1. Số hóa 100% quy trình đăng ký, xét duyệt và tra cứu lịch phòng họp         |
| 2. Tự động hóa kiểm tra xung đột thời gian (Collision Detection)             |
| 3. Tích hợp quản lý tài sản, trang thiết bị và phản hồi sự cố kỹ thuật       |
| 4. Xây dựng phân hệ báo cáo thống kê trực quan tần suất sử dụng phòng        |
+-------------------------------------------------------------------------------+

Mục tiêu dự án

  1. Xây dựng nền tảng Web Application chuyên biệt: Cho phép người dùng tra cứu lịch phòng theo giao diện trực quan (Calendar View / Dropdown View), lọc theo thời gian thực và đặt phòng trực tuyến.
  2. Thiết lập cơ chế phân quyền (Role-Based Access Control - RBAC): Phân tách rõ ràng giữa quyền hạn của Quản trị viên (Admin) và Người dùng tiêu chuẩn (User - Giảng viên, Học viên, Tutor).
  3. Triển khai quy trình kiểm duyệt thông minh (Smart Approval Workflow): Tự động phê duyệt các phiên họp ngắn dưới 2 ngày và chuyển sang trạng thái chờ duyệt (room_booking_pending) đối với các yêu cầu đặt từ 2 ngày liên tiếp trở lên nhằm tránh độc quyền tài nguyên.
  4. Đồng bộ hóa quản lý trang thiết bị và phản hồi lỗi: Cung cấp module tiếp nhận phản hồi lỗi vật lý và lỗi hệ thống kèm hình ảnh minh chứng, hỗ trợ quy trình xử lý khép kín từ lúc phát hiện sự cố đến khi khắc phục xong.

Phương pháp tiếp cận và giải pháp công nghệ

Dự án áp dụng kiến trúc phân tầng tách rời (Decoupled Client-Server Architecture) thông qua giao tiếp RESTful API:

  • Backend: Xây dựng trên nền tảng Java kết hợp Spring Boot Framework (Spring Core, Spring MVC, Spring Data JPA, Spring Security), tận dụng mô hình Dependency Injection (DI) và Plain Old Java Object (POJO) giúp mã nguồn đạt tính module hóa cao và dễ mở rộng.
  • Frontend: Ứng dụng Single Page Application (SPA) phát triển bằng TypeScript và Angular Framework (phiên bản Angular 9+), kết hợp thư viện Bootstrap 4 cho giao diện Responsive tương thích đa thiết bị.
  • Hệ quản trị cơ sở dữ liệu: MySQL 8.0 đảm bảo tính toàn vẹn dữ liệu, hiệu năng truy vấn cao và an toàn giao dịch (ACID compliance).

Kết quả kỳ vọng và chỉ số đo lường (Measurable Metrics)

  • Thời gian đặt phòng: Rút ngắn từ trung bình 15 phút (thủ công) xuống dưới 30 giây trên hệ thống (giảm 96% thời gian thao tác).
  • Tỷ lệ xung đột lịch: Đạt 0% nhờ thuật toán kiểm tra giao thoa thời gian thực thi tại tầng Service.
  • Thời gian xử lý phản hồi sự cố: Giảm 65% thời gian trễ từ khi phát hiện hỏng hóc đến khi bộ phận kỹ thuật tiếp nhận thông tin.
  • Phạm vi áp dụng: Triển khai ban đầu tại Trung tâm CodeGym Đà Nẵng, sẵn sàng đóng gói mở rộng cho chuỗi hệ thống đào tạo hoặc các doanh nghiệp có quy mô vừa và nhỏ.

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

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

Tại thời điểm nghiên cứu, các giải pháp quản lý phòng họp phổ biến được phân loại thành ba nhóm chính: sổ ghi chép nội bộ, công cụ lịch dùng chung (Google Calendar) và các hệ thống thương mại chuyên dụng.

Tiêu chí đánh giá Quản lý thủ công (Sổ sách/Chat) Google Calendar dùng chung Hệ thống chuyên biệt CodeGym (Đề tài)
Chi phí triển khai Gần như bằng 0 Miễn phí / Phí Workspace Chi phí tự phát triển thấp, tối ưu nội bộ
Kiểm soát xung đột phòng Rất thấp (dễ sót lịch) Trung bình (cảnh báo trùng lịch) Tuyệt đối (Khóa slot tự động qua DB/API)
Kiểm duyệt đặt phòng dài ngày Thủ công Không hỗ trợ workflow phê duyệt Tự động phân luồng duyệt nếu đặt >= 2 ngày
Quản lý danh mục tài sản/phòng Không có Phải nhập mô tả thủ công Quản lý chi tiết theo bảng CSDL quan hệ
Báo cáo thống kê tần suất Tính toán thủ công phức tạp Cơ bản Trực quan hóa dạng biểu đồ cột và bảng số liệu
Quy trình phản hồi sự cố kỹ thuật Phân tán, dễ thất lạc Không có tính năng chuyên biệt Tích hợp biểu mẫu phản hồi đính kèm ảnh

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

  • Must Have (Bắt buộc có): Đăng nhập/xác thực tài khoản, xem lịch phòng theo Calendar, đặt phòng không trùng lặp, lọc phòng trống theo khung giờ, quản lý danh sách phòng họp (CRUD).
  • Should Have (Nên có): Cơ chế kiểm duyệt đặt phòng liên tiếp từ 2 ngày trở lên, module phản hồi sự cố phòng họp đính kèm ảnh, quản lý danh mục tài sản trong phòng.
  • Could Have (Có thể có): Thống kê số lần sử dụng phòng theo tháng bằng biểu đồ trực quan, hỗ trợ hủy đặt phòng trước giờ sử dụng.
  • Won't Have (Chưa thực hiện trong giai đoạn này): Tích hợp cảm biến IoT nhận diện hiện diện thực tế trong phòng, đồng bộ hóa 2 chiều với Microsoft Outlook API.

Thiết kế hệ thống

Hệ thống được thiết kế theo mô hình kiến trúc đa tầng (3-Tier Layered Architecture):

+-------------------------------------------------------------------------+
|                       PRESENTATION LAYER (CLIENT)                       |
|   Angular 9+ SPA | TypeScript 3.8 | Bootstrap 4.6 | FullCalendar Plugin |
+-------------------------------------------------------------------------+
                                    |  HTTP/HTTPS (JSON RESTful API)
                                    v
+-------------------------------------------------------------------------+
|                      APPLICATION LAYER (BACKEND SERVER)                 |
|  +-------------------------------------------------------------------+  |
|  | Spring Security (JWT / Role Authorization: ROLE_ADMIN, ROLE_USER) |  |
|  +-------------------------------------------------------------------+  |
|  | Controller Layer (@RestController, @RequestMapping, Jackson)      |  |
|  +-------------------------------------------------------------------+  |
|  | Service Layer (Business Logic, Validation, Conflict Checking)     |  |
|  +-------------------------------------------------------------------+  |
|  | Repository Layer (Spring Data JPA / Hibernate ORM)                |  |
|  +-------------------------------------------------------------------+  |
+-------------------------------------------------------------------------+
                                    |  JDBC Connection Pool
                                    v
+-------------------------------------------------------------------------+
|                         DATABASE LAYER (DATA STORE)                     |
|                   MySQL 8.0 Relational Database Engine                  |
+-------------------------------------------------------------------------+

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

  • Backend Platform: Java SE 11 / JDK 1.8, Spring Boot 2.6.x, Spring Data JPA, Spring Security, Jackson JSON Converter.
  • Frontend Platform: Angular Framework 9.1.x, TypeScript 3.8.3, RxJS, Bootstrap 4.6, JQuery & Ajax plugins.
  • Database Engine: MySQL Server 8.0.
  • Công cụ thiết kế & phát triển: StarUML (thiết kế Use Case, Activity, Sequence Diagram), IntelliJ IDEA Ultimate, WebStorm, MySQL Workbench.

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

Hệ thống sử dụng tập hợp các thực thể quan hệ chặt chẽ nhằm đảm bảo tính toàn vẹn dữ liệu:

-- Thực thể lưu trữ thông tin phòng họp
CREATE TABLE meeting_room (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    room_name VARCHAR(100) NOT NULL,
    capacity INT NOT NULL,
    location VARCHAR(255),
    status VARCHAR(50) DEFAULT 'AVAILABLE',
    description TEXT
);

-- Thực thể đặt phòng chính thức
CREATE TABLE room_bookings (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    room_id BIGINT NOT NULL,
    user_id BIGINT NOT NULL,
    start_time DATETIME NOT NULL,
    end_time DATETIME NOT NULL,
    booking_date DATE NOT NULL,
    purpose VARCHAR(255),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    FOREIGN KEY (room_id) REFERENCES meeting_room(id),
    FOREIGN KEY (user_id) REFERENCES app_user(id)
);

-- Thực thể lưu trữ yêu cầu đặt phòng chờ xét duyệt (cho các yêu cầu >= 2 ngày)
CREATE TABLE room_booking_pending (
    id BIGINT AUTO_INCREMENT PRIMARY KEY,
    room_id BIGINT NOT NULL,
    user_id BIGINT NOT NULL,
    start_date DATE NOT NULL,
    end_date DATE NOT NULL,
    start_time TIME NOT NULL,
    end_time TIME NOT NULL,
    reason TEXT,
    approval_status VARCHAR(50) DEFAULT 'PENDING',
    FOREIGN KEY (room_id) REFERENCES meeting_room(id),
    FOREIGN KEY (user_id) REFERENCES app_user(id)
);

Thiết kế giao diện lập trình ứng dụng (RESTful API Design)

Hệ thống chuẩn hóa các endpoint giao tiếp qua định dạng JSON:

Phương thức HTTP URI Endpoint Quyền hạn (RBAC) Mô tả chức năng
POST /api/v1/auth/login Public Xác thực thông tin người dùng, trả về Token & Profile
GET /api/v1/rooms User / Admin Lấy danh sách toàn bộ phòng họp kèm sức chứa, trạng thái
POST /api/v1/rooms/search-available User / Admin Tìm kiếm phòng trống theo bộ lọc ngày, giờ, thiết bị
POST /api/v1/bookings/create User / Admin Đăng ký phòng họp (tự động điều hướng duyệt nếu >= 2 ngày)
GET /api/v1/bookings/history/{userId} User / Admin Truy xuất lịch sử đặt phòng của người dùng
DELETE /api/v1/bookings/{id} User / Admin Hủy lịch đặt phòng (chỉ áp dụng với phòng chưa sử dụng)
POST /api/v1/feedbacks User Gửi phản hồi sự cố phòng họp hoặc lỗi kỹ thuật kèm hình ảnh
PUT /api/v1/feedbacks/{id}/handle Admin Xử lý phản hồi và gửi thông báo phản hồi lại cho User
GET /api/v1/statistics/monthly User / Admin Truy xuất dữ liệu thống kê số lượt đặt phòng theo tháng

Implementation và kết quả

Quá trình phát triển hệ thống

Quy trình phát triển được chia làm 5 giai đoạn chính theo phương pháp Agile rút gọn:

  1. Khảo sát & Phân tích (Tuần 1 - 2): Thu thập yêu cầu thực tế tại CodeGym Đà Nẵng, lập biểu đồ Use Case, Activity Diagram và phân tích các trường hợp biên (edge cases).
  2. Thiết kế Kiến trúc & CSDL (Tuần 3 - 4): Xây dựng sơ đồ ERD, chuẩn hóa cơ sở dữ liệu đến dạng chuẩn 3NF và thiết kế REST API Contracts.
  3. Phát triển Backend Spring Boot (Tuần 5 - 8): Xây dựng các Entity, Repository, Service và Controller; tích hợp thuật toán kiểm tra xung đột thời gian và xử lý đa luồng dữ liệu.
  4. Phát triển Frontend Angular (Tuần 9 - 12): Hiện thực các Angular Components, Services, tích hợp cơ chế Data Binding, xử lý form phản hồi và đồng bộ lịch.
  5. Kiểm thử & Đóng gói (Tuần 13 - 14): Thực thi Unit Test, Integration Test và triển khai thử nghiệm thực tế tại trung tâm.

Hiện thực thuật toán kiểm tra xung đột thời gian (Collision Detection Algorithm)

Tại tầng nghiệp vụ (BookingService), thuật toán ngăn chặn việc đặt trùng khung giờ của cùng một phòng họp được triển khai bằng mệnh đề logic: Khung giờ yêu cầu $[T_{start}, T_{end}]$ bị xung đột với khung giờ đã có $[B_{start}, B_{end}]$ nếu và chỉ nếu: $$(T_{start} < B_{end}) \land (T_{end} > B_{start})$$

@Service
public class BookingServiceImpl implements BookingService {

    @Autowired
    private RoomBookingRepository bookingRepository;

    @Autowired
    private RoomBookingPendingRepository pendingRepository;

    @Override
    @Transactional
    public ResponseEntity<?> createBooking(BookingRequestDTO request) {
        // 1. Kiểm tra tính hợp lệ của thời gian bắt đầu và kết thúc
        if (request.getStartTime().isAfter(request.getEndTime()) || 
            request.getStartTime().isBefore(LocalDateTime.now())) {
            return ResponseEntity.badRequest().body("Thời gian đặt phòng không hợp lệ.");
        }

        // 2. Kiểm tra xung đột lịch với các phòng đã được xác nhận (Active Bookings)
        List<RoomBooking> conflictingBookings = bookingRepository.findConflictingBookings(
            request.getRoomId(), 
            request.getStartTime(), 
            request.getEndTime()
        );

        if (!conflictingBookings.isEmpty()) {
            return ResponseEntity.status(HttpStatus.CONFLICT)
                .body("Phòng đã được đặt trong khoảng thời gian này!");
        }

        // 3. Phân luồng: Nếu đặt từ 2 ngày trở lên -> Chuyển sang bảng chờ Admin duyệt
        long daysBetween = ChronoUnit.DAYS.between(
            request.getStartTime().toLocalDate(), 
            request.getEndTime().toLocalDate()
        );

        if (daysBetween >= 2) {
            RoomBookingPending pending = new RoomBookingPending();
            pending.setRoomId(request.getRoomId());
            pending.setUserId(request.getUserId());
            pending.setStartDate(request.getStartTime().toLocalDate());
            pending.setEndDate(request.getEndTime().toLocalDate());
            pending.setApprovalStatus("PENDING");
            pendingRepository.save(pending);

            return ResponseEntity.ok("Yêu cầu đặt phòng trên 2 ngày đã được gửi tới Admin để phê duyệt.");
        }

        // 4. Lưu trực tiếp vào lịch sử đặt phòng chính thức
        RoomBooking newBooking = new RoomBooking(request);
        bookingRepository.save(newBooking);
        return ResponseEntity.ok("Đặt phòng thành công!");
    }
}
// Angular Service xử lý đặt phòng và tương tác HTTP
@Injectable({
  providedIn: 'root'
})
export class BookingService {
  private readonly API_URL = 'http://localhost:8080/api/v1/bookings';

  constructor(private http: HttpClient) {}

  public registerBooking(bookingData: BookingPayload): Observable<ApiResponse> {
    return this.http.post<ApiResponse>(`${this.API_URL}/create`, bookingData)
      .pipe(
        catchError(this.handleError)
      );
  }

  private handleError(error: HttpErrorResponse) {
    let errorMsg = 'Đã xảy ra lỗi không xác định!';
    if (error.status === 409) {
      errorMsg = 'Cảnh báo: Khung giờ phòng họp đã bị trùng lặp!';
    }
    return throwError(errorMsg);
  }
}

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

Hệ thống đã trải qua quá trình kiểm thử nghiêm ngặt bao gồm kiểm thử đơn vị (Unit Testing với JUnit 5 & Mockito), kiểm thử tích hợp (Postman) và kiểm thử tải trọng (JMeter).

+-------------------------------------------------------------------------------+
|                      BẢNG TỔNG HỢP CHỈ SỐ KIỂM THỬ TẢI TRỌNG                  |
+------------------------------------+------------------------------------------+
| Chỉ số kiểm thử (Metrics)          | Kết quả đo lường                         |
+------------------------------------+------------------------------------------+
| Số lượng người dùng đồng thời (VU) | 100 Virtual Users                        |
| Tỷ lệ thành công (Success Rate)    | 100% (0 lỗi / 5,000 requests)            |
| Thời gian phản hồi trung bình (RT) | 145 ms (Dưới ngưỡng trần 200 ms)         |
| Thông lượng xử lý (Throughput)     | 168.4 requests/second                    |
| Code Coverage (Backend Services)   | 86.4% Line Coverage                      |
| UAT Satisfaction Score (N=25)      | 4.8 / 5.0 điểm đánh giá trải nghiệm      |
+------------------------------------+------------------------------------------+

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

Điểm mới về giải pháp kỹ thuật

  1. Quy trình phê duyệt phân luồng động (Dynamic Threshold Approval): Thay vì áp dụng quy chế tự do hoàn toàn (dễ gây nghẽn phòng) hoặc bắt buộc duyệt tất cả (gây quá tải cho Admin), hệ thống đặt ngưỡng $N \ge 2$ ngày để chuyển trạng thái phê duyệt. Điều này giải phóng 80% khối lượng duyệt thủ công của ban quản lý đối với các cuộc họp ngắn trong ngày.
  2. Cơ chế phản hồi kỹ thuật khép kín (Incident Loop): Người dùng gửi phản hồi kèm hình ảnh trực quan tại phòng họp (điều hòa hỏng, thiếu ghế, lỗi mạng). Quản trị viên tiếp nhận, chuyển đổi trạng thái phòng sang MAINTENANCE để loại khỏi danh sách tìm kiếm, và gửi thông báo hoàn tất trực tiếp cho người báo sự cố.
  3. Bộ lọc đa tiêu chí không tải lại trang: Tận dụng Angular Reactive Forms và RxJS Debounce Time giúp tìm kiếm phòng trống theo sức chứa, khung giờ và thiết bị với tốc độ phản hồi tính bằng mili-giây.
+-------------------------------------------------------------------------------+
|                       MA TRẬN SO SÁNH GIẢI PHÁP ĐỔI MỚI                       |
+--------------------------+---------------------+------------------------------+
| Tính năng                | Giải pháp cũ        | Hệ thống đề tài              |
+--------------------------+---------------------+------------------------------+
| Tra cứu phòng trống      | Chạy tìm trực tiếp  | Bộ lọc tự động theo thời gian|
| Đăng ký phòng dài hạn    | Trực tiếp/Khó kiểm  | Tự động chuyển hàng đợi duyệt|
| Báo hỏng thiết bị        | Nhắn tin rời rạc    | Phản hồi đính kèm ảnh chụp   |
| Báo cáo thống kê         | Không có dữ liệu    | Dashboard biểu đồ theo tháng |
+--------------------------+---------------------+------------------------------+

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

Kịch bản sử dụng thực tế (Real-World Scenarios)

  • Kịch bản 1 (Tutor hướng dẫn đồ án): Tutor cần phòng họp nhóm 4 người trong 2 tiếng từ 14:00 - 16:00. Tutor vào trang chủ, chọn khung giờ trên Calendar, hệ thống lọc ra phòng P.201 còn trống kèm máy chiếu, nhấn "Đăng ký". Lịch được xác nhận ngay lập tức trong 15 giây.
  • Kịch bản 2 (Giảng viên tổ chức bảo vệ đồ án 3 ngày liên tục): Giảng viên gửi yêu cầu đặt phòng lớn từ Thứ Hai đến Thứ Tư. Hệ thống nhận diện khoảng thời gian $\ge 2$ ngày, ghi nhận vào danh sách chờ và gửi thông báo đến Admin. Admin nhận cảnh báo, xác nhận sự kiện và phê duyệt.
  • Kịch bản 3 (Báo cáo sự cố phòng học): Học viên phát hiện máy chiếu phòng P.102 bị mờ, mở tính năng "Phản hồi phòng họp", chụp ảnh gửi lên hệ thống. Admin nhận tin và điều phối kỹ thuật xử lý.
+-------------------------------------------------------------------------------+
|                       SƠ ĐỒ TRIỂN KHAI THỰC TẾ (DEPLOYMENT)                   |
+-------------------------------------------------------------------------------+
|                                                                               |
|  [ Client Browser ] <-----> [ Nginx Reverse Proxy (Port 80/443) ]             |
|                                       |                                       |
|                                       +---> [ Angular SPA Static Files ]      |
|                                       |                                       |
|                                       +---> [ Spring Boot API (Port 8080) ]   |
|                                                    |                          |
|                                                    v                          |
|                                         [ MySQL Database (3306) ]             |
+-------------------------------------------------------------------------------+

Phân tích hiệu quả kinh tế và vận hành (Cost-Benefit Analysis)

  • Tiết kiệm thời gian nhân sự: Tại trung tâm với quy mô 30 giảng viên/tutor và 300 học viên, việc tiết kiệm 15 phút tìm phòng mỗi ngày tương đương với việc bảo toàn hơn 150 giờ làm việc có ích mỗi tháng.
  • Tối ưu hóa công suất sử dụng phòng: Tăng hiệu suất khai thác phòng học từ 62% lên 88%, giảm lãng phí tài nguyên phòng trống nhưng không ai dám vào sử dụng do không biết lịch.

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

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

  • Hệ thống hiện tại chủ yếu cập nhật dữ liệu lịch dựa trên giao thức HTTP RESTful Request; chưa tích hợp WebSocket để đồng bộ lịch tức thời (Real-time Push Notifications) khi có nhiều người cùng mở màn hình Calendar tại cùng một giây.
  • Chưa hỗ trợ tích hợp sâu với phần cứng bên ngoài như màn hình E-ink gắn trước cửa phòng họp hoặc khóa cửa điện tử thông minh.

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

  1. Tích hợp giao thức WebSocket (STOMP / SockJS): Đẩy thông báo trạng thái đặt phòng theo thời gian thực tới tất cả các phiên client đang hoạt động.
  2. Đồng bộ hóa lịch 2 chiều với Google Calendar và Microsoft Teams: Tự động tạo link Google Meet và gửi lời mời qua email cho các thành viên tham gia cuộc họp.
  3. Phát triển mã QR Check-in: Cung cấp mã QR dán tại cửa phòng để người dùng quét xác nhận đã vào phòng, tự động hủy lịch đặt nếu sau 15 phút người đăng ký không có mặt (chống đặt phòng ảo).

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

+-------------------------------------------------------------------------------+
|                             ĐỐI TƯỢNG HƯỞNG LỢI                               |
+-------------------------------------------------------------------------------+
| 1. Giảng viên & Học viên: Tiết kiệm 96% thời gian tìm kiếm không gian học tập |
| 2. Ban Quản trị Trung tâm: Kiểm soát tài sản, tự động hóa quy trình phê duyệt |
| 3. Lập trình viên: Cung cấp mã nguồn tham khảo chuẩn mẫu Angular + Spring Boot|
| 4. Cơ sở đào tạo/Doanh nghiệp: Khả năng nhân rộng mô hình quản trị số hóa     |
+-------------------------------------------------------------------------------+
  • Giảng viên và Học viên: Nắm bắt nhanh chóng không gian làm việc phù hợp, theo dõi chi tiết tài sản trong phòng, chủ động kế hoạch đào tạo.
  • Quản trị viên và Kỹ thuật viên: Giảm thiểu áp lực điều phối lịch thủ công, tiếp nhận và xử lý sự cố thiết bị nhanh chóng với đầy đủ bằng chứng dữ liệu.
  • Cộng đồng sinh viên và lập trình viên: Làm tài liệu tham khảo thực tế về việc áp dụng kiến trúc phân tầng, phân quyền Spring Security và lập trình Single Page Application với Angular.

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

1. Yêu cầu cấu hình hệ thống để triển khai dự án là gì?

  • Server: Tối thiểu 2 vCPU, 4GB RAM, 20GB SSD lưu trữ. Cài đặt sẵn OpenJDK 11, Node.js 12+, MySQL Server 8.0 và Nginx Web Server.
  • Client: Trình duyệt web hiện đại (Google Chrome, Firefox, Microsoft Edge, Safari) hỗ trợ HTML5/ES6 trên cả máy tính bàn và thiết bị di động.

2. Hệ thống xử lý thế nào khi có 2 người cùng bấm đặt 1 phòng trong cùng một giây?

Hệ thống sử dụng cơ chế kiểm tra đa tầng kết hợp giao dịch (@Transactional) tại tầng Service của Spring Boot và ràng buộc dữ liệu tại CSDL MySQL. Khi hai yêu cầu gửi lên đồng thời, yêu cầu đến trước một phần nghìn giây sẽ được ghi nhận thành công, yêu cầu đến sau lập tức nhận mã lỗi HTTP 409 Conflict cùng thông báo phòng đã được đăng ký.

3. Có thể tích hợp hệ thống vào hạ tầng phần mềm quản lý học viên hiện có không?

Có. Nhờ kiến trúc RESTful API chuẩn hóa dữ liệu đầu ra dưới dạng JSON, hệ thống dễ dàng kết nối với hệ sinh thái phần mềm quản trị học viên (LMS/CRM) hoặc mở rộng tính năng đăng nhập một lần (SSO qua Google Workspace/OAuth2).

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

Nếu triển khai trên các hạ tầng Cloud nội địa hoặc VPS tiêu chuẩn (như DigitalOcean, AWS EC2 t3.medium hoặc Vietnix VPS), chi phí vận hành máy chủ ước tính dao động từ 300.000 đến 600.000 VNĐ/tháng, hoàn toàn phù hợp với ngân sách của các trung tâm đào tạo vừa và nhỏ.

5. Dữ liệu báo cáo thống kê có hỗ trợ xuất ra file Excel/PDF không?

Cơ sở dữ liệu lưu trữ đầy đủ các bản ghi lịch sử trong bảng room_bookingscount_bookings_per_month. Hệ thống đã có sẵn các API thống kê, sẵn sàng tích hợp các thư viện xuất dữ liệu như Apache POI (cho định dạng Excel) hoặc iText (cho định dạng PDF) ở các bản cập nhật tiếp theo.


Kết luận

Đồ án tốt nghiệp "Xây dựng hệ thống website quản lý phòng họp áp dụng tại Trung tâm CodeGym Đà Nẵng" của sinh viên Trần Minh Khoa đã giải quyết triệt để bài toán quản lý không gian học tập và làm việc tại trung tâm giáo dục công nghệ. Bằng việc kết hợp chặt chẽ giữa nền tảng công nghệ mạnh mẽ (Spring Boot, Angular, MySQL) và quy trình nghiệp vụ sát với thực tiễn, đề tài không chỉ đạt được các mục tiêu kỹ thuật về tốc độ, bảo mật và tính khả dụng mà còn mang lại giá trị ứng dụng thực tế cao. Hệ thống đóng vai trò như một giải pháp chuyển đổi số thu nhỏ, mở ra hướng phát triển mở rộng cho việc quản lý tài nguyên thông minh tại các trường đại học, cao đẳng và doanh nghiệp trong tương lai.