氧氣送貨
與 AI Agent 一起建立
氧氣罐配送後端

氧氣罐配送應用程式後端模板
罐分配與調度協調

一個在 Back4app 上的生產就緒 氧氣罐配送後端,具有用戶訪問、PatientSite 配送、TankAssignment PSI 跟蹤、補充日誌歷史、緊急聯絡人查詢和 DispatchEvent 跟蹤。包括 ER 圖、數據字典、JSON 架構、API 操作平台以及一個快速引導的 AI 代理 提示。

關鍵要點

此模板為您提供了一個氧氣配送後端,具有用戶角色、患者網站配送時間窗口、罐分配PSI跟踪、補給日誌歷史和緊急聯絡人查詢,協調人員可以更輕鬆地管理配送,減少來回聯絡。

  1. 罐PSI可見性跟踪TankAssignment.psiLevel、狀態和lastCheckedAt,以便派送團隊知道哪些氧氣罐需要注意。
  2. 您可以查詢的補給歷史記錄每個補給日誌條目,包括tankAssignment、refillTime、psiBefore、psiAfter、refillReason和refilledBy。
  3. 緊急聯絡人路由將緊急聯絡人記錄鏈接到患者網站,以便在deliveryWindowStart、deliveryWindowEnd或訪問備忘錄重要的時候,工作人員可以迅速採取行動。
  4. 調度和駕駛員協調使用 TankAssignment.assignedSite、assignedDriver 和 DispatchEvent.eventType 來保持路線和交接的清晰。

理解氫氣罐配送應用後端

一個順暢的氧氣配送結帳隱藏了數十項檢查:合格性、衝突、押金以及交接到履行的過程。在 Back4app 上建模核心實體,為氧氣配送團隊提供一個可以從單一場地擴展到多地點操作的後端。該模式涵蓋用戶、病人場地、罐子分配、補給日誌、緊急聯絡人和調度事件,並內建身份驗證和交付工作流程控制。連接您喜好的前端,並加快發貨速度。

最佳用途:

氧氣罐配送應用醫療設備物流調度協調工具補貨追踪平台緊急聯絡工作流程團隊選擇 BaaS 進行氧氣配送產品

氧氣配送:後端快照

移動隊伍和後勤人員在氧氣配送上看到不同的現實片段;產品的工作是將這些片段無責任地拼接在一起。

利益相關者可以在這裡檢查派遣和護理團隊的用戶角色,患者位置配送管理,對每個罐子分配覆蓋的 psi 跟蹤:姓名、關係以及他們所啟用的工作流程。

交付模組功能

此中心中的每個技術卡都使用相同的氧氣供應後端架構,包括User、PatientSite、TankAssignment、RefillLog、EmergencyContact和DispatchEvent。

調度和護理團隊的用戶角色

用戶存儲用戶名、電子郵件、角色、電話號碼和活躍狀態。

病人網站交付位置管理

病人網站包含站點名稱、地址行1、城市、區域、郵政編碼和交付時間窗口的開始/結束。

每個罐分配的PSI跟蹤

罐分配包含罐序列號、psi水平、狀態、分配站點和分配司機。

在RefillLog中的加油歷史

RefillLog追蹤tankAssignment、refillTime、psiBefore、psiAfter、refillReason和refilledBy。

路由交接的調度事件

DispatchEvent存儲tankAssignment、eventType、eventTime、recordedBy和locationNote。

為何使用 Back4app 建立您的氧氣罐配送後端?

Back4app 為您提供用戶、患者站點、罐子分配、補貨記錄、緊急聯絡和派遣事件原始功能,以便您的團隊專注於安全的派遣和清晰的記錄,而不是基礎設施工作。

  • 油箱和補充追蹤: TankAssignment.psiLevel、狀態和 RefillLog.psiBefore/psiAfter 將送貨和補充工作繫結到相同的真實來源。
  • 交付地點協調: PatientSite.deliveryWindowStart、deliveryWindowEnd 和備註支持路線規劃和交接更新。
  • 緊急聯絡人整合: EmergencyContact 連結到 PatientSite,以便派遣可以在 psiLevel 低於閾值時聯繫正確的人。

