尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

【Android 项目实战 01】从乘客下单到司机抢单:网约车平台 App 的设计与实现(Spring Boot + MySQL)

【Android 项目实战 01】从乘客下单到司机抢单:网约车平台 App 的设计与实现(Spring Boot + MySQL)
📅 发布时间:2026/6/23 19:41:54

先说结论

• 这是一个课程设计 / 毕业设计型网约车平台:Android 端承担用户操作,Java + Spring Boot 提供后台接口,MySQL 负责业务数据持久化。

• 项目已覆盖乘客、司机、管理员三类角色的基础业务闭环;本文重点讲架构、订单流转、数据表与后端关键实现,不把它包装成生产级商业平台。

1. 项目要解决什么问题?

传统电话约车往往依赖人工描述上车点、目的地与乘车需求,信息传递成本高,也不利于订单记录、司机接单和平台审核。本项目将这些操作拆分为可追踪的数据流程:乘客提交订单或约车信息,司机查看并处理抢单信息,管理员在后台统一管理用户、站点内容与订单数据。

从项目定位看,它不是简单的“信息展示 App”,而是一个围绕账号、订单、审核与内容管理展开的轻量级业务系统。文章中出现的功能和字段均来自项目论文与项目截图;为便于阅读,部分原始代码已压缩为结构化示例。

2. 三类角色如何形成业务闭环?

角色

核心操作

系统侧对应模块

乘客

注册登录、浏览首页和资讯、维护个人信息、提交乘客订单与约车信息

用户注册、用户信息、前台首页、资讯列表、乘客订单

司机

维护司机与车辆相关信息、查看并处理抢单相关信息

司机管理、抢单信息、约车信息

管理员

审核和管理平台内容、用户与订单数据

轮播图、公告栏、管理员/乘客/司机、新闻、顺风车、约车信息、制单信息、乘客订单、抢单信息

2.1 一条订单从提交到处理的路径

  1. 乘客在 Android 端完成账号注册和登录,并在订单页面录入起点、终点、联系方式、下单时间与乘车人数等信息。
  2. 后端接收请求后,将订单写入 passenger_order(乘客订单)等业务表;创建逻辑通过事务控制,避免出现半写入状态。
  3. 司机侧围绕 order_grabbing_information(抢单信息)处理抢单相关数据,订单中保留车牌、司机、金额、状态等字段,为后续追踪留出空间。
  4. 管理员在后台统一查看与维护约车、订单、抢单和用户信息,并可处理审核相关字段。

3. 技术栈与架构设计

层级

选型

在项目中的职责

移动端

Android

承载注册、登录、首页浏览、用户信息和乘客订单等操作入口。

后端

Java + Spring Boot

通过 Controller 接收接口请求,完成登录、注册、上传、订单新增等业务处理。

数据层

MySQL

保存用户、乘客、司机、约车、顺风车、乘客订单、抢单等业务数据。

会话控制

Token

登录校验通过后生成并保存访问令牌,返回用户信息与登录状态。

3.1 结构不复杂,但分层要清楚

Android 客户端

→

Controller / REST 接口

→

Spring Boot 业务层

→

MySQL 数据库

图 1 文章化后的系统链路:用户操作进入接口层,业务逻辑统一处理后写入数据库

论文中将后台与客户端分开描述。改成技术文章后,更值得强调的是:Android 端只负责交互和请求发起;登录校验、订单写入、文件上传等能力集中在后端。这种拆分能让后续维护、测试和功能扩展更直观。

4. 数据库:围绕“人、车、单、状态”建模

原论文给出了较完整的数据表清单。CSDN 正文没有必要把所有字段逐行罗列,更适合展示真正支撑业务闭环的实体关系。下面是从原表结构中提炼出的核心模型。

实体 / 表

关键字段举例

业务作用

passenger(乘客)

passenger_number、passengers_name、region、examine_state、user_id

关联平台用户,保存乘客基本信息与审核状态。

driver(司机)

driver_no、vehicle_name、license_plate_number、name_of_driver、user_id

维护司机、车辆与用户账号的关联。

passenger_order(乘客订单)

starting_point、end、order_time、number_of_passengers、unit_price、ride_amount

记录乘客下单的基本信息和订单金额相关字段。

order_grabbing_information(抢单信息)

odd_numbers、driver_no、vehicle_name、quantity_of_order_grabbing、pay_state

承接司机抢单与订单处理后的扩展信息。

car_hailing_information(约车信息)

appointment_no、place_of_origin、destination、driver_no、pay_type、examine_state

保存预约与约车信息,以及支付、审核等状态字段。

free_ride(顺风车)

place_of_origin、destination、seats、release_date、ticket_unit_price

存储顺风车发布信息与座位、票价等字段。

字段设计中值得保留的思路

• 把审核状态、支付状态、推荐标记、创建时间和更新时间保留在业务表中,后台审核和运营统计才有落点。

• 订单信息里同时存储联系人、路线和人数等快照字段,有助于在订单记录里保留当时提交的关键信息。

• 后续迭代时,可以把订单状态设计为统一状态机,避免“审核状态、支付状态、抢单状态”分散更新。

5. 后端关键实现:只讲读者最关心的 3 个点

原论文中有较长的代码片段。为了让文章更易读,这里不重复堆砌 Controller 全量代码,而是保留登录、订单写入和文件上传三个最能说明系统实现的部分。以下均为根据论文代码整理后的简化示例,字段和 Service 名称应以实际项目为准。

5.1 登录:支持多种账号标识,并校验用户状态

