Skip to content

Hệ thống IoT ​

Sơ đồ tổng quan hệ thống IoT FastBee

Nền tảng IoT FastBee là một giải pháp IoT giàu chức năng, được thiết kế dành riêng cho doanh nghiệp vừa và nhỏ cùng người dùng cá nhân. Nền tảng cung cấp một loạt công cụ và chức năng dễ sử dụng, giúp người dùng quản lý và điều khiển hiệu quả nhiều loại thiết bị thông minh. Dưới đây là phần giới thiệu chi tiết về nền tảng IoT FastBee:

Tổng quan trang ​

Nội dung trangGiới thiệu tổng thể về nền tảng IoT FastBee: bối cảnh dự án, chức năng hệ thống, stack công nghệ, kịch bản ứng dụng và kiến trúc hệ thống.
Trường hợp sử dụngPhù hợp với độc giả lần đầu tìm hiểu năng lực và kiến trúc của nền tảng bản thương mại, xây dựng nhận thức tổng thể về sản phẩm.
Điều kiện tiên quyếtKhông có; sau đó có thể tiếp tục đọc các chương thiết kế kiến trúc và cài đặt triển khai theo lộ trình khuyến nghị.

So sánh phiên bản ​

FastBee cung cấp ba phiên bản: mã nguồn mở, thương mại và cluster, khác biệt cốt lõi như sau; chính sách giấy phép đầy đủ và danh sách chức năng chi tiết xem tại Giấy phép thương mại.

Khía cạnhBản mã nguồn mởBản thương mạiBản cluster
Giấy phépAGPL v3, miễn phí, giới hạn mục đích phi thương mạiGiấy phép thương mại vĩnh viễn (chứng chỉ cài đặt)Giấy phép thương mại vĩnh viễn (chứng chỉ cài đặt)
Mã nguồn & cập nhậtMã nguồn công khai, cập nhật qua Gitee/GitHubSau khi được cấp phép, cập nhật qua Git server riêng, tặng một năm cập nhật mã nguồnGiống bản thương mại
Hình thức triển khaiDocker Compose một máy triển khai một chạmTriển khai một máy (hỗ trợ cài đặt nhanh Docker Compose)Cluster dịch vụ FMQ + cluster Web, phối hợp Kafka và cân bằng tải đạt độ sẵn sàng cao
Giao thức kết nốiMQTT, GB/T 28181 (chỉ phát trực tiếp)Bổ sung các giao thức TCP, UDP, CoAP, HTTP, Modbus, JT808...Giống bản thương mại
Phạm vi chức năngCác năng lực cốt lõi: sản phẩm/thiết bị/Thing Model, Rule Script, quản lý quyền...Bổ sung màn hình lớn trực quan, trung tâm cảnh báo, đa tenant, nâng cấp firmware OTA, cầu nối dữ liệu, quản lý phiếu công việc, quản lý thẻ SIM IoT... (Web SCADA, loa thông minh là mô-đun tùy chọn)Chức năng giống bản thương mại, khác ở quy mô thiết bị hỗ trợ
Kịch bản áp dụngHọc tập cá nhân và sử dụng phi thương mạiDự án thương mại của doanh nghiệp vừa và nhỏDự án thương mại có quy mô kết nối thiết bị lớn, yêu cầu độ sẵn sàng cao

1. Giới thiệu nền tảng ​

  • Bối cảnh dự án: tên gốc là Wumei Smart (wumei-smart), sau đổi tên thành FastBee (蜂信物联). Thay đổi này không chỉ phản ánh việc cập nhật thương hiệu, mà còn đánh dấu sự phát triển trong lĩnh vực IoT và mở rộng phạm vi dịch vụ.
  • Hỗ trợ chính: backend nền tảng dùng framework Spring Boot, frontend dùng công nghệ Vue... việc lựa chọn các công nghệ này đảm bảo tính dễ dùng của nền tảng và trải nghiệm người dùng tốt.

