Smart Field CMS
多品牌機器人車隊統一管理平台 — 季享科技 NexOS Robotics
273
Git Commits
25
後端模組
47+
前端頁面
57
前端路由
7
機器人品牌
7
支援語言
27
API 模組
33
WebSocket 事件
1. 系統概覽
1.1 設計目標
- 多品牌整合:透過適配器模式支援 Pudu、Gaussian、Tesla、Unitree、Zhiyuan、Atom 及 VDA 5050 標準
- 多場域管理:多組織、多場域、多樓層資料隔離
- 即時監控:毫秒級機器人位置、狀態、電量即時更新
- 智能排程:AI 驅動的任務分配與路徑規劃
- IoT 整合:電梯、門禁等 IoT 設備聯動
- 數位孿生:2D/3D 場景即時可視化
1.2 系統架構
┌─────────────────────────────────────────────────────────────────┐
│ 前端 (Vue 3 + Vite) │
│ Dashboard │ 機器人管理 │ 任務排程 │ 場域地圖 │ 數位孿生 │ AI 助手 │
└──────────────────────────┬──────────────────────────────────────┘
│ REST API / WebSocket (Socket.IO)
┌──────────────────────────┴──────────────────────────────────────┐
│ 後端 (NestJS) │
│ Auth │ Robots │ Tasks │ Alerts │ IoT │ Analytics │ AI │ ... │
│ │
│ ┌────────────────────────────────────────────────────────┐ │
│ │ 機器人適配器層 (Adapter Pattern) │ │
│ │ Pudu │ Gaussian │ Tesla │ Unitree │ Zhiyuan │ Atom │ │
│ └────────────────────────────────────────────────────────┘ │
└──────┬──────────┬───────────┬───────────┬───────────────────────┘
│ │ │ │
┌────┴────┐ ┌──┴───┐ ┌────┴────┐ ┌───┴────┐
│PostgreSQL│ │MongoDB│ │ Redis │ │ EMQX │
│TimescaleDB│ │ │ │Pub/Sub │ │ MQTT │
└─────────┘ └──────┘ └─────────┘ └────────┘
1.3 資料流
機器人 API → 適配器 → Service → Redis Pub/Sub → WS Gateway → 前端
→ TimescaleDB (遙測持久化)
→ BullMQ (非同步任務)
2. 技術棧
2.1 前端技術
| 類別 | 技術 | 版本 | 用途 |
|---|---|---|---|
| 框架 | Vue 3 | ^3.5.0 | SPA 前端框架 |
| 建構 | Vite | ^6.0.0 | 開發/建構工具 |
| 語言 | TypeScript | ^5.6.0 | 型別安全 |
| 狀態管理 | Pinia | ^2.2.0 | 全域狀態管理 |
| UI 元件 | Naive UI | ^2.40.0 | 企業級元件庫 |
| 圖表 | ECharts | ^5.5.0 | 數據可視化 |
| 地圖 | Leaflet | ^1.9.0 | 室內地圖 |
| 3D | Three.js + TresJS | ^0.182.0 | 3D 數位孿生 |
| 即時通訊 | Socket.IO | ^4.8.0 | WebSocket |
| HTTP | Axios | ^1.7.0 | REST API |
| 國際化 | vue-i18n | ^10.0.0 | 7 語言 |
| 監控 | Sentry | ^10.39.0 | 錯誤追蹤 |
2.2 後端技術
| 類別 | 技術 | 用途 |
|---|---|---|
| 框架 | NestJS | 模組化後端框架 |
| ORM | TypeORM | PostgreSQL 操作 |
| ODM | Mongoose | MongoDB 操作 |
| 快取 | ioredis | Redis 操作 |
| 佇列 | BullMQ | 非同步任務 |
| 認證 | Passport + JWT | 身份驗證 |
| 驗證 | class-validator | DTO 驗證 |
| MQTT | EMQX | IoT 通訊 |
2.3 資料庫
| 資料庫 | 用途 | 說明 |
|---|---|---|
| PostgreSQL 16 + TimescaleDB | 關聯 + 時序 | 主要資料儲存、遙測 |
| MongoDB 7 | 文件型 | 審計日誌、AI 結果 |
| Redis 7 | 快取/佇列 | 即時狀態、BullMQ、Pub/Sub |
3. Monorepo 結構
/opt/NexOSRobotics/
├── apps/
│ ├── backend/ # NestJS 後端 (Port 4870 API, 4871 WS)
│ │ └── src/
│ │ ├── modules/ # 25 個業務模組
│ │ ├── common/ # 共用服務、攔截器、守衛
│ │ ├── config/ # DB, Redis, MQTT, i18n 配置
│ │ └── i18n/ # 後端翻譯檔 (7 語言)
│ └── frontend/ # Vue 3 + Vite (Port 3000)
│ └── src/
│ ├── api/ # API 呼叫 (27 模組)
│ ├── stores/ # Pinia Store (11 個)
│ ├── views/ # 頁面 (47+ 主頁面)
│ ├── composables/ # 可組合函式 (17 個)
│ ├── components/ # 共用元件
│ └── router/ # 路由 (57 條)
├── packages/
│ ├── shared-types/ # 共享 TypeScript 型別 (28 檔)
│ ├── shared-constants/ # 共享常量
│ └── shared-utils/ # 共享工具
├── docs/architecture/ # 架構文件 (10 篇)
└── docker-compose.yml # 基礎設施容器
4. 後端架構
4.1 模組列表 (25 個)
| 模組 | 說明 | 核心功能 |
|---|---|---|
auth | 認證授權 | JWT 登入/登出/刷新、RBAC |
users | 使用者管理 | CRUD、角色設定 |
organizations | 組織管理 | 多組織、場域、樓層 |
robots 核心 | 機器人管理 | CRUD、狀態監控、指令、適配器 |
tasks 核心 | 任務管理 | CRUD、狀態機、自動分配 |
schedules | 排程管理 | Cron 排程、AI 優化 |
alerts | 告警管理 | 規則引擎、觸發/確認/解決 |
fields | 場域控制 | 區域、路徑點、交通規則 |
iot | IoT 整合 | MQTT、電梯/門禁控制 |
emergency | 緊急控制 | 一鍵停機、緊急召回 |
analytics | 數據分析 | 利用率、報表生成 |
ai | AI 助手 | LLM 整合、MCP |
digital-twin | 數位孿生 | 場景快照、即時同步 |
notifications | 通知 | 站內、Email、Webhook |
telemetry | 遙測 | TimescaleDB 批量寫入/查詢 |
audit-log | 審計日誌 | MongoDB 自動記錄 |
settings | 系統設定 | 全域/場域設定 |
academy | 學習中心 | 培訓、下載中心 |
agents | 經銷商 | 合作夥伴管理 |
leads | 銷售線索 | CRM 功能 |
logs | 日誌中心 | 機器人日誌、消毒日誌 |
products | 產品管理 | 產品庫、配件、庫存 |
stores | 客戶門店 | 門店管理、機器人綁定 |
automation | 自動化 | 規則引擎、觸發器 |
maintenance | 設備維護 | 維護記錄、健康評分 |
4.2 架構分層
Controller (路由、DTO 驗證、回應格式)
↓
Service (業務邏輯、資料轉換)
↓
Repository (資料庫操作)
↓
Entity / Schema (資料模型)
4.3 統一回應格式
// 成功
{ "success": true, "data": { ... }, "meta": { "timestamp": "..." } }
// 分頁
{ "success": true, "data": [...], "meta": { "page": 1, "limit": 20, "total": 150 } }
// 錯誤
{ "success": false, "error": { "code": "ROBOT_NOT_FOUND", "message": "..." } }
5. 前端架構
5.1 頁面總覽 (47+ 頁面)
總覽
| 頁面 | 路由 | 說明 |
|---|---|---|
| 儀表板 | /dashboard | 機器人統計、狀態分布 |
| 數位孿生 | /digital-twin | 3D 場景可視化 |
客戶中心
| 頁面 | 路由 | 說明 |
|---|---|---|
| 門店列表 | /stores | 客戶門店管理 |
| 門店詳情 | /stores/:id | 資訊、機器人、帳號、地圖 |
| 經銷商列表 | /agents | 合作夥伴管理 |
機器人管理
| 頁面 | 路由 | 說明 |
|---|---|---|
| 機器人列表 | /robots | 列表/卡片視圖、即時狀態 |
| 新增機器人 | /robots/add | 註冊新機器人 |
| 機器人詳情 | /robots/:id | 即時監控、歷史遙測 |
任務與排程
| 頁面 | 路由 | 說明 |
|---|---|---|
| 任務列表 | /tasks | 任務管理 |
| 排程管理 | /schedules | Cron 排程 |
| 排程優化器 | /schedules/optimizer | AI 排程優化 |
資料中心
| 頁面 | 路由 | 說明 |
|---|---|---|
| 資料總覽 | /data-center/overview | 數據概覽 |
| 機器人運營 | /data-center/robot-operation | 運營分析 |
| 送餐/清潔/工業配送 | /data-center/service-* | 各類服務數據 |
| 報表管理 | /data-center/reports | CSV/PDF 報表 |
更多模組
| 模組 | 頁面數 | 主要路由 |
|---|---|---|
| 自動化 | 5 | /automation |
| 場域控制 | 3 | /fields/* |
| IoT 控制 | 2 | /iot/* |
| 緊急控制 | 1 | /emergency |
| 告警中心 | 3 | /alerts/* |
| AI 助手 | 1 | /ai/assistant |
| 醫療模組 | 3 | /medical/* |
| 設備維護 | 2 | /maintenance/* |
| 設定/管理 | 4 | /settings/* |
5.2 Pinia Store (11 個)
| Store | 用途 |
|---|---|
auth.store | 認證、登入、使用者資訊 |
robots.store | 機器人列表、即時狀態 |
tasks.store | 任務管理、狀態追蹤 |
schedules.store | 排程管理 |
alerts.store | 告警管理 |
notifications.store | 使用者通知 |
field.store | 場域配置 |
iot.store | IoT 設備 |
digital-twin.store | 3D 數位孿生 |
analytics.store | 分析報表 |
ui.store | UI 狀態 |
5.3 Composables (17 個)
| Composable | 用途 |
|---|---|
useWebSocket | WebSocket 連線管理 |
useRobotRealtime | 機器人即時狀態/位置 |
useTaskRealtime | 即時任務更新 |
useAlertRealtime | 即時告警 |
useNotificationRealtime | 即時通知 |
useEmergencyRealtime | 緊急控制 |
useTwinRealtime | 數位孿生同步 |
useIoTRealtime | IoT 設備更新 |
useMapCanvas | 地圖畫布 |
useTour | 新手引導 |
usePagination | 分頁邏輯 |
6. 資料庫設計
6.1 PostgreSQL + TimescaleDB (25+ 表格)
| 表格 | 說明 | 關鍵欄位 |
|---|---|---|
organizations | 組織 | id, name, code, plan |
sites | 場域 | id, organization_id, name, timezone |
floors | 樓層 | id, site_id, level, map_image_url |
users | 使用者 | id, username, email, password_hash |
roles | 角色 | id, name, permissions (JSONB) |
user_roles | 角色對應 | user_id, role_id, site_id |
manufacturers | 製造商 | id, code, api_protocol |
robot_models | 機器人型號 | id, model_name, category, capabilities |
robots | 機器人 | id, site_id, serial_number, status |
tasks | 任務 | id, type, priority, status, assigned_robot_id |
schedules | 排程 | id, cron_expression, task_template |
alerts | 告警 | id, severity, status, triggered_at |
alert_rules | 告警規則 | id, condition, threshold, actions |
zones | 區域 | id, floor_id, type, boundary |
waypoints | 路徑點 | id, floor_id, x, y, type |
iot_devices | IoT 設備 | id, site_id, type, mqtt_topic |
stores | 客戶門店 | id, agent_id, name, code |
agents | 經銷商 | id, parent_id, name, level |
automation_rules | 自動化規則 | id, trigger, conditions, actions |
robot_telemetry | TimescaleDB 遙測 | robot_id, position, battery, timestamp |
6.2 MongoDB Collections
| Collection | 說明 |
|---|---|
audit_logs | 操作審計日誌 |
ai_results | AI 分析結果 |
anomaly_events | 異常事件記錄 |
6.3 Redis 用途
| 用途 | Key Pattern | TTL |
|---|---|---|
| 機器人即時狀態 | robot:{id}:status | 5 分鐘 |
| 場域機器人集合 | site:{id}:robots | — |
| JWT Token 黑名單 | token:blacklist:{token} | 15 分鐘 |
| 即時事件發布 | Redis Pub/Sub | — |
| 任務佇列 | BullMQ Queue | — |
7. API 設計
Base URL: https://nex-api.jini.tw/api/v1
認證: Authorization: Bearer {accessToken}
分頁: ?page=1&limit=20&sort=createdAt&order=desc
7.1 API 端點總覽
Auth (認證)
POST /auth/login 登入
POST /auth/refresh 刷新 Token
POST /auth/logout 登出
GET /auth/me 目前使用者
PUT /auth/me/password 變更密碼
PUT /auth/me/profile 更新個人資料
Robots (機器人) — 核心
GET /robots 機器人列表
POST /robots 註冊機器人
GET /robots/:id 詳情 (含即時狀態)
PUT /robots/:id 更新
DELETE /robots/:id 移除
GET /robots/:id/status 即時狀態 (Redis)
GET /robots/:id/telemetry 歷史遙測 (TimescaleDB)
POST /robots/:id/commands 發送控制指令
GET /robots/stats 統計
Tasks (任務)
GET /tasks 任務列表
POST /tasks 建立任務
GET /tasks/:id 任務詳情
POST /tasks/:id/cancel 取消任務
POST /tasks/:id/assign 手動分配
其他核心端點
GET/POST /schedules 排程 CRUD
GET/POST /alerts 告警 CRUD
GET/POST /alert-rules 告警規則 CRUD
GET/POST /fields/:siteId/zones 區域 CRUD
GET/POST /iot/devices IoT 設備 CRUD
POST /emergency/activate 緊急啟動
GET /analytics/overview 數據分析
POST /ai/chat AI 對話
GET /stores 門店列表
GET /agents 經銷商列表
GET /health 健康檢查
8. WebSocket 即時通訊
協議: Socket.IO (自動重連、降級支援)
認證: JWT Token 於 handshake 階段驗證
8.1 Namespace & Room
| Namespace | Room 格式 | 用途 |
|---|---|---|
/robots | site:{siteId} | 場域所有機器人 |
/robots | robot:{robotId} | 單一機器人高頻 |
/tasks | task:{taskId} | 任務詳情 |
/alerts | site:{siteId} | 場域告警 |
/digital-twin | site:{siteId} | 場景同步 |
8.2 Server → Client 事件 (27 個)
| 分類 | 事件 | 頻率 |
|---|---|---|
| 機器人 | robot:status, robot:position, robot:position:batch, robot:connected, robot:disconnected, robot:battery, robot:error | 500ms ~ 事件觸發 |
| 任務 | task:created, task:assigned, task:started, task:progress, task:completed, task:failed, task:cancelled | 事件觸發 |
| 告警 | alert:triggered, alert:acknowledged, alert:resolved, alert:escalated | 事件觸發 |
| IoT | iot:device:status, iot:elevator:update | 事件觸發 |
| 孿生 | twin:snapshot, twin:robot:sync | 事件觸發 |
| 緊急 | emergency:activated, emergency:deactivated | 事件觸發 |
| 其他 | automation:executed, notification, system:announcement | 事件觸發 |
8.3 Client → Server 事件 (6 個)
| 事件 | 說明 |
|---|---|
join / leave | Room 管理 |
robot:subscribe / robot:unsubscribe | 高頻訂閱 |
robot:command | 即時指令 |
auth:refresh | Token 刷新 |
9. 共享套件
9.1 shared-types (28 檔)
| 檔案 | 主要型別 |
|---|---|
enums.ts | RobotBrand, RobotStatus, TaskStatus, AlertSeverity... |
robot.ts | Robot, RobotPosition, RobotModel, RobotCommand |
task.ts | Task, CreateTaskRequest, TaskStats |
alert.ts | Alert, AlertRule, AlertStats |
field.ts | Zone, Waypoint, Path, TrafficRule |
user.ts | User, UserProfile, CreateUserRequest |
auth.ts | LoginRequest, AuthResponse, TokenPayload |
api.ts | ApiResponse, PaginatedResponse |
vda5050.ts | VDA5050Order, VDA5050State, AGVNode |
... | + 19 個更多型別檔案 |
9.2 shared-constants
| 常量 | 說明 |
|---|---|
WS_EVENTS | 27 個 Server → Client 事件名 |
WS_CLIENT_EVENTS | 6 個 Client → Server 事件名 |
ERROR_CODES | 30+ 錯誤碼 (按模組分類) |
INTERVALS | 時間間隔 (位置 500ms, 心跳 30s, 電量 60s, 遙測 5s) |
REDIS_KEYS / CHANNELS / ROOMS | Redis Key、Channel、Room 模板 |
QUEUES | BullMQ 佇列名 |
VDA5050_TOPICS | VDA 5050 MQTT Topic |
10. 機器人適配器模式
10.1 IRobotAdapter 介面
interface IRobotAdapter {
connect(config): Promise<void>
disconnect(): Promise<void>
getStatus(): Promise<RobotRealtimeStatus>
sendCommand(cmd): Promise<RobotCommandResult>
getPosition(): Promise<RobotPosition>
navigate(target): Promise<void>
stop(): Promise<void>
returnToCharge(): Promise<void>
}
10.2 已實作適配器
| 適配器 | 品牌 | 協議 | 機器人類型 |
|---|---|---|---|
PuduAdapter | 普渡 Pudu | REST | 配送機器人 |
GaussianAdapter | 高仙 Gaussian | REST | 清潔機器人 |
TeslaAdapter | Tesla | REST | 人形機器人 |
UnitreeAdapter | 宇樹 Unitree | WebSocket | 四足機器人 |
ZhiyuanAdapter | 智元 Zhiyuan | REST | 人形機器人 |
AtomAdapter | Atom | REST | 多功能機器人 |
VDA5050Adapter | VDA 5050 | MQTT | VDA 5050 相容設備 |
11. RBAC 權限模型
| 角色 | 代碼 | 權限範圍 |
|---|---|---|
| 超級管理員 | super_admin | 所有權限、跨組織 |
| 組織管理員 | org_admin | 組織內所有場域 |
| 場域經理 | site_manager | 單一場域管理 |
| 操作員 | operator | 操作機器人、建立任務 |
| 唯讀 | viewer | 只能查看 |
權限粒度:{module}:{action},例如 robot:read、task:create、alert:acknowledge
12. 多國語系 (i18n)
| 代碼 | 語言 | 區域 |
|---|---|---|
en | English | 預設 (Fallback) |
zh-TW | 繁體中文 | 台灣、香港 |
zh-CN | 簡體中文 | 中國大陸 |
ja | 日本語 | 日本 |
ko | 한국어 | 韓國 |
th | ภาษาไทย | 泰國 |
ms | Bahasa Melayu | 馬來西亞 |
前端: vue-i18n — apps/frontend/src/i18n/locales/{lang}.json
後端: nestjs-i18n — apps/backend/src/i18n/{lang}/common.json
偵測順序: Query param → Header → Accept-Language → Fallback (en)
13. 開發階段與進度
里程碑
| 里程碑 | 交付物 | 狀態 |
|---|---|---|
| M0: Dev Ready | 開發環境、空殼 App | Done |
| M1: MVP | 普渡機器人完整管理 | Done |
| M2: Multi-Brand | 多品牌 + 場域地圖 + 排程 | Done |
| M3: Smart | IoT + 智能告警 + 分析報表 | Done |
| M4: Full Platform | 6 品牌 + 數位孿生 + AI | Done |
| M5: Vertical | 醫療、工業行業方案 | In Progress |
14. 部署架構
| 服務 | 部署方式 | 位址 |
|---|---|---|
| 前端 | Cloudflare Pages | https://nex.jini.tw |
| 後端 API | PM2 | https://nex-api.jini.tw (Port 4870) |
| WebSocket | PM2 | wss://nex-api.jini.tw (Port 4871) |
| PostgreSQL | Docker | localhost:5432 |
| MongoDB | Docker | localhost:27017 |
| Redis | Docker | localhost:6379 |
| EMQX | Docker | localhost:1883 |
PM2 服務
| 名稱 | 說明 | Port |
|---|---|---|
smartfield-api | NestJS 後端 | 4870 |
nexos-line-bot | LINE Bot | 3400 |
nexos-discord-bot | Discord Bot | 3401 |
nexos-health-checker | 健康監控 | — |
15. 專案統計
273
Git Commits
25
後端模組
47+
前端頁面
57
前端路由
27
API 模組
11
Pinia Store
17
Composables
28
共享型別檔
27
WS 事件 (S→C)
6
WS 事件 (C→S)
30+
錯誤碼
7
機器人品牌
7
支援語言
5
RBAC 角色
25+
資料庫表格
3
資料庫類型
Smart Field CMS — 季享科技 NexOS Robotics
文件版本 v1.0 | 最後更新 2026-03-12