鄂尔多斯市网站建设_网站建设公司_Oracle_seo优化
2025/12/26 16:04:44 网站建设 项目流程

1.研究意义以及研究现状

1.1研究背景

随着移动互联网的发展,越来越多的应用都能在移动设备上完成。人们使用移动设备可完成购物,外卖点单,以及通过在线支付软件完成订单。随着信息技术的快速发展,移动互联网服务已经逐渐成为主流,APP需要在移动端下载并占用一定的内存,而微信小程序依托于微信,无需安装和卸载,具有运行效率高、节省内存空间等特点。[1]

例如微信支付和支付宝。目前微信已经达成了一个生态化的局面。微信虽是一个通信软件,但是却集成了小程序,人们可以使用微信程序,从而不用去单独去下载应用。配合微信的支付,形成完美的生态。例如,可以使用微信的商品购物小程序,在微信上完成选购商品,支付结算的功能。加之微信的小程序开发工具高度的完善度,使得微信小程序开发变得容易。同时微信小程序也便于外卖商家推广自家的菜品,也方便用户了解到当前外卖餐品的各种信息。因此开发一个微信外卖小程序具有打通用户和商家窗口的意义。从开发技术的角度而言,微信小程序端的开发可以借助微信官方小程序的开发工具,从而达到良好的兼容性。另外微信小程序的开发主要是JavaScript和WXML,与SpringBoot框架的Java语言相比更接近前端开发,更容易上手。而在商家端,分为前端web网页端和后台端。因为目前java编程语言具有跨平台的完善生态。因此本次选用Java语言进行开发,另外借助SpringBoot框架进行开发,SpringBoot的优势在于可以快速配置,简化开发的特点。并且由于SpringBoot具有高并发的特性,可以承载大量的用户数据,因此选用SpringBoot框架开发相对合适。因此本次的基于SpringBoot的微信外卖小程序具有广阔的应用场景还有实现巨大商业价值的潜力。

1.2 国内外研究现状

目前国内已经有很多利用SpringBoot快速搭建管理平台的例子,例如使用SpringBoot以及微信小程序平台搭建医疗管理系统,使用SpringBoot构建电商平台,帮助农民打开商业销路,提高商业价值。通过SpringBoot的管理后台能够实时查看订单,具有订单管理、商品管理、以及实时发布优惠改变价格的功能。与此同时,国际研究者对于物联网技术的应用也进行了深入研究。如一项关于实时异常用电行为监测系统的研究便展现了如何利用物联网技术进行数据采集和处理。该研究中,通过使用NB-IoT技术定时传送采集到的电流、电压和功率数据至云平台,并运用XGBoost算法对用电行为进行学习与预测,最终实现了高效的用电监测。这种技术的边界拓展为SpringBoot在物联网领域的应用提供了新的视角。在一些其他的技术科研领域,例如农学,甚至可以通过人工智能配合SpringBoot实现农作物受灾分析,从而进行更好的防治。

综上所述,无论是在商业、医疗、能源监控还是高性能竞赛场景中,基于SpringBoot的应用都显示出了其灵活性和稳定性。这些研究成果不仅促进了相关技术的发展,也为微信外卖小程序这类生活服务平台的构建提供了宝贵的经验和参考。随着技术的不断进步,未来基于SpringBoot的微信外卖小程序将有望在功能丰富性、用户体验优化以及服务智能化等方面取得更大的突破。

2. 本文的研究内容和创新点

随着移动互联网技术的飞速发展,传统外卖服务逐渐向线上平台转移,微信小程序因其无需下载安装、使用方便的特点成为外卖行业新的增长点。基于SpringBoot框架开发微信外卖小程序不仅能够实现快速响应用户订单,还能提供实时更新和管理的功能,为商家和消费者构建一个轻量级、高效的订餐环境。