2. Chức năng hệ thống ​

  • Quản lý sản phẩm: hỗ trợ chi tiết sản phẩm, Thing Model, phân loại và ủy quyền thiết bị..., giúp doanh nghiệp tổ chức và quản lý sản phẩm thông minh tốt hơn.
  • Quản lý thiết bị: cung cấp các chức năng quản lý như chi tiết thiết bị, phân nhóm, ghi nhật ký, giám sát trạng thái thời gian thực, đảm bảo thiết bị vận hành hiệu quả và an toàn.
  • Quản lý Thing Model: cho phép định nghĩa thuộc tính, chức năng và sự kiện của thiết bị, hiện thực tương tác hiệu quả giữa thiết bị và đám mây.
  • Rule Engine: hỗ trợ viết quy tắc dựa trên Groovy (cú pháp giống Java), giúp hệ thống tự động xử lý logic nghiệp vụ phức tạp.
  • Scene Linkage: hỗ trợ cấu hình kịch bản tự động hóa trực tiếp hoặc trực quan, hiện thực hợp tác liền mạch giữa các thiết bị thông minh.
  • Trung tâm cảnh báo: có thể tích hợp nhiều kênh liên lạc như thoại, SMS và WeChat Work, kịp thời thông báo bất thường hoặc sự cố thiết bị, đảm bảo phản ứng nhanh.
  • Hệ thống đa tenant: hỗ trợ cách ly dữ liệu và cấu hình độc lập, phù hợp môi trường đa tenant, tăng tính linh hoạt và bảo mật của hệ thống.
  • Kết nối giám sát video: hỗ trợ thiết bị giám sát giao thức GB/T28181, cung cấp phát trực tiếp, phát lại bản ghi và điều khiển PTZ, phù hợp nhu cầu giám sát an ninh.
  • Quản lý kịch bản: hỗ trợ tổng hợp hiển thị nhiều thiết bị, đồng thời có thể mở rộng biến nhập và biến tính toán, hỗ trợ tính toán dữ liệu phức tạp.
  • Cầu nối dữ liệu: đóng vai trò cầu nối với hệ thống dữ liệu bên ngoài, hỗ trợ nhập xuất dữ liệu...
  • Trung tâm dữ liệu: hỗ trợ sinh báo cáo dữ liệu, xem dữ liệu lịch sử, phân tích dữ liệu thiết bị.
  • Giao thức truyền thông: hỗ trợ phong phú các giao thức truyền thông thiết bị, bao gồm: MQTT, Modbus, TCP, GB28182, HTTP, CoAP...
  • Thẻ SIM IoT: quản lý SIM kết nối thiết bị, hỗ trợ tích hợp các nền tảng đại lý khác nhau, có thể xem trạng thái thẻ, lưu lượng, hỗ trợ cảnh báo lưu lượng.
  • Quản lý phiếu công việc: hỗ trợ quản lý tự động hóa, thông minh hóa và toàn quy trình các tác vụ bảo trì, sửa chữa, kiểm tra... đối với thiết bị hoặc tài sản.

3. Stack công nghệ ​

  • Công nghệ backend: bao gồm Spring Boot, MyBatis, Spring Security, Jwt, Redis, TDengine..., đảm bảo tính ổn định và hiệu quả của dịch vụ backend.
  • Công nghệ frontend: dùng các công nghệ frontend hiện đại như ES6, ES7, Vue, Vuex, uView, H5..., nâng cao tính tương tác và trải nghiệm thị giác của giao diện người dùng.
  • Hỗ trợ di động: hỗ trợ nhiều nền tảng di động như WeChat Mini Program, Android và iOS, hiện thực phát triển ứng dụng đa nền tảng qua UniApp, thuận tiện cho người dùng thao tác và quản lý trên các thiết bị khác nhau.

4. Kịch bản ứng dụng ​

FastBee phù hợp với nhiều kịch bản như nhà thông minh, văn phòng thông minh, cộng đồng thông minh, giám sát nông nghiệp, giám sát thủy lợi và điều khiển công nghiệp. Các kịch bản ứng dụng này bao phủ nhu cầu rộng rãi từ gia đình đến cấp độ công nghiệp, thể hiện tiềm năng ứng dụng rộng lớn của FastBee trong lĩnh vực IoT.

Sơ đồ minh họa kịch bản ứng dụng FastBee

5. Kiến trúc hệ thống ​

┌──────────────────────────────────────────────────────────────────┐
│                     Trình duyệt / Di động                        │
│         Vue2 Web(PC)    +    Vant(H5 / Mini Program)         │
└───────────────────────────────┬──────────────────────────────────┘
                                │ HTTP REST / WebSocket(MQTT)
                                ▼
