1. 新增機台異常日誌手動解除功能,包含資料庫欄位更新與 UI 操作按鈕。 2. 實作機台庫存變動紀錄系統 (Machine Stock Movements),支援追蹤補貨與銷售產生的庫存異動。 3. 重構取貨碼 (Pickup Code) 與通行碼 (Pass Code) 管理介面,採用極簡奢華風 UI 並拆分 Partial Views 提升可維護性。 4. 優化取貨操作日誌,明確區分「取貨成功」與「取貨失敗」,並加入顏色標籤增強辨識度。 5. 擴充多語系支援 (繁中、英文、日文),確保所有新功能與操作狀態均有對應翻譯。 6. 更新 IoT API 規格文件與相關 Service 邏輯,加強指令確認 (ACK) 處理機制。 |
||
|---|---|---|
| .agents | ||
| .gitea/workflows | ||
| app | ||
| bootstrap | ||
| config | ||
| database | ||
| docker | ||
| docs | ||
| lang | ||
| mqtt-gateway | ||
| public | ||
| resources | ||
| routes | ||
| scratch | ||
| storage | ||
| tests | ||
| .editorconfig | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| artisan | ||
| compose.yaml | ||
| composer.json | ||
| composer.lock | ||
| package-lock.json | ||
| package.json | ||
| phpunit.xml | ||
| postcss.config.js | ||
| pptx_gen.cjs | ||
| README.md | ||
| refactor_tests2.php | ||
| simulate-heartbeat.sh | ||
| tailwind.config.js | ||
| vite.config.js | ||
Star Cloud 智能販賣機管理平台
基於 Docker 的全方位智能販賣機後台管理系統 (Cloud 平台)
Star Cloud 是一個專為智能販賣機設計的後台管理系統,負責管理機台、商品、銷售數據,並為硬體端點提供專用的 API。
🚀 技術架構
核心架構
本專案採用 Monorepo 單體式架構,以 Laravel 為核心進行伺服器端渲染 (SSR) 與 API 服務,並搭配 Go MQTT Gateway 作為高併發 IoT 通訊的前置接收層。兩者透過 Redis 進行異步橋接。
| 服務 | 容器名稱 | 技術 | 用途 | 本地 Port |
|---|---|---|---|---|
| 應用程式 | star-cloud-laravel |
Laravel 12 + PHP 8.5 | 核心業務與渲染 | 8090 |
| 背景隊列 | star-cloud-queue |
Laravel Queue Worker | 異步任務處理 | - |
| 資料庫 | star-cloud-mysql |
MySQL 8.0 | 數據持久化 | 3306 |
| 快取/隊列 | star-cloud-redis |
Redis Alpine | IoT 高併發隊列與 MQTT 橋接 | 6380 |
| MQTT Broker | star-cloud-emqx |
EMQX 5.10 | 機台長連線與訊息路由 | 1883 / 18083 |
| MQTT Gateway | star-cloud-mqtt-gateway |
Go | 訂閱 MQTT Topic、轉發至 Redis | - |
後端技術棧
- Framework: Laravel 12.x
- Language: PHP 8.5
- Redis: 用於 IoT 高併發隊列與 MQTT 橋接
- Database: MySQL 8.0
IoT 通訊層
- MQTT Broker: EMQX 5.10 (維持機台長連線與訊息路由)
- MQTT Gateway: Go (訂閱 MQTT Topic、預處理訊息、轉發至 Redis)
- 橋接機制: Redis List (
mqtt_incoming_jobs),由 Laravel 常駐指令 (mqtt:listen) 消費
前端技術棧
- View: Laravel Blade
- CSS: Tailwind CSS + Preline UI
- JS: Alpine.js (行為控制)
- Build: Vite
🛠️ 開發環境 (Laravel Sail)
本專案建議使用 Laravel Sail 進行開發,避免直接在宿主機執行指令。
前置需求
- Docker Desktop (Windows/Mac) 或 Docker Engine (Linux)
- Git
快速啟動
clone專案並進入目錄cp .env.example .env./vendor/bin/sail up -d./vendor/bin/sail composer install./vendor/bin/sail artisan key:generate./vendor/bin/sail artisan migrate --seed./vendor/bin/sail npm install./vendor/bin/sail npm run dev./vendor/bin/sail artisan mqtt:sync-auth(同步機台 MQTT 認證至 Redis)./vendor/bin/sail artisan mqtt:listen(啟動 MQTT 訊息消費者)
常用開發指令
| 功能 | 指令 |
|---|---|
| 啟動環境 | ./vendor/bin/sail up -d |
| 停止環境 | ./vendor/bin/sail down |
| Artisan 指令 | ./vendor/bin/sail artisan <cmd> |
| Composer 指令 | ./vendor/bin/sail composer <cmd> |
| NPM 指令 | ./vendor/bin/sail npm <cmd> |
| 執行測試 | ./vendor/bin/sail test |
| MQTT 認證同步 | ./vendor/bin/sail artisan mqtt:sync-auth |
| MQTT 隊列監聽 | ./vendor/bin/sail artisan mqtt:listen |
| 重建 Gateway | docker compose build mqtt-gateway && docker compose up -d mqtt-gateway |
🔐 API 規範
系統 API 分為兩大類,遵循不同的設計慣例:
1. Admin/Web API (/api/v1/...)
- 對象: 後台管理介面、APP UI。
- 認證: Laravel Sanctum (Session/Token)。
- 格式: 標準 RESTful JSON。
2. Machine IoT API (/api/app/...)
- 對象: 智能販賣機、計時器等硬體。
- 認證: Header
Authorization: Bearer <api_token>。 - 高併發處理: 核心日誌 (MQTT 心跳、B600 交易) 嚴禁直寫 DB,必須進入 Redis Queue 背景異步處理。
3. MQTT IoT 通訊
- 對象: 高頻/即時性機台通訊 (心跳、異常、交易)。
- 認證: EMQX 透過 Redis Hash 驗證 (
machine_auth:{serial_no}→password欄位)。 - 資料流向:
機台 ➜ EMQX ➜ Go Gateway ➜ Redis List ➜ Laravel mqtt:listen ➜ Job ➜ MySQL
🌐 多語系支援 (I18n)
所有 UI 顯示文字必須支援多語系,禁止 Hard-coded。
- 語系檔案:
lang/zh_TW.json,lang/en.json,lang/ja.json。 - 呼叫方式: 使用
__('Phrases in English')或@lang('...')。 - 命名規範: 優先使用「英文原始詞彙」作為 Key 名稱。
📂 目錄結構
Laravel (PHP)
app/Http/Controllers/: 控制器app/Models/{Domain}/: 分領域的模型 (如Machine,Member)app/Services/{Domain}/: 封裝商業邏輯與資料異動app/Jobs/{Domain}/: IoT 異步隊列處理任務 (重要)app/Console/Commands/: Artisan 指令 (含mqtt:listen,mqtt:sync-auth)resources/views/: Blade 模板 (按功能分資料夾)resources/views/components/: 可重用的 UI 組件routes/: 路由定義 (web.php與api.php)
MQTT Gateway (Go)
mqtt-gateway/main.go: 進入點 (MQTT 連線、Redis 初始化)mqtt-gateway/config/: 環境變數與連線設定mqtt-gateway/internal/handler/: MQTT Topic 訊息處理邏輯mqtt-gateway/internal/bridge/: Redis 橋接層 (RPush / Consumer)
🚢 CI/CD 與部署
- 自動化工具: Gitea Actions (
.gitea/workflows/)。 - Demo 環境: 推送到
demo分支會自動部署至demo-cloud.setdomains.work。 - 伺服器路徑:
/workspace/mama/star-cloud(透過ssh demo-sc-103登入)。
授權與版權
© Star Cloud. All Rights Reserved.
技術支援
如有問題或建議,請聯繫開發團隊或提交 Issue。