研究内容方面,本文将深入探讨基于SpringBoot框架的微信外卖小程序的整体架构设计,包括微信外卖小程序的系统设计与架构,分析并设计微信外卖小程序的前端用户界面,后端服务,数据存储以及推荐算法的集成。详细说明后端使用的技术框架的工作原理及其流程,包括如何有效地实现数据模型和业务逻辑。在数据存储方面,将研究如何使用数据库存储长期数据,例如用户信息,订单记录和菜品分类,讨论缓存的应用,例如使用内存中的缓存配合磁盘中的数据库实现快速读取,或者作为处理高并发请求的会话存储。在微信小程序中的美食推荐模块中,将会研究使用协同过滤算法为客户推荐菜品的方法,包括算法过程及其实现。以及研究推荐系统是如何通过分析用户历史数据和行为来进行菜品的推荐。本文中的潜在创新点在于将关系数据库和缓存结合使用,优化了数据读取性能,实现更快的响应。另外推荐算法也是一个亮点,采用协同推荐算法定制化推荐逻辑,相较于传统的推荐系统,可以更好反映客户偏好。

3.相关技术介绍

3.1 SpringBoot框架

SpringBoot是由Pivotal团队开发的,其设计的目的是简化创建Spring应用的初始搭建和开发过程[3]。SpringBoot框架是一个开源的Java平台,旨在简化创建可立即运行的Spring应用程序的过程。它继承了Spring框架的核心特性,同时通过提供自动配置、起步依赖和内嵌容器等功能,极大地简化了项目的搭建和开发过程。通常构建一个SpringBoot项目会遵循某些分层结构来实现组织代码,一般分为控制层、服务层、数据访问层、数据传输对象、领域模型以及辅助层。在控制层(Controller Layer)中通常由控制器组成,调用服务层来完成具体操作,并返回响应,在Spring Boot中,这通过使用注解来实现。在服务层中,包含业务逻辑,通常与数据访问层分离,以实现业务操作。在这一层中,会使用@Service注解来定义服务组件,并在其中编写业务逻辑。数据访问层主要负责与数据库进行交互,并提供数据查询和存储的机制。在Spring Boot项目中,通常使用Spring Data JPA或MyBatis等技术,并通过@Repository注解标识接口。数据传输对象(DTO)主要功能是用于在不同层之间传输数据的对象,它们通常封装了从客户端传来的数据,或是将要发送到客户端的数据。而在领域模型(Model)中包括了表示业务概念的实体(Entity)和值对象(Value Object)。它们通常通过@Entity注解标注,用于映射数据库表的结构。辅助层通常是提供一些辅助功能,例如安全验证。在Spring Boot应用的典型工作流程中,一个HTTP请求首先达到控制层,如果设置了过滤器(Filter)和拦截器(Interceptor),请求会先经过这些组件以确保数据传输的安全性。之后,控制层将请求数据封装至DTO并传递至服务层。服务层处理业务逻辑,可能涉及到领域模型的状态变更或验证,并调用数据访问层执行数据持久化或查询操作。数据访问层与数据库互动后,将结果反馈至服务层,后者可能进行进一步处理并将结果封装在DTO中回传给控制层。最后,控制层将DTO转换为HTTP响应,返回给客户端。

这种层次化的架构不仅有利于代码的解耦和重用,也简化了测试和维护工作。通过依赖注入(Dependency Injection),各层之间的协作更加紧密和高效。

3.2 微信小程序开发

在探讨微信小程序的开发相关技术时,不可忽视的是其在当前数字化生态中的重要地位。微信小程序作为一种轻量级的应用形式,依托于微信这一庞大的社交平台,为开发者提供了一个高效、便捷的应用开发环境。它允许用户在无需下载安装的情况下即时使用应用,极大地简化了用户获取服务的路径,同时也为商家创造了一个直接触达用户的通道。微信小程序的开发框架以JavaScript为基础,结合WXML(WeiXin Markup Language)和WXSS(WeiXin Style Sheets)这两种微信特有的标记语言和样式表语言,构成了其独特的开发体系。去掉了一些浏览器兼容性的复杂性。这种设计使得开发者可以更专注于业务逻辑的实现,而不必纠结于底层细节。在数据处理方面,微信小程序提供了丰富的API接口,包括但不限于网络请求、文件操作、位置信息获取等,这些接口为小程序的功能拓展提供了可能。同时,微信还提供了一套完整的登录授权机制,开发者可以通过微信的用户身份进行用户鉴权,进而实现个性化服务。

微信小程序的另一个显著特点是它的即用性。用户通过搜索或扫描二维码即可立即打开小程序,使用完毕后无需卸载,不占用手机存储空间,这种即走即用的特性使得小程序非常适合于快速消费场景,如餐饮外卖、电商购物等。

