第4章 平台设计
本章主要讲述的是火锅店订餐平台的设计开发结构,简单介绍了开发流程与数据库设计的原则以及数据表的关系结构图,并且详细的展示了数据表的内部结构信息与属性。
平台启动后,在登录界面,输入正确的账号密码,选择进入管理员界面或用户界面,管理员界面是用来管理页面与用户信息,用户界面可以正常的使用,平台登录结构图如图4-1所示。
图4-1 平台登录结构图
管理员模块属于是网站的后台,进入之后有大量的管理员功能,管理员也可以使用用户模块的功能,为了维护网站的稳定与页面的布局,将管理员模块的功能详细化后可以使用系统管理对页面进行布局修改,可以发布餐桌信息提示用户餐桌状态,用户模块只可以修改个人信息,对餐桌预定、我的收藏管理、用户充值、客服中心、购物车、我的订单等进行操作,火锅店订餐平台总体结构图如图4-2所示。
图4-2 平台总体结构图
数据库设计之后,根据数据库关系,可以更加清晰地了解到数据库结构,每一个数据表之间的关系,再创建数据表。快速更改和查询对应的信息,有了数据库就不用在程序和代码中寻找。
分析火锅店订餐平台的数据结构后,在E-R图中分析管理员登录时的模式,需要输入用户名与密码,管理员信息实体属性如下图所示。
图4-3 管理员信息实体属性图
菜品信息实体属性如下图所示。
图4-4菜品信息实体属性图
用户实体属性图如下图所示。
图4-5用户实体属性图
锅底信息实体属性图如下图所示。
图4-6锅底信息实体属性图
餐桌信息实体属性图如下图所示。
图4-7餐桌信息实体属性图
订单实体属性图如下图所示。
图4-8订单实体属性图
在关系数据E-R图中,分析并创建数据表,数据表用来记录信息,数据表关系由多个数据表组成,下面介绍的是数据表各个字段信息如下表所示。
表4-1:菜品信息评论表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
refid | bigint | 关联表id | |||
userid | bigint | 用户id | |||
avatarurl | longtext | 4294967295 | 头像 | ||
nickname | varchar | 200 | 用户名 | ||
content | longtext | 4294967295 | 评论内容 | ||
reply | longtext | 4294967295 | 回复内容 |
表4-2:用户表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
username | varchar | 100 | 用户名 | ||
password | varchar | 100 | 密码 | ||
role | varchar | 100 | 角色 | 管理员 | |
addtime | timestamp | 新增时间 | CURRENT_TIMESTAMP |
表4-3:购物车表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
tablename | varchar | 200 | 商品表名 | jiajushangpin | |
userid | bigint | 用户id | |||
goodid | bigint | 商品id | |||
goodname | varchar | 200 | 商品名称 | ||
picture | longtext | 4294967295 | 图片 | ||
buynumber | int | 购买数量 | |||
price | float | 单价 | |||
discountprice | float | 会员价 | |||
goodtype | varchar | 200 | 商品类型 |
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
userid | bigint | 用户id | |||
address | varchar | 200 | |||
name | varchar | 200 | 收货人 | ||
phone | varchar | 200 | 电话 | ||
isdefault | varchar | 200 |
表4-5:收藏表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
userid | bigint | 用户id | |||
refid | bigint | 商品id | |||
tablename | varchar | 200 | 表名 | ||
name | varchar | 200 | 名称 | ||
picture | longtext | 4294967295 | 图片 | ||
type | varchar | 200 | 类型(1:收藏,21:赞,22:踩,31:竞拍参与,41:关注) | 1 | |
inteltype | varchar | 200 | 推荐类型 | ||
remark | varchar | 200 | 备注 |
表4-6:客服中心
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
userid | bigint | 用户id | |||
adminid | bigint | 管理员id | |||
ask | longtext | 4294967295 | 提问 | ||
reply | longtext | 4294967295 | 回复 | ||
isreply | int | 是否回复 |
表4-7:订单
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
orderid | varchar | 200 | 订单编号 | ||
tablename | varchar | 200 | 商品表名 | jiajushangpin | |
userid | bigint | 用户id | |||
goodid | bigint | 商品id | |||
goodname | varchar | 200 | 商品名称 | ||
picture | longtext | 4294967295 | 商品图片 | ||
buynumber | int | 购买数量 | |||
price | float | 价格 | 0 | ||
discountprice | float | 折扣价格 | 0 | ||
total | float | 总价格 | 0 | ||
discounttotal | float | 折扣总价格 | 0 | ||
type | int | 支付类型 | 1 | ||
status | varchar | 200 | 状态 | ||
address | varchar | 200 | |||
tel | varchar | 200 | 电话 | ||
consignee | varchar | 200 | 收货人 | ||
remark | varchar | 200 | 备注 | ||
logistics | longtext | 4294967295 | 物流 | ||
goodtype | varchar | 200 | 商品类型 |
表4-8:餐桌预定
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
canzhuobianhao | varchar | 200 | 餐桌编号 | ||
canzhuotupian | longtext | 4294967295 | 餐桌图片 | ||
guodimingcheng | varchar | 200 | 锅底名称 | ||
guodijiage | int | 锅底价格 | |||
jiucanshijian | datetime | 就餐时间 | |||
yuyuebeizhu | varchar | 200 | 预约备注 | ||
yonghuming | varchar | 200 | 用户名 | ||
shouji | varchar | 200 | 手机 | ||
shhf | longtext | 4294967295 | 回复内容 | ||
ispay | varchar | 200 | 是否支付 | 未支付 |
表4-9:餐桌信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
canzhuobianhao | varchar | 200 | 餐桌编号 | ||
canzhuotupian | longtext | 4294967295 | 餐桌图片 | ||
canzhuoleixing | varchar | 200 | 餐桌类型 | ||
canzhuozhuangtai | varchar | 200 | 餐桌状态 | ||
yudingjieshao | longtext | 4294967295 | 预订介绍 | ||
gengxinshijian | datetime | 更新时间 |
表4-10:关于我们
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
title | varchar | 200 | 标题 | ||
subtitle | varchar | 200 | 副标题 | ||
content | longtext | 4294967295 | 内容 | ||
picture1 | longtext | 4294967295 | 图片1 | ||
picture2 | longtext | 4294967295 | 图片2 | ||
picture3 | longtext | 4294967295 | 图片3 |
表4-11:用户
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
zhanghao | varchar | 200 | 账号 | ||
mima | varchar | 200 | 密码 | ||
nicheng | varchar | 200 | 昵称 | ||
xingbie | varchar | 200 | 性别 | ||
shouji | varchar | 200 | 手机 | ||
touxiang | longtext | 4294967295 | 头像 | ||
money | float | 余额 | 0 |
表4-12:配置文件
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
name | varchar | 100 | 配置参数名称 | ||
value | varchar | 100 | 配置参数值 |
表4-13:菜品信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
caipinmingcheng | varchar | 200 | 菜品名称 | ||
caipinfenlei | varchar | 200 | 菜品分类 | ||
caipintupian | longtext | 4294967295 | 菜品图片 | ||
caipinkouwei | varchar | 200 | 菜品口味 | ||
caipintese | varchar | 200 | 菜品特色 | ||
caipinxiangqing | longtext | 4294967295 | 菜品详情 | ||
onelimittimes | int | 单次限购 | |||
alllimittimes | int | 菜品库存 | |||
clicktime | datetime | 最近点击时间 | |||
price | float | 价格 |
表4-14:菜品分类
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
caipinfenlei | varchar | 200 | 菜品分类 |
表4-15:公告信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
title | varchar | 200 | 标题 | ||
introduction | longtext | 4294967295 | 简介 | ||
picture | longtext | 4294967295 | 图片 | ||
content | longtext | 4294967295 | 内容 |
表4-16:token表
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
userid | bigint | 用户id | |||
username | varchar | 100 | 用户名 | ||
tablename | varchar | 100 | 表名 | ||
role | varchar | 100 | 角色 | ||
token | varchar | 200 | 密码 | ||
addtime | timestamp | 新增时间 | CURRENT_TIMESTAMP | ||
expiratedtime | timestamp | 过期时间 | CURRENT_TIMESTAMP |
表4-17:锅底信息
字段名称 | 类型 | 长度 | 字段说明 | 主键 | 默认值 |
id | bigint | 主键 | 主键 | ||
addtime | timestamp | 创建时间 | CURRENT_TIMESTAMP | ||
guodimingcheng | varchar | 200 | 锅底名称 | ||
guoditupian | longtext | 4294967295 | 锅底图片 | ||
guodileixing | varchar | 200 | 锅底类型 | ||
guodijiage | int | 锅底价格 | |||
guodijieshao | longtext | 4294967295 | 锅底介绍 | ||
clicktime | datetime | 最近点击时间 | |||
clicknum | int | 点击次数 | 0 |
4.4 本章小结
本章具体讲述了平台的大体结构,主要包括用户和管理员两大模块,使其各个功能简洁明了。同时对数据库的设计原则进行分析,从而提高了平台的效率。
第5章 平台实现
平台对各个模块功能实现的效果图,对首页、管理员功能和用户功能分别进行了展示,页面布局清晰,操作简单快捷,基本实现了对用户和管理员对平台的需求。
1 平台前台功能的实现
1.1登录界面的实现
首先双击打开微信小程序客户端,连上网络之后会显示出本平台的登录界面,这是进入小程序的第初始页面“登录”,能成功进入到该登录界面则代表小程序的开启是成功的,接下来就可以操作本平台所带有的其他所有的功能。
登录界面如图5-1所示。
图5-1 登录界面
1.2注册界面的实现
第一次使用本小程序的使用者,首先是要进行注册,点击“注册”,然后就会进入到注册的页面里面,将用户信息录入注册表,确认信息正确后,平台才会进入登录界面,用户登录成功后可使用本小程序所提供的所有功能。
注册界面如图5-2所示。
图5-2 注册界面
1.3小程序首页功能的实现
小程序首页是用户注册登录后进入的第一个界面,在这里,人们能够看到小程序的导航条,内容包括首页、菜品信息、购物车、我的等。小程序首页界面如图5-3所示。
图5-3 小程序首页界面图
菜品信息,在菜品信息界面可以查看到菜品名称、菜品分类、菜品图片、菜品口味、菜品特色、单次限购、菜品库存、价格、菜品详情等信息,并根据需要进行加入购物车,立即购买,评论或收藏操作。菜品信息详情如图5-4所示。
图5-4菜品信息详情界面图
购物车,在购物车界面可以查看到商品名称、图片、价格、数量、总价等信息,并根据需要进行立即下单操作。购物车详情如图5-5所示。
图5-5购物车详情界面图
.1.4用户功能
用户登录成功后,点击“我的”进入我的页面,在我的页面可以对个人中心、餐桌预定、我的收藏管理、用户充值、客服中心、购物车、我的订单等进行详细操作。用户功能界面如图5-6所示。
图5-6用户功能界面图
管理员功能的实现
管理员登录,通过填写账号和密码等信息进行登录操作,如图5-7所示。
图5-7管理员登录界面图
管理员登录进入小程序可以查看到个人中心、用户管理、菜品分类管理、菜品信息管理、锅底信息管理、餐桌信息管理、餐桌预定管理、系统管理、订单管理等功能进行详细操作,如图5-8所示。
图5-8管理员主界面图
管理员点击用户管理;进入用户页面输入用户名和姓名可以查询,新增或删除用户列表,并根据需要对用户详情信息进行查看详情,修改和删除操作;如图5-9所示。
图5-9用户管理界面图
package com.controller;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
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.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MD5Util;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;
/**
* 登录相关
*/
@RequestMapping("users")
@RestController
public class UserController{
@Autowired
private UserService userService;
@Autowired
private TokenService tokenService;
/**
* 登录
*/
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null || !user.getPassword().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
return R.ok().put("token", token);
}
/**
* 注册
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null) {
return R.error("账号不存在");
}
user.setPassword("123456");
userService.update(user,null);
return R.ok("密码已重置为:123456");
}
/**
* 列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/list")
public R list( UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
ew.allEq(MPUtil.allEQMapPre( user, "user"));
return R.ok().put("data", userService.selectListView(ew));
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
UserEntity u = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername()));
if(u!=null && u.getId()!=user.getId() && u.getUsername().equals(user.getUsername())) {
return R.error("用户名已存在。");
}
userService.updateById(user);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
userService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
大家点赞、收藏、关注 ,让更多需要的同学看到
不同开发语言专栏推荐订阅:
?
?
?
?下方有我的微信名片?