┌──────────────────────────────────────────────────────────────────┐
│                       Nginx(Reverse Proxy)                      │
│           /  → tài nguyên frontend tĩnh   /prod-api/ → backend   │
└───────────────────────────────┬──────────────────────────────────┘
                                │
                                ▼
┌──────────────────────────────────────────────────────────────────┐
│                  Dịch vụ Spring Boot(8080)                      │
│  ┌────────────────────────────────────────────────────────────┐  │
│  │                fastbee-open-api(tầng Controller)          │  │
│  │  device / product / ruleEngine / media / system / ...     │  │
│  └────────────────────────┬───────────────────────────────────┘  │
│  ┌─────────────────────────▼──────────────────────────────────┐  │
│  │               fastbee-service(tầng Service)               │  │
│  │     IotService / SceneService / NotifyService / ...        │  │
│  └────────────────────────┬───────────────────────────────────┘  │
│  ┌─────────────────────────▼──────────────────────────────────┐  │
│  │                  fastbee-server(kết nối giao thức)        │  │
│  │   MQTT Broker(1883) / HTTP(8081) / CoAP(5683) / TCP(8888) │  │
│  └────────────────────────────────────────────────────────────┘  │
└───────────┬──────────────────┬────────────────────┬──────────────┘
            │                  │                    │
         MySQL              Redis              TDengine
     (metadata/cấu hình)  (cache/giá trị     (dữ liệu lịch sử
                          thời gian thực)     chuỗi thời gian)

6. Cấu trúc mã nguồn ​

fastbee/
├── vue/                        ← Dự án frontend Vue2
│   ├── src/
│   │   ├── api/                ← Hàm gọi API của từng mô-đun
│   │   ├── assets/             ← Tài nguyên tĩnh (ảnh/icon/style)
│   │   ├── components/         ← Component dùng chung toàn cục (28 cái)
│   │   ├── directive/          ← Directive tùy biến toàn cục
│   │   ├── lang/               ← Gói ngôn ngữ quốc tế hóa
│   │   ├── layout/             ← Layout khung chính
│   │   ├── plugins/            ← Đăng ký plugin Vue
│   │   ├── router/             ← Cấu hình router
│   │   ├── store/              ← Quản lý trạng thái Vuex
│   │   ├── utils/              ← Hàm tiện ích (request/mqttTool...)
│   │   └── views/              ← View trang nghiệp vụ
│   ├── package.json
│   └── vue.config.js
│
├── springboot/                 ← Dự án đa mô-đun backend Spring Boot
│   ├── fastbee-admin/          ← Controller quản trị + cấu hình
│   ├── fastbee-open-api/       ← Tầng Open API (Controller nghiệp vụ IoT)
│   ├── fastbee-service/        ← Tầng dịch vụ nghiệp vụ (iot-service / system-service)
│   ├── fastbee-server/         ← Dịch vụ kết nối giao thức
│   │   ├── iot-server-core/    ← Logic dịch vụ IoT cốt lõi
│   │   ├── mqtt-broker/        ← Netty MQTT Broker tích hợp sẵn
│   │   ├── http-server/        ← Kết nối thiết bị HTTP
│   │   ├── coap-server/        ← Kết nối thiết bị CoAP
│   │   ├── sip-server/         ← Kết nối video SIP
│   │   └── boot-strap/         ← Điểm khởi động
│   ├── fastbee-protocol/       ← Phân tích giao thức (Modbus/tùy biến)
│   ├── fastbee-mq/             ← Tích hợp message queue
│   ├── fastbee-notify/         ← Dịch vụ thông báo (SMS/email/WeChat...)
│   ├── fastbee-plugs/          ← Plugin (OSS/OAuth/Quartz/sinh mã)
│   ├── fastbee-iot-data/       ← Xử lý dữ liệu IoT
│   ├── fastbee-record/         ← Dịch vụ ghi hình
│   ├── fastbee-common-extend/  ← Mở rộng tiện ích dùng chung
│   └── sql/                    ← Script khởi tạo/nâng cấp cơ sở dữ liệu
│
├── docker/                     ← File triển khai Docker Compose
└── sdk/                        ← SDK phía thiết bị

7. Mô tả các mô-đun chức năng ​

Quản lý thiết bị ​