综上所述,微信小程序的开发集成了一系列优化用户体验的设计思想,从简化的前端标记语言到丰富的API接口,再到组件化的界面构建方式,都体现了微信在打造一个高效、便捷、易维护的应用生态系统方面的努力。对于基于SpringBoot的微信外卖小程序设计与实现而言,微信小程序提供的这套开发框架和工具将是构建用户友好界面和实现后端服务对接的坚实基础。

3.3MySQL

在构建基于SpringBoot的微信外卖小程序时,数据库技术扮演着至关重要的角色。数据库作为整个系统的信息存储与管理中心,其性能直接影响到小程序的响应速度和稳定性。选择合适的数据库技术对于提升用户体验和保障数据安全至关重要。由于MySQL源、软件体积小,安装及维护成本低,且能提供多种API接口等特点。[1]所以在这个项目中,数据库采用MySQL。关系型数据库依赖于结构化查询语言(SQL),这是一种广泛用于管理和操作数据库的语言。通过SQL,可以执行数据的增删改查操作,确保数据的一致性和完整性得到维护。

3.4 Redis

Redis 是一个开源的高性能键值数据库,通常被用作数据结构服务器。Redis 因其出色的性能、丰富的数据类型和原子操作而广受欢迎,在许多场景下都非常有用,尤其是作为缓存系统来减少数据库负载、提高应用响应速度

4.微信外卖小程序的系统分析

4.1可行性分析

本系统可行性分析包括技术可行性分析、经济可行性分析、操作可行性分析。技术可行性分析主要是分析本次使用的技术能否达到开发要求,能否使用这些技术实现系统功能。经济可行性分析主要分析所使用的技术工具成本大小,成本能否满足开发所需。操作可行性分析主要包括分析用户的操作是否简单方便,清晰易懂。

4.1.1技术可行性分析

本次使用java语言进行开发,java具有跨平台的优势。在各种操作系统上皆可运行,因此本次选用java语言开发便于上手,另外java中提供了丰富的库,降低了开发者的开发难度。本次开发使用的后端框架是SpringBoot框架,SpringBoot框架能够快速开发Web应用,能够更快实现业务逻辑,提高了开发的效率,降低了开发难度。数据库技术选用的是MYSQL和Redis,MYSQL是一个关系数据库管理系统,采用SQL作为查询语言,并以表格形式进行数据的存储。Redis是一种开源的内存中数据结构存储系统支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。Redis 被用作缓存、消息队列、会话存储等。从存储角度来看,MYSQL和Redis的区别在于SQL使用磁盘存储数据,而 Redis 主要使用内存存储数据,但也可以持久化到磁盘。MySQL 适用于存储大量结构化数据并支持复杂的查询操作,而 Redis 适用于高速读写、缓存、会话存储等场景。在这个系统开发中我们将MYSQL和Redis相互配合,Redis 作为 MySQL 的缓存层,提高读取速度,减轻 MySQL的负载。同时结合Redis 的实时特性,能够实现更快速的数据处理和响应,满足实时性要求较高的场景需求。外卖小程序是一个用户访问量大,实时性强的产品,因此选择MYSQL和Redis能够满足微信外卖小程序的数据存储需求。

4.1.2经济可行性分析

本次开发使用的硬件成本并不高,只需一台计算机就可实现。另外本次使用的开发工具,MYSQL、Redis以及idea开发工具均是免费开源,因此对于开发一个微信外卖小程序几乎可以忽略不计。经济上是完全可行的。

4.1.3操作可行性分析

微信小程序无需下载安装即可使用,极大简化了用户获取和使用小程序的步骤。用户可以清晰明了的完成下单支付,菜品查看,订单查看和地址管理。在商家端的后台管理页面,商家可以轻松就完成信息的修改、删除以及更新,无需学习,就可轻易上手。学习使用成本呢较低,因此这套系统操作是可行的。

4.2系统业务流程分析

本次外卖系统整个业务流程包括用户的注册登录(用户可以注册新账户或者登录已有账户,这其中包含安全验证机制)、浏览菜品(用户可以浏览不同的菜品并且可以查看推荐的餐品,并且可以对菜品进行收藏)、确认订单(用户在购物车中确认所选菜品以及地址进行订餐的确认)、商家接单(商家后台看到用户订单请求,接单并更新订单状态)、订单完成(用户取餐后完成订单,商家更新订单状态)、评价服务(用户对所点的菜品进行评价)。管理员端的业务流程主要有当用户下单后进行订单的管理以及通过地址管理查看用户订单选择的菜品以及地址是否正确。用户完成订单后评论,管理员可以查看用户的评论以及统计最新的用户数量、菜品数量、金额以及订单量。以下是本次系统的业务流程图:

图1:系统业务流程图

在各个管理模块中主要有查询信息、插入信息、更新信息、删除信息等操作。在更新的流程中,首先要接受需要过滤的参数,这些参数针对各个模块中的要求会不同。接着对于每个参数,要检查是否有效,例如参数是不是空白字符串或者为空。若参数不为空并且不是空白字符串,则按照参数进行过滤,反之则不进行参数过滤。过滤工作做完之后,服务将进行查询,查询完成后则返回成功信息以及满足过滤条件的信息。若查询不成功,则返回错误信息。查询的流程图如下:

图2:查询流程图

在信息的插入流程中,主要的流程主要可分为以下几步。首先就是需要接受要插入的信息,之后要对要插入的信息进行过滤。验证需要插入的信息是不是满足插入的条件。比如插入的信息是不是已经存在,插入的信息是否合法。若满足插入的条件,则将插入的信息存在数据库中。插入成功后返回插入成功的信息。反之则返回错误信息。以下是插入操作的流程图:

图3:插入流程图

在用户登录模块中需要有安全验证,验证用户的账号密码以及验证码的信息。保护用户的敏感信息,这里将进行安全性设计。这个安全性设计将在后文提到。在购物车的功能上,要确保购物车反应速度快,可以使用缓存机制,加快购物车的响应速度。后文也将提到购物车的设计方法。在用户收藏环节也将采用缓存机制,提高用户收藏这种临时、快速行为的响应时间。推荐功能可先从收藏以及评论数据作为数据集基础,之后通过算法生成推荐菜品列表。

4.3系统功能分析

针对微信外卖小程序开发,功能上可分为用户端和商家管理员端。用户端具有用户注册登录功能,在这个功能中,用户可以注册一个账号并登录系统,以便于管理个人信息。菜品浏览和搜索功能,用户可以查看餐厅的菜单,包括菜品名称、描述、价格等信息。用户端的点餐和定制功能中,用户可以查看购物车中所选中的餐品,可以进行数量修改或者删除菜品。在下单和支付中,用户可以进行地址的选择和支付。为了满足查看历史订单时间,还有订单历史和查看功能,用户可以查看过去的订单记录,包括订单详情和地址信息。在管理员端具有用户信息管理(包含查询、删除、更新等功能)、订单管理(主要为订单的查询以及修改更新)、菜品管理(包含菜品信息以及分类信息)、用户管理、评论功能、推荐功能以及统计功能(统计用户数量、菜品数量、订单数量、金额)。以下是管理员端的用例图:

图4:商家用例图

以下是用户用例图:

图5:用户用例图

5.外卖小程序的系统设计

在系统设计阶段,着重考虑了系统架构设计、系统功能设计与安全性优化。在这个系统中将围绕SpringBoot中的控制器层、服务层以及持久化层进行架构设计。在前边的SpringBoot的相关技术介绍中已经讲诉了本次使用的SpringBoot框架各个层的配合流程,下面将用一张SpringBoot的架构图,更清晰的展示SpringBoot的系统架构。以下是系统架构图:

图6:系统架构图

5.1控制器设计

首先将进行控制器层的设计,这个负责处理用户请求,在HTTP的请求中,根据这个微信外卖小程序本身的特点,将把请求分为常用增删改查等功能。在SpringBoot中HTTP中的请求是用控制器Controller来处理。请求处理的流程一般是这样的,首先客户端发送HTTP请求至服务器,SpringBoot中的DispatcherServlet接收到请求后,根据映射找到对应的控制器方法。控制器方法处理包含在请求中的数据并进行业务处理,最后控制器方法返回响应。根据这个小程序的功能,将设计以下模块,根据设计的模块来进行控制器层的设计。这个小程序的功能模块图如下:

图7:功能模块图

