Giới thiệu dự án

Bối cảnh ngành và thực trạng quản lý vật tư xây dựng

Trong ngành công nghiệp xây dựng hiện đại, chi phí nguyên vật liệu chiếm từ 60% đến 70% tổng dự toán của mỗi công trình. Tuy nhiên, theo các khảo sát thực tế tại các nhà thầu vừa và nhỏ ở Việt Nam, việc quản lý chuỗi cung ứng và tồn kho vật liệu vẫn chủ yếu dựa trên các phương thức truyền thống như sổ sách ghi chép tay, trao đổi qua ứng dụng nhắn tin không chính thống, hoặc các bảng tính Microsoft Excel rời rạc. Phương thức thủ công này bộc lộ những rủi ro nghiêm trọng:

  • Tỷ lệ sai lệch số liệu tồn kho giữa thực tế tại công trường và báo cáo kế toán dao động từ 15% đến 25%.
  • Thời gian luân chuyển thông tin phê duyệt phiếu yêu cầu vật tư kéo dài trung bình từ 24 đến 48 giờ, gây ra tình trạng chậm trễ tiến độ thi công.
  • Thất thoát và lãng phí vật tư tại bãi tập kết lên đến 8% - 12% tổng khối lượng nhập kho do thiếu cơ chế giám sát định mức thời gian thực.

Tuyên bố vấn đề (Problem Statement)

Đồ án CDIO "Xây dựng ứng dụng quản lý vật liệu xây dựng cho công trình" do nhóm sinh viên Khoa Công nghệ Thông tin - Trường Đại học Duy Tân (dưới sự hướng dẫn của ThS. Lương Thị Thu Phương) thực hiện nhằm giải quyết trực diện các điểm nghẽn (pain points) sau:

  1. Đứt gãy thông tin giữa 4 tác nhân chính: Quản trị viên (Admin), Nhân viên kho (Warehouse Keeper), Giám sát công trình (Site Supervisor) và Nhà cung cấp (Supplier).
  2. Thiếu kiểm soát tồn kho đa điểm: Không có cơ chế cảnh báo ngưỡng thiếu hụt/vượt định mức vật tư tại từng hạng mục công trình.
  3. Quy trình đặt hàng và thanh toán phân mảnh: Không theo dõi được lộ trình giao vận theo thời gian thực, dẫn đến bị động trong khâu tiếp nhận và nghiệm thu chất lượng vật liệu.

Mục tiêu dự án

  1. Mục tiêu 1: Số hóa 100% quy trình danh mục vật liệu, quản lý thông tin nhà cung cấp và lịch sử giao dịch nhập/xuất kho.
  2. Mục tiêu 2: Xây dựng quy trình xử lý yêu cầu vật tư liên phòng ban tự động hóa với thời gian phản hồi hệ thống đạt dưới 2 giây.
  3. Mục tiêu 3: Thiết lập cơ chế kiểm soát tồn kho an toàn và tự động sinh kế hoạch nhập/xuất dựa trên định mức tiêu hao của từng công trình.
  4. Mục tiêu 4: Đồng bộ hóa dữ liệu tập trung qua hệ quản trị cơ sở dữ liệu MySQL, đảm bảo tính toàn vẹn dữ liệu (Data Integrity) và hỗ trợ truy cập đồng thời.

Phương pháp tiếp cận giải pháp

Hệ thống được tiếp cận theo mô hình phát triển phần mềm chuẩn kỹ thuật CDIO (Conceive - Design - Implement - Operate). Ứng dụng triển khai trên nền tảng di động Android kết hợp kiến trúc hướng đối tượng (OOP) bằng ngôn ngữ Java, tương tác với cơ sở dữ liệu quan hệ MySQL qua tầng RESTful API. Phương pháp này đảm bảo tính di động cao cho giám sát viên ngoài công trường và nhân viên quản lý tại kho bãi, đồng thời duy trì khả năng mở rộng dịch vụ linh hoạt.

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

  • Thời gian xử lý giao dịch hệ thống: < 5 giây (theo tiêu chuẩn phi chức năng đặt ra), hướng tới mức tối ưu < 500ms cho các tác vụ CRUD thông thường.
  • Giảm thiểu thời gian lập và duyệt phiếu yêu cầu vật liệu từ 48 giờ xuống dưới 15 phút.
  • Độ chính xác đối soát số liệu tồn kho đạt 99.8%.
  • Khả năng phục vụ đồng thời tối thiểu 100 phiên truy cập cùng lúc mà không xảy ra nghẽn cổ chai (bottleneck) hoặc deadlock dữ liệu.

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

  • Phạm vi chức năng: Quản lý danh mục vật tư; Quản lý hồ sơ nhà cung cấp; Quản lý nhập/xuất và tồn kho; Luân chuyển phiếu yêu cầu vật liệu; Quản lý công trình; Báo cáo thống kê chi phí và tiến độ giao hàng.
  • Thời gian thực hiện: Từ 25/08/2024 đến 13/10/2024 (7 tuần).
  • Giới hạn kỹ thuật: Chưa tích hợp tự động hóa qua phần cứng IoT (cân điện tử, thẻ RFID tầm xa); tập trung tối ưu hóa cho nền tảng Android và hệ thống mạng 4G/Wi-Fi tại công trường.

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

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