Chức năngMô tả
Đăng ký/import thiết bịThêm thiết bị thủ công hoặc import hàng loạt bằng Excel
Phân bổ/thu hồi thiết bịPhân bổ thiết bị theo tổ chức/người dùng, hỗ trợ thu hồi
Làm mới trạng thái thời gian thựcCập nhật trạng thái online/offline thời gian thực qua subscribe MQTT /+/{sn}/status/post
Mã QR thiết bịSinh mã QR gắn kết, hỗ trợ in
Nâng cấp firmware OTAQuản lý phiên bản + gửi tác vụ nâng cấp
Gửi lệnh xuốngGửi thuộc tính Thing Model / gọi chức năng
Chế độ shadowKhi thiết bị offline, cache giá trị mới nhất qua shadow

Route trang: /iot/device/list → views/iot/device/index.vue

Quản lý sản phẩm ​

Chức năngMô tả
Mẫu sản phẩmĐịnh nghĩa loại thiết bị và Thing Model
Thing ModelBa yếu tố: thuộc tính (Property) / chức năng (Function) / sự kiện (Event)
Cấu hình giao thứcMQTT / HTTP / CoAP / TCP / Modbus / JT808
Phát hành sản phẩmSau khi phát hành, thiết bị không thể sửa Thing Model nữa
Trình soạn thảo kéo thảCấu hình trực quan bảng trạng thái chạy của thiết bị

Rule Engine ​

Chức năngMô tả
Scene LinkageDàn xếp trực quan trigger → điều kiện → hành động (điều khiển bởi LiteFlow)
Cảnh báo thiết bịKích hoạt theo ngưỡng/khoảng/boolean, hỗ trợ thời gian im lặng
Rule ScriptScript Groovy/JavaScript xử lý dữ liệu thô
Kích hoạt một chạmKích hoạt thủ công Scene Linkage

Trung tâm dữ liệu ​

Chức năngMô tả
Dữ liệu thời gian thựcGiá trị Thing Model mới nhất thiết bị báo lên (cache Redis)
Dữ liệu lịch sửTruy vấn theo khoảng thời gian (cơ sở dữ liệu chuỗi thời gian TDengine)
Báo cáo dữ liệuSinh Excel định kỳ, hỗ trợ thông báo email
Xuất dữ liệuTải dữ liệu lịch sử

Giám sát video ​

Chức năngMô tả
Kết nối thiết bịHỗ trợ giao thức GB28181 (SIP)
Phát thời gian thựcRTMP / RTSP / FLV / HLS / WebRTC
Phát lại bản ghiTruy vấn bản ghi lịch sử theo khoảng thời gian (ZLMediaKit)
Điều khiển PTZGửi lệnh PTZ
Đàm thoại thoạiCách chủ động SIP TCP

Dịch vụ thông báo ​

Kênh hỗ trợ: SMS (Alibaba Cloud/Tencent), email, WeChat Official Account, WeChat Work, DingTalk, HTTP push, MQTT push.

Quản lý hệ thống ​

Người dùng / vai trò / tổ chức (đa tenant) / menu / từ điển / nhật ký / giám sát hệ thống / sinh mã.

8. Tài liệu API ​

Tài liệu API đầy đủ có thể truy cập qua Swagger: http://localhost:8080/swagger-ui/index.html (môi trường phát triển)

Tất cả API dùng định dạng response thống nhất:

json
{
  "code": 200,
  "msg": "Thao tác thành công",
  "data": { ... }
}

Định dạng response danh sách phân trang:

json
{
  "code": 200,
  "msg": "Thao tác thành công",
  "rows": [ ... ],
  "total": 100
}

API xác thực ​

Phương thứcĐường dẫnMô tả
POST/loginĐăng nhập tài khoản mật khẩu
POST/registerĐăng ký người dùng
POST/logoutĐăng xuất
GET/getInfoLấy thông tin người dùng hiện tại
GET/captchaImageLấy captcha hình ảnh
POST/auth/sms/loginĐăng nhập mã xác thực SMS
GET/auth/login/{loginId}Đăng nhập mạng xã hội bên thứ ba
POST/auth/ssoLoginĐăng nhập một lần SSO

Ví dụ đăng nhập:

bash
POST /login
Content-Type: application/json

{
  "username": "admin",
  "password": "admin123",
  "code": "1234",
  "uuid": "xxx-xxx-xxx",
  "sourceType": 1
}
json
{
  "code": 200,
  "msg": "Thao tác thành công",
  "data": {
    "token": "eyJhbGciOiJIUzI1NiIs..."
  }
}

Các request tiếp theo cần mang header: Authorization: Bearer {token}

