【开源】JAVA+Vue.js实现校园二手交易系统

在这里插入图片描述

目录

  • 一、摘要
    • 1.1 项目介绍
    • 1.2 项目录屏
  • 二、功能模块
    • 2.1 数据中心模块
    • 2.2 二手商品档案管理模块
    • 2.3 商品预约管理模块
    • 2.4 商品预定管理模块
    • 2.5 商品留言板管理模块
    • 2.6 商品资讯管理模块
  • 三、实体类设计
    • 3.1 用户表
    • 3.2 二手商品表
    • 3.3 商品预约表
    • 3.4 商品预定表
    • 3.5 留言表
    • 3.6 资讯表
  • 四、界面展示
  • 五、核心代码
    • 5.1 用户网页登录
    • 5.2 用户网页注册
    • 5.3 新增商品预约
    • 5.4 商品审核
    • 5.5 查询留言
  • 六、免责说明


一、摘要

1.1 项目介绍

随着国家生产力的发展,越来越多商品被生产了出来,超过了人们的实际消耗量,所以产生了大量闲置的商品,这些闲置商品有些被遗弃、有些通过二手平台被他人使用。为了防止不必要的浪费,开发了这套面向校园的二手交易系统,帮助用户高效率的转卖闲置的二手商品。

校园二手交易系统使用Idea开发工具完成了编码实现。前端采用Vue.js,采用View UI组件库美化界面,后端采用SpringBoot框架。在操作系统、开发语言、服务器,数据库、连接技术方面,对应使用Window操作系统、Java语言、Tomcat服务器、MySql数据库以及MyBatis技术完成系统搭建。该系统基于B/S架构,采用前后端分离架构,分为网页前台和管理后台,使用户可以在系统上发布与购买二手商品、进行留言以及掌握最新商品咨询。

  • 前端:Vue 2.7.10

  • 后端:Spring Boot 3.1.10

  • 数据库:MySQL 8.0.31

1.2 项目录屏


二、功能模块

校园二手交易平台的功能性需求主要包含数据中心模块、二手商品档案模块、商品预约模块、商品预定模块、商品留言板模块、商品资讯模块六大模块,是基于浏览器运行的web管理后端,其中各个模块详细说明如下:

2.1 数据中心模块

数据中心模块包含了校园二手交易平台的系统基础配置,如登录用户的管理、二手平台组织架构的管理、用户菜单权限的管理、系统日志的管理、公用文件云盘的管理。

其中登录用户管理模块,由二手平台管理员负责运维工作,管理员可以对登录用户进行增加、删除、修改、查询操作。

二手组织架构,指的是二手平台管理运营公司的组织架构,该模块适用于管理这些组织架构的部门层级和员工的部门归属情况。

用户菜单权限管理模块,用于管理不同权限的用户,拥有哪些具体的菜单权限。

系统日志的管理,用于维护用户登入系统的记录,方便定位追踪用户的操作情况。

公用云盘管理模块,用于统一化维护校园二手交易平台中的图片,如二手商品的照片、保险单、三方协议等等。

在这里插入图片描述

2.2 二手商品档案管理模块

二手商品档案模块,维护了校园二手交易平台中发布的二手商品数据,管理员可以对二手商品数据进行增加、删除、修改、查询操作。

2.3 商品预约管理模块

商品预约指的是买家有了初步意向,申请线下查看。注册用户可以在二手商品档案模块发起预约申请,卖家在收到预约申请后,主动联系买家对接后续预约事宜。

在这里插入图片描述

2.4 商品预定管理模块

商品预定,指买家决定购买选定的商品。买家可以在二手商品档案中选择心仪的二手商品进行预定,并输入理想的价格和可选的备注信息,卖家就可以收到这个交易订单。卖家有权同意或驳回买家的预定请求,如果同意,则生成商品交易单,确定交易。

在这里插入图片描述

2.5 商品留言板管理模块

二手商品的买卖过程中难免会有一些咨询和纠纷,所以校园二手交易平台专门设计了商品留言板模块,用于解决买家和卖家、买家和二手平台的纠纷。任何一方可以在留言板中留言,或对已留言的信
息进行回复。

