电商商城系统网站

文章目录

  • 电商商城系统网站
    • 一、项目演示
    • 二、项目介绍
    • 三、系统部分功能截图
    • 四、部分代码展示
    • 五、底部获取项目(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.mzph.cn/news/677154.shtml

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

相关文章

M1 Mac使用SquareLine-Studio进行LVGL开发

背景 使用Gui-Guider开发遇到一些问题,比如组件不全。使用LVGL官方的设计软件开发 延续上一篇使用的基本环境。 LVGL项目 新建项目 选择Arduino的项目,设定好分辨率及颜色。 设计UI 导出代码 Export -> Create Template Project 导出文件如图 将libraries下的ui文…

【原理图PCB专题】Cadence17.4 PCB位号重排与反标

在文章:【原理图专题】Cadence 16.6如何把PCB元件位号重排并反标到原理图 中我们讲到了Cadence16.6版本对原理图进行反标的操作。 对于反标之前我们是通过如下所示的绘制流程来讲的,一般在首板或是大改板操作器件里有很多不同的很大的位号,这时我们可以通过Backannotate功能…

C++初阶篇----新手进村

目录 一、什么是C二、C关键字三、命名空间3.1命名空间的定义3.2命名空间的使用 四、C输入和输出五、缺省参数5.1缺省参数的概念5.2缺省参数的分类 六、函数重载6.1函数重载的概念6.2函数重载的原理----名字修饰 七、引用7.1引用概念7.2引用特性7.3常引用7.4引用的使用7.5传值、…

考研高数(导数的定义)

总结&#xff1a; 导数的本质就是极限。 函数在某点可导就必连续&#xff0c;连续就有极限且等于该点的函数值。 例题1&#xff1a;&#xff08;归结原则的条件是函数可导&#xff09; 例题2&#xff1a; 例题3&#xff1a;

使用 Elasticsearch 和 OpenAI 构建生成式 AI 应用程序

本笔记本演示了如何&#xff1a; 将 OpenAI Wikipedia 向量数据集索引到 Elasticsearch 中使用 Streamlit 构建一个简单的 Gen AI 应用程序&#xff0c;该应用程序使用 Elasticsearch 检索上下文并使用 OpenAI 制定答案 安装 安装 Elasticsearch 及 Kibana 如果你还没有安装好…

FPGA_简单工程_状态机

一 理论 fpga是并行执行的&#xff0c;当处理需要顺序解决的事时&#xff0c;就要引入状态机。 状态机&#xff1a; 简写FSM&#xff0c;也称同步有限状态机。 分为&#xff1a;more型状态机&#xff0c;mealy型状态机。 功能&#xff1a;执行该事件&#xff0c;然后跳转到下…

相机图像质量研究(11)常见问题总结:光学结构对成像的影响--像差

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

Linux 36.2@Jetson Orin Nano之Hello AI World!

Linux 36.2Jetson Orin Nano之Hello AI World&#xff01; 1. 源由2. Hello AI World&#xff01;3. 步骤3.1 准备阶段3.2 获取代码3.3 Python环境3.4 重点环节3.5 软件配置3.6 PyTorch安装3.7 编译链接3.8 安装更新 4. 测试4.1 video-viewer4.2 detectnet4.3 演示命令 5. 参考…

【OrangePi Zero2 智能家居】阿里云人脸识别方案

一、接入阿里云 二、C语言调用阿里云人脸识别接口 三、System V消息队列和POSIX 消息队列 一、接入阿里云 在之前树莓派的人脸识别方案采用了翔云平台的方案去1V1上传比对两张人脸比对&#xff0c;这种方案是可行&#xff0c;可 以继续采用。但为了接触更多了云平台方案&…

跟着pink老师前端入门教程-day23

苏宁网首页案例制作 设置视口标签以及引入初始化样式 <meta name"viewport" content"widthdevice-width, user-scalableno, initial-scale1.0, maximum-scale1.0, minimum-scale1.0"> <link rel"stylesheet" href"css/normaliz…

Mybatis是否支持延迟加载?

前言 随着互联网应用的不断发展&#xff0c;数据库访问成为了应用开发中的一个重要环节。在这个背景下&#xff0c;MyBatis作为一种优秀的持久层框架&#xff0c;提供了灵活的SQL映射配置和强大的功能&#xff0c;为开发者提供了便捷的数据库访问解决方案。本文将深入探讨MyBat…

(2024,街景生成,道路拓扑生成器,对象布局生成器,成分集成和天气生成)Text2Street:街景的可控文本到图像生成

公和众和号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; Text2Street: Controllable Text-to-image Generation for Street Views 目录 0. 摘要 2. 相关工作 3. 方法 3.1. 概述 3.2. 车道感知的道…

如何将 Hexo 部署到 GitHub Pages

引言 在数字时代&#xff0c;拥有个人博客是展示自己想法、分享知识和技能的绝佳方式。Hexo 是一个基于 Node.js 的静态博客生成器&#xff0c;它结合了简洁性和功能性&#xff0c;让我们可以轻松地建立并维护一个博客。而 GitHub Pages 提供了一个免费的平台来托管这些静态网站…

【java】简单的Java语言控制台程序

一、用于文本文件处理的Java语言控制台程序示例 以下是一份简单的Java语言控制台程序示例&#xff0c;用于文本文件的处理。本例中我们将会创建一个程序&#xff0c;它会读取一个文本文件&#xff0c;显示其内容&#xff0c;并且对内容进行计数&#xff0c;然后将结果输出到控…

交易之路:从无知到有知的五个阶段

交易是易学的&#xff0c;它的操作很直观&#xff0c;也是复杂的&#xff0c;它的价格很玄妙。在金融行业日益壮大的背景下&#xff0c;新人辈出&#xff0c;而弱者则逐渐退出。市场生态在不断变化&#xff0c;我们每个人在交易之路上所经历的种种&#xff0c;既清晰可见又模糊…

基于opencv-python模板匹配的银行卡号识别(附源码)

目录 介绍 数字模板处理 银行卡图片处理 导入数字模板 模板匹配及结果 介绍 我们有若干个银行卡图片和一个数字模板图片&#xff0c;如下图 我们的目的就是通过对银行卡图片进行一系列图像操作使得我们可以用这个数字模板检测出银行卡号。 数字模板处理 首先我们先对数…

【开源】SpringBoot框架开发桃花峪滑雪场租赁系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 游客服务2.2 雪场管理 三、数据库设计3.1 教练表3.2 教练聘请表3.3 押金规则表3.4 器材表3.5 滑雪场表3.7 售票表3.8 器材损坏表 四、系统展示五、核心代码5.1 查询教练5.2 教练聘请5.3 查询滑雪场5.4 滑雪场预定5.5 新…

实践:微服务版本升级步骤以及maven仓库相关概念

进行微服务开发的时候&#xff0c;上层服务依赖于下层的服务的api&#xff0c;比如适配属于上层服务&#xff0c;用户属于下层服务。 例子: 上层服务 <!--订单管理微服务api依赖--> <dependency><groupId>com.jn.server</groupId><artifactId>…

One time pad 图像加密MATLAB程序

使用一次加密的形式对图像进行加密。 采用异或的方式实现。 加密、解密结果如下: 程序代码如下: % 读取原始图像并显示 originalImage = imread(lena256.bmp); % 更换为你的图像文件名 subplot(1,3,1),imshow(originalImage); title(Original Image);% 生成与图像相同大…

低代码市场的未来展望:趋势、机遇与挑战

根据 Zoho 的一项新研究&#xff0c;低代码市场正处于成为主流的风口浪尖。该报告对全球 800 多名 IT 和业务领导者进行了调查&#xff0c;确定了推动其采用的几个因素。其中最重要的是提高应用程序的开发速度。 这一发现对企业领导者来说应该不足为奇。 客户、合作伙伴和员工…