电商商城系统网站

文章目录

  • 电商商城系统网站
    • 一、项目演示
    • 二、项目介绍
    • 三、系统部分功能截图
    • 四、部分代码展示
    • 五、底部获取项目(9.9¥带走)

电商商城系统网站

一、项目演示

商城系统

二、项目介绍

基于SpringBoot+Vue的前后端分离商城系统网站

运行环境:idea或eclipse vscode 数据库:mysql

语言:java

后台: SpringBoot + Mybatis-plus + Mybatis + Hutool工具包 + lombok插件

前台:Vue + Vue Router + ELementUI + Axios

功能:首页推荐、轮播图管理、商品、订单、购物车、商品评论、商品评论点赞、商品收藏、商品点赞、订单支付、公告。

角色:管理员、用户

三、系统部分功能截图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

四、部分代码展示

package com.example.controller;import cn.hutool.core.util.StrUtil;
import com.auth0.jwt.JWT;
import com.example.common.Result;
import com.example.service.UserService;
import com.example.entity.Address;
import com.example.service.AddressService;
import com.example.entity.User;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.List;@RestController
@RequestMapping("/api/address")
public class AddressController {@Resourceprivate AddressService addressService;@Resourceprivate HttpServletRequest request;@Resourceprivate 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));}@PostMappingpublic Result<?> save(@RequestBody Address address) {addressService.save(address);return Result.success();}@PutMappingpublic Result<?> update(@RequestBody Address address) {addressService.updateById(address);return Result.success();}@DeleteMapping("/{id}")public Result<?> delete(@PathVariable Long id) {addressService.removeById(id);return Result.success();}@GetMapping("/{id}")public Result<?> findById(@PathVariable Long id) {return Result.success(addressService.getById(id));}@GetMappingpublic 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);}}
package com.example.controller;import cn.hutool.core.date.DateUtil;
import com.auth0.jwt.JWT;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.common.Result;
import com.example.entity.Cart;
import com.example.entity.User;
import com.example.service.CartService;
import com.example.service.UserService;
import org.json.JSONException;
import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;@RestController
@RequestMapping("/api/cart")
public class CartController {@Resourceprivate CartService cartService;@Resourceprivate HttpServletRequest request;@Resourceprivate 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));}@PostMappingpublic Result<?> save(@RequestBody Cart cart) {cart.setCreateTime(DateUtil.now());// 加入购物车,相同的商品累加Cart userCart = cartService.getOne(Wrappers.<Cart>lambdaQuery().eq(Cart::getGoodsId, cart.getGoodsId()).eq(Cart::getUserId, cart.getUserId()));if (userCart != null) {userCart.setCount(cart.getCount() + userCart.getCount());cartService.updateById(userCart);} else {// 不同商品添加新的购物车记录cartService.save(cart);}return Result.success();}@PutMappingpublic Result<?> update(@RequestBody Cart cart) {cartService.updateById(cart);return Result.success();}@DeleteMapping("/{id}")public Result<?> delete(@PathVariable Long id) {cartService.removeById(id);return Result.success();}@GetMapping("/{id}")public Result<?> findById(@PathVariable Long id) {return Result.success(cartService.getById(id));}@GetMappingpublic Result<?> findAll() throws JSONException {List<Cart> carts = new ArrayList<>();User user = getUser();if (user != null) {carts = cartService.list(Wrappers.<Cart>lambdaQuery().eq(Cart::getUserId, getUser().getId()));}return Result.success(cartService.findAll(carts));}@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<Cart> query = Wrappers.<Cart>lambdaQuery().orderByDesc(Cart::getId);IPage<Cart> page = cartService.page(new Page<>(pageNum, pageSize), query);return Result.success(page);}}
package com.example.controller;import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.TypeReference;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.auth0.jwt.JWT;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.common.Result;
import com.example.dto.PreOrderQo;
import com.example.entity.*;
import com.example.exception.CustomException;
import com.example.service.*;
import org.json.JSONException;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Map;@RestController
@RequestMapping("/api/order")
public class OrderController {@Resourceprivate OrderService orderService;@Resourceprivate HttpServletRequest request;@Resourceprivate UserService userService;@Resourceprivate CartService cartService;@Resourceprivate OrderGoodsService orderGoodsService;@Resourceprivate GoodsService goodsService;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));}@Transactional@PostMappingpublic Result<?> save(@RequestBody Order order) {order.setUserId(getUser().getId());order.setOrderNo(DateUtil.format(new Date(), "yyyyMMddHHmmss") + RandomUtil.randomNumbers(6));order.setCreateTime(DateUtil.now());String cartsStr = order.getCarts();List<Cart> carts = JSONUtil.toBean(cartsStr, new TypeReference<List<Cart>>() {}, true);orderService.save(order);for (Cart cart : carts) {Integer count = cart.getCount();Long goodsId = cart.getGoodsId();// 扣库存Goods goods = goodsService.getById(goodsId);if(goods.getStore() - cart.getCount() < 0) {throw new CustomException("-1", "库存不足");}goods.setStore(goods.getStore() - cart.getCount());goods.setSales(goods.getSales() + cart.getCount());goodsService.updateById(goods);OrderGoods orderGoods = new OrderGoods();orderGoods.setOrderId(order.getId());orderGoods.setGoodsId(goodsId);orderGoods.setCount(count);orderGoodsService.save(orderGoods);}if (order.getType() == 1) {  // 1表示购物车,0表示直接购买// 提交订单时清空个人的购物车商品cartService.remove(Wrappers.<Cart>lambdaUpdate().eq(Cart::getUserId, getUser().getId()));}return Result.success(order);}@PutMappingpublic Result<?> update(@RequestBody Order order) {orderService.updateById(order);return Result.success();}/*** 付款* @param id* @return*/@Transactional@PutMapping("/pay/{id}")public Result<?> pay(@PathVariable Long id) {Order order = orderService.getById(id);BigDecimal totalPrice = order.getTotalPrice();Long userId = getUser().getId();User user = userService.findById(userId);if (user.getAccount().compareTo(totalPrice) <= 0) {throw new CustomException("-1", "余额不足");}user.setAccount(user.getAccount().subtract(totalPrice)); // 设置用户余额userService.updateById(user);order.setState("待发货");orderService.updateById(order);return Result.success();}@DeleteMapping("/{id}")public Result<?> delete(@PathVariable Long id) {orderService.removeById(id);return Result.success();}/*** 获取订单的确认信息** @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));}@GetMappingpublic 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);}/*** 前台查询订单列表* @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);}}

五、底部获取项目(9.9¥带走)

有问题,或者需要协助调试运行项目的也可以

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/465651.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot178智能学习平台系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

S32 Design Studio PE工具配置GPIO

首先我们来讲最简单的GPIO配置 代码生成 按照下图步骤就能配置一个基本的GPIO口&#xff0c;在组件里面选择pin_mux&#xff0c;选中就能配置使能和方向&#xff0c;no pin routed就是没有配置的。GPIO口分ABCDE组&#xff0c;每组从0到最大的序号。 然后在functional prope…

动静态库原理

静态库.a lib文件夹&#xff0c;存放着所有的库。 我们想写了自己的部分功能实现和代码&#xff0c;很多个.0和.h 但是实现文件太多了&#xff0c;我们把它打包在一起就是静态库。 那么如何打包呢&#xff1f;ar命令 ar -rc libhello.a mython.o myprintf.0 r 代表打包 c创…

H12-821_74

74.在某路由器上查看LSP&#xff0c;看到如下结果&#xff1a; A.发送目标地址为3.3.3.3的数据包时&#xff0c;打上标签1026&#xff0c;然后发送。 B.发送目标地址为4.4.4.4的数据包时&#xff0c;不打标签直接发送。 C.当路由器收到标签为1024的数据包&#xff0c;将把标签…

新版UI界面影视小程序亲测无问题带详细搭建教程

新版UI界面影视小程序亲测无问题带详细搭建教程 环境php7.0 — fileinfo–redis–sg11 mysql5.5 apache2.4 添加站点php7.0—-创建ftp—-上传后端文件《后端文件修改&#xff0c;/maccms/wxapi/config/dbs.php–修改当前数据库》—-设置ssl—-打开数据库安装cms 安装好后管…

C++: const 的 权限放大缩小!

目录 概念 引用与const 关于上述的第一段代码&#xff1a; 关于上诉的第二段代码&#xff1a; const 使用指针进行权限的放大和缩小&#xff1a; 注意事项&#xff1a; const 与 成员函数 const 修饰 成员函数的规则&#xff1a; 概念 关于权限的放大和缩小问题&am…

c++求三个数中最大数

#include<iostream> using namespace std; int main() { int a,b,c; cout<<"请输入三个数字"<<endl;//end后面为小写的L cin>>a>>b>>c; if(a>b&&a>c) cout<<"最大数为a:"<<a<<e…

谷粒商城【成神路】-【6】——商品维护

目录 &#x1f9c2;1.发布商品 &#x1f953;2.获取分类关联品牌 &#x1f32d;3.获取分类下所有分组和关联属性 &#x1f37f;4.商品保存功能 &#x1f9c8;5.sup检索 &#x1f95e;6.sku检索 1.发布商品 获取用户系统等级~&#xff0c;前面生成了后端代码&#xff…

C#封装类并因此设计一个简易计算器

目录 一、涉及到的知识点 1.封装 2. 封装性的使用范围 二、实例 1.源码 2.生成效果 一、涉及到的知识点 1.封装 面向对象编程中&#xff0c;大多数都是以类作为数据封装的基本单位。类将数据和操作数据的方法结合成一个单位。设计类时&#xff0c;不希望直接存取类中的数…

windows配置开机自启动软件或脚本

文章目录 windows配置开机自启动软件或脚本配置自启动目录开机运行的脚本调试开机自启动脚本配置守护进程(包装成自启动服务)使用任务计划程序FAQ 开机自动运行脚本示例 windows配置开机自启动软件或脚本 配置自启动目录 在Windows中添加开机自动运行的软件&#xff0c;可以按…

游泳可以戴的耳机有哪些,游泳耳机哪个牌子好性价比高

在游泳训练中&#xff0c;尤其是在进行长距离游泳、控制节奏和进行长时间游泳燃脂时&#xff0c;很容易感到单调乏味。为了帮助自己完成每一个来回&#xff0c;许多游泳运动员除了依赖能量棒和功能饮料外&#xff0c;还会选择通过音乐提高注意力和兴奋度。研究表明&#xff0c;…

Linux操作系统基础(十一):RPM软件包管理器

文章目录 RPM软件包管理器 一、rpm包的卸载 二、rpm包的安装 RPM软件包管理器 rpm&#xff08;英文全拼&#xff1a;redhat package manager&#xff09; 原本是 Red Hat Linux 发行版专门用来管理 Linux 各项软件包的程序&#xff0c;由于它遵循GPL规则且功能强大方便&…