项目编号:BS-PT-085
一,环境介绍
语言环境:Java: jdk1.8
数据库:Mysql: mysql5.7
应用服务器:Tomcat: tomcat8.5.31
开发工具:IDEA或eclipse
前端开发技术:Vue+ElementUI+Nodejs
后台开发技术:Springboot+MybatisPlus
二,项目简介
2.1 绪论
近几年来,随着互联网的不断普及和深入发展,同时也受益于国家对“互联网+”的政策支持,一时间,国内的“互联网+”浪潮强势推进,其热潮可谓是席卷了各行各业。当一切的一切正在互联网的影响下进行着重构,互联网电商也就成为了继传统市场后又一个具有非常广阔发展前景的市场。国内的各行业企业都在思考着怎样借助互联网这股“风”飞上天,进而能够分得互联网电商的“一杯羹”。
本系统基于SpringBoot框架,采用B/S模式进行设计,前端页面使用Vue.js,开发软件采用IDEA作为编程工具,jdk基础运行环境采用1.8.0版本,使用Maven3.6.3作为赖管理工具以及项目构建工具,采用MySQL5.7作为数据库进行数据存储,数据库管理软件采用Navicat。
汽配销售平台特点:允许用户在不登录的情况进行商品的浏览,以及查看商品详细信息,
用户可以通过商品的三级联动分类来查询自己想要购买商品的商品,当用户点击一个商品时系统会自动记录用户浏览的商品信息,可以工具用户的浏览信息来对用户进行商品的推荐,用户也可以对商品进行评论(支持敏感词过滤),对已加入购物车的商品进行购买,可以在个人中心查看历史记录和对自己的订单、地址进行管理。
2.2 功能需求
汽配销售平台,分为前台和后台。前台由:用户模块、商品模块、购物车模块、订单模块组成。用户管理包括:用户登录注册、用户个人信息的管理,以及购物车的操作。个人中心模块:用户可以在个人中心模块管理自己的收货地址,可以查看自己对商品的浏览记录以及自己收藏的商品和对一以往的评论进行管理、用户对自己的订单进行管理。商品管理包括:商品的分类信息,以及对商品的展示和对商品的介绍,和进行关键词对商品进行搜索,以及用户对商品的评论。订单管理模块:订单详情,用户取消订单以及确认收货。购物车模块:用户可以添加商品到购物车和进行商品支付结算。后台管理包括:用户管理、商品管理、轮播图管理、评论管理。用户管理:可以对所有注册了的用户进行查询和查看用户详情,商品管理:可以对商品进行上架、修改和删除,也可以查询所有上架的商品,轮播图管理:管理员可以对投资者,投资的商品进行在首页展示,可以对轮播图进行修改和添加、删除,评论管理:后台人员可以检测每个用户的评论内容可以进行评论删除和查询。该系统的功能模块图如图1所示。
图1系统功能模块图
前台用户主要包括游客和普通注册用户。游客可以使用网站的基础功能,如游客可以在不登录的情况下可以进行登录注册以及搜索商品、查看商品信息,普通注册用户可以进入自己的个人中心对自己的个人信息、地址进行修改,可以搜索、查看商品,对自己喜欢的商品进行收藏,可以把自己想要购买的商品加入到购物车中,可以直接从商品详细界面或者购物车进入到订单结算界面,可以进行支付宝支付等功能。用户功能用例图如图2所示。
图2 用户功能用例图
管理员通过系统内置的账户登录,使管理员能够方便快捷的管理平台,只有管理员用户才能访问后台管理系统。分为4个管理类型:用户管理、商品管理、订单管理、轮播图管理。管理员可以对平台中所有用户的信息,进行查询、修改、增加、删除操作。商品管理功能为能够对所有商品进行查询、修改、增加、删除,以及对商品分类和热门商品进行增删改查操作。订单管理能够对所有商品进行查询、修改、增加、删除。轮播图管理:管理员可以对首页轮播图进行管理。可以修改的管理员功能用例图如图3所示。
图3 管理员用例图
2.3 数据库表
(1)user:用户表。用于存储用户的基础信息,例如用户ID与用户状态信息。如表4-1所示:
表4-1 用户表结构
字段名 |
类型 |
描述 |
u_id |
int |
用户编号 |
username |
varchar(255) |
用户名 |
password |
varcgar(55) |
密码 |
nickname |
varchar(255) |
昵称 |
phone |
varbinary(13) |
手机号 |
photo |
varbinary(255) |
头像 |
varchar(25) |
电子邮箱 |
|
u_status |
enum('0','1') |
用户状态 |
(2)address:用于存储用户的收货地址信息,一个用户可以对多个收货地址,每个地址又有对应的详细信息,可以设置用户的默认地址如表4-2所示:
表4-2 文件仓库表结构
字段名 |
类型 |
描述 |
addressid |
int |
自增,主键,地址ID |
userid |
int |
所属用户ID |
userName |
varcghar(24) |
收货人姓名 |
userPhone |
varchar(11) |
收货人手机号码 |
areaIdPath |
varchar(255) |
区域ID路径 |
areaId |
int |
最后一级区域ID |
userAddress |
varchar(255) |
详细地址 |
isDefault |
int |
是否默认地址 0:否 1:是 |
dataFlag |
int |
有效状态 1:有效 -1:无效 |
createTime |
varchar (55) |
创建时间 |
(3)bigplus_type:商品一级分类表。用户存储商品的一级分类信息。如表4-3所示:
表4-3 商品一级分类表结构
字段名 |
类型 |
描述 |
bigplusid |
int |
自增,主键,一级分类ID |
bigplus_name |
varchar |
一级分类名称 |
(4)big_type:商品二级分类表。用户存储商品的二级分类信息以及对应的一级分类的id。如表4-4所示:
表4-4 商品二级分类表结构
字段名 |
类型 |
描述 |
bigid |
int |
自增,主键,二级分类ID |
big_name |
varchar |
二级分类名称 |
bigplusid |
int |
该分类对应的一级分类id |
(5)small_type:商品三级分类表。用户存储商品的二级分类信息以及对应的一级分类的id。如表4-5所示:
表4-5 商品三级分类表结构
字段名 |
类型 |
描述 |
smallid |
int |
自增,主键,三级分类ID |
small_name |
varchar |
三级分类名称 |
bigid |
int |
该分类对应的二级分类id |
(6)goods:商品表。用于商品的信息,商品信息里面包含处理包含了商品的基本信息还包括了该商品对应的分类id以便快速查询商品的信息以及该商品下对应的评论。如表4-6所示:
表4-6 商品表结构
字段名 |
类型 |
描述 |
g_id |
int |
商品编号 |
goods_name |
varchar(55) |
商品名称 |
sid |
int |
商家编号 |
smallid |
int |
商品小分类编号 |
g_description |
varchar(255) |
商品简介 |
g_stock |
int |
商品库存 |
g_price |
double |
商品价格 |
g_photo |
varchar(255) |
商品图片 |
launch_time |
varchar(55) |
上架时间 |
g_status |
Int |
商品状态 |
g_isnew |
int |
0,不是新品,1.新品 |
bigid |
int |
二级分类id |
bigplusid |
int |
一级分类id |
Comment_num |
int |
评论数量 |
Goods_sale_num |
int |
累计销售 |
(7)shopping_cart:购物车表。用于存储前台用户的购物车中的基本信息包括对应的用户编号、商品编号、商品等。如表4-7所示:
表4-7 购物车表结构
字段名 |
类型 |
描述 |
cart_id |
int |
购物车编号 |
u_id |
int |
用户编号 |
sid |
int |
商家编号 |
g_id |
int |
商品编号 |
amount |
int |
商品数量 |
(8)favorites:用户收藏表。用于存储前台用户收藏的商品信息。如表4-8所示:
表4-8 用户收藏表结构
字段名 |
类型 |
描述 |
Collect_id |
int |
收藏商品编号 |
u_id |
int |
用户编号 |
g_id |
int |
商品编号 |
Collect_time |
Varchar |
收藏时间 |
(9)history:用户浏览历史表。当用户在登录状态点击商品查看商品的详细信息时,会自动触发用于存储前台用户浏览的商品信息。如表4-9所示:
表4-9 用户浏览历史表结构
字段名 |
类型 |
描述 |
h_id |
int |
浏览历史编号 |
u_id |
int |
用户编号 |
g_id |
int |
商品编号 |
Goods_name |
Varchar |
商品名字 |
g_price |
decimal |
商品价格 |
G_photo |
varchar |
商品图片 |
(10)recommend:推荐表。当用户在登录状态点击商品查看商品的详细信息时,系统会自动给用户推荐个人经常浏览的商品。如表4-10所示:
表4-10 推荐表结构
字段名 |
类型 |
描述 |
re_id |
int |
推荐编号 |
u_id |
int |
用户编号 |
g_id |
int |
商品编号 |
smallid |
int |
商品小分类 |
(11)order_item:订单商品表。该表存储着商品和订单的关系,包括订单表一对多商品对应的商品信息。如表4-11所示:
表4-11 订单商品表结构
字段名 |
类型 |
描述 |
order_itemid |
int |
订单商品主键 |
o_id |
int |
订单主键 |
g_id |
int |
商品编号 |
g_name |
varchar(55) |
商品名称 |
item_price |
double |
商品单价 |
g_count |
int |
商品数量 |
(12)csorder:订单表。该表存储了一个用户该条订单对应的商品的详细信息。如表4-12所示:
表4-12 订单表结构
字段名 |
类型 |
描述 |
o_id |
int |
订单主键 |
orderId |
varchar(55) |
订单编号 |
u_id |
int |
用户编号 |
u_phone |
varchar(11) |
用户电话 |
order_time |
varchar(23) |
订单生成时间 |
o_total |
double |
总价 |
u_address |
varchar(255) |
用户地址 |
o_status |
enum('0','1') |
状态 |
(13)evaluate:评价表。该表存储了每个用户对哪一条商品的评论信息。如表4-13所示:
表4-13 评价表结构
字段名 |
类型 |
描述 |
Id |
int |
评价编号 |
orderid |
Varchar(25) |
订单编号 |
G_id |
int |
商品编号 |
U_id |
int |
用户编号 |
Create_time |
Varchar(25) |
创建时间 |
Agree |
int |
产品相似 |
Service |
Int |
服务评价 |
content |
varchar |
评价内容 |
Images |
Varchar(25) |
评价图片 |
Isshow |
Int |
是否显示 |
oId |
Int |
订单id |
(14)banner:轮播图表。该表存储着前台轮播图展示的图片信息。如表4-14所示:
表4-14 轮播图表结构
字段名 |
类型 |
描述 |
Chart_id |
int |
轮播图主键 |
title |
varchar(55) |
轮播图标题 |
imageUrl |
varchar(55) |
图片地址 |
linkUrl |
varchar(55) |
图片链接 |
gmtCreate |
varchar(55) |
轮播图添加时间 |
(15)admin:管理员表。该表存储着管理员信息。如表4-15所示:
表4-15 管理员表结构
字段名 |
类型 |
描述 |
a_id |
int |
主键 |
username |
varchar(55) |
管理员用户名 |
password |
varchar(55) |
管理员密码 |
photo |
varchar(55) |
管理员头像 |
三,系统展示
用户注册
用户登录
个人中心
汽车浏览
分类展示
商品评论
购物车
我的订单
后台管理
用户管理
商品管理
评论管理
四,核心代码展示
package com.qst.controller.admin; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.qst.dao.university.AdminMapper; import com.qst.pojo.ResultInfo; import com.qst.pojo.university.Admin; import com.qst.service.admin.AdminService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/admin") public class AdminController { @Autowired AdminService adminService; @Autowired AdminMapper adminMapper; @RequestMapping("/login") public ResultInfo login(String username,String password){ Admin admin = null; try { admin = adminService.login(username, password); } catch (Exception e) { e.printStackTrace(); } //管理员登录 if (admin!=null){ return new ResultInfo(true,admin,"登录成功"); }else { return new ResultInfo(false,null,"用户名或者密码错误"); } } //查询所有的管理员列表,通过条件分页查询 @RequestMapping("/AdminList") public ResultInfo AdminList(@RequestParam(name = "currentPage" ,defaultValue = "1") int pageNum , @RequestParam(name = "pageSize" ,defaultValue = "5") int pageSize,String username,String isDelete){ PageHelper.startPage(pageNum,pageSize); List<Admin> admins=adminService.AdminList(username,isDelete); PageInfo pageInfo=new PageInfo(admins); return new ResultInfo(true,pageInfo,null); } //修改管理员状态 @RequestMapping("/DeleteAdmin") public ResultInfo DeleteAdmin(Admin admin){ boolean b; b=adminService.DeleteAdmin(admin); if (b){ return new ResultInfo(true,null,"修改成功"); }else { return new ResultInfo(false,null,"修改失败"); } } //添加管理员用户 @RequestMapping("/addAdmin") public ResultInfo addAdmin(Admin admin){ boolean b=adminService.addAdmin(admin); if (b){ return new ResultInfo(true,null,null); }else { return new ResultInfo(false,null,"用户名重复"); } } //查询管理员信息 @RequestMapping("/GetInfo") public ResultInfo GetInfo(Integer aId){ Admin admin = adminMapper.selectByPrimaryKey(aId); return new ResultInfo(true,admin,null); } //修改密码 @RequestMapping("/UpdataInfo") public ResultInfo UpdataInfo(Admin admin,String new_password){ Admin num=adminService.UpdataInfo(admin,new_password); if (num!=null){ return new ResultInfo(true,num,null); }else { return new ResultInfo(false,null,"新密码不能和旧密码一致!"); } } }
package com.qst.controller.home; import com.github.pagehelper.Page; import com.github.pagehelper.PageInfo; import com.qst.pojo.ResultInfo; import com.qst.pojo.university.BigplusType; import com.qst.pojo.university.Goods; import com.qst.pojo.vo.Goods_List; import com.qst.service.home.HomeGoodsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/home/goods") public class HomeGoodsController { @Autowired HomeGoodsService homeGoodsService; /** * 查询新商品的专区 * @return */ @RequestMapping("/NewGoods") public ResultInfo NewGoods(){ try { List<Goods> list = homeGoodsService.NewGoods(); return new ResultInfo(true,list,"查询成功"); } catch (Exception e) { e.printStackTrace(); return new ResultInfo(false,null,"查询失败"); } } //通过大分类查询所有的商品 @RequestMapping("/GoodsList") public ResultInfo GoodsList(){ try { List<Goods_List> list=homeGoodsService.GoodsList(); return new ResultInfo(true,list,"查询成功"); } catch (Exception e) { e.printStackTrace(); return new ResultInfo(false,null,"查询失败"); } } /** * 通过分类id查询所有的商品进行分页 * @param class_info * @param goods_type * @param pageNum * @param pageSize * @return */ @RequestMapping("/GoodsById") public ResultInfo GoodsById(int class_info, int goods_type,@RequestParam(name = "pageNum" ,defaultValue = "1") int pageNum , @RequestParam(name = "pageSize" ,defaultValue = "5") int pageSize,String keywords){ try { List<Goods> list= homeGoodsService.GoodsById(class_info,goods_type,keywords); // System.out.println(list+""+class_info+" "+goods_type); // System.out.println(list); PageInfo pageInfo = getPageInfo(pageNum, pageSize, list); // return new ResultInfo(true,null,"查询成功"); return new ResultInfo(true,pageInfo,"查询成功"); } catch (Exception e) { e.printStackTrace(); return new ResultInfo(false,null,"查询失败"); } } /** * pagehelper手动分页 * @param currentPage 当前页 * @param pageSize * @param list * @param <T> * @return */ public static <T> PageInfo<T> getPageInfo(int currentPage, int pageSize, List<T> list) { int total = list.size(); if (total > pageSize) { int toIndex = pageSize * currentPage; if (toIndex > total) { toIndex = total; } list = list.subList(pageSize * (currentPage - 1), toIndex); } Page<T> page = new Page<>(currentPage, pageSize); page.addAll(list); page.setPages((total + pageSize - 1) / pageSize); page.setTotal(total); PageInfo<T> pageInfo = new PageInfo<>(page); return pageInfo; } /** * 通过大分类id查询,该大分类下对应的小分类 * @param bigp * @return */ @RequestMapping("/SelectTypeById") public ResultInfo SelectTypeById(int bigp){ try { BigplusType bigplusType=homeGoodsService.SelectTypeById(bigp); return new ResultInfo(true,bigplusType,"成功"); } catch (Exception e) { e.printStackTrace(); return new ResultInfo(false,null,"失败"); } } /** * 通过商品的id查询该商品的详细信息 * @param goods_id * @return */ @RequestMapping("/homeGetGoodsInfoById") public ResultInfo homeGetGoodsInfoById(int goods_id){ try { Goods goods = homeGoodsService.homeGetGoodsInfoById(goods_id); return new ResultInfo(true,goods,"查询商品详细信息成功"); } catch (Exception e) { e.printStackTrace(); return new ResultInfo(false,null,"查询商品详细信息失败!"); } } //商品推荐 @RequestMapping("/GoodsSaleList") public ResultInfo GoodsSaleList(Integer gId){ List<Goods> list= homeGoodsService.GoodsSaleList(gId); return new ResultInfo(true,list,null); } }
五,相关作品展示
基于Java开发、Python开发、PHP开发、C#开发等相关语言开发的实战项目
基于Nodejs、Vue等前端技术开发的前端实战项目
基于微信小程序和安卓APP应用开发的相关作品
基于51单片机等嵌入式物联网开发应用
基于各类算法实现的AI智能应用
基于大数据实现的各类数据管理和推荐系统