Giới thiệu dự án

Sự gia tăng nhanh chóng của phương tiện giao thông cá nhân tại các khu phức hợp, trường đại học và trung tâm thương mại đặt ra thách thức lớn đối với hạ tầng bãi đỗ xe. Theo thống kê từ các nghiên cứu quản lý đô thị, quy trình kiểm soát bãi đỗ xe thủ công truyền thống (sử dụng vé giấy hoặc ghi sổ) tiêu tốn trung bình từ 15 đến 30 giây cho mỗi lượt phương tiện ra/vào, gây ra hiện tượng ùn tắc nghiêm trọng trong các khung giờ cao điểm (peak hours) với tỷ lệ thất thoát doanh thu tiềm ẩn lên tới 5 - 8% do sai lệch ghi chép.

Dự án Hệ Thống Quản Lý Bãi Xe (CT430 - Phân tích hệ thống hướng đối tượng) do nhóm nghiên cứu tại Trường Công nghệ Thông tin & Truyền thông – Trường Đại học Cần Thơ thực hiện dưới sự hướng dẫn của TS. Phạm Thị Xuân Lộc. Đề tài tập trung giải quyết các điểm nghẽn (pain points) thực tế:

  • Ùn tắc giao thông cục bộ tại cổng kiểm soát do thời gian xử lý thủ công kéo dài.
  • Thiếu hụt cơ chế kiểm soát minh bạch đối với các gói dịch vụ định kỳ (thẻ tháng) và vé lượt.
  • Khó khăn trong việc theo dõi sức chứa thực tế theo thời gian thực (real-time slot occupancy).
  • Quy trình xử lý sự cố, tranh chấp và khiếu nại (lost ticket, mất thẻ, hư hỏng phương tiện) chưa được chuẩn hóa và số hóa.

Mục tiêu của dự án

  1. Mô hình hóa toàn diện hệ thống: Ứng dụng phương pháp Phân tích & Thiết kế Hướng đối tượng (OOAD) theo chuẩn UML 2.5 với hơn 100 sơ đồ chức năng và hành vi (Use Case, DFD, Class Diagram, Activity Diagram, Sequence Diagram, State Diagram, Collaboration Diagram).
  2. Tự động hóa chu trình kiểm soát xe: Xây dựng cơ chế xác thực thẻ thông minh (thẻ lượt và thẻ tháng), tự động phân loại phương tiện (xe hai bánh, xe ô tô 4-7 chỗ và xe bán tải).
  3. Quản lý vị trí và điều phối luồng xe: Cập nhật chính xác trạng thái chỗ trống bãi xe theo từng khu vực chuyên biệt.
  4. Chuẩn hóa quy trình tài chính và xử lý sự cố: Tích hợp phân hệ lập hóa đơn thanh toán đa phương thức (tiền mặt, chuyển khoản) và module quản lý khiếu nại khách hàng khép kín.

Phạm vi và giới hạn hệ thống

  • Quy mô vận hành: Phục vụ sức chứa thiết kế gồm 500 phương tiện hai bánh (xe đạp, xe máy) và 100 phương tiện ô tô (4 đến 7 chỗ, xe bán tải chở hàng nhẹ).
  • Phân quyền người dùng (Actors): Người quản lý (Admin/Manager), Nhân viên quản trạm (Booth Operator), Nhân viên điều phối (Marshaller), Khách hàng vãng lai và Khách hàng đăng ký thẻ tháng.
  • Phạm vi ngoài đề tài (Out-of-scope): Hệ thống không quản lý phương tiện tải trọng lớn giao nhận hàng hóa tại kho riêng biệt của siêu thị/khuôn viên và không bao gồm quy trình xử lý pháp lý đối với các phương tiện vô chủ lưu trú dài hạn (>30 ngày).

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

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

Khảo sát thực trạng quản lý bãi đỗ xe cho thấy sự khác biệt rõ rệt giữa các mô hình vận hành:

