如何使用ssm实现蜀都天香酒楼的网站设计与实现

发布于:2024-08-24 ⋅ 阅读:(111) ⋅ 点赞:(0)

@TOC

ssm028蜀都天香酒楼的网站设计与实现+jsp

绪论

1.1研究背景与意义

信息化管理模式是将行业中的工作流程由人工服务,逐渐转换为使用计算机技术的信息化管理服务。这种管理模式发展迅速,使用起来非常简单容易,用户甚至不用掌握相关的专业知识,根据教程指导即可正常使用相关的系统,因而被越来越多的用户所使用。由于相关行业管理信息化,这就使得管理工作不在受到时间和区域的限制,随时随地即可完成相关的工作任务和结果[1]。就目前而言,管理信息化在现代社会中非常流行,使用比较广泛。早在20世纪70年代末,就出现了早期的电子商务,相关的公司企业使用计算机建立专用的内部网络,通过内部网络完成相应的采购、销售等活动,加快相关的企业之间的交易速度,提高了工作效率[2]。

当下,许多行业采用互联网技术将工作流程信息化、数字化,提高了相关人员的服务质量和效率,节约了相关行业的人力、财力、物力等资源,与此同时,人们获取外界的相关信息主要依赖于主流的信息化技术和工具。人们对生活的需求也在不断的发生着变化,为了应对用户的多样化需求,许多相关的第三产业应运而生,管理信息化也逐渐的流行起来,比如电子商务行业。本人通过查询大量学习资料,了解基本的开发系统的基本背景和关键任务,学习与掌握Java语言、web技术、JSP技术、HTML语言等开发技术,设计系统功能模块,以及MySQL数据库的相关语法和工具,创建和存储数据表格,反映和关联表格之间相互存在的关系,由此对蜀都天香酒楼管理系统进行研发和实现。

1.2国内外研究现状

大概在20世纪90年代,我国才开始研发蜀都天香酒楼管理系统,与一些发达国家相比,系统研发起步比较晚。当时的计算机技术刚开始发展起来,国家经济力量比较薄弱,各地区的经济发展水平不平衡,再加上相关的网络应用技术不太先进,我国也使用了一段较长的时间对网络信息化管理进行探索[3]。近些年,因为国家非常重视和支持第三产业的发展,以及人们的日常生活需求越来越离不开信息管理技术的使用,所以我国的信息管理系统行业发展速度非常快,并且相关的体制法规也正在不断地被完善和改进。新时代背景下,根据人们的相关需求,不断地促进着相关产业的产生与发展,一系列电子产品、应用软件、信息管理系统等新时代的产物逐渐出现在人们的视野中,并且在近几年发展迅速,日渐趋于成熟[4]。

与国内相比,国外酒楼管理系统领域发展较早。国外的计算机技术发展比较成熟,所以系统相关的设计也比较完善。19世纪60年代左右,国外就开始研发酒楼管理系统,并且不久之后,迅速将其投入市场进行使用。美国、英国等一些发达国家快速发展计算机技术,促进了酒楼管理行业信息化建设[5]。而后随着相关的技术不断地发展,覆盖面非常广泛,应用领域比较多,促进着酒楼管理系统等相关的信息管理系统不断地发展和完善,并且其所设计的系统功能结构也比较合理、全面。相对而言,国外系统的研发在相关领域上还是占据着较大的优势[6]。因此,我们需要吸收国外系统开发领域中的较好的技术精华,发展我国的信息化管理系统,使得其面向大众,能够更好的、更全面的服务于相关的工作人员。

1.3研究内容

现今,互联网在我们的日常生活占据着日益重要的地位,我们也越来越离不开对移动设备、电脑等上网设备的使用。传统的酒楼管理模式主要依靠管理人员纯手工记录书籍的相关信息,比较繁琐,不方便查找,也非常容易出现错误。如今的书籍种类丰富、数量极多,如果再通过手工记录酒楼信息,将大大不利于酒楼管理行业管理相关的酒楼信息,严重影响酒楼管理行业的发展。因此,本人结合传统的酒楼管理业务模式和先进的数据信息管理模式,使用Java语言编程设计功能模块,JSP技术设计网页布局,MySQL数据库创建和存储数据表格,对蜀都天香酒楼管理系统进行设计和开发。本系统的设计有利于相关行业实现最大化的资源管理与共享,促进相关行业的信息交流、分工合作,提高相关工作人员的工作效率,最终实现整个酒楼行业服务的信息化管理。