因此在控制器层方面将设计以下几个控制器,分别是验证码控制器负责响应客户端传来的验证授权请求,地址管理控制器负责处理用户对地址的增加、更新、删除、查询请求。评论控制器负责响应用户评论的增加、更新、删除、查询请求。同时评论功能也是后面推荐功能的基础。菜品分类控制器,主要用于添加菜品分类信息、更新菜品分类信息、删除菜品分类信息、批量删除菜品分类信息、条件查询菜品分类信息、分页查询菜品分类信息以及根据菜品分类ID查询信息。菜品控制器,主要负责响应的请求有:添加、更新、删除、条件查询、分页查询、批量删除菜品信息、根据ID查询信息和根据用户ID查询菜品信息。订单控制器主要负责的请求有生成订单、修改订单订单状态、改变删除订单、批量删除订单信息、获取用户订单以及分页条件查询订单。除了上述提到的控制器,还有算法控制器,负责算法接口。控制器的分类图如下:

图8:控制器图

5.2系统功能业务逻辑设计

在系统功能设计方面,功能的业务逻辑主要是由SpringBoot中的Service层提供的,接下来将展示Service中的设计。在Service层中主要有以下要处理的业务逻辑:首先是地址管理的服务层设计。主要要处理的业务逻辑有查询地址,该方法通过ID查询单个地址记录。如果找到,就返回地址对象。倘若没找到,就返回空。获取单个地址的设计思路主要是通过尝试调用查询地址的方法,将结果包装在结果对象中,这是一个用于同意响应格式的对象。查询多个地址方法是提供一个更复杂的查询,允许通过ID、接收人姓名、电话和用户ID进行过滤;插入地址,该方法用于添加新的地址记录。他首先检查必要的字段是否存在,然后更新记录并保存到数据库中;删除地址,该方法通过将地址状态设置为0的逻辑删除地址,并不是从数据库中完全删除记录。分页查询地址方法提供了分页功能,允许用户根据给定的页码和每页记录数来查询地址。批量删除地址方法则是允许批量删除地址,通过遍历ID列表并逐个更新状态。这是地址管理的业务逻辑分类图:

图9:地址业务图

在购物车项目业务逻辑设计的思路主要分为:添加商品到购物车(Insert方法)、获取用户购物车的商品(Get Cart Items方法)、获取所有用户的购物车商品(Get All Users Cart Items方法)、从购物车中移除商品(Remove From Cart方法)。首先是添加商品到购物车方法设计,设计思路主要是当用户想要将某个菜品添加至购物车中,就调用插入方法,将数据插入进入。实现添加的效果。这个方法首先会通过使用菜品信息服务中的获取产品价格的方法来得到产品的价格。将信息插入以及获得价格之后,创建一个购物车中的对象,这个对象包含了产品ID、数量以及价格的属性。然后使用Redis中的hset方法,这个方法的作用是用于将哈希表中的字段赋值。应用到我们的设计中就是用于将购物车项中的产品对象,存储至Redis中,这样,每个用户的购物车都被存储在一个以其用户ID标识的哈希表中,而每个产品的购物车就是作为哈希表中的一个字段。存入缓存的操作成功后就返回结果对象。假如出现异常情况,返回失败操作的结果对象。获取购物车的商品方法的设计思路在于使用Redis中的hmget方法,以"cart:" + userId作为键从Redis中获取购物车项。遍历返回的购物车项,并将它们存到一个HashMap中。返回一个包含这些项的成功的ResultVo对象。如果获取过程中发生异常,返回一个表示失败的ResultVo对象。获取所有用户的购物车商品方法的设计思路主要是使用redisUtil.keys方法找到所有以"cart:"作为前缀的键。对于每个找到的键,提取用户ID,使用redis中的keys方法获取相应的购物车项。将每个用户的购物车项存入一个大的Map中,用户ID作为键。返回一个包含所有购物车项的成功的结果对象。如果获取过程中发生异常,返回一个表示失败的结果对象。从购物车中移除商品方法设计为使用redis的hdel方法(Redis中的删除命令),以cart+userid作为主键,productId作为字段来从Redis的哈希表中删除购物车项。以上诉方法相同,删除操作成功就返回成功结果对象,否则就返回失败结果对象。购物车中这几个方法主要应用了Redis作为缓存机制提供了购物车服务中的基本操作,包括添加商品到购物车、查看一个或所有用户的购物车内容以及从购物车中移除商品。每个操作都有异常处理,保证了服务的健壮性。返回结果使用ResultVo对象,提供了一致的接口响应结构。购物车方法的分类图如下:

图10:购物车业务图

对于评论功能的业务设计主要分为:获取评论、查询评论、插入评论、检查用户是否对一个订单进行过评论、更新评论、添加评论、删除评论、统计评论、推荐菜品等功能。其中推荐菜品用到了协同推荐算法。协同推荐算法主要是通过分析大量用户的历史行为数据,如购买历史、评分记录或在线行为等,来预测特定用户可能感兴趣的项目或内容。协同过滤算法基于这样一个假设:如果用户A在过去喜欢过的项目和用户B喜欢的项目相似,那么用户A也有可能对用户B喜欢的其他项目感兴趣[5]。本次的外卖推荐算法主要是通过用户对菜品的评分进行推荐,系统会优先将评分高的菜品推荐给用户。首先来阐述获取用户评论的业务方法设计,它的设计思路在于通过唯一的标识符,这是将用户ID设为唯一标识符,因为用户的其他字段可能相同。当这个方法接受到唯一的标识符后,调用查找方法,找到这个id对应的评论。若是处理成功,则与上文讲诉到的地址管理模块中的处理结果类似,返回成功结果对象,反之则返回失败结果对象。接下来的方法设计将着重描述重要处理步骤,结果处理方式与之前类似,便不在阐述。接下来是添加一个用户评论的方法业务设计,这点上与插入相似。主要思路为:先检查用户传来的评论参数是否合法,若是合法,就查找这个评论对应的订单。检查这个订单是否存在,这里可以使用订单的唯一标识符ID进行查找。查找成功则进行下一步操作即设置评论的信息,这里的信息包括评论内容、评论的用户ID、订单号ID以及对应的菜品。这样其他用户能够更好的分辨评论质量,做出合理的判断。前面检查用户是否进行过评论可以采用查找用户ID、菜品ID、以及订单ID进行辨别。如此一来,保证了数据一样,避免系统资源的冗余。统计评论的方法步骤的设计通常需要获取数据,在这个功能中可选取一个唯一标识,比如说ID以及相关联的用户ID、评论内容以及评论时间。这样一来可以确保评论不会出现重复冗余,确保数据的合理性。获取数据之后,进行检索,计算评论的总数。在这个系统中,为了使得推荐算法更加合理,将在评论统计这个功能中使用过滤方法,为后面的推荐算法提供合理的数据。在这个过滤方法中逻辑主要是筛选评分为5的评论,并计算评论为5的评论数。过滤完毕之后,计算所有的有效评论数以及评论总数存储在映射中。在推荐菜品功能中需要用的数据有用户评分数为5的数量以及用户的收藏数据。在统计评论功能的业务设计中讲到,将评分为5的评论存入映射当中,在算法推荐中需要用到这部分数据,并且还将获取用户的收藏数据。将这些数据添加到推荐系统当中。最后根据用户ID获取推荐列表。

以下是评论模块中的功能图:

图11:评论模块图

菜品的模块设计中主要的业务逻辑有菜品的查询、菜品的添加、菜品的删除、菜品的统计、库存情况更新等功能。菜品信息中包含了菜品的ID、菜品的价格等信息。菜品模块主要是提供主要方法为其他模块服务,例如订单模块中获取菜品的库存情况,就调用菜品模块中的查询方法。当订单完成之后,就会调用菜品模块中的删除以及更新功能,进行库存的更新。在购物车模块中,调用菜品模块中的方法进行增删改查。总的来说菜品模块主要是为其他模块进行服务。

在订单模块的设计中,除了常规的订单数据的增删改查以外,重要要保证数据的一致性。拿创建订单这个实例来说明即是在一个订单中首先最重要的就是检查库存的情况,如果不检查库存,用户可能一直下单,可能造成后台数据的溢出错误。因此可以调用用户订单中的查询方法,通过查询获取用户想要的菜品。这里查询接受的参数是菜品的ID,因为这个菜品ID是唯一标识。这样可以保证查询结果正确。如果接收菜品的名称,可能会存在连两个名字相同的菜品。查询的目的只要是为了确保菜品的数量是否小于用户所需要的购买数量,倘若不足以满足用户的数量要求,要及时返回结果。接下来,在库存数量满足用户需求的情况下,将创建一个新的订单,生成一个具有创建时间、用户ID、地址、评论状态的订单信息。创建完订单之后,要对用户的订单进行账目计算,这里调用菜品服务中的查询方法,获取到菜品的价格以及数量。根据总价等于数量与其价格的乘积,计算出用户的账目。最后保存订单,存入数据至数据库中。当用户点完餐后,将进行地址距离计算,计算用户收到餐品所需时间,这里调用百度地图的地址方法来进行计算。如果用户超出地址显示无法配送,反之显示配送时间。做完这些步骤后,更新库存。

