Java项目:152SpringBoot的电脑商城系统

 作者主页:夜未央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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜未央5788

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值