1.4论文结构

本文围绕着蜀都天香酒楼管理系统的整个开发过程,展开了详细的描述和说明,设计和实现本系统的主要工作有:首先分析研究背景、研究状态,其次介绍设计系统时使用到的相关技术,然后通过系统分析确定系统的功能需求,接着通过编码工作详细设计和实现系统,最后再通过系统测试,找出系统存在的问题和解决问题的方法,不断地修改和完善系统。论文内容的组织结构设计如下。

第一章绪论,通过介绍本系统的研究背景、研究现状等内容,帮助用户了解和认识本系统的发展过程。

第二章相关技术介绍,主要介绍了Java语言、B/S模式、MySQL数据库等相关的开发技术,为后期系统的功能实现提供技术上的支持。

第三章系统分析,分析用户的使用需求,以及系统实现的可行性,最后通过用例建模分析与系统相关的参与者及其用例之间的关系。

第四章系统设计,主要根据系统总体功能设计,确定将要设计的系统功能模块,设计相关的数据表格。

第五章系统实现,通过相关的功能模块运行图,展现出系统的主要功能模块操作流程。

第六章系统测试,主要使用功能测试的方式,测试系统的相关功能运行和使用的具体情况。

第七章总结与展望,通过本文的各章节描述总结得出,基本上完成了系统的设计,展望未来将学习和使用更加先进的技术,提高系统的实用性,使得系统更好的服务于使用人员。

2相关技术介绍

2.1 B/S模式

B/S模式(Browser/Server)是一种比较常用的网络结构模式[7]。B/S模式是由模型、视图、控制器(Model-View-Controller,MVC)结构组成[8]。模型主要是指业务模型,视图主要是指用户界面,控制器主要是控制保证视图和模型的同步执行。B/S模式的三层结构是相互独立的,换句话说,当某一个模块发生修改和更新,其不会对其他模块产生影响。根据B/S的这一特点,可以将对业务逻辑的处理以及约束条件集中到中间层中,便于前端增加对模型和方法的调用和复用。并且可以直接通过中间层对数据库进行相关的操作处理,大大减少了数据库的连接数,节省了计算机的对相关的资源配置空间。

使用B/S模式可以节省系统资源配置,提高研发工作效率,减少开发时间,因而大大提高了我们开发软件的可能性。B/S模式有针对性的改变了传统的客户端/服务器模式(Client/Server,C/S模式),也可以说这是对C/S模式进行了扩展。在这种结构模式中,用户不用再向使用C/S模式一样,下载客户端,其可以直接通过使用浏览器的方式,打开网站地址,即可访问和使用相关的系统功能服务。

2.2 MyEclipse开发环境

软件开发使用的编程语言有许多种,而每种编程语言需要通过与其相对应的开发平台进行编译和运行。Eclipse平台和MyEclipse平台都是目前比较常用的开发环境。Eclipse平台是开源的,具有功能强大、可扩展性强等特点,可以应用于C/S模式软件的开发,但是它所占据的内存容量比较大,运行较慢,并且其并未提供Tomcat服务器,运行过程中需要将代码发布到Tomcat服务器中,测试使用的时间较长,故而不太适用于B/S模式软件的开发。

MyEclipse平台是建立在Eclipse平台的基础之上,增加了许多的应用插件,比如Tomcat插件、mail组件等。MyEclipse平台增加了Tomcat插件,代码编写完成或者更新完成时,程序员无需将代码发布到Tomcat服务器中,可以直接通过调试实现程序的运行。MyEclipse平台增加了Mail组件,该组件可以为本程序提供标准的邮件方法,便于开发人员完成与邮件功能相关的编译工作。MyEclipse平台占据的内存空间较小,同时其也具有较高的可扩展性,编程人员可以根据需要添加和使用相关的插件。可以支持主流的开源产品和相关的开发框架,被广泛运用到相关的移动系统、web应用系统等开发中。相比于Eclipse平台,本系统比较适合使用MyEclipse平台进行编程和开发。

2.3 MySQL数据库