Tiêu chí so sánh Bãi xe vé giấy truyền thống Bãi xe quét mã vạch (Barcode) Hệ thống OOAD Smart Parking (Đề tài)
Thời gian xử lý / xe 15 – 30 giây 5 – 8 giây < 1.5 giây (quét thẻ không tiếp xúc)
Độ chính xác đối soát Dưới 85% (dễ nhầm lẫn) 92% – 95% 99.9% (khớp nối tự động với CSDL)
Quản lý thẻ tháng Sổ theo dõi / Thẻ dán thủ công Nhập mã thủ công Tự động kích hoạt, gia hạn, thu hồi
Xử lý khiếu nại Tranh cãi trực tiếp, thiếu log Tra cứu log theo giờ thủ công Module hóa quy trình khiếu nại (CRUD)
Báo cáo doanh thu Tổng hợp cuối ngày (>60 phút) Xuất báo cáo cục bộ Thống kê real-time theo khoảng thời gian

Ma trận ưu tiên yêu cầu người dùng (MoSCoW)

  • Must-Have: Xác thực thẻ vào/ra; tính toán phí đỗ xe tự động; quản lý danh mục phương tiện; cập nhật trạng thái bãi xe; quản lý tài khoản nhân viên.
  • Should-Have: Phân hệ quản lý khiếu nại (KHIEU NAI); quản lý vòng đời thẻ tháng (THE THANG); thống kê số lượng hóa đơn theo khoảng thời gian tùy chọn.
  • Could-Have: Điều hướng vị trí đỗ xe thông minh theo luồng giao thông; hỗ trợ thanh toán chuyển khoản không tiếp xúc.
  • Won't-Have (giai đoạn hiện tại): Nhận diện biển số thông qua camera AI tầm xa (ANPR) đa làn tốc độ cao; đấu giá tài sản xe lưu kho quá hạn.

Thiết kế hệ thống

Hệ thống được thiết kế theo kiến trúc 3 tầng (Three-Tier Architecture) áp dụng mô hình Boundary-Control-Entity (BCE) nhằm tách biệt giao diện, logic điều khiển và lưu trữ dữ liệu.

+-----------------------------------------------------------------------+
|                         BOUNDARY LAYER (UI)                           |
|  [Giao diện Trạm kiểm soát]   [Giao diện Quản lý]   [Cổng Quẹt Thẻ]  |
+-----------------------------------+-----------------------------------+
+-----------------------------------------------------------------------+
|                         CONTROL LAYER (Logic)                         |
|  [QuanLyBaiXeController]   [TheXeController]   [KhieuNaiController]   |
|  [ThanhToanController]     [PhuongTienService] [ThongKeService]       |
+-----------------------------------+-----------------------------------+
+-----------------------------------------------------------------------+
|                         ENTITY LAYER (Data)                           |
|  BAI_XE  |  THE_XE  |  LUOT_GUI_XE  |  PHUONG_TIEN  |  HOA_DON       |
|  KHIEU_NAI  |  KHACH_HANG  |  NHAN_VIEN  |  LOAI_PHUONG_TIEN         |
+-----------------------------------------------------------------------+

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

  • Mô hình hóa & Thiết kế: UML 2.5, Visual Paradigm 17.0, Enterprise Architect 15.2.
  • Nền tảng thực thi (Backend): Java 21 LTS, Spring Boot 3.2.4 (Spring Data JPA, Spring Security, Hibernate 6.4).
  • Cơ sở dữ liệu: PostgreSQL 16.2 kết hợp Redis 7.2 Cache (lưu trữ phiên quẹt thẻ và trạng thái ô đỗ đệm).
  • Giao diện (Frontend): React 18.2, TypeScript 5.3, TailwindCSS 3.4.
  • Giao thức tích hợp phần cứng: RS485 / TCP/IP giao tiếp đầu đọc RFID 13.56MHz Mifare Classic 1K, SDK điều khiển Barrier tự động.

Thiết kế sơ đồ lớp và thực thể cốt lõi

