关键租赁要点
此模板提供一个以用户、站点、库存单元、租赁订单、服务间隔和位置定位为中心的便携式厕所租赁后端,以便调度员、所有者和客户能够保持一致。
- 租赁订单与站点保持链接 — 使用 RentalOrder.site 和 RentalOrder.assignedUnits 将每个预订与正确的工作现场和便携式厕所单元保持联系。
- 服务访问可追踪 — 使用 serviceCode、scheduledAt、completedAt、unit、performedBy 和 serviceNotes 模型每个 ServiceInterval。
- 库存状态明确 — InventoryUnit.status 和 InventoryUnit.lastServicedAt 显示一个单元是否可用、已调度、清洁或维护。
- GPS 位置支持现场工作 — LocationPing 存储 gpsLat、gpsLng、source、unit 和可选的订单链接,用于司机应用、跟踪器或调度更新。
概述:便携式厕所租赁应用
退货和检查在便携式厕所租赁中闭合循环——系统应在下次租赁开始之前捕捉条件和责任。费用出现在回调和积分中。在 Back4app 上使用核心实体来编码便携式厕所租赁的可用性、定价钩子和一个统一后端的履行记录。架构涵盖了用户、网站、库存单元、租赁订单、服务间隔和带有认证及租赁工作流程功能的 LocationPing。连接您首选的前端,更快交付。
最佳适用:
这个便携式厕所租赁后台是如何组织的
如果在便携式厕所租赁中为新员工入职需要部落知识,那么您就距离单点故障只差一次离开。
中心保持基于角色的用户记录、单位分配和状态跟踪、服务间隔日志的语言一致,这样当产品、运营和工程人员说“记录”时,含义是相同的。
可移动厕所租赁核心功能
此集线器中的每个技术卡都使用相同的便携式厕所租赁架构,包括用户、现场、库存单元、RentalOrder、ServiceInterval 和 LocationPing。
基于角色的用户记录
用户存储用户名、电子邮件、密码和调度员、所有者或客户访问的角色。
单位分配和状态跟踪
InventoryUnit 链接 unitTag、unitType、status、currentSite 和 owner。
服务间隔日志
ServiceInterval 存储 serviceCode、scheduledAt、completedAt、status、unit 和 performedBy。
GPS 位置信号
LocationPing 保留 pingedAt、gpsLat、gpsLng、source、unit 和 order。
现场和租赁协调
现场和 RentalOrder 保留作业地点、联系人和分配的便携式厕所单元。
为什么要使用 Back4app 构建你的便携式厕所租赁后台?
Back4app 为您提供租赁、路线和服务原语,以便您的团队可以专注于调度和现场工作,而不是基础设施。
- •站点和订单记录保持关联: 站点、租赁订单和库存单元在一个轨迹中保留每个工作地点、预订和资产分配。
- •服务日志被结构化: ServiceInterval 捕获 serviceCode、scheduledAt、completedAt、serviceNotes、performedBy 和触及的单元。
- •库存保持最新: InventoryUnit 显示单元是否可用、已派遣、清洁中或维护中,同时 Live Queries 保持信息更新。
通过一个后端合约快速构建和迭代租赁操作,适用于所有平台。
便携式厕所出租的好处
一个帮助您保持路线、服务工作和库存一致的租赁后台。
更快的调度决策
使用 Site、RentalOrder 和 InventoryUnit,而不是从头开始拼凑路线数据。
明确的服务责任
使用 ServiceInterval、serviceCode 和 performedBy 显示谁完成了每个间隔以及何时完成。
客户更新保持一致
保持 User、Site.contactName 和 Site.contactPhone 与正确的租赁订单关联。
库存控制是明确的
InventoryUnit.status 和 lastServicedAt 更容易标记可用、已调度、清洁或维护的单元。
位置感知操作
LocationPing.gpsLat 和 gpsLng 帮助团队确认单元送达或服务的位置。
AI 启动工作流程
通过一个结构化的提示快速生成后端脚手架和集成指导。
准备好推出您的便携式厕所租赁应用了吗?
让 Back4app AI 代理为您的便携式厕所租赁后端搭建脚手架,并从一个提示生成 Site、InventoryUnit、RentalOrder、ServiceInterval 和 LocationPing 流程。
免费开始 — 每月 50 个 AI 代理提示,无需信用卡。
可移动租赁技术栈
这个便携式厕所租赁后端模板包含所有内容。
租赁模式图
适用于便携式厕所租赁后端模式的实体关系模型。
覆盖用户、站点、库存单元、租赁订单、服务间隔和位置监测的模式。
查看图表源
erDiagram
User ||--o{ Site : "customer"
User ||--o{ InventoryUnit : "owner"
User ||--o{ RentalOrder : "customer"
User ||--o{ ServiceInterval : "performedBy"
User ||--o{ LocationPing : "capturedBy"
Site ||--o{ InventoryUnit : "currentSite"
Site ||--o{ RentalOrder : "site"
InventoryUnit ||--o{ RentalOrder : "assignedUnits"
InventoryUnit ||--o{ ServiceInterval : "unit"
InventoryUnit ||--o{ LocationPing : "unit"
RentalOrder ||--o{ ServiceInterval : "order"
RentalOrder ||--o{ LocationPing : "order"
User {
String objectId PK
String username
String email
String password
String role
Date createdAt
Date updatedAt
}
Site {
String objectId PK
String siteCode
String name
String address
Number gpsLat
Number gpsLng
String contactName
String contactPhone
String customerId FK
Date createdAt
Date updatedAt
}
InventoryUnit {
String objectId PK
String unitTag
String unitType
String status
Date lastServicedAt
String currentSiteId FK
String ownerId FK
Date createdAt
Date updatedAt
}
RentalOrder {
String objectId PK
String orderNumber
String status
Date startDate
Date endDate
String siteId FK
Array assignedUnits
String customerId FK
Number serviceIntervalDays
String notes
Date createdAt
Date updatedAt
}
ServiceInterval {
String objectId PK
String serviceCode
Date scheduledAt
Date completedAt
String status
String orderId FK
String unitId FK
String serviceNotes
String performedById FK
Date createdAt
Date updatedAt
}
LocationPing {
String objectId PK
Date pingedAt
Number gpsLat
Number gpsLng
String source
String unitId FK
String orderId FK
String capturedById FK
Date createdAt
Date updatedAt
}
调度集成流程
典型运行流程:登录、租赁订单查找、库存单元分配、服务间隔记录和位置监测捕获。
查看图表源
sequenceDiagram
participant User
participant App as Portable Toilet Rental App
participant Back4app as Back4app Cloud
User->>App: Sign in as dispatcher, owner, or customer
App->>Back4app: POST /login
Back4app-->>App: Session token
User->>App: Open rental dashboard
App->>Back4app: GET /classes/RentalOrder?include=site,assignedUnits
Back4app-->>App: RentalOrder list
User->>App: Add or assign a portable toilet unit
App->>Back4app: POST /classes/InventoryUnit or PUT /classes/RentalOrder
Back4app-->>App: InventoryUnit saved
User->>App: Record a service interval or GPS ping
App->>Back4app: POST /classes/ServiceInterval or POST /classes/LocationPing
Back4app-->>App: Visit and location tracked
App->>Back4app: Live query updates for status changes
Back4app-->>App: Updated order, service, and inventory status租赁实地指南
便携式厕所租赁模式中每个类的完整字段级参考。
| 字段 | 类型 | 描述 | 必需 |
|---|---|---|---|
| objectId | String | Auto-generated unique identifier | 自动 |
| username | String | User login name | |
| String | User email address | ||
| password | String | Hashed password (write-only) | |
| role | String | Role of the user (e.g., dispatcher, owner, customer) | |
| createdAt | Date | Auto-generated creation timestamp | 自动 |
| updatedAt | Date | Auto-generated last-update timestamp | 自动 |
7 字段在 User 中
租赁数据的访问控制
ACL 和 CLP 策略如何保护用户、网站、订单、服务访问和位置信号。
客户账户控件
只有客户可以更新自己的用户字段,并查看其分配的站点、租赁订单、服务间隔和位置信号数据。
服务和库存完整性
仅授权的员工可以创建 ServiceInterval 和 LocationPing 记录,并且只有资产所有者可以管理 InventoryUnit 状态。
范围路由访问
将读取限制为与当前调度计划相关的 Site、RentalOrder 和 InventoryUnit 行,特别是对于现场工作人员和面向客户的视图。
JSON Schema
准备好复制到 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
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "Site",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"siteCode": {
"type": "String",
"required": true
},
"name": {
"type": "String",
"required": true
},
"address": {
"type": "String",
"required": true
},
"gpsLat": {
"type": "Number",
"required": true
},
"gpsLng": {
"type": "Number",
"required": true
},
"contactName": {
"type": "String",
"required": false
},
"contactPhone": {
"type": "String",
"required": false
},
"customer": {
"type": "Pointer",
"required": true,
"targetClass": "User"
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "InventoryUnit",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"unitTag": {
"type": "String",
"required": true
},
"unitType": {
"type": "String",
"required": true
},
"status": {
"type": "String",
"required": true
},
"lastServicedAt": {
"type": "Date",
"required": false
},
"currentSite": {
"type": "Pointer",
"required": false,
"targetClass": "Site"
},
"owner": {
"type": "Pointer",
"required": true,
"targetClass": "User"
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "RentalOrder",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"orderNumber": {
"type": "String",
"required": true
},
"status": {
"type": "String",
"required": true
},
"startDate": {
"type": "Date",
"required": true
},
"endDate": {
"type": "Date",
"required": false
},
"site": {
"type": "Pointer",
"required": true,
"targetClass": "Site"
},
"assignedUnits": {
"type": "Array",
"required": true,
"targetClass": "InventoryUnit"
},
"customer": {
"type": "Pointer",
"required": true,
"targetClass": "User"
},
"serviceIntervalDays": {
"type": "Number",
"required": true
},
"notes": {
"type": "String",
"required": false
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "ServiceInterval",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"serviceCode": {
"type": "String",
"required": true
},
"scheduledAt": {
"type": "Date",
"required": true
},
"completedAt": {
"type": "Date",
"required": false
},
"status": {
"type": "String",
"required": true
},
"order": {
"type": "Pointer",
"required": true,
"targetClass": "RentalOrder"
},
"unit": {
"type": "Pointer",
"required": true,
"targetClass": "InventoryUnit"
},
"serviceNotes": {
"type": "String",
"required": false
},
"performedBy": {
"type": "Pointer",
"required": true,
"targetClass": "User"
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "LocationPing",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"pingedAt": {
"type": "Date",
"required": true
},
"gpsLat": {
"type": "Number",
"required": true
},
"gpsLng": {
"type": "Number",
"required": true
},
"source": {
"type": "String",
"required": true
},
"unit": {
"type": "Pointer",
"required": true,
"targetClass": "InventoryUnit"
},
"order": {
"type": "Pointer",
"required": false,
"targetClass": "RentalOrder"
},
"capturedBy": {
"type": "Pointer",
"required": true,
"targetClass": "User"
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
}
]
}与 AI Agent 一起构建
使用 Back4app AI Agent 从此模板生成真正的可移动厕所租赁应用程序,包括前端、后端、认证,以及 Site、InventoryUnit、RentalOrder、ServiceInterval 和 LocationPing 流程。
在 Back4app 上创建一个安全的便携式厕所租赁应用后端,使用此确切的模式和行为。 模式: 1. 用户(使用 Back4app 内置):用户名,电子邮件,密码,角色;objectId,创建时间,更新时间(系统)。 2. 站点:站点代码,名称,地址,gpsLat,gpsLng,联系人姓名,联系人电话,客户(指向用户的指针);objectId,创建时间,更新时间(系统)。 3. 库存单元:单元标签,单元类型,状态,最后维护时间,当前站点(指向站点的指针),所有者(指向用户的指针);objectId,创建时间,更新时间(系统)。 4. 租赁订单:订单号码,状态,开始日期,结束日期,站点(指向站点的指针),分配单元(库存单元的指针数组),客户(指向用户的指针),服务间隔天数,备注;objectId,创建时间,更新时间(系统)。 5. 服务间隔:服务代码,计划时间,完成时间,状态,订单(指向租赁订单的指针),单元(指向库存单元的指针),服务备注,由(指向用户的指针)执行;objectId,创建时间,更新时间(系统)。 6. 位置签到:签到时间,gpsLat,gpsLng,来源,单元(指向库存单元的指针),订单(指向租赁订单的指针,可选),由(指向用户的指针)捕获;objectId,创建时间,更新时间(系统)。 安全性: - 客户只能查看自己的站点、租赁订单、服务间隔和位置签到条目。 - 调度员可以创建和更新服务间隔记录,并捕获位置签到数据。 - 资产所有者可以管理库存单元状态并查看订单分配。 - 除非角色被授权,否则保持位置和客户联系字段私密。 认证: - 注册,登录,登出。 行为: - 列出租赁订单,创建站点,分配库存单元,调度服务间隔,并记录 GPS 签到。 - 保持库存状态和服务历史记录的准确,以便于调度和客户可见性。 交付: - 针对租赁台工作人员、资产所有者和预订便携式厕所服务的客户,提供具有模式、CLP、ACL 和前端流的 Back4app 应用。
按下面的按钮以打开预填充此模板提示的代理。
这是没有技术后缀的基本提示。您可以在后续调整生成的前端堆栈。
API 沙盒
尝试使用针对便携式厕所租赁架构的 REST 和 GraphQL 端点。响应使用模拟数据,无需 Back4app 帐户。
使用与此模板相同的架构。
选择您的技术栈
展开每个卡片以查看如何将站点、库存单元和租赁订单与您选择的技术栈集成。
Flutter 便携式厕所租赁后端
React 便携式厕所租赁后端
React 原生 便携式厕所租赁后端
Next.js 便携式厕所租赁后端
JavaScript 便携式厕所租赁后端
Android 便携式厕所租赁后端
iOS 便携式厕所租赁后端
Vue 便携式厕所租赁后端
Angular 便携式厕所租赁后端
GraphQL 便携式厕所租赁后端
REST API 便携式厕所租赁后端
PHP 便携式厕所租赁后端
.NET 便携式厕所租赁后端
您在每种技术中可以获得的内容
每个技术栈都使用相同的可移动厕所租赁后端架构和 API 合同。
统一的租赁数据结构
使用一致的架构管理用户、站点、库存单元、租赁订单、服务间隔和位置检测。
租赁的服务间隔日志
记录每次清理、补货和检查,使用相同的 ServiceInterval 模型。
GPS 位置跟踪
将 LocationPing 的纬度和经度与正确的 InventoryUnit 和 RentalOrder 关联。
便携式设备的库存管理
为库存、维护和调度定义状态和 lastServicedAt 字段。
REST/GraphQL 租赁 API
为订单和服务流程集成灵活的移动和网络客户端端点。
可扩展的操作架构
稍后添加调度提醒、检查照片或计费类别,而不破坏基础模型。
便携式租赁堆栈比较
比较所有受支持技术的设置速度、SDK 风格和 AI 支持。
| 框架 | 设置时间 | 租赁利益 | SDK类型 | AI支持 |
|---|---|---|---|---|
| 大约5分钟 | 租赁桌面和现场团队屏幕的单一代码库。 | 类型化SDK | 完整 | |
| 少于5分钟 | 快速的网络仪表板,用于单位可用性和服务日志。 | 输入的 SDK | 完整 | |
| 〜3–7 分钟 | 跨平台移动应用,用于现场访问和检查。 | 输入的 SDK | 完整 | |
| 快速(5分钟)设置 | 服务器渲染的调度门户,用于租赁操作。 | 输入的 SDK | 完整 | |
| 〜3–5 分钟 | 轻量级网页集成,用于预订和服务界面。 | 输入的 SDK | 完整 | |
| 大约 5 分钟 | 本地 Android 驾驶员应用程序和路线更新。 | 类型化 SDK | 完整 | |
| 少于 5 分钟 | 本地 iOS 应用程序,用于现场访问和送货检查。 | 类型化 SDK | 完整 | |
| 约 3-7 分钟 | React 互动网页用户界面,用于服务和库存面板。 | 类型化 SDK | 完整 | |
| 快速(5分钟)设置 | 用于调度和租赁管理的企业Web应用程序。 | 输入的SDK | 完整 | |
| 不到2分钟 | 灵活的GraphQL API,用于嵌套网站和服务查询。 | GraphQL API | 完整 | |
| 快速(2分钟)设置 | REST API 集成用于预订和路线更新。 | REST API | 完整 | |
| 约3分钟 | 服务端 PHP 后端用于租赁桌工作流。 | REST API | 完整 | |
| ~3–7分钟 | .NET 后端用于调度和库存操作。 | 类型化 SDK | 完整 |
设置时间反映从项目启动到使用此模板架构的第一个InventoryUnit、RentalOrder、ServiceInterval或LocationPing查询的预期持续时间。
便携式租赁问题
关于使用此模板构建便携式厕所租赁后端的常见问题。