基于javaweb+mysql的springboot嘟嘟图片展览馆管理系统(java+springboot+springmvc+jpa+html+maven+mysql+redis)
运行环境
Java≥8、MySQL≥5.7
开发工具
eclipse/idea/myeclipse/sts等均可配置运行
适用
课程设计,大作业,毕业设计,项目练习,学习演示等
功能说明
基于javaweb+mysql的SpringBoot嘟嘟图片展览馆管理系统(java+springboot+springmvc+jpa+html+maven+mysql+redis)
一、项目运行 环境配置:
Jdk1.8 + Tomcat8.5 + mysql + Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)
项目技术:
Springboot+ SpringMVC + JPA+ Jsp + Html+ JavaScript + JQuery + Ajax + maven等等
/**
* 功能描述:删除举报列表
* 作者: wangzenghui
*/
ResponseBo delComplains(int compid) throws Exception;
}
@Component
public class LoginInterceptor implements HandlerInterceptor {
// 在请求处理之前调用,只有返回true才会执行要执行的请求
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
httpServletResponse.setCharacterEncoding("UTF-8");
String token = httpServletRequest.getHeader("accessToken");
if (null == token) {
Map<String, Object> map = new HashMap<>();
map.put("data", "token is null");
map.put("code", "401");
httpServletResponse.getWriter().write(new JSONObject(map).toString());
return false;
} else {
boolean result = TokenSign.verify(token);
@RequestMapping("/delComplains.do")
public ResponseBo delComplains(int compid){
ResponseBo responseBo=new ResponseBo();
log.info("进入 delComplains 方法");
try {
responseBo=adminService.delComplains(compid);
} catch (Exception e) {
log.info("delComplains 方法出现异常");
e.printStackTrace();
}
return responseBo;
}
}
public interface TestService {
/**
* 功能描述:注册
* 作者: wangzenghui
*/
ResponseBo reg(USERS users) throws Exception;
/**
* 功能描述:登录
* 作者: wangzenghui
*/
return responseBo;
}
/**
* 功能描述:获取根据点赞量排序的图片
* 作者: wangzenghui
*/
@RequestMapping(value = "/selectAllOrderByThumb.do",method = {RequestMethod.POST, RequestMethod.GET})
public ResponseBo selectAllOrderByThumb(HttpServletRequest request){
ResponseBo responseBo=new ResponseBo();
try {
responseBo=testService.selectAllOrderByThumb();
} catch (Exception e) {
log.error("获取失败",e);
responseBo.setResMsg("获取失败");
}
return responseBo;
}
/**
* 功能描述:根据用户id获取图片
* 作者: wangzenghui
*/
@RequestMapping(value = "/getImgByUser.do",method = {RequestMethod.POST, RequestMethod.GET})
public ResponseBo getImgByUser(HttpServletRequest request){
ResponseBo responseBo=new ResponseBo();
try {
String user=request.getParameter("userid");
int userid=Integer.parseInt(user);
responseBo=testService.getImgByUser(userid);
} catch (Exception e) {
log.error("获取失败",e);
responseBo.setResMsg("获取失败");
}
return responseBo;
}
/**
* 功能描述:修改图片
* 作者: wangzenghui
*/
/**
* 功能描述:关注用户
* 作者: wangzenghui
*/
@RequestMapping(value = "/attention.do",method = {RequestMethod.POST, RequestMethod.GET})
public ResponseBo attention(HttpServletRequest request){
ResponseBo responseBo=new ResponseBo();
try {
String at=request.getParameter("atid");
String fan=request.getParameter("fanid");
int atid=Integer.parseInt(at);
int fanid=Integer.parseInt(fan);
responseBo=testService.attention(atid,fanid);
} catch (Exception e) {
log.error("关注失败",e);
responseBo.setResMsg("关注失败");
}
return responseBo;
}
/**
* 功能描述:取消关注
* 作者: wangzenghui
*/
@RequestMapping(value = "/unattention.do",method = {RequestMethod.POST, RequestMethod.GET})
public ResponseBo unattention(HttpServletRequest request){
ResponseBo responseBo=new ResponseBo();
try {
String at=request.getParameter("atid");
String fan=request.getParameter("fanid");
int atid=Integer.parseInt(at);
int fanid=Integer.parseInt(fan);
responseBo=testService.unattention(atid,fanid);
} catch (Exception e) {
log.error("取消关注失败",e);
responseBo.setResMsg("取消关注失败");
}
return responseBo;
}
/**
* 功能描述:注销
responseBo = testService.selectAudiImgLikeName(name);
else if (type.equals("评论"))
responseBo = testService.selectCommentsLikeName(name);
}
} catch (Exception e) {
log.error("查询失败",e);
responseBo.setResMsg("查询失败");
}
return responseBo;
}
/**
* 功能描述:根据类型获取图片
* 作者: wangzenghui
*/
@RequestMapping(value = "/getImgsByType.do",method = {RequestMethod.POST, RequestMethod.GET})
public ResponseBo getImgsByType(HttpServletRequest request){
ResponseBo responseBo=new ResponseBo();
try {
String type=request.getParameter("typeid");
int typeid=Integer.parseInt(type);
responseBo=testService.getImgsByType(typeid);
} catch (Exception e) {
log.error("获取失败",e);
responseBo.setResMsg("获取失败");
}
return responseBo;
}
/**
* 功能描述:获取根据点赞量排序的图片
* 作者: wangzenghui
*/
@RequestMapping(value = "/selectAllOrderByThumb.do",method = {RequestMethod.POST, RequestMethod.GET})
public ResponseBo selectAllOrderByThumb(HttpServletRequest request){
ResponseBo responseBo=new ResponseBo();
try {
responseBo=testService.selectAllOrderByThumb();
} catch (Exception e) {
log.error("获取失败",e);
responseBo.setResMsg("获取失败");
}
return responseBo;
}
/**
* 作者: wangzenghui
*/
ResponseBo addComplains(COMPLAINS complains) throws Exception;
}
public interface AdminService {
/**
* 功能描述:管理员登录
* 作者: wangzenghui
*/
ResponseBo login(String name,String password) throws Exception;
/**
* 功能描述:获得所有用户信息
* 作者: wangzenghui
*/
ResponseBo getUsers() throws Exception;
/**
* 功能描述:通过id删除用户
* 作者: wangzenghui
*/
ResponseBo deleteUserById(int userid) throws Exception;
/**
* 功能描述:获取被封禁的用户
* 作者: wangzenghui
*/
ResponseBo getBanUsers() throws Exception;
/**
* 功能描述:封禁用户
return responseBo;
}
@Override
public ResponseBo getTypeByid(int typeid) throws Exception {
ResponseBo responseBo = new ResponseBo();
TYPES types = typesMapper.selectByPrimaryKey(typeid);
if (types == null) {
responseBo.setResMsg("查询失败");
return responseBo;
}
responseBo.setResMsg("查询成功");
responseBo.setResult(types);
return responseBo;
}
@Override
public ResponseBo updateType(int typeid, String typename) throws Exception {
ResponseBo responseBo = new ResponseBo();
int res = 0;
TYPES newtypes = new TYPES();
newtypes.setId(typeid);
newtypes.setName(typename);
res = typesMapper.updateByPrimaryKey(newtypes);
if (res == 0) {
responseBo.setResMsg("更新失败");
return responseBo;
}
responseBo.setResMsg("更新成功");
return responseBo;
}
@Override
public ResponseBo deleteType(int typeid) throws Exception {
ResponseBo responseBo = new ResponseBo();
int res = 0;
List result = imagesMapper.selectByType(typeid);
if (result != null && result.size() > 0) {
responseBo.setResMsg("删除失败,该类型还有图片");
return responseBo;
}
res = typesMapper.deleteByPrimaryKey(typeid);
String token=request.getHeader("accessToken");
if (token!=null) {
if (TokenSign.verify(token)) {
ADMINS admins = new ADMINS();
admins.setName(TokenSign.getUsername(token));
admins.setId(Integer.parseInt(TokenSign.getUserId(token)));
admins.setPic(TokenSign.getUserPic(token));
responseBo.setResult(admins);
return responseBo;
} else {
responseBo.setResMsg("token失效");
return responseBo;
}
}
try {
log.info("admin/AdminController======>login 进入接口,入参:name=",name);
responseBo=adminService.login(name,password);
} catch (Exception e) {
log.error("admin/AdminController======>login 登录方法出错:{}",e);
responseBo.setResMsg("登录失败");
responseBo.setResult(e);
}
return responseBo;
}
/**
* 功能描述:获取所有用户信息
* 作者: wangzenghui
*/
@RequestMapping(value = "/getUsers.do",method = RequestMethod.GET)
public ResponseBo getUsers(HttpServletRequest request){
log.info("admin/AdminController======>getUsers 进入方法");
ResponseBo responseBo=new ResponseBo();
try {
log.info("admin/AdminController======>getUsers 进入接口,入参:无");
responseBo=adminService.getUsers();
} catch (Exception e) {
log.error("admin/AdminController======>getUsers 方法出错:{}",e);
responseBo.setResMsg("查询失败");
responseBo.setResult(e);
}
responseBo.setResult(result);
return responseBo;
}
@Cacheable(value = "imgscache")
@Override
public ResponseBo selectAllOrderByThumb() throws Exception {
ResponseBo responseBo = new ResponseBo();
List result = imagesMapper.selectAllOrderByThumb();
if (result == null) {
log.info("获取失败");
responseBo.setResMsg("获取失败");
return responseBo;
}
log.info("selectAllOrderByThumb 方法 出参 result:" + result);
responseBo.setResMsg("获取成功");
responseBo.setResult(result);
return responseBo;
}
@Override
public ResponseBo getImgByUser(int userid) throws Exception {
ResponseBo responseBo = new ResponseBo();
List images = imagesMapper.selectByUser(userid);
if (images == null) {
log.info("获取失败");
responseBo.setResMsg("获取失败");
return responseBo;
}
log.info("getImgByUser 方法 出参 result:" + images);
responseBo.setResMsg("获取成功");
responseBo.setResult(images);
return responseBo;
}
@Caching(evict = {@CacheEvict(value = "imgscache", allEntries = true)})
@Override
public ResponseBo updateImg(IMAGES images) throws Exception {
ResponseBo responseBo = new ResponseBo();
IMAGES imgDB = imagesMapper.selectByPrimaryKey(images.getId());
if (type == null || type.equals("图片"))
responseBo = testService.selectImgLikeName(name);
else if (type.equals("用户"))
responseBo = testService.selectUserLikeName(name);
else if (type.equals("封禁用户"))
responseBo = testService.selectBanUserLikeName(name);
else if (type.equals("待审核图片"))
responseBo = testService.selectAudiImgLikeName(name);
else if (type.equals("评论"))
responseBo = testService.selectCommentsLikeName(name);
}
} catch (Exception e) {
log.error("查询失败",e);
responseBo.setResMsg("查询失败");
}
return responseBo;
}
/**
* 功能描述:根据类型获取图片
* 作者: wangzenghui
*/
@RequestMapping(value = "/getImgsByType.do",method = {RequestMethod.POST, RequestMethod.GET})
public ResponseBo getImgsByType(HttpServletRequest request){
ResponseBo responseBo=new ResponseBo();
try {
String type=request.getParameter("typeid");
int typeid=Integer.parseInt(type);
responseBo=testService.getImgsByType(typeid);
} catch (Exception e) {
log.error("获取失败",e);
responseBo.setResMsg("获取失败");
}
return responseBo;
}
/**
* 功能描述:获取根据点赞量排序的图片
* 作者: wangzenghui
*/
@RequestMapping(value = "/selectAllOrderByThumb.do",method = {RequestMethod.POST, RequestMethod.GET})
public ResponseBo selectAllOrderByThumb(HttpServletRequest request){
ResponseBo responseBo=new ResponseBo();
try {
responseBo=testService.selectAllOrderByThumb();
} catch (Exception e) {
log.error("获取失败",e);
responseBo.setResMsg("获取失败");
}
@Override
public ResponseBo getTypes() throws Exception {
ResponseBo responseBo = new ResponseBo();
List result = typesMapper.selectAll();
if (result == null) {
responseBo.setResMsg("查询失败");
return responseBo;
}
responseBo.setResMsg("查询成功");
responseBo.setResult(result);
return responseBo;
}
@Override
public ResponseBo getTypeByid(int typeid) throws Exception {
ResponseBo responseBo = new ResponseBo();
TYPES types = typesMapper.selectByPrimaryKey(typeid);
if (types == null) {
responseBo.setResMsg("查询失败");
return responseBo;
}
responseBo.setResMsg("查询成功");
responseBo.setResult(types);
return responseBo;
}
@Override
public ResponseBo updateType(int typeid, String typename) throws Exception {
ResponseBo responseBo = new ResponseBo();
int res = 0;
TYPES newtypes = new TYPES();
newtypes.setId(typeid);
newtypes.setName(typename);
res = typesMapper.updateByPrimaryKey(newtypes);
if (res == 0) {
responseBo.setResMsg("更新失败");
return responseBo;
}
responseBo.setResMsg("更新成功");
return responseBo;
}
@Override
ArrayList<String> names= StringUtil.split(name);
if (names.size()>1){
responseBo=testService.selectImgLikeName2(names);
}else {
if (type == null || type.equals("图片"))
responseBo = testService.selectImgLikeName(name);
else if (type.equals("用户"))
responseBo = testService.selectUserLikeName(name);
else if (type.equals("封禁用户"))
responseBo = testService.selectBanUserLikeName(name);
else if (type.equals("待审核图片"))
responseBo = testService.selectAudiImgLikeName(name);
else if (type.equals("评论"))
responseBo = testService.selectCommentsLikeName(name);
}
} catch (Exception e) {
log.error("查询失败",e);
responseBo.setResMsg("查询失败");
}
return responseBo;
}
/**
* 功能描述:根据类型获取图片
* 作者: wangzenghui
*/
@RequestMapping(value = "/getImgsByType.do",method = {RequestMethod.POST, RequestMethod.GET})
public ResponseBo getImgsByType(HttpServletRequest request){
ResponseBo responseBo=new ResponseBo();
try {
String type=request.getParameter("typeid");
int typeid=Integer.parseInt(type);
responseBo=testService.getImgsByType(typeid);
} catch (Exception e) {
log.error("获取失败",e);
responseBo.setResMsg("获取失败");
}
return responseBo;
}
responseBo.setResMsg("取消关注失败");
return responseBo;
}
log.info("unattention 方法 出参 res:" + res);
responseBo.setResMsg("取消关注成功");
return responseBo;
}
@Override
public ResponseBo logout(HttpServletRequest request) throws Exception {
ResponseBo responseBo = new ResponseBo();
responseBo.setResMsg("注销成功");
// request.getSession().invalidate();
return responseBo;
}
@Cacheable(value = "pointscache")
@Override
public ResponseBo getPoints(int uid) throws Exception {
ResponseBo responseBo = new ResponseBo();
POINTS points = pointsMapper.selectByUid(uid);
if (points == null) {
log.info("获取失败");
responseBo.setResMsg("获取失败");
return responseBo;
}
log.info("getPoints 方法 出参 result:" + points);
responseBo.setResMsg("获取成功");
responseBo.setResult(points);
return responseBo;
}
@Caching(evict = {@CacheEvict(value = "pointscache", allEntries = true)})
@Override
public ResponseBo purchaseImg(int uid, int imgid) throws Exception {
ResponseBo responseBo = new ResponseBo();
PURCHASE purchase = new PURCHASE();
purchase.setImgid(imgid);
purchase.setUid(uid);
PURCHASE purchase1 = purchaseMapper.selectByUserAndImg(uid, imgid);
if (purchase1 != null) {
responseBo.setResMsg("已购买,不用再次购买");
return responseBo;
}
}
responseBo.setResMsg("查询成功");
responseBo.setResult(result);
} catch (Exception e) {
responseBo.setResMsg("查询出错");
return responseBo;
}
return responseBo;
}
@Caching(evict = {@CacheEvict(value = "commentscache", allEntries = true)})
@Override
public ResponseBo deleteUserById(int userid) throws Exception {
ResponseBo responseBo = new ResponseBo();
commentsMapper.deleteByUserId(userid);
int res = usersMapper.deleteByPrimaryKey(userid);
if (res == 0) {
responseBo.setResMsg("删除失败");
return responseBo;
}
responseBo.setResMsg("删除成功");
return responseBo;
}
@Override
public ResponseBo getBanUsers() throws Exception {
ResponseBo responseBo = new ResponseBo();
List result = usersMapper.selectBanUsers();
if (result == null) {
responseBo.setResMsg("查询失败");
return responseBo;
}
responseBo.setResMsg("查询成功");
responseBo.setResult(result);
return responseBo;
}
@Override
public ResponseBo banUser(int userid) throws Exception {
ResponseBo responseBo = new ResponseBo();
USERS users = new USERS();
users.setId(userid);
users.setBan((short) 1);
int res = usersMapper.updateByPrimaryKeySelective(users);
if (res == 0) {
responseBo.setResMsg("封禁失败");
responseBo.setResMsg("token失效");
return responseBo;
}
}
try {
log.info("admin/AdminController======>login 进入接口,入参:name=",name);
responseBo=adminService.login(name,password);
} catch (Exception e) {
log.error("admin/AdminController======>login 登录方法出错:{}",e);
responseBo.setResMsg("登录失败");
responseBo.setResult(e);
}
return responseBo;
}
/**
* 功能描述:获取所有用户信息
* 作者: wangzenghui
*/
@RequestMapping(value = "/getUsers.do",method = RequestMethod.GET)
public ResponseBo getUsers(HttpServletRequest request){
log.info("admin/AdminController======>getUsers 进入方法");
ResponseBo responseBo=new ResponseBo();
try {
log.info("admin/AdminController======>getUsers 进入接口,入参:无");
responseBo=adminService.getUsers();
} catch (Exception e) {
log.error("admin/AdminController======>getUsers 方法出错:{}",e);
responseBo.setResMsg("查询失败");
responseBo.setResult(e);
}
return responseBo;
}
/**
* 功能描述:通过id删除用户
* 作者: wangzenghui
*/
@RequestMapping(value = "/deleteUserById.do",method = {RequestMethod.POST, RequestMethod.GET})
public ResponseBo deleteUserById(HttpServletRequest request){
ResponseBo responseBo=new ResponseBo();
try {
String userid=request.getParameter("userid");
int userid2=Integer.parseInt(userid);
responseBo=adminService.deleteUserById(userid2);
} catch (Exception e) {
log.error("删除失败",e);
responseBo.setResMsg("删除失败");
}
return responseBo;
//正确的类型,保存文件
byte[] bytes = file.getBytes();
newName = new Date().getTime() + "." + suffix;
// File savedFile = new File(paths+"/src/main/resources/static/images/"+newName);//这里的路径根据自己的要求进行设置,有关路径配置的问题参考文章下半内容
File savedFile = new File(imageDir + "/" + newName);//这里的路径根据自己的要求进行设置,有关路径配置的问题参考文章下半内容
BufferedOutputStream stream = new BufferedOutputStream(new FileOutputStream(savedFile));
stream.write(bytes);
stream.close();
System.out.println("图片上传完毕,存储地址为:" + savedFile.getAbsolutePath());
} else {
responseBo.setResMsg("图片类型不支持");
return responseBo;
}
}
log.info("名字:" + name);
if (name.equals(""))
name = users.getName();
users.setName(name);
users.setPic(newName);
int res = usersMapper.updateByPrimaryKeySelective(users);
responseBo.setResult(users);
String newToken = TokenSign.sign(users.getName(), String.valueOf(users.getId()), users.getPic());
responseBo.setAccessToken(newToken);
return responseBo;
}
@Override
public ResponseBo updatePass(String pass, String newpass, int userid) throws Exception {
ResponseBo responseBo = new ResponseBo();
int res = 0;
USERS users = usersMapper.selectByPrimaryKey(userid);
MD5Util md5Util = new MD5Util();
if (!md5Util.EncoderByMd5(pass).equals(users.getPassword())) {
responseBo.setResMsg("原密码错误");
return responseBo;
}
users.setPassword(md5Util.EncoderByMd5(newpass));
res = usersMapper.updateByPrimaryKey(users);
/**
* 功能描述:获得充值表数据
* 作者: wangzenghui
*/
ResponseBo getDeposits() throws Exception;
/**
* 功能描述:添加积分,删除充值表
* 作者: wangzenghui
*/
ResponseBo addPoint(POINTS points) throws Exception;
/**
* 功能描述:获取评论
* 作者: wangzenghui
*/
ResponseBo getComments() throws Exception;
/**
* 功能描述:获取举报列表
* 作者: wangzenghui
*/
ResponseBo getComplains() throws Exception;
/**
* 功能描述:删除举报列表
* 作者: wangzenghui
*/
ResponseBo delComplains(int compid) throws Exception;
}
*/
ResponseBo addComments(COMMENTS comments,int imgid) throws Exception;
/**
* 功能描述:获取评论
* 作者: wangzenghui
*/
ResponseBo getComments(int imgid) throws Exception;
/**
* 功能描述:删除评论
* 作者: wangzenghui
*/
ResponseBo delComments(int comid) throws Exception;
/**
* 功能描述:举报评论
* 作者: wangzenghui
*/
ResponseBo addComplains(COMPLAINS complains) throws Exception;
}
public interface AdminService {
/**
* 功能描述:管理员登录
* 作者: wangzenghui
*/
ResponseBo login(String name,String password) throws Exception;
/**