快速構建和調整氧氣配送工作流程,通過所有平台的一個後端合約。

核心配送優勢

一個能幫助您更快移動的配送後端,讓您不會忽視PSI、補充或聯繫處理。

更快的路線和站點設置

從PatientSite和TankAssignment類別開始,而不是自行創建物流表。

更安全的PSI檢查

使用TankAssignment.psiLevel、status和nextServiceDueAt在發貨前顯示低氣瓶。

清晰的補充責任

當司機或技術人員完成氣瓶補充時,重新檢查每個RefillLog.psiBefore和psiAfter的值。

可靠的緊急升級

將EmergencyContact連接到配送流程中,以便協調員知道在PatientSite延遲時該聯繫誰。

派發事件痕跡

使用 DispatchEvent.eventType、eventTime 和 recordedBy 來顯示每次交接期間發生的事情。

AI 引導工作流程

透過一個結構化的提示快速生成後端骨架和集成指南。

準備好啟動您的氧氣配送應用程式了嗎?

讓 Back4app AI 代理搭建您的氧氣配送後端,並從一個提示中生成 TankAssignment PSI 追蹤、RefillLog 歷史和 EmergencyContact 查找。

免費開始 — 每月 50 個 AI 代理提示,無需信用卡

配送技術架構

這個氧氣配送後端模板包含所有內容。

前端
13+ 技術
後端
Back4app
資料庫
MongoDB
身份驗證
內建身份驗證 + 會話
API
REST 和 GraphQL
實時
Live Queries

關係圖

氧氣傳遞後端架構的實體關係模型。