MySQL是一种小型的关系型数据库管理系统,因为其运行速度快,占用内存空间小,并且源代码也是开源的,运行和维护成本低,系统性能稳定,受到了许多开发人员的喜爱[9]。考虑到MySQL数据库开发成本低,功能齐全等因素,大多中小型网站选择使用MySQL数据库管理数据信息。

SQL Server也是近几年使用较多的关系型数据库,其与MySQL数据库存在的不同之处主要有,在环境方面,SQL Server数据库比较适合于.NET环境,而MySQL数据库适用于几乎所有的语言;在成本方面,SQL Server数据库是商业化的,其运行多个数据库可许证,虽然有一个免费版,但是只能让你对关系型数据库管理系统有一定的认识与了解,熟悉相关的使用流程。如果要想使用SQL Server数据库的话,就需要支付相关费用,而MySQL数据库是开源的,其对于用户来说,使用是完全免费;在实际应用方面,SQL Server数据库和MySQL数据库均支持Java语言、PHP语言、C++语言等多种编程语言,但是MySQL数据库除了支持上述SQL Server数据库能支持的编程语言外,还支持Scheme、Eiffel等其他编程语言,故而MySQL数据库受欢迎程度比SQL Server数据库更高。

2.4 Java语言

Java语言是一种面向对象的编程语言,其主要具有继承、封装、多态等特征,从而提高编程工作效率,实现软件的设计和开发[10]。继承机制可以继承相关的类和方法,新的类可以在继承已经定义的类的相关特性基础上,扩展自己新的数据和功能,进而提高自身的能力。封装机制可以提高程序的安全性,其隐藏对象的相关属性和行为,对外只提供一个接口,用户直接通过访问相应的接口来实现自己需要的功能操作。多态机制可以描述对象的多样性,简单的来说就是引用相同的对象做不同的事务。Java语言具有安全高效的优点,并且其通过依靠Java虚拟机,可以实现跨平台操作[11]。Java语言比较容易学习和掌握,就目前软件开发所使用的开发类语言而言,Java语言比较受程序员喜爱,应用比较广泛。

2.5 JSP技术

JSP(Java Server Pages)是一种web网页开发技术,其主要以Java Servlet、Java框架体系为基础,设计动态的网站页面[12]。其中,Java Servlet是一种依赖于Java技术的web组件,它被Servlet引擎管理和调控,通过运行在web服务器上进而生成动态内容。JSP技术的基本原理是在原有的HTML程序文件中加入了JPS标签,以及与网站页面相关的Java程序片段,组合而成JSP网页。

用户第一次通过浏览器对JSP网页进行访问时,相关的web服务器会对用户所操作的网页代码进行编译处理,并且当编译工作完成后,会指向和保存相关的编译工作。用户下次再对JSP页面进行访问时,已经保存的编译工作在这时发挥了作用,系统直接执行被保存的编译代码。这样一来,便可以节约服务器和计算机相关的资源,大大提高用户访问网站的速度。JSP技术吸收和应用了Java语言的功能优势,形成了比较新颖的、优秀的网站页面设计技术,具有跨平台性、可伸缩性等特点,可以在多个不同的操作系统上实现运行,也可以在多台服务器上同时工作。

2.6 Tomcat服务器

Tomcat服务器是一种开源的应用服务器,其可以支持相关的Servlet代码和JSP代码。Servlet是一个按照相关的规范要求编写而成Java类,其具有平台独立、可移植性等特点,可以在web服务器上加载和运行[13]。对于开发者和测试人员来说,Tomcat服务器操作简单,代码容易理解,性能稳定可靠,所以开发人员使用Tomcat服务器对JSP等程序进行调试是方便可行的。

开发人员使用Tomcat服务器连接数据库,可以更好的完成系统与数据库的搭建工作,实现交互式的管理与控制相关的数据信息,所以Tomcat服务器使用比较广泛。我们的系统属于中小型数据规模,使用Tomcat服务器是足够的。因此,根据上述分析与说明,我们的系统使用Tomcat服务器实现JSP程序调试,连接数据库等功能操作。

3系统分析

3.1需求分析