登录逻辑会根据用户名、邮箱或手机号构建查询条件,随后校验用户是否存在、密码是否匹配、用户组是否存在、审核状态是否通过以及账号是否可用;通过后保存 Token,并将用户信息返回给客户端。

示例 1 登录接口的核心校验顺序

// 根据论文登录接口整理的伪代码
@PostMapping("/login")
public Result login(LoginRequest req) {
User user = userService.findByUsernameOrEmailOrPhone(req);
if (user == null || !passwordMatches(req.getPassword(), user.getPassword()))
return error(30000, "账号或密码不正确");
if (!groupService.exists(user.getUserGroup())
|| !user.isApproved() || user.getState() != 1)
return error(30000, "当前账号不可登录");
String token = tokenService.createAndSave(user);
return success(Map.of("token", token, "user", user));
}

5.2 创建订单:写库动作要放进事务边界

乘客订单新增接口在论文代码中使用了 @Transactional。虽然当前示例只有一条插入动作,但这为后续“写订单 + 写抢单记录 + 更新状态”等多表操作预留了可靠边界。

示例 2 乘客订单新增接口

@PostMapping("/passenger-order/add")
@Transactional
public Result createPassengerOrder(@RequestBody Map<String, Object> payload) {
// 实际项目中应补齐:字段校验、用户身份校验、订单号生成等
passengerOrderService.insert(payload);
return success(1);
}

5.3 上传:先保证目录存在,再落盘保存

约车信息相关页面需要上传文件或封面时,后端会先检查文件是否为空,再检查目标目录是否存在;目录创建成功后,将文件保存到目标位置并返回路径信息。

示例 3 文件上传的基础处理

@PostMapping("/upload")
public Result upload(MultipartFile file) throws IOException {
if (file.isEmpty()) return error(30000, "没有选择文件");

File targetDir = new File(uploadDir);
if (!targetDir.exists() && !targetDir.mkdirs()) {
return error(30000, "创建目录失败");
}

File dest = new File(targetDir, buildSafeFileName(file));
file.transferTo(dest);
return success(Map.of("path", dest.getPath()));
}

继续迭代时,建议优先补这 3 件事

• 密码不应以可逆形式直接存储;应采用安全哈希方案,并在登录时做比对。

• 上传文件要限制类型、大小与文件名,避免把非业务文件直接暴露在可访问目录。

• 订单接口补齐参数校验、幂等控制、订单号生成和角色权限校验,再考虑抢单并发控制。

6. 项目界面:用真实截图证明功能已经落地

技术文章里截图不是越多越好。保留能说明核心模块的界面即可:一张后台管理截图用于证明管理端能力,一到两张移动端截图用于展示用户端入口和订单填写页面。以下为论文中已有的项目截图。

图 2 后台信息管理页面:以列表方式处理约车 / 用户 / 订单等数据

移动端首页:展示约车相关内容入口

乘客订单:填写路线、联系人等信息

图 3 Android 端界面示例:前台入口与乘客订单表单

7. 测试范围、项目边界与复盘

论文中将系统测试分为黑盒测试和白盒测试,并对注册登录、信息管理、订单相关页面等基础功能进行了验证。将这部分改成 CSDN 文章时,不建议写成“系统完美、商业可用”一类结论;更可信的表达是:课程项目已完成基础业务功能验证,仍有面向真实出行场景的工程化改进空间。

已覆盖 / 已展示

尚未作为本项目重点呈现的能力

注册、登录、用户状态校验、Token 登录态、后台信息管理、订单新增、抢单信息、文件上传、Android 页面展示

实时定位与地图导航、订单并发抢占策略、真实支付接入、消息推送、风控审核、分布式部署与高可用

8. 写在最后:从“能跑”到“更像产品”

这次实现的最大收获,不是做出多少页面,而是把一个看似分散的网约车业务拆成了账号、角色、订单、审核和内容管理等可落库、可操作的模块。Android 端让用户完成输入,Spring Boot 端承接校验和业务处理,MySQL 端保留过程数据,三者共同形成了一个最小可用的业务闭环。

后续若继续完善,我会优先补齐订单状态机、权限控制、密码与文件安全、异常处理和并发抢单策略,再向实时地图、支付和通知能力扩展。对于学习型项目而言,先把主业务链路讲清楚,比堆砌“全功能大而全”更有价值。

— 完 —

本文为项目实践记录;截图与代码请以实际可公开、可授权的版本发布。

相关新闻

  • 为什么有人愿意多花五倍钱,买一个“差不多“的东西
  • 【2026奇点大会官方技术白皮书】:首次公开AI原生微调5大核心范式与3类失效场景避坑指南
  • 服装布料批量裁剪,CO2 激光高速裁切

最新新闻

  • 传统谱牒数字化归档与纸质复刻解决方案:家谱标准化制作实践
  • 深度解析:从原理到实战——破解现代Web应用的身份验证与会话管理漏洞
  • 北方全年对讲设备维保托管,双工电子一站式承包东北内蒙设备运维
  • 性价比高的大理石高端工程公司
  • 软件即席分析化的灵活查询与可视化
  • 技术多态中的接口统一与实现多样

日新闻

  • Arduino-ESP32项目深度解析:解锁隐藏芯片支持与架构演进
  • 2026年 系统窗厂家/品牌推荐榜单:隔音系统窗+高端系统门窗的核心优势与选购指南 - 品牌发掘
  • NVBench:首个双语非言语发声语音合成评测基准详解与实践

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号