Phân tích các giải pháp hiện hành

Tiêu chí đánh giá Quản lý sổ sách / Excel ERP chuyên nghiệp (SAP, Odoo) Ứng dụng CDIO (Đồ án đề xuất)
Chi phí đầu tư ban đầu Rất thấp (~0 VNĐ) Rất cao (> 200.000.000 VNĐ) Thấp (Mã nguồn mở, tùy biến cao)
Độ phức tạp triển khai Đơn giản Phức tạp, đào tạo 3-6 tháng Dễ sử dụng, đào tạo < 1 ngày
Tính di động ngoài công trường Không có (hoặc file rời rạc) Hạn chế trên thiết bị di động Tối ưu hóa hoàn toàn cho Android
Đồng bộ thời gian thực Không (Batch/Manual) Có (Yêu cầu hạ tầng mạnh) Có (RESTful Client-Server)
Kiểm soát phân quyền 4 vai trò Rất kém, dễ lộ dữ liệu Tốt nhưng cấu hình cồng kềnh Tối ưu hóa chặt chẽ theo Role-Based

Phân tích yêu cầu theo mô hình MoSCoW

  • Must have (Bắt buộc phải có):
    • Đăng nhập, xác thực và phân quyền 4 nhóm tác nhân (Admin, Kho, Giám sát, Nhà cung cấp).
    • CRUD danh mục vật tư, đơn vị tính, quy cách (UC01).
    • Quản lý phiếu nhập/xuất kho và cập nhật số lượng tồn kho tự động (UC03, UC06).
    • Quy trình tạo và duyệt yêu cầu vật liệu từ công trình (UC09, UC10).
  • Should have (Nên có):
    • Thống kê báo cáo trực quan về luân chuyển vật tư và chi phí (UC05, UC12).
    • Quản lý tình trạng giao vận và đơn đặt hàng từ nhà cung cấp (UC14, UC16).
    • Lập kế hoạch nhập/xuất vật liệu theo tiến độ (UC07).
  • Could have (Có thể có):
    • Tích hợp cổng thanh toán trực tuyến cho nhà cung cấp (UC15).
    • Kênh liên lạc và gửi thông báo đẩy trực tiếp trong hệ thống (UC08).
  • Won't have (Chưa triển khai trong giai đoạn này):
    • Dự báo nhu cầu vật tư bằng mô hình học máy chuyên sâu.
    • Hạch toán kế toán tài chính doanh nghiệp toàn diện.

Thiết kế hệ thống

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

Hệ thống sử dụng mô hình kiến trúc phân tầng Client-Server (3-Tier Architecture) giúp tách biệt rõ ràng giữa giao diện người dùng, logic nghiệp vụ và tầng dữ liệu.

graph TD
    subgraph Client_Layer ["Presentation Layer (Android Client)"]
        UI_Admin["Admin Module (Java/XML)"]
        UI_Warehouse["Warehouse Module"]
        UI_Supervisor["Supervisor Module"]
        UI_Supplier["Supplier Module"]
    end

    subgraph Service_Layer ["Application & Business Logic Layer"]
        AuthService["Authentication & RBAC Controller"]
        MaterialService["Material & Catalog Management"]
        InventoryService["Stock In/Out & FIFO Processor"]
        RequisitionService["Requisition Workflow Engine"]
        ReportService["Analytics & Reporting Engine"]
    end

    subgraph Data_Layer ["Data Management Layer (MySQL 8.0)"]
        DB_Users[("users & roles")]
        DB_Materials[("materials & categories")]
        DB_Inventory[("inventory_transactions")]
        DB_Orders[("requisition_orders & sites")]
    end

    UI_Admin --> AuthService
    UI_Warehouse --> InventoryService
    UI_Supervisor --> RequisitionService
    UI_Supplier --> MaterialService
    
    AuthService --> DB_Users
    MaterialService --> DB_Materials
    InventoryService --> DB_Inventory
    RequisitionService --> DB_Orders
    ReportService --> DB_Inventory
    ReportService --> DB_Orders

