Giới thiệu dự án

Ngành cơ khí chế tạo được ví như "xương sống" của nền kinh tế công nghiệp, cung cấp máy công cụ, trang thiết bị gia công chính xác và giải pháp kết cấu hạ tầng cho các lĩnh vực then chốt như giao thông, nông nghiệp công nghệ cao và xây dựng. Theo thống kê từ Hiệp hội Doanh nghiệp Cơ khí Việt Nam (VAMI), có tới hơn 85% doanh nghiệp cơ khí vừa và nhỏ (SME - Small and Medium Enterprises) tại Việt Nam vẫn đang vận hành quy trình kinh doanh, kiểm kê thiết bị và điều phối nhân sự theo phương thức truyền thống trên sổ sách hoặc bảng tính phân mảnh. Thực trạng này dẫn đến thất thoát trung bình 10-15% khách hàng tiềm năng mỗi năm do thiếu kênh truyền thông số chuyên nghiệp, đồng thời làm tăng chi phí quản lý vận hành xưởng lên đến 20-30%.

Công ty TNHH Thương mại & Dịch vụ Cơ khí Hiệp Hòa là doanh nghiệp cơ khí dân dụng và gia công chính xác với hơn 10 năm kinh nghiệm tại tỉnh Bà Rịa – Vũng Tàu. Doanh nghiệp đối mặt với các điểm nghẽn nghiêm trọng:

  • Thiếu kênh tiếp cận khách hàng số hóa: Khách hàng khó tra cứu danh mục dịch vụ gia công tiện, hàn, phay, cắt CNC cũng như thông số các sản phẩm kết cấu cơ khí, kệ trang trí.
  • Quản lý thiết bị máy móc thủ công: Gần 50 đầu máy (máy tiện, máy phay, máy hàn TIG/MIG) chưa được theo dõi lịch sử bảo dưỡng, dẫn đến tình trạng dừng máy đột xuất do hỏng hóc làm chậm tiến độ đơn hàng.
  • Quy trình chấm công và tính lương phức tạp: Dữ liệu ngày công, bậc lương và tiền thưởng thợ cơ khí được xử lý thủ công, tiềm ẩn sai sót và mất 2-3 ngày làm việc mỗi kỳ chốt lương.
  • Chậm trễ trong lập phiếu báo giá và hóa đơn: Việc lập dự toán chiết tính và phát hành phiếu báo giá PDF cho đối tác tốn nhiều giờ làm việc do không có biểu mẫu chuẩn hóa.
+-------------------------------------------------------------------------------+
|                VẤN ĐỀ HIỆN TẠI CỦA XƯỞNG CƠ KHÍ HIỆP HÒA                     |
+-----------------------------------+-------------------------------------------+
| Vận hành thủ công (Excel/Giấy)    | Hệ quả kinh doanh                         |
| - Mất 10% khách hàng tiềm năng    | - Tốn 16 giờ/tháng làm báo giá, hóa đơn   |
| - Dừng máy 48h/tháng do hỏng hóc  | - Tốn 2 ngày/kỳ chốt lương nhân công      |
| - Lưu trữ dữ liệu phân mảnh       | - Khó theo dõi tiến độ phiếu yêu cầu kỹ thuật|
+-----------------------------------+-------------------------------------------+
                                    |
                                    v
+-------------------------------------------------------------------------------+
|         GIẢI PHÁP: HỆ THỐNG WEB TÍCH HỢP FLASK - SQLALCHEMY                   |
+-------------------------------------------------------------------------------+

Mục tiêu dự án

  1. Xây dựng cổng thông tin số hóa (Customer Portal): Cung cấp giao diện tra cứu danh mục sản phẩm, năng lực gia công (hàn, tiện, phay, cắt CNC) và hệ thống lọc giá, tìm kiếm sản phẩm theo thời gian thực với độ trễ phản hồi dưới 200ms.
  2. Số hóa 100% vòng đời thiết bị phân xưởng: Xây dựng phân hệ quản lý danh mục thiết bị, thông số kỹ thuật, nhà sản xuất, ngày đưa vào sử dụng và theo dõi chi tiết lịch sử sửa chữa, thay thế linh kiện.
  3. Tự động hóa quản lý nhân sự và tính lương: Tích hợp module điểm danh ca làm việc hàng ngày, tự động tính toán tổng lương dựa trên bậc lương cơ sở, số công thực tế và hệ số thưởng, giảm thời gian xử lý xuống dưới 3 phút.
  4. Chuẩn hóa quy trình kỹ thuật và tài chính: Thiết lập quy trình luân chuyển phiếu yêu cầu bảo dưỡng/mua mới thiết bị (Work Orders) kết hợp cơ chế kết xuất tự động báo giá (Quotation) và hóa đơn (Invoice) chuẩn định dạng PDF.
  5. Trực quan hóa chỉ số vận hành (Dashboard Analytics): Xây dựng bảng điều khiển quản trị tổng hợp số lượng sản phẩm, thiết bị, nhân sự và cảnh báo phiếu yêu cầu quá hạn thời gian thực qua biểu đồ trực quan.