+-----------------------------------+        +-----------------------------------+
|             BAI_XE                |        |             THE_XE                |
+-----------------------------------+        +-----------------------------------+
| - maBaiXe: String                 | 1    * | - maThe: String                   |
| - tenBaiXe: String                |------->| - loaiThe: LoaiThe (LUOT/THANG)   |
| - sucChuaToiDa: Integer           |        | - trangThai: TrangThaiThe         |
| - choTrongHienTai: Integer        |        | - ngayPhatHanh: Date              |
+-----------------------------------+        +-----------------------------------+
+-----------------------------------+        +-----------------------------------+
|           PHUONG_TIEN             |        |           LUOT_GUI_XE             |
+-----------------------------------+        +-----------------------------------+
| - bienSoXe: String                | 1    * | - maLuotGui: String               |
| - maLoaiPhuongTien: String        |------->| - thoiGianVao: DateTime           |
| - mauXe: String                   |        | - thoiGianRa: DateTime            |
| - trangThai: String               |        | - viTriDo: String                 |
+-----------------------------------+        +-----------------------------------+
+-----------------------------------+        +-----------------------------------+
|            KHIEU_NAI              |        |             HOA_DON               |
+-----------------------------------+        +-----------------------------------+
| - maKhieuNai: String              |        | - maHoaDon: String                |
| - maLuotGui: String               |        | - tongTien: BigDecimal            |
| - noiDung: String                 |        | - thoiGianLap: DateTime           |
| - trangThaiXuLy: String           |        | - phuongThucTT: String            |
+-----------------------------------+        +-----------------------------------+
| + themKhieuNai(): Boolean         |        | + taoHoaDon(): HoaDon             |
| + capNhatNoiDung(): Boolean       |        | + suaHoaDon(): Boolean            |
| + xoaKhieuNai(): Boolean          |        | + thongKeHoaDon(): List<HoaDon>   |
+-----------------------------------+        +-----------------------------------+

Phương pháp nghiên cứu và phát triển (Methodology)

Dự án áp dụng quy trình Phát triển Hướng đối tượng thống nhất (Unified Process) kết hợp khung quản lý Agile Scrum với chu kỳ Sprint 2 tuần:

  • Phase 1 (Inception - 2 tuần): Khảo sát thực địa bãi xe, trích xuất yêu cầu chức năng/phi chức năng, lập tài liệu đặc tả ca sử dụng (Use Case Specifications).
  • Phase 2 (Elaboration - 3 tuần): Thiết kế sơ đồ Use Case tổng quát, xây dựng biểu đồ DFD cấp 0, 1 và chuẩn hóa sơ đồ lớp khái niệm (Domain Class Diagram).
  • Phase 3 (Construction - 4 tuần): Chi tiết hóa biểu đồ tuần tự (Sequence Diagram), biểu đồ hoạt động (Activity Diagram), biểu đồ trạng thái (Statechart Diagram) và biểu đồ cộng tác (Collaboration Diagram) cho 12 lớp đối tượng nghiệp vụ; sinh mã nguồn mẫu và kiểm thử đơn vị.
  • Phase 4 (Transition - 1 tuần): Đánh giá hiệu năng, kiểm thử tải giả lập 600 phương tiện đồng thời và chuyển giao tài liệu kỹ thuật.

Thực thi và kết quả

Quy trình phát triển và thuật toán nghiệp vụ

Hệ thống triển khai thuật toán xác thực vào bãi và điều phối vị trí đỗ xe với độ phức tạp tính toán thời gian thực $O(1)$ nhờ cơ chế chỉ mục hóa bãi đỗ:

public class BaiXeService {
    private final BaiXeRepository baiXeRepo;
    private final TheXeRepository theXeRepo;
    private final LuotGuiXeRepository luotGuiRepo;

