ATV和UTV服务
与AI代理一起构建
全地形车和多用途车服务后台

全地形车和多用途车服务应用后台模板
服务日志,绞车测试和越野时间跟踪

一个在Back4app上生产就绪的全地形车和多用途车服务后台,带有悬挂日志,绞车测试和越野时间历史。包括ER图,数据字典,JSON模式,API游乐场和一个AI代理提示以快速设置。

关键要点

此模板为您提供一个具有悬挂日志、绞盘测试和土地小时历史的ATV和UTV服务后端,以便管理人员和现场工作人员可以保持维护工作的有序。

  1. 悬挂日志跟踪将带有骑行记录、测量和检查结果的SuspensionLog条目存储在可查询的类中。
  2. 绞盘测试历史使用WinchTest记录来捕捉负载检查、通过或未通过的结果以及后续行动。
  3. 土地小时可见性记录TrailHourEntry值,以便协调员可以在下次ServiceVisit之前审查使用情况。
  4. 服务工作控制将每个ServiceVisit链接到车辆、技术人员和状态,以便更清晰的交接。

ATV和UTV服务应用后端一览

客户根据速度和清晰度来评判ATV和UTV服务——当工作历史存储在三个不同的地方时,这很难实现。这并不常常是单一的bug——而是偏移。该架构以Vehicle、ServiceVisit、SuspensionLog、WinchTest和TrailHourEntry为中心,结合Back4app上的实时查询,给ATV和UTV服务运营商提供了一个整个组织都可以信任的真相来源。该架构涵盖用户(用户名、电子邮件、密码)、车辆(vin、unitNumber、模型、类型)、服务访问(车辆、分配给、服务日期、状态)、悬挂日志(服务访问、前测量、后测量、备注)、绞盘测试(服务访问、载重等级、结果、测试时间)和TrailHourEntry(车辆、小径名称、增加小时、记录时间),并内置身份验证和记录跟踪。连接您首选的前端并保持服务工作流动。

最佳适用:

ATV和UTV服务操作维护调度应用悬挂检查日志绞车测试跟踪工具轨道使用历史仪表盘现场服务协调

全地形车与无人驾驶车服务后端概述

最好的全地形车与无人驾驶车服务仪表盘就乏味,因为其基础实体是干净的——并不是因为有人在半夜调理了一个电子表格。

利益相关者可以在这里进行车辆、服务访问和悬挂日志覆盖的合理性检查:名称、关系以及它们启用的工作流程。

核心 ATV 和 UTV 服务功能

该中心中的每个技术卡都使用相同的 ATV 和 UTV 服务架构,包括 Vehicle、ServiceVisit、SuspensionLog、WinchTest 和 TrailHourEntry。

车辆登记

车辆类别存储 VIN、单位编号、模型和类型。

服务访问规划

ServiceVisit 类链接车辆、分配给、服务日期和状态。

悬架日志

SuspensionLog 类捕获前测量、后测量和备注。

卷扬机测试

WinchTest 类存储 loadRating、结果和 testedAt。

小径小时历史

TrailHourEntry 类记录 trailName、hoursAdded 和 loggedAt。

为什么要使用Back4app构建您的全地形车和无人驾驶车服务应用后端?

Back4app为您的服务团队提供车辆、服务访问、悬挂日志、绞车测试和轨道小时记录的构建Blocks,以便您可以专注于修理工作流程,而不是基础设施的耗时工作。

  • 车辆和服务访问控制: 车辆类别和服务访问类别保持单位编号、分配的技术人员和状态更新相连。
  • 悬挂和绞盘记录集中于一处: 在每个服务访问旁存储悬挂日志测量和绞盘测试结果,以便于完整的工作订单记录。
  • 实时 + API 灵活性: 使用 Live Queries 进行服务访问和 TrailHourEntry 更改,同时 REST 和 GraphQL 仍可供每个客户使用。

围绕车辆、日志和测试构建服务工作流程,而不是 juggling 不相关的电子表格。

核心优势

一个服务后台,帮助您的团队保持组织而不丢失检查细节。

更快的服务接收

从车辆和服务访问类开始,而不是从零设计单位跟踪器。

清晰的检查历史

悬挂日志和绞盘测试条目将维修证据与正确的服务访问关联。

小径使用规划