Giải pháp kỹ thuật và phạm vi triển khai

Dự án lựa chọn mô hình kiến trúc MVC (Model-View-Controller) trên nền tảng vi khung (micro-framework) Python Flask, kết hợp hệ thống ánh xạ đối tượng quan hệ Flask-SQLAlchemy và cơ sở dữ liệu nhúng SQLite. Sự kết hợp này mang lại khả năng tối ưu hóa tài nguyên phần cứng, dễ dàng bảo trì và khả năng triển khai linh hoạt (Zero-Configuration Deployment) mà không phát sinh chi phí bản quyền phần mềm phức tạp cho doanh nghiệp SME.

Phạm vi dự án: Ứng dụng tại phân xưởng sản xuất và khối văn phòng điều hành của Công ty TNHH TM&DV Cơ khí Hiệp Hòa với quy mô quản lý 50+ máy móc cơ khí, 30+ nhân công kỹ thuật và danh mục 100+ sản phẩm gia công.


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

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

So sánh giải pháp trên thị trường

Hiện nay trên thị trường có nhiều cách tiếp cận để quản lý sản xuất và số hóa doanh nghiệp, tuy nhiên mỗi phương án đều tồn tại những ưu và nhược điểm khi áp dụng vào quy mô xưởng cơ khí vừa và nhỏ:

Tiêu chí Quản lý thủ công (Sổ sách / Excel) Hệ thống ERP thương mại (SAP / Odoo Enterprise) Hệ thống Web Flask tùy biến (Đồ án đề xuất)
Chi phí đầu tư ban đầu Gần như bằng 0 Rất cao ($5,000 - $30,000+) Thấp (< $100 phí lưu trữ máy chủ/năm)
Độ phức tạp triển khai Thấp nhưng dễ phân mảnh Rất cao, mất 3 - 6 tháng đào tạo Tối ưu hóa theo quy trình thực tế xưởng
Tốc độ tra cứu thông tin Chậm (5 - 15 phút/hồ sơ) Nhanh (< 1 giây) Rất nhanh (< 0.5 giây với SQLite ORM)
Khả năng tích hợp Web giới thiệu Không có Cần module phụ trợ đắt đỏ Tích hợp liền mạch trên cùng 1 hệ thống
Tự động hóa xuất PDF báo giá Thủ công qua mail merge Có sẵn Tích hợp thư viện pdfkit chuyên dụng
Yêu cầu hạ tầng máy chủ Máy trạm đơn lẻ Máy chủ chuyên dụng cấu hình cao Chạy mượt mà trên VPS 1 vCPU / 1GB RAM

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

Hệ thống xác định các tập yêu cầu chức năng cho 2 nhóm đối tượng chính (Khách hàng vãng lai và Quản trị viên xưởng):

  • Must Have (Bắt buộc có):
    • Cổng thông tin giới thiệu công ty, bộ sưu tập sản phẩm gia công, bộ lọc tìm kiếm theo giá và tên.
    • Phân hệ xác thực đăng nhập quản trị viên an toàn.
    • CRUD (Create, Read, Update, Delete) danh mục loại sản phẩm, sản phẩm, quản lý đa ảnh sản phẩm (Pillow).
    • Quản lý hồ sơ thiết bị, phân loại máy móc, lập phiếu yêu cầu sửa chữa/thay mới (WorkOrder).
    • Chấm công hàng ngày và tính toán tự động bảng lương nhân công.
    • Xuất phiếu báo giá và hóa đơn chuyên nghiệp ra tệp PDF (pdfkit).
  • Should Have (Nên có):
    • Dashboard thống kê tổng quan với biểu đồ tương tác Chart.js.
    • Cảnh báo các phiếu công việc bảo dưỡng kỹ thuật quá hạn thực hiện (Overdue Work Orders).
    • Tối ưu hóa hiển thị giao diện đa thiết bị với Bootstrap 4.
  • Could Have (Có thể có):
    • Bộ lọc lịch sử chiết tính báo giá theo khoảng thời gian tùy chọn.
    • Trang thông báo lỗi 404/500 thân thiện người dùng.
  • Won't Have (Chưa phát triển trong phiên bản hiện tại):
    • Cổng thanh toán trực tuyến (VNPay/Momo) cho các hợp đồng gia công lớn.
    • Kết nối cảm biến IoT (Internet of Things) để giám sát độ rung động máy móc thời gian thực.

Thiết kế hệ thống

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

Hệ thống được thiết kế theo mô hình 3 tầng chuẩn (Three-Tier Architecture), phân tách độc lập giữa tầng hiển thị giao diện, tầng xử lý logic nghiệp vụ và tầng dữ liệu bền vững:

graph TD
    Client[Client Web Browser / Mobile] -->|HTTP/HTTPS Requests| Nginx[Web Server / Reverse Proxy Nginx]
    Nginx -->|WSGI Protocol| FlaskApp[Flask Application Controller]
    
    subgraph Business Logic Layer
        FlaskApp --> WTForms[Flask-WTForms Validation]
        FlaskApp --> Jinja2Engine[Jinja2 Template Engine + Bootstrap 4]
        FlaskApp --> PDFService[PDF Generation Service - Pdfkit/wkhtmltopdf]
        FlaskApp --> ImgService[Image Processing - Pillow]
        FlaskApp --> ORM[Flask-SQLAlchemy ORM]
    end
    
    subgraph Data Storage Layer
        ORM -->|SQL Queries| SQLiteDB[(SQLite Database Storage)]
        ImgService -->|Store Static Assets| FileSystem[Local Static Storage / Uploads]
    end

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

Hệ thống chuẩn hóa các phiên bản phần mềm nhằm đảm bảo tính tương thích và ổn định tối đa:

  • Ngôn ngữ cốt lõi: Python 3.8.10
  • Web Framework: Flask 2.0.1
  • WSGI Toolkit: Werkzeug 2.0.1
  • Template Engine: Jinja2 3.0.1
  • Form & Validation: Flask-WTF 0.15.1 (WTForms 2.3.3)
  • Object Relational Mapping (ORM): Flask-SQLAlchemy 2.5.1
  • Cơ sở dữ liệu: SQLite 3.31.1
  • Thư viện xử lý ảnh: Pillow 8.3.1
  • Công cụ kết xuất PDF: pdfkit 0.6.1 kết hợp engine wkhtmltopdf 0.12.6
  • Frontend UI Framework: Bootstrap 4.6.0, HTML5, CSS3, JavaScript (ES6)
  • Data Visualization: Chart.js 2.9.4

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

Cơ sở dữ liệu bao gồm 9 thực thể chính được chuẩn hóa ở dạng chuẩn 3NF (Third Normal Form), đảm bảo toàn vẹn dữ liệu thông qua các ràng buộc khóa ngoại (Foreign Keys) và chỉ mục (Indexes):

+------------------+       +-------------------+       +--------------------+
|     Category     |1     N|      Product      |1     N|     ProductImg     |
+------------------+-------+-------------------+-------+--------------------+
| PK cate_id       |       | PK product_id     |       | PK img_id          |
|    name          |       |    name           |       |    img_path        |
+------------------+       |    price          |       | FK product_id      |
                           |    description    |       +--------------------+
                           |    long_desc      |
                           |    status         |
                           | FK cate_id        |
                           +-------------------+

+------------------+       +-------------------+       +--------------------+
|    CateObject    |1     N|      Object       |1     N|     WorkOrder      |
+------------------+-------+-------------------+-------+--------------------+
| PK cate_id       |       | PK obj_id         |       | PK wo_id           |
|    name          |       |    name           |       |    wo_name         |
+------------------+       |    amount         |       |    wo_type         |
                           |    model          |       |    wo_status       |
                           |    status         |       |    wo_date         |
                           |    manufacturer   |       |    wo_deadline     |
                           |    install_day    |       |    wo_priority     |
                           | FK cate_id        |       | FK obj_id          |
                           +-------------------+       | FK emp_id          |
                                                       +--------------------+
                                                                 | N
                                                                 |
+------------------+       +-------------------+                 | 1
|     Payroll      |N     1|     Employee      |-----------------+
+------------------+-------+-------------------+
| PK pr_id         |       | PK emp_id         |
|    reward        |       |    name           |
|    salary        |       |    phone          |
|    date          |       |    address        |
| FK emp_id        |       |    id_card_number |
+------------------+       |    position       |
                           |    wage           |
                           +-------------------+

+------------------+       +-------------------+
|    Quotation     |       |      Invoice      |
+------------------+       +-------------------+
| PK qt_id         |       | PK bill_id        |
|    qt_name       |       |    bill_name      |
|    cus_name      |       |    cus_name       |
|    cus_add       |       |    cus_add        |
|    qt_number     |       |    bill_content   |
|    qt_date       |       |    bill_date      |
|    qt_borrow     |       |    bill_sumprice  |
|    qt_content    |       |    bill_ad_money  |
|    qt_sum        |       |    bill_total     |
|    qt_total      |       |    bill_complete  |
+------------------+       +-------------------+

