再不动手SpringBoot甘肃旅游工艺品商城,答辩前两周你就只能通宵了

87 阅读3分钟

💖💖作者:计算机编程小咖 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目

@TOC

spring boot甘肃旅游工艺品商城系统介绍

SpringBoot甘肃旅游工艺品商城的设计与实现面向大四计算机专业学生,是一套完整可落地的B/S架构毕业设计项目,采用Java+SpringBoot+Mybatis后端与Vue+ElementUI前端组合,数据库选用MySQL,系统围绕甘肃特色旅游工艺品展开,功能覆盖首页动态轮播图、个人中心、用户与商品分类双维度管理、艺术商品CRUD、多级订单生命周期(未支付、已支付、已发货、已完成、已取消、已退款)及在线客服实时交互,并以“关于我们”“系统简介”模块强化品牌叙事,既满足电商平台常规业务流程,又突出地域文化展示,代码结构清晰、接口规范、页面响应式,可直接运行调试,帮助学生在短时间内理解需求分析、数据库建模、RESTful接口设计、前后端分离部署等核心毕业设计环节。

spring boot甘肃旅游工艺品商城系统演示视频

视频演示

spring boot甘肃旅游工艺品商城系统演示图片

登录注册界面.png

订单管理.png

商品分类.png

系统首页.png

艺术商品管理.png

用户管理.png

spring boot甘肃旅游工艺品商城系统代码展示

// 商品新增:保存艺术商品并自动生成缩略图
@RequestMapping(value = "/admin/artProduct", method = RequestMethod.POST)
public R saveArtProduct(@RequestParam("file") MultipartFile file,
                        @RequestParam("name") String name,
                        @RequestParam("price") BigDecimal price,
                        @RequestParam("stock") Integer stock,
                        @RequestParam("categoryId") Long categoryId) throws IOException {
    String originalFilename = file.getOriginalFilename();
    String suffix = originalFilename.substring(originalFilename.lastIndexOf("."));
    String newFileName = UUID.randomUUID().toString().replace("-", "") + suffix;
    File dest = new File(uploadPath + newFileName);
    if (!dest.getParentFile().exists()) dest.getParentFile().mkdirs();
    file.transferTo(dest);
    Thumbnails.of(dest).size(400, 400).toFile(new File(uploadPath + "thumb_" + newFileName));
    ArtProduct product = new ArtProduct();
    product.setName(name);
    product.setPrice(price);
    product.setStock(stock);
    product.setCategoryId(categoryId);
    product.setImage(newFileName);
    product.setThumb("thumb_" + newFileName);
    product.setCreateTime(LocalDateTime.now());
    artProductMapper.insert(product);
    return R.ok("新增成功");
}

// 下单:扣库存、写订单、写订单项
@Transactional
@PostMapping("/order/create")
public R createOrder(@RequestBody OrderCreateVo vo) {
    Long userId = SecurityUtil.getCurrentUserId();
    BigDecimal total = BigDecimal.ZERO;
    List<OrderItem> items = new ArrayList<>();
    for (CartItemVo c : vo.getCartList()) {
        ArtProduct p = artProductMapper.selectById(c.getProductId());
        if (p == null) return R.error("商品不存在");
        if (p.getStock() < c.getQuantity()) return R.error("库存不足");
        p.setStock(p.getStock() - c.getQuantity());
        artProductMapper.updateById(p);
        OrderItem item = new OrderItem();
        item.setProductId(p.getId());
        item.setQuantity(c.getQuantity());
        item.setPrice(p.getPrice());
        item.setSubTotal(p.getPrice().multiply(BigDecimal.valueOf(c.getQuantity())));
        items.add(item);
        total = total.add(item.getSubTotal());
    }
    Order order = new Order();
    order.setUserId(userId);
    order.setOrderNo(String.valueOf(System.currentTimeMillis()));
    order.setTotalAmount(total);
    order.setStatus(0);
    order.setCreateTime(LocalDateTime.now());
    orderMapper.insert(order);
    items.forEach(i -> {
        i.setOrderId(order.getId());
        orderItemMapper.insert(i);
    });
    cartMapper.delete(new QueryWrapper<Cart>().eq("user_id", userId));
    return R.ok(order.getOrderNo());
}

// 取消订单:状态回退、库存回补
@Transactional
@PutMapping("/order/cancel/{orderNo}")
public R cancelOrder(@PathVariable String orderNo) {
    Long userId = SecurityUtil.getCurrentUserId();
    Order order = orderMapper.selectOne(new QueryWrapper<Order>()
        .eq("order_no", orderNo).eq("user_id", userId));
    if (order == null) return R.error("订单不存在");
    if (order.getStatus() != 0) return R.error("订单已支付,不可取消");
    order.setStatus(-1);
    order.setUpdateTime(LocalDateTime.now());
    orderMapper.updateById(order);
    List<OrderItem> items = orderItemMapper.selectList(new QueryWrapper<OrderItem>()
        .eq("order_id", order.getId()));
    items.forEach(i -> {
        ArtProduct p = artProductMapper.selectById(i.getProductId());
        p.setStock(p.getStock() + i.getQuantity());
        artProductMapper.updateById(p);
    });
    return R.ok("已取消并恢复库存");
}

spring boot甘肃旅游工艺品商城系统文档展示

文档.png

💖💖作者:计算机编程小咖 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜 网站实战项目 安卓/小程序实战项目 大数据实战项目 深度学习实战项目