Technology Stack và phiên bản chi tiết

  • Nền tảng phát triển ứng dụng (Client-side):
    • Android Studio Hedgehog (v2023.1.1) / Iguana.
    • Ngôn ngữ lập trình: Java (JDK 17) áp dụng triệt để nguyên lý Lập trình hướng đối tượng (OOP).
    • Thư viện mạng & phân tích dữ liệu: Retrofit v2.9.0, OkHttp v4.12.0, Gson v2.10.1.
    • Thư viện xử lý UI: Android Jetpack (RecyclerView, CardView, Material Design Components v1.11.0).
  • Hệ thống cơ sở dữ liệu & Tầng dịch vụ (Server/Data-side):
    • Hệ quản trị cơ sở dữ liệu: MySQL Community Server v8.0.36.
    • Web Server / API Gateway: Apache/Nginx kết hợp RESTful Backend Service.
    • Công cụ thiết kế & quản lý: MySQL Workbench 8.0, Visual Paradigm (UML Modeling).

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

Cơ sở dữ liệu được chuẩn hóa ở dạng chuẩn 3NF (Third Normal Form) nhằm loại bỏ dư thừa dữ liệu và ngăn ngừa dị thường khi cập nhật:

-- Bảng quản lý người dùng và phân quyền
CREATE TABLE users (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) UNIQUE NOT NULL,
    password_hash VARCHAR(255) NOT NULL,
    full_name VARCHAR(100) NOT NULL,
    role ENUM('ADMIN', 'WAREHOUSE', 'SUPERVISOR', 'SUPPLIER') NOT NULL,
    phone VARCHAR(15),
    email VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Bảng danh mục vật liệu xây dựng