Chi tiết cấu trúc các bảng dữ liệu:

  1. Category (Loại sản phẩm): cate_id (INTEGER, PK), name (VARCHAR(100), NOT NULL).
  2. Product (Sản phẩm): product_id (INTEGER, PK), name (VARCHAR(100)), img (VARCHAR(255)), description (VARCHAR(500)), price (INTEGER), long_description (VARCHAR(1000)), status (INTEGER, Default 1), cate_id (INTEGER, FK -> Category.cate_id).
  3. ProductImg (Ảnh sản phẩm): img_id (INTEGER, PK), img_path (VARCHAR(500)), product_id (INTEGER, FK -> Product.product_id).
  4. CateObject (Loại thiết bị): cate_id (INTEGER, PK), name (VARCHAR(100)).
  5. Object (Thiết bị/Máy móc): obj_id (INTEGER, PK), name (VARCHAR(500)), amount (INTEGER), model (VARCHAR(200)), status (INTEGER), manufacturer (VARCHAR(200)), install_day (DATE), cate_id (INTEGER, FK -> CateObject.cate_id).
  6. WorkOrder (Phiếu yêu cầu kỹ thuật): wo_id (INTEGER, PK), wo_name (VARCHAR(500)), wo_type (BOOLEAN: 0-Sửa chữa/Thay thế, 1-Mua mới), wo_status (BOOLEAN: 0-Chờ xử lý, 1-Đã hoàn thành), wo_date (DATE), wo_cmt (VARCHAR(1000)), wo_deadline (DATE), wo_priority (INTEGER: 1-Thấp, 2-Trung bình, 3-Khẩn cấp), emp_id (INTEGER, FK -> Employee.emp_id), obj_id (INTEGER, FK -> Object.obj_id).
  7. Employee (Nhân công): emp_id (INTEGER, PK), name (VARCHAR(100)), phone (VARCHAR(255)), address (VARCHAR(100)), identity_card_number (VARCHAR(20)), position (VARCHAR(100)), wage (INTEGER - Bậc lương cơ bản theo ngày).
  8. Payroll (Bảng lương): pr_id (INTEGER, PK), reward (FLOAT), salary (FLOAT), date (VARCHAR(100)), emp_id (INTEGER, FK -> Employee.emp_id).
  9. Quotation (Báo giá) & Invoice (Hóa đơn): Lưu trữ thông tin khách hàng (cus_name, cus_add), nội dung gia công (qt_content/bill_content), tiền tạm ứng (qt_borrow/bill_ad_money), và tổng tiền nghiệm thu (qt_total/bill_total).

Thiết kế API / Endpoint của hệ thống

Phương thức Đường dẫn (Route) Phân quyền Chức năng nghiệp vụ chính Tham số chính / Dữ liệu gửi
GET / Public Hiển thị trang chủ giới thiệu năng lực xưởng N/A
GET /products Public Xem danh mục sản phẩm (Phân trang 8 item/trang) page, category_id
GET /search Public Tìm kiếm sản phẩm theo tên và khoảng giá q (keyword), min_price, max_price
POST /admin/login Public Xác thực quản trị viên phân xưởng username, password, csrf_token
GET/POST /admin/objects/add Admin Thêm mới thiết bị, gán nhà sản xuất và model name, model, cate_id, install_day
GET/POST /admin/workorders/new Admin Khởi tạo phiếu yêu cầu sửa chữa/mua mới máy obj_id, emp_id, wo_type, wo_deadline
POST /admin/attendance Admin Ghi nhận điểm danh ca làm việc trong ngày emp_id_list[], work_date
GET /admin/payroll/export/<id> Admin Kết xuất bảng lương nhân sự ra file PDF pr_id (ID bảng lương)
GET /admin/quotation/pdf/<id> Admin Tạo và tải xuống phiếu báo giá PDF qt_id (ID báo giá)

Kế hoạch triển khai và kiểm thử chất lượng (Methodology & QA)

Dự án áp dụng mô hình phát triển linh hoạt Agile/Scrum tùy biến với chu kỳ 4 Sprint (mỗi Sprint kéo dài 2 tuần):

+-------------------------------------------------------------------------------+
|                      LỘ TRÌNH TRIỂN KHAI DỰ ÁN (8 TUẦN)                       |
+-------------------------------------------------------------------------------+
| Sprint 1: Khảo sát hiện trạng, phân tích yêu cầu & chuẩn hóa CSDL SQLite     |
| Sprint 2: Lập trình Backend Flask, ORM Models, Xác thực & CRUD Sản phẩm/Thiết bị|
| Sprint 3: Xây dựng Module Chấm công, Bảng lương & Kết xuất PDF Báo giá/Hóa đơn|
| Sprint 4: Thiết kế Dashboard Chart.js, Kiểm thử UAT & Tối ưu hiệu năng        |
+-------------------------------------------------------------------------------+