API thiết bị (/iot/device) ​

Phương thứcĐường dẫnQuyềnMô tả
GET/iot/device/listiot:device:listDanh sách thiết bị phân trang
GET/iot/device/shortListiot:device:listDanh sách thiết bị rút gọn (trang chủ)
GET/iot/device/alliot:device:listDanh sách rút gọn tất cả thiết bị
GET/iot/device/{deviceId}iot:device:queryChi tiết thiết bị
GET/iot/device/getDeviceBySerialNumber/{sn}iot:device:queryTruy vấn theo serial number
POST/iot/deviceiot:device:addThêm thiết bị
PUT/iot/deviceiot:device:editSửa thiết bị
DELETE/iot/device/{deviceId}iot:device:removeXóa thiết bị
POST/iot/device/exportiot:device:exportXuất Excel
POST/iot/device/assignmentiot:device:assignmentPhân bổ thiết bị cho tổ chức
POST/iot/device/user/assignmentiot:device:assignmentPhân bổ thiết bị cho người dùng
POST/iot/device/recoveryiot:device:recoveryThu hồi thiết bị
GET/iot/device/runningStatusiot:device:queryTrạng thái chạy
GET/iot/device/thingsModelValue/{deviceId}iot:device:queryGiá trị thời gian thực Thing Model
GET/iot/device/statistic-Thống kê dữ liệu giám sát

API sản phẩm (/iot/product) ​

Phương thứcĐường dẫnMô tả
GET/iot/product/listDanh sách sản phẩm phân trang
GET/iot/product/shortListDanh sách sản phẩm rút gọn
GET/iot/product/{productId}Chi tiết sản phẩm
POST/iot/productThêm sản phẩm
PUT/iot/productSửa sản phẩm
DELETE/iot/product/{productId}Xóa sản phẩm
PUT/iot/product/statusPhát hành/ngừng phát hành sản phẩm
POST/iot/product/copy?productId=Sao chép sản phẩm

API Thing Model (/iot/thingsModel) ​

Phương thứcĐường dẫnMô tả
GET/iot/thingsModel/listDanh sách Thing Model
POST/iot/thingsModelThêm Thing Model
PUT/iot/thingsModelSửa Thing Model
DELETE/iot/thingsModel/{modelId}Xóa Thing Model
POST/iot/thingsModel/syncĐồng bộ tới thiết bị

API Rule Engine (/iot/scene) ​

Phương thứcĐường dẫnMô tả
GET/iot/scene/listDanh sách Scene Linkage
POST/iot/sceneThêm kịch bản
PUT/iot/sceneSửa kịch bản
DELETE/iot/scene/{sceneId}Xóa kịch bản
POST/iot/scene/trigger/{sceneId}Kích hoạt thủ công

API trung tâm dữ liệu (/iot/datacenter) ​

Phương thứcĐường dẫnMô tả
GET/iot/datacenter/latestDataDữ liệu mới nhất
GET/iot/datacenter/historyDataDữ liệu lịch sử

9. Quy tắc phát triển ​

Quy tắc đặt tên frontend ​

LoạiQuy tắcVí dụ
File/thư mụckebab-casedevice-edit.vue
Tên componentPascalCaseDeviceCard
Biến/phương thứccamelCasedeviceList, handleQuery()
Hằng sốUPPER_CASEMAX_PAGE_SIZE
File APIcamelCasedevice.js, product.js
Tên class CSSkebab-case.device-item

Quy tắc đặt tên backend ​

LoạiQuy tắcVí dụ
Tên packageToàn chữ thường, phân tách dấu chấmcom.fastbee.iot.service
Tên classPascalCaseDeviceServiceImpl
Tên interfaceI + PascalCaseIDeviceService
Tên phương thứccamelCaselistDeviceByGroup()
Hằng sốUPPER_SNAKEMAX_RETRY_COUNT
Bảng cơ sở dữ liệuChữ thường gạch dướiiot_device
Trường cơ sở dữ liệuChữ thường gạch dướiserial_number

Quy tắc thiết kế API ​

  • Phong cách RESTful, tên tài nguyên dùng danh từ số nhiều
  • Tiền tố route thống nhất: /iot/ (mô-đun IoT), /system/ (mô-đun hệ thống)
  • Controller kế thừa BaseController, dùng @PreAuthorize để kiểm tra quyền
  • Dùng annotation @Log để ghi nhật ký thao tác
  • Trả về thống nhất bằng AjaxResult.success() / getDataTable()