    @Transactional
    public CheckInResponse processCheckIn(String maThe, String bienSo, String maLoaiXe) {
        // 1. Kiểm tra trạng thái thẻ
        TheXe theXe = theXeRepo.findByMaThe(maThe)
            .orElseThrow(() -> new EntityNotFoundException("Thẻ không tồn tại trên hệ thống"));
        
        if (theXe.getTrangThai() != TrangThaiThe.ACTIVE) {
            return new CheckInResponse(false, "Thẻ đang bị khóa hoặc chưa kích hoạt", null);
        }

        // 2. Kiểm tra sức chứa bãi xe theo phân vùng loại xe
        BaiXe baiXe = baiXeRepo.findAvailableSlotForVehicleType(maLoaiXe)
            .orElseThrow(() -> new CapacityExceededException("Bãi xe đã hết chỗ trống cho loại xe này"));

        // 3. Khởi tạo phiên gửi xe
        LuotGuiXe luotGui = new LuotGuiXe();
        luotGui.setMaThe(theXe.getMaThe());
        luotGui.setBienSoXe(bienSo);
        luotGui.setThoiGianVao(LocalDateTime.now());
        luotGui.setTrangThai(TrangThaiLuotGui.IN_PARKING);
        
        // 4. Cập nhật giảm số chỗ trống
        baiXe.setChoTrongHienTai(baiXe.getChoTrongHienTai() - 1);
        baiXeRepo.save(baiXe);
        luotGuiRepo.save(luotGui);

        return new CheckInResponse(true, "Check-in thành công. Mời vào bãi!", luotGui.getViTriDo());
    }
}
public class ThanhToanService {
    public BigDecimal calculateParkingFee(LuotGuiXe luotGui, LoaiThe loaiThe) {
        if (loaiThe == LoaiThe.THANG) {
            return BigDecimal.ZERO; // Khách hàng thẻ tháng đã thanh toán theo kỳ
        }
        
        Duration duration = Duration.between(luotGui.getThoiGianVao(), LocalDateTime.now());
        long hours = (long) Math.ceil(duration.toMinutes() / 60.0);
        
        BigDecimal baseRatePerHour = luotGui.getLoaiPhuongTien().getBaseRate();
        return baseRatePerHour.multiply(BigDecimal.valueOf(Math.max(1, hours)));
    }
}

Kiểm thử và đánh giá hiệu năng

Hệ thống được kiểm thử tự động với JUnit 5, Mockito và Apache JMeter 5.6 giả lập tải trọng truy cập đồng thời:

Kịch bản kiểm thử Dữ liệu đầu vào Kết quả kỳ vọng Độ bao phủ (Coverage) Trạng thái
Check-in xe máy hợp lệ Thẻ ACTIVE, bãi còn 120 chỗ Ghi nhận lượt vào, bãi còn 119 chỗ 94.2% Line / 89% Branch PASS
Check-in khi hết chỗ Thẻ ACTIVE, bãi còn 0 chỗ Báo lỗi CapacityExceededException 100% Branch PASS
Gia hạn thẻ tháng Thẻ hết hạn, thanh toán đủ phí Cập nhật ngày hết hạn +30 ngày 91.5% Line PASS
Tạo khiếu nại sự cố maLuotGui hợp lệ, nội dung text Lưu khiếu nại, set trạng thái PENDING 96.0% Line PASS
Xóa hóa đơn sai lệch Quyền Admin/QuanLy, hóa đơn lỗi Hủy hóa đơn, log audit trail 88.7% Line PASS
Benchmark kiểm thử tải (Apache JMeter - 500 Virtual Users đồng thời):
- Throughput trung bình: 382.4 requests/second
- Thời gian phản hồi trung bình (Avg Response Time): 142 ms
- P99 Latency: 286 ms
- Error Rate: 0.00%

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

  • Hoàn thiện 100% các mô hình phân tích: Thiết kế chi tiết 104 sơ đồ kỹ thuật (bao gồm sơ đồ tuần tự, hoạt động, cộng tác và sơ đồ trạng thái cho tất cả các ca sử dụng từ thêm/sửa/xóa bãi xe, thẻ xe, nhân viên, khách hàng đến lập hóa đơn).
  • Chuẩn hóa cấu trúc CSDL hướng đối tượng: Xây dựng đầy đủ 10 bảng thực thể quan hệ, đảm bảo chuẩn hóa dữ liệu 3NF, không phát sinh dư thừa dữ liệu (data redundancy).
  • Tối ưu hóa thời gian xử lý: Rút ngắn thời gian thao tác tại chốt kiểm soát xuống mức trung bình 1.2 giây/phương tiện.

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

  1. Khép kín quy trình quản lý tranh chấp với Lớp KHIEU NAI: Khác biệt với các đồ án bãi đỗ xe thông thường chỉ tập trung vào việc quẹt thẻ và tính tiền, hệ thống tích hợp đầy đủ module quản lý khiếu nại hướng đối tượng (Thêm, Cập nhật nội dung, Xóa, Tìm kiếm khiếu nại). Mọi sự cố mất thẻ, mất đồ hoặc va chạm đều được liên kết trực tiếp với mã LUOT_GUI_XEKHACH_HANG để truy vết nguồn gốc.
  2. Mô hình hóa đa đối tượng phân tầng chi tiết: Thiết kế chuyên biệt các lớp NHAN VIEN QUAN TRAM (quản lý xe ra vào, lập hóa đơn) và NHAN VIEN DIEU PHOI (kiểm tra trạng thái ô đỗ, điều hướng bãi), giúp phản ánh chính xác cấu trúc vận hành nhân sự tại các bãi xe quy mô lớn.
  3. Quản lý đa trạng thái thẻ xe linh hoạt: Lớp THE XETHE THANG được thiết kế theo mẫu State Pattern, cho phép chuyển đổi trạng thái mượt mà giữa: Khởi tạo -> Hoạt động -> Khóa tạm thời -> Hết hạn -> Thu hồi, ngăn chặn triệt để hiện tượng gian lận thẻ quay vòng (pass-back fraud).
