博主主页: 一季春秋
博主简介: 专注Java技术领域和毕业设计项目实战、Java、微信小程序、安卓等技术开发,远程调试部署、代码讲解、文档指导、ppt制作等技术指导。
**主要内容:**毕业设计(Java项目、小程序等)、简历模板、学习资料、面试题库、技术咨询。🍅文末获取联系🍅
精彩专栏推荐订阅👇🏻👇🏻 不然下次找不到哟
SpringBoot+Vue项目持续更新中
目录
[3.1 平台架构设计](#3.1 平台架构设计)
[3.2 平台整体设计](#3.2 平台整体设计)
[4.1 系统前台实现](#4.1 系统前台实现)
[4.1.1 系统首页功能](#4.1.1 系统首页功能)
[4.1.2 二手商品功能](#4.1.2 二手商品功能)
[4.1.3 校园跑腿功能](#4.1.3 校园跑腿功能)
[4.1.4 购物车功能](#4.1.4 购物车功能)
[4.1.5 我的订单功能](#4.1.5 我的订单功能)
[4.2 用户后台管理功能](#4.2 用户后台管理功能)
[4.2.1 后台管理功能](#4.2.1 后台管理功能)
[4.2.2 跑腿领单管理](#4.2.2 跑腿领单管理)
[4.3 管理员功能实现](#4.3 管理员功能实现)
[4.3.1 管理员主页面](#4.3.1 管理员主页面)
[4.3.2 用户管理](#4.3.2 用户管理)
[4.3.3 二手商品管理](#4.3.3 二手商品管理)
[4.3.4 校园跑腿管理](#4.3.4 校园跑腿管理)
[4.3.5 完成订单管理](#4.3.5 完成订单管理)
[5.1 二手商品关键代码](#5.1 二手商品关键代码)
一、项目介绍
校园便利平台的开发就是为了解决二手商品管理的问题,平台开发是基于Java语言编写实现,用Mysql数据库搭建存储校园便利平台的数据。实现后的校园便利平台基于用户需求分析搭建的,并且会有二手商品、校园跑腿、通知公告、后台管理、购物车、个人中心等基本功能。不仅能满足人们对于校园便利的需求,同时具有广阔的发展前景。
二、项目主要技术
开发语言:Java
使用框架:spring boot
前端技术:JavaScript、Vue 、css3
开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code
数据库:MySQL 5.7/8.0
数据库管理工具:phpstudy/Navicat
JDK版本:jdk1.8
Maven: apache-maven 3.8.1-bin
三、平台设计
3.1 平台架构设计
整个平台采用B/S结构,用户可在浏览器中完成和整个平台的交互。
用户在校园便利平台的浏览器界面进行的操作,浏览器操作传到服务器端,服务器端调用后台数据库,反馈给浏览器端。
平台架构如图所示:

3.2 平台整体设计
校园便利平台实现用户登录,查询信息,修改个人信息等。所有功能都通过与后台服务器的数据交互来完成的。
具体的软件功能结构图如图所示:

四、系统实现
4.1 系统前台实现
4.1.1 系统首页功能
打开系统的网址后,首先看到的就是首页界面。在这里能够看到校园便利平台的设计与实现的导航条,通过导航条导航进入各功能展示页面进行操作。系统首页界面如图所示:

4.1.2 二手商品功能
在二手商品页面的输入栏中输入商品名称、品牌和价格进行查询,可以查看到二手商品详细信息;并进行添加到购物车、立即购买、评论或收藏操作;二手商品页面如图所示:

商品详细信息

4.1.3 校园跑腿功能
在校园跑腿页面的输入栏中输入账号和选择订单状况进行查询,可以查看到校园跑腿详细信息;并进行领单、评论或收藏操作;校园跑腿页面如图所示:

4.1.4 购物车功能
在购物车页面可以查看到商品名称、图片、价格、数量、总价等详细信息,并进行点击购买或删除操作;购物车页面如图所示:

4.1.5 我的订单功能
在我的订单页面可以对未支付、已支付、已发货、已完成、已退款和已取消订单进行详细操作;如图所示:

4.2 用户后台管理功能
4.2.1 后台管理功能
用户注册登录进入系统首页,点击后台管理可以对个人中心、校园跑腿管理、跑腿领单管理、完成订单管理、评价信息管理等进行操作。管理员主页面如图所示:

4.2.2 跑腿领单管理
在跑腿领单页面输入账号、领取账号和选择订单状态进行查询跑腿领单列表,并根据需要对跑腿领单详细信息进行详情或完成登记操作;如图所示

4.3 管理员功能实现
管理员登录,在登录页面正确输入用户名和密码后,点击登录进入操作系统进行操作;如图所示。

4.3.1 管理员主页面
主要功能包括对个人中心、用户管理、商品类型管理、二手商品管理、校园跑腿管理、跑腿领单管理、完成订单管理、评价信息管理、系统管理、订单管理等进行操作。管理员主页面如图5-9所示:

4.3.2 用户管理
在用户页面输入姓名和选择性别进行查询、新增或删除用户列表,并根据需要对用户详细信息进行详情、修改或删除操作;如图所示:

4.3.3 二手商品管理
在二手商品页面输入商品名称、品牌和价格进行查询、新增或删除二手商品列表,并根据需要对二手商品详细信息进行详情、修改、查看评论或删除操作;如图所示:

4.3.4 校园跑腿管理
在校园跑腿页面输入账号和选择订单状况进行查询、新增或删除校园跑腿列表,并根据需要对校园跑腿详细信息进行详情、领单、修改或删除操作;如图所示:

4.3.5 完成订单管理
在完成订单页面输入标题、账号和领取账号进行查询或删除完成订单列表,并根据需要对完成订单详细信息进行详情、评价、修改或删除操作;如图所示:

五、实现代码
5.1 二手商品关键代码
java
/**
* 二手商品
* 后端接口
* @author
* @email
* @date 2023-05-22 09:32:15
*/
@RestController
@RequestMapping("/ershoushangpin")
public class ErshoushangpinController {
@Autowired
private ErshoushangpinService ershoushangpinService;
@Autowired
private StoreupService storeupService;
/**
* 后端列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,ErshoushangpinEntity ershoushangpin,
@RequestParam(required = false) Double pricestart,
@RequestParam(required = false) Double priceend,
HttpServletRequest request){
EntityWrapper<ErshoushangpinEntity> ew = new EntityWrapper<ErshoushangpinEntity>();
if(pricestart!=null) ew.ge("price", pricestart);
if(priceend!=null) ew.le("price", priceend);
PageUtils page = ershoushangpinService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, ershoushangpin), params), params));
return R.ok().put("data", page);
}
/**
* 前端列表
*/
@IgnoreAuth
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params,ErshoushangpinEntity ershoushangpin,
@RequestParam(required = false) Double pricestart,
@RequestParam(required = false) Double priceend,
HttpServletRequest request){
EntityWrapper<ErshoushangpinEntity> ew = new EntityWrapper<ErshoushangpinEntity>();
if(pricestart!=null) ew.ge("price", pricestart);
if(priceend!=null) ew.le("price", priceend);
PageUtils page = ershoushangpinService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, ershoushangpin), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/lists")
public R list( ErshoushangpinEntity ershoushangpin){
EntityWrapper<ErshoushangpinEntity> ew = new EntityWrapper<ErshoushangpinEntity>();
ew.allEq(MPUtil.allEQMapPre( ershoushangpin, "ershoushangpin"));
return R.ok().put("data", ershoushangpinService.selectListView(ew));
}
/**
* 查询
*/
@RequestMapping("/query")
public R query(ErshoushangpinEntity ershoushangpin){
EntityWrapper< ErshoushangpinEntity> ew = new EntityWrapper< ErshoushangpinEntity>();
ew.allEq(MPUtil.allEQMapPre( ershoushangpin, "ershoushangpin"));
ErshoushangpinView ershoushangpinView = ershoushangpinService.selectView(ew);
return R.ok("查询二手商品成功").put("data", ershoushangpinView);
}
/**
* 后端详情
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") Long id){
ErshoushangpinEntity ershoushangpin = ershoushangpinService.selectById(id);
ershoushangpin.setClicknum(ershoushangpin.getClicknum()+1);
ershoushangpin.setClicktime(new Date());
ershoushangpinService.updateById(ershoushangpin);
return R.ok().put("data", ershoushangpin);
}
/**
* 前端详情
*/
@IgnoreAuth
@RequestMapping("/detail/{id}")
public R detail(@PathVariable("id") Long id){
ErshoushangpinEntity ershoushangpin = ershoushangpinService.selectById(id);
ershoushangpin.setClicknum(ershoushangpin.getClicknum()+1);
ershoushangpin.setClicktime(new Date());
ershoushangpinService.updateById(ershoushangpin);
return R.ok().put("data", ershoushangpin);
}
/**
* 赞或踩
*/
@RequestMapping("/thumbsup/{id}")
public R vote(@PathVariable("id") String id,String type){
ErshoushangpinEntity ershoushangpin = ershoushangpinService.selectById(id);
if(type.equals("1")) {
ershoushangpin.setThumbsupnum(ershoushangpin.getThumbsupnum()+1);
} else {
ershoushangpin.setCrazilynum(ershoushangpin.getCrazilynum()+1);
}
ershoushangpinService.updateById(ershoushangpin);
return R.ok("投票成功");
}
/**
* 后端保存
*/
@RequestMapping("/save")
public R save(@RequestBody ErshoushangpinEntity ershoushangpin, HttpServletRequest request){
ershoushangpin.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(ershoushangpin);
ershoushangpinService.insert(ershoushangpin);
return R.ok();
}
/**
* 前端保存
*/
@RequestMapping("/add")
public R add(@RequestBody ErshoushangpinEntity ershoushangpin, HttpServletRequest request){
ershoushangpin.setId(new Date().getTime()+new Double(Math.floor(Math.random()*1000)).longValue());
//ValidatorUtils.validateEntity(ershoushangpin);
ershoushangpinService.insert(ershoushangpin);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
@Transactional
public R update(@RequestBody ErshoushangpinEntity ershoushangpin, HttpServletRequest request){
//ValidatorUtils.validateEntity(ershoushangpin);
ershoushangpinService.updateById(ershoushangpin);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
ershoushangpinService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
/**
* 前端智能排序
*/
@IgnoreAuth
@RequestMapping("/autoSort")
public R autoSort(@RequestParam Map<String, Object> params,ErshoushangpinEntity ershoushangpin, HttpServletRequest request,String pre){
EntityWrapper<ErshoushangpinEntity> ew = new EntityWrapper<ErshoushangpinEntity>();
Map<String, Object> newMap = new HashMap<String, Object>();
Map<String, Object> param = new HashMap<String, Object>();
Iterator<Map.Entry<String, Object>> it = param.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, Object> entry = it.next();
String key = entry.getKey();
String newKey = entry.getKey();
if (pre.endsWith(".")) {
newMap.put(pre + newKey, entry.getValue());
} else if (StringUtils.isEmpty(pre)) {
newMap.put(newKey, entry.getValue());
} else {
newMap.put(pre + "." + newKey, entry.getValue());
}
}
params.put("sort", "clicknum");
params.put("order", "desc");
PageUtils page = ershoushangpinService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, ershoushangpin), params), params));
return R.ok().put("data", page);
}
}