CDMS là một ứng dụng Java dòng lệnh (Console-based) toàn diện, sẵn sàng cho môi trường thực tế, được thiết kế để quản lý toàn bộ quy trình vận hành của một dịch vụ chuyển phát nhanh hiện đại. Dự án được xây dựng với sự tuân thủ nghiêm ngặt các nguyên lý Lập trình hướng đối tượng (OOP), Clean Architecture (Kiến trúc sạch), và các nguyên lý SOLID, cung cấp cơ chế kiểm tra logic nghiệp vụ mạnh mẽ, xử lý máy trạng thái (state machine), và bộ nhớ đệm (in-memory caching) cực nhanh kết hợp lưu trữ dữ liệu dưới dạng JSON.
- 🛡️ Kiến trúc vững chắc (Bulletproof Architecture): Thiết kế N-Tier nghiêm ngặt phân tách rõ ràng các lớp Dữ liệu (Data), Nghiệp vụ (Business), và Hiển thị (Presentation).
- ⚡ Lưu trữ và Đệm dữ liệu trong bộ nhớ (In-Memory Data Grid): Sử dụng
LinkedHashMapcho các thao tác CRUD với độ phức tạpO(1). Dữ liệu được tự động lưu xuống file JSON không đồng bộ thông qua JVM Shutdown Hooks, đảm bảo không bị nghẽn cổ chai I/O khi ứng dụng đang chạy. - 🔄 Máy trạng thái hữu hạn (FSM): Chuyển đổi trạng thái có tính xác định cho Đơn hàng (
PENDING → PICKED_UP → IN_TRANSIT → DELIVERED) và Hóa đơn (UNPAID → PARTIALLY_PAID → PAID). - 🧬 Đa hình nâng cao (Advanced Polymorphism): Tùy biến Gson
RuntimeTypeAdapterFactoryvàLocalDateTimeAdapterđể tuần tự hóa/giải tuần tự hóa (serialize/deserialize) mượt mà các cây kế thừa phức tạp (ví dụ: phân biệtDocumentParcelvàGoodsParcel). - 📊 Phân tích & Chỉ số KPI thời gian thực: Tự động xếp hạng những Người gửi hàng hàng đầu (Top-Shipper leaderboards) dựa trên hiệu suất giao hàng.
- 💸 Quản lý thanh toán mạnh mẽ: Hỗ trợ xử lý thanh toán từng phần, tự động xuất hóa đơn (chỉ áp dụng cho các đơn hàng đã chuyển trạng thái
DELIVERED), và theo dõi doanh thu chính xác. - 🚀 Trải nghiệm người dùng Fail-Fast: Giao diện dòng lệnh (CLI) tương tác thông minh, tự động điều chỉnh các bước chuyển trạng thái hợp lệ và kiểm tra dữ liệu đầu vào ngay lập tức.
src/main/java/com/courier/
├── exceptions/ # Các ngoại lệ tùy chỉnh của domain (ví dụ: DuplicateIdentifierException)
├── models/ # Thực thể domain (Domain entities) và Enum (OrderStatus, InvoiceStatus)
├── repositories/ # Giao diện lưu trữ bộ nhớ và ánh xạ dữ liệu JSON (In-memory storage & JSON mapping)
├── services/ # Logic nghiệp vụ, quy tắc FSM, và kiểm tra tính hợp lệ (validations)
├── ui/ # Giao diện CLI tương tác với lớp định dạng ConsoleTableFormatter
├── utils/ # Các tiện ích I/O, kiểm tra định dạng regex, và Gson adapter
└── Main.java # Điểm khởi chạy ứng dụng (Entry Point)
- JDK 17 trở lên
- Apache Maven 3.8+
Sao chép (clone) kho lưu trữ và chạy các lệnh sau từ thư mục gốc của dự án:
# Dọn dẹp và biên dịch dự án
mvn clean compile
# Chạy ứng dụng với menu tương tác
mvn exec:java -Dexec.mainClass="com.courier.Main"Lưu ý: Khi thoát ứng dụng bằng tùy chọn
0. Thoat, hệ thống sẽ kích hoạt một shutdown hook để lưu trữ an toàn toàn bộ dữ liệu từ bộ nhớ RAM vào thư mụcdata/*.json.
Dự án đi kèm với các bộ kiểm thử tùy chỉnh siêu nhẹ, bao phủ 100% của 20 Quy tắc Nghiệp vụ (BR1-BR20) mà không cần phụ thuộc vào các khung kiểm thử bên ngoài như JUnit:
# Chạy Smoke Test cho tầng Repository (Kiểm tra lưu trữ & I/O)
mvn exec:java -Dexec.mainClass="com.courier.repositories.RepositorySmokeTest"
# Chạy Test Suite cho tầng Service (Kiểm tra Logic lõi & FSM)
mvn exec:java -Dexec.mainClass="com.courier.services.ServiceTestSuite"
# Chạy mô phỏng kiểm thử cho tầng UI (Tự động giả lập phím nhấn)
mvn exec:java -Dexec.mainClass="com.courier.ui.UITestHarness"Dữ liệu được lưu trữ cục bộ trong thư mục data/ dưới dạng các tệp tin JSON được định dạng đẹp mắt. Khi khởi động, hệ thống tự động tải dữ liệu này vào bộ nhớ RAM. Các dữ liệu bị lỗi hoặc sai định dạng sẽ được xử lý bằng cơ chế giảm cấp nhẹ nhàng (graceful degradation) (bỏ qua các đối tượng bị hỏng thay vì làm sập toàn bộ hệ thống), đảm bảo khả năng chịu lỗi cực cao của ứng dụng.