在这里插入图片描述

2.6 商品资讯管理模块

商品资讯管理模块,用于校园二手交易平台发布一些商品新闻,以及防诈骗推文等系统注册用户可以阅读到这些新闻信息。

在这里插入图片描述


三、实体类设计

3.1 用户表

数据中心模块最核心的就是用户了,用户的信息包括了手机号、地址、邮箱、身份证、性别等数据等。

在这里插入图片描述

在这里插入图片描述

3.2 二手商品表

二手商品档案模块是对系统内二手商品的数据进行管理,二手商品的数据包括商品ID、商品品牌、三方检测、商品照片、价格、卖家姓名、卖家手机、备注。

在这里插入图片描述

在这里插入图片描述

3.3 商品预约表

商品预约模块用于买家对商品的线下预约,商品预约模块应该包括商品ID、商品品牌、商品照片、卖家姓名、卖家手机、预约时间、预约地点、备注。

在这里插入图片描述

在这里插入图片描述

3.4 商品预定表

商品预定模块主要是对学生的下单信息进行记录和存储,例如商品ID、商品品牌、商品照片、卖家姓名、卖家手机、下单时间、约定价格、备注。

在这里插入图片描述

在这里插入图片描述

3.5 留言表

商品留言板用于解决买家和卖家、买家和二手平台的纠纷,包括留言内容、留言人、留言时间、是否回复、回复人、回复时间、回复内容、备注,任何一方可以在留言板中留言,或对已留言的信息进行回复。

在这里插入图片描述

在这里插入图片描述

3.6 资讯表

商品资讯管理模块,用于二手平台发布一些商品新闻,以及防诈骗推文等系统注册用户可以阅读到这些新闻信息,包括发布人ID、发布人、发布内容、图片、附件、发布时间、排序值、发布状态。

在这里插入图片描述

在这里插入图片描述

四、界面展示

此系统用于校园二手交易网站工作人员和注册买家。首先是校园二手交易网站的工作人员,可以对数据中心模块进行配置,发布、删除二手商品信息,查询学生的预约、预定信息。

对于注册买家,可以查询管理员发布的二手商品档案,并根据自己的需求进行预定、预约。
在这里插入图片描述

二手商品档案模块,维护了校园二手交易网站中发布的二手商品数据,管理员可以对二手商品数据进行增加、删除、修改、查询操作。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


五、核心代码

5.1 用户网页登录

@RequestMapping(value = "/loginOnWeb", method = RequestMethod.GET)
@ApiOperation(value = "网站前台登陆")
public Result<String> loginOnWeb(@RequestParam String userName, @RequestParam String password){
    QueryWrapper<User> qw = new QueryWrapper<>();
    qw.eq("username",userName);
    List<User> userList = iUserService.list(qw);
    if(userList.size() < 1) {
        return ResultUtil.error("用户不存在");
    }
    User user = userList.get(0);
    if(!new BCryptPasswordEncoder().matches(password, user.getPassword())){
        return ResultUtil.error("密码不正确");
    }
    String accessToken = securityUtil.getToken(user.getUsername(), true);
    UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(new SecurityUserDetails(user), null, null);
    SecurityContextHolder.getContext().setAuthentication(authentication);
    return new ResultUtil<String>().setData(accessToken);
}

5.2 用户网页注册