用户的注册登录的后台业务主要有获取当前用户信息、添加用户信息、更新用户信息、删除用户信息、条件查询信息、条件查询信息、根据用户ID查询信息、用户注册、重置密码、批量删除用户信息等功能。增删改查与前面模块的设计思路相似,不同点在于在用户信息的更新操作中会使用Springsecurity 里面自带的加密方法 BCryptPasswordEncoder,进行数据库中用户信息密码的加密。以下是它的功能模块图:

图12:用户登录图

5.3系统安全性设计

在设计系统的安全性方面,将使用JWT(JSON Web Token)[5],以及使用自定义的拦截器CaptchaFilter,保证用户信息的安全传输。JWT主要负责验证正确的用户身份,自定义拦截器核心作用在于确保只有在输入了正确的验证码后用户才能继续进行登录操作。如果验证码错误,就会立即中断登录流程,并给用户一个错误提示。JWT一般是由头部、载荷、签名构成。在JWT的功能模块设计中,得先取得用户前端请求头中的JWT令牌。接着就是查看令牌是否存在,有效的话就进行下一步操作,那就是验证令牌是不是有效的。验证是否有效这一步要确保JWT是不是由服务器进行发送,并且签名是在有效期内才可以。如果是无效或者过期,就抛出异常。拒绝请求。若是有效,将进行用户认证步骤。前面已经介绍了用户模块的业务逻辑功能设计,在用户模块功能设计中有存放用户信息的方法。调用用户信息,看用户名与用户信息是否匹配。匹配成功后,就创建一个令牌,这个令牌里面含有用户名以及签证还有用户的授权信息。这里用户的授权信息也是通过调用用户模块中的获取用户信息的方法取得的。做完这些之后,将认证信息放入到安全上下文中。这样其他应用就知道这个JWT已经是被安全验证了。验证用户的账号密码之后,就进行验证码的验证。这一步主要是为了防止机器人登录。验证码部分由自定义拦截器负责。在自定义拦截器中先检查请求的URL是否是登录界面的URL以及方法是否匹配登录请求,匹配就验证请求中的验证码。验证验证码这一步中会从请求中获取名为code的参数值,这个参数就是用户提交的验证码,当然还要得到token这个唯一标识符的参数值,这个token是用来将提交的验证码与服务器存储的验证码进行匹配的。获得参数之后检查参数是不是空,这里code和key都要进行检查,查看这两个参数是不是为空或者空字符串。这里的key是与code相关联的唯一标识符。当请求参数检查符合验证条件之后,就进行验证码匹配。在这一步中,将从Redis哈希表获取key相对应的code验证码。获取code验证码可以使用Redis中的hget命令,这个命令可以获取存储在哈希数据结构中的元素值。匹配成功之后就是用hedel命令从缓存中删除验证码相对应key,因为要保证验证码只出现一次。保证数据传输的安全性。以下自定义拦截器的流程图:

图13:拦截器图

5.4系统数据库设计

在本次系统开发中进行外卖系统的数据库设计。数据库负责存放各个模块的数据。数据库设计包括两部分,一部分是数据库中的表。另一部分是数据在数据库设计先要进行逻辑设计,数据库的逻辑结构设计是将E-R图转换成数据模型。[6]在设计数据库表之前先引入数据库表的常用概念。第一是主键,主键是数据库表中的唯一标识符。[7]然后是属性,他是指与实体相关的数据项[8],比如用户的id、菜品的id。实体指的是明确区分的任何数据对象,如用户、订单、菜品。通常对应数据库中的一张表。外键是一个字段,它链接到另一个表的主键。[9]例如在订单表中通过菜品数量与菜品信息表连接。这个菜品数量就是一个外键。关系指的是定义两个实体间的联系,比如一对一、多对多、一对多。在本次系统开发中,设计了地址表、评论表、菜品表、菜品分类表、用户信息表以及用户收藏表。通过分析整个系统的结构。得出各个实体间逻辑关系。以下是数据库的ER图:

