springboot美食街管理系统12166-计算机课程设计、毕业设计

本系统基于Spring Boot + Vue.js + MySQL实现,面向普通用户、商家和管理员三类角色,提供美食浏览、购物车、订单管理、店铺活动发布、卫生安全审核、在线沟通及协同过滤推荐等功能。系统采用前后端分离架构,后端通过RESTful API提供服务,前端使用Vue构建响应式界面,数据库采用MySQL存储业务数据,并集成协同过滤算法实现个性化美食推荐。全文涵盖需求分析、系统设计、模块实现与功能测试,突出信息化管理对提升美食街运营效率的价值。

第一章 绪论

1.1 研究背景与意义

  美食街是城市餐饮消费的主要聚集地,管理效率的好坏直接关系到消费者的体验以及商户的收益。传统的管理模式依靠纸质登记、电话联系、现场检查等方式来传递信息,信息传递的链条很长并且更新速度慢。郭小钰等[1]就商业场所的管理中出现的合规性问题展开研究,认为由于信息化手段缺乏会造成监管上的漏洞。移动支付和线上消费习惯已经普及,消费者期望用手机完成店铺查询、活动获取、在线下单等一系列的操作。汪晓杉[2]从数字化的角度出发,论述了城市管理同商业形态发展之间的联系,认为技术介入可以提高管理效率。韦泉等[3]就沿街商铺的消防监督管理工作进行论述,从侧面表现出传统管理方式对于实时性的欠缺。目前美食街没有形成统一的信息平台,各个商家各自发布活动信息、订单记录、配送跟踪等,不能形成系统的管理。此种状况同消费者即时性、便捷性需求产生矛盾。创建集成化管理系统可以整合分散的资源,把线下业务流程迁移到线上,达到信息共享、操作协同的目的,具有很强的现实紧迫性。

  该系统的设计和实现有诸多研究意义。从操作效率来说,系统把订单生成、支付确认、配送状态更新这些环节自动化地完成,缩减了人工核对的工作量,削减了信息错漏的危险。商家自己可以管理自己的店铺活动和美食信息,管理员对商品的分类和卫生安全信息进行审核,从而形成规范化数据管理的过程。分层操作模式减轻了集中管理的压力,又给商户留有自主经营的余地。从行业发展角度来说,系统给美食街这类社区商业体赋予了可以复用的数字化解决办法,促使传统街区朝着智慧商业转变。系统集成在线咨询、用户反馈功能,可以搭建起消费者和商家之间互相交流的平台,从而提高服务质量、改善用户体验。该系统在解决实际管理问题的时候,也给其他类似商业综合体信息化建设给予了参照途径。

1.2 国内外研究现状

  国内美食街管理相关平台是从信息展示向业务融合发展的过程。早期门户时代是以发布资讯为主,商家信息由编辑录入后单向发布,用户不能进行互动。垂直社区兴起之后,美食论坛和点评网站才开始加入用户评论、评分的功能,互动性也得到了提升。韦泉等[3]认为商铺管理要规范化流程,这是对单一信息展示模式的否定。移动互联网的普及使得专业数据系统得以发展起来,其中包含了一些带有订单管理以及配送跟踪的平台。陈谦益等[4]就高校后勤商铺的标准化管理状况展开分析,并提出信息化手段对于管理规范化所起到的作用。罗基庆[5]研究商铺租赁问题,涉及到信息不对称给经营带来的影响。刘奕星[6]用美食街做研究对象,研究从城中村到商业街的转变途径。王涵[7]论述商铺租赁权担保,从侧面反映出商业空间经营过程中信息记载的价值。这些研究是从不同的角度来说明美食街管理信息化的必要性。

  国外美食街相关实践重在数据驱动和社会性结合。早期的社交媒体平台可以允许用户产生内容和店铺评价,从而形成一种以口碑为基础的信息传播方式。由于实时互动技术不断的发展,一些商业服务平台也加入了即时通讯和动态数据更新的功能。Ping和Huanming[8]对智能教学场景中应用进行了研究,其中包含在线交互机制的设计。Mooka公司宣布开发AI辅助的软件来实现店铺的管理,体现出商业运作里智能化工具的应用走向[9]。Prime Automation公司推出电商店铺管理解决方案,包含订单处理和库存跟踪等功能[10]。Zhen等[11]对日本街头摊位的管理以及文化设计进行研究,给美食街运营提供了一个国际化视角。Cettina和Aziz认为可以利用人工智能技术来实现大规模商铺管理,具有数据驱动管理的前沿性。国外的实践证明,把社交互动和业务数据打通可以提高平台的活跃度和管理效率,为美食街管理系统的设计提供一定的参考。

1.3 研究内容

  本文主要的工作就是设计和实现基于Spring Boot的美食街管理系统。研究从需求分析开始,找出普通用户、商家用户、管理员这三种角色的功能边界和操作流程的不同。在此基础上进行系统的架构设计,确定使用前后端分离的模式,前端使用Vue框架来搭建交互界面,后端使用Spring Boot提供RESTful API服务。模块实现阶段主要是对用户管理、美食信息管理、购物车与订单处理、在线沟通、配送跟踪、店铺活动管理、卫生安全记录等各方面的功能进行编码。数据设计遵照关系型数据库规范化准则,用MySQL来保存用户的账户信息,商品信息以及订单记录这些业务数据。测试验证阶段使用黑盒法对重要的业务流程展开功能检验。研究侧重点是创建起包含消费者选购、商家经营、平台监管这三个方面完整的业务闭环,不会去处理高并发场景的改善以及分布式部署。最后得到可以运行的系统原型,即前端代码、后端接口、数据库脚本、设计文档等。整体采用前后端分离开发方式,用接口文档来规定交互规则。

第二章 相关技术介绍

2.1 Spring Boot框架

  Spring Boot框架是以Spring生态系统为基础创建的,利用自动配置来简化传统Spring应用的初始化过程。该框架用约定优于配置的思想把大部分的基础配置内置到启动器里,开发者只需要添加相应的依赖就可以得到预设的功能。Spring Boot启动时会根据类路径中的jar文件自动创建Spring容器配置,不用手动编写XML或者注解配置。框架内部嵌入Tomcat、Jetty等Servlet容器,打包生成的jar文件可以直接运行,简化了部署流程。启动器模块把相关依赖合在一起,引入spring-boot-starter-web就可以得到构建Web应用所必需的全部库。美食街管理系统商品信息查询操作在调用相关的接口时,Spring Boot通过DispatcherServlet接收请求并转发到控制器的方法上[13]。自动配置机制根据依赖判断是否需要创建DataSource实例,连接池配置可通过application.properties文件修改。框架提供Actuator模块用来监控应用的运行状态,暴露健康检查、信息端点等接口。业务逻辑实现时,Spring Boot的事务管理注解把数据库操作的事务边界声明简化了。

  Spring Boot的starter机制降低了项目依赖管理复杂度。开发者引入某个starter之后,框架会自动配置相关的组件,不需要考虑版本兼容性问题。对于美食街管理系统的订单处理模块,事务边界设在服务层的方法上,用AOP代理来实现事务的开启和提交。条件注解可以配置只在某个类存在或者某个属性满足时生效,这样就可以使同样的代码适用于不同的运行环境。框架的事件监听机制可以实现应用启动时自定义处理,即ApplicationRunner接口可以在容器启动之后执行数据初始化的操作。Spring Boot的配置绑定功能将配置文件中的属性映射到Java对象,通过@ConfigurationProperties注解实现类型安全的配置读取。对于REST风格接口的开发,框架用@RestController注解把请求处理的结果直接写入响应体。@ControllerAdvice在错误处理上可以统一异常的响应格式,保证API返回结构的统一。