需求分析在软件开发周期中是耗时最长的一个环节,系统的整个设计和实现过程主要依赖于需求分析报告。调查收集出不同用户对本系统的相关使用需求,由此设计相关的功能模块,从而期望实现用户满意度较高的实用型系统。这一过程是系统能否成功投入市场,也能否被用户所接受和使用的非常关键的一个步骤。总体需求分析大致可以被分为业务需求分析、功能需求分析和非功能需求分析。业务需求分析是通过详细分析用户的实际需要,确定需要设计的相关业务事项,其是功能需求分析的基础,本系统存在的主要业务需求包括用户注册、用户登录、用户留言等。功能需求分析是通过设计系统功能来实现相关的业务事项,其是系统实现的关键,本系统存在的主要功能需求包括用户注册管理、用户信息管理等。非功能需求分析是在系统使用过程中对性能的具体要求,对功能需求的一个补充内容,也是对功能需求的一个补充内容,主要包括响应需求、安全性需求、稳定性需求、可扩展性需求等内容。非功能需求是在系统功能需求以外的其他必要的需求内容,其不论在系统设计过程,还是在系统投入市场过程,都起到了极其重要的作用。

3.2可行性分析

3.2.1经济可行性

经济可行性是决定是否研发系统的关键性因素。我们主要通过比较实际的收益和成本的方法,来确定一个系统是否具有经济可行性。在使用系统的过程中,当获得的收益大于开发的成本时,说明此系统的研发在经济上是可行的。由于本系统的开发使用的技术基本上是开源的,获得技术上的支持是没有多少问题的,在软件实现方面所花费的成本是很低的,甚至不需要花费成本。研发系统的成本主要是来自调研、硬件和技术人员等方面。如果系统中需要存储的数据量不是很大,仅需要配置一台普通的服务器,即可满足相关需求。如果需要存储的数据量很大,则需要配置一台具有独立功能的服务器,比如管理数据库需要单独的数据库服务器,负责接入网站需要web服务器等等,但是一台服务器的价格是比较贵的。考虑到数据量和成本,我们使用小型集群服务器,这样既可以充分利用相关的资源,又可以让系统正常访问服务器。

3.2.2技术可行性

本系统使用Java语言编码设计相关的功能模块,MySQL数据库创建和存储数据表格,JSP技术设计网站页面,并且在MyEclipse开发环境中,编写相关的Java代码等系统程序文件,使用MySQL数据库存储数据信息,然后通过使用连接代码完成与MySQL数据库的搭建工作,再通过使用开发环境中的Tomcat插件,完成与Tomcat服务器的发布工作,并且通过与Tomcat服务器的交互行为可以实现代码调试工作,最后用户在浏览器中成功的访问和使用本系统。Java语言具有跨平台性,本系统主要通过Java语言进行编码实现的,所以本系统可以支持在多个操作系统或者多个浏览器上运行和使用[14]。MySQL数据库是可以被免费使用的,并且MySQL数据库的日常运行和维护工作比较简单,这样有利于降低本系统的开发成本[15]。JSP技术具有独立性好,实用性高的特点,使用JSP技术设计系统页面可以与服务器完成可靠有效的交互工作[16]。在学校期间,本人已经学习和掌握了Java语言、MySQL数据库、JSP技术等相关的技术相关知识以及用法,因此在技术可行性方面,本系统是可以实现被设计与实现的。

3.2.3操作可行性

本系统所采用网络结构是B/S模式,对于开发人员来说,可以直接复用相关的代码,或者稍微对原代码进行修改,使得其满足于本系统的相关需求,如此便可大大节约了开发时间,在最优最短的时间内完成对系统的设计。对于用户来说,在传统的模式下,需要下载客户端才可使用系统。现在,在新型的模式下,使用本系统,就不需要下载,直接选择浏览器打开网址,即可访问和使用本系统。并且,用户可以根据自身的工作需要,选择相关的菜单按钮操作本系统。在系统的一些功能模块中,本人还添加了相关的使用提示信息,方便用户更好更快的了解和使用本系统。因此,本系统的设计和实现是具备操作可行性的。

3.3 用例建模分析

UML(Unified Modeling Language)是一种可视化的建模语言,其功能完备,适用性强,易于理解,便于使用等优点。在UML建模中,用例建模是比较基础的,也是至关重要的部分。用例建模主要是通过建模的形式对系统的功能需求进行表达。其中,系统的相关功能需求是由用户对系统的实际使用需求而确定的[17]。用例建模主要可以被分为用例图和用例描述,用例图主要是以画图的形式对系统进行用例建模,用例描述主要是以使用语言文字进行详细描述的形式对系统进行用例建模。本人主要采用用例图对系统进行建模分析,管理员用例图如图3-1所示,用户用例图如图3-2所示。

