版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在线点餐微信小程序的设计与实现摘要5G时代来临,居民日常生活信息技术化的浪花席卷全球。在充分研究分析当代传统餐饮行业的运作模式后,针对中国现有中小型餐厅点餐方式进行分析。发现中小型餐厅并未乘上信息化的浪花。目前餐厅点餐方式具体分为:面对面线下点餐、PAD电脑点餐和定制APP点餐。年轻人“996”的生活方式,使得顾客已经无法忍受长时间排长队的线下点餐。PAD电脑点餐的成本过高,中小型餐厅承受不起。传统餐饮APP本身臃肿且种类繁多,顾客不愿逐一下载。近几年来,微信小程序出现在大众视野中,其以“小”、“简”、“快”的特点迅速爆红,成为年轻人手中炙手可热的玩物。本课题使用了微信小程序制作点餐小程序前端,后台利用MySQL数据库来保存点餐所需的相关数据,设计了基于微信开发平台和B/S模式的点餐系统来满足餐厅顾客的基本需求。本文介绍了当代点餐方式的背景意义,如何优化当代餐厅的点餐流程,如何实现用户登录、在线点餐、菜品订单、轮播图调换和用户评价等功能。该论文有图15幅,表26个,参考文献160篇。关键词:微信小程序MySQL在线点餐目录TOC\o"1-2"\h\u3907摘要 127276目录 3307621绪论 574071.1课题背景 5145141.2课题意义 6118801.3相关技术 6319251.4本论文主要研究内容 792612可行性分析 8216592.1经济可行性分析 8299572.2技术可行性分析 8194822.3操作可行性分析 8301002.4法律可行性分析 897043需求分析 991693.1功能需求分析 9322163.2性能需求分析 9131064系统总体设计 9196505数据库设计 1118926代码详细设计 15258487系统测试 23311038总结与展望 30294588.1总结 30256208.2展望 3011854参考文献 321绪论1.1课题背景1978年改革开放距今已43年,衣食住行作为百姓生活不可缺少的部分。随着信息化技术的发展,餐饮业在我国正迎来一个大兴盛的时期,餐饮市场潜在力量巨大,远景广阔。中国烹饪协会五年(2021-2025)工作规划指出,未来五年以至到2035年,我国要坚持实施扩大内需战略,构建国内大循环为主体、国内国际双循环相互促进的新发展格局,进一步深化供给侧结构性改革,促进经济高质量发展。预计“十四五”时期我国餐饮业收入年平均增长10%以上,行业规模跨入六万亿元新阶段。随着餐饮行业的蓬勃和繁荣,人民对美好生活的需求不断提升并逐步实现,点菜模式也在不断的更新迭代。大致来讲,中国目前的点菜模式经历三段发展历程;传统的人工手写点菜模式、PDA掌上电脑点菜模式以及软件菜单模式。人工点餐费时费力,效率低下且浪费纸张。PDA点餐模式成本过于高昂,普通餐厅难以承受。基于手机操做系统的点餐软件十分普遍,例如现有的大众点评、美团、海底捞以及个别餐厅定制的APP。但由于点餐软件种类繁多,并且太过于占用手机内存,影响消费者手机的使用效率。无法做到进店消费者普及使用,所以并没有从根本上解决当前点餐效率的问题。2011年1月21日微信在腾讯公司的不懈努力下终于被打造出来。一经问世,在短短5年时间后,微信在中国智能手机中覆盖率达到94%,基本做到每机装载微信的地步,并且微信月活跃用户高达8.06亿。据大数据不完全统计,微信已成为国内用户最多的即时通讯软件,人们的生活根本离不开微信。2014年8月28日,腾讯公司正式向广大消费者公布“微信智慧生活”全行业解决方案。采用以微信公众号+微信支付为基础,帮助传统行业将原有线下交易的商业模式“移植”到微信平台转为线上交易,这一操作彻底颠覆了当今社会的商业模式。但因为微信公众号没有办法为用户提供更加完美的服务,所以微信研究内部开启研发新的形态,微信小程序就这么降世了。2017年1月9日0点微信小程序的出现又一次颠覆了软件市场,其不需要下载安装即可使用的特性,实现了手机应用无内存运行的梦想。用户再也不用担心安装太多应用手机卡顿的问题,用户可以随时打开、随时关闭,真正意义上实现了“用完即走”。微信小程序能够实现消息通知、线下扫码、公众号关联等七大功能。其中,通过与公众号关联,用户可以实现公众号与微信小程序之间相互跳转。对于开发者而言,微信小程序开发门槛相对较低,难度不及APP,能够满足简单的基础应用,小程序的便捷性可以说是各项功能型应用开发商的首选,无论是从开发成本和运营成本的方面考虑都十分的合理。1.2课题意义2019年,社会消费品零售总额实现41.2万亿元,实现餐饮收入4.67万亿元,占社会消费品零售总额比重为11.3%。餐饮业毋庸置疑是中国社会消费第一产业。然而,正是这历史悠久、规模庞大的产业,却也是中国目前信息化程度最慢和最低的产业之一。至今为止,绝大多数小型餐饮企业仍使用纸笔记、计算器算的落后境地。大型餐厅拥有PAD点餐系统和定制专属APP。前者日复一日的重复、单调的劳动耗时耗神,并且消费账单计算方面极易出错容易引发与客户之间的矛盾纠纷。后者成本费用高昂,每次维护起来费时费力。微信小程序时代的到来,为人们的生活带来新的点餐方式——微信小程序在线点餐。针对用户而言,进店的消费者可以通过扫描商家提供的点餐二维码进行点餐,无需排队点餐,无需下载安装应用程序,真正意义上达到了的随用随走。针对商家而言,微信在线点餐小程序可以满足店铺营业的基本应用,降低了餐厅雇佣成本,减少了店铺账单出错的问题,不会对现有客户造成冲突,吸引更多的潜在客户。拥有自身定制APP的商家无需担心,微信小程序的应用会通过借助微信联合登录,和商家已有的App后台的用户数据进行打通,不会造成商家的客户流失。针对微信小程序的开发者而言,小程序的开发门槛相对PAD点餐系统较低、难度也不及手机APP的开发。目前小程序的云开发功能较为完善,可以提高了开发者的开发效率和能力,一个小程序的项目工程将远远低于智能手机APP的开发。小程序云开发功能还开发程序的审核、备份和开发系统的更新迭代变得更加轻松,代码几乎可以实现实时云备份。1.3相关技术1.3.1Java语言Java是一种静态的、面向对象的计算机编程语言,它是一种跨平台语言,具备较高的安全性、平稳性以及具有可移植性[10]。相对于C++语言的过载、多继承性和指针,Java语言则简便许多。那是因为Java语言在开发时开发吸收C++语言的绝大部分优点。1.3.2MySQL数据库MySQL默认配置了许多不同的存储引擎[11],可以在MySQL5.7.24的服务器中预先配置后使用。MySQL作为一个关系型数据库管理系统,在其编辑数据库后可以导出为纯sql语言的.sql文件,保证了源代码的移植性。MySQL数据库将数据保存在不同的表中,并使用Navicat可视化,便于数据库的设计开发。相较于其他非关系型数据库,MySQL数据库的优势就在于可以其使用SQL语句进行在单表和多表的复杂数据查询。最后,MySQL数据库的免费服务和开源代码,不需要额外成本。这也是MySQL首当其冲的成为了中小型企业和个人最优选择的重要原因。1.3.3Spring框架Spring框架是RodJohnson、JuergenHoeller等开发的,用于支持JavaBean构件运行的容器。该框架提供了依赖注入[12,13]方式的构件组装机制和基于AOP技术的事务和日志管理等功能。Spring框架作为商业化的开发系统架构,其设计初衷是希望构造JAVA应用程序的轻量级框架,为了有效地帮助企业应对各种复杂应用软件开发的。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益[14]。Spring开发架构的主要技术优势在于开发框架本身具有一个分层开发框架,分层开发架构表示系统开发人员可以去自行选择如何应该使用什么类型的开发组件。Spring架构主要如下图1-1所示:图1-1Spring架构图1.4本论文主要研究内容首先研究了餐厅点餐的现有状态趋势和未来发展趋势。其次研究了Spring框架体系结构。以Spring为基础,设计实现了在线点餐微信小程序,该小程序是中小型餐厅走向信息化点餐时代必不可少的组成部分。该在线点餐小程序采用MySQL数据库为数据层,以wxml+JSP为表示层,以controller为交互层,以service为业务逻辑层,构建了一个比较规范的四层网络应用系统。该系统向客户提供了登录认证、菜单浏览、订单形成、评论管理、菜单管理等功能服务。2可行性分析2.1经济可行性分析从经济可行性方面分析,开发者在微信公众开发者平台上进行小程序开发,只需填入自己已经申请的APPID创建点餐小程序项目,即可享有后续开发短、经济需求低的开发过程。商家在使用时,只需要一台电脑,即可完成本次订单的交易,成本低廉。从长远持续发展利益的角度去看具有经济可行性。2.2技术可行性分析基于微信开发者工具平台的在线点餐微信小程序系统设计与实现,当前限制条件下,在线点餐系统功能较为较为简单,在现有的计算机水平上可以达到功能目标要求。小程序云开发功能还开发程序的审核、备份和开发系统的更新迭代变得更加轻松。2.3操作可行性分析商家可在电脑上使用管理员账号进行菜品更新、用户订单接取、菜品图片的置换等,满足了商家进行基本交易需求。前台为微信小程序,以列表形式向顾客展现本店菜品。微信小程序相对于传统应用程序脱离了平台限制,顾客可在Android端和iOS端上进入小程序进行下单、评论等功能,操作方法简单、满足顾客点餐时的全部条件。2.4法律可行性分析在开发时会安装微信开发者工具、IntelliJIDEA开发工具和MYSQL等工具,使用该类开发软件时遵循的用户协议,采用正规化的小程序开发流程。系统所使用的开发技术由本人学习使用,无抄袭侵权等违法行为。开发完成后,在合法渠道进行完整的小程序云服务器上传,故在法律上具有可行性。3需求分析3.1功能需求分析通过调查,在线点餐微信小程序系统具体功能如下:(1)顾客进行菜品浏览功能;(2)菜品加入购物车下单功能;(3)顾客进行人数选择并支付的功能;(4)顾客进行订单查看并评论的功能;(5)为后台商家提供管理员增加和更改功能;(6)商家进行菜品信息增加、更改和删除功能;(7)商家进行订单查询和订单完成功能;(8)商家进行首页轮播图调换功能。3.2性能需求分析系统性能设计,是用户与整个系统模块之间互动的关键,系统的性能好坏能够反应系统自身的能力、知晓系统目前的瓶颈、对现有问题系统调优和检测软件的问题。(1)易用性在用户权限范围内,可在一个统一风格的界面内即可完成相关的所有业务流程操作或者获取所有相关信息,大大提高操作员的工作效率和易用性,灵活应用本系统。(2)云存储数据安全性保护用户授权给系统的数据安全,避免云储存数据发生传送、泄露、破坏、修改的性能。在系统设计时必须要采用访问控制技术、数据信息加密技术等,以解决潜在的安全问题。4系统总体设计4.1系统的项目规划微信在线点餐小程序系统是一个功能健全的商城类的小程序,由消费者前台操作和商家后台管理两个大部分组成。4.2前台功能模块前台功能模块可分为4大模块包含:用户信息管理功能、登录管理功能、订单管理功能、评价管理功能。(1)用户信息管理功能:该功能除了方便消费者查看个人信息和修改个人信息功能;为方便顾客查找自己曾今吃过的美食,功能中还添加了查看历史订单、查看历史评论的功能。(2)登录管理功能:消费者注册账户、登入和登出账户;(3)订单管理功能:消费者直接可以在商家提供的菜品列表中进行中将菜品添加至购物车、从购物中删除、添加和修改桌号、添加菜品备注、支付买单等功能。(4)评价管理功能:添加评价、删除评价和添加追评等功能。图4-1前台功能模块4.3后台功能模块前台功能模块可分为5大模块包含:菜品管理功能、菜品类别管理功能、管理员账户管理功能、订单管理功能、首页轮播图管理功能。(1)菜品类别管理:为了方便消费者更加方便的进行点餐,商家可以根据菜品类别管理模块使得餐馆能对自家的菜品进行分类,使得菜品分类明确。商家也可以可添加修改和删除某一类别,为消费者提供一份独具匠心的个性菜单类别。(2)菜品管理功能:a.添加菜品:商家可以向提供给消费者的菜单列表中添加新的菜品,添加时可以填入菜品基本信息,先为菜品进行编号,再进行菜品名称、菜品数量、菜品价格、菜品文字简介、菜品类别的键入;还可以为菜品添加相应的图片。b.更改菜品信息:可以对已有菜品的所有信息进行修改。c.删除菜品:对餐厅不在提供的菜品进行删除,菜品信息不会保留。d.菜品状态管理:对菜单列表中已经存在的菜品,可以执行上架和下架操作。上、下架状态的菜品信息不会消失,等菜品原材料到齐又可以将菜品上架,无需重新添加。(3)订单管理功能:商家在接收消费者订单后,可查看订单的详细信息,包括:消费者编号、桌号、已点菜品、用餐人数等;在走菜完成后,商家可以对已接单的订单执行完成订单操作;商家还可以对已失效或无用的订单执行删除操作。(4)管理员账户管理功能:对后台管理系统的管理员进行增删改查的操作;(5)首页轮播图管理功能:对首页的轮播图进行修改和图片路径选择。5数据库设计5.1外部实体联系图设计在完成微信在线点餐小程序系统的的需求分析、前台功能模块和后台功能模块设计后,根据这些分析在MYSQL数据库建立相应的表格完善系统。此系统共涉及8个表:用户表(dc_user)、管理员表(dc_seller_info)、菜品信息表(dc_product_info)、菜品类目表(dc_product_category)、首页展示轮播图表(dc_picture)、商家端订单表(dc_order_master)、用户端下单表(dc_order_detail)、用户评论表(dc_comment);数据库每个表中相应字段与属性对应,数据库关系的E-R图如下图5-1所示:图5-1数据库关系的E-R图5.2数据库表设计本系统采用MYSQL数据库,系统数据库名为sell,数据库sell中包括8个数据表。关于数据库中的数据表详情请见下方:(1)用户信息表(dc_user)用户信息表是用来存放前台消费者的详细信息,其中用户ID为此用户表的主键,如表5-1所示。表2-1用户信息表序号描述字段名数据类型长度可空是否为主键1用户IDdc_idint32Yes2用户姓名dc_usernamevarchar32No3用户联系方式dc_phonevarchar11No4餐厅桌号dc_zhuohaoint64是No5用餐人数dc_renshuvarchar64是No6用户创建时间dc_user_create_timetimestampNo7修改时间dc_user_update_timetimestampNo(2)管理员信息表(dc_seller_info)管理员信息表是用来存放后台商家的信息,其中商家管理员ID为此管理员表的主键,如表5-2所示。表5-2管理员信息表序号描述字段名数据类型长度可空是否为主键1商家管理员IDdc_seller_idint50Yes2管理员姓名dc_sellernamevarchar32No3密码dc_passwordvarchar32No4管理员手机号dc_sellerphoneint11No5管理员账户创建时间dc_sellercreate_timetimestampNo6管理员账户修改时间dc_sellerupdate_timetimestampNo(3)菜品信息表(dc_product_info)菜品信息表是用来存放商家输入的菜品的详细信息,其中菜品编号为菜品信息表的主键,如表5-3所示。表5-3菜品信息表序号描述字段名数据类型长度可空是否为主键1菜品编号dc_product_idVarchar32Yes2菜品名称dc_product_namevarchar64No3菜品类目编号dc_category_typeInt8No4菜品单价dc_product_pricedecimal8,2No5菜品库存dc_product_stockint32No6菜品描述dc_product_descriptionvarchar500是No7菜品图标dc_product_iconvarchar512是No8菜品状态product_statusInt1是No9菜品创建时间dc_pro_create_timetimestampNo10菜品更新时间dc_pro_update_timetimestampNo(4)菜品类目表(dc_product_category)菜品类目表是用来存放商家输入的菜品类目,方便消费者观看选择菜品,其中菜品类目ID为菜品类目表的主键,如表5-4所示。表2-4菜品类目表序号描述字段名数据类型长度可空是否为主键1菜品类目IDdc_category_idInt3Yes2菜品类目名称dc_category_namevarchar64No3菜品类目编号dc_category_typeInt8No4菜品类目创建时间dc_categorycreatetimetimestampNo5菜品类目更新时间dc_categoryupdatetimetimestampNo(5)首页展示轮播图表(dc_picture)首页展示轮播图表是用商家用来展示在首页,吸引消费者下单热销菜品,其中轮播图ID为首页展示轮播图表的主键,如表5-5所示。表5-5首页展示轮播图表序号描述字段名数据类型长度可空是否为主键1轮播图IDdc_pic_idInt20Yes2轮播图储存路径dc_pic_urlvarchar255No3轮播图描述dc_pic_messageInt64No4轮播图创建时间dc_pic_createtimetimestampNo5轮播图更新时间dc_pic_updatetimetimestampNo(6)商家端订单表(dc_order_master)商家端订单表是用户下单后商家在接受用户下单后所显示的表,其中购买人ID为商家端订单表的主键,如表5-6所示。表2-6商家端订单表序号描述字段名数据类型长度可空是否为主键1购买人IDdc_order_idvarchar32Yes2购买人姓名dc_buyer_namevarchar32No3购买人电话dc_buyer_phoneVarchar11No4下单时间dc_create_timetimestampNo5购买者桌号dc_buyer_addressvarchar128No6购买者微信openiddc_buyer_openidvarchar64No7订单总金额dc_order_amountdecimal8,2No8订单状态dc_order_statustinyint0No9支付状态dc_pay_statustinyint0No10订单更新时间dc_update_timetimestampNo(7)用户端下单表(dc_order_detail)用户端下单表是用户所下的订单,其中订单ID为用户端下单表的主键,如表5-7所示。表5-7用户端下单表序号描述字段名数据类型长度可空是否为主键1订单IDdc_detail_idvarchar32Yes2购买人IDdc_order_idvarchar32No3下单时间dc_create_timetimestampNo4菜品编号dc_product_idvarchar32No5菜品名称dc_product_namevarchar64No6菜品单价dc_product_pricedecimal8,2No7菜品数量dc_product_quantityint20No8备注dc_order_remarkvarchar512是No9订单更新时间dc_update_timetimestampNo(8)用户评论表(dc_comment)用户评论表是用户对于此订单的评价,其中评论ID为用户端下单表的主键,如表5-8所示。表5-8用户评论表序号描述字段名数据类型长度可空是否为主键1评论IDdc_comment_idInt20Yes2评论者姓名dc_namevarchar64No3评论时间dc_create_timetimestampNo4评论者微信openiddc_openidvarchar64No5评论内容dc_contentText是No6评论者头像dc_avatar_urlText是No6代码详细设计6.1基本连接实现server:context-path:/sell//项目设置根目录port:8080//本地端口号/*数据库连接*/spring:datasource:username:root//数据库账户password:admin//数据库密码url:jdbc:mysql://localhost/sell?useSSL=false/不使用SSL编码校验*/&serverTimeZone=UTC/*数据库编码时间*/&useOldAliasMetadataBehavior=true6.2功能模块实现6.2.1登录管理模块实现用户在初次使用在线点餐小程序的时候,需要引导进行用户登录,获取用户授权,实现后效果如图6-1所示。图6-1登录模块展示(1)前台登录管理模块部分代码如下://
按钮获取用户信息
onGotUserInfo:
function(e)
{/*通过与数据库中数据比对判断该用户是否使用过该小程序,若使用过直接导入后台用户信息,若初次使用该小程序,则需要获取用户授权*/
if
(e.detail.userInfo)
{
var
user
=
e.detail.userInfo;//判断用户信息是否与后台数据库中相同
this.setData({
isShowUserName:
true,//显示名称:默认显示
userInfo:
e.detail.userInfo,//将后台对应数据库表中用户信息导入
})/*取得用户的openid*/
user.openid
=
app.globalData.openid;//将后台对应数据库表中用户openid导入
app._saveUserInfo(user);//前台保存该信息
}
else
{/*小程序从来未获取该用户信息,现在需要授权才能登陆,如果用户取消或不允许授权,小程序就获取不到用户信息*/
app._showSettingToast('登陆需要允许授权');//界面显示‘登陆需要允许授权’
}
},6.2.2菜品菜单模块实现用户在初次使用在线点餐小程序的时候,需要为客户提供菜单,供客户浏览,实现后效果如图6-2所示。图6-2菜品菜单模块展示(1)前台菜单显示部分代码:<!--
调用小程序中weui框架,美化页面
--><view
class="weui-media-box__bd
weui-media-box__bd_in-appmsg"><!--
前台菜品名称显示,将用菜品名称绑定到一个逻辑文件index上,方便增、减按钮的操作
-->
<view
class="cai_title"
data-index="{{index}}">{{}}</view><!--
前台映射菜品介绍并进行绑定,若后台菜品介绍为空,则输出暂无介绍
--><view
class="cai_desc"
wx:if="{{item.desc
==
''}}">暂无介绍</view><view
class="cai_desc"
wx:else>{{item.desc}}</view><!--
后台库存量映射到前台上,并进行绑定
--><view
class="cai_desc">
库存:{{item.stock}}
</view>(2)后台控制器代码:publicclassBuyerProdController{
@Autowired
privateProdSerprodSer;//创建商品服务类实体
@Autowired
privateCateSercateSer;//创建购物车类实体
@GetMapping("/list")
publicResultVOlist(){
//1.查询所有数据库中的上架商品
List<ProdInfo>prodtInfoList=prodtSer.findUpAll();
//2.查询类目(一次性查询)
List<Integer>cateTypeList=prodInfoList.stream()
.map(e->e.getCateType())
.collect(Collectors.toList());//遍历商品类型的list
List<ProdCate>prodtCateList=cateSer.findByCateTypeIn(cateTypeList);
//3.数据拼装
List<ProdVO>prodVOList=newArrayList<>();
for(ProdCateprodCate:prodCateList){
ProdVOprodVO=newProdVO();
prodVO.setCateType(prodCate.getCateType());
prodVO.setCateName(prodCate.getCateName());//将查询到的结果拼接成一个字符串
List<ProdInfoVO>prodInfoVOList=newArrayList<>();
for(ProdInfoprodInfo:prodInfoList){
if(prodInfo.getCateType().equals(prodCate.getCateType())){
ProdInfoVOprodInfoVO=newProdInfoVO();
BeanUtils.copyProperties(prodInfo,prodInfoVO);
prodInfoVOList.add(prodInfoVO);
}
}
prodVO.setProdInfoVOList(prodInfoVOList);
prodVOList.add(prodVO);
}
returnResultVOUtil.success(prodVOList);//将拼装后的结果返回前端
}
}6.2.3客户下单模块实现菜品加入购物车功能实现部分代码:addCount:
function(e)
{
//点加号之前必须先扫码桌号
if
(!tableNum)
{//我们的菜品浏览页只是为了方便浏览无法进行点餐,在进行点餐前需扫描桌号进入,若非扫码点餐,桌号为空。
wx.showModal({
title:
'提示',//用户手机显示提示,请到首页扫码
content:
'请到首页扫码点餐',
showCancel:
false,
//去掉取消按钮
success:
function(res)
{
if
(res.confirm)
{
wx.switchTab({//跳转到新页面,并关闭其他非主页面
url:
'../index/index',//加号图标路径
})
}
}
})
return;
}底部固定条幅实现部分代码:<!--
购物车整体wxss样式为bottom_box
-->
<view
class="bottom_box">
<!--
购物小图标wxss样式为shop_cartBox,事件绑定cascadeToggle-->
<view
class="shop_cartBox"
bindtap="cascadeToggle">
<!--
购物车小图标为本地文件shopCart.png
-->
<image
class="shopCart_img"
src="../../image/shopCart.png"></image>
</view>
<!--
总价显示wxss样式:all_money,调用2个绑定,显示出总计价格和总件数-->
<view
class="all_money">总计:{{totalPrice}}元,{{totalNum}}件</view>
<!--
结账按钮wxss样式:choose_ok
bc_green,事件绑定跳转gotoOrder
-->
<view
class="choose_ok
bc_green"
bindtap="gotoOrder">结账</view>
</view>购物车总价格、总个数实现部分代码:getTotalPrice:
function()
{
var
cartList
=
this.data.cartList;
//
将购物车列表信息,导入cartList中
var
totalP
=
0;//给变量totalP赋予初值为0
var
totalN
=
0//给变量totalN赋予初值为0
for
(var
i
in
cartList)
{
//
循环列表得到每个数据
totalP
+=
cartList[i].quantity
*
cartList[i].price;
//
所有价格加起来
totalN
+=
cartList[i].quantity
}
this.setData({
//
最后赋值到data中渲染到页面
cartList:
cartList,//显示购物车列表
totalNum:
totalN,//显示总个数
totalPrice:
totalP.toFixed(2)//显示菜品的总价格
});后台创建订单部分代码:publicDingdanDTOcreate(DingdanDTOdingdanDTO){
StringdingdanId=KeyUtil.genUniqueKey();
BigDecimaldingdanAmount=newBigDecimal(BigInteger.ZERO);
//1.查询商品(数量,价格)
for(DingdanDetaildingdanDetail:dingdanDTO.getDingdanDetailList()){
ProdInfoproductInfo=productService.findOne(dingdanDetail.getProdId());
if(productInfo==null){
thrownewSellException(ResultEnum.PRODUCT_NOT_EXIST);
}
//2.计算订单总价
dingdanAmount=productInfo.getProdPrice()
.multiply(newBigDecimal(dingdanDetail.getProdQuantity()))
.add(dingdanAmount);
//订单详情入库
dingdanDetail.setDetailId(KeyUtil.genUniqueKey());
dingdanDetail.setDingdanId(dingdanId);
BeanUtils.copyProperties(productInfo,dingdanDetail);
dingdanDetailRepository.save(dingdanDetail);
//CartDTOcartDTO=newCartDTO(dingdanDetail.getProdId(),dingdanDetail.getProdQuantity());
//cartDTOList.add(cartDTO);
}
//3.写入订单数据库(dingdanMaster和dingdanDetail)
DingdanMasterdingdanMaster=newDingdanMaster();
dingdanDTO.setDingdanId(dingdanId);
BeanUtils.copyProperties(dingdanDTO,dingdanMaster);
dingdanMaster.setDingdanAmount(dingdanAmount);
dingdanMaster.setDingdanStatus(DingdanStatusEnum.NEW_PAYED.getCode());
dingdanMasterRepository.save(dingdanMaster);
//4.扣库存
List<CartDTO>cartDTOList=dingdanDTO.getDingdanDetailList().stream().map(e->
newCartDTO(e.getProdId(),e.getProdQuantity())
).collect(Collectors.toList());
prodService.decreaseStock(cartDTOList);
//发送websocket消息
webSocket.sendMessage(dingdanDTO.getDingdanId());
returndingdanDTO;
}6.2.4历史订单管理模块实现(1)点击【我的订单】,对已经下单的顾客进行查询。点击【待上餐】可对已经下单的菜品进行催单。该功能符合催单顾客的期望。我的订单界面如图6-3所示。图6-3我的订单界面varapp=getApp()//获取信息letorderStatus=1;//此处有4种状态,1表示"新订单,已支付";2表示"订单已取消";3"表示订单待评价";4“表示订单已完成”。getMyOrderList(){//获取订单信息letthat=this;//赋值给thatletopenid=app._checkOpenid();//进行比对,保证该订单的Openid与下单者一致if(!openid){//如果Openid不等则不能显示return;}6.2.5后台管理员功能模块实现(1)后台管理员功能模块实现,分为查询、修改、新增管理员3个功能,修改与新增功能由同一个方法实现,以下展示管理员查询和管理员修改的功能实现。后台管理员登录功能实现部分代码:GetMapping("/loginAdmin")
publicStringloginAdmin(@RequestParam("phone")Stringphone,
@RequestParam("password")Stringpassword,
HttpServletResponseresponse){
BussInfobussInfo=repository.findByPhone(phone);
("商家信息={}",bussInfo);
if(bussInfo!=null&&bussInfo.getPassword().equals(password)){
Stringtoken=UUID.randomUUID().toString();
("登录成功的token={}",token);
Integerexpire=RedisConstant.EXPIRE;
//3.设置token至cookie
CookieUtil.set(response,CookieConstant.TOKEN,token,expire);
return"登录成功";
}else{
thrownewSellException(ResultEnum.LOGIN_FAIL);
}
}管理员信息修改功能实现部分代码:*下面是管理员信息修改*/@GetMapping("/index")
publicModelAndViewindex(@RequestParam(value="bussId",required=false)IntegerbussId,
Map<String,Object>map){
BussInfobussInfo=repository.findByBussId(bussId);//查询管理员信息
map.put("category",bussInfo);//放入map中
returnnewModelAndView("admin/index",map);
}6.2.6评价功能模块实现@PostMapping("/mark")
publicResultVO<Mark>detail(@RequestParam("openid")Stringopenid,
@RequestParam("dingdanId")StringdingdanId,
@RequestParam("name")Stringname,
@RequestParam("avatarUrl")StringavatarUrl,
@RequestParam("content")Stringcontent){
if(StringUtils.isEmpty(openid)||StringUtils.isEmpty(dingdanId)){
thrownewSellException(ResultEnum.PARAM_ERROR);
}
//提交评论
Markmark=newMark();
mark.setName(name);
mark.setAvatarUrl(avatarUrl);
mark.setOpenid(openid);
mark.setContent(content);
Marksave=repository.save(mark);
//修改订单状态
DingdanDTOdingdanDTO=dingdanService.findOne(dingdanId);
dingdanDTO.setDingdanStatus(DingdanStatusEnum.COMMENT.getCode());
DingdanMasterdingdanMaster=newDingdanMaster();
BeanUtils.copyProperties(dingdanDTO,dingdanMaster);
DingdanMasterupdateResult=masterRepository.save(dingdanMaster);
returnResultVOUtil.success(save);
}7系统测试7.1系统测试的目的和意义为了不影响客户使用微信在线点餐小程序系统,通过健全的系统测试可以有效快速的知晓系统在每个功能模块下的运行状况。系统测试的目的不是为了证明在线点餐微信小程序没有错误,而是为了发现至今为止在线点餐小程序中尚未发现的错误,以减少小程序投入使用后浪费人力、物力、时间。系统测试的需求是根据当时软件设计的需求分析而来,保证用户体验。7.2系统测试方法选择在软件测试中,测试方法花样繁多比如:模型测试、单元测试、集成测试、黑盒测试、白盒测试等。在线点餐微信小程序属于商城类小程序,规模较小,适用人群仅限开餐厅的商家和进店的消费者。考虑到用户更加注重日常操作,本次测试需明确系统的具体功能是否存在问题,而黑盒测试最看重软件的功能测试。以上分析可得,本系统适用于黑盒测试。7.3前台功能测试前台功能测试主要由用户登录模块测试、菜品展示与加入购物车测试、菜品下单测试、订单查询测试、评价功能测试等构成。(1)注册登录模块测试,如表7-1所示。表7-1用户登录模块测试功能编号Diancanqt-001功能模块名称用户登录模块测试需求成功登录并获取用户的openid和头像信息操作过程同意微信小程序授权,完成登录,等待界面跳转测试工具消费者手机数据输入消费者授权基本信息期望结果成功登录,在个人信息界面展示获取到的openid和头像信息实际结果成功登录,在个人信息界面展示获取到的openid和头像信息图7-1个人信息展示(2)菜品展示与加入购物车测试如表7-2所示、图7-2所示。表7-2菜品展示与加入购物车测试功能编号Diancanqt-002功能模块名称菜品浏览与加入购物车模块测试需求查看菜品详情和购物车功能测试操作过程扫描桌号进行菜单浏览,在不同菜品类目下观看不同菜品基本信息,选择任意菜品【加入购物车】和【移出购物车】测试工具消费者手机数据输入无期望结果菜单详情和购物车详情实际结果菜单详情和购物车详情图7-2菜品展示和购物车功能菜品下单测试,如表7-3所示、图7-3所示。表7-3菜品下单测试表功能编号Diancanqt-003功能模块名称菜品下单模块测试需求正确输入,完成菜品购买。操作过程购物车里的菜品添加完成后,进行用餐人数选择、用餐备注填写和支付测试工具消费者手机数据输入用餐人数、用餐备注期望结果完成菜品购买实际结果菜品订单提交成功图7-3菜品购买(4)订单查询测试,如表7-4所示、图7-4所示。表7-4订单查询测试表功能编号Diancanqt-004功能模块名称订单查询模块测试需求显示订单的状态信息操作过程下单:点击【我的订单】,进入后,点击【待上餐】对已经下单的菜品进行催下单测试工具消费者手机数据输入无期望结果订单详细信息显示正常,点击催上菜后显示催单成功实际结果订单详细信息显示正常,点击催上菜后显示催单成功图7-4订单显示与催单(5)评价功能测试,如表7-5所示、图7-5所示。表7-5评价功能测试表功能编号Diancanqt-005功能模块名称评价功能测试需求菜品评价、菜品评价查看操作过程添加评价:点击【我的订单】-【待评价】,点击【去评价】进行评价查看评价:点击【我的订单】-【已完成】或者【我的评价】查看评价情况信息测试工具消费者手机数据输入文字评价期望结果评价具体信息实际结果评价具体信息图7-5评价功能7.4后台功能测试后台功能测试主要由商家后台注册登录模块测试、菜品管理功能测试、菜品类目管理功能测试、订单信息查询测试、首页轮播图功能测试等构成。商家后台注册登录模块测试,如表7-6所示、图7-6、图7-7所示。表7-6商家后台注册登录模块测试表功能编号Diancanht-001功能模块名称商家后台注册登录模块测试需求注册商家账号,成功登录商家账号操作过程注册:点击【管理员列表】-【新增管理员】填入名字、密码和手机号进行注册管理员账户,点击【提交】完成注册登录:输入手机号和密码点击【登录】执行完成测试工具手动数据输入商家管理员信息期望结果进入卖家后台管理系统实际结果商家注册成功,登陆成功图7-7系统登录菜品管理功能测试,如表7-7所示、图7-8所示。表7-7菜品管理功能测试表功能编号Diancanht-002功能模块名称菜品管理功能测试需求新增、修改菜品信息操作过程新增菜品:进入系统,点击【菜品】-【新增】,键入名称:【测试】,价格:【39.9】,库存:【24】,描述:【好吃!】,图片url:【:8079/file/tdnr.jpg】,类目:【热销】。点击【提交】修改菜品信息:点击【修改】修改菜品具体信息;点击【上架/下架】进行菜品上、下架信息修改测试工具手工数据输入菜品信息期望结果更新菜单实际结果新增菜品【测试】,菜品【测试】上架后下架图7-8菜品管理(3)菜品类目管理功能测试,如表6-8所示
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026浙江杭州市专家与留学人员服务中心招聘编外工作人员1人笔试备考题库及答案详解
- 南充市顺庆区特殊教育学校2026年秋季编外教师招聘笔试参考题库及答案详解
- 中国中药煲行业销售模及前景趋势预测研究报告
- 2025-2030智能分拣中心用地规划与区域物流枢纽协同
- 教育培训行业市场深度调研及育投资趋势研究
- 漱口水行业经营效益分析及未来投资走势预测研究报告(-版)
- 中国三网融合市场行情监测与投资风险预警研究报告
- 中国汽车凸轮轴市场运行现状监测与发展前景展望研究报告
- 2026年古代美女测试题及答案
- 2026四川宜宾市高县公安局第2次招聘警务辅助人员20人考试备考试题及答案详解
- 泰安市泰山区2025-2026学年第二学期五年级语文期末考试卷(部编版含答案)
- 2026年创伤中心建设试题及答案
- 2026年国有企业领导人员廉洁从业若干规定试题
- 2026年安全生产月培训
- 孩子王内部运营管理制度
- 设计院内部管理规章制度
- 三管三必须课件
- 易制爆人员培训制度
- 2025年易方达基金开发面试题库及答案
- 大型活动人员调配与指挥预案
- 干细胞向血管内皮细胞分化的诱导策略
评论
0/150
提交评论