SpringBoot+Vue服装商城系统 附带详细运行指导视频

发布于:2025-06-23 ⋅ 阅读:(14) ⋅ 点赞:(0)

一、项目演示

项目演示地址: 视频地址

二、项目介绍

项目描述:这是一个基于SpringBoot+Vue框架开发的服装商城系统。首先,这是一个前后端分离的项目,代码简洁规范,注释说明详细,易于理解和学习。其次,这项目功能丰富,具有一个服装商城系统该有的所有功能。

项目功能:此项目分为两个角色:普通用户管理员普通用户有登录注册、浏览商品信息、管理个人购物车信息、提交订单、评价订单、管理个人地址信息、管理个人订单信息、管理个人评价信息等等功能。管理员有登录、查看数据统计信息、管理所有用户信息、管理所有商品信息、管理所有商品分类信息、管理所有订单信息、管理所有评价信息等等功能。

应用技术:SpringBoot + Vue3.0 + MySQL + MyBatis + Redis + ElementUI-Plus + Vite

运行环境:IntelliJ IDEA2019.3.5 + MySQL5.7 + Redis5.0.5 + JDK1.8 + Maven3.6.3 + Node14.16.1 + Visual Studio Code(以上工具在项目压缩包中都自带)

三、运行截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、主要代码

1.提交订单代码

 /**
  * 提交订单操作
  * @param orderDTO
  * @return
  */
 @Override
 public ResponseDTO<Boolean> submitOrder(OrderDTO orderDTO) {
     if(CommonUtil.isEmpty(orderDTO.getUserId())) {
         return ResponseDTO.errorByMsg(CodeMsg.DATA_ERROR);
     }
     // 进行统一表单验证
     CodeMsg validate = ValidateEntityUtil.validate(orderDTO);
     if (!validate.getCode().equals(CodeMsg.SUCCESS.getCode())) {
         return ResponseDTO.errorByMsg(validate);
     }
     User user = userMapper.selectByPrimaryKey(orderDTO.getUserId());
     if(user == null) {
         return ResponseDTO.errorByMsg(CodeMsg.USER_NOT_EXIST);
     }
     // 查出购物车数据
     CartExample cartExample = new CartExample();
     cartExample.createCriteria().andUserIdEqualTo(orderDTO.getUserId()).andIdIn(orderDTO.getCartIdList());
     List<Cart> cartList = cartMapper.selectByExample(cartExample);
     for(Cart cart : cartList) {
         Product product = productMapper.selectByPrimaryKey(cart.getProductId());
         if(product == null) {
             CodeMsg codeMsg = CodeMsg.PRODUCT_NOT_EXIST;
             codeMsg.setMsg("有商品信息已经不存在,请刷新页面!");
             return ResponseDTO.errorByMsg(codeMsg);
         }
         Stock stock = stockMapper.selectByPrimaryKey(cart.getStockId());
         if(stock == null) {
             CodeMsg codeMsg = CodeMsg.STOCK_NOT_EXIST;
             codeMsg.setMsg("商品[" + product.getName() + "]的规格已经不存在,请删除商品重新选择!");
             return ResponseDTO.errorByMsg(codeMsg);
         }
         if(cart.getQuantity() > stock.getNum()) {
             CodeMsg codeMsg = CodeMsg.STOCK_NUM_ERROR;
             codeMsg.setMsg("商品[" + product.getName() + "]的库存不足,请刷新页面更新库存信息!");
             return ResponseDTO.errorByMsg(codeMsg);
         }
     }
     BigDecimal totalPrice = new BigDecimal("0");
     Order order = CopyUtil.copy(orderDTO, Order.class);
     order.setId(UuidUtil.getShortUuid());
     order.setCreateTime(new Date());
     // 减库存加销量
     for(Cart cart : cartList) {
         Product product = productMapper.selectByPrimaryKey(cart.getProductId());
         product.setSellNum(product.getSellNum() + cart.getQuantity());
         Stock stock = stockMapper.selectByPrimaryKey(cart.getStockId());
         stock.setNum(stock.getNum() - cart.getQuantity());
         if(productMapper.updateByPrimaryKeySelective(product) == 0) {
             throw new RuntimeException(CodeMsg.ORDER_ADD_ERROR.getMsg());
         }
         if(stockMapper.updateByPrimaryKeySelective(stock) == 0) {
             throw new RuntimeException(CodeMsg.ORDER_ADD_ERROR.getMsg());
         }
         totalPrice = totalPrice.add(product.getPrice().multiply(new BigDecimal(cart.getQuantity())));
         OrderItem orderItem = new OrderItem();
         orderItem.setId(UuidUtil.getShortUuid());
         orderItem.setOrderId(order.getId());
         orderItem.setProductPrice(product.getPrice());
         orderItem.setProductName(product.getName());
         orderItem.setProductId(product.getId());
         orderItem.setQuantity(cart.getQuantity());
         orderItem.setSumPrice(new BigDecimal(cart.getQuantity()).multiply(product.getPrice()));
         orderItem.setProductScale(stock.getName());
         orderItem.setStockId(stock.getId());
         // 获取商品封面图片
         PictureExample pictureExample = new PictureExample();
         pictureExample.createCriteria().andProductIdEqualTo(product.getId()).andSortEqualTo(1);
         List<Picture> pictureList = pictureMapper.selectByExample(pictureExample);
         if(pictureList.size() > 0) {
             orderItem.setProductPhoto(pictureList.get(0).getPhoto());
         }
         if(orderItemMapper.insertSelective(orderItem) == 0) {
             throw new RuntimeException(CodeMsg.ORDER_ADD_ERROR.getMsg());
         }
     }
     order.setTotalPrice(totalPrice);
     order.setState(OrderStateEnum.WAIT.getCode());
     // 清空购物车数据
     cartMapper.deleteByExample(cartExample);
     if(orderMapper.insertSelective(order) == 0) {
         throw new RuntimeException(CodeMsg.ORDER_ADD_ERROR.getMsg());
     }
     return ResponseDTO.successByMsg(true, "下单成功!");
 }