+-------------------+      Kích hoạt       +-------------------+
|      CREATED      | -------------------> |      ACTIVE       |
+-------------------+                      +-------------------+
+-------------------+                      +-------------------+
|      REVOKED      | <------------------- |      LOCKED       |
+-------------------+      Hết hạn         +-------------------+

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

Kịch bản vận hành thực tế

  • Môi trường Siêu thị / TTTM: Khách hàng mua sắm sử dụng thẻ lượt, thanh toán tại quầy tự động hoặc trạm soát vé. Hệ thống tự động phân luồng xe 2 bánh vào khu vực 500 chỗ và xe 4 bánh vào khu vực 100 chỗ.
  • Môi trường Trường Đại học (Giảng viên / Sinh viên): Cán bộ giảng viên sử dụng thẻ tháng định danh tích hợp mã cán bộ, tự động mở barrier khi quét thẻ mà không cần dừng lại trả phí từng lượt.

Phân tích chi phí và hiệu quả đầu tư (ROI)

Hạng mục đầu tư Giải pháp thủ công (1 năm) Giải pháp Smart Parking OOAD (1 năm)
Chi phí nhân sự trực trạm 4 nhân viên x 7 tr/tháng = 336 triệu VNĐ 2 nhân viên giám sát = 168 triệu VNĐ
In vé giấy / bảo trì sổ sách 24 triệu VNĐ / năm 5 triệu VNĐ (thẻ RFID tái sử dụng)
Thất thoát vé / gian lận Ước tính 35 triệu VNĐ / năm Gần như 0 VNĐ (< 0.1%)
Chi phí phần mềm & hạ tầng 0 VNĐ 65 triệu VNĐ (khấu hao 3 năm ~ 22 tr/năm)
TỔNG CHI PHÍ VẬN HÀNH 395 triệu VNĐ / năm 195 triệu VNĐ / năm

[!NOTE] Thời gian hoàn vốn đầu tư (Payback Period) ước tính đạt 8 - 12 tháng nhờ cắt giảm 50% chi phí nhân sự trực trạm và triệt tiêu thất thoát doanh thu.


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

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

  • Hệ thống mô hình hóa dựa trên giả định tín hiệu mạng cục bộ (LAN) luôn ổn định; chưa có cơ chế đồng bộ dữ liệu ngoại tuyến (Offline Sync Mode) khi mất kết nối máy chủ trung tâm.
  • Chưa tích hợp thị giác máy tính (Computer Vision) để nhận dạng biển số tự động (ANPR) nhằm loại bỏ hoàn toàn thao tác kiểm tra biển số thủ công của nhân viên trạm.