2.2 Vue前端框架

  Vue是一个用于创建用户界面的渐进式框架,它的核心库只关注视图层。该框架使用响应式数据绑定,数据对象发生改变的时候,视图层就会自动更新。Vue使用虚拟DOM技术减少对真实DOM的直接操作次数,在数据变化的时候先计算出最小的更新范围,然后批量执行DOM操作。模板语法是基于HTML的扩展,开发者用指令来声明性地把DOM和底层数据联系起来。美食街管理系统的商品列表页面在渲染时,Vue会对模板中的插值表达式进行解析,建立起数据和视图之间的依赖收集关系[14]。组件系统可以将界面拆分成独立的、可复用的单元,每一个组件都有自己的模板、逻辑和样式。单文件组件把模板、脚本、样式放在同一个.vue文件里,这样的组织方式可以提高代码的可维护性。Vue的生命周期钩子函数给组件创建、挂载、更新、销毁等各个阶段提供了执行自定义逻辑的入口。

  Vue的响应式原理基于Object.defineProperty方法对数据对象进行递归劫持。初始化时框架会遍历data对象的属性,给每一个属性创建一个依赖收集器。模板中使用了某个属性的时候,当前组件的渲染Watcher就会被添加到对应属性的订阅列表中。属性值发生变化的时候,订阅器会把所有的Watcher都通知到重新渲染。对于美食街管理系统购物车模块中的商品数量增减操作,会引发数据变更,从而促使视图更新。计算属性依靠依赖缓存结果,只有相关的响应式依赖发生改变的时候才会重新计算,这种方式适合处理复杂的逻辑。Vue有多种内置指令,v-for用以列表渲染,v-if和v-show控制元素显示与隐藏,v-model完成表单输入的双向绑定。路由管理使用Vue Router库来实现,支持嵌套路由以及路由守卫。使用Vuex来实现状态管理,将共享的数据集中存储起来,并且用Mutation来提交状态的变化,保证状态的变更轨迹可以被追踪到。

2.3 MySQL数据库

  MySQL属于关系型数据库管理系统,数据被存放在表格当中,表与表之间依靠主外键来建立联系。该数据库用客户机-服务器结构,应用程序用SQL语句和数据库服务进程通信。存储引擎层是对数据进行存取操作的,InnoDB是默认的存储引擎,支持事务处理以及行级锁定。InnoDB在数据写入时会用到缓冲池来缓存数据页和索引页,从而降低磁盘I/O的次数。事务日志记录数据修改操作,系统崩溃时用重做日志恢复已经提交的事务。美食街管理系统订单信息存储操作在事务保护下进行,保证库存扣减和订单产生一致的状态[15]。MySQL的数据类型有数值、日期时间、字符串等种类,字段可以设置约束条件来限定取值范围。索引结构使用B+树组织,叶子节点存完整数据行或者主键值,非叶子节点存索引键值和子节点指针。查询优化器在接收到SQL语句之后,经过语法分析、预处理、优化等过程产生执行计划。

  MySQL支持主从复制结构,主库把数据的变更记录到二进制日志里,从库读取日志然后重放操作。视图功能可以把复杂的查询变成虚拟表,从而简化应用程序的数据访问逻辑。触发器对指定表进行插入、更新、删除操作的时候,就会自动执行存储过程来保证数据的完整性。对美食街管理系统的商品分类管理而言,分类层级关系可以用递归查询来实现,MySQL 8.0版本支持公用表表达式简化这类查询。事务隔离级别有读未提交、读已提交、可重复读、串行化这四种,在InnoDB中默认为可重复读级别,用多版本并发控制来解决幻读问题。外键约束在父子表之间建立参照完整性,父表记录被删除时可以设置级联删除或者拒绝操作。分区表功能把大表物理分成若干个分区,查询时只扫描相关分区,该技术适合存储日志型数据。存储过程、函数把业务逻辑封装在数据库层,减少应用程序和数据库之间数据传输量。

2.4 文件上传机制

  文件上传机制是以HTTP协议的多部分表单数据规范为基础的。客户端把表单的enctype属性设为multipart/form-data,把二进制文件和文本字段一起提交到服务器。浏览器构造请求体的时候,用边界字符串将不同的部分分隔开,每一个部分都有自己的头部信息和数据内容。服务端收到请求之后,解析出多部分数据,从中得到文件内容以及普通表单字段。Spring Boot框架用MultipartFile接口来抽象上传文件的操作,该接口有获取原始文件名、文件大小、内容类型等的方法。美食街管理系统商家店铺图片上传场景中,MultipartFile对象被传给服务层之后,就会执行后续的处理[16]。文件存储可以采用本地磁盘或者云存储的方式,本地存储需要指定保存路径并且保证目录存在。上传时间过长的文件要加上进度提示。

  文件内容校验在接收完整数据之前不能进行,一般的做法是上传之后再检查文件类型和大小。文件扩展名验证存在安全风险,更可靠的方式是读取文件头魔数来确定真实的格式。服务端给上传的文件生成唯一的名称来防止重名覆盖,常用的方法是用UUID加上时间戳。文件保存路径按日期分目录组织,方便日后管理、清理。对图片类文件进行缩略图处理以加快列表页的加载速度,节约带宽。文件名在保存之后要及时记录到数据库中,存储的相对路径而不是绝对路径,方便系统迁移。上传目录要设置访问权限,不能直接遍历目录得到文件列表。集群环境下的文件存储要采用共享存储或者独立的文件服务器,防止请求分发到不同的节点时文件不能被访问到。文件清理策略应定时运行,删除长时间未用到的多余文件,释放磁盘空间。

2.5 协同过滤算法

  协同过滤算法是一种基于用户行为数据进行分析的推荐技术。该算法的核心思想在于挖掘用户群体之间的行为相似性,通过分析用户对物品的历史交互记录来预测目标用户对未知物品的偏好程度。算法运行过程依赖用户-物品评分矩阵作为输入数据源,矩阵中的每个元素代表用户对特定物品产生的显式评分或隐式反馈信息。在美食街管理系统的美食推荐场景中,用户浏览商品详情页的行为会被记录为用户-商品交互数据。不同用户在与系统交互过程中留下的点击记录、收藏操作、购买行为构成了个性化推荐的数据基础。该算法不依赖物品的内容属性信息,仅通过分析用户行为模式就能完成推荐结果的生成,这种特性降低了系统对商品元数据完整性的依赖程度。郑阿奇[15]阐述了数据库技术在数据存储与查询优化方面的应用方法,为协同过滤算法所需的大量用户行为数据存储提供了支撑方案。

  协同过滤算法主要分为基于记忆的方法与基于模型的方法两个技术分支。基于记忆的方法直接使用整个用户-物品评分矩阵进行计算,其中基于用户的协同过滤通过计算目标用户与其他用户的评分相似度来寻找邻居用户集合,邻居用户的偏好物品经过加权聚合后成为推荐候选集;基于物品的协同过滤则关注物品之间的共现关系,通过分析用户行为序列计算物品相似度矩阵,当用户对某物品产生正向反馈后,系统推送与该物品高度相似的其他物品。基于模型的方法使用机器学习技术从评分矩阵中学习潜在特征向量,矩阵分解技术将高维稀疏的用户-物品矩阵分解为低维的用户隐向量与物品隐向量,通过向量内积预测缺失评分值。王慧芳与陈玉[16]研究了Java EE框架在项目开发中的应用模式,为推荐算法在Web系统中的集成提供了工程实践参考。随机梯度下降法在矩阵分解过程中迭代更新向量参数直至收敛。该算法在系统中的应用需要解决冷启动问题,新用户或新商品由于缺乏交互数据无法获得准确的推荐结果。

