🍅 作者简介:CSDN特邀作者✌、java领域优质创作者💪
🍅关注公众号【java李杨勇】 简历模板、学习资料、面试题库等都给你
🍅文末获取源码联系🍅
一、前言介绍:
随着社会的快速发展,计算机的影响是全面且深入的。人们生活水平的不断提高,日常生活中用户对手办周边商城方面的要求也在不断提高,而漫威系列手办周边商城得到广大用户的青睐,使得漫威系列手办周边商城的开发成为必需而且紧迫的事情。漫威系列手办周边商城主要是借助计算机,通过对漫威系列手办周边商城所需的信息管理,增加用户的选择,同时也方便对广大用户信息的及时查询、修改以及对用户信息的及时了解。手办周边商城对用户带来了更多的便利,该系统通过和数据库管理系统软件协作来满足用户的需求。计算机技术在现代管理中的应用,使计算机成为人们应用现代技术的重要工具。能够有效的解决获取信息便捷化、全面化的问题,提高效率。
二、功能设计:
本漫威系列手办周边商城系统主要功能设计为实现管理员;个人中心、系统公告管理、用户管理、商品系列管理、商品信息管理、订单评价管理、论坛管理、系统管理、订单管理,用户;个人中心、订单评价管理、我的收藏管理、订单管理,前台首页;首页、商品信息、论坛信息、我的、跳转到后台、购物车客服等信息管理功能。系统操作流程如下:
三、功能截图:
普通用户登录注册:
首页主要功能介绍:商品信息、论坛信息、我的、跳转到后台、购物车客服等信息管理功能
商品详情:可加入购物车、修改数量、立即购买和收藏商品
商品详情可以配置图文介绍等
商品评论交流模块
添加了论坛帖子系列功能:普通用户可以发布、可以对帖子进行交流讨论等
帖子详情数据查看、可以在底部评论
在我的个人中心可以查看我的发布、我的订单、我的地址修改以及我的收藏模块和个人信息模块
购物车模块:要选择收货地址信息等
我的订单模块:
我的收藏模块:
普通用户后台中心:
订单评价:
收藏管理:
订单信息管理:
四、 后端主要功能:
修改密码:
用户管理:
商品系列管理:
商品信息管理:
商品详情修改:
商品评价管理:
论坛管理:
客服管理:
首页轮播图管理:
订单信息管理:
五、数据库设计:
表address (地址)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
1 |
id |
bigint |
20 |
0 |
N |
Y |
2 |
addtime |
timestamp |
19 |
0 |
N |
N |
3 |
userid |
bigint |
20 |
0 |
N |
N |
4 |
address |
varchar |
200 |
0 |
N |
N |
5 |
name |
varchar |
200 |
0 |
N |
N |
6 |
phone |
varchar |
200 |
0 |
N |
N |
7 |
isdefault |
varchar |
200 |
0 |
N |
N |
表cart (购物车表)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
1 |
id |
bigint |
20 |
0 |
N |
Y |
2 |
addtime |
timestamp |
19 |
0 |
N |
N |
3 |
tablename |
varchar |
200 |
0 |
Y |
N |
4 |
userid |
bigint |
20 |
0 |
N |
N |
5 |
goodid |
bigint |
20 |
0 |
N |
N |
6 |
goodname |
varchar |
200 |
0 |
Y |
N |
7 |
picture |
varchar |
200 |
0 |
Y |
N |
8 |
buynumber |
int |
10 |
0 |
N |
N |
9 |
price |
float |
13 |
0 |
Y |
N |
10 |
discountprice |
float |
13 |
0 |
Y |
N |
表chat (客服聊天表)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
说明 |
1 |
id |
bigint |
20 |
0 |
N |
Y |
主键 |
2 |
addtime |
timestamp |
19 |
0 |
N |
N |
创建时间 |
3 |
userid |
bigint |
20 |
0 |
N |
N |
用户id |
4 |
adminid |
bigint |
20 |
0 |
Y |
N |
管理员id |
5 |
ask |
longtext |
2147483647 |
0 |
Y |
N |
提问 |
6 |
reply |
longtext |
2147483647 |
0 |
Y |
N |
回复 |
7 |
isreply |
int |
10 |
0 |
Y |
N |
是否回复 |
表config (配置文件)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
说明 |
1 |
id |
bigint |
20 |
0 |
N |
Y |
主键 |
2 |
name |
varchar |
100 |
0 |
N |
N |
配置参数名称 |
3 |
value |
varchar |
100 |
0 |
Y |
N |
配置参数值 |
表dingdanpingjia (订单评价)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
说明 |
1 |
id |
bigint |
20 |
0 |
N |
Y |
主键 |
2 |
addtime |
timestamp |
19 |
0 |
N |
N |
创建时间 |
3 |
dingdanbianhao |
varchar |
200 |
0 |
N |
N |
订单编号 |
4 |
shangpinbianhao |
varchar |
200 |
0 |
Y |
N |
商品编号 |
5 |
shangpinmingcheng |
varchar |
200 |
0 |
N |
N |
商品名称 |
6 |
shangpinxilie |
varchar |
200 |
0 |
Y |
N |
商品系列 |
7 |
pingfen |
varchar |
200 |
0 |
Y |
N |
评分 |
8 |
pingjianeirong |
longtext |
2147483647 |
0 |
Y |
N |
评价内容 |
9 |
tianjiatupian |
varchar |
200 |
0 |
Y |
N |
添加图片 |
10 |
pingjiariqi |
date |
10 |
0 |
Y |
N |
评价日期 |
11 |
yonghuming |
varchar |
200 |
0 |
Y |
N |
用户名 |
12 |
lianxidianhua |
varchar |
200 |
0 |
Y |
N |
联系电话 |
13 |
sfsh |
varchar |
200 |
0 |
Y |
N |
是否审核 |
14 |
shhf |
longtext |
2147483647 |
0 |
Y |
N |
审核回复 |
表discussshangpinxinxi (商品信息评论表)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
说明 |
1 |
id |
bigint |
20 |
0 |
N |
Y |
主键 |
2 |
addtime |
timestamp |
19 |
0 |
N |
N |
创建时间 |
3 |
refid |
bigint |
20 |
0 |
N |
N |
关联表id |
4 |
userid |
bigint |
20 |
0 |
N |
N |
用户id |
5 |
content |
longtext |
2147483647 |
0 |
N |
N |
评论内容 |
6 |
reply |
longtext |
2147483647 |
0 |
Y |
N |
回复内容 |
表discussxitonggonggao (系统公告评论表)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
说明 |
1 |
id |
bigint |
20 |
0 |
N |
Y |
主键 |
2 |
addtime |
timestamp |
19 |
0 |
N |
N |
创建时间 |
3 |
refid |
bigint |
20 |
0 |
N |
N |
关联表id |
4 |
userid |
bigint |
20 |
0 |
N |
N |
用户id |
5 |
content |
longtext |
2147483647 |
0 |
N |
N |
评论内容 |
6 |
reply |
longtext |
2147483647 |
0 |
Y |
N |
回复内容 |
表forum (论坛表)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
说明 |
1 |
id |
bigint |
20 |
0 |
N |
Y |
主键 |
2 |
addtime |
timestamp |
19 |
0 |
N |
N |
创建时间 |
3 |
title |
varchar |
200 |
0 |
Y |
N |
帖子标题 |
4 |
content |
longtext |
2147483647 |
0 |
N |
N |
帖子内容 |
5 |
parentid |
bigint |
20 |
0 |
Y |
N |
父节点id |
6 |
userid |
bigint |
20 |
0 |
N |
N |
用户id |
7 |
username |
varchar |
200 |
0 |
Y |
N |
用户名 |
8 |
isdone |
varchar |
200 |
0 |
Y |
N |
状态 |
表orders (订单)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
说明 |
1 |
id |
bigint |
20 |
0 |
N |
Y |
主键 |
2 |
addtime |
timestamp |
19 |
0 |
N |
N |
创建时间 |
3 |
orderid |
varchar |
200 |
0 |
N |
N |
订单编号 |
4 |
tablename |
varchar |
200 |
0 |
Y |
N |
商品表名 |
5 |
userid |
bigint |
20 |
0 |
N |
N |
用户id |
6 |
goodid |
bigint |
20 |
0 |
N |
N |
商品id |
7 |
goodname |
varchar |
200 |
0 |
Y |
N |
商品名称 |
8 |
picture |
varchar |
200 |
0 |
Y |
N |
商品图片 |
9 |
buynumber |
int |
10 |
0 |
N |
N |
购买数量 |
10 |
price |
float |
13 |
0 |
N |
N |
价格/积分 |
11 |
discountprice |
float |
13 |
0 |
Y |
N |
折扣价格 |
12 |
total |
float |
13 |
0 |
N |
N |
总价格/总积分 |
13 |
discounttotal |
float |
13 |
0 |
Y |
N |
折扣总价格 |
14 |
type |
int |
10 |
0 |
Y |
N |
支付类型 |
15 |
status |
varchar |
200 |
0 |
Y |
N |
状态 |
16 |
address |
varchar |
200 |
0 |
Y |
N |
地址 |
表shangpinxilie (商品系列)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
说明 |
1 |
id |
bigint |
20 |
0 |
N |
Y |
主键 |
2 |
addtime |
timestamp |
19 |
0 |
N |
N |
创建时间 |
3 |
shangpinxilie |
varchar |
200 |
0 |
N |
N |
商品系列 |
表shangpinxinxi (商品信息)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
说明 |
1 |
id |
bigint |
20 |
0 |
N |
Y |
主键 |
2 |
addtime |
timestamp |
19 |
0 |
N |
N |
创建时间 |
3 |
shangpinbianhao |
varchar |
200 |
0 |
Y |
N |
商品编号 |
4 |
shangpinmingcheng |
varchar |
200 |
0 |
N |
N |
商品名称 |
5 |
shangpinxilie |
varchar |
200 |
0 |
Y |
N |
商品系列 |
6 |
tupian |
varchar |
200 |
0 |
Y |
N |
图片 |
7 |
guige |
varchar |
200 |
0 |
Y |
N |
规格 |
8 |
shangpinxiangqing |
longtext |
2147483647 |
0 |
Y |
N |
商品详情 |
9 |
clicktime |
datetime |
19 |
0 |
Y |
N |
最近点击时间 |
10 |
clicknum |
int |
10 |
0 |
Y |
N |
点击次数 |
11 |
price |
float |
13 |
0 |
N |
N |
价格 |
表storeup (收藏表)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
说明 |
1 |
id |
bigint |
20 |
0 |
N |
Y |
主键 |
2 |
addtime |
timestamp |
19 |
0 |
N |
N |
创建时间 |
3 |
userid |
bigint |
20 |
0 |
N |
N |
用户id |
4 |
refid |
bigint |
20 |
0 |
Y |
N |
收藏id |
5 |
tablename |
varchar |
200 |
0 |
Y |
N |
表名 |
6 |
name |
varchar |
200 |
0 |
N |
N |
收藏名称 |
7 |
picture |
varchar |
200 |
0 |
N |
N |
收藏图片 |
表token (token表)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
说明 |
1 |
id |
bigint |
20 |
0 |
N |
Y |
主键 |
2 |
userid |
bigint |
20 |
0 |
N |
N |
用户id |
3 |
username |
varchar |
100 |
0 |
N |
N |
用户名 |
4 |
tablename |
varchar |
100 |
0 |
Y |
N |
表名 |
5 |
role |
varchar |
100 |
0 |
Y |
N |
角色 |
6 |
token |
varchar |
200 |
0 |
N |
N |
密码 |
7 |
addtime |
timestamp |
19 |
0 |
N |
N |
新增时间 |
8 |
expiratedtime |
timestamp |
19 |
0 |
N |
N |
过期时间 |
表users (用户表)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
说明 |
1 |
id |
bigint |
20 |
0 |
N |
Y |
主键 |
2 |
username |
varchar |
100 |
0 |
N |
N |
用户名 |
3 |
password |
varchar |
100 |
0 |
N |
N |
密码 |
4 |
role |
varchar |
100 |
0 |
Y |
N |
角色 |
5 |
addtime |
timestamp |
19 |
0 |
N |
N |
新增时间 |
表xitonggonggao (系统公告)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
说明 |
1 |
id |
bigint |
20 |
0 |
N |
Y |
主键 |
2 |
addtime |
timestamp |
19 |
0 |
N |
N |
创建时间 |
3 |
gonggaobiaoti |
varchar |
200 |
0 |
N |
N |
公告标题 |
4 |
gonggaoleixing |
varchar |
200 |
0 |
N |
N |
公告类型 |
5 |
tupian |
varchar |
200 |
0 |
Y |
N |
图片 |
6 |
neirong |
longtext |
2147483647 |
0 |
Y |
N |
内容 |
7 |
faburiqi |
date |
10 |
0 |
Y |
N |
发布日期 |
表yonghu (用户)
编号 |
名称 |
数据类型 |
长度 |
小数位 |
允许空值 |
主键 |
说明 |
1 |
id |
bigint |
20 |
0 |
N |
Y |
主键 |
2 |
addtime |
timestamp |
19 |
0 |
N |
N |
创建时间 |
3 |
yonghuming |
varchar |
200 |
0 |
N |
N |
用户名 |
4 |
mima |
varchar |
200 |
0 |
N |
N |
密码 |
5 |
xingming |
varchar |
200 |
0 |
N |
N |
姓名 |
6 |
xingbie |
varchar |
200 |
0 |
Y |
N |
性别 |
7 |
touxiang |
varchar |
200 |
0 |
Y |
N |
头像 |
8 |
lianxidianhua |
varchar |
200 |
0 |
Y |
N |
联系电话 |
9 |
money |
float |
13 |
0 |
Y |
N |
余额 |
六、关键代码:
/**
* 登录相关
*/
@RequestMapping("users")
@RestController
public class UserController{
@Autowired
private UserService userService;
@Autowired
private TokenService tokenService;
/**
* 登录
*/
@IgnoreAuth
// @PostMapping(value = "/login")
@RequestMapping(value = "/login", method ={RequestMethod.GET,RequestMethod.POST} )
public R login(String username, String password, String captcha, HttpServletRequest request) {
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null || !user.getPassword().equals(password)) {
return R.error("账号或密码不正确");
}
String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
return R.ok().put("token", token);
}
/**
* 注册
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 密码重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null) {
return R.error("账号不存在");
}
user.setPassword("123456");
userService.update(user,null);
return R.ok("密码已重置为:123456");
}
/**
* 列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/list")
public R list( UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
ew.allEq(MPUtil.allEQMapPre( user, "user"));
return R.ok().put("data", userService.selectListView(ew));
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 获取用户的session用户信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username", user.getUsername())) !=null) {
return R.error("用户已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody UserEntity user){
// ValidatorUtils.validateEntity(user);
userService.updateById(user);//全部更新
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
userService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 配置数据源 -->
<bean name="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
<property name="url" value="${jdbc_url}"/>
<property name="username" value="${jdbc_username}"/>
<property name="password" value="${jdbc_password}"/>
<!-- 初始化连接大小 -->
<property name="initialSize" value="0"/>
<!-- 连接池最大使用连接数量 -->
<property name="maxActive" value="20"/>
<!-- 连接池最大空闲 -->
<property name="maxIdle" value="20"/>
<!-- 连接池最小空闲 -->
<property name="minIdle" value="0"/>
<!-- 获取连接最大等待时间 -->
<property name="maxWait" value="60000"/>
<property name="validationQuery" value="${validationQuery}"/>
<property name="testOnBorrow" value="false"/>
<property name="testOnReturn" value="false"/>
<property name="testWhileIdle" value="true"/>
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
<property name="timeBetweenEvictionRunsMillis" value="60000"/>
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
<property name="minEvictableIdleTimeMillis" value="25200000"/>
<!-- 打开removeAbandoned功能 -->
<property name="removeAbandoned" value="true"/>
<!-- 1800秒,也就是30分钟 -->
<property name="removeAbandonedTimeout" value="1800"/>
<!-- 关闭abanded连接时输出错误日志 -->
<property name="logAbandoned" value="true"/>
<!-- 监控数据库 -->
<property name="filters" value="mergeStat"/>
</bean>
<!-- Spring整合Mybatis,更多查看文档:http://mp.baomidou.com -->
<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!-- 自动扫描Mapping.xml文件 -->
<property name="mapperLocations" value="classpath:mapper/*.xml"/>
<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>
<property name="typeAliasesPackage" value="com..model.*"/>
<property name="typeEnumsPackage" value="com.model.enums"/>
<property name="plugins">
<array>
<!-- 分页插件配置 -->
<bean id="paginationInterceptor" class="com.baomidou.mybatisplus.plugins.PaginationInterceptor">
</bean>
</array>
</property>
<!-- 全局配置注入 -->
<property name="globalConfig" ref="globalConfig" />
</bean>
<bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
<!--
AUTO->`0`("数据库ID自增")
INPUT->`1`(用户输入ID")
ID_WORKER->`2`("全局唯一ID")
UUID->`3`("全局唯一ID")
-->
<property name="idType" value="2" />
<!--
MYSQL->`mysql`
ORACLE->`oracle`
DB2->`db2`
H2->`h2`
HSQL->`hsql`
SQLITE->`sqlite`
POSTGRE->`postgresql`
SQLSERVER2005->`sqlserver2005`
SQLSERVER->`sqlserver`
-->
<!-- Oracle需要添加该项 -->
<!-- <property name="dbType" value="oracle" /> -->
<!-- 全局表为下划线命名设置 true -->
<!-- <property name="dbColumnUnderline" value="true" /> -->
<property name="metaObjectHandler">
<bean class="com.config.MyMetaObjectHandler" />
</property>
</bean>
<!-- MyBatis 动态扫描 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.dao"/>
</bean>
<!-- 配置事务管理 -->
<bean name="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 事务管理 属性 -->
<tx:advice id="transactionAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED"/>
<tx:method name="append*" propagation="REQUIRED"/>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="update*" propagation="REQUIRED"/>
<tx:method name="modify*" propagation="REQUIRED"/>
<tx:method name="edit*" propagation="REQUIRED"/>
<tx:method name="insert*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED"/>
<tx:method name="remove*" propagation="REQUIRED"/>
<tx:method name="repair" propagation="REQUIRED"/>
<tx:method name="get*" propagation="REQUIRED" read-only="true"/>
<tx:method name="find*" propagation="REQUIRED" read-only="true"/>
<tx:method name="load*" propagation="REQUIRED" read-only="true"/>
<tx:method name="search*" propagation="REQUIRED" read-only="true"/>
<tx:method name="datagrid*" propagation="REQUIRED" read-only="true"/>
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<!-- 配置切面 -->
<aop:config>
<aop:pointcut id="transactionPointcut" expression="execution(* com.service..*.*(..))"/>
<aop:advisor pointcut-ref="transactionPointcut" advice-ref="transactionAdvice"/>
</aop:config>
</beans>
七、论文报告:
八、源码获取:
大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻微信公众号获取联系方式👇🏻👇🏻👇🏻
打卡 文章 更新 200/ 365天
精彩专栏推荐订阅:在下方专栏👇🏻👇🏻👇🏻👇🏻
Java项目精品实战案例《100套》
web前端期末大作业网页实战《100套》