2.添加商品代码

  /**
   * 保存商品信息
   * @param productDTO
   * @return
   */
  @Override
  public ResponseDTO<Boolean> saveProduct(ProductDTO productDTO) {
      // 进行统一表单验证
      CodeMsg validate = ValidateEntityUtil.validate(productDTO);
      if (!validate.getCode().equals(CodeMsg.SUCCESS.getCode())) {
          return ResponseDTO.errorByMsg(validate);
      }
      Product product = CopyUtil.copy(productDTO, Product.class);
      if(CommonUtil.isEmpty(product.getId())) {
          // 添加操作
          product.setId(UuidUtil.getShortUuid());
          product.setCreateTime(new Date());
          if(productMapper.insertSelective(product) == 0) {
              return ResponseDTO.errorByMsg(CodeMsg.PRODUCT_ADD_ERROR);
          }
      } else {
          // 修改操作
          if(productMapper.updateByPrimaryKeySelective(product) == 0) {
              return ResponseDTO.errorByMsg(CodeMsg.PRODUCT_EDIT_ERROR);
          }
          // 图集数据落地
          batchInsertPicture(productDTO.getPhotoList(), product.getId());
      }
      return ResponseDTO.successByMsg(true, "保存成功!");
  }

3.查询购物车代码

  /**
   * 查询购物车信息
   * @param cartDTO
   * @return
   */
  @Override
  public ResponseDTO<List<CartDTO>> getCartList(CartDTO cartDTO) {
      if(CommonUtil.isEmpty(cartDTO.getUserId()) && CommonUtil.isEmpty(cartDTO.getId())) {
          return ResponseDTO.errorByMsg(CodeMsg.DATA_ERROR);
      }
      CartExample cartExample = new CartExample();
      CartExample.Criteria criteria = cartExample.createCriteria();
      if(!CommonUtil.isEmpty(cartDTO.getUserId())) {
          criteria.andUserIdEqualTo(cartDTO.getUserId());
      }
      if(!CommonUtil.isEmpty(cartDTO.getId())) {
          criteria.andIdIn(Arrays.asList(cartDTO.getId().split(";")));
          // where id in (?,?)
      }
      List<Cart> cartList = cartMapper.selectByExample(cartExample);
      List<CartDTO> cartDTOList = CopyUtil.copyList(cartList, CartDTO.class);
      for(CartDTO cart : cartDTOList) {
          Product product = productMapper.selectByPrimaryKey(cart.getProductId());
          ProductDTO productDTO = CopyUtil.copy(Optional.ofNullable(product).orElse(new Product()), ProductDTO.class);
          PictureExample pictureExample = new PictureExample();
          pictureExample.createCriteria().andProductIdEqualTo(productDTO.getId());
          pictureExample.setOrderByClause("sort asc, id asc");
          List<Picture> pictureList = pictureMapper.selectByExample(pictureExample);
          List<String> photoList = pictureList.stream().map(Picture::getPhoto).collect(Collectors.toList());
          productDTO.setPhotoList(photoList);
          cart.setProductDTO(productDTO);
          Stock stock = stockMapper.selectByPrimaryKey(cart.getStockId());
          cart.setStockDTO(CopyUtil.copy(Optional.ofNullable(stock).orElse(new Stock()), StockDTO.class));
      }
      return ResponseDTO.success(cartDTOList);
  }


网站公告

今日签到

点亮在社区的每一天
去签到