第三章 系统分析

3.1 可行性分析

3.1.1 技术可行性

  本系统采用前后端分离架构,后端用Spring Boot框架创建RESTful API,前端用Vue框架进行页面交互,数据层用MySQL数据库。经过多年的不断发展,已经形成了一个成熟的生态,社区文档、开发工具链都很完善。Spring Boot自动配置可以减小项目的搭建工作量,Vue响应式使界面的状态管理更简便,MySQL事务可以保证订单处理数据的一致性。开发环境使用IntelliJ IDEA集成开发工具,用Maven进行依赖管理,版本控制使用Git。硬件上普通的个人计算机就可以满足开发和测试的要求。该技术方案有一条清晰的技术工程化实施路线图。

3.1.2 操作可行性

  系统分别针对三个不同的用户群体设计出不一样的操作界面和交互流程。普通用户通过移动端浏览器访问,界面使用卡片式布局展示美食信息,购物车、订单入口放在底部导航栏里。商家用户登录之后可以进入到管理后台,店铺活动以及美食信息维护表单具有图片上传和文本编辑的功能。管理员操作台用表格的形式显示待审核的项目,批量处理操作可以节省重复工作。各角色操作路径控制在三步以内完成主要任务,表单填写带有必要的提示信息。用户不需要专门的培训就可以按照界面引导完成日常的操作。

3.1.3 经济可行性

  系统开发过程主要的投入是开发人员的时间成本,所用到的软件工具都是开源或者免费的。Spring Boot以及Vue相关的开发库都是开源的,使用MySQL社区版可以满足数据存储的要求。部署阶段采用云服务商提供的低配实例,在合理的成本内进行运行。系统上线之后,借助于自动化的订单处理以及信息管理来缩减人工运营成本,商家自行维护店铺信息从而减轻平台方的维护人员工作量。维护阶段只做定期备份数据库、检查日志文件这两件事情,不会产生额外的软件许可费用。投入产出比具有经济合理性。

3.2 功能需求分析

  UML用例图是描述系统功能需求的图形化工具,用例图通过显示系统与外部参与者之间的交互关系来说明系统的功能。用例图以用例来表示系统能完成的特定功能,参与者则是与系统交互的各类用户或者外部系统。用例图可以在分析和设计阶段使用,保证系统的功能完整、正确,让开发者和客户有共同的语言。用直观的图示,UML用例图给出了系统功能与角色间的关系。本文将按照角色模块对系统进行需求分析。

3.2.1 普通用户功能需求

  普通用户进入系统之后可以浏览美食信息和店铺活动的内容。用户把选中的美食放进购物车,在购物车页面对商品数量或者删除条目进行操作。确认选购内容之后提交订单,系统产生待付款订单记录。用户完成支付后,订单状态变为待发货。收货地址管理可以添加、修改、删除配送地址,还可以设置默认地址。在线咨询功能是用户可以向商家发送信息,了解商品详情或者提出配送问题。我的订单列表显示历史订单和当前订单,用户可以查看订单的状态以及配送的进度。系统发布新的通知公告、美食消息,让用户可以及时得知最新的活动信息。普通用户用例图如下图3-1所示。

image 图3-1普通用户用例图

3.2.2 商家用户功能需求

  商家用户登录之后进入商家前台界面,查看系统推送的公告和美食信息。商家管理店铺活动信息,发布促销内容,并上传店铺图片。美食信息管理可以实现商家对商品的添加、修改和下架功能,并且可以填写商品的描述以及价格。购物车功能供商家测试用户选购流程。商城管理模块对店铺基本信息、联系信息等进行维护。在线沟通功能用来接收用户的咨询信息并进行回复。商家后台有数据分析查看的功能,可以查看销售统计和访问数据。个人信息管理可以修改店铺资料和登录密码。卫生安全模块上传食品日志、自查照片。订单管理处理用户提交的订单,决定是否接受订单。订单配送管理更新配送状态,指派配送方式。商家用户用例图如图3-2所示。

image 图3-2商家用户用例图

3.2.3 管理员功能需求

  管理员登录系统之后对商品分类进行管理,即添加、修改和删除分类信息。店铺活动管理功能对商家发布的促销内容进行审核,删除违规的活动。卫生安全管理模块可以查看商家上传的食品日志、自查照片,对异常进行登记。用户反馈管理功能可以读取普通用户的反馈内容并进行回复。美食信息管理审核商家上架的商品,审核不合规的商品。订单管理查看全平台订单记录,处理异常订单。订单配送管理对配送状态进行监控,并协助处理配送纠纷。管理员对系统的运行进行维护,保证内容合法、有序。管理员用例图如图3-3所示。

image 图3-3管理员用例图

第四章 系统设计

4.1 系统架构设计

  本系统采用前后端分离的架构,前端独立部署,后端用HTTP协议和前端交互。用户界面层完成数据展示和交互采集的任务,使用Vue框架构建的单页应用运行在浏览器中。该层主要用来渲染美食信息列表、购物车界面、订单确认页面等视图组件,收集用户的表单数据,用Ajax请求把数据传给后端。应用服务层使用Spring Boot创建应用,控制器接收到前端请求之后调用业务逻辑组件来完成处理。服务层组件主要是实现订单金额计算、库存减减、状态转移等功能的模块,而数据访问对象是完成数据库操作的细节部分。数据持久层用MySQL存储用户账户、商品信息、订单记录等业务数据。系统支持层可以实现文件存储、日志记录等功能,商家上传的店铺图片存放到本地磁盘上。三层架构之间用接口约定来解耦,前端只依赖API规范,不关心后端实现。每层内部模块划分坚持单一职责原则,控制器不包含业务逻辑,服务层不直接操作数据库连接[17]。分层设计使代码耦合度降低,各个层可以独立测试、维护。系统架构图如图4-1所示。

image 图4-1系统架构图

4.2 系统结构功能设计

  系统功能以三类用户角色为组织结构。普通用户的功能有账户登录注册、美食信息浏览、购物车管理、订单提交支付、收货地址维护、在线咨询、公告资讯查看。商家用户前台可以查看通知公告、美食资讯、美食信息、商城管理、店铺活动、个人资料管理、店铺活动、卫生安全、美食信息、订单管理、订单配送管理。管理员功能有商品分类管理、店铺活动管理、卫生安全管理、用户反馈管理、美食信息管理、订单管理、订单配送管理。该系统的功能结构如图4-2所示。

image 图4-2系统功能结构图

4.3 系统流程设计

4.3.1 系统总体业务流程设计

  用户进入系统后浏览美食信息,将选中的商品加入购物车。在购物车页面确认商品列表后提交订单,系统生成待支付订单记录。用户完成支付操作,订单状态转为待发货状态。商家接收订单通知后确认订单并安排配送。配送员获取订单信息后开始配送,用户确认收货完成交易。系统总体业务流程如图4-3所示。

image 图4-3系统总体业务流程图