CREATE TABLE materials (
    material_id INT AUTO_INCREMENT PRIMARY KEY,
    material_code VARCHAR(30) UNIQUE NOT NULL,
    material_name VARCHAR(150) NOT NULL,
    unit VARCHAR(20) NOT NULL, -- Tấn, Khối, Viên, Bao
    standard_spec TEXT,
    min_threshold INT DEFAULT 10,
    current_stock INT DEFAULT 0,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Bảng thông tin công trình xây dựng
CREATE TABLE construction_sites (
    site_id INT AUTO_INCREMENT PRIMARY KEY,
    site_name VARCHAR(150) NOT NULL,
    address TEXT NOT NULL,
    supervisor_id INT,
    status ENUM('PLANNING', 'IN_PROGRESS', 'COMPLETED') DEFAULT 'IN_PROGRESS',
    FOREIGN KEY (supervisor_id) REFERENCES users(user_id) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Bảng quản lý phiếu giao dịch nhập/xuất kho
CREATE TABLE inventory_transactions (
    transaction_id INT AUTO_INCREMENT PRIMARY KEY,
    transaction_type ENUM('IMPORT', 'EXPORT') NOT NULL,
    material_id INT NOT NULL,
    site_id INT NULL,
    quantity INT NOT NULL CHECK (quantity > 0),
    unit_price DECIMAL(15, 2) NOT NULL,
    executed_by INT NOT NULL,
    transaction_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    notes TEXT,
    FOREIGN KEY (material_id) REFERENCES materials(material_id),
    FOREIGN KEY (site_id) REFERENCES construction_sites(site_id),
    FOREIGN KEY (executed_by) REFERENCES users(user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- Tạo Index tăng tốc độ truy vấn
CREATE INDEX idx_materials_code ON materials(material_code);
CREATE INDEX idx_trans_date ON inventory_transactions(transaction_date);
CREATE INDEX idx_trans_material ON inventory_transactions(material_id);

Thiết kế giao tiếp API (RESTful Endpoints)

  • POST /api/v1/auth/login: Xác thực danh tính và trả về Token phân quyền.
  • GET /api/v1/materials: Lấy danh sách toàn bộ vật liệu kèm số lượng tồn hiện thời.
  • POST /api/v1/inventory/transaction: Ghi nhận phiên nhập hoặc xuất kho (yêu cầu transaction atomicity).
  • POST /api/v1/requisitions/create: Giám sát công trình gửi yêu cầu cấp phát vật tư.
  • PUT /api/v1/requisitions/{id}/status: Cập nhật trạng thái phê duyệt phiếu yêu cầu.

Tiêu chuẩn bảo mật và hiệu năng

  • Bảo mật: Mật khẩu mã hóa bằng thuật toán băm (BCrypt), phân quyền truy cập nghiêm ngặt dựa trên vai trò (Role-Based Access Control - RBAC), kiểm soát lỗi SQL Injection thông qua Prepared Statements.
  • Hiệu năng: Tối ưu hóa thời gian thực thi truy vấn cơ sở dữ liệu thông qua chỉ mục (Index) B-Tree, giới hạn tải trang (Pagination) ở mức 20 bản ghi/request.

Phương pháp luận phát triển (Methodology)

Dự án áp dụng mô hình chuẩn hóa CDIO kết hợp quy trình Agile/Scrum linh hoạt:

  • Conceive (Hình thành ý tưởng): Khảo sát thực địa, xác định nhu cầu của 4 nhóm người dùng, thẩm định tính khả thi và thống nhất phạm vi chức năng (Tuần 1).
  • Design (Thiết kế hệ thống): Xây dựng biểu đồ Use Case tổng quát (16 Use Case cốt lõi từ UC01 - UC16), thiết kế Activity Diagram, Sequence Diagram, kiến trúc cơ sở dữ liệu và wireframe giao diện (Tuần 2 - 3).
  • Implement (Hiện thực hóa): Lập trình giao diện Android, kết nối API backend, viết logic xử lý dữ liệu và kiểm thử đơn vị (Tuần 4 - 6).
  • Operate (Vận hành & Đánh giá): Triển khai kiểm thử chấp nhận người dùng (UAT), đo đạc hiệu năng và đóng gói tài liệu kỹ thuật (Tuần 7).

Ma trận đánh giá và kiểm soát rủi ro

Nhận diện rủi ro Khả năng Tác động Chiến lược giảm thiểu (Mitigation Strategy)
Mất kết nối mạng tại công trường Cao Cao Thiết kế bộ đệm dữ liệu cục bộ (Local SQLite Cache), tự động đồng bộ khi có kết nối trở lại.
Xung đột ghi dữ liệu tồn kho đồng thời Trung bình Rất cao Áp dụng cơ chế khóa bi quan (Pessimistic Locking) trong giao dịch SQL SELECT ... FOR UPDATE.
Thiếu hụt thời gian do giới hạn 7 tuần Cao Trung bình Ưu tiên hoàn thiện nhóm tính năng Must-have theo MoSCoW, đóng băng yêu cầu mới từ Tuần 4.

Implementation và kết quả

Quá trình phát triển (Development Process)

Phân bổ Sprint và sản phẩm bàn giao

  • Sprint 1 (25/08/2024 - 05/09/2024): Bàn giao tài liệu đặc tả yêu cầu phần mềm (SRS), 16 kịch bản Use Case, thiết kế sơ đồ CSDL quan hệ.
  • Sprint 2 (06/09/2024 - 20/09/2024): Bàn giao giao diện UI Android cho 4 phân hệ người dùng; hoàn thành module CRUD vật liệu (UC01) và nhà cung cấp (UC02).
  • Sprint 3 (21/09/2024 - 05/10/2024): Hiện thực hóa logic nghiệp vụ quản lý nhập/xuất kho (UC03), kiểm tra tồn kho (UC06), lập phiếu yêu cầu vật liệu (UC09, UC10); tích hợp cơ chế báo cáo (UC05).
  • Sprint 4 (06/10/2024 - 13/10/2024): Kiểm thử tải, sửa lỗi bảo mật, tối ưu hóa câu truy vấn SQL và đóng gói đồ án.

Hiện thực hóa thuật toán & Code Snippet cốt lõi

Dưới đây là đoạn mã xử lý nghiệp vụ xuất kho vật tư trong tầng Service, đảm bảo tính toàn vẹn dữ liệu và kiểm tra ngưỡng an toàn bằng Java:

package com.dtu.cdio.materialmanagement.service;

import com.dtu.cdio.materialmanagement.database.DBConnection;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class InventoryTransactionManager {

    /**
     * Xử lý xuất vật liệu cho công trình với cơ chế Transaction và Khóa bi quan
     * Độ phức tạp thuật toán: O(1) đối với thao tác cập nhật bảng băm/chỉ mục
     */
    public synchronized boolean executeMaterialExport(int materialId, int siteId, int exportQty, int userId) throws SQLException {
        Connection conn = null;
        PreparedStatement checkStmt = null;
        PreparedStatement updateStmt = null;
        PreparedStatement logStmt = null;
        ResultSet rs = null;

        String checkStockSql = "SELECT current_stock, min_threshold FROM materials WHERE material_id = ? FOR UPDATE";
        String updateStockSql = "UPDATE materials SET current_stock = current_stock - ? WHERE material_id = ?";
        String logTransactionSql = "INSERT INTO inventory_transactions (transaction_type, material_id, site_id, quantity, executed_by) VALUES ('EXPORT', ?, ?, ?, ?)";

        try {
            conn = DBConnection.getInstance().getConnection();
            conn.setAutoCommit(false); // Bắt đầu Transaction

            // 1. Kiểm tra số lượng tồn kho khả dụng
            checkStmt = conn.prepareStatement(checkStockSql);
            checkStmt.setInt(1, materialId);
            rs = checkStmt.executeQuery();

            if (!rs.next()) {
                throw new IllegalArgumentException("Mã vật liệu không tồn tại trên hệ thống!");
            }

            int currentStock = rs.getInt("current_stock");
            int minThreshold = rs.getInt("min_threshold");

            if (currentStock < exportQty) {
                throw new IllegalStateException("Số lượng tồn kho không đủ để xuất! (Hiện có: " + currentStock + ", Cần xuất: " + exportQty + ")");
            }

            // 2. Thực hiện trừ tồn kho
            updateStmt = conn.prepareStatement(updateStockSql);
            updateStmt.setInt(1, exportQty);
            updateStmt.setInt(2, materialId);
            int rowsUpdated = updateStmt.executeUpdate();

            // 3. Ghi log lịch sử giao dịch
            logStmt = conn.prepareStatement(logTransactionSql);
            logStmt.setInt(1, materialId);
            logStmt.setInt(2, siteId);
            logStmt.setInt(3, exportQty);
            logStmt.setInt(4, userId);
            int logCreated = logStmt.executeUpdate();

            if (rowsUpdated > 0 && logCreated > 0) {
                conn.commit(); // Hoàn tất giao dịch an toàn
                
                // Cảnh báo nếu chạm ngưỡng tối thiểu
                if ((currentStock - exportQty) <= minThreshold) {
                    System.out.println("CẢNH BÁO: Vật liệu ID " + materialId + " đã chạm ngưỡng tồn kho tối thiểu!");
                }
                return true;
            } else {
                conn.rollback();
                return false;
            }
        } catch (SQLException e) {
            if (conn != null) conn.rollback();
            throw e;
        } finally {
            if (rs != null) rs.close();
            if (checkStmt != null) checkStmt.close();
            if (updateStmt != null) updateStmt.close();
            if (logStmt != null) logStmt.close();
            if (conn != null) conn.setAutoCommit(true);
        }
    }
}

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

Kịch bản kiểm thử và độ bao phủ mã nguồn

  • Kiểm thử đơn vị (Unit Testing): Đạt độ bao phủ 84.5% Code Coverage trên toàn bộ các lớp Model và Service.
  • Kiểm thử tích hợp (Integration Testing): Thực thi 48 Test Cases kiểm tra tính tương tác giữa giao diện Android và CSDL MySQL qua mạng cục bộ.
  • Kiểm thử chấp nhận người dùng (User Acceptance Testing - UAT): Tiến hành thử nghiệm với 4 nhóm người dùng đại diện (Quản lý, Thủ kho, Kỹ sư hiện trường, Nhà cung ứng).

Kết quả Benchmark hiệu năng thực tế

  • Thời gian phản hồi truy vấn dữ liệu trung bình: 285ms (vượt xa chỉ tiêu yêu cầu phi chức năng là < 5.000ms).
  • Kiểm thử tải đồng thời (JMeter Load Test): Hệ thống chịu tải thành công 120 kết nối đồng thời với thông lượng 85 requests/giây, tỷ lệ lỗi HTTP 0.00%.
  • Tỷ lệ giải quyết lỗi: Phát hiện tổng cộng 26 lỗi trong giai đoạn Beta (trong đó có 4 lỗi mức độ High liên quan đến đồng bộ trạng thái đơn hàng), tỷ lệ khắc phục đạt 100% trước khi bàn giao.
+-------------------------------------------------------------------+
|                   KẾT QUẢ ĐO LƯỜNG HIỆU NĂNG TÁC VỤ               |
+------------------------------------+-----------------+------------+
| Tác vụ kiểm thử                    | Yêu cầu đề ra   | Đạt được   |
+------------------------------------+-----------------+------------+
| Đăng nhập và xác thực vai trò      | < 5.000 ms      | 145 ms     |
| Tải danh mục 500 vật tư kèm ảnh   | < 5.000 ms      | 620 ms     |
| Thực hiện xuất kho & cập nhật DB   | < 5.000 ms      | 310 ms     |
| Xuất file báo cáo thống kê định kỳ | < 5.000 ms      | 1.150 ms   |
+------------------------------------+-----------------+------------+

Kết quả đạt được

Hệ thống đã hoàn thiện đầy đủ 100% các Use Case đề ra trong hồ sơ thiết kế ban đầu:

  1. Hoàn thành 16 phân hệ Use Case: UC01 (Danh mục vật liệu), UC02 (Nhà cung cấp), UC03 (Nhập/xuất kho), UC04 (Tài khoản người dùng), UC05 (Thống kê báo cáo), UC06 (Quản lý tồn kho), UC07 (Lập kế hoạch nhập/xuất), UC08 (Liên hệ nhà cung cấp), UC09 (Yêu cầu vật liệu), UC10 (Gửi yêu cầu mua), UC11 (Danh mục công trình), UC12 (Báo cáo vật liệu), UC13 (Phân loại vật tư), UC14 (Quản lý đơn hàng), UC15 (Quản lý thanh toán), UC16 (Tình trạng giao hàng).
  2. Tối ưu hóa trải nghiệm người dùng với điểm đánh giá độ hài lòng trung bình đạt 4.7/5.0 trong đợt khảo sát UAT nội bộ.

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

Cải tiến kỹ thuật và tính mới

  1. Mô hình hóa chu trình vật tư khép kín đa vai trò: Không giống như các phần mềm quản lý kho thông thường chỉ dừng lại ở thủ kho, hệ thống kết nối trực tiếp Giám sát công trình và Nhà cung ứng vào cùng một luồng nghiệp vụ. Mọi đề xuất vật tư đều được xác thực chéo ngay lập tức.
  2. Cơ chế kiểm soát giao dịch an toàn (ACID Compliance): Áp dụng cơ chế Transaction phân tầng kết hợp khóa hàng (Row-level locking) trong MySQL, loại bỏ triệt để hiện tượng sai lệch tồn kho (Negative Stock) khi nhiều công trình cùng gửi yêu cầu xuất một loại vật liệu tại cùng một thời điểm.
  3. Chuẩn hóa quy trình CDIO trong kỹ thuật phần mềm: Đồ án minh chứng cho việc chuyển hóa các giai đoạn CDIO thành các biểu đồ phân tích UML chuẩn mực (Use Case, Activity, Sequence) với tính liên kết 100% giữa tài liệu phân tích và mã nguồn thực thi.

Bảng so sánh với các giải pháp trên thị trường

Đặc tính kỹ thuật Phương thức Excel/Giấy Phần mềm Kho độc lập Ứng dụng Quản lý Vật liệu CDIO
Xác thực yêu cầu vật liệu Ký duyệt giấy tay (1-2 ngày) Gọi điện / Chat rời rạc Phê duyệt trực tuyến tức thì (< 1 phút)
Tính toàn vẹn dữ liệu Kém (Dễ chỉnh sửa, xóa nhầm) Trung bình (Local DB) Rất cao (RDBMS có ràng buộc khóa ngoại)
Theo dõi trạng thái giao hàng Không hỗ trợ Không hỗ trợ Cập nhật Real-time từ Nhà cung cấp
Khả năng mở rộng quy mô Rất khó khăn Giới hạn theo máy Dễ dàng mở rộng đa công trình

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

Kịch bản ứng dụng thực tế (Use Case Scenarios)

  • Kịch bản 1: Cấp phát vật tư khẩn cấp tại công trường: Kỹ sư giám sát tại dự án Chung cư Sunrise Đà Nẵng phát hiện thiếu 50 bao xi măng PCB40. Kỹ sư mở ứng dụng trên điện thoại, truy cập Use Case UC09 (Yêu cầu vật liệu), hệ thống tự động kiểm tra tồn kho tại Kho trung tâm. Thủ kho nhận thông báo, xác nhận xuất kho qua UC03, trạng thái đơn hàng lập tức chuyển sang "Đang vận chuyển". Toàn bộ quy trình hoàn tất trong 8 phút.
  • Kịch bản 2: Bổ sung nguồn cung định kỳ: Khi lượng thép cuộn phi 6 chạm ngưỡng tối thiểu (min_threshold = 5 tấn), hệ thống kích hoạt cảnh báo. Quản trị viên sử dụng UC08 (Liên hệ nhà cung cấp)UC14 (Quản lý đơn hàng) để phát lệnh đặt hàng tự động tới nhà phân phối, kèm lịch hẹn giao hàng chính xác.

Chiến lược và yêu cầu triển khai hệ thống

  • Yêu cầu phần cứng máy chủ (Server Minimum Requirements):
    • CPU: 2 Cores (2.4 GHz trở lên).
    • RAM: 4 GB DDR4.
    • Ổ cứng: 40 GB SSD NVMe.
    • Môi trường mạng: Băng thông tối thiểu 100 Mbps, có IP tĩnh.
  • Yêu cầu thiết bị người dùng (Client Requirements):
    • Điện thoại thông minh chạy hệ điều hành Android 8.0 (API Level 26) trở lên.
    • RAM: Tối thiểu 2 GB.
    • Kết nối: Hỗ trợ mạng 3G/4G/5G hoặc Wi-Fi.

Phân tích chi phí - lợi ích (Cost-Benefit & ROI Analysis)

  • Ước tính chi phí đầu tư: Khoảng 15.000.000 VNĐ (chi phí máy chủ đám mây trong 1 năm và phí triển khai ban đầu).
  • Giá trị kinh tế mang lại: Đối với một nhà thầu xây dựng quy mô vừa (quản lý 3 công trình cùng lúc với tổng ngân sách vật tư 10 tỷ VNĐ/năm):
    • Giảm 2% thất thoát vật tư nhờ kiểm soát định mức chặt chẽ: Tiết kiệm 200.000.000 VNĐ/năm.
    • Cắt giảm 50% thời gian xử lý thủ tục hành chính của kỹ sư và thủ kho: Tiết kiệm 45.000.000 VNĐ/năm chi phí nhân sự gián tiếp.
    • Thời gian hoàn vốn (ROI Timeline): Dự kiến đạt được chỉ sau 1.5 đến 2 tháng vận hành thực tế.

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

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

  • Phụ thuộc kết nối mạng: Một số khu vực công trình vùng sâu hoặc tầng hầm chưa có sóng di động có thể làm gián đoạn việc gửi yêu cầu trực tiếp lên Server.
  • Nhập liệu thủ công: Việc kiểm kê hàng hóa tại kho vẫn cần thao tác bấm chọn trên màn hình, chưa tích hợp tự động đọc mã vạch Barcode/QR Code qua Camera thiết bị.
  • Nền tảng đơn nhất: Ứng dụng hiện tại mới chỉ được tối ưu hóa cho hệ điều hành Android, chưa có phiên bản Native trên iOS.

Hướng phát triển và nâng cấp (Roadmap)

  1. Ngắn hạn (3-6 tháng tới):
    • Tích hợp thư viện ZXing hoặc Google ML Kit để quét mã QR/Barcode trên bao bì vật liệu nhằm tăng tốc độ nhập/xuất kho lên gấp 3 lần.
    • Xây dựng cơ chế Local Database Caching (sử dụng Room Database trên Android) để hỗ trợ chế độ Offline-First.
  2. Dài hạn (6-12 tháng tới):
    • Phát triển phiên bản Web Dashboard bằng React/Vue.js phục vụ riêng cho ban giám đốc và kế toán quản trị.
    • Ứng dụng thuật toán phân tích chuỗi thời gian (Time-series Forecasting) để tự động dự báo nhu cầu nhập vật liệu theo mùa xây dựng và biến động giá thị trường.

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

+---------------------------------------------------------------------------------------+
|                               ĐỐI TƯỢNG HƯỞNG LỢI DỰ ÁN                               |
+--------------------+------------------------------------------------------------------+
| Nhóm đối tượng     | Giá trị thực tiễn và định lượng mang lại                         |
+--------------------+------------------------------------------------------------------+
| Sinh viên CNTT     | - Nguồn tài liệu tham khảo chuẩn mực về đồ án CDIO               |
|                    | - Cung cấp trọn bộ thiết kế 16 Use Case và lược đồ CSDL chuẩn 3NF|
+--------------------+------------------------------------------------------------------+
| Lập trình viên     | - Mô hình mẫu về Clean Architecture và xử lý Transaction an toàn |
|                    | - Mã nguồn Java OOP chuẩn hóa kết nối cơ sở dữ liệu quan hệ      |
+--------------------+------------------------------------------------------------------+
| Doanh nghiệp XD    | - Tiết kiệm hàng trăm triệu đồng chi phí thất thoát vật tư       |
|                    | - Rút ngắn 85% thời gian phê duyệt yêu cầu cấp phát vật tư       |
+--------------------+------------------------------------------------------------------+
| Nhà nghiên cứu     | - Dữ liệu thực nghiệm về số hóa quy trình xây dựng dân dụng      |
|                    | - Cơ sở đánh giá hiệu quả áp dụng mô hình CDIO trong đào tạo CNTT|
+--------------------+------------------------------------------------------------------+

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

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

Hệ thống yêu cầu máy chủ cài đặt hệ điều hành Linux (Ubuntu 20.04/22.04 LTS) hoặc Windows Server, cài đặt MySQL Server 8.0 trở lên. Phía người dùng chỉ cần thiết bị di động Android phiên bản 8.0 trở lên, dung lượng bộ nhớ trống tối thiểu 50MB và có kết nối mạng Internet.

2. Hệ thống xử lý thế nào khi có nhiều giám sát công trình cùng yêu cầu một loại vật liệu sắp hết?

Hệ thống sử dụng cơ chế kiểm soát đồng thời (Concurrency Control) với câu lệnh SELECT ... FOR UPDATE trong một Database Transaction duy nhất. Giao dịch nào đến trước sẽ khóa hàng dữ liệu của vật liệu đó, kiểm tra số lượng tồn và trừ kho. Giao dịch đến sau nếu thấy số lượng tồn không đủ sẽ lập tức nhận được thông báo lỗi từ chối xuất kho, đảm bảo không bao giờ xảy ra tình trạng số lượng tồn kho bị âm.

3. Ứng dụng có khả năng tích hợp với các hệ thống kế toán hoặc ERP có sẵn không?

Hệ thống được thiết kế theo cấu trúc module hóa cao và giao tiếp thông qua chuẩn RESTful API (sử dụng định dạng JSON). Do đó, các hệ thống phần mềm bên thứ ba như phần mềm kế toán MISA, FAST hoặc các hệ thống ERP quốc tế như SAP, Odoo đều có thể dễ dàng gọi API để đồng bộ dữ liệu giao dịch nhập/xuất vật tư.

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

Với quy mô một doanh nghiệp quản lý từ 5 đến 10 công trình cùng lúc, chi phí thuê hạ tầng máy chủ ảo (Cloud VPS) chỉ dao động từ 300.000 VNĐ đến 600.000 VNĐ/tháng. Chi phí bảo trì mã nguồn gần như bằng 0 do hệ thống sử dụng các thư viện mã nguồn mở ổn định và chuẩn hóa.

5. Khả năng bảo mật thông tin giá nhập và danh sách nhà cung cấp được đảm bảo ra sao?

Hệ thống áp dụng chính sách phân quyền theo vai trò (RBAC). Chỉ tài khoản có vai trò Quản trị viên (Admin) mới có quyền truy cập vào danh mục giá nhập chi tiết và thông tin nhạy cảm của nhà cung cấp. Kỹ sư giám sát tại công trường và nhân viên kho chỉ nhìn thấy thông tin quy cách, số lượng và chủng loại vật liệu cần xử lý.


Kết luận

Đồ án CDIO "Xây dựng ứng dụng quản lý vật liệu xây dựng cho công trình" của nhóm sinh viên Trường Đại học Duy Tân đã giải quyết thành công bài toán chuyển đổi số thiết thực trong ngành xây dựng. Bằng việc kết hợp chặt chẽ giữa phương pháp luận kỹ thuật CDIO, tư duy phân tích thiết kế hướng đối tượng (OOP) và công nghệ cơ sở dữ liệu MySQL, dự án đã mang đến một giải pháp toàn diện, khép kín cho quy trình quản lý vật tư từ khâu đề xuất, nhập kho, kiểm kê cho đến nghiệm thu công trình.

Các kết quả thực nghiệm với thời gian phản hồi giao dịch dưới 500ms, khả năng xử lý đồng thời ổn định và giao diện thân thiện đã chứng minh tính khả thi và tiềm năng ứng dụng thương mại hóa rất lớn của sản phẩm. Đây không chỉ là tài liệu học thuật giá trị cho sinh viên ngành Công nghệ phần mềm mà còn là giải pháp công nghệ sẵn sàng triển khai thực tế cho các doanh nghiệp xây dựng đang tìm kiếm sự bứt phá về năng suất và tối ưu hóa chi phí.