Java外卖系统点餐系统厨艺论坛系统毕业论文
分类: Java springboot MySQL 专栏: java springboot Mysql 标签: 外卖参考论文 在线点餐Java论文
2023-01-04 00:16:16 726浏览
目 录
第 2 章系统的可行性研究与需求分析3
2.1系统业务流程分析4
2.1.1普通用户业务流程分析4
2.1.2超级管理员流程分析5
2.2系统用例分析6
2.2.1游客用例分析7
2.2.2普通用户用例分析7
2.2.3超级管理员用例分析8
第 3 章系统的概念设计10
3.1前台模块设计10
3.2后台模块设计11
3.2.1订单管理模块12
3.2.2商品管理模块12
3.2.3用户管理模块13
3.3数据库的设计14
3.3.1数据库概念设计14
3.3.2数据库逻辑设计19
第 4 章系统的详细设计与实现24
4.1系统前台功能模块的设计与实现24
4.1.1网站首页24
4.1.2用户注册与登录25
4.1.3查看菜品26
4.1.4选购菜品下单28
4.2系统后台功能模块的设计与实现35
4.2.1后台登录35
4.2.2订单管理36
4.2.3商品管理38
4.2.4用户管理40
1
1.%2 系统业务流程分析
1.1.%3 普通用户业务流程分析
普通用户的业务流程分为三个部分,点餐、浏览论坛和修改个人信息。
点餐业务流程如下:
(1) 用户进入网站后,浏览菜系分类,还可以在搜索栏查看热销菜。
(2) 菜品加入购物车后,选择是否支付订单,如果不支付订单,可以选择删除订单,接着选餐,若是支付订单,则系统转到支付界面。
(3) 选择立即支付后,如果余额充足,则支付成功,如果余额不足,需要充值余额后再支付订单。
(4) 支付订单成功后,订单将会被提交到后台管理员那里,管理员选择接单并发货。
(5) 确认收货后可以选择是否评价订单,如果评价,则可以对菜品进行星级打评或文字评论,还可以上传图片,如果不评价则直接订单完成。
浏览论坛业务流程如下:
用户点击论坛模块后,进入论坛页面,可以在这里可以进行对帖子的点赞、回复,还可以自己发布新帖子。
用户的整体业务流程图如图2.1所示。
图2.1用户的业务流程图
1.2.%3 超级管理员流程分析
超级管理员需要进行身份验证后才可以进入后台管理系统,身份验证通过后,可以在后台管理系统进行一系列的操作,包括对订单的管理,商品的管理,用户的管理以及对论坛的管理。如图2.2所示。
图2.2超级管理员的业务流程图
2.%2 系统用例分析
游客用例分析
如图2.3所示,游客进入系统后,可实现的功能如下:
(1) 查看菜品
游客进入系统后可以查看各个菜品的详细信息。
(2) 查看论坛
游客进入系统后可以查看论坛里的各个帖子。
图2.3游客的用例图
2.1.%3 普通用户用例分析
如图2.4所示,普通用户进入系统登录后,可实现的主要功能如下:
(1) 订餐
普通用户可以在订餐模块对菜品进行选择并订购。
(2) 查看订单
普通用户可以在订单模块查看自己的订单详细信息,还包括有提醒发货或申请退款功能。
(3) 评价
普通用户可以在确认收货后选择评价订单。
(4) 查看评价
普通用户可以查看其他用户对各个菜品的相关评价包括文字评论和星级打分以及上传的图片。
(5) 个人中心
普通用户可在“我的”即个人中心板块查看系统通知、修改收货地址、充值钱包还有上传头像。
(6) 使用论坛
普通用户可以发布帖子、查看帖子、点赞以及关注其他用户。
图2.4普通用户的用例图
2.2.%3 超级管理员用例分析
如图2.5所示,超级管理员登录后台管理系统后,可实现的主要功能如下:
(1) 在线订餐管理
在线订餐管理指的是管理员对堂食客户的订单信息进行管理,包括对订单接单、退款等功能。
(2) 外卖配送管理
外卖配送管理指的是管理员对选择外卖服务的客户的订单进行管理,包括对待发货的订单进行接单、退款等功能。
(3) 商品管理
商品管理包括对商品的分类管理、商品的详细内容管理、广告管理以及餐桌管理。
(4) 用户管理
用户管理指的是管理员对用户的账号权限进行管理,还有对用户的余额提现进行管理。
(5) 论坛管理
论坛管理包括对论坛的分类管理、正常帖子的管理以及对举报贴的管理。
图2.5超级管理员的用例图
第 3 章 系统的概念设计
本章在基于上一章系统需求分析的结果上进行对系统的详细设计,主要从三个模块进行系统的设计,分别是前台模块的设计,后台模块的设计和数据库的设计。前台模块设计的使用对象主要是普通用户,而后台模设计的使用对象则是超级管理员。
3.1 前台模块设计
前台设计的功能模块主要提供给顾客点餐功能、购物车功能、论坛功能和个人信息管理功能,顾客可以点击不同的功能模块查看里面的信息并进行相对应的操作。
(1) 点餐功能模块显示的是网站上所有可选购的菜品,用户可以点击感兴趣的菜品查看此菜品的详细信息,包括菜品的价格、销量、详细介绍以及购买过的用户对此菜品的评价。用户如果喜欢的话,就可以把菜品加入购物车进行支付。其中点餐功能模块还设计可以按照菜品的分类或销量和价格排序进行查看,而销量是按照从高到低的顺序排序,价格则是完全相反,按照从低到高的顺序排序,性价比还是一个很重要的考虑因素的。用户如果觉得浏览点餐比较耗费时间,想节省时间快速点餐,可以直接点击搜索栏直接搜索自己喜欢的菜品进行选购。
(2) 购物车功能模块显示的是用户添加进来的各类菜品,在这个功能模块里,用户可以选择单独一个菜品进行支付或删除,也可以选择好几个菜品进行同时支付或删除。如果点击立即支付,页面将会跳转到服务类型页面,这里设计的是用户可以选择在线订餐服务或是外卖配送服务,如果选择了在线订餐,直接点击用户所在的餐桌编号即可,如果选择的是外卖配送,将要填写送货地址,选择好后支付订单即可。
(3) 论坛功能模块显示的是用户发布的各种类型的帖子,这里显示着四个类型的模块。用户可以按照最新、热门、点赞三种排序浏览用户发布的各类帖子,也可以直接点击自己感兴趣的帖子主题类型,查看或发布帖子。在这个功能模块里,用户不仅可以浏览或发布帖子,还可以对帖子进行回复、点赞、和举报。
(4) 我的功能模块显示的是收货地址、购物车、我的订单、系统通知、我的钱包、充值、我的论坛、联系我们等信息。用户可以点击相应的超链接跳转到相对应的界面。收货地址里可以增加删除自己的地址,点击购物车则是跳转到了购物车功能模块,我的订单也是同样的结果,跳转到了我的订单功能模块。系统通知里显示的是以往发布的系统通知,我的钱包里显示的是用户充值的余额,点击充值,用户可以选择不同的支付方式进行充值。论坛里设计显示的是,用户可以看到自己以往发布和举报的帖子,还有点赞关注的用户,包括关注的帖子主题。在我的功能模块右上角,还可以修改用户密码,也可以注销用户,重新登录新用户。
3.2 后台模块设计
后台模块的设计主要是针对超级管理员使用后台所需要的功能而设计的模块,包括订单管理模块、商品管理模块、用户管理模块和论坛管理模块。后台模块的设计大大提高了管理员管理平台的效率,缩短了不必要的时间。
3.2.1 订单管理模块
订单管理功能模块分别包括在线订单功能模块和外卖配送功能模块,其中两个模块内包含的功能基本一致。
(1) 待上菜/待发货显示的是用户已经下单的订单信息,包括订单号、商品名称、单价、购买件数、状态、创建时间和用户信息,管理员可以选择接单或退款。
(2) 已接单/已发货显示的是管理员接单后的订单详细信息,包括订单号、商品名称、单价、购买件数、状态、创建时间和用户信息。
(3) 确认收货显示的是用户点击确认收货后显示的订单,也包含有一些订单的详细信息。
(4) 已完成显示的是用户确认收货并评价后的商品。
(5) 待退款显示的是用户申请的退款订单,包括订单号、商品名称、单价、购买件数、总价、状态、用户信息等等。后台管理员可以点击确认退款。
(6) 已退款显示的是后台管理员已经确认退款后的订单。
订单管理模块设计如图3.1所示。
图3.1订单管理功能模块设计图
3.2.2 商品管理模块
商品管理功能模块分别包括商品详情管理、商品分类管理、广告管理和餐桌信息管理,管理员通过商品管理功能模块方便快捷的管理商品相关信息,提升了工作效率。
(1) 商品详情显示的是商品的详细信息,包括商品的id、商品名、商品所在的分类名、商品的详情内容、商品的价格、商品的状态、排序字段以及可以对商品进行的操作,包括更换商品图片,对商品进行修改,下架商品还有添加商品。管理员可以直接输入商品名进行搜索商品,也可以根据商品的字段按照升序或降序排序浏览或按照商品分类或状态进行搜索浏览。
(2) 商品分类显示的是对商品的类型进行分类,包括有煲仔饭类型、小碗菜类型、营养汤肴和主食类型。这里显示着每个类型的id、分类名、图标、排序字段以及是否启用的状态。后台管理员也可以对分类进行修改和查找。
(3) 广告显示的是发布在网站上的广告,包括每条广告的id、标题、图片、发布的位置、链接、排序字段以及状态。管理员可以对广告进行随时更换或添加删除。
(4) 餐桌显示的是这个系统应用的高校食堂有多少餐桌,每个餐桌都有自己独一无二的id和餐桌编号,管理员根据编号和id来上菜,如果某个餐桌发生故障不能使用,这里管理员也可以点击停用这张餐桌,餐桌修好后,随时都可以启用此餐桌。
商品管理模块设计如图3.2所示。
图3.2商品管理功能模块设计图
3.2.3 用户管理模块
用户管理模块设计了三个部分,分别是用户详情管理、用户投诉处理和提现申请处理,这个模块管理员主要用来处理和用户相关的操作。
(1) 用户详情显示的是注册这个系统的用户详细信息,包括用户的id、电话号码、用户名、头像、创建时间和状态(是否被禁用)、粉丝量。管理员可以通过输入用户名或用户手机号进行搜索用户。
(2) 用户投诉显示的是被被投诉者的信息以及投诉者的信息,还有投诉内容和理由,包括状态。管理员可以选择不符实或符实,如果选择符实,则被举报的用户将被禁用,如果选择不符实,则被举报用户的账号则可以继续使用。
(3) 提现申请显示的是用户发出的提现申请,包括申请人的信息、提现金额。
用户管理模块设计如图3.3所示。
图3.3用户管理功能模块设计图
3.2.4 论坛管理模块
论坛管理模块主要设计为管理员对论坛主题分类的增删改查、已发布的贴子的状态修改和查找以及对举报贴的禁用等操作。
(1) 主题分类显示的是对帖子主题进行的大分类,包括分类id、分类名、图标、排序字段、状态、关注人数、发帖量和回复量。管理员可以修改分类信息,包括修改名字、图片。还可以选择禁用分类或添加删除分类,也可以输入分类名对分类进行搜索或根据启用/禁用状态进行搜索。
(2) 发布帖显示的是用户已经发布的帖子详细内容,包括帖子的id、标题、所属分类、状态、点赞量、浏览量、回帖量。管理员可以对帖子进行禁用和删除,也可以直接输入帖子分类名进行搜索帖子或根据屏蔽/显示状态进行搜索。
(3) 举报贴显示的是被举报的帖子详细信息,包括帖子的id、举报者信息、举报内容、被举报的帖子目前状态。管理员可以点击符实或不符实进行处理该举报贴。如果点击不符实,则帖子继续存在于前端页面,若是点击符实,则举报贴将会被屏蔽掉,用户不会再在前端页面看到该屏蔽贴。
论坛管理模块设计如图3.4所示。
图3.4论坛管理功能模块设计图
3.3 数据库的设计
3.3.1 数据库概念设计
(1) 地址信息表
地址信息表是用来存储地址ID、详细收获地址信息、联系手机号、收货人姓名、用户id等信息。如图3.6所示。
图3.6地址实体E-R图
(2) 广告信息表
广告信息表是用来存储广告ID、广告标题、广告图片、广告定位、广告外连接路径等信息。如图3.7所示。
图3.7广告实体E-R图
(3) 帖子信息表
帖子信息表是用来存储帖子的ID、帖子的内容、帖子的标题、此贴的点赞数量、帖子的浏览量、发帖用户ID、帖子类别ID、帖子的图片路径等信息。如图3.8所示。
图3.8帖子信息E-R图
(4) 帖子分类信息表
帖子分类信息表是用来存储帖子的分类ID、分类名、分类图标地址、该分类下的帖子数量、该分类下帖子回复的总数量以及关注人数的信息。如图3.9所示。
图3.9帖子分类实体E-R图
(5) 购物车信息表
购物车信息表是用来存储每条购物车记录的ID、菜品ID、购买数量、创建时间、用户ID的信息。如图3.10所示。
图3.10购物车实体E-R图
(6) 投诉信息表
投诉信息表是用来存储投诉信息ID、投诉时间、投诉用户ID、被投诉用户ID、投诉理由等信息。如图3.11所示。
图3.11投诉实体E-R图
(7) 评论信息表
评价信息表是用来存储评价ID、评价内容、评分、评价图、菜品ID、用户ID、等信息。如图3.12所示。
图3.12评价实体E-R图
(8) 商品信息表
商品信息表是用来存储商品ID、商品名字、商品介绍、商品分类ID、商品图片地址、商品价格、商品销量等信息。如图3.13所示。
图3.13商品实体E-R图
(9) 订单信息表
订单信息表是用来存储订单ID、商品ID、用户ID、订单总价格、餐桌号、订单地址、退款原因等信息。如图3.14所示。
图3.14订单实体E-R图
(10) 钱包信息表
钱包信息表是用来存储用户ID、余额和支付密码的信息表。如图3.15所示。
图3.15钱包实体E-R图
(11) 座位信息表
座位信息表是用来存储座位ID、座位编号、座位状态的信息表。如图3.16所示。
图3.16座位实体E-R图
(12) 用户信息表
用户信息表是用来存储用户ID、用户手机号、登录密码、用户名称、性别、出生日期、粉丝数量等信息。如图3.17所示。
图3.17用户实体E-R图
3.3.2 数据库逻辑设计
(1) 地址信息表
地址信息表是用来存储地址ID、详细收获地址信息、联系手机号、收货人姓名、用户id等信息。如表3.1所示。
表3.1地址信息表
字段名 | 数据类型 | 是否为空 | 是否为主键 | 说明 |
aid | Int(11) | 否 | 是 | 每条地址的id |
address_info | Varchar(255) | 是 | 否 | 详细收获地址 |
phone | Varchar(255) | 是 | 否 | 联系手机号 |
real_name | Varchar(255) | 是 | 否 | 收货人姓名 |
users_id | Varchar(255) | 是 | 否 | 下单用户id |
(2) 广告信息表
广告信息表是用来存储广告ID、广告标题、广告图片、广告定位、广告外连接路径等信息。如表3.2所示。
表3.2广告信息表
字段名 | 数据类型 | 是否为空 | 是否为主键 | 说明 |
aid | Int(11) | 否 | 是 | 每条广告的id |
title | Varchar(255) | 是 | 否 | 广告标题 |
img | Varchar(255) | 是 | 否 | 广告图片地址 |
type | Varchar(255) | 是 | 否 | 广告分类定位 |
url | Varchar(255) | 是 | 否 | 广告连接路径 |
(3) 帖子信息表
帖子信息表是用来存储帖子的ID、帖子的内容、帖子的标题、此贴的点赞数量、帖子的浏览量、发帖用户ID、帖子类别ID、帖子的图片路径等信息。如表3.3所示。
表3.3帖子信息表
字段名 | 数据类型 | 是否为空 | 是否为主键 | 说明 |
bid | Int(11) | 否 | 是 | 每条帖子的id |
context | Longtext | 否 | 否 | 帖子的内容 |
title | Varchar(255) | 否 | 否 | 帖子的标题 |
likes | Int(11) | 是 | 否 | 点赞数量 |
browse | Int(11) | 是 | 否 | 浏览量 |
users_id | Varchar(255) | 否 | 否 | 发帖用户id |
blog_type_id | Varchar(11) | 否 | 否 | 帖子类别id |
img | Varchar(255) | 是 | 否 | 帖子图片路径 |
(4) 帖子分类信息表
帖子分类信息表是用来存储帖子的分类ID、分类名、分类图标地址、该分类下的帖子数量、该分类下帖子回复的总数量以及关注人数的信息。如表3.4所示。
表3.4帖子分类信息表
字段名 | 数据类型 | 是否为空 | 是否为主键 | 说明 |
btid | Int(11) | 否 | 是 | 帖子的分类id |
bname | Varchar(255) | 否 | 否 | 分类名 |
icon | Varchar(255) | 否 | 否 | 分类图标地址 |
blog_sum | Int(11) | 是 | 否 | 帖子数量 |
blog_return_card | Int(11) | 是 | 否 | 回贴数量 |
focus_sum | Int(11) | 是 | 否 | 关注人数 |
(5) 购物车信息表
购物车信息表是用来存储每条购物车记录的ID、菜品ID、购买数量、创建时间、用户ID的信息。如表3.5所示。
表3.5购物车信息表
字段名 | 数据类型 | 是否为空 | 是否为主键 | 说明 |
cid | Int(11) | 否 | 是 | 购物记录的id |
goods_id | Varchar(255) | 否 | 否 | 菜品id |
buy_num | Int(11) | 否 | 否 | 购买数量 |
cts | Varchar(255) | 否 | 否 | 创建时间 |
users_id | Varchar(255) | 否 | 否 | 用户id |
(6) 投诉信息表
投诉信息表是用来存储投诉信息ID、投诉时间、投诉用户ID、被投诉用户ID、投诉理由等信息。如表3.6所示。
表3.6投诉信息表
字段名 | 数据类型 | 是否为空 | 是否为主键 | 说明 |
cid | Int(11) | 否 | 是 | 每条投诉的id |
cts | Varchar(255) | 否 | 否 | 投诉时间 |
users_id | Varchar(255) | 否 | 否 | 投诉用户id |
complaints_users_id | Varchar(255) | 否 | 否 | 被投诉用户id |
reason | Longtext | 否 | 否 | 投诉理由 |
(7) 评论信息表
评价信息表是用来存储评价ID、评价内容、评分、评价图、菜品ID、用户ID、等信息。如表3.7所示。
表3.7评论信息表
字段名 | 数据类型 | 是否为空 | 是否为主键 | 说明 |
eid | Int(11) | 否 | 是 | 每条评价的id |
context | text | 否 | 否 | 评价内容 |
grade | Int(11) | 是 | 否 | 评分 |
imgs | Varchar(255) | 是 | 否 | 评价的图片地址 |
goods_id | Varchar(11) | 否 | 否 | 评价的菜品id |
users_id | Varchar(11) | 否 | 否 | 评价用户id |
(8) 商品信息表
商品信息表是用来存储商品ID、商品名字、商品介绍、商品分类ID、商品图片地址、商品价格、商品销量等信息。如表3.8所示。
表3.8商品信息表
字段名 | 数据类型 | 是否为空 | 是否为主键 | 说明 |
gid | Int(11) | 否 | 是 | 每个商品的id |
gname | Varchar(255) | 否 | 否 | 商品名字 |
gdesc | Longtext | 是 | 否 | 商品详细介绍 |
kid | Varchar(255) | 否 | 否 | 商品分类id |
img | Varchar(255) | 是 | 否 | 商品图片地址 |
price | Double(11) | 否 | 否 | 商品的价格 |
sales | Int(11) | 是 | 否 | 商品的销量 |
(9) 订单信息表
订单信息表是用来存储订单ID、商品ID、用户ID、订单总价格、餐桌号、订单地址、退款原因等信息。如表3.9所示。
表3.9订单信息表
字段名 | 数据类型 | 是否为空 | 是否为主键 | 说明 |
oid | Int(11) | 否 | 是 | 每条订单的id |
goods_id | Varchar(255) | 否 | 否 | 订单商品的id |
users_id | Varchar(255) | 否 | 否 | 订单用户的id |
total_price | Double(11) | 否 | 否 | 订单总价格 |
orderNo | Varchar(255) | 是 | 否 | 餐桌号 |
address | Varchar(255) | 是 | 否 | 订单收货地址 |
Refounded_msg | Varchar(255) | 是 | 否 | 退款原因 |
(10) 钱包信息表
钱包信息表是用来存储用户ID、余额和支付密码的信息表。如表3.10所示。
表3.10钱包信息表
字段名 | 数据类型 | 是否为空 | 是否为主键 | 说明 |
uid | Int(11) | 否 | 是 | 用户的id |
money | Double(11) | 是 | 否 | 钱包余额 |
pay_pass | Varchar(255) | 否 | 否 | 支付密码 |
(11) 座位信息表
座位信息表是用来存储座位ID、座位编号、座位状态的信息表。如表3.11所示。
表3.11座位信息表
字段名 | 数据类型 | 是否为空 | 是否为主键 | 说明 |
sid | Int(11) | 否 | 是 | 每个座位的id |
seat_no | Varchar(255) | 否 | 否 | 每个座位编号 |
status | Varchar(255) | 否 | 否 | 每个座位状态 |
(12) 用户信息表
用户信息表是用来存储用户ID、用户手机号、登录密码、用户名称、性别、出生日期、粉丝数量等信息。如表3.12所示。
表3.12用户信息表
字段名 | 数据类型 | 是否为空 | 是否为主键 | 说明 |
uid | Int(11) | 否 | 是 | 每个用户的id |
phone | Varchar(255) | 否 | 否 | 用户手机号 |
upass | Varchar(255) | 否 | 否 | 登录密码 |
nickname | Varchar(255) | 否 | 否 | 用户名称 |
sex | Varchar(255) | 是 | 否 | 用户性别 |
borth | Varchar(255) | 是 | 否 | 用户出生日期 |
focus_sum | Int(11) | 是 | 否 | 用户的粉丝量 |
第 4 章 系统的详细设计与实现
本章呈现的是系统主要功能模块实现的效果图,分别从前台实现效果和后台实现效果两个方面呈现。同时还介绍了开发系统的过程中如何实现主要功能模块的详细设计即编写的核心代码以及对核心代码的讲解。
4.1 系统前台功能模块的设计与实现
4.1.1 网站首页
用户在进入网上订餐系统时,首先看到的就是网站首页界面。一个好的网站首页应该具有一个良好精美的外观布局,并且可以让访问的用户一目了然,可以很清晰的了解到网站的模块分布。本系统首页采用了JS+CSS结合设计,人机交互友好,并且采用了JSP页面和JS页面分离的设计模式,有利于页面的修改和维护,并且访问页面速度比较快还兼容各种浏览器。
本系统首页大致分为4部分,顶端是菜品搜索栏,背景是设置的广告轮播图。紧接着就是导航栏。导航栏下面就是各种餐品的详细介绍。最底部则是点餐、购物车、论坛和个人信息四个功能模块。用户可以点击进行相应操作,点餐可以帮助用户买到喜欢可口的饭菜,购物车则是管理订单,;论坛可以帮助他们进行交流,而个人信息模块则是可以查看与用户个人操作相关的内容。
4.1.2 用户注册与登录
用户注册功能的实现为想使用本系统订餐或交流的用户提供了窗口,用户可以注册账号,从而获取更好的服务,这里使用的是手机号注册,便于用户以后的登录。
用户注册页面如图4.1所示。
图4.1用户注册页面
用户登录功能的实现为用户提供了登录窗口,用户可以在这个页面进行登录,从而获取更好的服务。
用户登录页面如图4.2所示。
图4.2用户登录页面
4.1.3 查看菜品
本系统给用户提供了两种方式查看菜品,一种是可以点击搜索栏进行对菜品的搜索并查看,另一种则是可以在首页进行对各种菜品的浏览查看。在进行菜品查看时,用户首先单击某个菜品,系统会将该菜品的唯一的ID从前端页面传递到control控制层,接着调用Service服务层中的方法,然后Service层会继续调用DAO层中的方法,DAO层根据传进来的菜品ID在MySQL数据库中进行搜索查询,搜索成功后会将搜索到的数据进行打包,逐层返回到control控制层中,最后传到前端页面,然后前端页面会对返回的数据进行解析展示给用户。
4.1.4 选购菜品下单
本系统实现的订餐功能为用户订餐提供了服务,用户可以点击想要的饭菜进行下单,选择数量后加入购物车,点击立即支付后可以选择在线订餐或外卖配送两种不同的模式,如果选择在线订餐模式则要选择自己所在的餐桌编号,若是选择外卖配送模式则要输入配送地址,最后点击确认支付按钮完成支付。
用户在下单时,首先菜品会被添加到购物车中,然后点击购物车进行结算,此时系统会对购物车中的菜品进行遍历,获取每一个菜品的ID,通过这个ID进入到数据库中查询这个菜品的基本信息,查询到价格后进行合算,计算出这个订单的总价格并根据订餐时间生成唯一的订单号,然后把这条订单信息存入到数据库中,方便后台管理员查看进行接单。
在线订餐页面如图4.3所示,用户可以选择自己所在的餐桌编号。
图4.3在线订餐页面
支付成功页面如图4.4所示,用户订餐支付成功后会显示如下界面。
图4.4支付成功页面
4.1.5 使用论坛
论坛功能的实现为用户提供了一个交流信息的平台,最上端是广告图的植入轮播,紧接着就是论坛导航栏.用户可以点击相应的主题帖进去发帖或查看别的用户发布的帖子。
用户在发布新帖或更新已发布的帖子时,系统先向数据库查询是否已有这个帖子,若是已发布的帖子,则数据库中存有帖子的ID,返回查询结果,进行更新帖子的操作。若是新的帖子,则传递过去空的ID,在数据库中查询不到,因此可以讲添加的帖子内容和帖子类型等相关信息存入到数据库中,方便后续查找以及后台管理员的管理。
相关核心代码如下所示:
public ResponseEntity<?> saveOrUpdate(Blog blog,HttpSession session) {
String blog_desc_img=(String) session.getAttribute("blog_desc_img");
if(blog_desc_img!=null&&!blog_desc_img.isEmpty()){
String[] imgs=blog_desc_img.replace("][", "@").replace("]", "").replace("[", "").split("@");
for(String img:imgs){
if(blog.getContext().indexOf(img)>-1){
blog.setImg(img);
break;
}
}
session.removeAttribute("blog_desc_img");
}else{
blog.setImg("");
}
if(blog.getBid()!=null){
blogService.update(blog);
}else{
blogService.insert(blog);
Blog_type bt=blog_typeService.getById(blog.getBlog_type_id());
bt.setBlog_sum(bt.getBlog_sum()+1);
blog_typeService.update(bt);
String i=blog.getBlog_type_id();
blog=new Blog();
blog.setBlog_type_id(i);
}
return ResponseEntity.ok(1);
}
图4.5发布帖子页面
4.2 系统后台功能模块的设计与实现
系统后台功能主要是针对超级管理员的需求而设计实现的,因此满足了超级管理员所需要的后台登录功能,订单管理功能、商品管理功能、用户管理功能和论坛管理功能。方便了超级管理员的使用。
4.2.1 后台登录
后台登录功能的实现为管理员的登录提供了窗口,管理员通过输入手机号和密码验证身份,验证通过后即可进入后台管理系统。如图4.6所示。
图4.6后台登录页面
4.2.2 订单管理
订单管理功能实现了对选择在线订餐或外卖配送用户下的订单管理功能。实现了对待上菜或待发货的订单接单或退款管理、还可以查看已接单的订单、确认收货的订单以及已经完成的订单。还实现了对待退款的订单,即用户申请退款的订单确认退款,确认退款后,可以在已退款页面查看退款后的订单。订单管理功能的实现不但为管理员管理订单提供了很大的便利,还为让每一个订单准确无误的送到用户手中提供了保障。
前端页面下单后,订单的相关数据被传入数据库中存储并生成唯一的订单ID,接着后端管理页面根据这个ID判断订单状态是否已支付,若是已支付,则将订单的状态修改为已接单,并发送系统消息到前端页面。
接单状态修改的详细代码如下:
public String upstatus(Orders orders) {
Integer pageNo=orders.getPageNo();
orders = ordersService.getById(orders.getOid()+"");
if(orders.getStatus().equals(Sys.Orders.payed)) {
Orders o=new Orders();
o.setOid(orders.getOid());
o.setStatus(Sys.Orders.take);
o.setTake_ts(DateUtils.DateTimeToString(new Date()));
ordersService.update(o);
Notice n=new Notice();
n.setContext("商家已经发货/接单了。订单号:"+orders.getOrderNo()+"["+orders.getGoods_name()+"],请耐心等待");
n.setType(Sys.Notice.type_sys);
n.setUsers_id(orders.getUsers_id());
noticeService.insert(n);
return "redirect:/admin/orders/page?pageNo="+pageNo+"&server_type="+orders.getServer_type()+"&status="+orders.getStatus();
}
return "";
}
如果有用户选择对订单退款操作,管理员在后台订单管理页面可以点击确认退款。系统首先获取到订单所在的页面ID,接着获取用户选择退款的原因,然后获取到订单ID,判断这个订单是否已经付款或用户想要退款即未支付想取消订单,满足条件后,进行退款操作。
确认退款代码如下:
public String sure_refounded(Orders orders) {
Integer pageNo=orders.getPageNo();
String refounded_msg=orders.getRefounded_msg();
orders = ordersService.getById(orders.getOid()+"");
if(orders.getStatus().equals(Sys.Orders.payed)||orders.getStatus().equals(Sys.Orders.want_refound)) {
String ts=DateUtils.DateTimeToString(new Date());
Orders o=new Orders();
o.setOid(orders.getOid());
o.setStatus(Sys.Orders.refounded);
o.setRefound_ts(ts);
o.setRefounded_msg(refounded_msg);
o.setRefound_type(Sys.refound_type.shangjia);
ordersService.update(o);
Purse p=purseService.getById(orders.getUsers_id());
p.setMoney(p.getMoney()+orders.getTotal_price());
purseService.update(p);
Purse_detail pd=new Purse_detail();
pd.setMoney(orders.getTotal_price());
pd.setMsg("退款到账了。订单号:"+orders.getOrderNo()+"["+orders.getGoods_name()+"],退款原因:"+refounded_msg);
pd.setType("+");
pd.setUsers_id(orders.getUsers_id());
purse_detailService.insert(pd);
Notice n=new Notice();
n.setContext("退款到账了。订单号:"+orders.getOrderNo()+"["+orders.getGoods_name()+"],退款原因:"+refounded_msg);
n.setType(Sys.Notice.type_sys);
n.setUsers_id(orders.getUsers_id());
noticeService.insert(n);
return "redirect:/admin/orders/page?pageNo="+pageNo+"&server_type="+orders.getServer_type()+"&status="+orders.getStatus();
}
return "redirect:/admin/orders/page?pageNo="+pageNo+"&server_type="+orders.getServer_type()+"&status="+orders.getStatus();
}
4.2.3 商品管理
商品管理功能实现了管理员对每个商品进行管理,管理员可以对每个商品进行增删改查操作,还实现了对商品的分类进行管理,不但可以增加餐品的分类,还可以删除或修改已有的餐品分类。商品管理功能不但实现了以上的两种管理,还增加了对网页的广告进行管理、以及对餐厅里的餐桌进行管理,后台管理员登录后台后可以在前端投放广告,也可以根据需求和实际情况增加或减少餐厅的餐桌。
在增加商品时,首先获取到增加商品页面的最新页,接着判断增加商品的所在分类是否已经存在,若是空,则是表明新增加的商品属于一个新分类,那么创建一个新分类,并设置状态为不可使用,管理员可以后续设置状态可用,跳转到新增商品分类页面的第一页。若分类已存在,查找到Gid,那么直接增加商品,并跳转到商品所在分类增加页面的最新页。所在增加商品的核心代码如下:
public String addGoofd(Goods goods){
Integer pageNo=goods.getPageNo();
if(goods.getGid()==null) {//如果id为空说明是新增分类
goods.setStatus(Sys.Common.NO_USE);
goodsService.insert(goods);
return "redirect:/admin/goods/page?pageNo=1";
}else {//不为空则为修改
goodsService.update(goods);
return "redirect:/admin/goods/page?pageNo="+pageNo;
}
}
删除商品时,同样先获取商品所在的页码,接着获取商品所在分类ID,然后判断商品的图片是一个还是很多个图片,若是单独一个图片,那么直接删除相应文件即可,若是很多图片即一个集合的存在,那么就需要遍历删除。删除图片后,商品的ID也要进行删除操作,最后返回到删除商品的页面。
删除商品的核心代码如下:
public String del(Goods goods,HttpServletRequest request) {
Integer pageNo=goods.getPageNo();
goods = goodsService.getByGid(goods.getGid()+"");
//删除原来的图片
if(goods.getImg()!=null&&!goods.getImg().isEmpty()) {
UploadFile.deleteFile(request, goods.getImg());
}
if(goods.getImgs()!=null&&!goods.getImgs().isEmpty()){
String[] imgs=goods.getImgs().replace("][", "@").replace("[", "").replace("]", "").split("@");
for(String img:imgs){
UploadFile.deleteFile(request,img);
}
}
goodsService.delete(goods.getGid()+"");
return "redirect:/admin/goods/page?pageNo="+pageNo;
}
4.2.4 用户管理
用户管理功能为管理员管理每个用户信息提供了便利,管理员在本系统不仅可以看到每个用户的详细信息,还可以选择对被投诉的违规用户账号禁用。这个系统还为管理员提供了一个处理用户投诉的页面,这里可以看到所有用户提出的投诉信息,以及对账户余额的提现申请。
如果有用户被举报,管理员可以在后台用户管理模块里修改用户状态,设置禁用或解封。系统先获取该用户所在的页码,接着获取用户账号ID,如果该用户是正在试用,那么则会进行禁用,若是用户为禁用状态,点击后则会进行启用,更新后返回到用户管理界面。
修改用户状态代码如下:
public String upstatus(Users u,String msg) {
Integer pageNo=u.getPageNo();
u = usersService.getById(u.getUid()+"");
if(u.getStatus().equals(Sys.Common.USE)) {
u.setMsg(msg);
u.setStatus(Sys.Common.NO_USE);
}else {
u.setMsg("");
u.setStatus(Sys.Common.USE);
}
usersService.update(u);
return "redirect:/admin/users/page?pageNo="+pageNo;
}
如果有用户注销账户,则管理员需要删除用户账号,系统依次获得用户账号所在页码和ID,如果用户有头像,那么删除图片,接着删除用户账号的ID,返回用户管理页面。
删除用户代码如下:
public String del(Users user,HttpServletRequest request) {
Integer pageNo=user.getPageNo();
user = usersService.getById(user.getUid()+"");
//删除原来的图片
if(user.getFaceimg()!=null) {
UploadFile.deleteFile(request, user.getFaceimg());
}
usersService.delete(user.getUid()+"");
return "redirect:/admin/users/page?pageNo="+pageNo;
}
4.2.5 论坛管理
论坛管理功能实现了管理员对帖子的分类增加或删除管理、帖子信息管理、对举报贴的处理的详细功能。
若管理员想要修改或添加帖子分类,系统首先获取到增加帖子分类所在的页码,接着比较增加的帖子分类的ID是否已存在于数据库中,若是空则说明是新增帖子分类,那么将输入的帖子分类加入进去,返回到新增帖子分类页面,若是不为空,则代表是修改已存在的帖子分类信息,直接进行更新操作,然后再返回到最初页面。
详细代码如下:
public String addBlog_type(Blog_type blog_type){
Integer pageNo=blog_type.getPageNo();
if(blog_type.getBtid()==null) {//如果id为空说明是新增分类
blog_typeService.insert(blog_type);
return "redirect:/admin/blog_type/page?pageNo="+pageNo";
}else {//不为空则为修改
blog_typeService.update(blog_type);
return "redirect:/admin/blog_type/page";
}
}
若管理员想要删除帖子分类,点击删除,系统也是先获取到该帖子分类所在的页码,先判断该分类下是否还有帖子,若有帖子,则需要删除帖子才可以删除该分类,若没有帖子,则可以直接进行删除分类,最后还要删除图片。
删除帖子种类代码如下:
public String del(Blog_type blog_type,HttpServletRequest request) {
Integer pageNo=blog_type.getPageNo();
Blog b=new Blog();
b.setBlog_type_id(blog_type.getBtid()+"");
List<Blog> bli=blogService.Page(b);
if(bli!=null&&bli.size()>0){
request.setAttribute("msg", "删除失败,请删除该类别下的帖子");
return "redirect:/admin/blog_type/page?pageNo="+pageNo;
}
blog_type = blog_typeService.getById(blog_type.getBtid()+"");
//删除原来的图片
if(blog_type.getIcon()!=null) {
UploadFile.deleteFile(request, blog_type.getIcon());
}
blog_typeService.delete(blog_type.getBtid()+"");
focus_blog_typeService.deleteByBlog_type_id(blog_type.getBtid()+"");
return "redirect:/admin/blog_type/page?pageNo="+pageNo;
}
好博客就要一起分享哦!分享海报
此处可发布评论
评论(0)展开评论
展开评论