4.3.2 购物车管理流程设计

  用户在商品详情页点击加入购物车,系统将商品信息存入购物车表。用户可进入购物车页面调整商品数量或删除商品。系统实时计算购物车总金额并展示给用户。用户确认选购内容后点击去结算,系统跳转至订单确认页面。购物车管理流程如图4-4所示。

image 图4-4购物车管理流程图

4.3.3 订单处理流程设计

  用户从购物车提交订单后,系统生成订单记录并扣减商品库存。订单初始状态为待付款,用户在规定时间内完成支付则状态更新为待发货。若用户超时未支付,系统自动取消订单并恢复库存。商家可查看待发货订单列表并执行发货操作。订单处理流程如图4-5所示。

image 图4-5订单处理流程图

4.3.4 店铺活动发布流程设计

  商家用户登录后进入活动管理页面,填写活动标题、内容描述、活动时间等信息。系统保存活动记录后将状态设为待审核。管理员审核活动内容,通过后活动对外展示。商家可查看审核结果,未通过活动可修改后重新提交。店铺活动发布流程如图4-6所示。

image 图4-6店铺活动发布流程图

4.3.5 配送管理流程设计

  商家确认订单后进入配送管理页面,选择配送方式并填写配送单号。系统记录配送信息后将订单状态更新为配送中。用户端可查看配送进度。用户签收后系统更新签收状态,订单状态转为已完成。商家可查看已完成订单列表。配送管理流程如图4-7所示。

image 图4-7配送管理流程图

4.4 数据库设计

  数据库设计遵循关系型模型理论,通过规范化处理减少数据冗余。实体与属性映射为数据库表结构,每张表对应一个实体类型。主键约束确保记录唯一标识,外键约束维护表间参照完整性。系统业务涉及用户信息、商品数据、订单记录等核心实体,数据操作要求一致性与原子性。事务机制保障订单生成时库存扣减与订单插入操作同步完成或全部回滚。索引设计针对查询频繁的字段建立,提升检索效率。闾枫[13]阐述了Spring Boot项目中数据库整合方法,为持久层实现提供参考。

4.4.1 E-R图设计

  用户实体主要包括用户id、用户名、密码、用户组、状态等属性。实体属性图如图4-8所示。

image 图4-8用户实体属性图

  普通用户实体主要包括普通用户id、用户id、用户姓名、用户性别、审核状态等属性。实体属性图如图4-9所示。

image 图4-9普通用户实体属性图

  商家用户实体主要包括商家用户id、用户id、店铺名称、店铺电话、审核状态等属性。实体属性图如图4-10所示。

image 图4-10商家用户实体属性图

  商品信息实体主要包括商品信息id、标题、商品分类、卖价、商品库存等属性。实体属性图如图4-11所示。

image 图4-11商品信息实体属性图

  购物车实体主要包括购物车id、用户id、商品id、标题、数量、单价等属性。实体属性图如图4-12所示。

image 图4-12购物车实体属性图

  订单实体主要包括订单id、订单号、用户id、商家id、商品id、订单状态等属性。实体属性图如图4-13所示。

image 图4-13订单实体属性图

  收货地址实体主要包括收货地址id、用户id、地址、姓名、手机等属性。实体属性图如图4-14所示。

image 图4-14收货地址实体属性图

  评论实体主要包括评论id、用户id、来源表、来源id、内容、回复评论id等属性。实体属性图如图4-15所示。

image 图4-15评论实体属性图

  物流配送实体主要包括物流配送id、订单号、配送员id、配送方式、配送状态、签收状态等属性。实体属性图如图4-16所示。

image 图4-16物流配送实体属性图

  卫生安全实体主要包括卫生安全id、商家用户、店铺名称、审核状态、自查照片等属性。实体属性图如图4-17所示。

image 图4-17卫生安全实体属性图 image 图4-18全局er图

4.4.2 数据库表设计

  数据库逻辑设计阶段将概念模型转换为关系数据库所支持的表结构形式,依据实体间联系确定主外键约束与参照完整性规则。用户表主要是用来存放系统用户账户信息。主要包括user_id、username、password、user_group、state等字段。如表4-1所示。

表4-1用户账户表

序号字段名类型长度备注
1avatarvarchar255头像地址
2create_timetimestamp-创建时间
3emailvarchar64邮箱
4email_statesmallint-邮箱认证:(0未认证1审核中2已认证)
5login_timetimestamp-上次登录时间
6nicknamevarchar16昵称
7open_idvarchar255针对获取用户信息字段
8passwordvarchar64密码
9phonevarchar11手机号码
10phone_statesmallint-手机认证:(0未认证1审核中2已认证)
11statesmallint-账户状态:(1可用2异常3已冻结4已注销)
12user_groupvarchar32所在用户组
13user_idint11用户ID
14usernamevarchar16用户名

  普通用户表主要是用来存放普通用户扩展信息。主要包括regular_user_id、user_id、user_name、user_gender、examine_state等字段。如表4-2所示。

表4-2普通用户表

序号字段名类型长度备注
1create_byint11创建用户ID
2create_timedatetime-创建时间
3examine_statevarchar16审核状态
4regular_user_idint11普通用户ID
5update_timetimestamp-更新时间
6user_gendervarchar64用户性别
7user_idint11用户ID
8user_namevarchar64用户姓名
9users_mobile_phonevarchar64用户手机

  商家用户表主要是用来存放商家用户信息。主要包括merchant_user_id、user_id、shop_name、store_phone、examine_state等字段。如表4-3所示。

表4-3商家用户表

序号字段名类型长度备注
1business_licensevarchar255营业执照
2create_byint11创建用户ID
3create_timedatetime-创建时间
4examine_statevarchar16审核状态
5merchant_user_idint11商家用户ID
6shop_namevarchar64店铺名称
7store_phonevarchar16店铺电话
8update_timetimestamp-更新时间
9user_idint11用户ID

  商品信息表主要是用来存放美食商品信息。主要包括food_information_id、cart_title、cart_type、cart_price、cart_inventory等字段。如表4-4所示。

表4-4美食信息表

序号字段名类型长度备注
1cart_contentlongtext4294967295正文
2cart_descriptionvarchar255描述
3cart_imgtext65535封面图
4cart_img_1text65535主图1
5cart_img_2text65535主图2
6cart_img_3text65535主图3
7cart_img_4text65535主图4
8cart_img_5text65535主图5
9cart_inventoryint11商品库存
10cart_pricedouble-卖价
11cart_price_agodouble-原价
12cart_titlevarchar125标题
13cart_typevarchar64商品分类
14comment_lenint11评论数
15create_byint11创建用户ID
16create_timedatetime-创建时间
17food_information_idint11美食信息ID
18hitsint11点击数
19list_statussmallint-上架状态(0:下架;1上架)
20merchant_userint11商家用户
21recommendint11智能推荐
22shop_namevarchar64店铺名称
23skulongtext4294967295规格
24update_timetimestamp-更新时间

  购物车表主要是用来存放用户加购的商品记录。主要包括cart_id、user_id、goods_id、title、num、price等字段。如表4-5所示。

表4-5购物车表

序号字段名类型长度备注
1cart_idint11购物车ID
2create_timetimestamp-创建时间
3descriptionvarchar255描述
4goods_idmediumint20商品id
5imgvarchar255图片
6normsvarchar64规格
7numint11数量
8pricedouble-单价
9price_agodouble-原价
10price_countdouble-总价
11stateint11状态:使用中,已失效
12titlevarchar64标题
13typevarchar64商品分类
14update_timetimestamp-更新时间
15user_idint11用户ID

  订单表主要是用来存放用户购买商品生成的订单信息。主要包括order_id、order_number、user_id、merchant_id、goods_id、state等字段。如表4-6所示。