Ma trận đánh giá rủi ro và biện pháp giảm thiểu:

  • Rủi ro rò rỉ hoặc mất mát dữ liệu SQLite: Thiết lập Cron Job tự động sao lưu tệp cơ sở dữ liệu app.db vào lúc 00:00 hàng ngày và lưu trữ trên bộ nhớ đám mây riêng biệt.
  • Lỗi hiển thị tiếng Việt trên file PDF xuất ra: Cấu hình tệp nhị phân wkhtmltopdf kèm cờ mã hóa UTF-8 (--encoding utf-8) và nhúng trực tiếp font chữ mở (Google Fonts Roboto) vào bản mẫu HTML Jinja2.
  • Tấn công Cross-Site Request Forgery (CSRF): Triển khai Flask-WTF với mã token CSRF động được gán vào toàn bộ các form POST trong hệ thống.

Implementation và kết quả

Chi tiết mã nguồn và kỹ thuật cốt lõi

1. Khởi tạo cấu trúc bảng dữ liệu (models.py)

Module quản lý dữ liệu sử dụng Flask-SQLAlchemy định nghĩa mối quan hệ liên kết bảng chặt chẽ giữa thiết bị cơ khí, nhân viên và các phiếu yêu cầu sửa chữa:

# models.py - Định nghĩa cấu trúc thực thể cơ sở dữ liệu
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime

db = SQLAlchemy()

class Object(db.Model):
    __tablename__ = 'objects'
    obj_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(500), nullable=False, index=True)
    amount = db.Column(db.Integer, default=1)
    model = db.Column(db.String(200))
    status = db.Column(db.Integer, default=1) # 1: Đang hoạt động, 0: Tạm ngưng
    manufacturer = db.Column(db.String(200))
    install_day = db.Column(db.Date, default=datetime.utcnow)
    cate_id = db.Column(db.Integer, db.ForeignKey('cate_objects.cate_id'), nullable=False)
    
    # Quan hệ 1-N với phiếu yêu cầu công việc
    work_orders = db.relationship('WorkOrder', backref='target_object', lazy='dynamic')

class WorkOrder(db.Model):
    __tablename__ = 'work_orders'
    wo_id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    wo_name = db.Column(db.String(500), nullable=False)
    wo_type = db.Column(db.Boolean, default=False) # False: Sửa chữa/Thay thế, True: Mua mới
    wo_status = db.Column(db.Boolean, default=False) # False: Đang xử lý, True: Đã hoàn tất
    wo_date = db.Column(db.Date, default=datetime.utcnow)
    wo_cmt = db.Column(db.String(1000))
    wo_deadline = db.Column(db.Date, nullable=False)
    wo_priority = db.Column(db.Integer, default=2) # 1: Thấp, 2: Bình thường, 3: Khẩn cấp
    emp_id = db.Column(db.Integer, db.ForeignKey('employees.emp_id'), nullable=False)
    obj_id = db.Column(db.Integer, db.ForeignKey('objects.obj_id'), nullable=False)

2. Thuật toán tự động tính bảng lương nhân sự (routes.py)

Hệ thống tự động tổng hợp số công làm việc được ghi nhận qua phân hệ điểm danh hàng ngày, nhân với bậc lương (wage) và cộng thêm các khoản tiền thưởng (reward):

$$\text{Tổng lương (Salary)} = (\text{Số ngày công thực tế} \times \text{Bậc lương cơ bản}) + \text{Tiền thưởng}$$

# Trích đoạn xử lý tính lương tự động trong main.py
@app.route('/admin/payroll/calculate/<int:emp_id>', methods=['POST'])
@login_required
def calculate_payroll(emp_id):
    employee = Employee.query.get_or_404(emp_id)
    reward_amount = float(request.form.get('reward', 0))
    current_month = datetime.now().strftime('%m/%Y')
    
    # Đếm số ngày công đã điểm danh trong tháng hiện tại
    work_days_count = Attendance.query.filter(
        Attendance.emp_id == emp_id,
        Attendance.date.like(f"%{current_month}")
    ).count()
    
    # Tính tổng lương theo công thức
    total_salary = (work_days_count * employee.wage) + reward_amount
    
    payroll_record = Payroll(
        emp_id=emp_id,
        date=current_month,
        reward=str(reward_amount),
        salary=str(total_salary)
    )
    db.session.add(payroll_record)
    db.session.commit()
    flash(f"Đã tính lương tháng {current_month} cho nhân viên {employee.name}: {total_salary:,.0f} VNĐ", "success")
    return redirect(url_for('payroll_list'))

3. Kỹ thuật xuất tài liệu PDF chuẩn hóa (pdfkit)

Để đảm bảo phiếu báo giá và hóa đơn xuất ra chuẩn xác theo kích thước giấy A4, hệ thống render giao diện HTML thông qua Jinja2 template trước khi chuyển đổi trực tiếp sang luồng nhị phân PDF:

# Xử lý xuất file PDF phiếu báo giá chiết tính
import pdfkit
from flask import render_template, make_response