查看圖表來源
Mermaid
erDiagram
    User ||--o{ PatientSite : "primaryContact"
    User ||--o{ TankAssignment : "assignedDriver"
    User ||--o{ RefillLog : "refilledBy"
    User ||--o{ DispatchEvent : "recordedBy"
    PatientSite ||--o{ TankAssignment : "assignedSite"
    PatientSite ||--o{ EmergencyContact : "site"
    TankAssignment ||--o{ RefillLog : "tankAssignment"
    TankAssignment ||--o{ DispatchEvent : "tankAssignment"

    User {
        String objectId PK
        String username
        String email
        String password
        String role
        String phoneNumber
        Boolean active
        Date createdAt
        Date updatedAt
    }

    PatientSite {
        String objectId PK
        String siteName
        String addressLine1
        String city
        String region
        String postalCode
        Date deliveryWindowStart
        Date deliveryWindowEnd
        String primaryContactId FK
        String notes
        Date createdAt
        Date updatedAt
    }

    TankAssignment {
        String objectId PK
        String tankSerialNumber
        Number psiLevel
        String status
        String assignedSiteId FK
        String assignedDriverId FK
        Date lastCheckedAt
        Date nextServiceDueAt
        Date createdAt
        Date updatedAt
    }

    RefillLog {
        String objectId PK
        String tankAssignmentId FK
        Date refillTime
        Number psiBefore
        Number psiAfter
        String refilledById FK
        String refillReason
        String remarks
        Date createdAt
        Date updatedAt
    }

    EmergencyContact {
        String objectId PK
        String siteId FK
        String contactName
        String relationship
        String phoneNumber
        String preferredLanguage
        Boolean isPrimary
        Date createdAt
        Date updatedAt
    }

    DispatchEvent {
        String objectId PK
        String tankAssignmentId FK
        String eventType
        Date eventTime
        String recordedById FK
        String locationNote
        Date createdAt
        Date updatedAt
    }

派遣整合流程

身份驗證、油罐分配 PSI 審查、補充日誌創建、派遣事件更新和緊急聯絡人查找的典型運行時流程。

查看圖表來源
Mermaid
sequenceDiagram
  participant User
  participant App as Oxygen Tank Delivery App
  participant Back4app as Back4app Cloud

  User->>App: Login with dispatcher or driver account
  App->>Back4app: POST /login
  Back4app-->>App: Session token

  User->>App: Load tank assignments and PSI levels
  App->>Back4app: GET /classes/TankAssignment?include=assignedSite,assignedDriver
  Back4app-->>App: TankAssignment list

  User->>App: Open a site and check refill history
  App->>Back4app: GET /classes/RefillLog?where={"tankAssignment":...}
  Back4app-->>App: RefillLog entries

  User->>App: Save a new refill log or dispatch event
  App->>Back4app: POST /classes/RefillLog
  App->>Back4app: POST /classes/DispatchEvent
  Back4app-->>App: Saved objectIds

  App->>Back4app: Live query updates for PSI changes and emergency contact changes
  Back4app-->>App: Updated TankAssignment and EmergencyContact records

野外指南

氧氣交付架構中每個類的完整字段級參考。

欄位類型描述必需
objectIdStringAuto-generated unique identifier自動
usernameStringUser login name
emailStringUser email address
passwordStringHashed password (write-only)
roleStringRole in the app (e.g. dispatcher, driver, careTeam, patient)
phoneNumberStringPrimary contact phone number
activeBooleanWhether the account can access the app
createdAtDateAuto-generated creation timestamp自動
updatedAtDateAuto-generated last-update timestamp自動

9 欄位在 User

存取與權限

ACL 和 CLP 策略如何保護使用者、網站、坦克、補充日誌和緊急聯絡人。

病人網站邊界

只有授權的工作人員可以創建或更新病人網站詳細資訊,包括 deliveryWindowStart、deliveryWindowEnd 和備註。

坦克和補充完整性

限制坦克分配更新和補充日誌的創建僅限於具有驗證訪問權限的調度協調員或司機。

範圍調度可見性

將調度事件和緊急聯繫人的讀取限制在負責該路線的指定護理團隊、調度員或司機。

JSON Schema

原始 JSON 架構定義準備好複製到 Back4app 或用作實現參考。

JSON
{
  "classes": [
    {
      "className": "User",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "username": {
          "type": "String",
          "required": true
        },
        "email": {
          "type": "String",
          "required": true
        },
        "password": {
          "type": "String",
          "required": true
        },
        "role": {
          "type": "String",
          "required": true
        },
        "phoneNumber": {
          "type": "String",
          "required": false
        },
        "active": {
          "type": "Boolean",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "PatientSite",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "siteName": {
          "type": "String",
          "required": true
        },
        "addressLine1": {
          "type": "String",
          "required": true
        },
        "city": {
          "type": "String",
          "required": true
        },
        "region": {
          "type": "String",
          "required": true
        },
        "postalCode": {
          "type": "String",
          "required": true
        },
        "deliveryWindowStart": {
          "type": "Date",
          "required": false
        },
        "deliveryWindowEnd": {
          "type": "Date",
          "required": false
        },
        "primaryContact": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "notes": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "TankAssignment",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "tankSerialNumber": {
          "type": "String",
          "required": true
        },
        "psiLevel": {
          "type": "Number",
          "required": true
        },
        "status": {
          "type": "String",
          "required": true
        },
        "assignedSite": {
          "type": "Pointer",
          "required": true,
          "targetClass": "PatientSite"
        },
        "assignedDriver": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "lastCheckedAt": {
          "type": "Date",
          "required": false
        },
        "nextServiceDueAt": {
          "type": "Date",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "RefillLog",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "tankAssignment": {
          "type": "Pointer",
          "required": true,
          "targetClass": "TankAssignment"
        },
        "refillTime": {
          "type": "Date",
          "required": true
        },
        "psiBefore": {
          "type": "Number",
          "required": true
        },
        "psiAfter": {
          "type": "Number",
          "required": true
        },
        "refilledBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "refillReason": {
          "type": "String",
          "required": true
        },
        "remarks": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "EmergencyContact",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "site": {
          "type": "Pointer",
          "required": true,
          "targetClass": "PatientSite"
        },
        "contactName": {
          "type": "String",
          "required": true
        },
        "relationship": {
          "type": "String",
          "required": true
        },
        "phoneNumber": {
          "type": "String",
          "required": true
        },
        "preferredLanguage": {
          "type": "String",
          "required": false
        },
        "isPrimary": {
          "type": "Boolean",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "DispatchEvent",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "tankAssignment": {
          "type": "Pointer",
          "required": true,
          "targetClass": "TankAssignment"
        },
        "eventType": {
          "type": "String",
          "required": true
        },
        "eventTime": {
          "type": "Date",
          "required": true
        },
        "recordedBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "locationNote": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    }
  ]
}

使用 AI 代理構建

使用 Back4app AI 代理從此模板生成真正的氧氣罐送貨應用,包括前端、後端、身份驗證、以及罐、補充和緊急聯繫流。

Back4app AI 代理
準備好建設
在 Back4app 上根據這個確切的架構和行為創建氧氣罐交付應用程序後端。

架構:
1. 使用者 (使用 Back4app 內置):用戶名、電子郵件、密碼、角色、電話號碼、有效;objectId,createdAt,updatedAt(系統)。
2. 患者站點:站點名稱、地址行1、城市、地區、郵政編碼、交付窗口開始、交付窗口結束、主要聯繫人(指向用戶的指針,必需)、備註;objectId,createdAt,updatedAt。
3. 龍頭分配:罐子序列號、psi水平、狀態、分配站點(指向患者站點的指針,必需)、分配司機(指向用戶的指針,必需)、最後檢查時間、下一次服務到期時間;objectId,createdAt,updatedAt。
4. 補充日誌:罐子分配(指向龍頭分配的指針,必需)、補充時間、補充前psi、補充後psi、補充者(指向用戶的指針,必需)、補充原因、備註;objectId,createdAt,updatedAt。
5. 緊急聯繫人:站點(指向患者站點的指針,必需)、聯繫人姓名、關係、電話號碼、首選語言、是否主要;objectId,createdAt,updatedAt。
6. 發送事件:罐子分配(指向龍頭分配的指針,必需)、事件類型、事件時間、記錄者(指向用戶的指針,必需)、位置備註;objectId,createdAt,updatedAt。

安全:
- 調度員可以創建和更新龍頭分配、補充日誌、發送事件和患者站點記錄。
- 司機可以更新分配的龍頭分配PSI檢查、創建補充日誌條目,並為他們處理的路線添加發送事件更新。
- 護理團隊用戶可以查看他們的患者站點記錄和緊急聯繫人條目,但無法編輯PSI歷史。
- 緊急聯繫人數據應僅對參與站點或調度操作的身份驗證用戶可見。

授權:
- 註冊、登錄、登出。

行為:
- 追踪PSI水平,存儲補充日誌,附加緊急聯繫人,記錄發送交接。
- 顯示每個站點的最新罐壓、補充歷史、交付窗口和緊急聯繫人。

交付:
- 帶有架構、ACL和CLP的 Back4app 應用程序;用於調度板、司機路線檢查、補充登記和緊急聯繫人查詢的前端。

按下面的按鈕以使用此模板提示預填寫的內容打開代理。

這是沒有技術後綴的基本提示。您可以在之後調整生成的前端堆疊。

幾分鐘內部署每月 50 次免費提示無需信用卡

API 測試器

嘗試 REST 和 GraphQL 端點對照氧氣交付架構。響應使用模擬數據,無需 Back4app 帳戶。

加載遊樂場…

使用與此範本相同的架構。

選擇您的技術

展開每個卡片以查看如何將 PatientSite、TankAssignment 和 RefillLog 與您選擇的技術棧整合。

Flutter 氧氣傳輸後端

React 氧氣傳輸後端

React 原生 氧氣傳輸後端

Next.js 氧氣傳輸後端

JavaScript 氧氣傳輸後端

Android 氧氣傳輸後端

iOS 氧氣傳輸後端

Vue 氧氣傳輸後端

Angular 氧氣傳輸後端

GraphQL 氧氣傳輸後端

REST API 氧氣傳輸後端

PHP 氧氣傳輸後端

.NET 氧氣傳輸後端

每項技術的價值

每個技術棧都使用相同的氧氣輸送後端架構和 API 合約。

統一的氧氣物流數據結構

使用一個架構管理用戶、PatientSite、TankAssignment、RefillLog、EmergencyContact 和 DispatchEvent 記錄。

送貨路線的 PSI 追蹤

保持油箱壓力可見,以便調度可以優先處理低氣瓶。

為技術人員補充記錄歷史

記錄每個服務停靠點的 psiBefore、psiAfter 和 refillTime。

緊急聯絡路由

將聯絡人綁定到 PatientSite 記錄,以便在路徑變更時可以進行升級。

REST/GraphQL 的氧氣交付 APIs

將移動端、網頁和操作面板與相同的後端合約整合。

可擴展的氧氣物流架構

稍後添加路由、庫存或服務說明,而無需重新設計核心交付架構。

氧氣交付堆疊比較

比較所有支持技術的設置速度、SDK類型和AI支持。

框架設置時間氧氣交付好處SDK類型AI支持
大約 5 分鐘對於移動和網路的氧氣傳遞,單一代碼庫。類型 SDK完全
少於 5 分鐘快速網頁儀表板,用於調度和 PSI 審查。類型 SDK完全
約 3–7 分鐘適合司機和技術人員的跨平台移動應用程式。類型 SDK完全
快速 (5 分鐘) 設定伺服器渲染的網絡應用程序用於交付協調。輸入式 SDK完全
約 3–5 分鐘輕量級的網絡整合用於氧氣物流。輸入式 SDK完全
約 5 分鐘原生 Android 應用程序用於路線和 PSI 檢查。輸入式 SDK完全
少於 5 分鐘本地 iOS 應用程式用於配送和補給任務。輸入式 SDK完全
約 3–7 分鐘React 網頁 UI 用於氧氣配送操作。已輸入的 SDK完全
快速(5 分鐘)設置企業網頁應用程式用於派送和補給日誌。已輸入的 SDK完全
少於 2 分鐘靈活的 GraphQL API 用於氧氣配送數據。GraphQL API完全
快速設置 (2分鐘)REST API 整合氧氣供應系統。REST API完全
約3分鐘伺服器端 PHP 後端協調交付。REST API完全
約3–7分鐘.NET 後端用於氧氣供應操作。類型化 SDK完全

設置時間反映從項目引導到使用此模板架構的第一次TankAssignment或PatientSite查詢的預期持續時間。

交付問題

有關使用此模板構建氧氣罐交付後端的常見問題。

氧氣配送團隊如何在退貨延遲或資產維修時保持可用性誠實?
將 PatientSite、TankAssignment 和 RefillLog 正確鏈接到履行和退貨檢查的方式是什麼?
我們如何添加新的氧氣配送費用結構或包裝,而不重寫預訂邏輯?
我該如何使用 Flutter 查詢油罐和交付地點?
我該如何管理與 Next.js Server Actions 的緊急聯絡人整合?
React Native 是否可以將油罐 PSI 數據離線緩存?
我該如何防止未經授權的補充編輯?
在 Android 上顯示交付路線的最佳方法是什麼?
氧氣配送流程是如何運作的?
這個氧氣罐配送模板是由哪些類別提供的?

全球開發者信賴

加入使用 Back4app 模板更快運送氧氣配送產品的團隊

G2 Users Love Us Badge

準備好建立您的氧氣罐配送應用程式嗎?

在幾分鐘內開始您的氧氣配送專案。不需要信用卡。

選擇技術