表4-6订单表

序号字段名类型长度备注
1contact_addressvarchar255收件地址
2contact_emailvarchar125联系人邮箱
3contact_namevarchar32联系人姓名
4contact_phonevarchar11联系人手机
5create_timetimestamp-创建时间
6delivery_statevarchar16发货状态:未配送,已配送
7delivery_typevarchar16配送方式
8descvarchar64取消订单原因
9descriptionvarchar255描述
10goods_idmediumint20商品ID
11imgvarchar255商品图片
12merchant_idmediumint20商家ID
13normsvarchar255规格
14numint11数量
15order_idint11订单ID
16order_numbervarchar64订单号
17pickup_codevarchar32取货编号
18postal_codevarchar9邮政编码
19pricedouble-价格
20price_agodouble-原价
21price_countdouble-总价
22remarktext65535订单备注
23statevarchar16订单状态:待付款,待发货,待签收,已签收,待退款,已退款,已拒绝,已完成
24titlevarchar255商品标题
25typevarchar64商品分类
26update_timetimestamp-更新时间
27user_idint11买家ID

  收货地址表主要是用来存放用户的收货地址信息。主要包括address_id、user_id、address、name、phone、default等字段。如表4-7所示。

表4-7收货地址表

序号字段名类型长度备注
1addressvarchar255地址
2address_idint11收货地址
3create_timetimestamp-创建时间
4defaulttinyint-默认判断
5namevarchar32姓名
6phonevarchar13手机
7postcodevarchar8邮编
8update_timetimestamp-更新时间
9user_idmediumint20用户ID

  评论表主要是用来存放用户对商品的评价内容。主要包括comment_id、user_id、source_table、source_id、content、reply_to_id等字段。如表4-8所示。

表4-8评论表

序号字段名类型长度备注
1avatarvarchar255头像地址
2comment_idint11评论ID
3contentlongtext4294967295内容
4create_timetimestamp-创建时间
5hiddentinyint-是否隐藏
6nicknamevarchar255昵称
7reply_to_idint11回复评论ID
8source_fieldvarchar255来源字段
9source_idint11来源ID
10source_tablevarchar255来源表
11stickytinyint-是否置顶
12update_timetimestamp-更新时间
13user_idint11评论人ID

  物流配送表主要是用来存放订单的物流配送信息。主要包括logistics_delivery_id、order_number、courier_name、courier_type、delivery_status、signing_status等字段。如表4-9所示。

表4-9物流配送表

序号字段名类型长度备注
1contact_namevarchar255联系人名字
2courier_detaillongtext4294967295配送详情
3courier_idint11配送员ID
4courier_namevarchar255配送员名字
5courier_typeint11配送方式(1:商家配送,2:其他配送)
6create_timedatetime-创建时间
7delivery_numbervarchar30配送订单
8delivery_statusvarchar64配送状态
9logistics_delivery_idint11物流配送ID
10merchant_idint11商家id
11order_numbervarchar64订单号
12ordinary_usersint11普通用户
13product_namevarchar64商品名称
14purchase_quantityvarchar64购买数量
15recommendint11智能推荐
16shipping_addressvarchar64收货地址
17signing_statusvarchar64签收状态
18the_date_of_issuancedate-发货日期
19total_transaction_amountdouble-交易总额
20update_timetimestamp-更新时间

  卫生安全表主要是用来存放商家提交的卫生安全检查信息。主要包括hygiene_and_safety_id、merchant_user、shop_name、examine_state、examine_reply等字段。如表4-10所示。

表4-10卫生安全表

序号字段名类型长度备注
1create_byint11创建用户ID
2create_timedatetime-创建时间
3examine_replyvarchar255审核回复
4examine_statevarchar16审核状态
5exception_reporttext65535异常报告
6food_logtext65535食品日志
7hygiene_and_safety_idint11卫生安全ID
8merchant_userint11商家用户
9self_examination_photosvarchar255自查照片
10shop_namevarchar64店铺名称
11update_timetimestamp-更新时间

4.5 协同过滤算法设计

  协同过滤算法设计旨在为美食街管理系统提供个性化推荐能力。系统收集用户对美食信息的浏览时长、收藏操作、购买记录等行为数据,将这些隐式反馈转化为用户-商品评分矩阵。基于用户的协同过滤方法通过计算用户之间的皮尔逊相关系数或余弦相似度,为目标用户筛选出相似度最高的邻居用户集合,提取邻居用户偏好的商品列表后,系统预测目标用户对每个候选商品的评分,选取评分最高的若干商品生成推荐结果。基于物品的协同过滤方法分析用户历史行为序列中商品之间的共现关系,计算两两商品之间的相似度,当用户浏览某商品详情页时,系统推送与该商品相似度最高的其他商品。两种方法在美食推荐场景中各有适用情形,用户量较小时基于物品的方法计算稳定性更好。闾枫[13]阐述了Spring Boot项目中数据处理方法,为算法实现提供了技术支撑。

  矩阵分解技术作为基于模型的协同过滤代表方法,将用户-商品评分矩阵分解为两个低维矩阵的乘积形式。假设存在K个潜在因子影响用户对商品的评分偏好,每个用户对应一个K维隐向量,每个商品对应一个K维隐向量,评分预测值通过两个向量的内积计算得出。算法初始化时随机生成用户矩阵与商品矩阵,通过最小化预测评分与真实评分之间的均方误差来迭代更新矩阵参数。损失函数中加入正则化项防止过拟合,学习率控制参数更新的步长大小。在美食街管理系统中,用户对美食的偏好受口味、价格、距离多个潜在因素影响,矩阵分解能够自动学习这些隐含特征维度。梯度下降法在每一轮迭代中计算预测误差并反向传播更新参数,经过多轮训练后模型收敛到稳定状态。郑阿奇[15]探讨了MySQL数据库在大规模数据存储方面的应用,为算法训练所需的行为数据存储提供支持。

第五章 系统实现

5.1 普通用户功能实现

5.1.1 注册登录功能实现

  普通用户通过用户名、密码等信息进行注册,系统调用UserController的signUp方法完成用户注册;登录时调用login方法,对密码进行RSA解密并验证用户身份,验证通过后生成token并存入Redis,实现登录态管理。注册登录界面如图5-1所示。

image 图5-1注册登录界面

  核心代码实现如下:

  @PostMapping(“register”)

  public Map<String, Object>signUp(@RequestBody User user) {

  Map<String, String> query = new HashMap<>();

query.put(“username”,user.getUsername());

Listlist=service.selectBaseList(service.select(query, new HashMap&lt;&gt;()));

if (list.size()&gt;0){

return error(30000, “用户已存在”);

  }

  service.insert(map);

  return success(1);

  }

5.1.2 美食信息管理功能实现

  普通用户在前端可查看美食信息列表,后端通过FoodInformationController的getHitsList方法实现基于协同过滤算法的智能推荐,根据用户的购买、收藏、点击和评论行为计算加权分数,推荐用户可能感兴趣的美食信息。美食信息管理界面如图5-2所示。