@RequestMapping(value = "/reOnWeb", method = RequestMethod.GET)
@ApiOperation(value = "网站前台注册")
public Result<String> reOnWeb(@RequestParam String userName,@RequestParam String mobile,@RequestParam String password){
    QueryWrapper<User> qw = new QueryWrapper<>();
    qw.eq("username",userName);
    qw.and(wrapper -> wrapper.eq("username", userName).or().eq("mobile",mobile));
    Long userCount = iUserService.count(qw);
    if(userCount > 0) {
        return ResultUtil.error("用户已存在");
    }
    User u = new User();
    u.setUsername(userName);
    u.setNickname(userName);
    u.setMobile(mobile);
    u.setEmail(u.getMobile() + "@qq.com");
    String encryptPass = new BCryptPasswordEncoder().encode(password);
    u.setPassword(encryptPass).setType(0);
    iUserService.saveOrUpdate(u);
    QueryWrapper<Role> roleQw = new QueryWrapper<>();
    roleQw.eq("default_role",true);
    List<Role> roleList = iRoleService.list(roleQw);
    if(roleList.size() > 0){
        for(Role role : roleList) {
            iUserRoleService.saveOrUpdate(new UserRole().setUserId(u.getId()).setRoleId(role.getId()));
        }
    }
    String accessToken = securityUtil.getToken(u.getUsername(), true);
    UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(new SecurityUserDetails(u), null, null);
    SecurityContextHolder.getContext().setAuthentication(authentication);
    return new ResultUtil<String>().setData(accessToken);
}

5.3 新增商品预约

@RequestMapping(value = "/addOrder", method = RequestMethod.GET)
@ApiOperation(value = "新增单条二手商品预定单")
public Result<Object> addOrder(@RequestParam String carId){
    UsedCar usedCar = iUsedCarService.getById(carId);
    if(usedCar == null) {
        return ResultUtil.error("二手商品不存在");
    }
    User currUser = securityUtil.getCurrUser();
    QueryWrapper<CarOrder> qw = new QueryWrapper<>();
    qw.eq("car_id",carId);
    qw.eq("buy_id",currUser.getId());
    if(iCarOrderService.count(qw) > 0L) {
        return ResultUtil.error("您已预定,无需重复预定");
    }
    CarOrder carOrder = new CarOrder();
    carOrder.setCarId(carId);
    carOrder.setBrand(usedCar.getBrand());
    carOrder.setSellerMoney(usedCar.getMoney());
    carOrder.setImageUrl(usedCar.getImageUrl());
    carOrder.setSellerId(usedCar.getSellId());
    carOrder.setSellerName(usedCar.getSellName());
    carOrder.setSellerMobile(usedCar.getSellMobile());
    carOrder.setBuyId(currUser.getId());
    carOrder.setBuyName(currUser.getNickname());
    carOrder.setOrderTime(DateUtil.now());
    carOrder.setContractFlag(false);
    carOrder.setContractTime("");
    iCarOrderService.saveOrUpdate(carOrder);
    return ResultUtil.success();
}

5.4 商品审核

@RequestMapping(value = "/doAudit", method = RequestMethod.POST)
@ApiOperation(value = "审核")
public Result<Object> doAudit(@RequestParam String id){
    CarOrder carOrder = iCarOrderService.getById(id);
    if(carOrder == null) {
        return ResultUtil.error("订单不存在");
    }
    carOrder.setAuditFlag(true);
    iCarOrderService.saveOrUpdate(carOrder);
    return ResultUtil.success();
}

5.5 查询留言

@RequestMapping(value = "/getByPage", method = RequestMethod.GET)
@ApiOperation(value = "查询留言")
public Result<IPage<MessageBoard>> getByPage(@ModelAttribute MessageBoard board,@ModelAttribute PageVo page){
    QueryWrapper<MessageBoard> qw = new QueryWrapper<>();
    if(!ZwzNullUtils.isNull(board.getDate())) {
        qw.eq("date",board.getDate());
    }
    if(ZwzNullUtils.isNull(board.getReplyId())) {
        qw.eq("reply_id","");
    } else {
        qw.eq("reply_id",board.getReplyId());
    }
    return new ResultUtil<IPage<MessageBoard>>().setData(iMessageBoardService.page(PageUtil.initMpPage(page),qw));
}

六、免责说明

  • 本项目仅供个人学习使用,商用授权请联系博主,否则后果自负。
  • 博主拥有本软件构建后的应用系统全部内容所有权及独立的知识产权,拥有最终解释权。
  • 如有问题,欢迎在仓库 Issue 留言,看到后会第一时间回复,相关意见会酌情考虑,但没有一定被采纳的承诺或保证。