图14:系统E-R图

在用户信息表中,主键是用户ID其他属性为用户名、用户的密码以及性别;在地址表中主键为地址ID,外键为用户ID,用户ID关联到用户信息表。其他属性包括地址、联系电话、创建时间、收货人姓名;在订单表中,主键为订单ID、外键为用户ID 关联到用户信息表、地址ID 关联到地址表。其他属性包括总价、评论状态、订单状态、菜品名称、创建时间以及更新时间;在菜品信息表中,主键为菜品ID。其他属性为菜品名称、菜品描述、价格、库存;评论表中,主键为评论ID。外键为用户ID关联到用户信息表、菜品ID、订单ID关联到订单表。其他属性为评论内容、评论时间、评论分值;在菜品分类表中,主键为分类ID、分类名称。其他属性为创建分类时间、分类描述以及更新时间;在用户收藏表中,主键为收藏ID,外键为用户id关联到用户信息表、菜品ID负责关联到菜品信息表。其他属性为收藏时间;推荐表中,主键为推荐id、其他属性为菜品id和评分值以及用户id以下是各个表的库表结构。

以下是用户信息表:

表1:用户信息表

名称数据类型长度是否可为null是否为主键备注
user_idint11用户id
usernamevarchar255用户名
passwordvarchar255用户密码
sexchar1用户性别

以下是地址表:

表2:地址信息表

名称数据类型长度是否可为null是否为主键备注
address_idint11地址id
user_idvarchar255用户id
phonevarchar255取餐号码
created_timechar1创建时间
receiver_namevarchar255收件人姓名
localizationVarchar255地址

以下是订单表:

表3:订单信息表

名称数据类型长度是否可为null是否为主键备注
order_IDint11订单id
user_idvarchar255用户id
dish_namevarchar255菜品名称
created_timedatetime6创建时间
update_timedatetime6更新时间
address_idvarchar255地址id
dish_idint11菜品id
total_pricedecimal19总价
statusint11订单状态
comment_statusint11评论状态

以下是菜品信息表:

表4:菜品信息表

名称数据类型长度是否可为null是否为主键备注
dish_idint11菜品id
dish_namevarchar255菜品名
descriptionvarchar255菜品描述
pricedecimal19菜品价格
stockint11菜品库存

以下是评论表:

表5:评论表

名称数据类型长度是否可为null是否为主键备注
comment_idint11评论id
contentvarchar255评论内容
updated_timedatetime6更新时间
user_idint11用户id
dish_idint11菜品id
order_idint11订单id
rateint11评分值

以下是菜品分类表:

表6:菜品分类表

名称数据类型长度是否可为null是否为主键备注
category_idint11分类id
category_namevarchar255分类名
category_descriptionvarchar255分类描述
created_timedatetime6创建时间
updated_timedatetime6更新时间

以下是用户收藏表:

表7:用户收藏表

名称数据类型长度是否可为空是否为主键备注
favourite_idint11收藏id
created_timedatetime6收藏时间
dish_idint11菜品id
user_idint11用户id

以下是推荐表:

表8:推荐表

名称数据类型长度是否可为空是否为主键备注
recommend_idint11推荐id
dish_idint11菜品id
user_idint11用户id
rateint11评分值

数据库的交互设计上,借助SpringBoot框架提供的JPA(Java Persistence API)[10],可以实现对象关系映射(ORM),从而简化数据库操作代码,提高开发效率。

6.系统实现

根据前面的业务功能设计以及数据库设计,通过编写代码实现常用功能。下面将展示实现实现后的效果。

图15:系统前台图(需要用户输入账号密码以及验证码进行安全验证)

图16:系统前台菜品图

上图展示为前台菜品信息图,用户可以查看菜品的价格及其信息。

图17:系统前台菜品详情图

上图展示为菜品的详情。包括其他用户的评论,以及可以在此页面进行下单收藏

图18:订单图

上图为订单图,用户下单后可以看到订单信息。

图19:订单状态图

上图为订单状态图,下单后可以查看订单状态。

图20:美食推荐图

上图为推荐功能图,可以从中看到推荐的菜品。

图21:订单管理图

上图为管理员订单管理图,可以进行订单的修改以及状态更新。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询