博主介绍:全网个人号和企业号粉丝40W+,每年辅导几千名大学生较好的完成毕业设计,专注计算机软件领域的项目研发,不断的进行新技术的项目实战
⭐️热门专栏推荐订阅⭐️ 订阅收藏起来,防止下次找不到千套JAVA实战项目持续更新中~
上百套小程序实战项目持续更新中~
上百套Python实战项目持续更新中
有需求的各位可以先收藏起来,还有大家在毕设选题,开题报告有疑惑的都可以找我,给你参考意见,需要开题模板的可以私信留言告诉我❤️文末获取源码联系❤️ ⚠️一定要先收藏⚠️
整个平台采用B/S结构,用户可在浏览器中完成和整个平台的交互。
用户在校园便利平台的浏览器界面进行的操作,浏览器操作传到服务器端,服务器端调用后台数据库,反馈给浏览器端。
平台架构如图4-1所示:
图4-1 平台架构图
校园便利平台实现用户登录,查询信息,修改个人信息等。所有功能都通过与后台服务器的数据交互来完成的。
具体的软件功能结构图如图4-2所示:
图4-2 平台功能结构图
对于校园便利平台而言,数据库中最核心的数据就是校园便利信息,并且有许多其他关联数据都储存于数据库中。随着时间推移,将发布大量信息于本平台中,届时数据库中也将蕴藏海量数据。一个优秀的数据库设计方案能在保证平台能够高效处理大量数据的同时保证平台的安全性。因此,在校园便利平台设计方案中将数据库的设计摆在重要位置,将数据库设计视为平台设计的重要内容。
在校园便利平台的数据库设计中,平台E-R模型的设计可以展示数据库中各种实体信息和他们之间的关系,将校园便利平台的E-R模型研究好后,数据库中数据表的建立也会比较容易。
根据功能需求来对平台的e-r图来进行分解得到几种实体,以下为部分实体—关系模型。
Mysql将数据保存在不同的表中,极大地提高了数据调取灵活性。校园便利平台的具体表结构如以下表所示:
表4-1:评价信息
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
默认值 |
id |
bigint |
主键 |
主键 |
||
addtime |
timestamp |
创建时间 |
CURRENT_TIMESTAMP |
||
biaoti |
varchar |
200 |
标题 |
||
pingfen |
varchar |
200 |
评分 |
||
pingjia |
longtext |
4294967295 |
评价 |
||
zhanghao |
varchar |
200 |
账号 |
||
lingquzhanghao |
varchar |
200 |
领取账号 |
||
lingquren |
varchar |
200 |
领取人 |
||
lianxidianhua |
varchar |
200 |
联系电话 |
||
pingjiashijian |
datetime |
评价时间 |
|||
crossuserid |
bigint |
跨表用户id |
|||
crossrefid |
bigint |
跨表主键id |
表4-2:校园跑腿
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
默认值 |
id |
bigint |
主键 |
主键 |
||
addtime |
timestamp |
创建时间 |
CURRENT_TIMESTAMP |
||
biaoti |
varchar |
200 |
标题 |
||
tupian |
longtext |
4294967295 |
图片 |
||
quhuodidian |
varchar |
200 |
取货地点 |
||
shoujiandidian |
varchar |
200 |
收件地点 |
||
paotuifeiyong |
int |
跑腿费用 |
|||
dingdanzhuangkuang |
varchar |
200 |
订单状况 |
||
zhanghao |
varchar |
200 |
账号 |
||
shouji |
varchar |
200 |
手机 |
||
paotuirenwu |
longtext |
4294967295 |
跑腿任务 |
||
feiyongshuoming |
varchar |
200 |
费用说明 |
表4-3:跑腿领单
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
默认值 |
id |
bigint |
主键 |
主键 |
||
addtime |
timestamp |
创建时间 |
CURRENT_TIMESTAMP |
||
biaoti |
varchar |
200 |
标题 |
||
paotuifeiyong |
int |
费用 |
|||
dingdanzhuangtai |
varchar |
200 |
订单状态 |
||
shouji |
varchar |
200 |
手机 |
||
zhanghao |
varchar |
200 |
账号 |
||
lingquzhanghao |
varchar |
200 |
领取账号 |
||
lingquren |
varchar |
200 |
领取人 |
||
lianxidianhua |
varchar |
200 |
联系电话 |
||
lingqushijian |
datetime |
领取时间 |
|||
yusongdashijian |
datetime |
预送达时间 |
表4-4:订单
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
默认值 |
id |
bigint |
主键 |
主键 |
||
addtime |
timestamp |
创建时间 |
CURRENT_TIMESTAMP |
||
orderid |
varchar |
200 |
订单编号 |
||
tablename |
varchar |
200 |
商品表名 |
ershoushangpin |
|
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 |
物流 |
表4-5:通知公告
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
默认值 |
id |
bigint |
主键 |
主键 |
||
addtime |
timestamp |
创建时间 |
CURRENT_TIMESTAMP |
||
title |
varchar |
200 |
标题 |
||
introduction |
longtext |
4294967295 |
简介 |
||
picture |
longtext |
4294967295 |
图片 |
||
content |
longtext |
4294967295 |
内容 |
表4-6:二手商品
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
默认值 |
id |
bigint |
主键 |
主键 |
||
addtime |
timestamp |
创建时间 |
CURRENT_TIMESTAMP |
||
shangpinbianhao |
varchar |
200 |
商品编号 |
||
shangpinmingcheng |
varchar |
200 |
商品名称 |
||
shangpinleixing |
varchar |
200 |
商品类型 |
||
pinpai |
varchar |
200 |
品牌 |
||
guige |
varchar |
200 |
规格 |
||
yuanjia |
float |
原价 |
|||
tupian |
longtext |
4294967295 |
图片 |
||
shangpinjieshao |
longtext |
4294967295 |
商品介绍 |
||
onelimittimes |
int |
单限 |
|||
alllimittimes |
int |
库存 |
|||
thumbsupnum |
int |
赞 |
0 |
||
crazilynum |
int |
踩 |
0 |
||
clicktime |
datetime |
最近点击时间 |
|||
clicknum |
int |
点击次数 |
0 |
||
price |
float |
价格 |
表4-7:二手商品评论表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
默认值 |
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-8:完成订单
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
默认值 |
id |
bigint |
主键 |
主键 |
||
addtime |
timestamp |
创建时间 |
CURRENT_TIMESTAMP |
||
biaoti |
varchar |
200 |
标题 |
||
paotuifeiyong |
int |
跑腿费用 |
|||
zhanghao |
varchar |
200 |
账号 |
||
lingquzhanghao |
varchar |
200 |
领取账号 |
||
lingquren |
varchar |
200 |
领取人 |
||
lianxidianhua |
varchar |
200 |
联系电话 |
||
wanchengshijian |
datetime |
完成时间 |
|||
ispay |
varchar |
200 |
是否支付 |
未支付 |
表4-9:配置文件
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
默认值 |
id |
bigint |
主键 |
主键 |
||
name |
varchar |
100 |
配置参数名称 |
||
value |
varchar |
100 |
配置参数值 |
表4-10:用户表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
默认值 |
id |
bigint |
主键 |
主键 |
||
username |
varchar |
100 |
用户名 |
||
password |
varchar |
100 |
密码 |
||
role |
varchar |
100 |
角色 |
管理员 |
|
addtime |
timestamp |
新增时间 |
CURRENT_TIMESTAMP |
表4-11:购物车表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
默认值 |
id |
bigint |
主键 |
主键 |
||
addtime |
timestamp |
创建时间 |
CURRENT_TIMESTAMP |
||
tablename |
varchar |
200 |
商品表名 |
ershoushangpin |
|
userid |
bigint |
用户id |
|||
goodid |
bigint |
商品id |
|||
goodname |
varchar |
200 |
商品名称 |
||
picture |
longtext |
4294967295 |
图片 |
||
buynumber |
int |
购买数量 |
|||
price |
float |
单价 |
|||
discountprice |
float |
会员价 |
表4-12: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-13:地址
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
默认值 |
id |
bigint |
主键 |
主键 |
||
addtime |
timestamp |
创建时间 |
CURRENT_TIMESTAMP |
||
userid |
bigint |
用户id |
|||
address |
varchar |
200 |
地址 |
||
name |
varchar |
200 |
收货人 |
||
phone |
varchar |
200 |
电话 |
||
isdefault |
varchar |
200 |
是否默认地址[是/否] |
表4-14:收藏表
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
默认值 |
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-15:商品类型
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
默认值 |
id |
bigint |
主键 |
主键 |
||
addtime |
timestamp |
创建时间 |
CURRENT_TIMESTAMP |
||
shangpinleixing |
varchar |
200 |
商品类型 |
表4-16:用户
字段名称 |
类型 |
长度 |
字段说明 |
主键 |
默认值 |
id |
bigint |
主键 |
主键 |
||
addtime |
timestamp |
创建时间 |
CURRENT_TIMESTAMP |
||
zhanghao |
varchar |
200 |
账号 |
||
mima |
varchar |
200 |
密码 |
||
xingming |
varchar |
200 |
姓名 |
||
xingbie |
varchar |
200 |
性别 |
||
shouji |
varchar |
200 |
手机 |
||
touxiang |
longtext |
4294967295 |
头像 |
||
money |
float |
余额 |
0 |
当人们打开系统的网址后,首先看到的就是首页界面。在这里,人们能够看到校园便利平台的设计与实现的导航条,通过导航条导航进入各功能展示页面进行操作。系统首页界面如图5-1所示:
图5-1 系统首页界面
二手商品:在二手商品页面的输入栏中输入商品名称、品牌和价格进行查询,可以查看到二手商品详细信息;并进行添加到购物车、立即购买、评论或收藏操作;二手商品页面如图5-2所示:
图5-2二手商品详细页面
校园跑腿:在校园跑腿页面的输入栏中输入账号和选择订单状况进行查询,可以查看到校园跑腿详细信息;并进行领单、评论或收藏操作;校园跑腿页面如图5-3所示:
图5-3校园跑腿详细页面
购物车:在购物车页面可以查看到商品名称、图片、价格、数量、总价等详细信息,并进行点击购买或删除操作;购物车页面如图5-4所示:
图5-4购物车详细页面
个人中心:在个人中心页面可以对个人中心、我的订单、我的地址和我的收藏进行详细操作;
我的订单:在我的订单页面可以对未支付、已支付、已发货、已完成、已退款和已取消订单进行详细操作;如图5-5所示:
图5-5我的订单界面
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().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().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().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 params,UserEntity user){
EntityWrapper ew = new EntityWrapper();
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 ew = new EntityWrapper();
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().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().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();
}
}
大家点赞、收藏、关注 ,让更多需要的同学看到
不同开发语言专栏推荐订阅:
千套JAVA实战项目持续更新中~
上百套小程序实战项目持续更新中~
上百套Python实战项目持续更新中
下方有我的微信名片