下载本系统代码或使用本系统的用户,必须同意以下内容,否则请勿下载!

  1. 出于自愿而使用/开发本软件,了解使用本软件的风险,且同意自己承担使用本软件的风险。
  2. 利用本软件构建的网站的任何信息内容以及导致的任何版权纠纷和法律争议及后果和博主无关,博主对此不承担任何责任。
  3. 在任何情况下,对于因使用或无法使用本软件而导致的任何难以合理预估的损失(包括但不仅限于商业利润损失、业务中断与业务信息丢失),博主概不承担任何责任。
  4. 必须了解使用本软件的风险,博主不承诺提供一对一的技术支持、使用担保,也不承担任何因本软件而产生的难以预料的问题的相关责任。

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024年第九届信号与图像处理国际会议(ICSIP 2024)

2024第九届信号与图像处理国际会议&#xff08;ICSIP 2024&#xff09;将于2024年7月12-14日在中国南京召开。ICSIP每年召开一次&#xff0c;在过去的七年中吸引了1200多名与会者&#xff0c;是展示信号和图像处理领域最新进展的领先国际会议之一。本次将汇集来自亚太国家、北美…

Multisim14.0仿真(四十三)LM311应用

一、LM311简介&#xff1a; lm311是一款高灵活性的电压比较器&#xff0c;能工作于5V-30V单个电源或正负15V分离电源。 二、LM311主要特性&#xff1a; ★ 快速响应时间&#xff1a;165 ns。 ★ 选通能力。 ★ 最大输入偏置电流&#xff1a;300nA。 ★ 最大输入偏置电流&#…

【LLM KBQA】FlexKBQA:一种结合LLM的KBQA框架

前言 大语言模型&#xff08;LLMs&#xff09;在知识库问答&#xff08;KBQA&#xff09;领域的应用主要集中在包括但不限于以下几个方面&#xff1a; 直接生成答案&#xff1a;一些方法直接利用LLMs生成答案&#xff0c;而不是生成中间的程序&#xff08;如SPARQL查询&#…

iTOP-3A5000开发板支持PCIE 3.0、USB 3.0和 SATA 3.0.显示接口2 路、HDMI 和1路VGA等

性能强 采用全国产龙芯3A5000处理器&#xff0c;基于龙芯自主指令系统 (LoongArch)的LA464微结构&#xff0c;并进一步提升频率&#xff0c;降低功耗&#xff0c;优化性能。 桥片 采用龙芯 7A2000&#xff0c;支持PCIE 3.0、USB 3.0和 SATA 3.0.显示接口2 路、HDMI 和1路 VGA…

C++ pair+map+set+multimap+multiset+AVL树+红黑树(深度剖析)

文章目录 1. 前言2. 关联式容器3. pair——键值对4. 树形结构的关联式容器4.1 set4.1.1 set 的介绍4.1.2 set 的使用 4.2 map4.2.1 map 的介绍4.2.2 map 的使用 4.3 multiset4.3.1 multiset 的介绍4.3.2 multiset 的使用 4.4 multimap4.4.1 multimap 的介绍4.4.2 multimap 的使…

【TCP】四次挥手(终止连接)

前言 TCP&#xff08;传输控制协议&#xff09;是互联网协议&#xff08;IP&#xff09;中的一种重要传输层协议&#xff0c;用于在通信的计算机之间建立可靠的、有序的和错误校验的数据传输。在TCP连接中&#xff0c;数据传输是双向的&#xff0c;因此需要一种机制来开始和结…

【操作宝典】IntelliJ IDEA新建maven项目详细教程

目录 &#x1f33c;1. 配置maven环境 &#x1f33c;2. 创建maven项目 &#x1f33c;3. 创建maven项目完整示例 a. 导入spring boot环境 b. 修改maven配置 c. 下载jar包 d. 创建Java类 &#x1f33c;1. 配置maven环境 【安装指南】maven下载、安装与配置详细教程-CSDN博客…

多层面深度分析【HarmonyOS NEXT】开发者内容

一、IDE工具层面 DevEco Studio作为专门用于开发鸿蒙操作系统&#xff08;HarmonyOS&#xff09;的应用程序的集成开发环境&#xff08;IDE&#xff09;&#xff0c;提供一个清晰、直观的用户界面&#xff0c;使得开发人员可以更容易地进行编码、调试和测试我们的应用。新的版…