java
@PreAuthorize("@ss.hasPermi('iot:device:add')")
@Log(title = "Thiết bị", businessType = BusinessType.INSERT)
@PostMapping
@ApiOperation("Thêm thiết bị")
public AjaxResult add(@Validated @RequestBody Device device) {
    return toAjax(deviceService.insertDevice(device));
}

10. Giải đáp câu hỏi thường gặp ​

Frontend ​

Hỏi: Sau npm install, khởi động báo lỗi liên quan patch-package?

Nguyên nhân: node_modules chưa cài đầy đủ hoặc vấn đề cache.

bash
# Xóa cache và cài lại
rm -rf node_modules package-lock.json
npm cache clean --force
npm install

Hỏi: Môi trường phát triển API báo 404?

Kiểm tra VUE_APP_SERVER_API_URL trong .env.development có trỏ đúng tới backend không, và xác nhận backend đã khởi động.

Hỏi: Hộp thoại Element UI (MessageBox) không bật lên được?

Xác nhận component đã đăng ký toàn cục, dự án hoàn tất đăng ký qua Vue.use(Element) trong main.js, không cần import riêng.

Hỏi: Kết nối MQTT thất bại?

  1. Xác nhận VUE_APP_MQTT_SERVER_URL cấu hình đúng (môi trường phát triển ws://localhost:8083/mqtt)
  2. Xác nhận Broker tích hợp sẵn đã khởi động (server.broker.enabled: true + server.broker.websocket-port: 8083)
  3. Kiểm tra Token có hiệu lực không (mqttTool dùng Token làm mật khẩu MQTT)

Hỏi: vue-treeselect xung đột phiên bản?

Dự án thống nhất dùng @riophae/vue-treeselect@0.4.0, không trộn lẫn phiên bản khác.

Hỏi: Import component vue-qr báo lỗi?

javascript
// ✅ Cách đúng (default import)
import vueQr from 'vue-qr';
// ❌ Cách sai (named import sẽ thất bại)
import { VueQr } from 'vue-qr';

Backend ​

Hỏi: Khởi động báo lỗi liên quan license?

Cấu hình đúng đường dẫn chứng chỉ trong application-dev.yml:

yaml
license:
  subject: common
  licensePath: classpath:license.lic

Xin file chứng chỉ (license.lic) từ đội ngũ chính thức và đặt vào thư mục resources.

Hỏi: TDengine báo timeout kết nối?

  1. Xác nhận TDengine đã khởi động (cổng mặc định 6041)
  2. Kiểm tra cấu hình nguồn dữ liệu taos trong application-dev.yml
  3. Nếu không cần cơ sở dữ liệu chuỗi thời gian, có thể đặt taos.enabled: false để bỏ qua

Hỏi: Rule Engine không kích hoạt?

  1. Xác nhận trạng thái Scene Linkage là "Đã bật"
  2. Kiểm tra điều kiện trigger (khoảng giá trị, toán tử so sánh)
  3. Xem chuỗi thực thi LiteFlow trong log

Hỏi: Thiết bị online nhưng backend không thấy trạng thái online?

  1. Kiểm tra xác thực MQTT (cấu hình EMQX Webhook)
  2. Xác nhận serialNumber của thiết bị khớp với dữ liệu nhập trong hệ thống
  3. Xem log backend có bản ghi xử lý trạng thái thiết bị không

Hỏi: Chuyển đổi giữa EMQX và Broker tích hợp sẵn như thế nào?

yaml
# application.yml
server:
  broker:
    enabled: true   # true = Netty Broker tích hợp sẵn
                    # false = dùng EMQX bên ngoài (cần cấu hình spring.mqtt.host-url)

Hỏi: Cách ly dữ liệu đa tenant hiện thực như thế nào?

Nền tảng cách ly dữ liệu qua trường tenant_id (ID tổ chức). Tầng Controller lấy thông tin tổ chức của người dùng đăng nhập hiện tại từ SecurityUtils.getLoginUser(), tầng Service tự động lọc khi truy vấn.

Hỏi: Truy cập trang giám sát Druid như thế nào?

Trình duyệt truy cập http://localhost:8080/druid/index.html, tài khoản và mật khẩu mặc định đều là fastbee (có thể sửa trong application.yml).