
前言介绍:
漫步校园中,偶尔会看到几只猫,或是晃做在小道上,或是蜷作一团躺在花坛边上,就像是无家可归的可怜的孩子,真叫人心疼!其实,它们就是一些被人遗弃的流浪宠物。 流浪宠物是指无主、长期在野外生存的宠物。与野猫(狗)不同,流浪宠物特指那些曾被人们收养过,后来因为某些原因、被抛弃的宠物。某些原因,可能是因为主人的乔迁,可能是经济跟不上,也可能只是主人不喜欢了,就遗弃了。事实上,在全国社会各地,还有许许多多同他们一样遭遇被遗弃的命运的可怜的猫儿狗儿。 校园里的这些猫儿,算是比较幸运的,因为经常有好心的同学会给它们喂一些吃的,它们还不至于饿死。另外的那些流浪宠物,不仅失去了温暖的家,失去了主人的关爱,就连基本的餐饷都成了问题。
在现在猫狗等小动物自被驯化以来,作为人类的伙伴,他们也有自己的理智与情感,我们应该给予充分的尊重和关怀。但是随着社会经济的发展,猫狗等小动物数量日益增多、部分人们的嫌弃和遗弃,流浪动物越来越多。这就需要社会机构或者热心人士关怀和救助这些流浪动物。在社会网络化的背景下,推进人与动物和谐共处符合时代特点。而我们开发一个自愿救助流浪动物网站能够为一些机构和爱心人士提供平台,让小宠物们能更好的找到主人使它们也更容易的生存下去。同时,也可以为一些不愿意继续养宠物的主人提供转让服务。提高人们的动物保护意识,动物也是大自然的一员人们应该保护它们,倡导爱护动物的社会风气,促进人与动物更和谐的相处。因此,本课题的研究符合时代现状,将为营造一个人与自然动物生命体和谐共处的良好社会环境走出一小步。
技术工具:
开发工具:IDEA 2021.3、navicat for mysql 、postman。
开发语言:java、jdk1.8、mysql5。
硬件环境:Windows 10操作系统、Google浏览器等。
主要技术:springboot、mybatis-plus、layui、mysql等
模块设计:
1.用户模块管理:用户登录、用户注册、用户的查询、删除操作、
2.流浪动物首页管理:首页列表的展示、添加、修改、删除操作、
3.流浪动物信息详情管理:流浪动物信息详情列表的查看、添加、删除等操作、
4.管理员信息管理:管理员信息的查看、修改、
5.公告信息管理:公告信息的查看、添加、修改、删除操作、
6.用户模块管理:用户列表查询、添加、删除、、
7.用户评论模块管理:用户评论查询、添加、删除、
8.注销退出登录管理
系统架构:
功能截图:
用户登录注册:

前端首页:

分类查看:

详情查看:

评论回复信息:这里用户头像替换成自己本地路径即可显示

收藏领养管理:

我的个人信息:

我的领养收藏:

发布流浪交流信息:

我的发布:

后端管理:

后端首页:

用户管理:

类型管理:

详情管理:


评论回复管理:

通知公告等:

