Go to file
root 2cecdba73a [PROMOTE] dev → demo:領藥單(Pharmacy Pickup / Rx)功能晉升驗收
1. 領藥單後台模組:列表/建立/作廢/列印 QR,受 menu.sales.pharmacy-pickup 權限控管。
2. 機台「領藥單」開關(僅取物單模式可啟用);B660 取貨核銷擴充多貨道出貨清單、庫存不足嚴格擋關。
3. TransactionService 領藥單獨立冪等出貨流程;recordDispense 負庫存防呆、syncSlots 空清單防全量刪除。
4. 資料庫:orders 新增領藥單欄位、pickup_codes 之 slot_no 改 nullable(2 個 migration)。
5. 新增權限 menu.sales.pharmacy-pickup;三語系(zh_TW/en/ja)對齊補譯領藥單詞彙。
2026-06-23 02:32:43 +00:00
.agents [FEAT] 機台刷卡機 (Nexsys 終端機) 健康狀態燈號與失敗日誌 2026-06-18 13:09:05 +08:00
.gitea/workflows ci: keep prod deploy from recreating containers 2026-06-05 22:09:00 +08:00
app [FEAT] 新增領藥單(Pharmacy Pickup / Rx)功能並強化出貨防呆 2026-06-23 02:19:17 +00:00
bootstrap tt 2026-01-07 13:35:05 +08:00
config [FEAT] 新增領藥單(Pharmacy Pickup / Rx)功能並強化出貨防呆 2026-06-23 02:19:17 +00:00
database [FEAT] 新增領藥單(Pharmacy Pickup / Rx)功能並強化出貨防呆 2026-06-23 02:19:17 +00:00
docker [REFACTOR] 移除 MQTT $SYS 監聽機制並優化 CI/CD 流程 2026-04-22 13:33:42 +08:00
docs [FEAT] 新增全域 workflow 指令入口 2026-05-28 16:20:27 +08:00
lang [FEAT] 新增領藥單(Pharmacy Pickup / Rx)功能並強化出貨防呆 2026-06-23 02:19:17 +00:00
mqtt-gateway [FEAT] 倉儲管理系統模組實作與全站 UI/UX 標準化優化 2026-04-23 11:51:08 +08:00
public [STYLE] 更新 Favicon 與側邊欄品牌標誌 2026-05-17 12:43:22 +08:00
resources [FEAT] 新增領藥單(Pharmacy Pickup / Rx)功能並強化出貨防呆 2026-06-23 02:19:17 +00:00
routes [FEAT] 新增領藥單(Pharmacy Pickup / Rx)功能並強化出貨防呆 2026-06-23 02:19:17 +00:00
storage tt 2026-01-07 13:35:05 +08:00
tests [FEAT] 銷售紀錄流水號顯示剝除機台序號前綴 2026-06-19 09:16:13 +08:00
.editorconfig first commit 2025-11-21 17:15:27 +08:00
.env.example [FEAT] 開啟 EMQX 8883 (MQTTS) 埠位 2026-05-15 09:26:40 +08:00
.gitattributes first commit 2025-11-21 17:15:27 +08:00
.gitignore [CHORE] 將 Claude Code 個人設定排除於版控外 2026-06-10 08:38:18 +08:00
artisan feat: 實作機台日誌核心功能與 IoT 高併發處理架構 2026-03-09 09:43:51 +08:00
CLAUDE.md [DOCS] 新增 CLAUDE.md 共用專案開發規範 2026-06-10 08:46:15 +08:00
compose.yaml [FEAT] 開啟 EMQX 8883 (MQTTS) 埠位 2026-05-15 09:26:40 +08:00
composer.json [FEAT] 實作員工識別卡 Excel 批量匯入功能與範例下載 2026-05-14 14:26:35 +08:00
composer.lock [FEAT] 實作員工識別卡 Excel 批量匯入功能與範例下載 2026-05-14 14:26:35 +08:00
package-lock.json [FEAT] 新增領藥單(Pharmacy Pickup / Rx)功能並強化出貨防呆 2026-06-23 02:19:17 +00:00
package.json [FEAT] 優化機台硬體通訊協議與管理介面互動性 2026-04-08 14:52:00 +08:00
phpunit.mysql.xml [FEAT] 交易結算冪等性強化與 flow_id 跨機台命名空間 2026-06-18 17:14:19 +08:00
phpunit.xml feat: 實作機台日誌核心功能與 IoT 高併發處理架構 2026-03-09 09:43:51 +08:00
postcss.config.js first commit 2025-11-21 17:15:27 +08:00
pptx_gen.cjs [FEAT]:新增 Demo Day PPTX 自動生成腳本與相關套件 2026-03-31 16:26:13 +08:00
README.md [REFACTOR] 廢棄 B010 HTTP API 並整合 MQTT 心跳回報流程 2026-04-21 15:48:49 +08:00
refactor_tests2.php feat: 實作機台日誌核心功能與 IoT 高併發處理架構 2026-03-09 09:43:51 +08:00
simulate-heartbeat.sh [FEAT] 整合 MQTT 資料流自動化與環境埠號修復 2026-04-17 13:22:46 +08:00
tailwind.config.js feat: Preline UI 改版與深色模式修復 2026-01-13 13:28:58 +08:00
vite.config.js [FEAT] 整合 MQTT 資料流自動化與環境埠號修復 2026-04-17 13:22:46 +08:00
workflow [FEAT] 新增全域 workflow 指令入口 2026-05-28 16:20:27 +08:00

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

快速啟動

  1. clone 專案並進入目錄
  2. cp .env.example .env
  3. ./vendor/bin/sail up -d
  4. ./vendor/bin/sail composer install
  5. ./vendor/bin/sail artisan key:generate
  6. ./vendor/bin/sail artisan migrate --seed
  7. ./vendor/bin/sail npm install
  8. ./vendor/bin/sail npm run dev
  9. ./vendor/bin/sail artisan mqtt:sync-auth (同步機台 MQTT 認證至 Redis)
  10. ./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.phpapi.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。