image 图5-2美食信息管理界面

  核心代码实现如下:

  @RequestMapping(“/get_hits_list”)

  public Map<String, Object>getHits(HttpServletRequestrequest) {

  Map<String,String>paramMap=service.readQuery(request);

if (paramMap.get(“user_id”)==null||paramMap.get(“user_id”).equals(“”)){

ListgoodsList=goodsService.selectBaseList(goodsService.select(paramMap,configMap));

return success(map);

  }else{

  StringhitsSource=buildCartWeightedSql(paramMap.get(“user_id”));

  List<Map<String,Object>>hitsSourceList=goodsService.selectMapBaseList(hitsSource);

  }

  }

5.1.3 店铺活动查看功能实现

  普通用户可浏览商家发布的店铺活动信息,系统通过StorePromotionController的查询方法获取活动数据,用户在前端查看活动详情、图片及店铺信息。店铺活动查看界面如图5-3所示。

image 图5-3店铺活动查看界面

  核心代码实现如下:

@RequestMapping(“/store_promotion”)

public classStorePromotionControllerextendsBaseController&lt;StorePromotion,StorePromotionService&gt; {

@Autowired

  publicStorePromotionController(StorePromotionServiceservice) {

  setService(service);

  }

  }

5.1.4 收货地址管理功能实现

  普通用户可以对多个收货地址进行增删改查操作,AddressController的add方法用于新增地址,set方法用于修改地址信息,del方法用于删除地址,系统默认将用户最后使用的地址设为默认地址。收货地址管理界面如图5-4所示。

image 图5-4收货地址管理界面

  核心代码实现如下:

  @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(“手机号不能为空”);

  }

  if (addMap.get(“address”)==null){

  throw newIllegalArgumentException(“地址不能为空”);

  }

  this.service.insert(addMap);

  return success(1);

  }

5.1.5 在线咨询功能实现

  普通用户可以通过在线咨询功能与商家进行实时沟通,CustomerChatGroupController负责群组管理,CustomerChatLogController处理聊天记录的保存和查询,用户发送的消息被保存到数据库并实时展示。在线咨询界面如图5-5所示。

image 图5-5在线咨询界面

  核心代码实现如下:

  @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);

return success(1);

  }

5.1.6 我的订单管理功能实现

  普通用户可在“我的订单”中查看不同状态的订单(待付款、待发货、已签收等),OrderController的getBusinessOrderList方法支持按订单号、商品标题、联系人姓名和订单状态进行筛选查询。我的订单管理界面如图5-6所示。

image 图5-6我的订单管理界面

  核心代码实现如下:

  @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”);

if (!StringUtils.isEmpty(query.get(“order_number”))){

sql=sql+ “ and t1.order_number like ‘%”+query.get(“order_number”)+“%’”;

  }

  map.put(“list”,service.selectBaseList(sql));

  return success(map);

  }

5.1.7 支付订单功能实现

  用户对购物车中的商品进行结算并完成支付,系统更新订单状态为“待发货”,OrderController调用update方法修改订单的state字段,同时清空用户购物车中已支付的商品记录。支付订单界面如图5-7所示。

image 图5-7支付订单界面

  核心代码实现如下:

  public Map<String, Object> set(HttpServletRequestrequest) throwsIOException{

  Map<String,String>queryMap=service.readQuery(request);

  Map<String,String>configMap=service.readConfig(request);

  Map<String,Object>paramMap=service.readBody(request.getReader());

Orderorder= new Order();

order.setState(paramMap.get(“state”)==null?null:String.valueOf(paramMap.get(“state”)));

this.setEntity(queryMap,configMap,order);

return success(1);

  }

5.1.8 购物车管理功能实现

  普通用户可以将美食信息加入购物车,CartController的add方法将商品ID、数量、价格等信息保存,用户可修改商品数量或删除购物车项,系统自动计算当前购物车总价。购物车管理界面如图5-8所示。

image 图5-8购物车管理界面

  核心代码实现如下:

@RequestMapping(“cart”)

public classCartControllerextendsBaseController&lt;Cart,CartService&gt; {

@Autowired

  publicCartController(CartServiceservice) {

  setService(service);

  }

  }

5.1.9 订单配送管理功能实现

  用户下单后可查看订单的配送状态及物流详情,LogisticsDeliveryController查询订单关联的配送信息,包括配送员、配送方式和签收状态,用户可确认收货。订单配送管理界面如图5-9所示。

image 图5-9订单配送管理界面

  核心代码实现如下:

@RequestMapping(“logistics_delivery”)

public classLogisticsDeliveryControllerextendsBaseController&lt;LogisticsDelivery,LogisticsDeliveryService&gt; {

@Autowired

  publicLogisticsDeliveryController(LogisticsDeliveryServiceservice) {

  setService(service);

  }

  }

5.2 商家用户后台功能实现

5.2.1 数据分析查看功能实现

  商家用户登录后台后可查看店铺销售数据及商品热度分析,系统通过订单表统计商家名下的订单数量、销售额和热门商品排行,为商家提供经营决策依据。数据分析查看界面如图5-10所示。

image 图5-10数据分析查看界面

  核心代码实现如下:

  @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”);

map.put(“list”,service.selectBaseList(sql));

map.put(“count”,service.selectBaseCount(countSql));

return success(map);

  }

5.2.2 个人信息管理功能实现

  商家用户可修改店铺名称、联系电话和营业执照等信息,MerchantUserController的set方法接收前端提交的修改参数,更新数据库中对应商家用户的记录。个人信息管理界面如图5-11所示。

image 图5-11个人信息管理界面

  核心代码实现如下:

  @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());

  MerchantUser merchant_user = new MerchantUser();

merchant_user.setShop_name(paramMap.get(“shop_name”)==null?null:String.valueOf(paramMap.get(“shop_name”)));

merchant_user.setStore_phone(paramMap.get(“store_phone”)==null?null:String.valueOf(paramMap.get(“store_phone”)));

this.setEntity(queryMap,configMap,merchant_user);

return success(1);

  }

5.2.3 店铺活动管理功能实现

  商家用户可以在后台发布和管理店铺活动,StorePromotionController的add方法新增活动,set方法修改活动内容,活动信息包括店铺图片、地址、电话和活动详情等内容。店铺活动管理界面如图5-12所示。

image 图5-12店铺活动管理界面

  核心代码实现如下:

  @PostMapping(“/add”)

  @Transactional

  public Map<String, Object> add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

StorePromotionstore_promotion= newStorePromotion();

store_promotion.setMerchant_user(paramMap.get(“merchant_user”)==null?null:Integer.valueOf(String.valueOf(paramMap.get(“merchant_user”))));

store_promotion.setShop_name(paramMap.get(“shop_name”)==null?null:String.valueOf(paramMap.get(“shop_name”)));

store_promotion.setStore_promotion(paramMap.get(“store_promotion”)==null?null:String.valueOf(paramMap.get(“store_promotion”)));

this.addEntity(store_promotion);

return success(1);

  }

5.2.4 卫生安全管理功能实现

  商家用户需要提交卫生安全自查信息,HygieneAndSafetyController的add方法用于填写自查报告和食品日志,管理员审核通过后状态变为“已通过”,商家可查看审核回复。卫生安全管理界面如图5-13所示。

image 图5-13卫生安全管理界面

  核心代码实现如下:

  @PostMapping(“/add”)

  @Transactional

  public Map<String, Object> add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

HygieneAndSafetyhygiene_and_safety= newHygieneAndSafety();

hygiene_and_safety.setSelf_examination_photos(paramMap.get(“self_examination_photos”)==null?null:String.valueOf(paramMap.get(“self_examination_photos”)));

