基于Springboot开发实现买卖三方二手商品交易网站

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 基于Springboot开发实现买卖三方二手商品交易网站

项目编号:BS-SC-034

前言:

闲了就卖校园二手交易网使用springboot技术制作网站动态页面,使用IDEA为系统开发工具,数据存储采用现在比较流行的关系型数据库存MYSQL数据库系统来进行存储,开发一个类似于人咸鱼式的网站,实现个人闲置物品在网上进行自由交易。本论文主要研究的功能有:二手物品交易系统前台与二手物品交易系统后台,系统前台主要功能包含有:用户注册、用户登陆、浏览商品、商品在线信息查询、购物车、个人订单管理功能、个人中心、发布商品。二手物品交易系统系统的前台数据都在后台进行管理,其中主要的功能也就是有这么几个如下模块:二手物品商品类别管理、二手物品用户管理、二手物品新闻管理等相关数据模块的管理功能,实现一个基于B/S结构,由买卖双方组成的的个人闲置二手或新购物品交易网站。


定位于校园内部闲了就校园二手交易网,这个闲了就校园二手交易网主要利用互联网技术的相关技术,避免资源浪费,减少交易环节,提高交易效率,借助网络平台形式的展示窗口,让校园内的师生更习惯于接受我们所开发的个人闲置物品交易系统,并且打破传统市场购物的时间和空间局限性,大缩短校内老师和学生寻找商品和出售闲置物品的时间,同时系统的设计具有良好的人机交互性,从而实现二手闲置物品信息化、系统化和规范化。

一,项目简介


以SpringBoot为项目框架开发的二手交易网站,本商城系统分为三个角色,一个买家消费者,一个卖家商户,一个是平台管理员。

买家登陆商城前端,可以在线分类浏览商品,添加购物车、在线购买、支付宝消箱支付扣款,维护个人信息,查看个人订单等功能。


卖家登陆商城系统,可以在线发布商品,管理自己的订单等。


管理员登陆商城系统,可以对买家和卖家进行管理操作,可以管理商品分类,管理商品信息,管理快递公司信息等。


这种三方角色的商城系统包含买卖双方比较少见,比较适合做毕业设计系统使用。


系统亮点:


一是使用阿里云进行短信发送,


二是基于阿里云实现云存储,


三是使用支付宝沙箱实现在线支付功能,


四是结合内网穿透来实现支付宝支付结果的回调,


五是使用redis缓存数据库进行数据缓存处理。


系统功能完整 ,界面美观大方,是一个难得的优秀作品。

二,环境介绍


语言环境:Java:  jdk1.8

数据库:Mysql: mysql5.7+  Redis缓存数据库

应用服务器:Tomcat:  tomcat8.5.31

开发工具:IDEA或eclipse

后台开发:Springboot+mybatis

前端开发: bootstrap+jquery

三,系统展示


前端功能展示

873c92b6a30441b9be3d1c8858ba3c61.png

商品详情

image.png

购物车下订单

image.png

结账支付

image.png

沙箱支付宝账户支付扣款

image.png

卖家登陆

image.png

image.png

商品管理

image.png

个人信息管理

image.png

订单管理

image.png

管理员登陆

image.png

image.png

用户管理

image.png

卖家管理

image.png

商品管理

image.png

分类管理

image.png

快递公司管理

image.png

四,核心代码展示


