夜市飲料餐車 POS

夜市飲料餐車 POS An architecture diagram generated by Archify. iPad / 手機瀏覽器 · 點餐與設定精靈網頁 · Architecture component iPad / 手機瀏覽器 點餐與設定精靈網頁 攤位 SQLite · WAL · 單寫入連線 · 樹莓派(每攤一台) 攤位 SQLite WAL · 單寫入連線 樹莓派 drink-pos · Go 單一 binary · systemd :80 · 樹莓派(每攤一台) 樹莓派 drink-pos Go 單一 binary · systemd :80 出單機 · ESC/POS · USB · 收據 · 樹莓派(每攤一台) 出單機 ESC/POS · USB · 收據 貼紙機 · TSPL · USB · 杯貼 · 樹莓派(每攤一台) 貼紙機 TSPL · USB · 杯貼 Cloudflare + nginx · pos.relexes.com · GCP VM line-bot Cloudflare + nginx pos.relexes.com 管理後台 / 報表 · 帳密 session cookie · Architecture component 管理後台 / 報表 帳密 session cookie drink-pos-cloud · 收單去重 · 選單 · OTA · GCP VM line-bot drink-pos-cloud 收單去重 · 選單 · OTA 雲端 MySQL · orders / events / stalls · GCP VM line-bot 雲端 MySQL orders / events / stalls HTTP · 樹莓派自發 AP 交易寫入後才列印 raw bytes 文字轉點陣圖 HTTPS · 每 60 秒主動同步 反向代理 INSERT IGNORE 去重 報表 / 選單維護 樹莓派(每攤一台) GCP VM line-bot Legend Frontend Backend Database Cloud Security External

離線優先

  • • 點餐 → 存 SQLite → 列印,全程不依賴外部網路
  • • 斷網時訂單在本地佇列累積不丟棄,復網後指數退避補送
  • • 樹莓派無 RTC 時鐘會倒退,單號改用接續上一筆 +1 而非數當日筆數

兩套列印協定

  • • 出單機用機器內建中文字型,貼紙機改送點陣圖,不依賴字型
  • • usblp 走 syscall 而非 os.File:netpoller 會讓 write 回報成功卻沒吐紙
  • • 在線探測只用 os.Stat 不開啟裝置,usblp 同時只允許一個開啟者

同步、去重與 OTA

  • • 單一 POST /v1/sync 同時送訂單、事件與心跳,沒新資料也照打
  • • 訂單 uuid 用 crypto/rand 128-bit,雲端靠 UNIQUE 加 INSERT IGNORE 去重
  • • OTA 驗 SHA256 後只在非營業時段換檔重啟,遠端維運走 Tailscale