图3-1管理员用例图

图3-2用户用例图

4系统设计

4.1系统功能设计

本系统主要通过使用Java语言编码设计系统功能,MySQL数据库管理数据,JSP技术设计简洁的、友好的网址页面,然后在MyEclipse开发平台中,编写相关的Java代码文件,接着通过连接语言完成与数据库的搭建工作,再通过平台提供的Tomcat插件完成信息的交互,最后在浏览器中打开系统网址便可使用本系统。本系统的使用角色可以被分为用户和管理员,用户具有注册、查看信息、留言信息等功能,管理员主具有查看信息,发布新闻等功能,系统总体功能设计图如图4-1所示。

图4-1系统总体功能设计图

4.2数据库设计

4.2.1概念设计

在数据库设计过程中,概念设计阶段是逻辑设计阶段得以实现的基础,也是根据用户参与情况确定对数据的处理要求,从而使得数据库设计成功的关键。概念设计的主要任务是将现实世界的所收集到的使用需求转化为抽象的信息世界结构的过程,能够真实的反映现实生活中实体与实体之间的联系,数据库的相关语法和代码比较容易理解和修改,方便相关人员将相关的数据信息存储到数据库中,并对其进行修改和使用[18]。

通过将现实世界中的实体、属性、联系等内容进行概念设计,建立比较抽象的概念数据模型,即E-R图。通过E-R图可将现实世界抽象到的概念设计转变成数据库的实体设计,并且能够明显的看见各个实体之间,数据的流动情况,具体较强的表达能力,更加方便于开发人员寻找与发现用户具体的需求[19]。因此,E-R的建立,在整个数据库的设计过程中,起着至关重要的作用。本系统主要的实体有管理员、用户、留言等。在E-R图中,矩形表示实体集,椭圆形表示属性,菱形表示联系。其中,联系的类型包括1:1(一对一)、1:n(一对多)、n:m(多对多)关系。数据库的概念设计阶段中主要设计的各实体信息E-R图分别如图4-2、图4-3、图4-4、图4-5、图4-6、图4-7、图4-8、图4-9所示,系统总体E-R图如图4-10所示。

图4-2管理员信息E-R图

图4-3用户信息E-R图

图4-4类型信息E-R图

图4-5菜品信息E-R图

图4-6包间信息E-R图

图4-7订单信息E-R图

图4-8聊天信息E-R图

图4-9新闻信息E-R图

图4-10系统总体E-R图

4.2.2逻辑设计

本系统使用MySQL数据库管理与系统相关的数据信息。逻辑设计阶段是将上一个阶段中的概念数据模型,转换为方便数据库进行存储的关系模型,即基本表的形式,方便开发人员后期对数据模型进行优化和管理[20]。逻辑设计阶段是整个数据库设计设计的关键,与系统有关的信息将会在这一阶段中被存储在数据库中,当用户使用本系统进行相关的功能操作时,与之有关的数据信息所在的基本表会发生相应的更新变化。数据库的逻辑设计阶段主要任务是将与系统相关的数据信息,设计成为方便数据库存储和管理的基本表格的形式,具体内容如下。

表4-1管理员信息表

|字段名称|字段说明|数据类型|是否主键|是否允许空| | - | - | - | - | - | |id|编号|int|YES|NO| |username|用户名|varchar|NO|NO| |password|密码|varchar|NO|NO| |role|角色|varchar|NO|NO| |addtime|添加时间|timestamp|NO|NO|

表4-2用户信息表

|字段名称|字段说明|数据类型|是否主键|是否允许空| | - | - | - | - | - | |id|编号|int|YES|NO| |name|用户名|varchar|NO|Yes| |account|账号|varchar|NO|Yes| |password|密码|varchar|NO|Yes| |img_photo|图片|varchar|NO|Yes| |role|角色|varchar|NO|Yes| |remaining|余额|decimal|NO|Yes|

表4-3类型信息表

|字段名称|字段说明|数据类型|是否主键|是否允许空| | - | - | - | - | - | |id|编号|int|YES|NO| |lxname|类型名称|varchar|NO|Yes|

表4-4菜品信息表