package com.jzh.xx.transaction.controller;
import com.jzh.xx.transaction.domain.*;
import com.jzh.xx.transaction.service.*;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("cart")
public class CartController {
    @Resource
    private CartService cartService;
    @Resource
    private CategoryService categoryService;
    @Resource
    private CategoryTwoService categoryTwoService;
    @Resource
    private ExpressService expressService;
    /**
     * 添加一件商品
     * @param sellerId
     * @param goodsId
     * @param session
     * @return
     */
    @PostMapping("goods/add")
    @ResponseBody
    public Map<String, Object> add(Long sellerId, Long goodsId,HttpSession session) {
        Map<String, Object> result = new HashMap<>();
        // 获取用户 ID
        XxUser user = (XxUser) session.getAttribute("user");
        if (user != null){
            int exit = 1;
            // 添加商品到购物车
            List<Cart> cartGoods = cartService.add(user.getId(), sellerId,goodsId );
            // 计算购物车总金额
            Double total = 0.0;
            for (int i = 0; i < cartGoods.size(); i++) {
                total += cartGoods.get(i).getBuyCount() * cartGoods.get(i).getGoodsPrice();
            }
            result.put("cartGoods", cartGoods);
            result.put("total", total);
            result.put("exit",exit);
            return result;
        } else {
            int exit = 2;
            result.put("exit",exit);
            return result;
        }
    }
    /**
     * 删除商品
     * @param goodsId
     * @param session
     * @return
     */
    @PostMapping("goods/delete")
    @ResponseBody
    public Map<String, Object> delete(Long goodsId , HttpSession session) {
        Map<String, Object> result = new HashMap<>();
        // 获取用户 ID
        XxUser user = (XxUser) session.getAttribute("user");
        // 添加商品到购物车
        List<Cart> cartGoods = cartService.delete(user.getId(),goodsId);
        // 计算购物车总金额
        Double total = 0.0;
        for (int i = 0; i < cartGoods.size(); i++) {
            total += cartGoods.get(i).getBuyCount() * cartGoods.get(i).getGoodsPrice();
        }
        result.put("cartGoods", cartGoods);
        result.put("total", total);
        return result;
    }
    /**
     * 遍历购物车清单
     * @param model
     * @param session
     * @return
     */
    @GetMapping("detail/{id}")
    public String toCart(@PathVariable Long id, Model model, HttpSession session){
        // 获取用户 ID
        XxUser user = (XxUser) session.getAttribute("user");
        // 购物车
        List<Cart> cartGoods = new ArrayList<>();
        if (user != null){
            cartGoods = cartService.getByUserId(id);
        }
        Double total = 0.0;
        int goodsCount = cartGoods.size();
        if (cartGoods.size() >0){
            for (int i = 0; i< cartGoods.size(); i++){
                total += cartGoods.get(i).getBuyCount() * cartGoods.get(i).getGoodsPrice();
            }
        }
        // 父分类
        List<Category> categories = categoryService.categoryList();
        // 查询所有子分类
        List<CategoryTwo> categoryTwos = categoryTwoService.getAll();
        //查询所有快递
        List<Express> expresses = expressService.getAll();
        model.addAttribute("goodsCount",goodsCount);
        model.addAttribute("cartGoods",cartGoods);
        model.addAttribute("total",total);
        model.addAttribute("categories",categories);
        model.addAttribute("categoryTwos",categoryTwos);
        model.addAttribute("expresses",expresses);
        return "frontCart";
    }
}
package com.jzh.xx.transaction.controller;
import com.jzh.xx.transaction.domain.*;
import com.jzh.xx.transaction.dto.PageResult;
import com.jzh.xx.transaction.service.*;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;
@Controller
@RequestMapping("frontCategory")
public class FrontCateController {
    @Resource
    private GoodsService goodsService;
    @Resource
    private CategoryService categoryService;
    @Resource
    private CategoryTwoService categoryTwoService;
    @Resource
    private CartService cartService;
    @Resource
    private FrontCateService frontCateService;
    @GetMapping
    public String toCategory(){
        return "cate_list";
    }
    /**
     * 商品分类信息页
     * @param id
     * @param model
     * @param pageNum
     * @param session
     * @return
     */
    @GetMapping("list/{id}")
    public String categoryList(@PathVariable Long id, Model model, @RequestParam(defaultValue = "1") int pageNum, HttpSession session){
        // 获取用户 ID
        XxUser user = (XxUser) session.getAttribute("user");
        // 购物车
        List<Cart> cartGoods = new ArrayList<>();
        if (user != null){
            cartGoods = cartService.getByUserId(user.getId());
        }
        Double total = 0.0;
        int goodsCount = cartGoods.size();
        if (cartGoods.size() >0){
            for (int i = 0; i< cartGoods.size(); i++){
                total += cartGoods.get(i).getBuyCount() * cartGoods.get(i).getGoodsPrice();
            }
        }
        // 父分类
        List<Category> categories = categoryService.categoryList();
        //该父分类
        Category category = categoryService.getById(id);
        //子分类名称
        List<CategoryTwo> categoryTwos = categoryTwoService.getAll();
        //分类商品
        PageResult<Goods> goodsPageResult = frontCateService.goodsPage(pageNum,id);
        model.addAttribute("goodsCount",goodsCount);
        model.addAttribute("cartGoods",cartGoods);
        model.addAttribute("total",total);
        model.addAttribute("categories",categories);
        model.addAttribute("category",category);
        model.addAttribute("categoryTwos",categoryTwos);
        model.addAttribute("goodsList",goodsPageResult);
        return "cate_list";
    }
    /**
     * 主页小标题商品信息页
     * @param jb_status
     * @param model
     * @param session
     * @return
     */
    @GetMapping("subheading/{jb_status}")
    public String subheading(@PathVariable Long jb_status, Model model, HttpSession session){
        // 获取用户 ID
        XxUser user = (XxUser) session.getAttribute("user");
        // 购物车
        List<Cart> cartGoods = new ArrayList<>();
        if (user != null){
            cartGoods = cartService.getByUserId(user.getId());
        }
        Double total = 0.0;
        int goodsCount = cartGoods.size();
        if (cartGoods.size() >0){
            for (int i = 0; i< cartGoods.size(); i++){
                total += cartGoods.get(i).getBuyCount() * cartGoods.get(i).getGoodsPrice();
            }
        }
        // 父分类
        List<Category> categories = categoryService.categoryList();
        // 查询所有子分类
        List<CategoryTwo> categoryTwos = categoryTwoService.getAll();
        //小标题商品
        List<Goods> subGoods = null;
        int subStatus = 0;
        int subsize = 0;
        if (jb_status == 2){
            subStatus = 2;
            subGoods = goodsService.showCheaper();
            subsize = subGoods.size();
        }else if (jb_status == 1){
            subStatus = 1;
            subGoods = goodsService.showChosen();
            subsize = subGoods.size();
        }
        model.addAttribute("goodsCount",goodsCount);
        model.addAttribute("cartGoods",cartGoods);
        model.addAttribute("total",total);
        model.addAttribute("categories",categories);
        model.addAttribute("categoryTwos",categoryTwos);
        model.addAttribute("subGoods",subGoods);
        model.addAttribute("subStatus",subStatus);
        model.addAttribute("subsize",subsize);
        return "subheading";
    }
}
package com.jzh.xx.transaction.controller;
import com.jzh.xx.transaction.domain.*;
import com.jzh.xx.transaction.service.*;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.List;
@Controller
@RequestMapping("goods")
public class GoodsController {
    @Resource
    private GoodsService goodsService;
    @Resource
    private CategoryService categoryService;
    @Resource
    private SellerService sellerService;
    @Resource
    private CartService cartService;
    @Resource
    private CategoryTwoService categoryTwoService;
    /**
     * 商品详情
     * @param id
     * @param model
     * @return
     */
    @GetMapping("detail/{id}")
    public String toDetail(@PathVariable Long id, Model model, HttpSession session){
        // 获取用户 ID
        XxUser user = (XxUser) session.getAttribute("user");
        // 购物车
        List<Cart> cartGoods = new ArrayList<>();
        if (user != null){
            cartGoods = cartService.getByUserId(user.getId());
        }
        Double total = 0.0;
        int goodsCount = cartGoods.size();
        if (cartGoods.size() >0){
            for (int i = 0; i< cartGoods.size(); i++){
                total += cartGoods.get(i).getBuyCount() * cartGoods.get(i).getGoodsPrice();
            }
        }
        // 父分类
        List<Category> categories = categoryService.categoryList();
        // 查询所有子分类
        List<CategoryTwo> categoryTwos = categoryTwoService.getAll();
        //商品详情
        Goods goods = goodsService.detail(id);
        Long categoryId = goods.getCategoryId();
        Long sellerId = goods.getSellerId();
        Category category = categoryService.showCategory(categoryId);
        Seller seller = sellerService.seller(sellerId);
        model.addAttribute("goodsId",id);
        model.addAttribute("goodsCount",goodsCount);
        model.addAttribute("cartGoods",cartGoods);
        model.addAttribute("total",total);
        model.addAttribute("categories",categories);
        model.addAttribute("categoryTwos",categoryTwos);
        model.addAttribute("goods",goods);
        model.addAttribute("category",category);
        model.addAttribute("seller",seller);
        return "shop_single";
    }
}
package com.jzh.xx.transaction.controller;
import com.jzh.xx.transaction.domain.XxUser;
import com.jzh.xx.transaction.service.OrderService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
@Controller
@RequestMapping("order")
public class OrderController {
    @Resource
    private OrderService orderService;
    /**
     * 生成订单
     */
    @PostMapping("create")
    @ResponseBody
    public Long create(Long expressId, HttpSession session) {
        // 从 session 中获取会员信息
        XxUser user = (XxUser) session.getAttribute("user");
        // 创建订单
        Long orderId = orderService.create(user.getId(), expressId);
        return orderId;
    }
}

