版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
绪论国内外发展现状时代的车轮滚滚前进,发展从未停歇,伴随着我们日常生活愈来愈好,人们的生活质量蒸蒸日上,在不断提高的同时,和朋友的交流活动也变得日益繁多。休闲时刻的聚会或者正式场合的聚餐,选在饭店、餐馆或是任何地方都变得屡见不鲜。那些提供餐饮服务的场所在确保食品质量和自身利润能够维持的前提下,同时也应确保自身所提供的优惠和服务也是优质的,并制定一套完整的标准与要求,不断完善。因为我们的客人不仅是为了一顿可以果腹或者精美绝伦的食物,在这种普通的交流休闲活动中,他们更是会在潜移默化中考量一家饭店所提供的优惠和服务,并以此形成各家店之间的直接对比和自我标准。平台的诞生得益于以上问题的产生,平台的好处就是可以减少人工所带来的成本以及服务员付出的运动量,利用网站实现点菜功能从而可以使顾客拿到手的商品价格比实体店消费的价格更为低廉,实现物超所值、物美价廉的效果。并且线下实体店中使用的最多的就是纸质菜单,习总书记曾说“绿水青山就是金山银山”,从环保角度考量通过网站在线订购食物,不必要的木质资源浪费就可以被减少或者避免,倡导环保的同时订购食物的时间也被节省下来可以做其他事情。线上的订购方便让我们的顾客和用户更为直观的挑选自己想要的菜品,如果不知道想要吃什么还可以利用我们的大数据推送功能辅助我们的选择,不仅增加了订购的乐趣也能让我们的订购更加充满针对性。各位还可以通过查看以前的评价筛选更好的店铺。利用互联网我们餐厅也可以对各自的菜单更换、更新进行快速又便捷的操作,只需动动手就可以完成对内容和商品介绍的丰富。目前,信息技术发展瞬息万变,新技术层出不穷、日新月异,很多的餐饮业餐厅还是依赖和依靠着传统的以线下的方式来进行宣传推广和交流沟通的方式,这样不可避免地会使其自身陷入与时代脱节的困境中。在网络餐饮业还在初期形成阶段的当下,跟上时代的步伐是时代的潮流亦是大势所趋,网上点餐业务这种全新时尚的方式会将与时俱进逐渐融入我们的日常生活并且成为我们生活中不可缺少的一环。课题的研究背景各种风险投资商对互联网这个新兴产业技术的热情让网上订购的迅速崛起,信息化的蓬勃发展也让大型餐饮服务业对于不断崛起和兴起的互联网信息行业更为的重视。同时,传统行业的转变也使得不少新兴互联网公司发生了翻天覆地的变化,他们开始将大量资金进驻网上的在线订餐点购服务,让餐饮行业的巨头们都燃起了激情,随着他们将新技术涉足融合进餐饮行业,面向餐饮为主的第三方平台和APP应用开始涉猎主要市场,让线上平台点餐这种生活方式迅速崛起。餐饮业如果还在单纯的使用传统的手工管理,那么将会在现代大数据信息与网络技术结合的当下,变得已经日益激烈的竞争中难以立足。随着互联网的兴起,信息技术市场的商业化竞争也促使各种运营管理方式要更向电子化管理的方式看齐,电子商务已经亦步亦趋地融入并且深入到了人们的日常生活中。手工管理的方式不仅会导致我们的餐厅在人工方面的成本高居不下,如果依旧冥顽不灵在日常的管理中采取常规普遍的管理方式还会导致逐渐脱离激烈的市场环境直至被市场所淘汰。我们一直讲究高效的管理方式和低廉的管理成本,在一些居民住宅区、学校、大型商场附近的所处于“竞争风暴”地带的餐饮行业尤其是要重视发展和运用先进的运营管理方式,如果抛弃现代化的管理手段,或者对于此不屑一顾将难以在激烈的竞争中保全自身,更不要提在行业中立足。课题的研究意义全面脱贫攻坚已经初步告一段落,但是面对人民日益增长的对于生活质量的要求和需求不断提高,一日三餐中如何均衡营养,如何在保证果腹的情况下还能更有质量和更为精致,营养搭配的要求不容小觑。根据当前人民们纷繁复杂的点菜需求,互联网餐饮在餐饮行业中的地位节节攀升变得越来越重要,对于当前信息技术化的时代,面对紧凑的上班时间和快节奏的现代生活,用户要在短时间内既满足进食需求又满足身体所需的各项营养元素,互联网餐饮的优势尽数体现也必将得到更好的发展。不仅是我们用户有更多的需求,我们的商家在高额的房地产附加值的当今,利用互联网在网络上进行销售也可以更大程度减少房地产的需求,以及快速消耗库存。对于吃饭时间非常紧促的各类用户,我们平台利用大数据来分析他们的各项需求以此来为他们进行服务与推荐,让他们可以在短时间内就找到适合自己的食品,满足个人需求,并且我们平台能在用户订购餐后就立即对符合区域要求的客服进行送餐到家的服务。相关技术简介SSMSSM就是Spring+SpringMVC+MyBatis,框架集由Spring、MyBatis两个开源框架整合而成,是一些经典的java开源框架的简称,常作为数据源较简单的web项目的框架。常规基础的业务流程是:在前台展示层,通过JSP页面实现页面的交互,通过HTTP协议HttpRequest和HttpResponse请求发送并返回结果,然后在Struts配置中匹配相应对照的映射文件来执行控制层的角色。Spring容器在业务层的逻辑处理层使用IoC容器来管理组成应用程序的组件,这可以大大渐变我们人工去操作创建对象这一手动的过程,同时并在业务实体控制层注入动作操作。确保业务流程运作的过程中有故障发生的情况时,还有保证只专注于不简便的大流量业务数据处理基础上,还能运行配套的支持数据库和相应的业务,我们可以对数据进行合理的回滚操作,数据的完整性因此得以确保与保障。持久层依赖于MyBatis数据库结构结构映射。它进行处理操作的过程中会自动生成JavaBeans,数据库的操作离不开面向对象的思维,想让数据库响应我们可以用JavaBeans组件来进行操作。SSM集成理念我们用有条理和结构化来形容当Spring被管理时,每一层都以特殊的方式被连接,总管于Spring同时各层之间都互相联系,例如handler掉配service等可以相互调用,相互配合。1整合dao层:我们使用Mybatis+SpringBoot集成构建Web应用时,在Application启动类上标注一个@MapperScan注解通过spring管理mapper接口。Spring就会自动在@MapperScan定义的basePackage中扫描Mapper接口并将对应的bean注册到ApplicationContext中,在spring中使用mapper的扫描器自动扫描mapper接口进行注册。2集成服务层:前端控制器请求HandlerMapping查找Handler可以根据spring管理服务接口。使用xml配置、注解在spring配置文件中进行查找配置服务接口:实施事务控制。3集成springmvc:这里不需要集成的理由是这个东西是一个spring模块。数据库选择在诸如用户注释、评论之类的使用场景中,必须确保事务的一致性,因此使用关系数据库比使用非关系数据库更为合适。常见的关系数据库系统是:MySql,Oracle,PostgreSQL,SQLite。数据库的比较见图1.1。图1.SEQ图表\*ARABIC\s11常见关系型数据库系统比较纵观上图,由开源团队维护的MySql作为本外卖点餐系统的数据库管理系统被当作最后决定,此外我还会额外还将会新增加一些别的其他的功能,用来支持电脑本地的非阻塞操作和进度报告,其他功能是除了API和命令行的其他功能。需求分析系统需求分析(1)商品管理:名称,及想要输入的商品的名称;分类,为了方便顾客选择挑选,使商品的摆放更加有组织、有条理,我们可以在这里将商品进行归类,将不同种类的商品归入不同的类别中,让客户在订购时更有针对性,更为的方便和便利。(2)商品类别管理:中国菜系种类繁多,集合五湖四海菜系的综合性大饭店里面的菜品乱花渐欲迷人眼,其中不同派系的菜品如果不进行很好的归类会让人一时间无从下手,为方便我们来自天南海北、来自全球各地的顾客可以更好地根据各自生活习惯挑选适合自己口味的菜肴,我们一定要将这些菜更有逻辑、更有条理的进行分门别类。(3)订单管理:我们此处的订单管理不仅是要方便顾客一眼核对自己所点的菜品,方便顾客确认多支付金额的正确与否,更为要紧的是方便我们的餐厅人员可以根据订单内容准备菜品,更快的将菜品交付给我们的顾客。我们对于此会先将顾客挑选的商品集合在一起让顾客确认,如果无误后就会有最终的呈现。(4)用户管理:用户管理又分为用户自我管理和平台管理员管理,管理我们在系统中注册过在数据库中收集的用户。在用户自我管理中,这里是指我们平常使用网页正常登录的注册操作,这部分是可以由我们的用户随意操作的,只是为了在用户注册过程中收集用户的信息方便以后的各种核验或者作为凭证,可以看做是另类的“身份证”。在平台管理员管理中,其实是有专门的管理员账号密码,只有用此账号密码登录才能在后台进行一个用户的登录管理,管理员不能被普通的注册,只有一个总管理的账号进行添加才可以,这也很大程度上保护了我们用户的信息安全。(5)用户登录注册:只有本平台的会员才能正常使用本平台,我们将用户填写的基本信息收集起来,作为以后使用本平台进行一些点餐操作的通行证。(6)选择商品:每道菜品配备精彩绝伦、精致美丽的图片让用户根据图片可以清晰直观、主观的选择食客们自己心仪的餐品和食物。(7)智能推荐商品:根据用户平时点餐时的喜好、收藏和点菜时的点击进行大数据收集分析,以轮播图片的模式为我们的顾客智能推荐商品。(8)订单派工:管理员可以对顾客已支付订单进行下单派工,选中骑手后,骑手界面就会显示该订单。业务流程分析业务流程图主要是描述一个业务的大致过程,比如学生要去上学,首先要整理好书包,然后再穿好校服,然后再从家里以各种方式前往学校,然后达到学校后开始上学。对我们平台来说,就是描述使用此平台的用户首先需要登录或是注册,当然登录的前提是此前已经注册过相应的账户,在登录或是注册完成后通过平台来订购食品,然后我们的餐厅通过平台给出的信息为我们的用户准备食物,完成后安排骑手送出,送出到达后我们用户可以对此次食品和服务进行评论。在这里业务流程图描述的也是完整的业务流程,以业务处理过程为中心,一般没有数据的概念。业务流程图这可以理解为是我们系统当下作业顺序和系统管理信息流向的图表。这里被用来说是一种帮助我们网站分析人员来描述在网站管理运行处理系统业务过程中通过业务流程图的方式,来清晰的理清各个部分之间的关系,以便于我们发现被我们遗漏的部分,还有疏漏和缺陷也可以快速定位,及时修复漏洞。由于用一些简洁明了的特定符号及连线表示某个具体某个系统运行部分的处理过程,不但能够帮助分析人员通过修改现下当前系统中的不合理组件和找出业务流程中的不合理流向来优化业务处理过程还能易用于一些非专业的人士来了解我们整个系统如何运行。TFD基本上在优化以及改进业务流程的过程方面一般是先链接业务处理过程中的所有处理步骤,然后对此业务的实际处理步骤和过程绘制,将它们用图片的形式联系起来,是一种用图形方式反映实际业务处理过程的“流水账”。虽然这个“流水账”的缺点是在面对一些专业性较强的方面时会稍显逊色,但从体来说对于开发者和分析者理顺和优化业务过程是很有帮助的为系统的目标开发打下夯实基础。业务流程图如图2.1、2.2所示。图2.1标识符图2.2业务流程图数据流程分析数据流程图(DataFlowDiagram,DFD/DataFlowChart):是一种从数据的角度来描述一个系统数据流程的主要工具,它用一组符号或者可以更具体地把流程画出来以此来描述整个系统中信息的全貌。对数据流程图的定义可采用分层的DFD来描述,可以分为顶层,中间层、底层,以此综合地反应复杂的软件系统的信息在系统中流向和加工以及存储。数据流程图有两个特征:抽象性和概括性。抽象是以数据流图中的箭头表示信息和数据存储、流动、使用以及加工情况等数据流情况,概括性是指把系统对各数据处理过程整体串联起来表示一个程序以何种顺序来进行执行处理。该网站系统的流程图表述来了我们的平台管理员是如何在登录后端后进行管理数据的操作的,在特殊的通道以特别的账号登录管理员账号后,管理员可以进行对商品类型、商品详细信息、商品订单、评论信息和用户信息进行管理。从流程图可以看出,这样使我们的管理更为的科学和简便,不仅有益于我们平台管理员的管理,以便于我们平台对于管理员的监管。此图也展示出我们的用户在使用该平台时,用户可以注册个人的用户信息并对其进行修改,进入网页进行餐品浏览并且在挑选完毕后提交订单进行在线支付操作,事后对其进行评论以及查看自己或别人的评论等操作。如图2.3所示。图2.3数据流程图数据需求数据需求是指在完成需求分析时所需要的数据。在线速达外卖点餐系统的数据对象主要是:会员、产品、订单、购物车和评论。如下面所示。(1)会员基本属性:包含一些使用网站的用户的基本信息,可以确保他们在使用过程中展现他们身份的唯一性,作用类似于“身份证”,其中的信息如图2.4所示。图2.4“会员”的实体属性图(2)商品属性:包括网站所售卖商品的基本信息,让我们的用户在使用平台进行订餐服务时可以清晰的了解每个产品的具体情况,方便他们根据具体情况进行下单订购,其中具体信息如图2.5所示。图2.5“商品”实体属性图(3)订单属性:包括订单id、订单号、价格、收货人姓名、收货地址、收货电话、详细地址、状态、商品id、下单时间、商品数量、用户名等,如图2.6所示。图2.6“订单”实体属性图(4)购物车属性:在用户下单前的挑选阶段,对于自己已经挑选的餐品有更直观的了解,同时是“一户一车”,做到专人专车,还要保证好统计,为直接下单付款打下基础,其中购物车具体属性如图2.7所示。图2.7“购物车”实体属性图(5)评论属性:在用户订餐完毕后,可以就此次订购体验发表自己的直观感受以便于其他用户进行参考,同时评论也要符合社会主义核心价值观和区别正常评价或是刷好评、恶评之分。具体属性内容如图2.8所示。图2.8“评论”实体属性图每个事物之间都会存在一定的联系,对于一个系统软件或者平台来说亦是如此,那么在本在线外卖速达软件中也不例外。我们网站设置一名总管理来维护和管理我们的外卖平台,保证我们的会员的正常使用,同时保证每名会员拥有一个购物车来进行订购操作,订购餐品可以是多样的,可以重复无限次的进行下单,每次订购餐品的数量都是不限制的。所有以上所说的联系如图2.9所示。图2.9各实体间联系图系统总体结构设计系统的功能模块一个好的系统由好几个模块组成,那么本在线速达外卖点餐系统主要分成三个模块:骑手模块、网站前台模块、管理员模块。骑手模块主要功能为骑手的工单处理;网站前台模块里又分为售后申请、加入购物车和收藏、订单支付、评论留言等;管理员模块的主要功能是权限管理、系统设置、用户管理、咨询管理、商品分类管理、留言管理、商品管理、商品库存管理、订单管理、售后管理、我的工单以及统计分析。所有包括的内容如图3.1所示。图3.1系统功能模块图数据库设计数据库设计是基于系统的功能分析基础上,在一个应用环境中构造最优的数据库模式,通过创建数据库表来满足我们平台对于用户的信息存储和数据应用处理的需求。在此数据库中设计的设计内容我们又分为用户信息表、购物车信息表、订单表、收货地址表和评论表。我们在此数据表的设计上本着充分考虑数据库优化和效率的问题,同时考虑到用户需求和后期数据维护的问题,所以每个数据库表具体包含以下等信息。用户信息表顾名思义为了便于我们的用户在进行注册和登录操作时的管理,在此表中放入用户id、使用者name、登录通行证、真实姓名、虚拟用户名、电话号码、密码、备注、家庭地址、城市等个人信息。如表3.1所示。表3.1用户信息表字段名数据类型长度是否为空idint(11)NOusernamevarchar(255)YESuserpasswordvarchar(255)YESrealnamevarchar(255)YESfilenamevarchar(255)YESidcardvarchar(255)YEStelvarchar(255)YESdelstatusvarchar(255)YESusertypevarchar(255)YESshstatusvarchar(255)YESnotetextYESroleidint(11)YESaddrvarchar(255)YESprovincevarchar(255)YEScityvarchar(255)YESdistrictvarchar(255)YES商品信息表每个菜品都是独立的,为了区分同名的菜品所以特地设置了单独的id,在此基础上此表还包含了每个菜品不同的类型、菜品name、price、展示出来的照片、用户对此的评价情况、库存等信息。如表3.2所示。表3.2商品信息表字段名数据类型长度是否为空idint(11)NOproductnovarchar(255)YESproductnamevarchar(255)YESfilenamevarchar(255)YESpricedecimal(10,2)YEStpricedecimal(10,2)YESfidvarchar(255)YESsidvarchar(255)YEScontenttextYESdelstatusvarchar(255)YESissjvarchar(255)YESistjvarchar(255)YESsavervarchar(255)YESproductidvarchar(255)YESleibievarchar(255)YESptpricevarchar(255)YESagevarchar(255)YESisjkvarchar(255)YESxgvarchar(255)YESother1varchar(255)YESother2varchar(255)YESother3varchar(255)YES留言信息表菜品的id、用户id、商家id以及最重要的建议和留言或者是投诉等用户填写的信息都被存储于此。如图表3.3所示。表3.3留言信息表字段名数据类型长度是否为空idint(11)NOmemberidvarchar(11)YESproductidvarchar(11)YEShfcontenttextYEScontenttextYESsavetimevarchar(255)YESscoreint(11)YES订单信息表每次用户下单订购都会产生一个订单,那么此数据库表中就包含该下单用户的id、虚拟name、订单id、productphoto、price、订单num、总量、名称、用户所选收货name、address、telenum等信息。如表3.4所示。表3.4订单信息表字段名数据类型长度是否为空idint(11)NOddnovarchar(255)YESmemberidvarchar(255)YESproductidvarchar(255)YESnumint(11)YEStotaldouble(255,2)YESfkstatusvarchar(255)YESshstatusvarchar(11)YESaddrvarchar(255)YESsavetimevarchar(255)YESdelstatusvarchar(255)YESshfsvarchar(255)YESzffsvarchar(255)YESsavervarchar(255)YESisddvarchar(255)YESfidvarchar(255)YESgoodsidvarchar(255)YESgoodstypevarchar(255)YESempidvarchar(11)YES购物车信息表所有用户购买的物品都存放在购物车中,此表就包括类似于productid、用户id、商品name、数量、商户id等购物车相关的信息。如表3.5所示。表3.5购物车信息表字段名数据类型长度是否为空idint(11)NOproductidint(11)YESmemberidint(11)YESnumint(11)YESshopidint(11)YES系统详细设计用户注册模块设计如果一个尚未注册的用户是没有办法使用本平台的,所以本模块的作用就是辅助用户在本系统上进行注册和登录的操作,如果他们想要使用本系统就必须填写相应的信息注册个人的账号并且同时设置符合规定的密码。这也更便于我们系统进行用户的相应管理。为了确保注册信息的合法性以及有效性,我们会在过程中利用相关手段判断两次的输入是否相同一致,并在此基础上再判断密码的字长和相关要求是否也符合网站平台的规定。整个流程走完后,在系统验证我们用户所填写的所有信息后将提示信息反馈给我们的用户,用户再根据相关流程看是直接登录并将以上信息插入数据库还是根据报错信息进行重新的填写或是重走整个注册流程。具体如图4.1所示。图4.1用户注册模块流程图实现过程:表单的相关信息被网页用户填写在注册页面后,利用正则表达式的作用判断正确与否,具体体现在被系统用来判断网页用户所输入的个人信息。其中具体的要求是用户名必须合法和规范比如不能有特殊图案,密码的强弱程度也要符合规定,输入两次的两个密码必须完全相同一致。输入框不会出现提示信息的必要条件是所有的信息都满足上述条件后。在以上信息都符合规定后我们的用户才可以继续进行注册操作,前台传输发送的网页用户填写的用户名以ajax的手段被网页的后台接收后,会查询前台发来的用户名是否存在于数据库中是会通过使用sql查询语句的方法来进行判断。系统不会提示注册失败信息和向前台发送错误信息除非后台的数据中没有找到被用户输入的注册名字。一旦注册成功那么数据库的用户信息表中将会以sql插入语句插入该次用户所提交的信息并同时转到进入页面表示该次注册或是登录操作成功。<resultMaptype="com.entity.Message"id="BaseResultMap"><idcolumn="id"property="id"jdbcType="INTEGER"/><resultcolumn="memberid"property="memberid"jdbcType="INTEGER"/><resultcolumn="content"property="content"jdbcType="VARCHAR"/><resultcolumn="savetime"property="savetime"jdbcType="VARCHAR"/><resultcolumn="replycontent"property="replycontent"jdbcType="VARCHAR"/><resultcolumn="replysavetime"property="replysavetime"jdbcType="VARCHAR"/></resultMap><insertid="add"parameterType="Message">insertintomessagevalues(null,#{memberid},#{content},#{savetime},'','')</insert><selectid="selectAll"resultMap="BaseResultMap">select*frommessagewhere1=1<iftest="key!=nullandkey!=''">andmemberidin(selectidfrommemberwhereunamelike"%"#{key}"%")</if>orderbyiddesc</select><selectid="searchMessage"parameterType="String"resultMap="BaseResultMap">select*frommessagewhere1=1andmemberidin(selectidfrommemberwhereunamelike"%"#{0}"%")</select><updateid="update"parameterType="Message">updatemessagesetreplycontent=#{replycontent},replysavetime=now()whereid=#{id}</update><deleteid="delete"parameterType="Int">deletefrommessagewhereid=#{id}</delete></mapper>用户登录模块设计本模块主要用于对注册成功的用户进行登录验证。用户首先填写完整的登录表单信息并提交。提交后,系统将会根据填写情况查询数据库,以确定判断当前提交的信息是否存在于数据库中的用户表中。如果没有找到输入的相应的用户名信息,则会提示用户“该用户未注册”。若用户表中找到了有相应的用户名信息,那么则它将接着确定用户输入的密码判断该用户密码是否与注册时的密码相同。如若不禁相同不一致,那么则会提示“密码不正确,请重新输入”,如若不然页面将会显示登录成功,该网站页面将会跳转到网站主页。如图4.2所示。图4.2用户登录模块流程图实现流程:用户进入注册页面,首先根据自己注册的账号信息填写登录用户名和密码,系统根据用户填写的用户名向后台发送ajax请求,后台接收来自前台数据的消息,使用sql查询语句查询数据库的userinfo表中是否存在于当前用户名,如果返回的是json字符串结果,则再将当前查询结果的密码与前台发来的密码进行比较,如果显示相同,则表示登录成功,您将被重定向到网站首页。如果执行SQL查询语句没有结果,则说明用户没有注册。<resultMaptype="com.entity.User"id="BaseResultMap"><idcolumn="id"property="id"jdbcType="INTEGER"/><resultcolumn="username"property="username"jdbcType="VARCHAR"/><resultcolumn="userpassword"property="userpassword"jdbcType="VARCHAR"/><resultcolumn="realname"property="realname"jdbcType="VARCHAR"/><resultcolumn="filename"property="filename"jdbcType="VARCHAR"/><resultcolumn="idcard"property="idcard"jdbcType="VARCHAR"/><resultcolumn="tel"property="tel"jdbcType="VARCHAR"/><resultcolumn="delstatus"property="delstatus"jdbcType="VARCHAR"/><resultcolumn="usertype"property="usertype"jdbcType="VARCHAR"/><resultcolumn="shstatus"property="shstatus"jdbcType="VARCHAR"/><resultcolumn="note"property="note"jdbcType="VARCHAR"/><resultcolumn="roleid"property="roleid"jdbcType="INTEGER"/><resultcolumn="province"property="province"jdbcType="VARCHAR"/><resultcolumn="city"property="city"jdbcType="VARCHAR"/><resultcolumn="district"property="district"jdbcType="VARCHAR"/><resultcolumn="addr"property="addr"jdbcType="VARCHAR"/></resultMap><insertid="add"> insertintouservalues(null,#{username},#{userpassword},#{realname},#{filename},#{idcard},#{tel},#{delstatus},#{usertype},#{shstatus},#{note},#{roleid},#{addr},#{province},#{city},#{district}) </insert> <selectid="findById"resultType="User"parameterType="int"> select*fromuserwhereid=#{id} </select> <selectid="selectAll"parameterType="HashMap"resultMap="BaseResultMap"> select*fromuserwhere1=1anddelstatus=0 <iftest="key!=nullandkey!=''"> andrealnamelike"%"#{key}"%" </if> <iftest="username!=nullandusername!=''"> andusername=#{username} </if> <iftest="userpassword!=nullanduserpassword!=''"> anduserpassword=#{userpassword} </if> <iftest="usertype!=nullandusertype!=''"> andusertype=#{usertype} </if> <iftest="shstatus!=nullandshstatus!=''"> andshstatus=#{shstatus} </if> <iftest="role!=nullandrole!=''"> androleid!=2 </if> <iftest="id>0"> andid!=#{id} </if> <iftest="roleid!=nullandroleid!=''"> androleid=#{roleid} </if> <iftest="addr!=nullandaddr!=''"> andaddr=#{addr} </if> <iftest="province!=nullandprovince!=''"> andprovince=#{province} </if> <iftest="city!=nullandcity!=''"> andcity=#{city} </if> <iftest="district!=nullanddistrict!=''"> anddistrict=#{district} </if> orderbyiddesc </select> <updateid="update"parameterType="User"> updateuser <set> <iftest="userpassword!=nullanduserpassword!=''"> userpassword=#{userpassword}, </if> <iftest="realname!=nullandrealname!=''"> realname=#{realname}, </if> <iftest="filename!=nullandfilename!=''"> filename=#{filename}, </if> <iftest="idcard!=nullandidcard!=''"> idcard=#{idcard}, </if> <iftest="tel!=nullandtel!=''"> tel=#{tel}, </if> <iftest="shstatus!=nullandshstatus!=''"> shstatus=#{shstatus}, </if> <iftest="realname!=nullandrealname!=''"> realname=#{realname}, </if> <iftest="delstatus!=nullanddelstatus!=''"> delstatus=#{delstatus}, </if> <iftest="note!=nullandnote!=''"> note=#{note}, </if> <iftest="roleid!=nullandroleid!=''"> roleid=#{roleid}, </if> <iftest="addr!=nullandaddr!=''"> addr=#{addr}, </if> <iftest="province!=nullandprovince!=''"> province=#{province}, </if> <iftest="city!=nullandcity!=''"> city=#{city}, </if> <iftest="district!=nullanddistrict!=''"> district=#{district}, </if> </set> whereid=#{id} </update></mapper>前端页面的设计与实现前端界面所展示的菜品如果以一种清新的风格并配以一些漂亮的轮播图片来表现我们的菜品展示界面那么能更好的吸引我们的顾客来本外卖点餐系统进行消费。我们可以在首页展示方面,根据不同的商家和菜品进行分类展示,辅佐以一些夺人眼球的夸张字体和大胆撞色,给人以一种视觉冲击。同时根据不同类型、不同菜系、不同价格的分类加上一些特别放大的首推商品,同时为了不同用户能够更仔细的观看我们的菜品,根据商品分类我们也可以对图片和文字设置部分放大功能,分别对列出商品分类,按照商品分类展示中点击屏幕上的特殊按钮就可以局部放大,让我们的顾客从细节入手,掌握全局。当然我们的页面还可以显示商品语言、类别、市场价格和当前价格等信息。购物车模块设计现在很多人都会有“选择恐惧症”,那么我们购物车模块设计的初衷其实就是将如果一个用户有想要购买此产品的意愿的菜品就将其先行添加到购物车中,然后他可以去浏览其他的菜品,这样等他总体浏览完后将没有意愿在购买此商品,或者是可以根据自己的喜好以及现实需求修改购物车中的信息,想要删除购物车中所有信息的话只需要通过单击商品后面的删除按钮进行一键删除,那么并不是想要一次性清除所有内容而是要有所保留或者是有所增加,可以点击购物车中的加减号来增加或者减少菜品的数量,但是如果数量已经是1,那么用户只能将其删除并不能再执行减量的操作。我们最后结账清算时的总价格会随着数量的变化上涨或减少,这是自动变化的,便于最后我们用户的结账清算。具体流程如图4.3和图4.4所示。图4.3购物车模块流程图实现过程:sessionStorage中保存着顺利在系统中成功登录的本平台用的用户name,前提是他们成功登录的情况下才会保存。后台会接受一些数据在我们用户将想要的餐品添加到购物车时,在这个情况下我们sessionStorage中的用户name和当前product的id会被用ajax请求的方式传给后台,而我们的用户也会在此时看到被添加到购物车的菜品的详情。在这个时候所有购物车内的所有信息都可以进行更改,我们用户可以随时修改修正购物车内的错误商品或者是添加数量,这个过程中我们后台收到用户操作的一些指令都会以ajax的方式请求后台,我们后台接受到这些操作带来的数据传送后,会根据SQL的查询或者删除或者添加语句来完成我们用户的操作,比如将将找到的结果连同用户名一起插入到前台到购物车表中的购物车或是删除信息。当我们用户想要进行结算时点击全选,所有放在购物车中的东西都会被选中然后由我们的系统统计数量和总价呈现给用户,让我们用户可以进行支付前的二次核验,但如果进行反向选择,则件数将为0,总价也是0。图4.4购物车模块流程图<idcolumn="id"property="id"jdbcType="INTEGER"/><resultcolumn="productid"property="productid"jdbcType="INTEGER"/><resultcolumn="memberid"property="memberid"jdbcType="INTEGER"/><resultcolumn="num"property="num"jdbcType="INTEGER"/><resultcolumn="shopid"property="shopid"jdbcType="INTEGER"/></resultMap><selectid="selectAll"parameterType="hashmap"resultMap="BaseResultMap">select*fromcartwhere1=1<iftest="memberid!=nullandmemberid!=''andmemberid!='0'.toString()">andmemberid=#{memberid}</if><iftest="productid!=nullandproductid!=''andproductid!='0'.toString()">andproductid=#{productid}</if><iftest="shopid!=nullandshopid!=''">andshopid=#{shopid}</if>orderbyiddesc</select><insertid="add"parameterType="Cart">insertintocartvalues(null,#{productid},#{memberid},#{num},#{shopid})</insert><updateid="update"parameterType="Cart">updatecartsetnum=#{num}whereid=#{id}</update><deleteid="delCart"parameterType="Int">deletefromcartwhereid=#{id}</delete><updateid="updateNum"parameterType="Cart">updatecartsetnum=#{num}whereid=#{id}</update></mapper>订单模块设计我们平时购物操作时,都会先将东西加入购物车,然后最后进行统计付款,那么本模块也是让我们的用户在进行订餐时进行如上的一个操作操作。我们用户要确保自己付款的账户中有足够的金额以供整个订购流程顺利完成,即账户内的金额需要大于我们支付的金额。还有值得一提的是,我们线下的一些购物操作不需要先验证会员身份,而在线上的订购环节中,我们则需要先进行一个用户的登录核验操作才能继续我们的订购,如果没有登录我们的系统会对我们的用户进行一个提示。在核验完确保该人注册过我们平台的账号并且是我们平台的会员后,在用户挑选完想要订餐的内容只需点击“立即付款”按钮,我们就会跳转到支付页面,用户可以选择任意支付方式进行订单的支付和完成,我们的款项会由平台自动从用户账户中划走,支付成功后将会生成订单号。具体流程如图4.5所示。图4.5订单模块流程图实现流程:在购物车界面,如果一个用户想要对订单进行支付购买的操作,那么平台将会在sessionStorage中保存当前购物车中所有的productid和数量,然后在用户订单支付界面以默认形式或是添加另外的收货信息以及地址后让用户对我们此次的订单进行一个付款的操作,在这里我们用户有多种的支付选择。我们选择任何一种支付方式的前提是该款支付方式中我们的余额足够支付该笔订单的金额,用户择其任一方式成功后,页面将会跳转到付款成功界面,并且同时为此次订单生成一个独一无二的订单号让用户以后可以凭借该订单号进行追溯,同时平台将扣除的金额转移入后台中。支付倘若没有成功,此时平台网页页面会跳转显示到支付失败的界面提醒用户没有成功,并同时提示用户账户余额不足,后台也不会发送任何数据。</insert><selectid="selectAll"parameterType="HashMap"resultMap="BaseResultMap">select*fromordermsgwhere1=1<iftest="memberid!=nullandmemberid!=''">andmemberid=#{memberid}</if><iftest="ddno!=nullandddno!=''">andddno=#{ddno}</if><iftest="fkstatus!=nullandfkstatus!=''">andfkstatus!=#{fkstatus}</if><iftest="saver!=nullandsaver!=''">andsaver=#{saver}</if><iftest="productid!=nullandproductid!=''">andproductid=#{productid}</if><iftest="delstatus!=nullanddelstatus!=''">anddelstatus=#{delstatus}</if><iftest="goodstype!=nullandgoodstype!=''">andgoodstype=#{goodstype}</if><iftest="empid!=nullandempid!=''">andempid=#{empid}</if><iftest="key!=nullandkey!=''">anddate_format(savetime,'%Y-%m-%d')=#{key}</if>orderbyiddesc</select><updateid="update"parameterType="Ordermsg">updateordermsg<set><iftest="fkstatus!=nullandfkstatus!=''">fkstatus=#{fkstatus},</if><iftest="shfs!=nullandshfs!=''">shfs=#{shfs},</if><iftest="zffs!=nullandzffs!=''">zffs=#{zffs},</if><iftest="addr!=nullandaddr!=''">addr=#{addr},</if><iftest="isdd!=nullandisdd!=''">isdd=#{isdd},</if><iftest="delstatus!=nullanddelstatus!=''">delstatus=#{delstatus},</if><iftest="empid!=nullandempid!=''">empid=#{empid},</if></set>whereid=#{id}</update><selectid="findById"parameterType="Int"resultType="Ordermsg">select*fromordermsgwhereid=#{id}</select><selectid="selectSaleMoney"parameterType="HashMap"resultMap="BaseResultMap">selectDISTINCT(DATE_FORMAT(savetime,'%Y-%c-%d'))assavetime,sum(total)astotalfromordermsgwhere1=1<iftest="fkstatus!=nullandfkstatus!=''">andfkstatus=#{fkstatus}</if><iftest="goodstype!=nullandgoodstype!=''">andgoodstype=#{goodstype}</if><iftest="saver!=nullandsaver!=''">andsaver=#{saver}</if>GROUPBYDATE_FORMAT(savetime,'%Y-%c-%d')orderbyDATE_FORMAT(savetime,'%Y-%c-%d')</select><selectid="selectPh"parameterType="HashMap"resultMap="BaseResultMap">selectsum(num)asnum,productidfromordermsgwherefkstatus='交易完成'andfid=#{fid}groupbyproductidorderbynumdesc</select>商品信息管理模块设计商品信息管理模块是针对特定的管理员后台对我们平台的使用进行一些操作而诞生的模块,在遇到一些特殊的节日,如国庆节、光棍节、母亲节、中秋节、情人节、劳动节、端午节、圣诞节等节日,管理员通过例如降低商品价格、修改商品信息、全额折扣或满减等促销活动来吸引用户将一些销量不佳的产品尽快清理库存,同时提高平台上的销售数量。那么在我们该平台上想要上新一些菜品或者更换某种类型菜品时,我们的管理员也会立即行动,以旧换新,同时在库存不足时也会及时将该菜品进行一个下架处理。具体流程如图4.6所示。图4.6商品信息管理模块流程图实施流程:想要录入一个新的餐品就要在新页面将餐品图片、描述、烹饪材料等相关基本信息填写在该页面上,值得注意的是我们首先要以文件的形式获取对象然后才能将食品图片上传至页面,以上一切操作都需要我们的管理员以管理员的账号登录到我们的后台进行操作。同时一切内容都更新完毕后我们的平台后端会将新的信息插入到产品信息表中,这些都是由前端先行接收然后再整合传输所完成的,最终信息插入完成后将以一种动态的方式呈现在我们的用户面前。<resultMaptype="com.entity.Menus"id="BaseResultMap"><idcolumn="id"property="id"jdbcType="INTEGER"/><idcolumn="serno"property="serno"jdbcType="INTEGER"/><resultcolumn="name"property="name"jdbcType="VARCHAR"/><resultcolumn="url"property="url"jdbcType="VARCHAR"/><resultcolumn="fatherid"property="fatherid"jdbcType="INTEGER"/><resultcolumn="leaf"property="leaf"jdbcType="INTEGER"/><resultcolumn="delstatus"property="delstatus"jdbcType="INTEGER"/></resultMap><selectid="selectAll"parameterType="HashMap"resultMap="BaseResultMap">select*frommenuswheredelstatus=0<iftest="key!=nullandkey!=''">and(namelikeCONCAT('%',#{key},'%'))</if>orderbyserno</select><selectid="selectfatherAll"resultMap="BaseResultMap">select*frommenuswhere1=1anddelstatus=0andfatherid=0orderbyserno</select><selectid="selectchildAll"parameterType="Int"resultMap="BaseResultMap">select*frommenuswheredelstatus=0andfatherid=#{fatherid}orderbyserno</select><selectid="selectminAll"parameterType="Int"resultMap="BaseResultMap">select*frommenuswheredelstatus=0andfatherid=#{fatherid}orderbyserno</select><selectid="selectMenuByRole"parameterType="HashMap"resultMap="BaseResultMap">select*frommenuswheredelstatus=0<iftest="roleid!=nullandroleid!=''">andidin(selectmenuidfrompermissionswhereroleid=#{roleid})</if>orderbyserno</select><selectid="findById"parameterType="Int"resultType="Menus">select*frommenuswhereid=#{id}</select><selectid="selectfatherAllByRole"parameterType="HashMap"resultMap="BaseResultMap">select*frommenuswheredelstatus=0andfatherid=0<iftest="roleid!=nullandroleid!=''">andidin(selectmenuidfrompermissionswhereroleid=#{roleid})</if>orderbyserno</select><selectid="selectchildAllByRole"parameterType="HashMap"resultMap="BaseResultMap">select*frommenuswheredelstatus=0andfatherid=#{fatherid}andidin(selectmenuidfrompermissionswhereroleid=#{roleid})orderbyserno</select><updateid="update"parameterType="Menus">updatemenus<set> <iftest="serno!=null">serno=#{serno},</if><iftest="name!=null">name=#{name},</if><iftest="url!=null">url=#{url},</if><iftest="leaf!=null">leaf=#{leaf},</if><iftest="delstatus!=null">delstatus=#{delstatus},</if></set>whereid=#{id}</update><insertid="add"parameterType="Menus">insertintomenusvalues(null,#{serno},#{name},#{url},#{fatherid},#{leaf},#{delstatus})</insert> <updateid="delete"parameterType="Menus">updatemenussetdelstatus=1whereid=#{id}</update></mapper>订单处理模块设计一般的订单处理是由本平台网站管理员完成的,所有的用户订单信息包括最终支付金额、购买物品、下单时间等等所有相关订单信息都由我们后台统一管理,而登录后台的唯一途径就是我们的管理员通过特别的账号进入特殊的登录页面进行登录后然后实行操作,那么本模块就是管理员对我们这些用户的相关订单的操作模块。我们的管理在此模块中有权可以看到用户订单中的所有信息,同时也可以利用权限在我们的用户就餐后将订单状态进行更改,我们用户就会在自己的界面看到从“未就餐”到“已就餐”的转变。如图4.7所示。图4.7订单处理模块流程图实现流程:我们的用户在进行下单的操作后,我们的后台程序接收到用户的下单操作,将联动数据库使用SQL查询语句来查询订单信息表的订单表中当前订单的订单id,这项过程我们是由ajax技术将相关信息传递的。在为用户安排骑手投递餐食前我们的网站平台管理员要在登录管理员账号进入特殊后台后还要先确认其下单情况并且同时确定其下单信息的正确性,无误后就可根据收到的id发送订单为其安排骑手派送并同时将状态更新为“已就餐”。用户信息模块设计用户时常会因为各种原因要修改自己的类似于头像、手机、生日等个人资料信息,那么本模块就是由此应运而生。为了更好的服务我们用户及时的对自己的注册信息进行更新,例如添加自己的多个收获配送地址或者查看、编辑、删除及管理自己所有收货地址等,只需要点击液晶信息接收面板上左侧的个人信息栏,那么我们的网页平台就会跳转到相关页面方便我们的用户进行操作。以上操作的前提是我们用户注册成功并且成功登录到平台的情况下。跟液晶信息接收器面板右手边相反方向的导航栏内容包括订单信息、评价信息。我们平台十分注重用户的使用体验,所以创设了会员投诉服务页面,一个无论是走心亦或是不走心的评论都能让我们更好的及时更新我们的服务,在内容被提交后我们的后台管理员会及时查看显示在后台管理页面的留言信息,在此之前我们的用户可以在此填写并且提交自己的投诉与建议,并且还可以在餐品未交付到自己手中前给我们的商家或是骑手留言,更加的个性化。如图4.8所示。图4.8用户信息模块流程图实现过程:sessionStorage中存储着每名注册完成并且登录成功的用户的登录用户名。当用户点击个人信息页面时,会立即发起Ajax请求,并将保存在sessionStorage中的用户名传给后台,后台操作数据库。返回一个基本信息的json对象,对该对象进行解析,昵称、头像等信息会根据返回的数据对象预先显示在页面对应的信息框中。并且可以修改个人信息,接收宝贝信息,购买过产品信息。<resultMaptype="com.entity.Address"id="BaseResultMap"><idcolumn="id"property="id"jdbcType="INTEGER"/><resultcolumn="name"property="name"jdbcType="VARCHAR"/><resultcolumn="tel"property="tel"jdbcType="VARCHAR"/><resultcolumn="addr"property="addr"jdbcType="VARCHAR"/><resultcolumn="ismr"property="ismr"jdbcType="VARCHAR"/><resultcolumn="delstatus"property="delstatus"jdbcType="VARCHAR"/><resultcolumn="memberid"property="memberid"jdbcType="VARCHAR"/></resultMap><insertid="add"parameterType="Address">insertintoaddressvalues(null,#{name},#{tel},#{addr},#{ismr},#{delstatus},#{memberid})</insert><selectid="selectAll"parameterType="HashMap"resultMap="BaseResultMap">select*fromaddresswheredelstatus=0<iftest="memberid!=nullandmemberid!=''">andmemberid=#{memberid}</if><iftest="ismr!=nullandismr!=''">andismr=#{ismr}</if>orderbyismrdesc</select><selectid="findById"parameterType="int"resultType="Address">select*fromaddresswhereid=#{id}</select><updateid="update"parameterType="address">updateaddress<set>
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025工商行政工作计划样例
- 汽车销售个人年终工作总结与计划范文
- 开学学习计划教研学习计划
- 关于法制宣传教育的工作计划范文
- 初三英语教学新学期工作计划
- 《GMP验收办法》课件
- 2025年人事行政部工作计划
- 工伤委托律师代理合同
- 体育生自愿参加训练协议书
- 《复合材料大综述》课件
- 高速公路路牌广告合同范文(3篇)
- 上海市浦东惠南学区2024-2025学年九年级12月月考语文试题及答案
- 抵制心理暴力与骚扰管理规定
- 银行业专业人员职业资格初级(公司信贷)模拟试卷68
- 金融理论与政策(华南农业大学)-中国大学MOOC答案2023版
- 2024年《论教育》全文课件
- 生命安全与救援学习通超星期末考试答案章节答案2024年
- 节能改造合同协议
- 国家开放大学专科《法理学》(第三版教材)形成性考核试题及答案
- (正式版)SHT 3158-2024 石油化工管壳式余热锅炉
- MOOC 创业基础-暨南大学 中国大学慕课答案
评论
0/150
提交评论