@app.route('/admin/quotation/export_pdf/<int:qt_id>')
@login_required
def export_quotation_pdf(qt_id):
    quotation = Quotation.query.get_or_404(qt_id)
    rendered_html = render_template('admin/quotation_pdf_template.html', qt=quotation)
    
    options = {
        'page-size': 'A4',
        'margin-top': '10mm',
        'margin-right': '10mm',
        'margin-bottom': '10mm',
        'margin-left': '10mm',
        'encoding': 'UTF-8',
        'no-outline': None
    }
    
    # Chuyển đổi HTML template sang byte array PDF
    pdf_content = pdfkit.from_string(rendered_html, False, options=options)
    
    response = make_response(pdf_content)
    response.headers['Content-Type'] = 'application/pdf'
    response.headers['Content-Disposition'] = f'inline; filename=Bao_Gia_{quotation.qt_number}.pdf'
    return response

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

1. Kiểm thử chức năng (Unit & Functional Testing)

Hệ thống thực hiện kiểm thử tự động trên 45 kịch bản test case trải dài trên toàn bộ các module:

Phân hệ kiểm thử Số lượng Test Cases Đạt (Passed) Tỷ lệ thành công Thời gian phản hồi trung bình
Xác thực & Bảo mật (Auth) 8 8 100% 45ms
Catalog Sản phẩm & Tìm kiếm 12 12 100% 110ms
Quản lý Thiết bị & WorkOrder 10 10 100% 95ms
Điểm danh & Bảng lương 8 8 100% 130ms
Kết xuất PDF Báo giá/Hóa đơn 7 7 100% 420ms

2. Đo lường hiệu năng thực tế (Performance Benchmarks)

  • Điểm kiểm toán Google Lighthouse:
    • Performance: 94/100
    • Accessibility: 98/100
    • Best Practices: 95/100
    • SEO Score: 100/100
  • Thời gian phản hồi máy chủ (TTFB - Time to First Byte): 145ms trên môi trường máy chủ tiêu chuẩn.
  • Tốc độ sinh file PDF: Trung bình 0.42 giây cho 1 trang báo giá chi tiết gồm 15 hạng mục cơ khí.

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

  1. Số hóa đặc thù cho xưởng cơ khí chế tạo vừa và nhỏ: Khác với các hệ thống ERP cồng kềnh, giải pháp tập trung chính xác vào nghiệp vụ cốt lõi của xưởng: liên kết giữa hỏng hóc máy móc thiết bị (Object) với việc điều động kỹ thuật viên xử lý qua phiếu yêu cầu (WorkOrder).
  2. Cắt giảm 95% thời gian lập báo giá và tính lương:
    • Thời gian xuất một bản báo giá chiết tính hoàn chỉnh giảm từ 45 phút xuống còn 2 phút.
    • Thời gian tổng hợp bảng lương cho 30 thợ xưởng giảm từ 2 ngày làm việc xuống còn dưới 3 phút.
  3. Mô hình kiến trúc siêu nhẹ, không phát sinh chi phí duy trì: Sử dụng kết hợp SQLite nhúng và Python Flask giúp doanh nghiệp loại bỏ hoàn toàn chi phí bản quyền cơ sở dữ liệu và phí quản trị hệ thống phức tạp.
  4. Chuẩn hóa quy trình vận hành và nâng cao uy tín thương hiệu: Đưa toàn bộ sản phẩm và năng lực gia công cơ khí lên môi trường mạng với giao diện chuẩn SEO, tăng khả năng tiếp cận đối tác công nghiệp tại khu vực kinh tế trọng điểm phía Nam.

Ứ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: Tiếp nhận và xử lý sự cố thiết bị tại xưởng

  1. Kỹ thuật trưởng phát hiện máy phay đứng CNC (Mã: OBJ-012) bị mòn trục vitme trong ca làm việc.
  2. Quản đốc truy cập giao diện quản trị trên máy tính bảng xưởng, lập phiếu yêu cầu WorkOrder loại "Sửa chữa/Thay thế", đặt mức ưu tiên "Khẩn cấp" (Priority: 3), phân công cho thợ cơ khí bậc cao tiếp nhận với hạn xử lý (Deadline) trong 24 giờ.
  3. Hệ thống hiển thị cảnh báo đỏ trên Dashboard quản trị cho đến khi trạng thái phiếu được cập nhật thành "Đã hoàn thành".
+-----------------------------------------------------------------------------------+
|               QUY TRÌNH XỬ LÝ SỰ CỐ THIẾT BỊ TẠI XƯỞNG CƠ KHÍ                    |
+-----------------------------------------------------------------------------------+
  [Kỹ thuật trưởng]      --> Phát hiện sự cố hỏng hóc máy móc
         |
         v
  [Hệ thống Web Admin]   --> Lập WorkOrder (Đặt mức ưu tiên Khẩn cấp + Gán thợ sửa)
         |
         v
  [Dashboard Quản trị]   --> Kích hoạt cảnh báo quá hạn thời gian thực
         |
         v
  [Thợ cơ khí hoàn tất]  --> Cập nhật trạng thái phiếu -> Lưu lịch sử bảo dưỡng máy