|字段名称|字段说明|数据类型|是否主键|是否允许空| | - | - | - | - | - | |id|编号|int|YES|NO| |cpname|菜品名称|varchar|NO|Yes| |lx_types|类型|tinyint|NO|Yes| |img_photo|图片|varchar|NO|Yes| |money|价格|decimal|NO|Yes| |notice_content|详情信息|varchar|NO|Yes| |pj|评价|varchar|NO|Yes|

表4-5包间信息表

|字段名称|字段说明|数据类型|是否主键|是否允许空| | - | - | - | - | - | |id|编号|int |YES|NO| |bjnumber|包间编号|varchar|NO|Yes| |bjname|包间名称|varchar|NO|Yes| |img_photo|图片|varchar|NO|Yes| |money|价格|varchar|NO|Yes| |notice_content|详情信息|varchar|NO|Yes| |pj|评价|varchar|NO|Yes|

表4-6订单信息表

|字段名称|字段说明|数据类型|是否主键|是否允许空| | - | - | - | - | - | |id|编号|int|YES|NO| |addtime|添加时间|timestamp|NO|Yes| |orderid|订单编号|varchar|NO|Yes| |tablename|类型名称|varchar|NO|Yes| |userid|用户编号|int|NO|Yes| |goodid|商品编号|int|NO|Yes| |goodname|商品名称|varchar|NO|Yes| |picture|图片|varchar|NO|Yes| |buynumber|数量|int|NO|Yes| |price|单价|float|NO|Yes| |discountprice|总价|float|NO|Yes|

表4-7聊天信息表

|字段名称|字段说明|数据类型|是否主键|是否允许空| | - | - | - | - | - | |id|编号|int|YES|NO| |addtime|添加时间|timestamp|NO|Yes| |userid|用户编号|varchar|NO|Yes| |adminid|客服编号|varchar|NO|Yes| |ask|问题|int|NO|Yes| |reply|回复|int|NO|Yes|

表4-8新闻信息表

|字段名称|字段说明|数据类型|是否主键|是否允许空| | - | - | - | - | - | |id|编号|bigint|YES|NO| |addtime|添加时间|timestamp|NO|Yes| |title|标题|varchar|NO|Yes| |picture|图片|varchar|NO|Yes| |content|内容|longtext|NO|Yes|

5系统实现

5.1管理员功能模块实现

5.1.1管理员登录

管理员可以选择任一浏览器打开网址,输入信息无误后,以管理员的身份行使相关的管理权限,管理员登录界面设计如图5-1所示。

图5-1管理员登录界面

5.1.2用户管理

管理员可以通过选择用户管理,管理相关的用户信息记录,比如进行用户账号查看,用户名称修改等操作,用户管理界面设计如图5-2所示。

图5-2用户管理界面

5.1.3类型管理

管理员可以通过选择类型管理,管理相关的类型信息记录,比如进行菜品类型添加,套餐类型查看,饮料类型修改等操作,类型管理界面如图5-3所示。

图5-3 类型管理界面

5.1.4菜品管理

管理员可以通过选择菜品管理,管理相关的菜品信息记录,比如进行菜品名称查看,详情信息查看,价格修改等操作,菜品管理界面设计如图5-4所示。

图5-4购买记录管理界面

5.1.5包间管理

管理员通过选择包间管理,管理相关的包间信息记录,比如进行包间名称查看,包间信息查询,包间定金修改等操作,包间管理界面设计如图5-5所示。

图5-5包间管理界面

5.1.6系统管理

管理员通过选择系统管理,管理相关的系统信息,比如进行客服管理,轮播图管理,活动咨询查看等操作,客服管理界面设计如图5-6所示,轮播图管理界面设计如图5-7所示,客服管理界面设计如图5-5所示。

图5-6客服管理界面

图5-7轮播图管理界面

图5-8活动咨询管理界面

5.2用户功能模块实现

5.2.1系统首页

用户在浏览器中打开本系统,可以进行活动咨讯查看,包间预定,菜品信息查看等操作,系统首页界面设计如图5-9所示。

图5-9系统首页界面

5.2.2包间预定

用户可以通过选择包间预定,预定相关的包间信息,比如进行包间详情信息查看,包间预定,包间评价等操作,包间预定界面设计如图5-10所示。

图5-10包间预定界面

5.2.3菜品信息