hygiene_and_safety.setFood_log(paramMap.get(“food_log”)==null?null:String.valueOf(paramMap.get(“food_log”)));

hygiene_and_safety.setExamine_state(“未审核”);

this.addEntity(hygiene_and_safety);

return success(1);

  }

5.2.5 美食信息管理功能实现

  商家用户对店铺内的美食信息进行上架、下架和编辑操作,FoodInformationController的add方法新增商品,set方法修改商品信息,listStatus字段控制商品的上架状态。美食信息管理界面如图5-14所示。

image 图5-14美食信息管理界面

  核心代码实现如下:

  @PostMapping(“/set”)

  @Transactional

  public Map<String, Object> set(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

FoodInformationfood_information= newFoodInformation();

food_information.setCart_title(paramMap.get(“cart_title”)==null?null:String.valueOf(paramMap.get(“cart_title”)));

food_information.setCart_price(paramMap.get(“cart_price”)==null?null:Double.valueOf(String.valueOf(paramMap.get(“cart_price”))));

food_information.setListStatus(paramMap.get(“list_status”)==null?null:Integer.valueOf(String.valueOf(paramMap.get(“list_status”))));

this.setEntity(queryMap,configMap,food_information);

return success(1);

  }

5.2.6 订单管理功能实现

  商家用户在后台查看买家下单情况,可按订单号、商品名称和订单状态筛选,OrderController提供订单列表查询功能,商家可处理订单发货或退款申请。订单管理界面如图5-15所示。

image 图5-15订单管理界面

  核心代码实现如下:

  @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”);

if (!StringUtils.isEmpty(query.get(“state”))){

sql=sql+ “ and t1.state = ’”+query.get(“state”)+“’”;

  }

  map.put(“list”,service.selectBaseList(sql));

  return success(map);

  }

5.2.7 订单配送管理功能实现

  商家用户可以添加配送信息并更新订单配送状态,LogisticsDeliveryController的set方法修改配送员、配送方式和配送状态,用户在前端可实时查看物流进度。订单配送管理界面如图5-16所示。

image 图5-16订单配送管理界面

  核心代码实现如下:

  @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());

LogisticsDeliverylogistics_delivery= newLogisticsDelivery();

logistics_delivery.setDelivery_status(paramMap.get(“delivery_status”)==null?null:String.valueOf(paramMap.get(“delivery_status”)));

logistics_delivery.setSigning_status(paramMap.get(“signing_status”)==null?null:String.valueOf(paramMap.get(“signing_status”)));

this.setEntity(queryMap,configMap,logistics_delivery);

return success(1);

  }

5.3 商家用户前台功能实现

5.3.1 在线沟通功能实现

  商家用户前台可通过在线沟通模块与普通用户实时交流,CustomerChatGroupController负责创建群组并管理成员,CustomerChatLogController保存聊天记录,商家可回复用户咨询。在线沟通界面如图5-17所示。

image 图5-17在线沟通界面

  核心代码实现如下:

  @PostMapping(“/add”)

  @Transactional

  public Map<String, Object> add(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

CustomerChatGroupcustomer_chat_group= newCustomerChatGroup();

customer_chat_group.setMember(paramMap.get(“member”)==null?null:String.valueOf(paramMap.get(“member”)));

customer_chat_group.setRead_state(paramMap.get(“read_state”)==null?null:String.valueOf(paramMap.get(“read_state”)));

this.addEntity(customer_chat_group);

return success(1);

  }

5.3.2 通知公告查看功能实现

  商家用户可查看系统管理员发布的通知公告信息,NoticeController提供了公告的列表查询和详情查看方法,公告按创建时间倒序排列展示。

  核心代码实现如下:

@RequestMapping(“notice”)