五,项目总结


IT和互联网技术的普及应用让很多电子商务网站系统向雨后春笋般快速发展起来,它打破了时间和空间上的限制,让人们原来仅仅局限一隅的购物方式发生了很的变化[1]。二手闲置物品的交易是现在各高校中校园文化的另一种体现,将自己不用的物品放在平台上进行交易,或了置换自己所需要的其它商品,即避免了资源的浪费,又提升了物品本身的价值应用空间。目前校内的二手闲置物品交易主要以线下和线上两种模块,线下就是常见的地摊经济,但占用个人的时间精力很大,很多人可能也没有时间去摆摊卖自己的二手物品,而且地域限制性极强。另外一种就是线上模式,目前主要以校内论坛为主的体现形式,这些平台的局限性非常大,并不能很好的促进闲置物品的交易和满足学生的交流需求,而基于网站的闲置物品信息交流的形式刚好能满足学生的要求。有了我们这个交易系统,二手物品的拥有者可以很方便的在平台上发布自己所拥有的物品信息,也可以在网上很方便的浏览别人的发布的闲置二手物品信息,并且可以在平台上对各种闲置二手物品进行相应的信息比较,选择自己中意的。


目前国内大部分的大学校园大都有自己的校园内网网站的信息化建,而大部分的高校也同时完成了自己网络工程的搭建,校园网的建成为学校的学生、老师、后勤部门等学校各方面人士提供了很多方便。现在随着普遍的相关的计算机的技术中的网络相关技术的应用,以及当代通信技术、DB技术的无法估计的发展,电子商务的也发展的非常迅速。而现在校园中大学生之间的网上交易的主要平台是校园论坛还有微博。论坛的主要功能是交流使用,它虽然使用的人很多,但是功能被限制在了交流使用,用户无法像其它的电子商务网站一样了解商品的更加详细的信息,比如图片、价格、相关的功能展示等等,更不能向电子商务网站一样快速的查询客户自己所需的相关商品,无法满足学生之间的快速交易的即时需要。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
相关文章
|
5月前
|
前端开发 Java 关系型数据库
基于Java+Springboot+Vue开发的鲜花商城管理系统源码+运行
基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习共同进步
404 7
|
5月前
|
人工智能 Java 数据库
飞算 JavaAI:革新电商订单系统 Spring Boot 微服务开发
在电商订单系统开发中,传统方式耗时约30天,需应对复杂代码、调试与测试。飞算JavaAI作为一款AI代码生成工具,专注于简化Spring Boot微服务开发。它能根据业务需求自动生成RESTful API、数据库交互及事务管理代码,将开发时间缩短至1小时,效率提升80%。通过减少样板代码编写,提供规范且准确的代码,飞算JavaAI显著降低了开发成本,为软件开发带来革新动力。
|
6月前
|
缓存 NoSQL Java
基于SpringBoot的Redis开发实战教程
Redis在Spring Boot中的应用非常广泛,其高性能和灵活性使其成为构建高效分布式系统的理想选择。通过深入理解本文的内容,您可以更好地利用Redis的特性,为应用程序提供高效的缓存和消息处理能力。
481 79
|
4月前
|
供应链 JavaScript BI
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
这是一款专为小微企业打造的 SaaS ERP 管理系统,基于 SpringBoot+Vue+ElementUI+UniAPP 技术栈开发,帮助企业轻松上云。系统覆盖进销存、采购、销售、生产、财务、品质、OA 办公及 CRM 等核心功能,业务流程清晰且操作简便。支持二次开发与商用,提供自定义界面、审批流配置及灵活报表设计,助力企业高效管理与数字化转型。
424 2
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
|
3月前
|
Java API 微服务
Java 21 与 Spring Boot 3.2 微服务开发从入门到精通实操指南
《Java 21与Spring Boot 3.2微服务开发实践》摘要: 本文基于Java 21和Spring Boot 3.2最新特性,通过完整代码示例展示了微服务开发全流程。主要内容包括:1) 使用Spring Initializr初始化项目,集成Web、JPA、H2等组件;2) 配置虚拟线程支持高并发;3) 采用记录类优化DTO设计;4) 实现JPA Repository与Stream API数据访问;5) 服务层整合虚拟线程异步处理和结构化并发;6) 构建RESTful API并使用Springdoc生成文档。文中特别演示了虚拟线程配置(@Async)和StructuredTaskSco
367 0
|
8月前
基于springboot+thymeleaf+Redis仿知乎网站问答项目源码
基于springboot+thymeleaf+Redis仿知乎网站问答项目源码
250 36
|
6月前
|
人工智能 自然语言处理 前端开发
20分钟上手DeepSeek开发:SpringBoot + Vue2快速构建AI对话系统
本文介绍如何使用Spring Boot3与Vue2快速构建基于DeepSeek的AI对话系统。系统具备实时流式交互、Markdown内容渲染、前端安全防护等功能,采用响应式架构提升性能。后端以Spring Boot为核心,结合WebFlux和Lombok开发;前端使用Vue2配合WebSocket实现双向通信,并通过DOMPurify保障安全性。项目支持中文语义优化,API延迟低,成本可控,适合个人及企业应用。跟随教程,轻松开启AI应用开发之旅!
|
8月前
|
监控 Java 应用服务中间件
SpringBoot是如何简化Spring开发的,以及SpringBoot的特性以及源码分析
Spring Boot 通过简化配置、自动配置和嵌入式服务器等特性,大大简化了 Spring 应用的开发过程。它通过提供一系列 `starter` 依赖和开箱即用的默认配置,使开发者能够更专注于业务逻辑而非繁琐的配置。Spring Boot 的自动配置机制和强大的 Actuator 功能进一步提升了开发效率和应用的可维护性。通过对其源码的分析,可以更深入地理解其内部工作机制,从而更好地利用其特性进行开发。
266 6
|
8月前
|
Java 应用服务中间件 API
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
162 5
|
8月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
305 2

热门文章

最新文章