关键要点
此模板为您提供了一个带有过滤器日志、油品等级历史和里程提醒的换油站 CRM 后端,以便站点工作人员可以从一个共享系统中工作。
- 所有过滤器类型日志集中在一个地方 — 存储每个过滤器日志与过滤器类型、车辆和服务工单链接,方便快速查找。
- 您可以追踪的油品等级历史 — 保持油品等级历史条目与每辆车关联,以便管理人员了解上次访问使用的油品等级。
- 易于安排的里程提醒 — 使用里程提醒的 mileageDue 和 dueDate 字段来计划下次联系,以防汽车落后。
- 站点运营保持有序 — 连接站点、服务工单和技术人员分配,让每个车道都有明确的服务轨迹。
- 一个用于网页和移动端的后端 — 通过 REST 和 GraphQL API 暴露客户、车辆、过滤日志和里程提醒。
概述:换油站客户关系管理
大多数换油站的麻烦都是以相同的方式开始的:一名技术人员在现场,但记录系统仍然是文本和截图的串。这很少是单一的错误 — 这是漂移。此模板在 Back4app 上建模客户、车辆、服务工单、过滤日志和油级历史,以便您可以交付一个可工作的换油站后端,而不是把电子表格拼凑在一起。该模式涵盖客户(fullName、phone、email)、车辆(customer、plateNumber、mileage、oilGrade)、服务工单(vehicle、station、technician、status)、过滤日志(serviceTicket、filterType、oldFilterCode、newFilterCode)、油级历史(vehicle、oilGrade、odometerReading、serviceDate)、里程提醒(vehicle、mileageDue、dueDate、reminderStatus)以及站点(name、location、bayCount)并内置身份验证和服务追踪。连接您的前端并更快发布。
最佳适用:
您在换油站模板中获得的内容
当换油站的工作量激增时,非正式的流程首先崩溃——这并不是因为人们不再关心,而是因为记忆和信息无法扩展。
该中心突出显示客户、车辆和服务票,以便您可以针对相同的实体、字段和关系比较客户端堆栈。
核心换油站CRM功能
此中心中的每个技术卡片使用相同的换油站模式,包含客户、车辆、服务票、滤清器日志、油品历史、里程提醒和站点。
客户资料跟踪
客户存储全名、电话、电子邮件和首选联系方式。
车辆服务历史
车辆链接到客户、车牌号、里程和机油等级。
过滤器类型日志
FilterLog 存储 serviceTicket、filterType、oldFilterCode 和 newFilterCode。
油品等级历史
OilGradeHistory 跟踪车辆、油品等级、里程表读数和服务日期。
里程提醒
MileageReminder 保持车辆、到期里程、到期日期和提醒状态。
为什么要使用Back4app构建您的换油站CRM后端?
Back4app为您提供管理站点工作所需的类和API,无需将每个屏幕连接到自定义基础设施。
- •服务工单和过滤日志保持关联: ServiceTicket和FilterLog使员工能够追溯特定车辆访问安装了哪个filterType。
- •油级历史可搜索: OilGradeHistory记录油级和里程表读数,以便管理者可以查看上次服务使用的内容。
- •里程提醒可以轻松自动化: MileageReminder字段,如mileageDue和dueDate,支持提醒工作和后续电话。
快速构建和调整站点工作流程,与所有平台共享一个后端合同。
核心优势
一个后端站点,可以保持服务记录、油品历史和提醒的同步。
更快的服务台接入
从客户和车辆类开始,而不是从头构建接入表单和关系。
更清晰的服务可追溯性
滤清器日志、油品历史和服务票记录确切显示每次访问期间发生的事情。
后续时机始终可见
里程提醒字段使列出每辆车的下次联系日期和到期里程变得简单。
车站角色保持专注
使用ACL/CLP,使经理、协调员和技术人员仅接触他们需要的类。
每个计数器和应用程序一个API
从相同的REST和GraphQL端点提供车站仪表板、移动车道应用程序和报告工具。
AI辅助启动
通过一个结构化提示快速生成后端脚手架和特定于车站的集成说明。
准备好启动您的油换站CRM了吗?
让Back4app AI代理为您的油换站CRM后端搭建脚手架,并从一个提示中生成过滤日志、油级历史和里程提醒。
免费开始——每月50个AI代理提示,无需信用卡
技术栈
此机油更换站的CRM后端模板包含所有内容。
站点 ER 图
油更换站 CRM 架构的实体关系模型。
涵盖客户、车辆、服务票、过滤日志、油级历史、里程提醒和站的架构。
查看图表来源
erDiagram
User ||--o{ ServiceTicket : assignedTo
User ||--o{ OilChangeRecord : completedBy
User ||--o{ FilterTypeLog : inspectedBy
User ||--o{ MileageReminder : createdBy
User ||--o{ StationNote : author
Vehicle ||--o{ ServiceTicket : vehicle
Vehicle ||--o{ OilChangeRecord : vehicle
Vehicle ||--o{ FilterTypeLog : vehicle
Vehicle ||--o{ MileageReminder : vehicle
ServiceBay ||--o{ ServiceTicket : bay
ServiceTicket ||--o{ OilChangeRecord : ticket
ServiceTicket ||--o{ FilterTypeLog : serviceTicket
ServiceTicket ||--o{ StationNote : relatedTicket
User {
String objectId PK
String username
String email
String password
String role
String stationCode
Date createdAt
Date updatedAt
}
Vehicle {
String objectId PK
String vinLast4
String licensePlate
String customerName
String customerPhone
String vehicleMake
String vehicleModel
Number vehicleYear
Number lastMileage
String preferredOilGrade
Date createdAt
Date updatedAt
}
ServiceBay {
String objectId PK
String bayName
String status
String stationCode
Number activeTicketCount
Date createdAt
Date updatedAt
}
ServiceTicket {
String objectId PK
String ticketNumber
String vehicleId FK
String bayId FK
String assignedToId FK
String serviceStatus
String requestedOilGrade
String filterType
String notes
Number checkInMileage
Date createdAt
Date updatedAt
}
OilChangeRecord {
String objectId PK
String ticketId FK
String vehicleId FK
String oilGradeUsed
String filterTypeUsed
Boolean drainPlugChecked
Number nextMileageDue
String completedById FK
Date completedAt
Date createdAt
Date updatedAt
}
FilterTypeLog {
String objectId PK
String vehicleId FK
String serviceTicketId FK
String filterType
String oilGrade
String inspectedById FK
Date logDate
Date createdAt
Date updatedAt
}
MileageReminder {
String objectId PK
String vehicleId FK
Number triggerMileage
Number currentMileage
String status
String reminderChannel
Date lastSentAt
String createdById FK
Date createdAt
Date updatedAt
}
StationNote {
String objectId PK
String title
String body
String authorId FK
String relatedTicketId FK
Date createdAt
Date updatedAt
}
服务流程
身份验证、服务票创建、过滤日志条目、油级审查和里程提醒的典型运行流程。
查看图表来源
sequenceDiagram
participant User
participant App as Oil Change Station CRM App
participant Back4app as Back4app Cloud
User->>App: Sign in to the station dashboard
App->>Back4app: POST /login
Back4app-->>App: Session token
User->>App: Load today's service tickets
App->>Back4app: GET /classes/ServiceTicket?include=vehicle,bay,assignedTo
Back4app-->>App: Queued and in-progress tickets
User->>App: Open a vehicle profile and view filter type logs
App->>Back4app: GET /classes/FilterTypeLog?where={"vehicle":{"__type":"Pointer","className":"Vehicle","objectId":"VEHICLE_ID"}}
Back4app-->>App: FilterTypeLog entries
User->>App: Save an oil change record and mileage reminder
App->>Back4app: POST /classes/OilChangeRecord
App->>Back4app: POST /classes/MileageReminder
Back4app-->>App: Saved service history and next reminder
App->>Back4app: GET /classes/MileageReminder?where={"status":"pending"}&order=triggerMileage
Back4app-->>App: Pending mileage reminders字段字典
油更换站 CRM 模式中每个类的完整字段级参考。
| 字段 | 类型 | 描述 | 必需 |
|---|---|---|---|
| objectId | String | Auto-generated unique identifier | 自动 |
| username | String | Login name used by station staff | |
| String | Staff email address | ||
| password | String | Hashed password (write-only) | |
| role | String | Staff role such as manager, coordinator, or technician | |
| stationCode | String | Assigned station or branch code | — |
| createdAt | Date | Auto-generated creation timestamp | 自动 |
| updatedAt | Date | Auto-generated last-update timestamp | 自动 |
8 字段在 User 中
安全性和权限
ACL 和 CLP 策略如何保护客户档案、车辆历史记录和提醒记录。
客户档案控制
仅授权员工可以创建或更新客户联系信息和车辆分配。
服务记录完整性
ServiceTicket、FilterLog 和 OilGradeHistory 条目应由具有验证引用的站点角色创建。
提醒访问边界
MileageReminder 的读取和编辑应限制在处理后续电话和服务调度的员工范围内。
架构 JSON
原始的 JSON 架构定义可复制到 Back4app 或用作实施参考。
{
"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
},
"stationCode": {
"type": "String",
"required": false
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "Vehicle",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"vinLast4": {
"type": "String",
"required": true
},
"licensePlate": {
"type": "String",
"required": true
},
"customerName": {
"type": "String",
"required": true
},
"customerPhone": {
"type": "String",
"required": false
},
"vehicleMake": {
"type": "String",
"required": true
},
"vehicleModel": {
"type": "String",
"required": true
},
"vehicleYear": {
"type": "Number",
"required": true
},
"lastMileage": {
"type": "Number",
"required": false
},
"preferredOilGrade": {
"type": "String",
"required": false
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "ServiceBay",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"bayName": {
"type": "String",
"required": true
},
"status": {
"type": "String",
"required": true
},
"stationCode": {
"type": "String",
"required": true
},
"activeTicketCount": {
"type": "Number",
"required": false
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "ServiceTicket",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"ticketNumber": {
"type": "String",
"required": true
},
"vehicle": {
"type": "Pointer",
"required": true,
"targetClass": "Vehicle"
},
"bay": {
"type": "Pointer",
"required": true,
"targetClass": "ServiceBay"
},
"assignedTo": {
"type": "Pointer",
"required": true,
"targetClass": "User"
},
"serviceStatus": {
"type": "String",
"required": true
},
"requestedOilGrade": {
"type": "String",
"required": true
},
"filterType": {
"type": "String",
"required": true
},
"notes": {
"type": "String",
"required": false
},
"checkInMileage": {
"type": "Number",
"required": false
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "OilChangeRecord",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"ticket": {
"type": "Pointer",
"required": true,
"targetClass": "ServiceTicket"
},
"vehicle": {
"type": "Pointer",
"required": true,
"targetClass": "Vehicle"
},
"oilGradeUsed": {
"type": "String",
"required": true
},
"filterTypeUsed": {
"type": "String",
"required": true
},
"drainPlugChecked": {
"type": "Boolean",
"required": false
},
"nextMileageDue": {
"type": "Number",
"required": true
},
"completedBy": {
"type": "Pointer",
"required": true,
"targetClass": "User"
},
"completedAt": {
"type": "Date",
"required": true
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "FilterTypeLog",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"vehicle": {
"type": "Pointer",
"required": true,
"targetClass": "Vehicle"
},
"serviceTicket": {
"type": "Pointer",
"required": true,
"targetClass": "ServiceTicket"
},
"filterType": {
"type": "String",
"required": true
},
"oilGrade": {
"type": "String",
"required": true
},
"inspectedBy": {
"type": "Pointer",
"required": true,
"targetClass": "User"
},
"logDate": {
"type": "Date",
"required": true
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "MileageReminder",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"vehicle": {
"type": "Pointer",
"required": true,
"targetClass": "Vehicle"
},
"triggerMileage": {
"type": "Number",
"required": true
},
"currentMileage": {
"type": "Number",
"required": false
},
"status": {
"type": "String",
"required": true
},
"reminderChannel": {
"type": "String",
"required": true
},
"lastSentAt": {
"type": "Date",
"required": false
},
"createdBy": {
"type": "Pointer",
"required": true,
"targetClass": "User"
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
},
{
"className": "StationNote",
"fields": {
"objectId": {
"type": "String",
"required": false
},
"title": {
"type": "String",
"required": true
},
"body": {
"type": "String",
"required": true
},
"author": {
"type": "Pointer",
"required": true,
"targetClass": "User"
},
"relatedTicket": {
"type": "Pointer",
"required": false,
"targetClass": "ServiceTicket"
},
"createdAt": {
"type": "Date",
"required": false
},
"updatedAt": {
"type": "Date",
"required": false
}
}
}
]
}与 AI Agent 一起构建
使用 Back4app AI代理根据此模板生成真实的换油站CRM应用程序,包括前端、后端、身份验证、过滤日志、油品历史和里程提醒流程。
在 Back4app 上创建一个具有此确切架构和行为的换油站CRM应用程序后端。 架构: 1. 客户:fullName(字符串,必需)、电话(字符串,必需)、电子邮件(字符串)、preferredContactMethod(字符串);objectId,createdAt,updatedAt(系统)。 2. 车辆:客户(指向客户的指针,必需)、车牌号码(字符串,必需)、品牌(字符串,必需)、型号(字符串,必需)、里程(数字,必需)、油级(字符串,必需);objectId,createdAt,updatedAt(系统)。 3. 站点:名称(字符串,必需)、位置(字符串,必需)、车位数量(数字,必需)、经理名称(字符串);objectId,createdAt,updatedAt(系统)。 4. 服务票:车辆(指向车辆的指针,必需)、站点(指向站点的指针,必需)、技术人员(字符串,必需)、状态(字符串,必需)、服务日期(日期,必需);objectId,createdAt,updatedAt(系统)。 5. 过滤日志:服务票(指向服务票的指针,必需)、过滤器类型(字符串,必需)、旧过滤器代码(字符串)、新过滤器代码(字符串,必需)、备注(字符串);objectId,createdAt,updatedAt(系统)。 6. 油级历史:车辆(指向车辆的指针,必需)、油级(字符串,必需)、里程表读数(数字,必需)、服务日期(日期,必需)、备注(字符串);objectId,createdAt,updatedAt(系统)。 7. 里程提醒:车辆(指向车辆的指针,必需)、到期里程(数字,必需)、到期日期(日期,必需)、提醒状态(字符串,必需)、最后联系时间(日期);objectId,createdAt,updatedAt(系统)。 安全性: - 经理和协调员可以管理站点、服务票、过滤日志、油级历史和里程提醒记录。技术人员可以在允许的地方添加服务备注。请使用云代码进行验证。 身份验证: - 注册、登录、登出。 行为: - 列出客户和车辆,打开服务票,记录过滤日志,保存油级历史和安排里程提醒。 交付: - 带有架构、ACL、CLP的 Back4app 应用;换油站仪表板、车辆历史、服务票、过滤日志、油级历史和里程提醒的前端。
按下面按钮以打开带有此模板提示的代理。
这是没有技术后缀的基础提示。您可以随后调整生成的前端堆栈。
API 游乐场
尝试对油更换站 CRM 模式进行 REST 和 GraphQL 端点测试。响应使用模拟数据,且不需要 Back4app 账户。
使用与此模板相同的模式。
选择您的技术
展开每个卡片以查看如何将客户、车辆和服务票与您选择的技术栈集成。
Flutter 机油更换站 CRM 后端
React 机油更换站 CRM 后端
React 本地 机油更换站 CRM 后端
Next.js 机油更换站 CRM 后端
JavaScript 机油更换站 CRM 后端
Android 机油更换站 CRM 后端
iOS 机油更换站 CRM 后端
Vue 机油更换站 CRM 后端
Angular 机油更换站 CRM 后端
GraphQL 机油更换站 CRM 后端
REST API 机油更换站 CRM 后端
PHP 机油更换站 CRM 后端
.NET 机油更换站 CRM 后端
您每种技术获得的内容
每个技术栈使用相同的换油站CRM架构和API合同。
统一的站点数据结构
通过一个架构管理客户、车辆、服务票据、过滤日志、油品等级历史和里程提醒。
过滤日志和油品历史跟踪
以员工可以快速查询的格式存储filterType、oldFilterCode、newFilterCode和oilGrade字段。
里程提醒工作流
保持mileageDue、dueDate和reminderStatus准备好用于跟进电话和服务调度。
角色感知的站点操作
为经理、协调员和技术人员在CRM类中定义权限。
GraphQL API用于站点应用程序
将仪表板、服务平板和报告工具连接到相同的后端。
可扩展的服务架构
稍后添加检查、轮胎旋转或零件库存,而不会打断核心CRM流程。
换油站技术比较
比较所有支持技术的设置速度、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 适用于 CRM 工作流程的网页用户界面。 | 输入的 SDK | 完整 | |
| 快速(5 分钟)设置 | 用于站点管理的企业网页应用程序。 | 输入的 SDK | 完整 | |
| 不到 2 分钟 | 灵活的 GraphQL API 用于站点查询。 | GraphQL API | 完整 | |
| 快速(2分钟)设置 | REST API集成用于站点工作流程。 | REST API | 完整 | |
| ~3分钟 | 服务器端PHP后端用于服务表单。 | REST API | 完整 | |
| ~3–7分钟 | .NET后端用于站点操作。 | 类型化SDK | 完整 |
设置时间表示从项目初始化到使用该模板架构的第一个客户或车辆查询所需的预期持续时间。
常见问题解答
关于使用此模板构建油更换站 CRM 后端的常见问题。