前言介绍:
漫步校园中,偶尔会看到几只猫,或是晃做在小道上,或是蜷作一团躺在花坛边上,就像是无家可归的可怜的孩子,真叫人心疼!其实,它们就是一些被人遗弃的流浪宠物。 流浪宠物是指无主、长期在野外生存的宠物。与野猫(狗)不同,流浪宠物特指那些曾被人们收养过,后来因为某些原因、被抛弃的宠物。某些原因,可能是因为主人的乔迁,可能是经济跟不上,也可能只是主人不喜欢了,就遗弃了。事实上,在全国社会各地,还有许许多多同他们一样遭遇被遗弃的命运的可怜的猫儿狗儿。 校园里的这些猫儿,算是比较幸运的,因为经常有好心的同学会给它们喂一些吃的,它们还不至于饿死。另外的那些流浪宠物,不仅失去了温暖的家,失去了主人的关爱,就连基本的餐饷都成了问题。
在现在猫狗等小动物自被驯化以来,作为人类的伙伴,他们也有自己的理智与情感,我们应该给予充分的尊重和关怀。但是随着社会经济的发展,猫狗等小动物数量日益增多、部分人们的嫌弃和遗弃,流浪动物越来越多。这就需要社会机构或者热心人士关怀和救助这些流浪动物。在社会网络化的背景下,推进人与动物和谐共处符合时代特点。而我们开发一个自愿救助流浪动物网站能够为一些机构和爱心人士提供平台,让小宠物们能更好的找到主人使它们也更容易的生存下去。同时,也可以为一些不愿意继续养宠物的主人提供转让服务。提高人们的动物保护意识,动物也是大自然的一员人们应该保护它们,倡导爱护动物的社会风气,促进人与动物更和谐的相处。因此,本课题的研究符合时代现状,将为营造一个人与自然动物生命体和谐共处的良好社会环境走出一小步。
技术工具:
开发工具: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.注销退出登录管理
系统架构:
功能截图:
用户登录注册:
前端首页:
分类查看:
详情查看:
评论回复信息:这里用户头像替换成自己本地路径即可显示
收藏领养管理:
我的个人信息:
我的领养收藏:
发布流浪交流信息:
我的发布:
后端管理:
后端首页:
用户管理:
类型管理:
详情管理:
评论回复管理:
通知公告等:
代码实现:
用户登录:
/** * 根路径以及其他请求处理 * * @author admin * */@Controllerpublic class IndexController { @Value("${imageFilePath}") private String imageFilePath; // 文件路径 @Resource private NoticeService noticeService; @Resource private UserService userService; @Resource private ArticleService articleService; @Resource private ClassifyService classifyService; @RequestMapping("/") public String index(HttpSession session) { // 查询公告 session.setAttribute("noticeList", noticeService.list(0, 5)); return "index";// 跳转到index.html } /** * 登录页面 * * @return */ @RequestMapping("/login") public String login() { return "login"; } /** * 前台登录页面 * * @return */ @RequestMapping("/webLogin") public String webLogin() { return "webLogin"; } /** * 注册 * * @return */ @RequestMapping("/regist") public String regist() { return "regist"; } /** * 保存注册信息 * * @param user * @return */ @RequestMapping("/saveUser") public String saveUser(User user) {// List<Article> 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"; } /** * 退出登录 * * @param request * @return */ @RequestMapping("/quit") public String quit(HttpServletRequest request) { HttpSession session = request.getSession(); session.removeAttribute("user"); return "index"; } /** * 退出登录 * * @param request * @return */ @RequestMapping("/quitAdmin") public String quitAdmin(HttpServletRequest request) { HttpSession session = request.getSession(); session.removeAttribute("user"); return "login"; } /** * 验证登录 * * @param user * @param request * @return */ @RequestMapping("/checkLogin") public ModelAndView 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"); } return mav; } /** * 查看个人信息 * * @return */ @RequestMapping("viewPerson") public ModelAndView 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"); return mav; } /** * 查看个人收藏夹 * * @return */ @RequestMapping("viewCollection") public ModelAndView 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<String> result = new ArrayList<>(); if (StringUtils.isNotBlank(artIds)) { result = Arrays.asList(StringUtils.split(artIds, ",")); } List<Integer> retIds = new ArrayList<>(); for (String temp : result) { retIds.add(Integer.valueOf(temp).intValue()); } List<Article> retArt = articleService.findByListId(retIds); session.setAttribute("noticeList", noticeService.list(0, 5)); mav.addObject("retArt", retArt); mav.addObject("user", u); mav.setViewName("/viewCollection"); return mav; } /** * 查看个人用户 * * @return */ @RequestMapping("viewFocusUser") public ModelAndView 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<String> result = new ArrayList<>(); if (StringUtils.isNotBlank(userIds)) { result = Arrays.asList(StringUtils.split(userIds, ",")); } List<Integer> retIds = new ArrayList<>(); for (String temp : result) { retIds.add(Integer.valueOf(temp).intValue()); } List<User> retArt = userService.findByListId(retIds); session.setAttribute("noticeList", noticeService.list(0, 5)); mav.addObject("retArt", retArt); mav.addObject("user", u); mav.setViewName("/viewFocusUser"); return mav; } /** * 保存用户信息 * * @param user * @return */ @RequestMapping("/save") public ModelAndView save(User user) { ModelAndView mav = new ModelAndView(); userService.save(user); mav.setViewName("/index"); return mav; } /** * 流浪动物信息发布页面 * * @param request * @return */ // @RequestMapping("notePage") // public String notePage(HttpServletRequest request, Model model) { // User user = (User) request.getSession().getAttribute("user"); // if (user == null) { // return "webLogin"; // } // List<Classify> list = classifyService.findAll(); // model.addAttribute("list", list); // return "one"; // } @RequestMapping("notePage") public ModelAndView notePage(HttpServletRequest request) { ModelAndView mav = new ModelAndView(); User user = (User) request.getSession().getAttribute("user"); if (user == null) { mav.setViewName("/webLogin"); return mav; } List<Classify> list = classifyService.findAll(); mav.addObject("list", list); mav.setViewName("/one"); return mav; } /** * 保存笔记 * * @param article * @param request * @return */ @RequestMapping("addNote") public ModelAndView 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"); return mav; } @RequestMapping("saveNote") public ModelAndView 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"); return mav; } /** * 查看笔记 * * @return */ @RequestMapping("viewNote") public String viewNote(HttpSession session) { session.setAttribute("noticeList", noticeService.list(0, 5)); return "mylist"; } @RequestMapping("/delete/{id}") public String delete(@PathVariable(value = "id") String id) throws Exception { articleService.delete(Integer.parseInt(id)); return "mylist"; } /** * 查看个人笔记加载数据列表 * * @param article * @param publishDates * @param page * @param pageSize * @return */ @RequestMapping("/mylist") public Map<String, Object> 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<String, Object> resultMap = new HashMap<String, Object>(); // 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]; } Long total = 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); return resultMap; } /** * 后台默认首页 * * @return */ @RequestMapping("/index") public String root() { return "/common/index"; } /** * 博主信息页面 * * @return */ @RequestMapping("/blogger") public String blogger() { return "/blogger/index"; } /** * 图片上传处理 @Title: ckeditorUpload @param file 图片文件 @return 参数说明 @return * Map<String,Object> 返回类型 @throws */ @ResponseBody @RequestMapping("/upload") public Map<String, Object> ckeditorUpload(@RequestParam("file") MultipartFile file) { Map<String, Object> resultMap = new HashMap<String, Object>(); Map<String, Object> resultMap1 = new HashMap<String, Object>(); 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 block e.printStackTrace(); } resultMap.put("code", 0); resultMap1.put("filePath", newFileName); resultMap.put("data", resultMap1); return resultMap; }}复制代码全局yml配置
server: port: 80 servlet: context-path: / spring: datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://localhost:3306/baby_mobile?characterEncoding=utf8&useSSL=false username: root password: 123456 jpa: hibernate: ddl-auto: update show-sql: true thymeleaf: 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