eduSRC那些事儿-4(未授权漏洞+社会工程学)

点击星标&#xff0c;即时接收最新推文 本文对edusrc挖掘的部分漏洞进行整理&#xff0c;将案例脱敏后输出成文章&#xff0c;不包含0DAY/BYPASS的案例过程&#xff0c;仅对挖掘思路和方法进行相关讲解。 未授权漏洞 一般都出现在内网&#xff0c;也有外网出现的情况&#xff0…

C语言指针的几种用途

先看题目&#xff0c;写一个fun函数&#xff0c;统计一个字符串中某个字符出现的次数&#xff0c;以及这个字符第一次出现的位置。 看起来很简单&#xff0c;似乎几行就可以搞定&#xff0c;但是写出来之后&#xff0c;才发现代码怎么这么长&#xff01;程序里多处使用了指针&…

问题:在电容耦合的放大电路中,耦合电容对输入交流信号应可视为( )。 #微信#媒体#学习方法

问题&#xff1a;在电容耦合的放大电路中&#xff0c;耦合电容对输入交流信号应可视为( )。 A:电流源; B:断路; C:短路; D:电压源 参考答案如图所示

CSS要点总结

一、CSS 快速入门 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>css 快速入门</title><!-- 解读1. 在 head 标签内&#xff0c;出现了 <style type"text/css"></style…

美国纳斯达克大屏怎么投放:投放完成需要多长时间-大舍传媒Dashe Media

陕西大舍广告传媒有限公司&#xff08;Shaanxi Dashe Advertising Media Co., Ltd&#xff09;&#xff0c;简称大舍传媒&#xff08;Dashe Media&#xff09;&#xff0c;是纳斯达克在中国区的总代理&#xff08;China General Agent&#xff09;。与纳斯达克合作已经有八年的…

大数据平台-可视化面板介绍-Echarts

应对现在数据可视化的趋势&#xff0c;越来越多企业需要在很多场景(营销数据&#xff0c;生产数据&#xff0c;用户数据)下使用&#xff0c;可视化图表来展示体现数据&#xff0c;让数据更加直观&#xff0c;数据特点更加突出。 目录 01-使用技术 02- 案例适配方案 03-基础…

Leetcode206:反转链表

一、题目 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表 示例&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]输入&#xff1a;head [1,2] 输出&#xff1a;[2,1]输入&#xff1a;head [] 输出&#xff1…

拓展欧几里得法求逆元

板子&#xff1a; x即为最终答案&#xff0c;x可能为负数&#xff0c;加模数即可 乘法逆元 - OI Wiki (oi-wiki.org) void exgcd(int a, int b, int& x, int& y) {if (b 0) {x 1, y 0;return;}exgcd(b, a % b, y, x);y - a / b * x; } 使用: exgcd(a, n 1, x,…

nest.js实现登录验证码功能(学习笔记)

安装express-session npm i express-session 引入 注册session import * as session from express-session;import { NestFactory } from nestjs/core; import {DocumentBuilder,SwaggerModule, } from nestjs/swagger;import { AppModule } from ./app.module;async functio…

今天又接到了一个离谱的DEBUG订单

一、BUG程序 #include <iostream> #include <string>class Rectangle { private:int width;int height;public:Rectangle(int w, int h) {width w;height h;}void setWidth(int w) {width w;}void setHeight(int h) {height h;}int getArea() {return width *…

24年2月深度学习

参考&#xff1a; RAPTOR: RECURSIVE ABSTRACTIVE PROCESSING FOR TREE-ORGANIZED RETRIEVAL 树结构检索方案。

项目安全-----加密算法实现

目录 对称加密算法 AES &#xff08;ECB模式&#xff09; AES(CBC 模式)。 非对称加密 对称加密算法 对称加密算法&#xff0c;是使用相同的密钥进行加密和解密。使用对称加密算法来加密双方的通信的话&#xff0c;双方需要先约定一个密钥&#xff0c;加密方才能加密&#…