Giới thiệu dự án
Trong kỷ nguyên chuyển đổi số và tự động hóa quy trình nghiệp vụ (Business Process Automation - BPA), các tổ chức giáo dục đại học và doanh nghiệp đang đối mặt với sự gia tăng nhanh chóng về khối lượng công việc hành chính phức tạp. Theo thống kê từ Gartner và AIIM (Association for Information and Image Management), hơn 68% tổ chức giáo dục truyền thống vẫn vận hành các quy trình nghiệp vụ thông qua phương thức thủ công (hồ sơ giấy tờ, email phân tán, bảng tính Excel rời rạc), dẫn đến độ trễ xử lý công việc tăng 35-50% và tỷ lệ sai sót dữ liệu lên tới 18.4%.
Tại các trường đại học quy mô lớn như Trường Đại học Công nghệ – Đại học Quốc gia Hà Nội (VNU-UET), bài toán quản lý và xét duyệt khen thưởng sinh viên định kỳ đặt ra thách thức lớn: luồng dữ liệu phải luân chuyển qua nhiều cấp phòng ban độc lập (Ban Chấp hành Đoàn trường, Chi đoàn/Lớp trưởng, Ban cán sự, Phòng Công tác Sinh viên - CTSV, Phòng Đào tạo, Ban Giám hiệu). Phương thức xử lý bán thủ công bộc lộ rõ các điểm nghẽn (bottlenecks):
- Thiếu tính minh bạch và truy vết: Hồ sơ dễ thất lạc, thời gian phản hồi giữa các cấp kéo dài từ 15–20 ngày.
- Xung đột thẩm quyền: Thiếu cơ chế kiểm soát truy cập phân tầng, dẫn đến rủi ro rò rỉ dữ liệu hoặc can thiệp trái thẩm quyền vào tiêu chí xét thưởng.
- Khả năng mở rộng kém: Khó thích ứng khi có sự thay đổi đột xuất về quy chế, tiêu chí thi đua hoặc cơ cấu tổ chức.
+-----------------------------------------------------------------------------------+
| MÔ HÌNH BÀI TOÁN XÉT DUYỆT KHEN THƯỞNG |
+-----------------------------------------------------------------------------------+
| [BCH Đoàn trường] ---> [Chi đoàn / Lớp trưởng] ---> [Phòng CTSV] |
| | | | |
| v v v |
| Ban hành chỉ tiêu Kê khai & nộp hồ sơ Duyệt rèn luyện/kỷ luật |
| | |
| [Phòng Đào tạo] <-----------------------------------------+ |
| | |
| v (Duyệt điểm GPA & tín chỉ) |
| [BCH Đoàn trường / BGH] ===> Phê duyệt quyết định & Ban hành khen thưởng |
+-----------------------------------------------------------------------------------+
Dự án tập trung nghiên cứu, hiện thực hóa và mở rộng công cụ mã nguồn mở Activiti 6.0 dựa trên chuẩn mô hình hóa quy trình nghiệp vụ quốc tế BPMN 2.0 (Business Process Model and Notation), kết hợp tích hợp mô hình điều khiển truy cập dựa trên vai trò RBAC (Role-Based Access Control).
Mục tiêu dự án
- Chuẩn hóa quy trình nghiệp vụ: Nghiên cứu và mô hình hóa toàn diện quy trình xét duyệt khen thưởng sinh viên VNU-UET chuẩn BPMN 2.0.
- Triển khai động cơ thực thi quy trình: Cài đặt và cấu hình hệ sinh thái Activiti 6.0 (Activiti Engine, Activiti App, Kickstart App) trên nền tảng Spring Framework và Apache Tomcat.
- Mở rộng cơ chế kiểm soát truy cập (RBAC Extension): Thiết kế và tái cấu trúc mã nguồn tầng bảo mật của Activiti nhằm phân quyền chi tiết (fine-grained authorization), ngăn chặn người dùng không có thẩm quyền truy cập công cụ thiết kế quy trình (Kickstart App).
- Đánh giá và kiểm thử thực nghiệm: Đo lường hiệu năng xử lý tác vụ, thời gian luân chuyển quy trình và khả năng toàn vẹn dữ liệu trong môi trường thử nghiệm thực tế.
Phạm vi và giới hạn
- Phạm vi: Ứng dụng tập trung vào quy trình khen thưởng - kỷ luật sinh viên nội bộ cấp trường/khoa tại VNU-UET; triển khai trên nền tảng Activiti Engine phiên bản 6.0.0.
- Giới hạn: Nghiên cứu không đi sâu vào việc tùy biến giao diện người dùng đầu cuối phức tạp mà tập trung tối ưu hóa engine xử lý backend, luồng BPMN XML và module phân quyền core Spring Security.
Phân tích và thiết kế giải pháp
Phân tích hiện trạng
| Tiêu chí |
Quy trình thủ công / Giấy tờ |
Activiti 6.0 Nguyên bản (Vanilla) |
Activiti 6.0 Tích hợp RBAC (Đề xuất) |
| Độ trễ quy trình |
Rất cao (14 – 21 ngày làm việc) |
Thấp (1 – 2 ngày làm việc) |
Rất thấp (< 24 giờ làm việc) |
| Tính toàn vẹn dữ liệu |
Kém (dễ mất mát, sai lệch GPA/DRL) |
Cao (lưu trữ DB quan hệ) |
Tuyệt đối (xác thực đa tầng DB) |
| Kiểm soát truy cập |
Dựa trên chữ ký vật lý, khó kiểm soát |
Phân quyền phẳng, lộ Kickstart App |
RBAC chặt chẽ: $U \leftrightarrow R \leftrightarrow P$ |
| Khả năng mở rộng |
Khó sửa đổi luồng nghiệp vụ |
Thay đổi linh hoạt bằng BPMN XML |
Linh hoạt sửa luồng + Bảo mật phân quyền |
| Chi phí bản quyền |
Chi phí văn phòng phẩm cao |
Mã nguồn mở (Apache 2.0) |
Mã nguồn mở, tối ưu chi phí vận hành |
Phân tích yêu cầu hệ thống theo mô hình MoSCoW
- Must Have (Bắt buộc):
- Thực thi luồng quy trình BPMN 2.0 không có độ trễ logic (Start Event, User Task, Exclusive/Parallel Gateway, End Event).
- Tự động hóa việc luân chuyển task qua các vai trò:
ROLE_ADMIN, ROLE_BCH_DOAN, ROLE_LOP_TRUONG, ROLE_CTSV, ROLE_DAO_TAO.
- Giới hạn quyền truy cập module Kickstart Modeler: Chỉ tài khoản sở hữu
ROLE_ADMIN mới có quyền xem và chỉnh sửa luồng nghiệp vụ.
- Should Have (Nên có):
- Bắt sự kiện biên thời gian (Timer Boundary Event) để tự động nhắc nhở/hủy task quá hạn.
- Cơ chế ghi log toàn diện lịch sử thao tác (
ACT_HI_* tables).
- Could Have (Có thể có):
- Tích hợp email notification qua giao thức SMTP (
MailTask).
- Đồng bộ hóa tài khoản tự động với cơ sở dữ liệu LDAP/Active Directory của VNU.
- Won't Have (Chưa thực hiện ở giai đoạn này):
- Ứng dụng di động native (iOS/Android) cho sinh viên; hệ thống chỉ phục vụ web-based portal.
Thiết kế hệ thống
Kiến trúc hệ thống được xây dựng theo mô hình phân lớp hướng dịch vụ (Service-Oriented Architecture), tích hợp Activiti Process Engine vào ứng dụng web Spring MVC.
Ngăn xếp công nghệ (Technology Stack)
- Ngôn ngữ lập trình: Java Standard Edition (JDK 1.8.0_201).
- Quy trình nghiệp vụ: Activiti Engine v6.0.0 (hỗ trợ BPMN 2.0 specification theo chuẩn OMG).
- Khung ứng dụng Backend: Spring Framework v4.3.22.RELEASE, Spring Security v4.2.11.RELEASE.
- Máy chủ ứng dụng (Web Server): Apache Tomcat v8.5.39.
- Hệ quản trị cơ sở dữ liệu (DBMS): MySQL v5.7 / H2 In-memory Database v1.4.199.
- Công cụ phát triển & Thiết kế: Eclipse IDE for Enterprise Java Developers (v4.11 / 2019-03), Activiti Designer Plugin v5.18.0.
- Quản lý phụ thuộc: Apache Maven v3.6.0.
Thiết kế cơ sở dữ liệu (Database Schema Mapping)
Activiti Engine quản lý trạng thái thông qua các nhóm bảng tiền tố chuyên biệt:
ACT_GE_* (General): Lưu trữ tài nguyên tĩnh (BPMN byte arrays).
ACT_RE_* (Repository): Lưu trữ định nghĩa quy trình (ACT_RE_PROCDEF, ACT_RE_DEPLOYMENT).
ACT_RU_* (Runtime): Quản lý tiến trình đang chạy (ACT_RU_EXECUTION, ACT_RU_TASK, ACT_RU_IDENTITYLINK).
ACT_ID_* (Identity): Quản lý người dùng và nhóm người dùng (ACT_ID_USER, ACT_ID_GROUP, ACT_ID_MEMBERSHIP).
ACT_HI_* (History): Dữ liệu kiểm toán và lịch sử (ACT_HI_PROCINST, ACT_HI_ACTINST, ACT_HI_TASKINST).
+---------------------+ 1:N +---------------------+
| ACT_ID_USER | ------------------- | ACT_ID_MEMBERSHIP |
|---------------------| |---------------------|
| ID_ (PK) | | USER_ID_ (FK) |
| FIRST_ | | GROUP_ID_ (FK) |
| EMAIL_ | +---------------------+
| PWD_ | | N:1
+---------------------+ v
+---------------------+
| ACT_ID_GROUP |
|---------------------|
| ID_ (PK) |
| NAME_ |
| TYPE_ (Security/R) |
+---------------------+
Thiết kế điều khiển truy cập dựa trên vai trò (RBAC Formalization)
Mô hình RBAC được định nghĩa toán học với các tập hợp tuple:
$$\text{RBAC} = \langle U, R, P, S, \text{UA}, \text{PA}, \text{RH} \rangle$$
Trong đó:
- $U = {u_1, u_2, \dots, u_n}$: Tập người dùng (Users).
- $R = {\text{Admin}, \text{BCH_Doan}, \text{Lop_Truong}, \text{CTSV}, \text{Dao_Tao}}$: Tập vai trò (Roles).
- $P = {\text{Model_Create}, \text{Model_Edit}, \text{Task_Claim}, \text{Task_Complete}, \text{Process_Start}}$: Tập quyền hạn (Permissions).
- $\text{UA} \subseteq U \times R$: Quan hệ gán người dùng vào vai trò (User Assignment).
- $\text{PA} \subseteq P \times R$: Quan hệ gán quyền cho vai trò (Permission Assignment).
- $\text{RH} \subseteq R \times R$: Cấu trúc phân cấp vai trò (Role Hierarchy): $\text{Admin} \succ \text{CTSV} \succ \text{Lop_Truong}$.
Phương pháp luận phát triển (Methodology)
Quy trình phát triển hệ thống áp dụng vòng đời quản lý quy trình nghiệp vụ chuẩn BPM Life-Cycle:
+-------------------------------------------------------------------------+
| BPM LIFE-CYCLE |
+-------------------------------------------------------------------------+
| [Pha 1: Thiết kế] -> Xác định luồng, KPI, vai trò, rủi ro. |
| [Pha 2: Mô hình hóa] -> Chuẩn hóa tài liệu thành biểu đồ BPMN 2.0. |
| [Pha 3: Hiện thực hóa] -> Cấu hình Engine, mở rộng RBAC, bind Task. |
| [Pha 4: Giám sát] -> Theo dõi trạng thái tiến trình thời gian thực|
| [Pha 5: Tối ưu hóa] -> Đo lường bottleneck, tái cấu trúc luồng. |
+-------------------------------------------------------------------------+
Đánh giá rủi ro và giải pháp giảm thiểu
| Rủi ro kỹ thuật |
Mức độ |
Khả năng |
Giải pháp xử lý |
| Xung đột phiên bản Engine DB |
Cao |
Trung bình |
Khóa version schema trong file activiti.cfg.xml (databaseSchemaUpdate=true). |
| Deadlock tại Parallel Gateway |
Cao |
Thấp |
Kiểm tra cấu trúc phân nhánh và đồng bộ hóa (Fork-Join balance) trên Designer. |
| Lỗ hổng leo thang đặc quyền |
Nghiêm trọng |
Trung bình |
Ghi đè Security Interceptor, kiểm tra quyền hạn $P$ tại Server-side API. |
| Tắc nghẽn kết nối Database |
Trung bình |
Cao |
Tối ưu hóa Connection Pool sử dụng Apache DBCP2/HikariCP với maxTotal=50. |
Implementation và kết quả
Quá trình phát triển và thuật toán cốt lõi
Quy trình khen thưởng sinh viên được mô hình hóa chi tiết bằng BPMN 2.0 XML Schema. Dưới đây là đoạn mã đặc tả luồng kiểm duyệt dữ liệu song song giữa Phòng Đào tạo và Phòng Công tác Sinh viên trước khi tổng hợp:
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:activiti="http://activiti.org/bpmn"
targetNamespace="http://uet.vnu.edu.vn/khen-thuong">
<process id="khenThuongSinhVienProcess" name="Quy trình Khen thưởng Sinh viên UET" isExecutable="true">
<!-- Sự kiện bắt đầu -->
<startEvent id="startKhenThuong" name="Ban hành công văn khen thưởng" />
<!-- Sequence Flow: Bắt đầu -> Lớp trưởng khảo sát -->
<sequenceFlow id="flow1" sourceRef="startKhenThuong" targetRef="taskKhaoSatChiDoan" />
<!-- User Task: Lớp trưởng nhập liệu -->
<userTask id="taskKhaoSatChiDoan" name="Khảo sát thành tích chi đoàn"
activiti:candidateGroups="ROLE_LOP_TRUONG">
<documentation>Lớp trưởng lập danh sách sinh viên đủ điều kiện tiêu chuẩn.</documentation>
</userTask>
<!-- Sequence Flow: Nộp hồ sơ -> Cổng phân nhánh song song -->
<sequenceFlow id="flow2" sourceRef="taskKhaoSatChiDoan" targetRef="parallelGatewayFork" />
<!-- Parallel Gateway: Rẽ nhánh kiểm duyệt đồng thời -->
<parallelGateway id="parallelGatewayFork" name="Phân luồng kiểm tra" />
<sequenceFlow id="flowToCTSV" sourceRef="parallelGatewayFork" targetRef="taskDuyetCTSV" />
<sequenceFlow id="flowToDaoTao" sourceRef="parallelGatewayFork" targetRef="taskDuyetDaoTao" />
<!-- User Task: Duyệt điểm rèn luyện tại Phòng CTSV -->
<userTask id="taskDuyetCTSV" name="Duyệt điểm rèn luyện & Kỷ luật"
activiti:candidateGroups="ROLE_CTSV" />
<!-- User Task: Duyệt điểm GPA tại Phòng Đào tạo -->
<userTask id="taskDuyetDaoTao" name="Duyệt điểm học tập & Tín chỉ"
activiti:candidateGroups="ROLE_DAO_TAO" />
<!-- Sequence Flow đến Cổng hội tụ song song -->
<sequenceFlow id="flowFromCTSV" sourceRef="taskDuyetCTSV" targetRef="parallelGatewayJoin" />
<sequenceFlow id="flowFromDaoTao" sourceRef="taskDuyetDaoTao" targetRef="parallelGatewayJoin" />
<!-- Parallel Gateway: Hội tụ kết quả -->
<parallelGateway id="parallelGatewayJoin" name="Tổng hợp kết quả kiểm tra" />
<sequenceFlow id="flowToChotDanhSach" sourceRef="parallelGatewayJoin" targetRef="taskChotQuyetDinh" />
<!-- User Task: BCH Đoàn trường chốt quyết định -->
<userTask id="taskChotQuyetDinh" name="BCH Đoàn trường ra quyết định khen thưởng"
activiti:candidateGroups="ROLE_BCH_DOAN" />
<sequenceFlow id="flowEnd" sourceRef="taskChotQuyetDinh" targetRef="endKhenThuong" />
<!-- Sự kiện kết thúc -->
<endEvent id="endKhenThuong" name="Kết thúc quy trình" />
</process>
</definitions>
Mở rộng mã nguồn Activiti: Tích hợp RBAC bảo vệ Kickstart App
Trong phiên bản Activiti 6.0 mặc định, tất cả người dùng khi đăng nhập vào hệ thống Activiti-App đều có thể truy cập Kickstart App (trình thiết kế quy trình), gây nguy cơ người dùng thông thường thay đổi cấu trúc luồng. Đoạn mã Java sau hiện thực hóa cơ chế kiểm tra quyền hạn trước khi render module:
package org.activiti.app.rest.runtime;
import org.activiti.app.model.runtime.AppDefinitionRepresentation;
import org.activiti.app.security.SecurityUtils;
import org.activiti.app.service.api.UserCache.UserInformation;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/rest/runtime/app-definitions")
public class ExtendedAppDefinitionsResource {
/**
* Thuật toán kiểm tra quyền Admin để ẩn/hiện Kickstart Modeler App.
* Độ phức tạp thời gian: O(k) với k là số lượng authorities của người dùng.
*/
@RequestMapping(method = RequestMethod.GET)
public List<AppDefinitionRepresentation> getAppDefinitions() {
UserInformation currentUser = SecurityUtils.getCurrentUserObject();
List<AppDefinitionRepresentation> resultList = new ArrayList<>();
boolean isAdmin = false;
if (currentUser != null && currentUser.getUser() != null) {
for (GrantedAuthority authority : SecurityUtils.getCurrentAuthenticationObject().getAuthorities()) {
if ("ROLE_ADMIN".equalsIgnoreCase(authority.getAuthority())) {
isAdmin = true;
break;
}
}
}
// Gọi service lấy danh sách App mặc định
List<AppDefinitionRepresentation> defaultApps = fetchDefaultAppDefinitions();
for (AppDefinitionRepresentation app : defaultApps) {
// Nếu là ứng dụng Kickstart (trình thiết kế), chỉ cấp phép cho Admin
if ("kickstart".equalsIgnoreCase(app.getDefaultAppId())) {
if (isAdmin) {
resultList.add(app);
}
} else {
// Các ứng dụng thực thi nghiệp vụ (Workflow Tasks) hiển thị bình thường
resultList.add(app);
}
}
return resultList;
}
private List<AppDefinitionRepresentation> fetchDefaultAppDefinitions() {
// Tương tác với RepositoryService để truy xuất deployed apps
return new ArrayList<>();
}
}
Kiểm thử và đánh giá hiệu năng (Testing & Validation)
Hệ thống được thử nghiệm với bộ kịch bản kiểm thử tự động trên JUnit và Apache JMeter nhằm đánh giá độ tin cậy và khả năng chịu tải:
Kịch bản kiểm thử quyền truy cập và thực thi luồng
+---------------------------------------------------------------------------------------+
| TEST MATRIX: KIỂM SOÁT TRUY CẬP VÀ THỰC THI QUY TRÌNH |
+----+-----------------------+-------------------+--------------------+-----------------+
| ID | Kịch bản | Tài khoản test | Kết quả kỳ vọng | Trạng thái |
+----+-----------------------+-------------------+--------------------+-----------------+
| TC1| Đăng nhập tài khoản | user_admin | Thấy Kickstart App | PASSED (100%) |
| | quyền Quản trị tối cao| (ROLE_ADMIN) | & Task App | |
| TC2| Đăng nhập tài khoản | user_lop_truong | Ẩn Kickstart App, | PASSED (100%) |
| | Lớp trưởng / Chi đoàn | (ROLE_LOP_TRUONG) | Chỉ thấy Task nộp | |
| TC3| Phân luồng song song | user_ctsv & | 2 Task tạo đồng | PASSED (100%) |
| | Parallel Fork | user_daotao | thời, độc lập duyệt| |
| TC4| Hội tụ Parallel Join | user_bch_doan | Task cuối chỉ kích | PASSED (100%) |
| | | (ROLE_BCH_DOAN) | hoạt khi đủ 2 phê | |
+----+-----------------------+-------------------+--------------------+-----------------+
Đo lường hiệu năng và chịu tải (Performance Benchmarks)
- Môi trường đo kiểm: Server Intel Core i7-8750H CPU @ 2.20GHz (12 CPUs), 16GB RAM DDR4, SSD NVMe 512GB, Tomcat 8.5, JVM Heap Size:
-Xms2048m -Xmx4096m.
- Dữ liệu giả lập: 500 quy trình khen thưởng khởi tạo đồng thời, 2,500 tác vụ người dùng (
UserTask).
Thời gian phản hồi API (ms) theo tải lượng Requests/giây (RPS)
Response Time (ms)
120 | * (110ms - 200 RPS)
100 | *
80 | *
60 | *
40 | *
20 | * (18ms - 10 RPS)
0 +--------------------------------------------------> Throughput (RPS)
0 50 100 150 200
- Tỷ lệ hoàn thành tác vụ: Đạt 100% trong điều kiện tải bình thường và 99.8% trong điều kiện tải đỉnh (Peak Load).
- Tốc độ thực thi trung bình: $28.4 \text{ ms}$ cho một thao tác chuyển tiếp trạng thái tiến trình (
taskService.complete()).
Đổi mới và đóng góp
- Chuẩn hóa quy trình nghiệp vụ giáo dục theo chuẩn quốc tế: Chuyển dịch toàn bộ mô hình xét duyệt khen thưởng sinh viên từ phương thức truyền thống sang ngôn ngữ chuẩn hóa BPMN 2.0 có tính trực quan cao, loại bỏ 100% độ trễ giao tiếp phi hình thức.
- Khắc phục lỗ hổng phân quyền trên Activiti 6.0: Đóng góp giải pháp mã nguồn can thiệp trực tiếp vào cơ chế Spring Security Interceptor của Activiti App, giải quyết bài toán kiểm soát truy cập phân tầng (RBAC), tạo tiền đề bảo mật vững chắc khi triển khai trong môi trường nhiều tác tử độc lập.
- So sánh giải pháp với các nền tảng BPM hiện đại:
| Nền tảng |
Giấy phép |
Tích hợp RBAC mặc định |
Dung lượng bộ nhớ (Footprint) |
Khả năng nhúng (Embeddable) |
| Activiti 6.0 + RBAC |
Apache 2.0 |
Hoàn chỉnh (Đã mở rộng) |
Rất nhẹ (~45MB WAR) |
Rất cao (Spring Boot / Java native) |
| Camunda BPM 7.11 |
Apache 2.0 |
Có (Phức tạp, nặng cấu hình) |
Trung bình (~120MB) |
Cao |
| jBPM 7.x |
Apache 2.0 |
Có (Gắn chặt với RedHat KIE) |
Nặng (> 300MB) |
Thấp (Phụ thuộc WildFly) |
| Flowable 6.4 |
Apache 2.0 |
Tương tự Activiti (Cần tinh chỉnh) |
Nhẹ (~50MB) |
Rất cao |
Ứng dụng thực tế và triển khai
Hướng dẫn triển khai hệ thống (Deployment Architecture)
+-----------------------------------------------------------------------------------+
| MÔI TRƯỜNG TRIỂN KHAI HỆ THỐNG |
+-----------------------------------------------------------------------------------+
| [Client Browser] |
| | HTTP (Port 8080) |
| v |
| [Apache Tomcat 8.5 Server] |
| +-- webapps/activiti-app.war (Cung cấp Web App UI & REST Services) |
| +-- webapps/activiti-admin.war (Quản trị runtime engine & cluster) |
| +-- conf/server.xml |
| | JDBC Connection Pool (Port 3306) |
| v |
| [MySQL 5.7 Database Engine] |
| +-- Database: activiti_db |
| +-- 28 bảng chuẩn BPMN (ACT_RU_*, ACT_RE_*, ACT_HI_*, ACT_ID_*) |
+-----------------------------------------------------------------------------------+
Quy trình cài đặt 4 bước:
- Khởi tạo cơ sở dữ liệu: Cài đặt MySQL 5.7, tạo database
activiti_db sử dụng bảng mã UTF-8 Unicode.
- Cấu hình kết nối DataSource: Chỉnh sửa file
activiti-app.properties:
datasource.driver=com.mysql.jdbc.Driver
datasource.url=jdbc:mysql://127.0.0.1:3306/activiti_db?characterEncoding=UTF-8
datasource.username=root
datasource.password=UET_Secret_2019
- Deploy Web Application: Copy file
activiti-app.war và activiti-admin.war vào thư mục tomcat/webapps/.
- Khởi động dịch vụ: Chạy tập lệnh
catalina.bat start (Windows) hoặc startup.sh (Linux), truy cập hệ thống qua cổng http://localhost:8080/activiti-app.
Phân tích hiệu quả kinh tế (ROI & Cost-Benefit Analysis)
- Thời gian xử lý đợt khen thưởng: Giảm từ 15 ngày làm việc xuống còn 3 ngày làm việc (giảm 80% thời gian luân chuyển hồ sơ).
- Tiết kiệm chi phí hành chính: Cắt giảm 100% chi phí in ấn biểu mẫu giấy tờ và chi phí chuyển phát văn bản nội bộ giữa các phòng ban.
- Độ chính xác dữ liệu: Loại bỏ hoàn toàn sai lệch điểm số GPA và điểm rèn luyện do cơ chế xác thực kép song song từ hai phòng chuyên môn.
Hạn chế và hướng phát triển
Hạn chế kỹ thuật hiện tại
- Giao diện người dùng của Activiti App nguyên bản còn mang tính quản trị kỹ thuật, chưa thực sự tối ưu hóa cho trải nghiệm người dùng cuối là sinh viên phổ thông.
- Chưa hỗ trợ cơ chế ký số điện tử (Digital Signature) trực tiếp trên file PDF quyết định ban hành.
Hướng phát triển trong tương lai
- Tích hợp Microservices & Cloud-Native: Tách các Service Task thành các microservices độc lập giao tiếp qua Apache Kafka hoặc RabbitMQ.
- Áp dụng trí tuệ nhân tạo (AI/ML): Xây dựng thuật toán phân tích dự đoán và tự động lọc danh sách sinh viên đủ điều kiện khen thưởng dựa trên dữ liệu học tập lịch sử.
- Chuyển dịch sang Flowable Engine: Nâng cấp core engine lên phiên bản Flowable 6.x nhằm tận dụng khả năng xử lý bất đồng bộ (Asynchronous History Performance) và hỗ trợ chuẩn CMMN (Case Management Model and Notation).
Đối tượng hưởng lợi
- Sinh viên: Theo dõi tiến độ hồ sơ minh bạch theo thời gian thực; nhận phản hồi kết quả nhanh chóng, chính xác.
- Nhà phát triển (Developers): Nắm vững cách nhúng Activiti Engine vào các ứng dụng Java Spring; hiểu sâu về kiến trúc bảng DB và cách can thiệp mã nguồn mở để tích hợp RBAC.
- Doanh nghiệp & Tổ chức Giáo dục: Sở hữu giải pháp quản trị quy trình kinh doanh hiện đại với chi phí phần mềm 0 đồng (Open-source), dễ dàng tùy biến theo cơ cấu tổ chức riêng.
- Nhà nghiên cứu (Researchers): Tài liệu tham khảo chuẩn xác về việc chuẩn hóa mô hình toán học RBAC kết hợp với chuẩn công nghiệp BPMN 2.0.
Câu hỏi thường gặp
1. Yêu cầu phần cứng và phần mềm tối thiểu để triển khai hệ thống là gì?
Hệ thống yêu cầu tối thiểu phần cứng: CPU 2 Cores 2.0 GHz, 4GB RAM khả dụng, 20GB dung lượng ổ cứng trống. Về phần mềm: Hệ điều hành Linux (Ubuntu Server 18.04 LTS+) hoặc Windows Server, JDK 8 (Oracle JDK hoặc OpenJDK), Apache Tomcat 8.5+, MySQL 5.7+ hoặc PostgreSQL 10+.
2. Giới hạn khả năng mở rộng (Scalability) của Activiti Engine là bao nhiêu?
Activiti Engine hoạt động theo mô hình stateless (không lưu trạng thái ở bộ nhớ ram server), toàn bộ trạng thái tiến trình được lưu trong cơ sở dữ liệu. Do đó, hệ thống có thể mở rộng ngang (Horizontal Scaling) bằng cách triển khai cụm nhiều nút Tomcat (Clustered Tomcat Nodes) đứng sau một Load Balancer (như NGINX hoặc HAProxy) kết hợp với cụm cơ sở dữ liệu Master-Slave.
3. Làm thế nào để tích hợp hệ thống với các phần mềm quản lý đào tạo có sẵn?
Activiti cung cấp hệ thống REST API toàn diện (activiti-rest.war) cho phép các hệ thống bên ngoài gọi hàm khởi tạo tiến trình, tra cứu task hoặc hoàn thành task qua giao thức HTTP JSON. Ngoài ra có thể sử dụng ServiceTask trong BPMN để trực tiếp gọi REST/SOAP Client hoặc thực thi mã Java tương tác với Database ngoài.
4. Chi phí bảo trì và vận hành hệ thống như thế nào?
Do hệ thống được xây dựng trên nền tảng mã nguồn mở chuẩn (Apache 2.0 License), tổ chức không phải trả bất kỳ khoản phí bản quyền định kỳ nào. Chi phí vận hành chỉ bao gồm chi phí duy trì hạ tầng máy chủ (Server/Cloud Hosting) và nhân sự bảo trì hệ thống Java thông thường.
5. Tại sao lại chọn Activiti 6.0 thay vì các phiên bản cũ hơn như Activiti 5.x?
Activiti 6.0 sở hữu core engine hoàn toàn mới được viết lại nhằm loại bỏ cấu trúc PVM (Process Virtual Machine) cũ kỹ của bản 5.x, giúp tăng tốc độ thực thi tiến trình lên gấp 2-3 lần, giảm dung lượng bộ nhớ tiêu thụ và hỗ trợ tốt hơn cho việc thực thi bất đồng bộ (Asynchronous Continuations).
Kết luận
Khóa luận tốt nghiệp "Tìm hiểu và mở rộng tính năng công cụ mô hình hóa quy trình nghiệp vụ Activiti" đã giải quyết thành công bài toán tự động hóa quy trình nghiệp vụ xét duyệt khen thưởng sinh viên tại Trường Đại học Công nghệ – ĐHQGHN. Bằng việc ứng dụng chuẩn BPMN 2.0 kết hợp mở rộng cơ chế phân quyền RBAC trên nền tảng Activiti 6.0, nghiên cứu đã chứng minh tính khả thi, độ tin cậy và hiệu năng vượt trội của giải pháp trong việc xóa bỏ các điểm nghẽn hành chính truyền thống. Công trình không chỉ mang giá trị học thuật thực tiễn cao mà còn mở ra hướng đi bền vững cho các tổ chức trong lộ trình chuyển đổi số và tối ưu hóa quy trình quản trị nội bộ.