+-----------------------------------------------------------------------------------+

Kịch bản 2: Báo giá hợp đồng gia công kết cấu

  1. Khách hàng xem danh mục sản phẩm kệ trang trí và liên hệ yêu cầu gia công 50 bộ khung thép định hình.
  2. Nhân viên kinh doanh nhập thông số chiết tính vào module Báo giá (Quotation), hệ thống tự động tính thành tiền và tiền tạm ứng.
  3. Chỉ với một cú nhấp chuột, hệ thống tạo file Bao_Gia_DH17.pdf với logo công ty, điều khoản thanh toán rõ ràng để gửi ngay cho đối tác qua Email/Zalo.

Hướng dẫn cài đặt và triển khai hệ thống (Deployment Guide)

Yêu cầu phần cứng máy chủ tối thiểu:

  • CPU: 1 vCPU (2.0 GHz trở lên)
  • RAM: 1 GB (Khuyến nghị 2 GB)
  • Ổ cứng: 10 GB SSD lưu trữ
  • Hệ điều hành: Ubuntu 20.04 LTS / Debian 11

Quy trình cài đặt từng bước:

  1. Cập nhật hệ thống và cài đặt engine wkhtmltopdf:
sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip python3-venv git wkhtmltopdf -y
  1. Thiết lập môi trường ảo và cài đặt thư viện:
git clone https://github.com/hiephoa-mechanics/web-management.git
cd web-management
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
  1. Cấu hình biến môi trường và khởi tạo dữ liệu:
export FLASK_APP=main.py
export FLASK_ENV=production
python -c "from models import db; db.create_all()"
  1. Cấu hình máy chủ ứng dụng Gunicorn và Reverse Proxy Nginx:
# /etc/nginx/sites-available/hiephoa_app
server {
    listen 80;
    server_name cokhihiephoa.com www.cokhihiephoa.com;

    location /static {
        alias /var/www/hiephoa/static;
        expires 30d;
    }

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

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

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

  • Khóa cơ sở dữ liệu khi ghi đồng thời (SQLite Lock): Cơ sở dữ liệu SQLite tối ưu cho việc đọc và quy mô vừa phải, nhưng có thể xảy ra hiện tượng tắc nghẽn (Database is locked) khi nhiều quản trị viên cùng thực hiện tác vụ ghi dữ liệu lớn đồng thời.
  • Thiếu thông báo thời gian thực (Real-Time Push Notifications): Các cảnh báo phiếu công việc quá hạn hiện mới chỉ hiển thị khi tải lại trang Dashboard chứ chưa tự động đẩy thông báo qua WebSocket hoặc Telegram Bot.

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

  1. Chuyển đổi hệ quản trị cơ sở dữ liệu sang PostgreSQL: Nâng cấp tầng lưu trữ để hỗ trợ hàng trăm kết nối đồng thời và tăng cường khả năng toàn vẹn dữ liệu giao dịch phức tạp.
  2. Xây dựng ứng dụng di động cho thợ xưởng (Mobile App with Flutter): Cho phép công nhân quét mã QR dán trên thân máy móc để xem tức thì lịch sử bảo dưỡng và gửi yêu cầu sửa chữa kèm hình ảnh chụp tại chỗ.
  3. Ứng dụng AI dự đoán bảo trì (Predictive Maintenance): Phân tích tần suất hỏng hóc trong lịch sử để đưa ra dự báo thời điểm cần thay thế phụ tùng trước khi máy xảy ra sự cố ngừng hoạt động.

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

+-----------------------------------------------------------------------------------+
|                        MA TRẬN ĐỐI TƯỢNG HƯỞNG LỢI                                |
+-------------------+---------------------------------------------------------------+
| Nhóm đối tượng    | Giá trị và lợi ích thực tiễn đạt được                         |
+-------------------+---------------------------------------------------------------+
| Sinh viên CNTT    | - Tài liệu tham khảo toàn diện về ứng dụng Flask & SQLAlchemy |
|                   | - Mẫu thiết kế chuẩn về nghiệp vụ ERP xưởng cơ khí           |
+-------------------+---------------------------------------------------------------+
| Lập trình viên    | - Kiến trúc mã nguồn mẫu chuẩn MVC dễ dàng tái sử dụng        |
|                   | - Phương thức tích hợp thư viện xuất PDF (pdfkit) không lỗi font|
+-------------------+---------------------------------------------------------------+
| Doanh nghiệp SME  | - Sở hữu hệ thống quản lý chuyên sâu với chi phí gần như 0đ  |
|                   | - Cắt giảm 80% chi phí giấy tờ và 95% thời gian tính lương    |
+-------------------+---------------------------------------------------------------+
| Nhà nghiên cứu    | - Dữ liệu thực nghiệm về chuyển đổi số trong khối sản xuất nhỏ|
+-------------------+---------------------------------------------------------------+

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

1. Yêu cầu cấu hình máy chủ tối thiểu để triển khai hệ thống là gì?

Hệ thống được tối ưu hóa ở mức tối đa nhờ framework Flask và cơ sở dữ liệu SQLite. Bạn chỉ cần một gói VPS cơ bản (1 vCPU, 1 GB RAM, 10 GB SSD) chạy hệ điều hành Ubuntu hoặc Debian với chi phí duy trì khoảng 80.000 - 120.000 VNĐ/tháng là có thể vận hành ổn định phục vụ đồng thời hàng nghìn lượt truy cập xem sản phẩm mỗi ngày.

2. Giới hạn chịu tải của cơ sở dữ liệu SQLite trong đồ án này là bao nhiêu?

SQLite trong đồ án đáp ứng hoàn hảo cho doanh nghiệp có dưới 50 nhân viên, 200 thiết bị và lưu lượng truy cập quản trị nội bộ 10-20 người thao tác cùng lúc. Khi quy mô doanh nghiệp mở rộng vượt quá 500 yêu cầu/giây, hệ thống có thể chuyển đổi mượt mà sang PostgreSQL hoặc MySQL chỉ bằng cách thay đổi chuỗi kết nối SQLALCHEMY_DATABASE_URI trong file cấu hình mà không cần viết lại mã nguồn xử lý nghiệp vụ.

3. Hệ thống có thể xuất báo giá và hóa đơn sang các định dạng khác ngoài PDF không?

Hoàn toàn có thể. Nhờ kiến trúc phân lớp rõ ràng, nhà phát triển có thể tích hợp thêm thư viện openpyxl hoặc pandas để bổ sung chức năng xuất dữ liệu chấm công, tồn kho thiết bị và danh sách hóa đơn ra tệp bảng tính Microsoft Excel (.xlsx) hoặc CSV chỉ với 15-20 dòng mã bổ sung.

4. Hệ thống đảm bảo an toàn dữ liệu và phòng chống tấn công web như thế nào?

Dự án áp dụng đầy đủ các tiêu chuẩn bảo mật theo khuyến nghị OWASP:

  • Tự động mã hóa và xác thực token CSRF trên tất cả các biểu mẫu với Flask-WTF.
  • Ngăn chặn triệt để lỗ hổng SQL Injection nhờ cơ chế Parameterized Queries tích hợp sẵn của Flask-SQLAlchemy ORM.
  • Mã hóa ký tự đặc biệt phòng chống tấn công XSS (Cross-Site Scripting) thông qua cơ chế Auto-Escaping của template engine Jinja2.

5. Chi phí đầu tư và thời gian hoàn vốn (ROI) của dự án ước tính như thế nào?

Tổng chi phí thiết lập và vận hành năm đầu tiên ước tính dưới 2.000.000 VNĐ (bao gồm tên miền .com và máy chủ VPS). Với việc giúp doanh nghiệp tiết kiệm ít nhất 30 giờ lao động thủ công mỗi tháng (tương đương 4.500.000 VNĐ chi phí nhân sự quản lý) cùng khả năng giữ chân 10% khách hàng tiềm năng, thời gian hoàn vốn đầu tư (Payback Period) của hệ thống chỉ mất dưới 1 tháng sau khi đưa vào vận hành chính thức.


Kết luận

Đồ án tốt nghiệp "Xây dựng website và quản lý gia công cơ khí cho Công ty TNHH TM&DV Cơ khí Hiệp Hòa" của sinh viên Nguyễn Thị Minh Thắm (GVHD: TS. Phan Ngọc Hoàng, Trường Đại học Bà Rịa – Vũng Tàu) đã giải quyết trọn vẹn và thực chất bài toán chuyển đổi số cho doanh nghiệp sản xuất cơ khí quy mô vừa và nhỏ.

Bằng việc kết hợp nhuần nhuyễn giữa nền tảng công nghệ mạnh mẽ (Python, Flask, SQLAlchemy, SQLite, Bootstrap) với sự thấu hiểu sâu sắc quy trình thực tế tại phân xưởng (quản lý thiết bị máy móc, điều phối phiếu yêu cầu kỹ thuật, chấm công tự động hóa và kết xuất báo giá PDF chuyên nghiệp), đề tài không chỉ đạt giá trị học thuật xuất sắc mà còn mang tính ứng dụng thương mại hóa cao. Đây chính là mô hình tham khảo tiêu chuẩn cho các bạn sinh viên, kỹ sư phần mềm và các chủ doanh nghiệp đang tìm kiếm giải pháp số hóa tinh gọn, tiết kiệm chi phí nhưng mang lại hiệu quả vận hành đột phá.