public classNoticeControllerextendsBaseController&lt;Notice,NoticeService&gt; {

@RequestMapping(“/get_obj”)

public Map&lt;String, Object&gt; 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.3.3 美食资讯查看功能实现

  商家用户在前台可以浏览美食相关的资讯文章,ArticleController的obj方法返回单篇文章详情,支持按分类和标签筛选,提升商家对行业动态的了解。

  核心代码实现如下:

@RequestMapping(“article”)

public classArticleControllerextendsBaseController&lt;Article,ArticleService&gt; {

@RequestMapping(“/get_obj”)

public Map&lt;String, Object&gt; 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.3.4 美食信息查看功能实现

  商家用户在前台可查看其他商家的美食信息,通过FoodInformationController提供的查询接口获取商品列表,包括商品图片、价格、库存和店铺名称等信息。

  核心代码实现如下:

@RequestMapping(“/food_information”)

public classFoodInformationControllerextendsBaseController&lt;FoodInformation,FoodInformationService&gt; {

@Autowired

  publicFoodInformationController(FoodInformationServiceservice) {

  setService(service);

  }

  }

5.3.5 商城管理功能实现

  商家用户可以在前台管理自己的店铺商城,包括商品上下架和价格调整,FoodInformationController的set方法修改商品状态,listStatus字段控制商品是否在前台展示。

  核心代码实现如下:

  @PostMapping(“/set”)

  @Transactional

  public Map<String, Object> set(HttpServletRequestrequest) throwsIOException{

  Map<String,Object>paramMap=service.readBody(request.getReader());

FoodInformationfood_information= newFoodInformation();

food_information.setListStatus(paramMap.get(“list_status”)==null?null:Integer.valueOf(String.valueOf(paramMap.get(“list_status”))));

this.setEntity(queryMap,configMap,food_information);

return success(1);

  }

5.3.6 店铺活动查看功能实现

  商家用户在前台可查看自己发布的活动信息,StorePromotionController的查询方法获取活动详情,商家可查看活动效果和用户参与情况。

  核心代码实现如下:

@RequestMapping(“/store_promotion”)

public classStorePromotionControllerextendsBaseController&lt;StorePromotion,StorePromotionService&gt; {

@Autowired

  publicStorePromotionController(StorePromotionServiceservice) {

  setService(service);

  }

  }

5.4 管理员功能实现

5.4.1 商品分类管理功能实现

  管理员可以对系统内的商品分类进行管理,包括新增、修改和删除分类,GoodsTypeController提供完整的数据库操作接口,分类信息用于前台商品的归类展示。商品分类管理界面如图5-18所示。

image 图5-18商品分类管理界面

  核心代码实现如下:

@RequestMapping(“goods_type”)

public classGoodsTypeControllerextendsBaseController&lt;GoodsType,GoodsTypeService&gt; {

@Autowired

  publicGoodsTypeController(GoodsTypeServiceservice) {

  setService(service);

  }

  }

5.4.2 店铺活动管理功能实现

  管理员管理所有商家发布的店铺活动,可审核活动内容,对违规活动进行下架处理,StorePromotionController的查询接口支持按商家和活动状态筛选。店铺活动管理界面如图5-19所示。

image 图5-19店铺活动管理界面

  核心代码实现如下:

@RequestMapping(“/store_promotion”)

public classStorePromotionControllerextendsBaseController&lt;StorePromotion,StorePromotionService&gt; {

@Autowired

  publicStorePromotionController(StorePromotionServiceservice) {

  setService(service);

  }

  }

5.4.3 卫生安全管理功能实现

  管理员对商家提交的卫生安全报告进行审核,HygieneAndSafetyController的updateExamineState方法用于修改审核状态,可填写审核意见回复商家。卫生安全管理界面如图5-20所示。

image 图5-20卫生安全管理界面

  核心代码实现如下:

  @Transactional

  @GetMapping(“/update_examine_state”)

  public StringupdateExamineState(Long id, StringnewState) throwsIOException{

  Map<String,String>queryMap= new HashMap<>();

queryMap.put(“id”,String.valueOf(id));

HygieneAndSafetyhygiene_and_safety=service.findOne(queryMap);

hygiene_and_safety.setExamine_state(newState);

this.setEntity(queryMap,newHashMap&lt;&gt;(),hygiene_and_safety);

return “审核成功”;

  }

5.4.4 用户反馈管理功能实现

  管理员接收普通用户的反馈信息并进行处理,UserFeedbackController的updateExamineState方法审核反馈状态,管理员可回复用户反馈内容。用户反馈管理界面如图5-21所示。

image 图5-21用户反馈管理界面

  核心代码实现如下:

  @Transactional

  @GetMapping(“/update_examine_state”)

  public StringupdateExamineState(Long id, StringnewState) throwsIOException{

  Map<String,String>queryMap= new HashMap<>();

queryMap.put(“id”,String.valueOf(id));

UserFeedbackuser_feedback=service.findOne(queryMap);

user_feedback.setExamine_state(newState);

this.setEntity(queryMap,newHashMap&lt;&gt;(),user_feedback);

return “审核成功”;

  }

5.4.5 美食信息管理功能实现

  管理员对所有商家上架的美食信息进行统一管理,可强制下架违规商品,FoodInformationController的set方法修改商品状态,确保平台内容合规。美食信息管理界面如图5-22所示。

image 图5-22美食信息管理界面

  核心代码实现如下:

@RequestMapping(“/food_information”)

public classFoodInformationControllerextendsBaseController&lt;FoodInformation,FoodInformationService&gt; {

@Autowired

  publicFoodInformationController(FoodInformationServiceservice) {

  setService(service);

  }

  }

5.4.6 订单管理功能实现

  管理员查看全平台的订单记录,监控交易数据,OrderController提供所有订单的查询接口,支持多条件筛选,便于平台运营分析。订单管理界面如图5-23所示。

image 图5-23订单管理界面

  核心代码实现如下:

@RequestMapping(“order”)

public classOrderControllerextendsBaseController&lt;Order,OrderService&gt; {

@RequestMapping(“/get_business_order_list”)

public Map&lt;String, Object&gt;getBusinessOrderList(HttpServletRequestrequest) {

  Map<String,String> query =service.readQuery(request);

Stringsql= “SELECT t1.* FROM order t1”;

map.put(“list”,service.selectBaseList(sql));

return success(map);

  }

  }

5.4.7 订单配送管理功能实现

  管理员可查看和协调全平台的订单配送情况,对配送异常订单进行干预,LogisticsDeliveryController提供配送信息的完整管理功能。订单配送管理界面如图5-24所示。

image 图5-24订单配送管理界面

  核心代码实现如下:

@RequestMapping(“logistics_delivery”)

public classLogisticsDeliveryControllerextendsBaseController&lt;LogisticsDelivery,LogisticsDeliveryService&gt; {

@Autowired

  publicLogisticsDeliveryController(LogisticsDeliveryServiceservice) {

  setService(service);

  }

  }

第六章 系统测试

6.1 测试目的

  系统测试就是对系统功能实现和设计规格是否一致进行验证。按照预定的测试用例对各个模块进行正常的和边界情况下的测试。对用户登录认证、商品浏览和购物车操作、订单创建和支付、商家端活动发布和管理、管理员后台审核等主要业务过程做全方位的测试。对数据输入场景进行格式校验和空值检查,检验系统对于异常输入的处理能力。测试过程重视流程闭环完整性,即从用户提出请求到数据库状态改变的全部链条数据是否一致。系统访问控制机制也包含在测试范围之内,用来检验各个角色功能权限的隔离情况。利用系统化的测试来降低上线后的功能缺陷风险,保证交付质量[19]。

6.2 测试方法

  系统测试使用黑盒测试法,只对系统的功能规格进行检查,不涉及系统内部实现的细节。测试用例按照需求文档中给出的功能来设计,分成正常场景和异常场景两种。单元测试对数据验证逻辑和服务层的方法做隔离测试,用断言验证方法的返回值。集成测试用HTTP客户端模拟前端的请求,验证API接口响应状态码、返回数据结构等。回归测试是在缺陷修复之后,对相关的用例进行再次执行,以保证修改没有带来新的问题。测试环境和生产环境一致,数据库用独立的测试库来防止污染生产数据。缺陷管理记录有缺陷描述、复现步骤、严重程度这三个部分[20]。

6.3 测试用例

  (1)用户登录与注册功能测试如表6-1所示。

表6-1用户登录与注册测试表

测试内容测试步骤预期结果实际结果
用户注册填写用户名、密码、确认密码后提交注册系统保存账户信息并跳转登录页符合预期
用户登录输入正确用户名密码后点击登录系统验证身份后进入首页符合预期
密码错误输入正确用户名与错误密码系统提示用户名或密码错误符合预期
用户不存在输入未注册用户名登录系统提示用户不存在符合预期

  (2)美食信息浏览与购物车功能测试如表6-2所示。

表6-2美食信息浏览与购物车测试表

测试内容测试步骤预期结果实际结果
商品列表加载进入首页查看美食列表系统展示已上架商品符合预期
商品分类筛选点击某个分类标签系统展示该分类商品符合预期
关键词搜索输入商品名称部分文字系统展示匹配商品符合预期
加入购物车商品详情页点击加入购物车系统提示添加成功符合预期

  (3)订单提交与支付功能测试如表6-3所示。

表6-3订单提交与支付测试表

测试内容测试步骤预期结果实际结果
订单提交购物车点击去结算并确认系统生成待付款订单符合预期
库存扣减提交订单后查看商品库存库存数量减少符合预期
订单支付待付款订单执行支付操作订单状态转为待发货符合预期
订单取消待付款订单点击取消订单状态变为已取消符合预期

  (4)商家活动发布与管理功能测试如表6-4所示。

表6-4商家活动发布与管理测试表

测试内容测试步骤预期结果实际结果
活动发布填写活动信息后提交活动进入待审核状态符合预期
活动编辑修改未通过活动内容更新后重新提交审核符合预期
活动展示审核通过后用户端查看活动内容正常显示符合预期
活动下架管理员执行下架操作用户端不再展示符合预期

  (5)管理员审核功能测试如表6-5所示。

表6-5管理员审核功能测试表

测试内容测试步骤预期结果实际结果
商品审核查看待审核商品并点击通过商品状态变为已上架符合预期
活动审核查看待审核活动并点击不通过活动退回商家并记录原因符合预期
反馈回复阅读用户反馈后填写回复用户端可查看回复内容符合预期
分类管理添加新的商品分类新增分类在列表中显示符合预期

测试结论

  对五个核心功能模块执行测试用例后,系统表现符合设计预期。用户注册登录流程数据验证机制生效,非法输入被正确拦截。购物车与订单模块事务一致性通过验证,库存扣减与订单生成保持同步。商家活动发布经过审核后正常展示,权限控制未发现越权操作。管理员审核操作能够及时更新内容状态,用户反馈得到有效处理。测试过程中发现的边界显示问题已修复,系统达到预定功能目标,可进入部署阶段。

项目分享:大家可自取用于参考学习,获取方式可私信哦!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值