代码实现:
用户登录:
/**
* 根路径以及其他请求处理
*
*@authoradmin
*
*/@ControllerpublicclassIndexController{@Value("${imageFilePath}")privateString imageFilePath;// 文件路径@ResourceprivateNoticeService noticeService;@ResourceprivateUserService userService;@ResourceprivateArticleService articleService;@ResourceprivateClassifyService classifyService;@RequestMapping("/")publicString index(HttpSession session) {// 查询公告session.setAttribute("noticeList", noticeService.list(0,5));return"index";// 跳转到index.html}/**
* 登录页面
*
*@return*/@RequestMapping("/login")publicString login() {return"login";
}/**
* 前台登录页面
*
*@return*/@RequestMapping("/webLogin")publicString webLogin() {return"webLogin";
}/**
* 注册
*
*@return*/@RequestMapping("/regist")publicString regist() {return"regist";
}/**
* 保存注册信息
*
*@paramuser
*@return*/@RequestMapping("/saveUser")publicString saveUser(User user) {// List randomArticle = articleService.getRandomArticle(3);// String ids="";// for (int i = 0; i < randomArticle.size(); i++) {// Integer articleId = randomArticle.get(i).getArticleId();// ids+=articleId+",";// }// ids = ids.substring(0, ids.length() -1);// user.setArticleIds(ids);user.setRegistrationDate(new Date());
userService.save(user);return"webLogin";
}/**
* 退出登录
*
*@paramrequest
*@return*/@RequestMapping("/quit")publicString quit(HttpServletRequest request) {
HttpSession session = request.getSession();
session.removeAttribute("user");return"index";
}/**
* 退出登录
*
*@paramrequest
*@return*/@RequestMapping("/quitAdmin")publicString quitAdmin(HttpServletRequest request) {
HttpSession session = request.getSession();
session.removeAttribute("user");return"login";
}/**
* 验证登录
*
*@paramuser
*@paramrequest
*@return*/@RequestMapping("/checkLogin")publicModelAndView checkLogin(User user, HttpServletRequest request) {
ModelAndView mav = new ModelAndView();
HttpSession session = request.getSession();
User u = userService.findByUsernameAndPassword(user.getUsername(), user.getPassword());if(u ==null) {
mav.addObject("user", user);
mav.addObject("errorInfo","用户名或者密码错误!");
mav.setViewName("webLogin");
}else{
u.setLatelyLoginTime(new Date());
userService.save(u);
session.setAttribute("user", u);
mav.addObject("username", u.getUsername());
mav.addObject("user", u);
mav.addObject("success",true);
mav.setViewName("/index");
}returnmav;
}/**
* 查看个人信息
*
*@return*/@RequestMapping("viewPerson")publicModelAndView viewPerson(HttpServletRequest request) {
User user = (User) request.getSession().getAttribute("user");
ModelAndView mav = new ModelAndView();
User u = userService.findById(user.getUserId());
mav.addObject("user", u);
mav.setViewName("/viewPerson");returnmav;
}/**
* 查看个人收藏夹
*
*@return*/@RequestMapping("viewCollection")publicModelAndView viewCollection(HttpServletRequest request, HttpSession session) {
User user = (User) request.getSession().getAttribute("user");
ModelAndView mav = new ModelAndView();
User u = userService.findById(user.getUserId());
String artIds = u.getArticleIds();
List result = new ArrayList<>();if(StringUtils.isNotBlank(artIds)) {
result = Arrays.asList(StringUtils.split(artIds,","));
}
List retIds = new ArrayList<>();for(String temp : result) {
retIds.add(Integer.valueOf(temp).intValue());
}
List retArt = articleService.findByListId(retIds);
session.setAttribute("noticeList", noticeService.list(0,5));
mav.addObject("retArt", retArt);
mav.addObject("user", u);
mav.setViewName("/viewCollection");returnmav;
}/**
* 查看个人关注用户
*
*@return*/@RequestMapping("viewFocusUser")publicModelAndView viewFocusUser(HttpServletRequest request, HttpSession session) {
User user = (User) request.getSession().getAttribute("user");
ModelAndView mav = new ModelAndView();
User u = userService.findById(user.getUserId());
String userIds = u.getUserIds();
List result = new ArrayList<>();if(StringUtils.isNotBlank(userIds)) {
result = Arrays.asList(StringUtils.split(userIds,","));
}
List retIds = new ArrayList<>();for(String temp : result) {
retIds.add(Integer.valueOf(temp).intValue());
}
List retArt = userService.findByListId(retIds);
session.setAttribute("noticeList", noticeService.list(0,5));
mav.addObject("retArt", retArt);
mav.addObject("user", u);
mav.setViewName("/viewFocusUser");returnmav;
}/**
* 保存用户信息
*
*@paramuser
*@return*/@RequestMapping("/save")publicModelAndView save(User user) {
ModelAndView mav = new ModelAndView();
userService.save(user);
mav.setViewName("/index");returnmav;
}/**
* 流浪动物信息发布页面
*
*@paramrequest
*@return*/// @RequestMapping("notePage")// public String notePage(HttpServletRequest request, Model model) {// User user = (User) request.getSession().getAttribute("user");// if (user == null) {// return "webLogin";// }// List list = classifyService.findAll();// model.addAttribute("list", list);// return "one";// }@RequestMapping("notePage")publicModelAndView notePage(HttpServletRequest request) {
ModelAndView mav = new ModelAndView();
User user = (User) request.getSession().getAttribute("user");if(user ==null) {
mav.setViewName("/webLogin");returnmav;
}
List list = classifyService.findAll();
mav.addObject("list", list);
mav.setViewName("/one");returnmav;
}/**
* 保存笔记
*
*@paramarticle
*@paramrequest
*@return*/@RequestMapping("addNote")publicModelAndView addNote(Article article, HttpServletRequest request) {
ModelAndView mav = new ModelAndView();// 获取当前用户信息User user = (User) request.getSession().getAttribute("user");
article.setUserId(user.getUserId());
article.setPublishDate(new Date());
article.setClick(0);
article.setCommentNum(0);
article.setContentNoTag(StringUtil.Html2Text(article.getContent()));
articleService.save(article);
mav.setViewName("/index");returnmav;
}@RequestMapping("saveNote")publicModelAndView saveNote(Article article, HttpServletRequest request) {
ModelAndView mav = new ModelAndView();
Article a = articleService.findById(article.getArticleId());
article.setPublishDate(a.getPublishDate());// 获取当前用户信息articleService.save(article);
mav.setViewName("/index");returnmav;
}/**
* 查看笔记
*
*@return*/@RequestMapping("viewNote")publicString viewNote(HttpSession session) {
session.setAttribute("noticeList", noticeService.list(0,5));return"mylist";
}@RequestMapping("/delete/{id}")publicString delete(@PathVariable(value ="id")String id) throws Exception {
articleService.delete(Integer.parseInt(id));return"mylist";
}/**
* 查看个人笔记加载数据列表
*
*@paramarticle
*@parampublishDates
*@parampage
*@parampageSize
*@return*/@RequestMapping("/mylist")publicMap list(Article article,@RequestParam(value ="publishDates", required = false)String publishDates,@RequestParam(value ="page", required = false)Integer page,@RequestParam(value ="pageSize", required = false)Integer pageSize, HttpServletRequest request) {
Map resultMap = new HashMap();// User user = (User) request.getSession().getAttribute("user");// article.setUserId(user.getUserId());String s_bPublishDate =null;// 开始时间String s_ePublishDate =null;// 结束时间if(StringUtil.isNotEmpty(publishDates)) {
String[] strs = publishDates.split(" - ");// 拆分时间段s_bPublishDate = strs[0];
s_ePublishDate = strs[1];
}Longtotal = articleService.getCount(article, s_bPublishDate, s_ePublishDate);
int totalPage = (int) (total % pageSize ==0? total / pageSize : total / pageSize +1);// 总页数resultMap.put("totalPage", totalPage);
resultMap.put("errorNo",0);
resultMap.put("data", articleService.list(article, s_bPublishDate, s_ePublishDate, page -1, pageSize));
resultMap.put("total", total);returnresultMap;
}/**
* 后台默认首页
*
*@return*/@RequestMapping("/index")publicString root() {return"/common/index";
}/**
* 博主信息页面
*
*@return*/@RequestMapping("/blogger")publicString blogger() {return"/blogger/index";
}/**
* 图片上传处理@Title: ckeditorUpload@paramfile 图片文件@return参数说明@return* Map 返回类型@throws*/@ResponseBody@RequestMapping("/upload")publicMap ckeditorUpload(@RequestParam("file")MultipartFile file) {
Map resultMap = new HashMap();
Map resultMap1 = new HashMap();
String fileName = file.getOriginalFilename();// 获取文件名String suffixName = fileName.substring(fileName.lastIndexOf("."));// 获取文件的后缀String newFileName ="";try{
newFileName = DateUtil.getCurrentDateStr() + suffixName;// 新文件名FileUtils.copyInputStreamToFile(file.getInputStream(), new File(imageFilePath + newFileName));// 上传}catch(Exception e) {// TODO Auto-generated catch blocke.printStackTrace();
}
resultMap.put("code",0);
resultMap1.put("filePath", newFileName);
resultMap.put("data", resultMap1);returnresultMap;
}
}
复制代码
全局yml配置
server:port:80servlet:context-path:/spring:datasource:driver-class-name:com.mysql.jdbc.Driverurl:jdbc:mysql://localhost:3306/baby_mobile?characterEncoding=utf8&useSSL=falseusername:rootpassword:123456jpa:hibernate:ddl-auto:updateshow-sql:truethymeleaf:cache:false复制代码
数据库设计:表t_admin
编号
名称
数据类型
长度
小数位
允许空值
主键
1
admin_id
int
10
0
N
Y
2
head_portrait
varchar
200
0
Y
N
3
password
varchar
200
0
Y
N
4
phone
varchar
200
0
Y
N
5
sex
varchar
50
0
Y
N
6
signature
varchar
500
0
Y
N
7
true_name
varchar
200
0
Y
N
8
user_name
varchar
200
0
Y
N
表t_article
编号
名称
数据类型
长度
小数位
允许空值
主键
1
article_id
int
10
0
N
Y
2
author
varchar
200
0
N
N
3
click
int
10
0
Y
N
4
comment_num
int
10
0
Y
N
5
content
text
65535
0
Y
N
6
image_name
varchar
255
0
Y
N
7
is_original
int
10
0
Y
N
8
is_top
int
10
0
Y
N
9
publish_date
datetime
19
0
Y
N
10
title
varchar
200
0
N
N
11
classify_id
int
10
0
Y
N
12
user_id
int
10
0
Y
N
表t_blogger
编号
名称
数据类型
长度
小数位
允许空值
主键
1
blogger_id
int
10
0
N
Y
2
head_portrait
varchar
200
0
Y
N
3
motto
varchar
500
0
Y
N
4
nick_name
varchar
200
0
Y
N
5
site
varchar
200
0
Y
N
6
signature
varchar
500
0
Y
N
表t_classify
编号
名称
数据类型
长度
小数位
允许空值
主键
1
classify_id
int
10
0
N
Y
2
classify_name
varchar
200
0
N
N
表t_comment
编号
名称
数据类型
长度
小数位
允许空值
主键
1
comment_id
int
10
0
N
Y
2
comment_date
datetime
19
0
Y
N
3
content
varchar
500
0
Y
N
4
article_id
int
10
0
Y
N
5
user_id
int
10
0
Y
N
表t_link
编号
名称
数据类型
长度
小数位
允许空值
主键
1
link_id
int
10
0
N
Y
2
link_email
varchar
200
0
Y
N
3
link_name
varchar
200
0
Y
N
4
link_url
varchar
200
0
Y
N
5
order_num
int
10
0
Y
N
表t_notice
编号
名称
数据类型
长度
小数位
允许空值
主键
1
notice_id
int
10
0
N
Y
2
grade
int
10
0
Y
N
3
content
varchar
500
0
Y
N
4
publish_date
datetime
19
0
Y
N
表t_reply
编号
名称
数据类型
长度
小数位
允许空值
主键
1
reply_id
int
10
0
N
Y
2
content
varchar
500
0
Y
N
3
reply_date
datetime
19
0
Y
N
4
comment_id
int
10
0
Y
N
5
user_id
int
10
0
Y
N
表t_timeline
编号
名称
数据类型
长度
小数位
允许空值
主键
1
timeline_id
int
10
0
N
Y
2
content
varchar
200
0
Y
N
3
publish_date
datetime
19
0
Y
N
4
month
varchar
200
0
Y
N
5
year
varchar
200
0
Y
N
免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,信息仅供参考之用。