TrailHourEntry 记录帮助员工查看哪些 ATV 或 UTV 在下次检查之前累计了最多小时。

范围访问模型

使用 ACL 和 CLP 规则,仅授权用户才能编辑服务访问和记录结果。

可搜索的维护记录

在支持过滤和报告的 Parse 类中存储车辆、测试和小时历史记录。

AI辅助设置

通过一个结构化的提示生成后端骨架和服务工作流指南。

准备启动您的ATV和UTV服务应用程序吗?

让 Back4app AI代理搭建您的ATV和UTV服务后端,并从一个提示中生成悬挂日志、绞盘测试和小径小时历史记录。

免费开始 — 每月50个AI代理提示,无需信用卡

技术栈

此ATV和UTV服务后端模板包含的一切。

前端
13+ 技术
后端
Back4app
数据库
MongoDB
认证
内置认证 + 会话
API
REST 和 GraphQL
实时
Live Queries

实体关系图

ATV 和 UTV 服务后台架构的实体关系模型。

查看图表来源
Mermaid
erDiagram
    User ||--o{ ServiceJob : "assignedTo"
    Vehicle ||--o{ ServiceJob : "vehicle"
    ServiceJob ||--o{ SuspensionLog : "serviceJob"
    ServiceJob ||--o{ WinchTest : "serviceJob"
    ServiceJob ||--o{ ServiceNote : "serviceJob"
    Vehicle ||--o{ SuspensionLog : "vehicle"
    Vehicle ||--o{ WinchTest : "vehicle"
    Vehicle ||--o{ TrailHourEntry : "vehicle"
    User ||--o{ SuspensionLog : "inspectedBy"
    User ||--o{ WinchTest : "testedBy"
    User ||--o{ TrailHourEntry : "recordedBy"
    User ||--o{ ServiceNote : "author"

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

    Vehicle {
        String objectId PK
        String vin
        String unitNumber
        String type
        String model
        String status
        Number hoursOnTrail
        Date createdAt
        Date updatedAt
    }

    ServiceJob {
        String objectId PK
        String jobNumber
        String vehicleId FK
        String assignedToId FK
        String status
        String serviceType
        Date startedAt
        Date completedAt
        Date createdAt
        Date updatedAt
    }

    SuspensionLog {
        String objectId PK
        String serviceJobId FK
        String vehicleId FK
        String inspectedById FK
        Number frontSagMm
        Number rearSagMm
        String notes
        Date createdAt
        Date updatedAt
    }

    WinchTest {
        String objectId PK
        String serviceJobId FK
        String vehicleId FK
        String testedById FK
        Number pullLoadLbs
        Number lineSpeedFpm
        String result
        Date createdAt
        Date updatedAt
    }

    TrailHourEntry {
        String objectId PK
        String vehicleId FK
        String recordedById FK
        String trailName
        Number hoursAdded
        Date rideDate
        Number odometerHours
        Date createdAt
        Date updatedAt
    }

    ServiceNote {
        String objectId PK
        String serviceJobId FK
        String authorId FK
        String body
        String visibility
        Date createdAt
        Date updatedAt
    }

集成流程

登录、车辆查找、服务访问、悬挂日志、绞盘测试和拖车小时历史的典型运行流程。

查看图表来源
Mermaid
sequenceDiagram
  participant User
  participant App as ATV & UTV Service App
  participant Back4app as Back4app Cloud

  User->>App: Sign in to the service dashboard
  App->>Back4app: POST /login
  Back4app-->>App: Session token

  User->>App: Load ATV and UTV vehicles
  App->>Back4app: GET /classes/Vehicle?order=-updatedAt
  Back4app-->>App: Vehicle list with unitNumber, status, and hoursOnTrail

  User->>App: Open a service job and add a suspension log
  App->>Back4app: POST /classes/SuspensionLog
  Back4app-->>App: SuspensionLog objectId

  User->>App: Save winch test results and trail hour entry
  App->>Back4app: POST /classes/WinchTest
  App->>Back4app: POST /classes/TrailHourEntry
  Back4app-->>App: Test and hour history records stored

  App->>Back4app: Subscribe to ServiceJob updates
  Back4app-->>App: Live updates for job status changes

数据字典

ATV和UTV服务架构中每个类的完整字段级参考。

字段类型描述必需
objectIdStringAuto-generated unique identifier自动
usernameStringAccount login name for managers and staff
emailStringWork email address
passwordStringHashed password (write-only)
roleStringAccess role such as manager, coordinator, or technician
createdAtDateAuto-generated creation timestamp自动
updatedAtDateAuto-generated last-update timestamp自动

7 字段在 User 中

安全性和权限

ACL 和 CLP 策略如何保护用户、车辆、服务访问和历史记录。

用户级账户控制

只有用户可以更新或删除他们的个人资料;服务人员的访问权限仅限于分配的角色。

车辆和服务完整性

只有授权的协调员可以创建或关闭 ServiceVisit 条目并附加检查日志。

域阅读访问

将车辆、悬挂日志、绞盘测试和车辆小时条目的读取限制在需要它们的团队中。

模式 JSON

原始 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
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Vehicle",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "vin": {
          "type": "String",
          "required": true
        },
        "unitNumber": {
          "type": "String",
          "required": true
        },
        "type": {
          "type": "String",
          "required": true
        },
        "model": {
          "type": "String",
          "required": true
        },
        "status": {
          "type": "String",
          "required": true
        },
        "hoursOnTrail": {
          "type": "Number",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "ServiceJob",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "jobNumber": {
          "type": "String",
          "required": true
        },
        "vehicle": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Vehicle"
        },
        "assignedTo": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "status": {
          "type": "String",
          "required": true
        },
        "serviceType": {
          "type": "String",
          "required": true
        },
        "startedAt": {
          "type": "Date",
          "required": false
        },
        "completedAt": {
          "type": "Date",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "SuspensionLog",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "serviceJob": {
          "type": "Pointer",
          "required": true,
          "targetClass": "ServiceJob"
        },
        "vehicle": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Vehicle"
        },
        "inspectedBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "frontSagMm": {
          "type": "Number",
          "required": true
        },
        "rearSagMm": {
          "type": "Number",
          "required": true
        },
        "notes": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "WinchTest",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "serviceJob": {
          "type": "Pointer",
          "required": true,
          "targetClass": "ServiceJob"
        },
        "vehicle": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Vehicle"
        },
        "testedBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "pullLoadLbs": {
          "type": "Number",
          "required": true
        },
        "lineSpeedFpm": {
          "type": "Number",
          "required": true
        },
        "result": {
          "type": "String",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "TrailHourEntry",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "vehicle": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Vehicle"
        },
        "recordedBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "trailName": {
          "type": "String",
          "required": true
        },
        "hoursAdded": {
          "type": "Number",
          "required": true
        },
        "rideDate": {
          "type": "Date",
          "required": true
        },
        "odometerHours": {
          "type": "Number",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "ServiceNote",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "serviceJob": {
          "type": "Pointer",
          "required": true,
          "targetClass": "ServiceJob"
        },
        "author": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "body": {
          "type": "String",
          "required": true
        },
        "visibility": {
          "type": "String",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    }
  ]
}

与 AI 代理构建

使用 Back4app AI 代理从此模板生成一个真实的 ATV 和 UTV 服务应用,包括前端、后端、身份验证,以及车辆、悬挂、绞盘和里程小时流。

Back4app AI 代理
准备好构建
在 Back4app 上创建一个 ATV 和 UTV 服务应用程序后端,使用此确切的架构和行为。

架构:
1. 用户(使用 Back4app 内置):用户名,电子邮件,密码;objectId,createdAt,updatedAt(系统)。
2. 车辆:vin(字符串,必填),unitNumber(字符串,必填),model(字符串,必填),type(字符串,必填);objectId,createdAt,updatedAt(系统)。
3. 服务访问:车辆(指向车辆的指针,必填),分配给(指向用户的指针,可选),服务日期(日期,必填),状态(字符串,必填);objectId,createdAt,updatedAt(系统)。
4. 悬挂日志:服务访问(指向服务访问的指针,必填),前测量(字符串,必填),后测量(字符串,必填),备注(字符串);objectId,createdAt,updatedAt(系统)。
5. 绞车测试:服务访问(指向服务访问的指针,必填),负载等级(数字,必填),结果(字符串,必填),测试时间(日期,必填);objectId,createdAt,updatedAt(系统)。
6. 小径小时条目:车辆(指向车辆的指针,必填),小径名称(字符串,必填),添加的小时(数字,必填),记录时间(日期,必填);objectId,createdAt,updatedAt(系统)。

安全性:
- 只有用户可以更新/删除他们的个人资料。限制服务记录访问仅限授权管理人员和指定员工。使用云代码进行验证。

认证:
- 注册,登录,登出。

行为:
- 列出车辆,创建服务访问,添加悬挂日志,提交绞车测试,查看小径小时历史记录。

交付:
- 带有架构、ACL、CLP 的 Back4app 应用程序;车辆、服务访问、悬挂日志、绞车测试和小径小时历史记录的前端。

按下面的按钮以预填充此模板提示打开代理。

这是没有技术后缀的基本提示。您可以在之后调整生成的前端堆栈。

几分钟内部署每月 50 个免费提示无需信用卡

API 游乐场

尝试针对 ATV 和 UTV 服务架构的 REST 和 GraphQL 端点。响应使用模拟数据,无需 Back4app 帐户。

加载游乐场…

使用与此模板相同的架构。

选择您的技术

展开每个卡片以了解如何将车辆、服务访问和悬挂日志与您选择的技术栈集成。

Flutter ATV & UTV 服务后台

React ATV & UTV 服务后台

React 原生 ATV & UTV 服务后台

Next.js ATV & UTV 服务后台

JavaScript ATV & UTV 服务后台

Android ATV & UTV 服务后台

iOS ATV & UTV 服务后台

Vue ATV & UTV 服务后台

Angular ATV & UTV 服务后台

GraphQL ATV & UTV 服务后台

REST API ATV & UTV 服务后台

PHP ATV & UTV 服务后台

.NET ATV & UTV 服务后台

您每个技术都会获得的内容

每个技术栈都使用相同的 ATV 和 UTV 服务后端架构及 API 合同。

统一服务数据结构

使用一个架构管理车辆、服务访问、悬挂日志、绞盘测试和小径小时。

ATV 和 UTV 服务 的检查历史

保持悬挂、绞车和行驶时间记录与正确的单位相关联。

ATV 和 UTV 服务 的操作可见性

让经理审查服务状态,现场工作人员实时更新工作。

ATV 和 UTV 服务 中的角色感知访问

为协调员、技术人员和管理员定义访问级别。

ATV 和 UTV 服务 的 REST/GraphQL API

通过灵活的 API 连接仪表板、移动工具和报告工作。

ATV 和 UTV 服务 的可扩展架构

随着服务过程的发展,添加配件、提醒或供应商记录。

ATV 和 UTV 服务技术比较

比较所有支持的技术的设置速度、SDK 风格和 AI 支持。

框架设置时间服务收益SDK 类型AI 支持
大约 5 分钟移动和网页上的ATV和UTV服务单一代码库。类型化 SDK完整
少于5分钟用于服务访问和日志的快速网页仪表板。类型化SDK完整
大约3-7分钟供现场团队使用的跨平台移动服务应用。类型化SDK完整
快速(5分钟)设置供管理者使用的服务器渲染服务门户。类型化SDK完整
大约3-5分钟轻量级网页集成服务工作流程。输入式SDK完整
大约5分钟适用于商店和小径员工的原生Android应用程序。输入式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完整

设置时间反映了从项目引导到使用此模板架构的第一个车辆或服务查询的预期持续时间。

常见问题

关于使用此模板构建 ATV 和 UTV 服务后端的常见问题。

ATV 和 UTV 服务团队在办公室和现场之间浪费了最多时间的地方在哪里?
车辆注册、服务访问计划、暂停日志如何适应日常的 ATV 和 UTV 服务工作执行?
我们可以在不重写整个数据模型的情况下连接 ATV 和 UTV 服务移动应用吗?
如何使用 Flutter 查询车辆服务历史?
我如何在 Next.js Server Actions 中管理服务流程?
React Native 能离线缓存 trail hour 条目吗?
我如何防止未授权的服务编辑?
在 Android 上显示服务记录的最佳方式是什么?
ATV和UTV服务工作流程是如何从头到尾运作的?

全球开发者信赖

与 Back4app 模板一起,加快 ATV 和 UTV 服务产品的发布。

G2 Users Love Us Badge

准备好构建您的 ATV 和 UTV 服务应用程序了吗?

在几分钟内启动您的ATV和UTV服务项目。无需信用卡。

选择技术