基于javaweb+mysql的springboot网上书城管理系统(java+springboot+maven+vue+elementui+axios+mysql)
私信源码获取及调试交流
运行环境
Java≥8、MySQL≥5.7、Node.js≥10
开发工具
后端:eclipse/idea/myeclipse/sts等均可配置运行
前端:WebStorm/VSCode/HBuilderX等均可
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb的SpringBoot网上书城管理系统(java+springboot+maven+vue+elementui+axios+mysql)
项目介绍
基于SpringBoot+Vue的网上书城系统(前后端分离项目) 本项目分为前后台,前台为普通用户登录,后台为管理员登录; 角色:管理员、用户 功能:首页推荐(默认根据用户买过的商品进行推荐,如果没买过则根据商品销量推荐)、轮播图管理、商品、订单、购物车、商品评论、商品评论点赞、商品收藏、商品点赞、订单支付、公告、权限控制等。
环境需要
1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA; 3.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 4.数据库:MySql 5.7/8.0版本均可; 5.是否Maven项目:是; 6.是否为前后端分离项目:是
技术栈
后台:SpringBoot+Mybatis-plus+Mybatis+lombok插件
前台:Vue+Vue Router+ELementUI+Axios
使用说明
先启动后端再启动前端 后端: 1. 使用Navicat或者其它工具,在mysql中创建对应sql文件名称的数据库,并导入项目的sql文件; 2. 使用IDEA/Eclipse/MyEclipse导入后端项目end文件夹,导入成功后请执行maven clean;maven install命令,然后运行; 3. 将项目中application.yml配置文件中的数据库配置改为自己的配置; 4. 运行项目,后端运行成功后再运行前端项目;
前端: 1、确保安装好node及npm,命令行切换到front所在路径 2、执行npm run serve启动项目
后台地址:http://localhost:8001/login 用户: tom/123456 管理员: admin/admin
书城首页展示:
添加购物车展示:
订单页面列表展示:
收藏夹页面展示:
后台管理统计页面:
后台管理订单管理页面:
轮播图展示管理:
后台商品管理展示:
后台登录页面展示:
} catch (Exception e) {
System.err.println(fileName + "--文件上传失败");
}
}
return Result.success(fileVOS);
}
/**
* 获取文件
* @param flag
* @param response
*/
@GetMapping("/{flag}")
public void avatarPath(@PathVariable String flag, HttpServletResponse response) {
OutputStream os;
String basePath = System.getProperty("user.dir") + "/src/main/resources/static/file/";
List<String> fileNames = FileUtil.listFileNames(basePath);
String avatar = fileNames.stream().filter(name -> name.contains(flag)).findAny().orElse("");
try {
if (StrUtil.isNotEmpty(avatar)) {
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(avatar, "UTF-8"));
response.setContentType("application/octet-stream");
byte[] bytes = FileUtil.readBytes(basePath + avatar);
os = response.getOutputStream();
os.write(bytes);
os.flush();
os.close();
}
} catch (Exception e) {
System.out.println("文件下载失败");
}
}
}
/**
* 获取文件
* @param flag
* @param response
*/
@GetMapping("/{flag}")
public void avatarPath(@PathVariable String flag, HttpServletResponse response) {
OutputStream os;
String basePath = System.getProperty("user.dir") + "/src/main/resources/static/file/";
List<String> fileNames = FileUtil.listFileNames(basePath);
String avatar = fileNames.stream().filter(name -> name.contains(flag)).findAny().orElse("");
try {
if (StrUtil.isNotEmpty(avatar)) {
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(avatar, "UTF-8"));
response.setContentType("application/octet-stream");
byte[] bytes = FileUtil.readBytes(basePath + avatar);
os = response.getOutputStream();
os.write(bytes);
os.flush();
os.close();
}
} catch (Exception e) {
System.out.println("文件下载失败");
}
}
}
@RestController
return Result.success(addressService.getById(id));
}
@GetMapping
public Result<?> findAll() {
LambdaQueryWrapper<Address> query = Wrappers.<Address>lambdaQuery().orderByDesc(Address::getId);
query.eq(Address::getUserId, getUser().getId());
List<Address> list = addressService.list(query);
return Result.success(list);
}
@GetMapping("/page")
public Result<?> findPage(
@RequestParam(required = false, defaultValue = "1") Integer pageNum,
@RequestParam(required = false, defaultValue = "10") Integer pageSize) {
LambdaQueryWrapper<Address> query = Wrappers.<Address>lambdaQuery().orderByDesc(Address::getId);
// query.eq(Address::getUserId, getUser().getId());
IPage<Address> page = addressService.page(new Page<>(pageNum, pageSize), query);
return Result.success(page);
}
@GetMapping("/page/front")
public Result<?> Front(
@RequestParam(required = false, defaultValue = "1") Integer pageNum,
@RequestParam(required = false, defaultValue = "10") Integer pageSize) {
User user = getUser();
if(user == null) {
return Result.success(new Page<>());
}
LambdaQueryWrapper<Address> query = Wrappers.<Address>lambdaQuery().orderByDesc(Address::getId);
query.eq(Address::getUserId, getUser().getId());
IPage<Address> page = addressService.page(new Page<>(pageNum, pageSize), query);
return Result.success(page);
}
}
if (StrUtil.isNotEmpty(avatar)) {
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(avatar, "UTF-8"));
response.setContentType("application/octet-stream");
byte[] bytes = FileUtil.readBytes(basePath + avatar);
os = response.getOutputStream();
os.write(bytes);
os.flush();
os.close();
}
} catch (Exception e) {
System.out.println("文件下载失败");
}
}
}
@RestController
@RequestMapping("/api/goods")
public class GoodsController {
@Resource
private GoodsService goodsService;
@Resource
private HttpServletRequest request;
@Resource
private UserService userService;
public User getUser() {
String token = request.getHeader("token");
String username = JWT.decode(token).getAudience().get(0);
return userService.getOne(Wrappers.<User>lambdaQuery().eq(User::getUsername, username));
}
@PostMapping
logService.log(StrUtil.format("更新用户:{} ", user.getUsername()));
return Result.success(userService.updateById(user));
}
/**
* 更新账户余额
* @param money
* @return
*/
@PutMapping("/account/{money}")
public Result<?> recharge(@PathVariable BigDecimal money) {
User user = getUser();
user.setAccount(user.getAccount().add(money));
userService.updateById(user);
logService.log(StrUtil.format("更新用户账户:{} ", user.getUsername()));
return Result.success();
}
@DeleteMapping("/{id}")
public Result<?> delete(@PathVariable Long id) {
User user = userService.getById(id);
logService.log(StrUtil.format("删除用户 {} ", user.getUsername()));
userService.removeById(id);
return Result.success();
}
@GetMapping("/{id}")
public Result<User> findById(@PathVariable Long id) {
return Result.success(userService.findById(id));
}
@GetMapping
public Result<List<User>> findAll() {
return Result.success(userService.list());
}
@GetMapping("/page")
public Result<IPage<User>> findPage(@RequestParam(required = false, defaultValue = "") String name,
@RequestParam(required = false, defaultValue = "1") Integer pageNum,
@RequestParam(required = false, defaultValue = "10") Integer pageSize) {
LambdaQueryWrapper<User> wrapper = Wrappers.<User>lambdaQuery().ne(User::getUsername, "admin").like(User::getUsername, name).orderByDesc(User::getId);
return Result.success(userService.page(new Page<>(pageNum, pageSize), wrapper));
}
@GetMapping("/export")
public void export(HttpServletResponse response) throws IOException {
List<Map<String, Object>> list = CollUtil.newArrayList();
List<User> all = userService.list();
for (User user : all) {
String token = request.getHeader("token");
String username = JWT.decode(token).getAudience().get(0);
return userService.getOne(Wrappers.<User>lambdaQuery().eq(User::getUsername, username));
}
@PostMapping
public Result<?> save(@RequestBody Collect collect) {
List<Collect> list = collectService.list(Wrappers.<Collect>lambdaQuery().eq(Collect::getGoodsId, collect.getGoodsId())
.eq(Collect::getUserId, getUser().getId()));
if (CollUtil.isNotEmpty(list)) {
throw new CustomException("-1", "您已收藏该商品");
}
collect.setCreateTime(DateUtil.now());
collectService.save(collect);
return Result.success();
}
@PutMapping
public Result<?> update(@RequestBody Collect collect) {
collectService.updateById(collect);
return Result.success();
}
@DeleteMapping("/{id}")
public Result<?> delete(@PathVariable Long id) {
collectService.removeById(id);
return Result.success();
}
@GetMapping("/{id}")
public Result<?> findById(@PathVariable Long id) {
return Result.success(collectService.getById(id));
}
@GetMapping
public Result<?> findAll() {
List<Collect> list = collectService.list();
return Result.success(list);
}
@GetMapping("/page")
}
IPage<Order> page = orderService.page(new Page<>(pageNum, pageSize), query);
for (Order order : page.getRecords()) {
Long orderId = order.getId();
List<Cart> carts = orderGoodsService.findByOrderId(orderId);
order.setCarts(JSONUtil.toJsonStr(carts));
}
return Result.success(page);
}
}
Map<String, Object> row1 = new LinkedHashMap<>();
row1.put("名称", user.getUsername());
row1.put("手机", user.getPhone());
row1.put("邮箱", user.getEmail());
list.add(row1);
}
// 2. 写excel
ExcelWriter writer = ExcelUtil.getWriter(true);
writer.write(list, true);
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
String fileName = URLEncoder.encode("用户信息", "UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ".xlsx");
ServletOutputStream out = response.getOutputStream();
writer.flush(out, true);
writer.close();
IoUtil.close(System.out);
}
}
public User getUser() {
String token = request.getHeader("token");
String username = JWT.decode(token).getAudience().get(0);
return userService.getOne(Wrappers.<User>lambdaQuery().eq(User::getUsername, username));
}
@PostMapping
public Result<?> save(@RequestBody Goods goods) {
goods.setCreateTime(DateUtil.now());
goodsService.save(goods);
return Result.success();
}
@PutMapping
public Result<?> update(@RequestBody Goods goods) {
goodsService.updateById(goods);
return Result.success();
}
@DeleteMapping("/{id}")
public Result<?> delete(@PathVariable Long id) {
goodsService.removeById(id);
return Result.success();
}
@GetMapping("/{id}")
public Result<?> findById(@PathVariable Long id) {
Goods goods = goodsService.getById(id);
goods.setRealPrice(goods.getPrice().multiply(BigDecimal.valueOf(goods.getDiscount())));
return Result.success(goods);
}
@GetMapping
public Result<?> findAll() {
List<Goods> list = goodsService.findAll();
return Result.success(list);
}
/**
* 推荐商品
* @return
*/
@GetMapping("/recommend")
public Result<?> recommend() {
List<Goods> list = goodsService.recommend();
return Result.success(list);
}
/**
* 推热销商品
* @return
*/
@GetMapping("/sales")
System.out.println("文件下载失败");
}
}
}
@RestController
@RequestMapping("/api/goods")
public class GoodsController {
@Resource
private GoodsService goodsService;
@Resource
private HttpServletRequest request;
@Resource
private UserService userService;
public User getUser() {
String token = request.getHeader("token");
String username = JWT.decode(token).getAudience().get(0);
return userService.getOne(Wrappers.<User>lambdaQuery().eq(User::getUsername, username));
}
@PostMapping
public Result<?> save(@RequestBody Goods goods) {
goods.setCreateTime(DateUtil.now());
goodsService.save(goods);
return Result.success();
}
@PutMapping
public Result<?> update(@RequestBody Goods goods) {
goodsService.updateById(goods);
*/
@GetMapping("/byCategory/{id}")
public Result<?> findByCategory(@PathVariable Long id,
@RequestParam(required = false, defaultValue = "1") Integer pageNum,
@RequestParam(required = false, defaultValue = "10") Integer pageSize) {
IPage<Goods> page = goodsService.pageByCategory(new Page<>(pageNum, pageSize), id);
return Result.success(page);
}
@GetMapping("/page")
public Result<?> findPage(@RequestParam(required = false, defaultValue = "") String name,
@RequestParam(required = false, defaultValue = "1") Integer pageNum,
@RequestParam(required = false, defaultValue = "10") Integer pageSize) {
IPage<Goods> page = goodsService.findPage(new Page<>(pageNum, pageSize), name);
return Result.success(page);
}
}
@RestController
@RequestMapping("/api/cart")
public class CartController {
@Resource
private CartService cartService;
@Resource
private HttpServletRequest request;
@Resource
private UserService userService;
public User getUser() {
String token = request.getHeader("token");
String username = JWT.decode(token).getAudience().get(0);
return userService.getOne(Wrappers.<User>lambdaQuery().eq(User::getUsername, username));
}
query.like(Order::getOrderNo, name);
}
IPage<Order> page = orderService.page(new Page<>(pageNum, pageSize), query);
return Result.success(page);
}
/**
* 前台查询订单列表
* @param state
* @param pageNum
* @param pageSize
* @return
*/
@GetMapping("/page/front")
public Result<?> findPageFront(@RequestParam(required = false, defaultValue = "") String state,
@RequestParam(required = false, defaultValue = "1") Integer pageNum,
@RequestParam(required = false, defaultValue = "10") Integer pageSize) {
LambdaQueryWrapper<Order> query = Wrappers.<Order>lambdaQuery().orderByDesc(Order::getId);
query.eq(Order::getUserId, getUser().getId());
// 根据状态查询
if (StrUtil.isNotBlank(state)) {
query.eq(Order::getState, state);
}
IPage<Order> page = orderService.page(new Page<>(pageNum, pageSize), query);
for (Order order : page.getRecords()) {
Long orderId = order.getId();
List<Cart> carts = orderGoodsService.findByOrderId(orderId);
order.setCarts(JSONUtil.toJsonStr(carts));
}
return Result.success(page);
}
}
}
@RestController
@RequestMapping("/api/permission")
public class PermissionController {
@Resource
private PermissionService permissionService;
@Resource
private LogService logService;
@PostMapping
public Result<?> save(@RequestBody Permission permission) {
logService.log(StrUtil.format("新增权限菜单:{}", permission.getName()));
return Result.success(permissionService.save(permission));
}
@PutMapping
public Result<?> update(@RequestBody Permission permission) {
logService.log(StrUtil.format("更新权限菜单:{}", permission.getName()));
return Result.success(permissionService.updateById(permission));
}
@DeleteMapping("/{id}")
public Result<?> delete(@PathVariable Long id) {
@Resource
private LogMapper logMapper;
@Resource
private HttpServletRequest request;
@Resource
private UserService userService;
public User getUser() {
try {
String token = request.getHeader("token");
String username = JWT.decode(token).getAudience().get(0);
return userService.getOne(Wrappers.<User>lambdaQuery().eq(User::getUsername, username));
} catch (Exception e) {
return null;
}
}
/**
* 日志记录
*
* @param content
*/
public void log(String content) {
Log log = new Log();
log.setUser(getUser().getUsername());
log.setTime(DateUtil.formatDateTime(new Date()));
log.setIp(getIpAddress());
log.setContent(content);
save(log);
}
/**
* 日志记录
*
* @param username
* @param content
*/
public void log(String username, String content) {
Log log = new Log();
log.setUser(username);
log.setTime(DateUtil.formatDateTime(new Date()));
save(log);
}
/**
* 日志记录
*
* @param username
* @param content
*/
public void log(String username, String content) {
Log log = new Log();
log.setUser(username);
log.setTime(DateUtil.formatDateTime(new Date()));
log.setIp(getIpAddress());
log.setContent(content);
save(log);
}
/**
* 描述:获取IP地址
*/
public String getIpAddress() {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
}
/**
* 获取订单的确认信息
*
* @return
*/
@PostMapping("/pre")
public Result<?> pre(@RequestBody PreOrderQo preOrderQo) throws JSONException {
String cartsStr = preOrderQo.getCarts();
// 讲前台传来的json字符串转换成 list对象
List<Cart> carts = JSONUtil.toBean(cartsStr, new TypeReference<List<Cart>>() {
}, true);
Map<String, Object> all = cartService.findAll(carts);
return Result.success(all);
}
@GetMapping("/{id}")
public Result<?> findById(@PathVariable Long id) {
return Result.success(orderService.getById(id));
}
@GetMapping
public Result<?> findAll() {
List<Order> list = orderService.list();
return Result.success(list);
}
@GetMapping("/page")
public Result<?> findPage(@RequestParam(required = false, defaultValue = "") String name,
@RequestParam(required = false, defaultValue = "1") Integer pageNum,
@RequestParam(required = false, defaultValue = "10") Integer pageSize) {
LambdaQueryWrapper<Order> query = Wrappers.<Order>lambdaQuery().orderByDesc(Order::getId);
if (StrUtil.isNotBlank(name)) {
query.like(Order::getOrderNo, name);
}
IPage<Order> page = orderService.page(new Page<>(pageNum, pageSize), query);
return Result.success(page);
}
/**
* 前台查询订单列表
return Result.success();
}
@PutMapping
public Result<?> update(@RequestBody OrderGoods orderGoods) {
orderGoodsService.updateById(orderGoods);
return Result.success();
}
@DeleteMapping("/{id}")
public Result<?> delete(@PathVariable Long id) {
orderGoodsService.removeById(id);
return Result.success();
}
@GetMapping("/{id}")
public Result<?> findById(@PathVariable Long id) {
return Result.success(orderGoodsService.getById(id));
}
@GetMapping
public Result<?> findAll() {
List<OrderGoods> list = orderGoodsService.list();
return Result.success(list);
}
@GetMapping("/page")
public Result<?> findPage(@RequestParam(required = false, defaultValue = "") String name,
@RequestParam(required = false, defaultValue = "1") Integer pageNum,
@RequestParam(required = false, defaultValue = "10") Integer pageSize) {
LambdaQueryWrapper<OrderGoods> query = Wrappers.<OrderGoods>lambdaQuery().orderByDesc(OrderGoods::getId);
IPage<OrderGoods> page = orderGoodsService.page(new Page<>(pageNum, pageSize), query);
return Result.success(page);
}
}
String username = JWT.decode(token).getAudience().get(0);
return userService.getOne(Wrappers.<User>lambdaQuery().eq(User::getUsername, username));
}
@PostMapping
public Result<?> save(@RequestBody Log log) {
return Result.success(logService.save(log));
}
@PutMapping
public Result<?> update(@RequestBody Log log) {
return Result.success(logService.updateById(log));
}
@DeleteMapping("/{id}")
public Result<?> delete(@PathVariable Long id) {
logService.removeById(id);
return Result.success();
}
@GetMapping("/{id}")
public Result<?> findById(@PathVariable Long id) {
return Result.success(logService.getById(id));
}
@GetMapping
public Result<?> findAll() {
return Result.success(logService.list());
}
@GetMapping("/page")
public Result<?> findPage(@RequestParam(required = false, defaultValue = "") String name,
@RequestParam(required = false, defaultValue = "1") Integer pageNum,
@RequestParam(required = false, defaultValue = "10") Integer pageSize) {
LambdaQueryWrapper<Log> query = Wrappers.<Log>lambdaQuery().orderByDesc(Log::getId);
if (StrUtil.isNotBlank(name)) {
query.like(Log::getContent, name);
}
return Result.success(logService.page(new Page<>(pageNum, pageSize), query));
}
}