作者主页:夜未央5788
简介:Java领域优质创作者、Java项目、学习资料、技术互助
文末获取源码
项目介绍
主要功能包括:
分别是前台用户模块、管理员以及店铺的模块
前台用户模块的功能描述:
(1)个人信息模块:用户可以查看个人信息,修改个人信息,修改个人密码。
(2)收藏管理:添加商品到收藏夹,如果商品已经存在收藏夹中,可以取消商品收藏。
(3)购物车管理:添加商品到购物车中,如果购物车有该商品,则商品数量加1,购物车中可以改变商品数量,可以将商品移出购物车,可以选定哪些商品进行结算或者全选结算,结算之后该商品将会移出购物车。
(4)收货信息管理:用户可以添加自己的收货信息,修改收货信息和删除收货信息,可以增加多条收货信息,并选择一条设置为默认的,在购买时将选取默认的收货地址。
(5)订单管理:用户支付成功之后,将在我的订单页面中看到订单的详情,若卖家发货了,则可以确认收货然后进行商品评价。若订单未进行支付,则可以点待支付可以进行重新支付。
(6)支付功能:用户选择商品和商品数量,进行订单详情页,进行支付,使用支付宝沙箱模拟支付。
(7)商品模块:用户可以浏览商品信息,根据商品的关键字搜索商品信息,用户购买商品,确认收货之后可以对商品进行评价,填写对商品的评价内容和选择星级。
店铺模块的功能描述:
(1)商品管理:卖家可以上架商品,下架商品,对商品信息进行修改,对商品的关键信息进行模糊查询。
(2)订单管理:卖家可以查看所有订单,根据订单的状态搜索订单信息,对已支付的订单进行发货操作。
(3)评论管理:卖家可以查看所有用户的评论信息,。可以按照商品的名称查询改商品的评论内容。
管理员模块的功能描述:
(1)用户管理:可以对用户信息进行增删改查操作。
(2)店铺管理:可以处理店铺的申请信息,可以停用店铺的运营,商城将移出该店铺的所有信息,也可以恢复店铺的运营。
(3)轮播图管理:对轮播图信息增删改查的操作和选用轮播图。
使用人群:
正在做毕设的学生,或者需要项目实战练习的Java学习者
由于本程序规模不大,可供课程设计,毕业设计学习演示之用
环境需要
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项目:是;
技术栈
后端:springboot(Spring+SpringMVC+Mybatis)
前端:HTML,jquery,Thymeleaf,Layui
使用说明
项目运行:
1. 使用Navicat或者其它工具,在mysql中创建对应sql文件名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中application.yml配置文件中的数据库配置改为自己的配置;
4. 运行项目,控制台提示运行成功后再去运行前端项目;
5. 管理员用户名密码:admin/admin
普通用户名密码:user/123456
运行截图
论文
前台界面
后管界面
相关代码
GoodController
package com.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.common.utils.DateUtils;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.pojo.Comment;
import com.pojo.Good;
import com.pojo.User;
import com.pojo.result.Result;
import com.pojo.result.ResultPage;
import com.service.CommentService;
import com.service.GoodService;
import com.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import java.util.List;
/**
* <p>
* 积分物品表 前端控制器
* </p>
*
* @author chen
* @since 2022-01-30
*/
@RestController
@RequestMapping("/good")
public class GoodController {
@Autowired
private GoodService goodService;
@Autowired
private UserService userService;
@Autowired
private CommentService commentService;
//添加商品
@PostMapping("/add")
public Result add(Good good) {
//验证表单信息
if (goodService.getOne(new LambdaQueryWrapper<Good>().eq(Good::getName, good.getName())) != null) {
return Result.failure("已有相同名称的商品,请重新命名");
} else {
return Result.decide(goodService.save(good));
}
}
//删除商品
@PostMapping("/delete")
public Result delete(@RequestParam(value = "id") String id) {
return Result.decide(goodService.removeById(id));
}
//修改商品
@PostMapping("/update")
public Result update(Good good) {
Good currentGood = goodService.getById(good.getId());
//验证表单信息
if (goodService.getOne(new LambdaQueryWrapper<Good>().eq(Good::getName, good.getName())) != null
&& !good.getName().equals(currentGood.getName())) {
return Result.failure("已有相同名称的商品,请重新命名");
} else {
return Result.decide(goodService.updateById(good));
}
}
//根据id获取商品
@PostMapping("/getOne")
public Result getOne(@RequestParam(value = "id") String id) {
return Result.success(goodService.getById(id));
}
//条件分页获取分类
@RequestMapping("/getAll")
public ResultPage getAll(@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "categoryId", required = false) String categoryId,
@RequestParam(value = "page") Integer page,
@RequestParam(value = "limit") Integer limit) {
//分页条件
PageHelper.startPage(page, limit);
List<Good> bookList = goodService.getAll(name, categoryId);
PageInfo<Good> goodPageInfo = new PageInfo<>(bookList, limit);
return new ResultPage(0, (int) goodPageInfo.getTotal(), goodPageInfo.getList());
}
//前台获取全部商品
@RequestMapping("/getAllGood")
public ModelAndView getAllGood(String goodName, String categoryId) {
ModelAndView mv = new ModelAndView();
LambdaQueryWrapper<Good> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Good::getStatus, 1);
if (!StringUtils.isEmpty(goodName)) {
queryWrapper.like(Good::getName, goodName);
}
if (!StringUtils.isEmpty(categoryId)) {
queryWrapper.like(Good::getCategoryId, categoryId);
}
mv.addObject("goodList", goodService.list(queryWrapper));
mv.setViewName("index/goodList.html");
return mv;
}
//前台获取商品详情信息
@RequestMapping("/getGoodDetail")
public ModelAndView getGoodDetail(String goodId) {
ModelAndView mv = new ModelAndView();
//商品信息
mv.addObject("good", goodService.getById(goodId));
//评论信息
LambdaQueryWrapper<Comment> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Comment::getGoodId, goodId);
List<Comment> ls = commentService.list(queryWrapper);
for (Comment comment : ls) {
User user = userService.getById(comment.getUserId());
comment.setUserAvatar(user.getAvatar());
comment.setUserName(user.getName());
comment.setFmtDateTime(DateUtils.dateFmt(comment.getCreateTime()));
}
mv.addObject("commentList", ls);
mv.setViewName("index/goodDetail.html");
return mv;
}
}
OrderController
package com.controller;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.common.utils.DateUtils;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.pojo.*;
import com.pojo.result.Result;
import com.pojo.result.ResultPage;
import com.service.*;
import com.sun.org.apache.xpath.internal.operations.Or;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpSession;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author chen
* @since 2022-01-30
*/
@RestController
@RequestMapping("/order")
public class OrderController {
@Autowired
private GoodService goodService;
@Autowired
private AddressService addressService;
@Autowired
private CartService cartService;
@Autowired
private OrderService orderService;
@Autowired
private GoodCategoryService categoryService;
//确认购买页面
@RequestMapping(value = "/buy")
public ModelAndView buy(String cartIds, String totalPrice, HttpSession session) {
session.setAttribute("cartIds", cartIds); //保留当前购物车id
User currentUser = (User) SecurityUtils.getSubject().getPrincipal();
String[] ids = cartIds.split(",");
List<String> goodIds = new ArrayList<>(); //商品id集合
List<Integer> nums = new ArrayList<>(); //商品数量id集合
//购物车车id查出商品id
List<Cart> cartList = cartService.listByIds(Arrays.asList(ids));
for (Cart cart : cartList) {
goodIds.add(cart.getGoodId());
nums.add(cart.getNum());
}
//商品
List<Good> goodList = goodService.listByIds(goodIds);
for (int i = 0; i < goodList.size(); i++) {
Good good = goodList.get(i);
good.setGoodBuyNum(nums.get(i)); //商品购买数量
BigDecimal a = new BigDecimal(Double.valueOf(good.getPrice()) * good.getGoodBuyNum());
good.setGoodTotalPrice(a.toString()); //商品数量*价格
}
//用户地址
List<Address> addressList = addressService.list(new LambdaQueryWrapper<Address>().eq(Address::getUserId, currentUser.getId()));
LambdaQueryWrapper<Address> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper
.eq(Address::getUserId, currentUser.getId())
.eq(Address::getDefaulted, 1);
Address address = addressService.getOne(queryWrapper);
ModelAndView mv = new ModelAndView();
mv.addObject("goodList", goodList); //结算商品列表
mv.addObject("totalPrice", totalPrice); //总价格
mv.addObject("addressList", addressList); //地址列表
mv.addObject("defAddress", address == null ? (addressList.size() == 0 ? null : addressList.get(0)) : address); //默认地址
mv.setViewName("index/buy.html");
return mv;
}
//下单接口
@RequestMapping(value = "/createOrder")
public Result createOrder(HttpSession session) {
return orderService.createOrder(
(String) session.getAttribute("cartIds"),
(User) SecurityUtils.getSubject().getPrincipal());
}
@RequestMapping("/getAll")
public ModelAndView userGetAll() {
User currentUser = (User) SecurityUtils.getSubject().getPrincipal();
//通过用户id查订单
LambdaQueryWrapper<Order> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper
.eq(Order::getUserId, currentUser.getId());
List<Order> orderList = orderService.list(queryWrapper);
for (Order order : orderList) {
Good good = goodService.getById(order.getGoodId()); //订单商品信息
GoodCategory category = categoryService.getById(good.getCategoryId()); //商品分类信息
order.setGoodCategory(category == null ? "其他品牌" : category.getName());
order.setGoodName(good.getName());
order.setGoodSku(good.getSku());
order.setGoodImage(good.getImage());
order.setFmtDateTime(DateUtils.dateFmt(order.getCreateTime()));
}
ModelAndView mv = new ModelAndView();
mv.addObject("orderList", orderList);
mv.setViewName("index/orderList.html");
return mv;
}
//删除订单
@PostMapping("/delete")
public Result delete(@RequestParam(value = "id") String id) {
Order order = orderService.getById(id);
if (order.getStatus() != 4) {
return Result.failure("订单未完成,暂不能删除");
}
return Result.decide(orderService.removeById(id));
}
//管理员获取全部订单信息
@RequestMapping("/adminGetAll")
public ResultPage adminGetAll(@RequestParam(value = "userName", required = false) String userName,
@RequestParam(value = "goodName", required = false) String goodName,
@RequestParam(value = "status", required = false) Integer status,
@RequestParam(value = "page") Integer page,
@RequestParam(value = "limit") Integer limit) {
//分页条件
PageHelper.startPage(page, limit);
List<Order> orderList = orderService.adminGetAll(userName, goodName, status);
PageInfo<Order> orderPageInfo = new PageInfo<>(orderList, limit);
return new ResultPage(0, (int) orderPageInfo.getTotal(), orderPageInfo.getList());
}
//修改订单状态
@PostMapping("/updateStatus")
public Result updateStatus(@RequestParam(value = "orderId") String orderId,
@RequestParam(value = "status") Integer status) {
LambdaUpdateWrapper<Order> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper
.eq(Order::getId, orderId)
.set(Order::getStatus, status);
return Result.decide(orderService.update(updateWrapper));
}
}
如果也想学习本系统,下面领取。关注并回复:152springboot