v1.0

Smart Field CMS

多品牌機器人車隊統一管理平台 — 季享科技 NexOS Robotics

273
Git Commits
25
後端模組
47+
前端頁面
57
前端路由
7
機器人品牌
7
支援語言
27
API 模組
33
WebSocket 事件

1. 系統概覽

1.1 設計目標

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.0SPA 前端框架
建構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室內地圖
3DThree.js + TresJS^0.182.03D 數位孿生
即時通訊Socket.IO^4.8.0WebSocket
HTTPAxios^1.7.0REST API
國際化vue-i18n^10.0.07 語言
監控Sentry^10.39.0錯誤追蹤

2.2 後端技術

類別技術用途
框架NestJS模組化後端框架
ORMTypeORMPostgreSQL 操作
ODMMongooseMongoDB 操作
快取ioredisRedis 操作
佇列BullMQ非同步任務
認證Passport + JWT身份驗證
驗證class-validatorDTO 驗證
MQTTEMQXIoT 通訊

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場域控制區域、路徑點、交通規則
iotIoT 整合MQTT、電梯/門禁控制
emergency緊急控制一鍵停機、緊急召回
analytics數據分析利用率、報表生成
aiAI 助手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-twin3D 場景可視化

客戶中心

頁面路由說明
門店列表/stores客戶門店管理
門店詳情/stores/:id資訊、機器人、帳號、地圖
經銷商列表/agents合作夥伴管理

機器人管理

頁面路由說明
機器人列表/robots列表/卡片視圖、即時狀態
新增機器人/robots/add註冊新機器人
機器人詳情/robots/:id即時監控、歷史遙測

任務與排程

頁面路由說明
任務列表/tasks任務管理
排程管理/schedulesCron 排程
排程優化器/schedules/optimizerAI 排程優化

資料中心

頁面路由說明
資料總覽/data-center/overview數據概覽
機器人運營/data-center/robot-operation運營分析
送餐/清潔/工業配送/data-center/service-*各類服務數據
報表管理/data-center/reportsCSV/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.storeIoT 設備
digital-twin.store3D 數位孿生
analytics.store分析報表
ui.storeUI 狀態

5.3 Composables (17 個)

Composable用途
useWebSocketWebSocket 連線管理
useRobotRealtime機器人即時狀態/位置
useTaskRealtime即時任務更新
useAlertRealtime即時告警
useNotificationRealtime即時通知
useEmergencyRealtime緊急控制
useTwinRealtime數位孿生同步
useIoTRealtimeIoT 設備更新
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_devicesIoT 設備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_telemetryTimescaleDB 遙測robot_id, position, battery, timestamp

6.2 MongoDB Collections

Collection說明
audit_logs操作審計日誌
ai_resultsAI 分析結果
anomaly_events異常事件記錄

6.3 Redis 用途

用途Key PatternTTL
機器人即時狀態robot:{id}:status5 分鐘
場域機器人集合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

NamespaceRoom 格式用途
/robotssite:{siteId}場域所有機器人
/robotsrobot:{robotId}單一機器人高頻
/taskstask:{taskId}任務詳情
/alertssite:{siteId}場域告警
/digital-twinsite:{siteId}場景同步

8.2 Server → Client 事件 (27 個)

分類事件頻率
機器人robot:status, robot:position, robot:position:batch, robot:connected, robot:disconnected, robot:battery, robot:error500ms ~ 事件觸發
任務task:created, task:assigned, task:started, task:progress, task:completed, task:failed, task:cancelled事件觸發
告警alert:triggered, alert:acknowledged, alert:resolved, alert:escalated事件觸發
IoTiot: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 / leaveRoom 管理
robot:subscribe / robot:unsubscribe高頻訂閱
robot:command即時指令
auth:refreshToken 刷新

9. 共享套件

9.1 shared-types (28 檔)

檔案主要型別
enums.tsRobotBrand, RobotStatus, TaskStatus, AlertSeverity...
robot.tsRobot, RobotPosition, RobotModel, RobotCommand
task.tsTask, CreateTaskRequest, TaskStats
alert.tsAlert, AlertRule, AlertStats
field.tsZone, Waypoint, Path, TrafficRule
user.tsUser, UserProfile, CreateUserRequest
auth.tsLoginRequest, AuthResponse, TokenPayload
api.tsApiResponse, PaginatedResponse
vda5050.tsVDA5050Order, VDA5050State, AGVNode
...+ 19 個更多型別檔案

9.2 shared-constants

常量說明
WS_EVENTS27 個 Server → Client 事件名
WS_CLIENT_EVENTS6 個 Client → Server 事件名
ERROR_CODES30+ 錯誤碼 (按模組分類)
INTERVALS時間間隔 (位置 500ms, 心跳 30s, 電量 60s, 遙測 5s)
REDIS_KEYS / CHANNELS / ROOMSRedis Key、Channel、Room 模板
QUEUESBullMQ 佇列名
VDA5050_TOPICSVDA 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普渡 PuduREST配送機器人
GaussianAdapter高仙 GaussianREST清潔機器人
TeslaAdapterTeslaREST人形機器人
UnitreeAdapter宇樹 UnitreeWebSocket四足機器人
ZhiyuanAdapter智元 ZhiyuanREST人形機器人
AtomAdapterAtomREST多功能機器人
VDA5050AdapterVDA 5050MQTTVDA 5050 相容設備

11. RBAC 權限模型

角色代碼權限範圍
超級管理員super_admin所有權限、跨組織
組織管理員org_admin組織內所有場域
場域經理site_manager單一場域管理
操作員operator操作機器人、建立任務
唯讀viewer只能查看

權限粒度:{module}:{action},例如 robot:readtask:createalert:acknowledge

12. 多國語系 (i18n)

代碼語言區域
enEnglish預設 (Fallback)
zh-TW繁體中文台灣、香港
zh-CN簡體中文中國大陸
ja日本語日本
ko한국어韓國
thภาษาไทย泰國
msBahasa 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. 開發階段與進度

Phase 0 基礎建設
100%
Phase 1 MVP 核心
100%
Phase 2 多品牌+場域
100%
Phase 3 智能化+IoT
100%
Phase 4 進階功能
100%
Phase 5 行業垂直
60%

里程碑

里程碑交付物狀態
M0: Dev Ready開發環境、空殼 AppDone
M1: MVP普渡機器人完整管理Done
M2: Multi-Brand多品牌 + 場域地圖 + 排程Done
M3: SmartIoT + 智能告警 + 分析報表Done
M4: Full Platform6 品牌 + 數位孿生 + AIDone
M5: Vertical醫療、工業行業方案In Progress

14. 部署架構

服務部署方式位址
前端Cloudflare Pageshttps://nex.jini.tw
後端 APIPM2https://nex-api.jini.tw (Port 4870)
WebSocketPM2wss://nex-api.jini.tw (Port 4871)
PostgreSQLDockerlocalhost:5432
MongoDBDockerlocalhost:27017
RedisDockerlocalhost:6379
EMQXDockerlocalhost:1883

PM2 服務

名稱說明Port
smartfield-apiNestJS 後端4870
nexos-line-botLINE Bot3400
nexos-discord-botDiscord Bot3401
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