用户可以通过选择菜品信息,查看相关的菜品信息记录,比如进行菜品名称查看,添加菜品到购物车,立即购买菜品等操作,菜品信息界面设计如图5-11所示。

图5-11菜品信息界面

5.2.4个人中心

用户可以通过选择个人中心,管理与个人相关的信息,比如进行个人资料查看,个人订单查看,个人收藏管理等操作,个人中心界面设计如图5-12所示。

图5-12个人中心界面

FileController.java
package com.controller;

import java.io.File;
import java.io.IOException;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.ConfigEntity;
import com.entity.EIException;
import com.service.ConfigService;
import com.utils.R;

/**
 * 上传文件映射表
 */
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{
	@Autowired
    private ConfigService configService;
	/**
	 * 上传文件
	 */
	@RequestMapping("/upload")
	public R upload(@RequestParam("file") MultipartFile file, String type,HttpServletRequest request) throws Exception {
		if (file.isEmpty()) {
			throw new EIException("上传文件不能为空");
		}
		String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
		String fileName = new Date().getTime()+"."+fileExt;
		File dest = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+fileName);
		file.transferTo(dest);
		if(StringUtils.isNotBlank(type) && type.equals("1")) {
			ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
			if(configEntity==null) {
				configEntity = new ConfigEntity();
				configEntity.setName("faceFile");
				configEntity.setValue(fileName);
			} else {
				configEntity.setValue(fileName);
			}
			configService.insertOrUpdate(configEntity);
		}
		return R.ok().put("file", fileName);
	}
	
	/**
	 * 下载文件
	 */
	@IgnoreAuth
	@RequestMapping("/download")
	public void download(@RequestParam String fileName, HttpServletRequest request, HttpServletResponse response) {
		try {
			File file = new File(request.getSession().getServletContext().getRealPath("/upload")+"/"+fileName);
			if (file.exists()) {
				response.reset();
				response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName+"\"");
				response.setHeader("Cache-Control", "no-cache");
				response.setHeader("Access-Control-Allow-Credentials", "true");
				response.setContentType("application/octet-stream; charset=UTF-8");
				IOUtils.write(FileUtils.readFileToByteArray(file), response.getOutputStream());
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
}

BaojianyuyController.java
package com.controller;

import java.text.SimpleDateFormat;
import java.util.*;
import javax.servlet.http.HttpServletRequest;

import com.entity.BaojianxinxiEntity;
import com.entity.YonghuxinxiEntity;
import com.service.BaojianxinxiService;
import com.service.YonghuxinxiService;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;

import com.entity.BaojianyuyEntity;

import com.service.BaojianyuyService;
import com.utils.PageUtils;
import com.utils.R;

/**
 * 包间预约表
 * 后端接口
 * @author
 * @email
 * @date 2021-02-19
*/
@RestController
@Controller
@RequestMapping("/baojianyuy")
public class BaojianyuyController {
    private static final Logger logger = LoggerFactory.getLogger(BaojianyuyController.class);

    @Autowired
    private BaojianyuyService baojianyuyService;

    @Autowired
    private YonghuxinxiService yonghuxinxiService;

    /**
    * 后端列表
    */
    @RequestMapping("/page")
    public R page(@RequestParam Map<String, Object> params, HttpServletRequest request){
        logger.debug("Controller:"+this.getClass().getName()+",page方法");
        Object role = request.getSession().getAttribute("role");
        PageUtils page = null;
        if(role.equals("用户")){
            params.put("yh",request.getSession().getAttribute("userId"));
            page = baojianyuyService.queryPage(params);
        }else{
            page = baojianyuyService.queryPage(params);
        }
        return R.ok().put("data", page);
    }
    /**
    * 后端详情
    */
    @RequestMapping("/info/{id}")
    public R info(@PathVariable("id") Long id){
        logger.debug("Controller:"+this.getClass().getName()+",info方法");
        BaojianyuyEntity baojianyuy = baojianyuyService.selectById(id);
        if(baojianyuy!=null){
            return R.ok().put("data", baojianyuy);
        }else {
            return R.error(511,"查不到数据");
        }

    }

    /**
    * 后端保存
    */
    @RequestMapping("/save")
    public R save(@RequestBody BaojianyuyEntity baojianyuy, HttpServletRequest request){
        logger.debug("Controller:"+this.getClass().getName()+",save");
        Wrapper<BaojianyuyEntity> queryWrapper = new EntityWrapper<BaojianyuyEntity>()
            .eq("bjnumber", baojianyuy.getBjnumber())
            .eq("yh_types", baojianyuy.getYhTypes());
        logger.info("sql语句:"+queryWrapper.getSqlSegment());

        YonghuxinxiEntity yonghu = yonghuxinxiService.selectById((Integer) request.getSession().getAttribute("userId"));
        if(yonghu != null){
            if(yonghu.getRemaining() > 0 && yonghu.getRemaining() != null){
                Double q = Double.valueOf(yonghu.getRemaining()) - baojianyuy.getMoney();
                if(q > 0){
                    yonghu.setRemaining(q);
                    yonghuxinxiService.updateById(yonghu);
                }else{
                    return R.error(511,"余额不足请充值");
                }
            }else{
                return R.error(511,"余额不足请充值");
            }

        } else {
            return R.error(511,"请登录后在预约");
        }

        BaojianyuyEntity baojianyuyEntity = baojianyuyService.selectOne(queryWrapper);
        if("".equals(baojianyuy.getImgPhoto()) || "null".equals(baojianyuy.getImgPhoto())){
            baojianyuy.setImgPhoto(null);
        }
        if(baojianyuyEntity==null){
            baojianyuy.setYhTypes((Integer) request.getSession().getAttribute("userId"));
            baojianyuyService.insert(baojianyuy);
            return R.ok();
        }else {
            return R.error(511,"不可以重复预约哦");
        }
    }

    /**
    * 修改
    */
    @RequestMapping("/update")
    public R update(@RequestBody BaojianyuyEntity baojianyuy){
        logger.debug("Controller:"+this.getClass().getName()+",update");
        //根据字段查询是否有相同数据
        Wrapper<BaojianyuyEntity> queryWrapper = new EntityWrapper<BaojianyuyEntity>()
            .notIn("id",baojianyuy.getId())
            .eq("bjnumber", baojianyuy.getBjnumber())
            .eq("bjname", baojianyuy.getBjname())
            .eq("yh_types", baojianyuy.getYhTypes())
            .eq("notice_content", baojianyuy.getNoticeContent())
            ;
        logger.info("sql语句:"+queryWrapper.getSqlSegment());
        BaojianyuyEntity baojianyuyEntity = baojianyuyService.selectOne(queryWrapper);
        if("".equals(baojianyuy.getImgPhoto()) || "null".equals(baojianyuy.getImgPhoto())){
                baojianyuy.setImgPhoto(null);
        }
                baojianyuy.setNoticeTime(new Date());
        if(baojianyuyEntity==null){
            baojianyuyService.updateById(baojianyuy);//根据id更新
            return R.ok();
        }else {
            return R.error(511,"表中有相同数据");
        }
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    public R delete(@RequestBody Long[] ids){
        logger.debug("Controller:"+this.getClass().getName()+",delete");
        baojianyuyService.deleteBatchIds(Arrays.asList(ids));
        return R.ok();
    }
}


LeixingServiceImpl.java
package com.service.impl;

import org.springframework.stereotype.Service;
import java.util.Map;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import org.springframework.transaction.annotation.Transactional;
import com.utils.PageUtils;
import com.utils.Query;

import com.dao.LeixingDao;
import com.entity.LeixingEntity;
import com.service.LeixingService;
import com.entity.view.LeixingView;

/**
 * 类型表 服务实现类
 * @author 
 * @since 2021-02-19
 */
@Service("leixingService")
@Transactional
public class LeixingServiceImpl extends ServiceImpl<LeixingDao, LeixingEntity> implements LeixingService {

    @Override
    public PageUtils queryPage(Map<String,Object> params) {
        if(params != null && (params.get("limit") == null || params.get("page") == null)){
            params.put("page","1");
            params.put("limit","10");
        }
        Page<LeixingView> page =new Query<LeixingView>(params).getPage();
        page.setRecords(baseMapper.selectListView(page,params));
        return new PageUtils(page);
    }

}

声明

本博客适用于广泛的学术和教育用途,包括但不限于个人学习、开发设计,产品设计。仅供学习参考,旨在为读者提供深入理解和学术研究的材料。


网站公告

今日签到

点亮在社区的每一天
去签到