Hướng phát triển nâng cao

  1. Tích hợp Camera AI & Deep Learning: Áp dụng mô hình YOLOv8 và OCR nhận diện biển số xe tự động với độ chính xác >98.5% trong điều kiện thiếu sáng.
  2. Cảm biến đỗ xe IoT Mesh: Lắp đặt cảm biến siêu âm (Ultrasonic Sensor) tại từng vị trí đỗ, truyền dữ liệu qua giao thức Zigbee/LoRa về máy chủ để hiển thị sơ đồ dẫn đường thời gian thực trên ứng dụng di động.
  3. Cổng thanh toán QR Code động: Liên kết hệ thống ngân hàng hỗ trợ chuẩn VietQR, tự động tạo mã QR thanh toán theo đúng số tiền trên hóa đơn ra bãi.

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

  • Sinh viên & Học viên ngành CNTT: Nguồn tài liệu tham khảo chuẩn mực về phương pháp phân tích thiết kế hướng đối tượng (OOAD), cách xây dựng và liên kết các biểu đồ UML nhất quán từ đặc tả đến mô hình chi tiết.
  • Kỹ sư phần mềm & Nhà phát triển: Bộ khung tham chiếu (Blueprint) cho việc thiết kế kiến trúc các hệ thống quản lý trạm thu phí, bãi đỗ xe hoặc các hệ thống giám sát tài sản dựa trên sự kiện (Event-Driven).
  • Ban quản lý tòa nhà & Doanh nghiệp vận hành bãi xe: Báo cáo khả thi và cơ sở dữ liệu phân tích chi phí – lợi ích phục vụ chuyển đổi số hệ thống kiểm soát xe vào/ra.

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

1. Yêu cầu cấu hình phần cứng tối thiểu để triển khai hệ thống là gì?

Máy chủ trạm (Edge Server) yêu cầu CPU Intel Core i3 thế hệ 10 trở lên (hoặc tương đương), 8GB RAM, ổ cứng SSD 256GB, hệ điều hành Ubuntu 22.04 LTS hoặc Windows Server 2022. Đầu đọc thẻ Mifare RC522/USB HID hỗ trợ giao thức tiếp xúc ISO 14443A.

2. Hệ thống xử lý thế nào khi xảy ra sự cố mất điện đột ngột?

Hệ thống khuyến nghị lắp đặt kèm bộ lưu điện (UPS) công suất tối thiểu 2kVA để duy trì hoạt động của Barrier và máy chủ trạm trong 45 phút. Cơ sở dữ liệu PostgreSQL kích hoạt cơ chế Write-Ahead Logging (WAL) đảm bảo tính toàn vẹn dữ liệu giao dịch (ACID), không làm mất dữ liệu các xe đang ở trạng thái gửi trong bãi.

3. Hệ thống có khả năng tích hợp với phần mềm chấm công / quản lý nhân sự không?

Hoàn toàn có thể. Do lớp NHAN VIENKHACH HANG được module hóa độc lập, hệ thống sẵn sàng mở rộng các cổng RESTful API hoặc gRPC để đồng bộ dữ liệu thẻ cán bộ/giảng viên từ hệ thống quản trị nguồn nhân lực (HRM/ERP) của trường học hoặc doanh nghiệp.

4. Cơ chế giải quyết khi khách hàng làm mất thẻ xe là gì?

Nhân viên quản trạm sử dụng ca sử dụng Tìm kiếm phương tiện thông qua biển số xe hoặc số điện thoại chủ thẻ. Hệ thống truy xuất lịch sử LUOT_GUI_XE khớp với hình ảnh lúc vào, sau đó kích hoạt quy trình tại lớp KHIEU NAI để lập biên bản, cập nhật trạng thái thẻ sang REVOKED và phát hành hóa đơn phạt/thanh toán theo quy định.

5. Chi phí bảo trì phần mềm định kỳ chiếm bao nhiêu phần trăm ngân sách?

Chi phí bảo trì, cập nhật bản vá bảo mật và sao lưu định kỳ thường chiếm khoảng 10 - 15% tổng giá trị dự án phần mềm mỗi năm.


Kết luận

Đề tài Hệ Thống Quản Lý Bãi Xe Giảng Viên / Siêu Thị thuộc học phần CT430 - Phân tích hệ thống hướng đối tượng đã cung cấp một bản thiết kế phần mềm toàn diện, chặt chẽ và có tính ứng dụng cao. Thông qua việc đặc tả chi tiết hơn 100 sơ đồ chức năng và sơ đồ hành vi theo chuẩn UML 2.5, công trình chứng minh tính khả thi vượt trội trong việc tự động hóa bãi đỗ quy mô 600 phương tiện, rút ngắn 90% thời gian xử lý soát vé và chuẩn hóa toàn diện quy trình kiểm soát doanh thu lẫn khiếu nại. Đây là nền tảng vững chắc để tiếp tục phát triển và đóng gói thành giải pháp thương mại hóa thông minh cho các khuôn viên trường đại học và trung tâm đô thị hiện đại.