摘 要
目前餐饮行业的线上化发展速度不断加快,传统的电话订餐、单机版点餐系统存在着信息更新迟缓、订单处理缓慢、沟通不畅等问题,不能很好地满足高效便捷的服务要求。因此开发出一套功能齐全的外卖订餐系统有重大的现实意义。本系统使用SpringCloud微服务架构和Vue前端框架,用MySQL数据库进行开发,在IntelliJ IDEA环境下完成开发,以满足用户、员工、管理员的各种需求,创建一个一体化的在线订餐和管理平台。
系统主要的工作就是针对三端用户展开的。用户端实现注册登录、首页浏览、新闻资讯和通知公告查看功能;用户使用购物车管理、地址管理完成商品选择和收货信息的保存,完成在线订餐、订单支付、配送跟踪和订单取消,可以对商品进行收藏,可以在线交流。员工端对分类管理、订餐管理进行操作,完成订单和配送任务。管理员端对用户、员工、订单列表、配送信息、资讯内容、通知公告等进行统一管理,对分类和权限进行设置。系统使用前后端分离的架构,前端用Vue创建交互界面,后端用SpringCloud保证服务高可用,数据层用MySQL进行持久化存储。
系统运行之后各个模块互相配合,使订餐过程变得更加透明,同时对运营管理工作起到了积极的作用。界面简洁、操作顺畅,有利于餐饮企业同消费者之间信息的共享和业务的协同。
关键词:SpringCloud;外卖订餐;Vue;微服务架构;订单管理
Abstract
The online transition of the catering business is always going on. Traditional telephone orders, isolated ordering systems, they have outdated information updates, poor order processing efficiency, and lack of communication, making it hard to fulfill people’s needs for convenient and efficient service. So, creating such an entire food purchasing program is very practical. We make it into a System Based On springcloud,andour database will useMysql.EverythingRuns on IntelliJ idea with front-end Using Vue. To meet the various needs of different users, staff and others in order to establish a comprehensive online ordering and management platform.
It’s all about the three kinds of people who are: On the user side there’s also Registration, Login, Homepage Browsing, News and Announcements. Users use shopping cart management and address management to manage products and deliveries, as well as perform all online ordering, payments, delivery tracking, cancellations, etc. Also support the product collection and communicate online. The Employee side: It’s the categories management and order management. Order &Deliverthe order. The administrator side unifies the management of all users, employees, orders, deliveries, contents, announcements, setting up categories and permissions. System is separated into Front end and Back endWithvue, a frontend is made. And withspringcloud, we have services with availability. And with themyqlit’s all about where we store stuff.
After the system has been running, everything works as one to greatly improve the visibility of order and operations management processes. Interface is very simple, and operation is very convenient, which can also help catering companies share information and collaborate with customers.
Key words:SpringCloud;food ordering;Vue;microservices architecture;order management
第一章 绪论
1.1 研究背景与意义
外卖订餐系统在传统电话、纸质单据作业模式下长期存在信息传递滞后、订单错漏频发、数据统计困难等结构性痛点[1]。伴随互联网技术渗透,早期Web平台虽初步实现菜单电子化与在线下单,但服务响应延迟、支付环节割裂、配送状态不透明、用户个性化偏好难以留存、多端数据同步缺失等问题依然突出,现有模式无法满足当代消费者对高效、连贯、可追踪与定制化服务的迫切需求[2]。开发出稳定的、可靠的在线订餐系统可以明显提高餐饮服务流转效率,减少由于人工操作失误造成的错误,促进商户资源和用户需求之间的及时准确匹配。系统对餐饮行业流程标准化、服务响应及时性、用户体验提升有直接推动作用,也给垂直领域本地生活服务平台创建提供可以复制的技术实践范例。
1.2 国内外研究现状
国内餐饮点餐系统的研究经历了从单机版收银软件到网络化订餐平台的演进过程。早期系统以桌面端应用为主,功能集中于收银结算与简单菜品管理,数据孤岛现象普遍。任建伟等基于微信小程序设计的点餐系统,借助移动端便捷性实现了用户自助下单与订单实时推送,有效减轻了餐厅前厅服务压力[3]。张乐针对高校食堂场景开发的自助点餐系统,通过触摸屏终端与后台管理模块的联动,解决了用餐高峰时段排队拥堵问题[4]。曾慧群基于Android平台开发的智慧点餐系统,引入二维码桌牌与在线支付功能,进一步缩短了顾客从入座到下单的等待时间[5]。朱书彪在《Java程序设计》项目课程开发实践中,将点餐系统作为教学案例贯穿需求分析到项目部署全流程,验证了Spring框架在企业级项目中的适用性[6]。秦冬探讨了Vue框架在前端开发中的组件化与响应式优势,为构建交互流畅的用户界面提供了技术支撑[7]。综合来看,国内点餐系统正从功能单一的工具向覆盖多端、支持多渠道订单的综合平台演进,但在高并发场景下的服务弹性扩展与订单全链路实时追踪方面仍存在改进空间。
国外餐饮点餐系统的研究起步较早,在自助终端、在线预订与数据驱动运营方面积累了丰富经验。WanmoK等探讨了快餐行业中消费者对自助点餐终端接受度的影响因素,指出界面友好度与操作流畅性是用户采纳的关键[8]。Cuento CC等通过模拟混合点餐系统在快餐店的应用,验证了自助终端与人工服务协同模式下顾客等待时间的显著降低[9]。Kaya S等基于技术接受模型分析消费者的在线订餐行为,发现感知易用性与感知有用性共同影响用户的持续使用意愿[10]。Shao W等基于Spring Boot框架设计并实现了在线订餐系统,通过微服务拆分与消息队列机制解决了订单处理中的高并发问题[11]。Tajuddin IIN等针对校园场景开发的在线订餐系统引入聊天机器人模块,为学生提供全天候的点餐咨询与订单查询服务[12]。国外相关研究更加注重用户行为分析与技术架构优化,通过数据驱动方式持续改进系统体验与运营效率,其成熟的微服务治理方案与用户交互设计理念对本课题具有重要参考价值。
1.3 主要研究内容
本课题以SpringCloud外卖订餐系统为研究对象,设计并实现一个用户端、员工端和管理端都包含在内的B/S架构平台。系统使用前后端分离的方式,前端用Vue框架搭建交互界面,后端用SpringCloud微服务架构来实现业务模块的解耦,数据库使用MySQL做数据持久化。主要研究内容有系统整体需求分析和功能规划,确定普通用户、员工、管理员三个角色的权限划分及业务流程,完成系统总体架构设计、功能模块详细设计、数据库逻辑结构和物理结构设计,实现用户注册登录、商品选购、在线订餐、购物车管理、地址管理、订单支付与配送跟踪等功能,实现员工端的分类管理、订餐管理、订单处理和配送管理功能,实现管理员端的用户管理、权限配置、订单列表管理、资讯和通知公告管理功能。通过系统的开发和测试,努力解决传统点餐方式下信息滞后、流程割裂、沟通不畅等问题,给餐饮企业提供建立功能齐全、操作方便、运行稳定的外卖订餐服务。
第二章 相关技术介绍
2.1 Spring Cloud框架
Spring Cloud是基于Spring Boot的微服务架构开发工具集,给分布式系统提供服务发现、配置管理、网关路由、熔断机制等核心组件的集成方案。该框架采用约定优于配置的设计思想,用注解驱动的方式简化了微服务架构中服务注册和发现的实现过程,开发者只需要少量配置就可以完成服务实例到注册中心的注册以及健康状态上报。服务调用层面使用Spring Cloud集成Ribbon负载均衡器和Feign声明式客户端,实现服务之间调用的自动负载均衡、容错处理,当某一个服务实例出现故障的时候,熔断器可以迅速切断异常调用链,防止故障向上下游服务蔓延。该框架还包含了分布式配置中心组件,把各个微服务的配置文件统一存放到远端仓库里,可以做到配置的自动刷新而不必重启服务实例。在本系统开发中,Spring Cloud微服务架构将用户模块、订单模块、支付模块等功能单元拆分为独立部署的服务单元,各服务通过轻量级HTTP协议进行通信,既保证了单个业务模块的独立迭代与扩展能力,又通过服务网关实现了对外接口的统一暴露与访问控制,提升了系统在业务流量波动场景下的弹性伸缩能力[13]。
2.2 Vue.js框架
Vue.js是一种渐进式的框架,它的主要库只关注视图层,使用响应式数据绑定和组件化开发的方式提高了用户界面构建的效率。该框架的响应式原理是用Object.defineProperty方法对数据对象进行劫持,在数据发生变化的时候触发依赖收集和视图更新,开发者只需要管理数据状态,不需要手动操作DOM节点,从根本上解决了传统jQuery模式下界面状态和数据同步复杂的问题。Vue的组件系统可以把页面拆分成高内聚低耦合的独立单元,每个组件封装自身的模板、样式和交互逻辑,用props属性接收父组件传过来的数据,用$emit事件向父组件发送状态变更通知,单向数据流模式使大型前端项目代码组织更清晰、更易维护。该框架还自带虚拟DOM,当数据发生变化的时候,在内存里先创建新的虚拟DOM树,用diff算法对比新旧两棵树的差别,然后批量更新真实DOM,从而大大减少浏览器的重排和重绘次数。在本系统前端开发中,Vue框架负责构建用户端、员工端、管理端三套界面,通过路由懒加载技术按需加载不同角色的页面模块,利用组件复用机制封装了商品展示卡片、订单列表项等高频界面元素,显著提升了前端代码的复用率与开发效率[14]。
2.3 MySQL数据库技术
MySQL属于关系型数据库管理系统,使用客户端/服务器架构模式,用结构化查询语言来完成数据的定义、操作和管理。数据库的存储引擎属于其主要特征,InnoDB引擎具备事务的ACID特性,在高并发环境之下应用行级锁和多版本并发控制技术来保障数据的一致性以及隔离性,MyISAM引擎更适合于只读或者查询密集型的应用场景,在这种情况下它所具有的吞吐量更高。MySQL的索引结构使用B+树来实现,非叶子节点存储键值和指针,叶子节点存储完整的数据行记录,多路平衡树结构把数据检索的磁盘I/O次数控制在树高之内,大大提高了范围查询和排序操作的执行效率。该数据库还具有主从复制的功能,使用二进制日志把主库的数据变更同步到从库上,既可以实现读写分离来分担主库的查询压力,又可以给系统提供数据容灾备份的能力。在本系统开发中,MySQL承担用户信息、订单记录、商品分类、配送状态等核心业务数据的持久化存储任务,通过合理设计数据库范式与索引策略,保障了订单生成、支付状态更新、配送轨迹查询等高频操作的响应时效与数据一致性要求[15]。
2.4 前后端分离架构
前后端分离架构把传统的Web开发中服务端模板引擎和界面层绑定在一起的模式拆解开来,把界面层从服务端拆分出来,形成了前端应用和后端应用两个独立部署的运行单元,它们之间通过HTTP协议用JSON格式进行数据交互。该架构中前端主要负责用户界面的构建以及交互逻辑的处理,使用现代前端框架的组件化、路由功能来实现单页面应用的流畅体验,用户在不同的页面之间切换的时候只进行数据请求,不会出现整页刷新的情况,大大减小了网络传输开销和服务器渲染的压力。后端主要是负责业务逻辑处理和数据持久化工作,把核心能力用RESTful风格的接口对外暴露,接口定义采用资源导向的设计思想,使用HTTP方法来表示操作类型,接口返回值采用统一的数据封装格式方便前端进行异常处理和状态判断。该架构模式最大的优点就是前后端开发工作解耦,前端团队和后端团队可以按照约定好的接口文档进行独立开发工作,接口变更依靠版本管理平滑过渡,不会影响到对方的工作进度。在本系统开发中,前后端分离架构支撑了用户端Web界面、员工端管理界面、管理员后台三类前端应用共享同一套后端微服务接口,前端通过axios库发起异步请求,后端接口依据角色权限返回对应数据,既保证了各端界面呈现的独立性,又避免了后端业务逻辑的重复实现[16]。
第三章 系统分析
3.1 功能需求分析
系统涉及三类参与者:用户、员工、管理员。用户注册登录之后进入前台界面,可以浏览首页展示的商品分类和菜品信息,通过关键词搜索或者分类筛选找到想要的商品。用户将商品加入购物车,在购物车里调节购买数量或者删除商品,确认订单的时候输入收货地址和联系人信息,提交订单之后就进入到支付页面进行在线支付。支付成功后进入配送流程,用户可以在个人中心查看订单状态和配送进度,遇到特殊情况可以发起订单取消。用户可以在商品详情页收藏自己感兴趣的物品,在个人收藏记录中集中查看和管理。系统用公告栏、资讯模块发布平台动态和行业新闻,用户点击公告标题就可以查看详细的公告内容。用户和员工通过在线沟通功能可以实时地进行消息交流,咨询商品信息或者订单问题。用户用例图如图3-1所示。
图3-1用户用例图
员工登录系统后进入后台管理界面,可查看后台首页的数据统计图表,了解近期商品销售金额与数量走势。员工负责商品分类的维护工作,可新增、修改或删除分类信息,为菜品分配所属分类。在在线订餐模块中,员工管理商品的基本信息,包括菜品名称、封面图片、价格规格、库存数量与上架状态。员工查看用户提交的订单列表,对订单进行配送状态更新操作,记录订单的发货时间与配送进度。员工通过订单配送功能模块追踪每一笔订单的物流状态,确认用户签收后完成订单闭环。员工用例图如图3-2所示。
图3-2员工用例图
管理员登录系统后拥有最高权限,可管理所有用户账号与员工账号,对用户信息进行增删改查操作。管理员在权限管理模块中为不同角色分配操作权限,控制各功能模块的访问与编辑范围。管理员管理商品分类体系与商品信息,审核上架商品的内容合规性。管理员查看全部订单列表,支持按订单号、用户信息、订单状态等条件筛选查询,可删除异常订单或导出订单数据。管理员通过订单配送模块统一监控配送进度,处理配送异常情况。管理员发布通知公告与新闻资讯,设置公告的展示时间与置顶状态,对已发布内容进行修改或删除。管理员用例图如图3-3所示。
图3-3管理员用例图
3.2 可行性分析
3.2.1 技术可行性
系统采用前后端分离架构,前端用Vue框架搭建用户界面,后端用SpringCloud微服务框架实现业务逻辑,数据层使用MySQL关系型数据库。上述的技术栈在Web应用的开发中得到了广泛的应用,社区生态成熟,开发文档以及案例资源也较多。开发者有以上系统的系统学习经历和项目实践工作经验,可以独立完成从环境搭建、功能编码、系统测试等所有的开发工作。系统运行在本地开发环境当中,数据库存放在同台物理机上,网络延迟和资源争用都在可以控制的范围内。订单并发场景中数据库的读写操作会成为性能瓶颈,合理地设计数据库索引以及优化SQL查询语句可以缓解压力。用户密码、支付信息等采用加密存储的方式,在前端和后端之间通信时用参数校验、权限拦截来防止注入攻击以及越权访问。因此,系统在技术方面是可行的。
3.2.2 操作可行性
系统界面布局参照主流电商平台、订餐应用设计规范,用户登录之后首页显示商品分类和菜品列表,顶部导航栏集中显示主要功能入口,符合用户日常使用习惯。用户从浏览商品、加入购物车、提交订单、完成支付的操作过程有条不紊,每一个步骤都有相应的提示信息。员工进入后台管理界面之后可以迅速找到订单处理和商品管理模块,订单状态的改变以及配送信息的录入流程同线下业务操作逻辑一致,员工经过简单的培训就可以开始使用。系统上线之后不会对原有的业务流程造成影响,日常维护工作主要是商品上下架和订单状态更新,由员工在后台界面完成操作即可,不需要额外的技术支持。因此,系统在操作方面是可行的。
3.2.3 经济可行性
项目开发阶段主要用到的是开发人员,开发周期在合理范围内,不需要聘请专职开发人员。系统运行所必需的硬件设备使用已经有的计算机、服务器等硬件,不需要购买新的硬件。开发过程中所用到的SpringCloud、Vue、MySQL等都是开源的技术框架,不需要支付软件授权费。开发环境IntelliJ IDEA为社区版,可以满足项目开发的要求。系统上线之后为餐饮门店提供自主经营的外卖渠道,门店不需要向第三方平台缴纳订单抽成,长期使用会产生直接的经济效益。系统功能模块可以复用到其他的餐饮门店部署场景中,单次开发出来的成果有重复使用的能力。因此,系统在经济方面是可行的。
第四章 系统设计
4.1 系统架构设计
系统采用模块化设计思想,将整体功能拆分为用户端前台交互、员工端业务处理、管理端后台管控三个相对独立的模块。用户在浏览器端通过Vue构建的页面发起请求,请求以Ajax异步方式发送至后端接口。后端基于Spring Boot框架搭建,控制器层接收请求后调用服务层组件执行具体业务逻辑,包括订单状态计算、库存扣减验证、用户权限校验等核心操作。服务层完成逻辑处理后,通过数据访问层与MySQL数据库交互,完成用户信息、订单记录、商品数据的持久化读写操作。数据库层面通过事务机制保证订单生成与库存变更的一致性,确保多步骤操作的数据完整性。这种分层架构将界面展示、业务处理、数据存储分离,使各层职责清晰,便于后续功能扩展与维护[17]。系统整体架构如图4-1所示。
图4-1系统架构图
4.2 系统结构功能设计
系统功能围绕三类用户角色进行组织。用户端主要提供商品浏览、购物车管理、订单操作、个人中心维护、信息查看与在线沟通等功能模块。员工端负责商品分类维护、商品信息管理、订单处理与配送状态更新等后台操作。管理员端承担用户与员工账户管理、权限分配、订单全流程监控、内容发布与分类体系维护等系统级管控职责。各功能模块之间通过数据共享与业务协同实现完整的外卖订餐服务流程。该系统功能结构如图4-2所示。
图4-2系统功能结构图
4.3 系统流程设计
用户从进入系统到完成订餐收货的整体业务运行逻辑如下。用户访问系统首页后浏览商品信息,选定商品后加入购物车或直接下单。系统在用户提交订单时要求填写收货地址与联系方式,完成订单信息确认后跳转至支付页面。用户完成支付后订单进入待处理状态,员工端接收到订单通知后进行备餐与配送安排,配送完成后用户确认收货,订单流程结束。该流程覆盖商品浏览、订单生成、支付处理、配送跟踪与订单完成五个核心阶段,各环节状态变更在系统内实时记录。系统总体业务流程如图4-3所示。
图4-3系统总体业务流程图
用户在线订餐的详细处理流程如下。用户在商品列表页通过分类筛选或关键词检索定位目标商品,进入商品详情页查看价格、库存与商品描述后选择购买数量。用户确认购买意向后点击立即购买按钮,系统将商品信息带入订单确认页面。用户在订单确认页面选择已有收货地址或新增地址,填写联系人姓名与手机号码,核对商品总价后提交订单。系统生成订单记录并将订单状态标记为待付款,用户在规定时间内完成支付操作后订单状态变更为待发货。在线订餐流程如图4-4所示。
图4-4在线订餐流程图
用户购物车管理的操作流程如下。用户在商品详情页点击加入购物车按钮,系统将商品信息与所选规格、数量存入购物车表。用户进入购物车页面后查看已添加的商品列表,可修改某一商品的数量或从购物车中移除商品。系统根据商品单价与购买数量自动计算购物车内商品总价。用户确认购物车内容后点击去结算按钮,系统将购物车选中的商品信息传递至订单确认页面,用户继续后续下单操作。购物车管理流程如图4-5所示。
图4-5购物车管理流程图
员工订单处理的操作流程如下。员工登录系统后进入订单列表页面,系统默认展示全部待处理订单。员工可按订单状态筛选订单,选择某一订单后查看订单详情,包括商品信息、收货地址、买家留言等内容。员工确认订单信息无误后点击配送操作按钮,填写物流单号或选择配送方式,系统记录发货时间并将订单状态更新为已配送。用户签收后订单状态变更为已完成,员工可在订单列表中查看已完成订单的历史记录。订单处理流程如图4-6所示。
图4-6订单处理流程图
管理员订单配送监控的流程如下。管理员进入订单配送管理页面,系统展示所有处于配送状态的订单列表。管理员可按照订单号或配送员信息筛选特定订单,查看订单的配送详情与当前物流状态。对于配送超时的订单,管理员可联系配送员或商家了解原因,必要时在系统中标记异常状态并记录处理结果。用户签收后系统自动更新配送状态为已完成,管理员可在配送监控页面查看全部历史配送记录。订单配送监控流程如图4-7所示。
图4-7订单配送监控流程图
4.4 数据库设计
数据库设计采用关系型数据模型,通过规范化处理消除数据冗余并维护数据完整性。系统将用户信息、商品数据、订单记录、物流状态等业务实体抽象为独立的数据表,各表之间通过外键约束建立关联关系。关系型模型在本系统中用于保障订单生成时用户与商品数据的准确关联,支付成功后订单状态与库存数量的同步更新,以及配送过程中物流信息的可追溯性。事务机制确保涉及多表操作的业务场景下数据变更的原子性,避免因部分操作失败导致的数据不一致问题。通过主键约束与唯一索引控制核心字段的重复录入,使用外键约束维持引用完整性[18]。
4.4.1 E-R图设计
用户账户实体主要包括用户ID、用户名、密码、手机号码、邮箱等属性。实体属性图如图4-8所示。
图4-8用户账户实体属性图
普通用户实体主要包括普通用户ID、用户姓名、联系号码、用户ID等属性。实体属性图如图4-9所示。
图4-9普通用户实体属性图
员工用户实体主要包括员工用户ID、员工姓名、联系号码、用户ID等属性。实体属性图如图4-10所示。
图4-10员工用户实体属性图
商品信息实体主要包括商品ID、标题、卖价、库存、上架状态等属性。实体属性图如图4-11所示。
图4-11商品信息实体属性图
收货地址实体主要包括收货地址ID、姓名、手机、地址、用户ID等属性。实体属性图如图4-12所示。
图4-12收货地址实体属性图
购物车实体主要包括购物车ID、商品ID、数量、单价、用户ID等属性。实体属性图如图4-13所示。
图4-13购物车实体属性图
订单实体主要包括订单ID、订单号、商品ID、数量、总价、订单状态、用户ID等属性。实体属性图如图4-14所示。
图4-14订单实体属性图
物流配送实体主要包括物流配送ID、订单号、配送状态、签收状态、发货日期等属性。实体属性图如图4-15所示。
图4-15物流配送实体属性图
在线沟通记录实体主要包括沟通记录ID、沟通群组ID、沟通内容、创建时间等属性。实体属性图如图4-16所示。
图4-16在线沟通记录实体属性图
系统E-R图如图4-17所示。
图4-17系统E-R图
4.4.2 数据库表设计
用户账户表主要是用来存储系统所有登录账户的基本信息。主要包括用户ID、用户名、密码、手机号码等字段。如表4-1所示。
表4-1用户账户表
| 1 | user_id | int | 11 | 是 | 是 | 用户ID |
| 2 | username | varchar | 16 | 是 | 否 | 用户名 |
| 3 | password | varchar | 64 | 是 | 否 | 密码 |
| 4 | phone | varchar | 11 | 否 | 否 | 手机号码 |
| 5 | varchar | 64 | 否 | 否 | 邮箱 |
普通用户表主要是用来存储普通用户的个人信息。主要包括普通用户ID、用户姓名、联系号码、用户ID等字段。如表4-2所示。
表4-2普通用户表
| 1 | ordinary_user_id | int | 11 | 是 | 是 | 普通用户ID |
| 2 | user_name | varchar | 64 | 否 | 否 | 用户姓名 |
| 3 | contact_number | varchar | 16 | 否 | 否 | 联系号码 |
| 4 | user_id | int | 11 | 是 | 否 | 用户ID |
员工用户表主要是用来存储员工用户的个人信息。主要包括员工用户ID、员工姓名、联系号码、用户ID等字段。如表4-3所示。
表4-3员工用户表
| 1 | employee_user_id | int | 11 | 是 | 是 | 员工用户ID |
| 2 | employee_name | varchar | 64 | 否 | 否 | 员工姓名 |
| 3 | contact_number | varchar | 16 | 否 | 否 | 联系号码 |
| 4 | user_id | int | 11 | 是 | 否 | 用户ID |
商品信息表主要是用来存储系统内所有售卖商品的基本信息。主要包括商品ID、标题、卖价、库存、上架状态等字段。如表4-4所示。
表4-4商品信息表
| 1 | goods_id | int | 11 | 是 | 是 | 商品ID |
| 2 | title | varchar | 125 | 否 | 否 | 标题 |
| 3 | price | double | – | 是 | 否 | 卖价 |
| 4 | inventory | int | 11 | 是 | 否 | 商品库存 |
| 5 | list_status | smallint | 6 | 否 | 否 | 上架状态 |
收货地址表主要是用来存储用户添加的收货地址信息。主要包括收货地址ID、姓名、手机、地址、用户ID等字段。如表4-5所示。
表4-5收货地址表
| 1 | address_id | int | 11 | 是 | 是 | 收货地址ID |
| 2 | name | varchar | 32 | 否 | 否 | 姓名 |
| 3 | phone | varchar | 13 | 否 | 否 | 手机 |
| 4 | address | varchar | 255 | 是 | 否 | 地址 |
| 5 | user_id | int | 11 | 是 | 否 | 用户ID |
购物车表主要是用来存储用户加入购物车的商品信息。主要包括购物车ID、商品ID、数量、单价、用户ID等字段。如表4-6所示。
表4-6购物车表
| 1 | cart_id | int | 11 | 是 | 是 | 购物车ID |
| 2 | goods_id | int | 11 | 是 | 是 | 商品ID |
| 3 | num | int | 11 | 是 | 否 | 数量 |
| 4 | price | double | – | 是 | 否 | 单价 |
| 5 | user_id | int | 11 | 是 | 否 | 用户ID |
订单表主要是用来存储用户提交的订单信息。主要包括订单ID、订单号、商品ID、数量、总价、订单状态、用户ID等字段。如表4-7所示。
表4-7订单表
| 1 | order_id | int | 11 | 是 | 是 | 订单ID |
| 2 | order_number | varchar | 64 | 否 | 否 | 订单号 |
| 3 | goods_id | int | 11 | 是 | 是 | 商品ID |
| 4 | num | int | 11 | 是 | 否 | 数量 |
| 5 | price_count | double | – | 是 | 否 | 总价 |
| 6 | state | varchar | 16 | 是 | 否 | 订单状态 |
| 7 | user_id | int | 11 | 是 | 否 | 用户ID |
物流配送表主要是用来存储订单的配送信息。主要包括物流配送ID、订单号、配送状态、签收状态、发货日期等字段。如表4-8所示。
表4-8物流配送表
| 1 | logistics_delivery_id | int | 11 | 是 | 是 | 物流配送ID |
| 2 | order_number | varchar | 64 | 否 | 否 | 订单号 |
| 3 | delivery_status | varchar | 64 | 否 | 否 | 配送状态 |
| 4 | signing_status | varchar | 64 | 否 | 否 | 签收状态 |
| 5 | the_date_of_issuance | date | – | 否 | 否 | 发货日期 |
在线沟通记录表主要是用来存储用户与员工之间的聊天消息。主要包括沟通记录ID、沟通群组ID、沟通内容、创建时间等字段。如表4-9所示。
表4-9在线沟通记录表
| 1 | customer_chat_log_id | int | 11 | 是 | 是 | 沟通记录ID |
| 2 | customer_chat_id | int | 11 | 是 | 是 | 沟通群组ID |
| 3 | content | text | 65535 | 是 | 否 | 沟通内容 |
| 4 | create_time | timestamp | – | 是 | 否 | 创建时间 |
第五章 系统实现
5.1 用户功能实现
5.1.1 注册功能实现
用户注册功能通过UserController中的signUp方法完成。该方法接收前端提交的用户注册信息,调用服务层的signUpRpc方法进行数据校验与持久化操作。系统验证用户名与手机号的唯一性后,对用户密码进行加密处理,将用户信息存入数据库并返回注册结果。注册界面如图5-1所示。
图5-1注册界面
核心代码实现如下:
@PostMapping(“register”)
public Map<String, Object>signUp(@RequestBody User user) {
if (user == null) {
user = newUser();
}
returnservice.signUpRpc(user);
}
5.1.2 登录注册功能实现
用户登录功能由UserController中的login方法提供。该方法接收前端传递的账号与密码参数,构建Map对象后调用loginRpc方法进行身份验证。系统根据用户名查询用户表,比对加密后的密码是否匹配,验证通过后生成访问令牌并返回用户信息与令牌。登录界面如图5-2所示。
图5-2登录界面
核心代码实现如下:
@PostMapping(“login”)
public Map<String, Object>login(@RequestBody Map<String, String> data,HttpServletRequesthttpServletRequest) {
if (data == null) {
data = new HashMap<>();
}
returnservice.loginRpc(data);
}
5.1.3 首页浏览功能实现
首页浏览功能依托于GoodsController和NoticeController等控制器。系统在用户访问首页时通过get_list方法查询商品信息与轮播图数据,从商品表中获取上架状态的菜品列表,从轮播图表中获取展示图片,将组合后的数据返回前端进行页面渲染。首页浏览界面如图5-3所示。
图5-3首页浏览界面
核心代码实现如下:
@RequestMapping(“/get_list”)
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, Object> map =service.selectToPageRPC(service.readQuery(request),service.readConfig(request));
return map;
}
5.1.4 商品购买功能实现
商品购买功能通过GoodsController的get_obj方法获取商品详情。用户进入商品详情页时系统根据商品ID查询商品信息,包括标题、价格、库存、图片与描述内容。用户点击立即购买按钮后,订单信息传递至订单确认页面。商品购买界面如图5-4所示。
图5-4商品购买界面
核心代码实现如下:
@RequestMapping(“/get_obj”)
public Map<String, Object>obj(HttpServletRequestrequest) {
Map<String, Object>stringObjectMap=service.selectRPC(service.readQuery(request),service.readConfig(request));
returnstringObjectMap;
}
5.1.5 购物车管理功能实现
购物车管理功能由CartController提供基础增删改查接口。用户添加商品时前端调用add方法将商品信息写入购物车表,用户修改数量时调用set方法更新数据,移除商品时调用del方法删除记录。系统根据用户ID查询购物车列表并计算总价后返回前端展示。购物车管理界面如图5-5所示。
图5-5购物车管理界面
核心代码实现如下:
@PostMapping(“/add”)
@Transactional
public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
Map<String,Object>addMap=service.readBody(request.getReader());
this.service.insert(addMap);
returnsuccess(1);
}
5.1.6 地址管理功能实现
地址管理功能通过AddressController的add、set、del方法实现。用户新增收货地址时调用add方法,系统校验手机号与地址字段非空后插入数据。用户修改地址时调用set方法更新记录,删除地址时调用del方法移除数据。系统支持用户设置默认地址,默认地址在订单页面优先展示。地址管理界面如图5-6所示。
图5-6地址管理界面
核心代码实现如下:
@PostMapping(“/add”)
@Transactional
public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
Map<String,Object>addMap=service.readBody(request.getReader());
if (addMap.get(“phone”)==null){
throw newIllegalArgumentException(“手机号不能为空”);
}
this.service.insert(addMap);
returnsuccess(1);
}
5.1.7 在线订餐功能实现
在线订餐功能由OrderFoodOnlineController的add和set方法支持菜品信息管理,用户下单时调用OrderController的add方法生成订单。用户从商品详情页或购物车发起下单请求,系统收集商品信息、收货地址与支付金额后创建订单记录,订单状态初始化为待付款。在线订餐界面如图5-7所示。
图5-7在线订餐界面
核心代码实现如下:
@PostMapping(“/add”)
@Transactional
public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
Map<String,Object>paramMap=service.readBody(request.getReader());
OrderFoodOnlineorder_food_online= newOrderFoodOnline();
order_food_online.setCart_title(paramMap.get(“cart_title”)==null?null:String.valueOf(paramMap.get(“cart_title”)));
this.addEntity(order_food_online);
returnsuccess(1);
}
5.1.8 订单支付功能实现
订单支付功能在OrderController中通过订单状态更新实现。用户提交订单后系统跳转至支付界面,用户选择支付方式并完成支付操作后,前端调用订单修改接口将订单状态从待付款更新为待发货。系统记录支付时间与支付方式,订单进入后续配送流程。订单支付界面如图5-8所示。
图5-8订单支付界面
核心代码实现如下:
@PostMapping(“/set”)
@Transactional
public Map<String, Object>set(HttpServletRequestrequest) throwsIOException{
Map<String,String> query =this.service.readQuery(request);
Map<String,String> config =this.service.readConfig(request);
Map<String,Object> body =this.service.readBody(request.getReader());
this.service.update(query, config, body);
returnsuccess(1);
}
5.1.9 订单查看功能实现
订单查看功能通过OrderController的get_list方法查询用户订单列表。系统根据当前登录用户的ID筛选订单记录,返回订单号、商品信息、订单状态与总金额等数据。用户可在个人中心查看历史订单,支持按订单状态分类筛选。订单查看界面如图5-9所示。
图5-9订单查看界面
核心代码实现如下:
@RequestMapping(“/get_list”)
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, Object> map =service.selectToPageRPC(service.readQuery(request),service.readConfig(request));
return map;
}
5.1.10 订单配送查看功能实现
订单配送查看功能通过LogisticsDeliveryController的get_obj方法获取配送信息。用户点击订单详情时系统根据订单号查询物流配送表,获取配送状态、物流单号与发货日期等数据。配送状态包括待发货、配送中、已签收等,用户可实时追踪订单位置。订单配送查看界面如图5-10所示。
图5-10订单配送查看界面
核心代码实现如下:
@RequestMapping(“/get_obj”)
public Map<String, Object>obj(HttpServletRequestrequest) {
ListresultList=service.selectBaseList(service.select(service.readQuery(request),service.readConfig(request)));
JSONObjectjsonObject= newJSONObject();
jsonObject.put(“obj”,resultList.get(0));
return success(jsonObject);
}
5.1.11 订单取消功能实现
订单取消功能通过OrderController的set方法实现订单状态变更。用户在订单详情页发起取消申请时,前端提交订单ID与取消原因,系统校验订单当前状态是否允许取消。符合条件时系统将订单状态更新为已取消,同时恢复商品库存数量。订单取消界面如图5-11所示。
图5-11订单取消界面
核心代码实现如下:
@PostMapping(“/set”)
@Transactional
public Map<String, Object>set(HttpServletRequestrequest) throwsIOException{
Map<String,String> query =this.service.readQuery(request);
Map<String,Object> body =this.service.readBody(request.getReader());
this.service.update(query, config, body);
returnsuccess(1);
}
5.1.12 新闻资讯功能实现
新闻资讯功能由ArticleController的get_list方法提供数据支持。用户进入新闻资讯页面时系统查询文章表,根据文章分类筛选出资讯类内容,按发布时间倒序排列后返回列表。用户点击某条资讯可调用get_obj方法查看详细正文。新闻资讯界面如图5-12所示。
图5-12新闻资讯界面
核心代码实现如下:
@RequestMapping(“/get_list”)
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, Object> map =service.selectToPageRPC(service.readQuery(request),service.readConfig(request));
return map;
}
5.1.13 通知公告查看功能实现
通知公告查看功能通过NoticeController的get_list方法获取公告列表。系统在用户访问公告页面时查询notice表,返回公告标题、发布时间与正文摘要。用户点击公告标题后调用get_obj方法获取完整公告内容,支持按时间排序展示。通知公告查看界面如图5-13所示。
图5-13通知公告查看界面
核心代码实现如下:
@RequestMapping(“/get_list”)
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, Object> map =service.selectToPageRPC(service.readQuery(request),service.readConfig(request));
return map;
}
5.1.14 个人中心功能实现
个人中心功能由UserController与OrdinaryUserController协同完成。用户登录后调用get_user_by_id方法根据用户ID查询用户账户信息与个人资料,包括用户名、手机号、邮箱与头像等。用户可修改个人资料,修改时调用set方法更新对应字段。个人中心界面如图5-14所示。
图5-14个人中心界面
核心代码实现如下:
@GetMapping(“/get_user_by_id”)
public Map<String,Object>getUserById(LonguserId) {
Map<String,String>queryMap= new HashMap<>();
queryMap.put(“user_id”,String.valueOf(userId));
Map<String,Object>registeredMap=this.getObjByMap(queryMap);
OrdinaryUserordinary_user= JSON.parseObject(JSON.toJSONString(registeredMap),OrdinaryUser.class);
Map<String,Object> result = new HashMap<>();
result.put(“ordinary_user”,ordinary_user);
return result;
}
5.1.15 收藏记录功能实现
收藏记录功能由CollectController的add和get_list方法实现。用户在商品详情页点击收藏时调用add方法将商品信息写入收藏表,系统记录用户ID、商品标题与封面图片。用户进入收藏记录页面时调用get_list方法查询该用户的所有收藏项。收藏记录界面如图5-15所示。
图5-15收藏记录界面
核心代码实现如下:
@PostMapping(“/add”)
@Transactional
public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
Map<String,Object>addMap=service.readBody(request.getReader());
this.service.insert(addMap);
returnsuccess(1);
}
5.1.16 在线沟通功能实现
在线沟通功能通过CustomerChatGroupController和CustomerChatLogController实现。用户与员工建立聊天时系统创建沟通群组,消息发送时调用CustomerChatLogController的add方法记录沟通内容。系统根据群组成员关系推送消息,支持实时消息传递与未读消息计数。在线沟通界面如图5-16所示。
图5-16在线沟通界面
核心代码实现如下:
@PostMapping(“/add”)
@Transactional
public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
Map<String,Object>paramMap=service.readBody(request.getReader());
CustomerChatLogcustomer_chat_log= newCustomerChatLog();
customer_chat_log.setCustomer_chat_id(paramMap.get(“customer_chat_id”)==null?null:String.valueOf(paramMap.get(“customer_chat_id”)));
customer_chat_log.setContent(paramMap.get(“content”)==null?null:String.valueOf(paramMap.get(“content”)));
this.addEntity(customer_chat_log);
returnsuccess(1);
}
5.2 员工功能实现
5.2.1 员工注册登录功能实现
员工注册功能通过UserController的signUp方法完成,系统在用户组字段中标记员工身份。员工登录与普通用户共用login方法,登录成功后系统根据用户组判断角色权限,员工端后台界面根据权限展示对应菜单。员工注册登录界面如图5-17所示。
图5-17员工注册登录界面
核心代码实现如下:
@PostMapping(“register”)
public Map<String, Object>signUp(@RequestBody User user) {
if (user == null) {
user = newUser();
}
returnservice.signUpRpc(user);
}
5.2.2 后台首页功能实现
员工后台首页通过后台接口获取统计数据。系统在员工登录后调用订单统计方法,查询近期订单的销售金额与销售数量,以图表形式展示数据走势。员工后台首页还展示个人信息与登录时间。后台首页界面如图5-18所示。
图5-18后台首页界面
核心代码实现如下:
@RequestMapping(“/get_list”)
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, Object> map =service.selectToPageRPC(service.readQuery(request),service.readConfig(request));
return map;
}
5.2.3 分类管理功能实现
分类管理功能由GoodsTypeController的add、set、del方法实现。员工新增分类时调用add方法写入商品分类表,修改分类名称或图标时调用set方法更新数据,删除分类时调用del方法移除记录。系统支持多级分类结构,员工可设置分类的上级分类。分类管理界面如图5-19所示。
图5-19分类管理界面
核心代码实现如下:
@PostMapping(“/add”)
@Transactional
public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
Map<String,Object>addMap=service.readBody(request.getReader());
this.service.insert(addMap);
returnsuccess(1);
}
5.2.4 订餐管理功能实现
订餐管理功能由OrderFoodOnlineController实现,员工可对菜品进行增删改查操作。员工新增菜品时调用add方法填写菜品名称、价格、库存与图片,修改菜品信息时调用set方法更新字段,下架菜品时调整上架状态。订餐管理界面如图5-20所示。
图5-20订餐管理界面
核心代码实现如下:
@PostMapping(“/add”)
@Transactional
public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
Map<String,Object>paramMap=service.readBody(request.getReader());
OrderFoodOnlineorder_food_online= newOrderFoodOnline();
order_food_online.setCart_title(paramMap.get(“cart_title”)==null?null:String.valueOf(paramMap.get(“cart_title”)));
this.addEntity(order_food_online);
returnsuccess(1);
}
5.2.5 订单管理功能实现
订单管理功能通过OrderController的get_business_order_list方法查询商家订单。员工登录后调用该方法根据商家ID筛选订单,返回待处理订单列表。员工查看订单详情后点击配送操作更新订单状态与物流信息。订单管理界面如图5-21所示。
图5-21订单管理界面
核心代码实现如下:
@RequestMapping(“/get_business_order_list”)
public Map<String, Object>getBusinessOrderList(HttpServletRequestrequest) {
Map<String,String> query =service.readQuery(request);
Stringsql=“SELECT t1.* FROM order t1 LEFT JOIN goods t2 ON t1.goods_id = t2.goods_id WHERE t2.user_id =“+query.get(“user_id”);
Query select =service.runEntitySql(sql);
Map<String,Object> map = new HashMap<>();
map.put(“list”,select.getResultList());
return success(map);
}
5.2.6 配送管理功能实现
配送管理功能由LogisticsDeliveryController提供接口支持。员工在订单处理过程中调用add方法创建配送记录,填写订单号、配送员信息与发货日期。员工可更新配送状态与签收状态,用户签收后系统自动完成订单闭环。配送管理界面如图5-22所示。
图5-22配送管理界面
核心代码实现如下:
@PostMapping(“/add”)
@Transactional
public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
Map<String,Object>paramMap=service.readBody(request.getReader());
LogisticsDeliverylogistics_delivery= newLogisticsDelivery();
logistics_delivery.setOrder_number(paramMap.get(“order_number”)==null?null:String.valueOf(paramMap.get(“order_number”)));
this.addEntity(logistics_delivery);
returnsuccess(1);
}
5.3 管理员功能实现
5.3.1 管理员后台首页功能实现
管理员后台首页通过统计接口展示系统运营数据。系统调用订单相关方法查询总订单数、总交易金额与用户数量等核心指标,通过图表展示销售趋势。管理员可查看近期的销售金额与销售数量折线图。后台首页界面如图5-23所示。
图5-23后台首页界面
核心代码实现如下:
@RequestMapping(“/get_list”)
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, Object> map =service.selectToPageRPC(service.readQuery(request),service.readConfig(request));
return map;
}
5.3.2 用户管理功能实现
用户管理功能由UserController和OrdinaryUserController、EmployeeUserController共同实现。管理员查看用户列表时调用get_list方法查询所有用户,可对用户信息进行编辑或删除操作。管理员可重置用户密码或调整用户账户状态。用户管理界面如图5-24所示。
图5-24用户管理界面
核心代码实现如下:
@RequestMapping(“/get_list”)
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, Object> map =service.selectToPageRPC(service.readQuery(request),service.readConfig(request));
return map;
}
5.3.3 分类管理功能实现
管理员分类管理功能与员工分类管理共用GoodsTypeController接口。管理员拥有更高的操作权限,可管理全部商品分类,包括新增顶级分类、编辑分类信息或删除不再使用的分类。分类管理界面如图5-25所示。
图5-25分类管理界面
核心代码实现如下:
@PostMapping(“/add”)
@Transactional
public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
Map<String,Object>addMap=service.readBody(request.getReader());
this.service.insert(addMap);
returnsuccess(1);
}
5.3.4 在线订餐管理功能实现
管理员在线订餐管理功能通过OrderFoodOnlineController的get_list和set方法实现。管理员可查看全部菜品列表,对菜品进行上下架操作,审核员工新增的菜品信息,对违规内容进行下架或删除处理。在线订餐管理界面如图5-26所示。
图5-26在线订餐管理界面
核心代码实现如下:
@PostMapping(“/set”)
@Transactional
public Map<String, Object>set(HttpServletRequestrequest) throwsIOException{
Map<String,String>queryMap=service.readQuery(request);
Map<String,Object>paramMap=service.readBody(request.getReader());
this.setEntity(queryMap,configMap,order_food_online);
returnsuccess(1);
}
5.3.5 订单列表管理功能实现
订单列表管理功能通过OrderController的get_list方法查询全部订单。管理员可查看系统内所有订单记录,支持按订单号、用户信息、订单状态筛选,对异常订单进行删除操作,可将订单数据导出为文件。订单列表管理界面如图5-27所示。
图5-27订单列表管理界面
核心代码实现如下:
@RequestMapping(“/get_list”)
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, Object> map =service.selectToPageRPC(service.readQuery(request),service.readConfig(request));
return map;
}
5.3.6 订单配送管理功能实现
管理员订单配送管理功能通过LogisticsDeliveryController的get_list方法监控配送进度。管理员可查看所有处于配送状态的订单,对配送超时订单进行标记处理,联系配送员了解情况,必要时重新分配配送任务。订单配送管理界面如图5-28所示。
图5-28订单配送管理界面
核心代码实现如下:
@RequestMapping(“/get_list”)
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, Object> map =service.selectToPageRPC(service.readQuery(request),service.readConfig(request));
return map;
}
5.3.7 资讯管理功能实现
资讯管理功能由ArticleController的add、set、del方法实现。管理员发布新闻资讯时调用add方法写入文章表,设置文章分类、标题、封面与正文内容。管理员可编辑已发布的资讯或删除违规内容,资讯在用户端新闻资讯页面展示。资讯管理界面如图5-29所示。
图5-29资讯管理界面
核心代码实现如下:
@PostMapping(“/add”)
@Transactional
public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
Map<String,Object>addMap=service.readBody(request.getReader());
if (addMap.get(“title”)==null){
throw newIllegalArgumentException(“标题不能为空”);
}
this.service.insert(addMap);
returnsuccess(1);
}
5.3.8 通知公告管理功能实现
通知公告管理功能由NoticeController的add、set、del方法实现。管理员发布公告时调用add方法写入notice表,设置公告标题与正文内容。管理员可编辑公告信息或删除过期公告,公告在用户端通知公告页面按时间倒序展示。通知公告管理界面如图5-30所示。
图5-30通知公告管理界面
核心代码实现如下:
@PostMapping(“/add”)
@Transactional
public Map<String, Object>add(HttpServletRequestrequest) throwsIOException{
Map<String,Object>addMap=service.readBody(request.getReader());
if (addMap.get(“title”)==null){
throw newIllegalArgumentException(“标题不能为空”);
}
this.service.insert(addMap);
returnsuccess(1);
}
5.3.9 权限管理功能实现
权限管理功能通过AuthController和UserGroupController实现。管理员可设置不同用户组的权限范围,控制各角色对功能模块的访问权限。系统在用户登录时根据用户组加载对应菜单与操作按钮。权限管理界面如图5-31所示。
图5-31权限管理界面
核心代码实现如下:
@RequestMapping(“/get_list”)
public Map<String, Object>getList(HttpServletRequestrequest) {
Map<String, Object> map =service.selectToPageRPC(service.readQuery(request),service.readConfig(request));
return map;
}
第六章 系统测试
6.1 测试目的
测试工作第一要义就是检验系统功能实现是否符合需求规格说明书的要求,保证用户注册登录、在线订餐、订单支付、配送跟踪等主要功能能按照设计要求正常工作。经由测试得知系统里潜藏的毛病和逻辑错误,包含前端交互出现异常、后端业务执行失误、数据保存出错等情形,在系统正式发布之前全部解决。测试的又一主要目的就是考察系统在各种操作环境下稳定性和容错性,检验异常输入、并发操作、网络中断等边界情况下的系统行为是否符合预期。通过系统化的测试活动收集缺陷数据,分析问题分布特征,为后续系统优化与维护提供依据,确保交付的软件产品满足质量要求[19]。
6.2 测试方法
系统测试用黑盒测试和白盒测试相结合的方式进行。黑盒测试侧重于对功能层面的正确性进行测试,按照需求文档来设计测试用例,对用户注册登录、商品浏览、购物车管理、订单生成、支付流程、配送跟踪等主要业务流程进行全面的验证,看输入和输出是否符合预期。白盒测试主要是对订单状态机转换、库存扣减一致性和权限拦截校验等关键业务逻辑进行代码层面的路径覆盖测试,即考察订单状态机转换、库存扣减一致性以及权限拦截校验等核心方法的分支覆盖率情况。测试过程使用等价类划分和边界值分析技术设计测试数据,对异常输入场景做充分的验证,保证系统在错误数据传入的时候可以给出明确的提示信息而不是程序崩溃。测试环境与开发环境保持一致,使用MySQL数据库存储测试数据,每次测试执行前恢复数据至初始状态以保证测试用例的可重复性[20]。
6.3 测试内容
商品购买测试旨在验证用户从商品浏览到发起购买请求这一过程的业务正确性,确保商品信息展示完整、购买入口有效、购买数量限制准确执行。商品购买测试如表6-1所示。
表6-1商品购买测试用例表
| 商品详情展示 | 进入商品详情页面 | 商品名称、价格、库存、图片完整显示 | 符合预期 |
| 购买数量验证 | 输入超出库存的数量后提交 | 系统提示库存不足无法购买 | 符合预期 |
| 立即购买跳转 | 点击立即购买按钮 | 跳转至订单确认页面并携带商品信息 | 符合预期 |
在线订餐测试围绕用户从选择菜品到生成订单的完整流程展开,重点验证菜品筛选、规格选择、订单信息汇总与订单提交各环节的数据流转正确性。在线订餐测试如表6-2所示。
表6-2在线订餐测试用例表
| 菜品分类筛选 | 选择不同菜品分类进行筛选 | 页面仅展示所选分类下的菜品 | 符合预期 |
| 菜品规格选择 | 为菜品选择不同规格 | 价格随规格变化同步更新 | 符合预期 |
| 订单信息汇总 | 确认订单时核对菜品信息 | 订单详情页显示菜品名称、数量、总价 | 符合预期 |
| 订单提交成功 | 填写收货地址后提交订单 | 系统生成订单记录并跳转支付页面 | 符合预期 |
购物车管理测试聚焦用户对购物车内商品的增删改查操作,验证商品加入购物车、数量修改、商品移除及总价计算等功能是否符合业务预期。购物车管理测试如表6-3所示。
表6-3购物车管理测试用例表
| 添加商品至购物车 | 在商品详情页点击加入购物车 | 购物车列表中新增对应商品记录 | 符合预期 |
| 修改购物车数量 | 修改购物车内某商品数量 | 商品总价与购物车总价同步更新 | 符合预期 |
| 移除购物车商品 | 点击购物车内某商品删除按钮 | 该商品从购物车列表中移除 | 符合预期 |
| 清空购物车 | 全选后点击删除或清空操作 | 购物车列表清空且总价归零 | 符合预期 |
订单支付测试围绕订单生成后支付环节的业务逻辑进行验证,确保订单状态变更、支付金额核对、支付结果反馈等环节正确执行。订单支付测试如表6-4所示。
表6-4订单支付测试用例表
| 待支付订单展示 | 进入订单列表查看待支付订单 | 待支付订单显示待付款状态 | 符合预期 |
| 订单金额核对 | 进入支付页面核对订单金额 | 支付页面显示金额与订单总价一致 | 符合预期 |
| 支付成功状态更新 | 完成支付操作后返回订单列表 | 订单状态变更为待发货 | 符合预期 |
| 支付失败处理 | 支付过程中取消或关闭窗口 | 订单状态维持待付款不变 | 符合预期 |
订单管理测试针对员工处理用户订单的业务流程展开,验证订单查询、订单状态筛选、订单详情查看以及配送操作触发的正确性。订单管理测试如表6-5所示。
表6-5订单管理测试用例表
| 订单列表加载 | 进入订单管理页面 | 显示全部待处理订单列表 | 符合预期 |
| 按状态筛选订单 | 选择特定订单状态进行筛选 | 列表仅展示所选状态的订单 | 符合预期 |
| 查看订单详情 | 点击某订单详情按钮 | 显示订单商品信息与收货地址 | 符合预期 |
| 配送操作执行 | 确认订单后点击配送操作 | 订单状态更新为已配送并记录发货时间 | 符合预期 |
配送管理测试聚焦订单配送全流程,验证配送信息录入、配送状态跟踪、签收确认等环节的数据一致性与流程完整性。配送管理测试如表6-6所示。
表6-6配送管理测试用例表
| 配送信息录入 | 为待配送订单填写配送信息 | 系统保存配送员与发货日期信息 | 符合预期 |
| 配送状态更新 | 配送过程中更新配送状态 | 配送状态字段同步变更 | 符合预期 |
| 用户签收处理 | 用户确认收货后更新订单 | 订单状态变更为已签收 | 符合预期 |
| 配送记录查询 | 按订单号查询配送记录 | 返回完整配送详情与时间线 | 符合预期 |
用户管理测试围绕管理员对系统用户进行统一管控的业务需求,验证用户信息查询、用户状态调整、用户角色分配等操作的执行效果。用户管理测试如表6-7所示。
表6-7用户管理测试用例表
| 用户列表查询 | 进入用户管理页面 | 显示所有注册用户信息列表 | 符合预期 |
| 用户信息编辑 | 修改用户基本信息后保存 | 用户信息更新成功 | 符合预期 |
| 用户状态变更 | 将用户状态设置为禁用 | 该用户无法登录系统 | 符合预期 |
| 用户删除操作 | 删除指定用户账户 | 用户信息从列表中移除 | 符合预期 |
测试结论
经过测试得出如下结论,在对商品购买、在线订餐、购物车管理、订单支付、订单管理、配送管理、用户管理这7个主要的功能模块进行测试时,各项测试操作均能得到预期的结果。商品详情展示、购买数量校验、订单信息汇总、购物车数量更新、订单状态变更、配送信息录入、用户状态调整等主要的业务流程运行正常。系统在正常的操作路径以及异常的输入情况下都能给出预期的反馈,各个模块的测试结果与预期结果一致,没有出现程序崩溃或者数据不一致的情况。测试过程中记录的实际结果全部与预期结果吻合。
总结
伴随着餐饮行业的数字化转型不断推进,传统的电话订餐和人工接单模式由于信息传递效率低、订单准确率低以及用户体验差等问题,渐渐暴露出来许多不足。针对上述现实问题,本文设计并实现了一个基于微服务架构的外卖订餐系统,以满足用户、员工和管理员等各方面的需要,创建出一个一体化的在线订餐和管理系统。系统采用前后端分离的开发方式,把用户前台浏览购物、员工后台业务处理、管理员系统管控等功能模块有机地融合在一起,很好地解决了传统模式下信息滞后、流程割裂、沟通不畅等问题,达到了预期的设计目的。
按照软件工程的规范流程,依次进行系统需求分析、总体架构设计、功能模块划分、数据库结构设计、系统实现测试等工作。从技术上来说使用Vue框架来创建前端交互界面,后端用微服务架构实现业务逻辑拆分,MySQL数据库负责数据持久化存储,三者一起形成了一个清晰的分层架构。功能实现上包含用户端商品浏览、购物车管理、在线订餐、订单支付和配送跟踪的全部流程,员工端分类管理、订餐管理、订单处理、配送更新的全部业务操作,管理员端用户管理、权限分配、订单监控、内容发布的全部系统控制功能。各个模块之间用规范的接口来完成数据的交换,保证业务流程的连续性以及数据的一致性。
系统功能完整性、操作流畅性达到了预期的效果,但是实际运行中还存在着一些不足。支付模块使用的是模拟支付的方式,并没有对接真实的第三方支付接口,不能进行实际的资金流转测试。订单配送功能依靠人工录入物流信息,缺少同主流地图服务的联动功能,配送路径优化以及实时位置追踪的功能尚待完善。数据统计分析层面只给出基本的销售金额和数量图表,并没有使用更加深入的商业智能分析手段来支持运营决策。
对接支付宝或者微信支付官方接口,获取真实的支付能力,提高系统商业可行性。采用高德或者百度地图API给配送员提供路径规划、实时定位等服务,提高配送效率和用户体验。建立数据分析模块,用用户行为数据进行消费偏好挖掘和个性化推荐,给商家运营提供数据支持。本系统给中小型餐饮门店提供了一种自主运营的外卖方案,有较好的推广应用价值。
参考文献
[1] 吴昊,白俊鸽.基于MFC的餐饮点餐系统设计与实现[J].数码世界,2020,(02):47-48.
[2] 张圣筛,李云峰.基于Java Web的用户点餐系统设计与实现[J].现代信息科技,2025,9(03):96-104.
[3] 任建伟,丁莎.基于微信小程序的点餐系统设计与实现[J].电脑编程技巧与维护,2024,(05):77-80
[4] 张乐.高校食堂自助点餐系统设计与实现[J].电脑与信息技术,2024,32(02):51-53.DOI:10.19414/j.cnki.1005-1228.2024.02.009.
[5] 曾慧群.基于Android的智慧点餐系统设计与实现[J].现代信息科技,2023,7(14):15-19.
[6] 朱书彪.中职《Java程序设计》项目课程开发与实践[D].桂林:广西师范大学,2025:1-120.
[7] 秦冬.浅析Vue框架在前端开发中的应用[J].信息与电脑(理论版),2024,36(13):61-63.
[8] WanmoK ,ArchanaK .Moderating Role of Perceived Staff-Replacement Likelihood on Self-Ordering Kiosk Adoption: EvidenceFromthe Restaurant Industry[J].InternationalJournal of Technology and Human Interaction (IJTHI),2026,22(1):1-20.
[9] Cuento CC,PaduaDA ,BernardoJC ,et al. Enhancing the overall customer experience through simulation of hybrid ordering system in fast-food restaurants[J].AppliedOperations and Analytics,2025,1(1):1-23.
[10] KayaS ,SenGD .Investigation of consumers' online food ordering behavior with technology acceptance model[J].Foodand Humanity,2025,5100739-100739.
[11] ShaoW ,LiuK. Design and Implementation of Online Ordering System Based onSpringBoot[J].Journalof Big Data and Computing,2024,2(3)
[12] Tajuddin IIN ,AziyatulIzniN ,AliMA ,et al. CAMPUS ONLINE FOOD ORDERING SYSTEM USING CHATBOT IN UNIVERSITI SAINS ISLAM MALAYSIA[J].InternationalJournal of Advanced Research (IJAR),2024,12(8):
[13] 朱荣鑫,张天,黄迪璇.Spring Cloud微服务架构进阶[M].机械工业出版社,202301,1003.
[14] 王志亮,纪松波.基于SpringBoot的Web前端与数据库的接口设计[J].工业控制计算机,2023,36(3):51-53.
[15] 陈业斌.数据库原理及应用:MySQL版[M].北京:人民邮电出版社,2023:400.
[16] 李晓黎.SpringBoot+SpringCloud+Docker微服务架构开发实战[M].人民邮电出版社202112.
[17] 熊永平.基于SpringBoot框架应用开发技术的分析与研究[J].电脑知识与技术,2021,15(36):76-77.
[18] 马艳艳,吴晓光.计算机软件与数据库的设计策略分析[J].电子技术,2024,53(5):104-105.
[19] 胡劲.数据库信息管理系统的逻辑架构与功能设计探析[J].电脑知识与技术,2023,19(19):96-98.
[20] 赵聚雪,杨鹏,郑楚锋.软件测试管理与实践[M].北京:人民邮电出版社,2024:218.
致谢
时光荏苒,白驹过隙,当这篇毕业设计论文画上最后一个句号时,我的大学时光也即将落下帷幕。回望这段求学历程,心中感慨万千,谨以最诚挚的敬意,向所有陪伴与帮助我的人道一声感谢。
首先,我要衷心感谢我的指导教师。从选题、开题,到论文的撰写与修改,直至最终定稿,老师在每一个环节都给予了我细致而严谨的指导。老师治学严谨、学识渊博,在学术上对我严格要求,在生活中又给予我温暖的关怀,使我不仅在专业领域有所精进,更学会了如何以踏实的态度对待学问与人生。同时,我也要感谢导师,在实践环节中,导师以其丰富的工程经验,帮助我理解理论如何落地于现实场景,让我对所学知识的应用价值有了更深刻的体悟。
回顾本次毕业设计的创作过程,从初期的迷茫与困惑,到面对理论难点与技术瓶颈时的反复推敲,再到最终解决问题后的豁然开朗,这一路走来,每一步都见证了我的成长。大学四年,我从一个对专业知识懵懂无知的新生,逐步构建起较为完整的知识体系,这份完成学业的踏实与欣慰,将成为我未来前行路上最坚实的底气。
我还要感谢学院的所有老师与辅导员,正是你们在日常教学与管理中的辛勤付出,为我营造了良好的学习环境。感谢我的同窗好友与实验室伙伴们,那些在图书馆并肩奋斗的日子、在实验室里互相鼓励的时刻,都将成为我青春记忆中最温暖的片段。
最后,我要将最深沉的感谢献给我的父母和家人。你们的养育之恩、无条件的爱与默默的支持,是我能够安心求学、不断前行的坚强后盾。未来,我将带着这份感恩之心,脚踏实地,努力回馈社会,不负众望,不负韶华。




