宠物管理系统带万字文档

文章目录

  • 宠物管理系统
    • 一、项目演示
    • 二、项目介绍
    • 三、19000字论文参考
    • 四、部分功能截图
    • 五、部分代码展示
    • 六、底部获取项目源码和万字论文参考(9.9¥带走)

宠物管理系统

一、项目演示

宠物管理系统

二、项目介绍

基于springboot+vue的前后端分离宠物管理系统

角色:用户、管理员

1、用户的主要功能:

首页:展示公告列表,宠物科普,介绍流浪宠物,热门活动

注册、登录、宠物领养、宠物救助、丢失宠物查看、宠物论坛

2、管理员的主要功能:

用户管理、申请领养管理、评论管理、流浪动物救助、动物走失管理、救助站管理、帖子管理、捐赠管理、公告管理、科普文章管理、活动管理等

语言:java
前端技术:Vue、 ELementUI、echarts
后端技术:SpringBoot、Mybatis-Plus
数据库:MySQL

三、19000字论文参考

在这里插入图片描述
在这里插入图片描述

四、部分功能截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、部分代码展示

package com.rabbiter.pet.controller;import cn.hutool.core.date.DateUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelWriter;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletOutputStream;
import java.net.URLEncoder;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.rabbiter.pet.entity.Animal;
import com.rabbiter.pet.service.IAnimalService;
import com.rabbiter.pet.entity.Applcation;
import com.rabbiter.pet.service.IApplcationService;
import com.rabbiter.pet.utils.TokenUtils;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.rabbiter.pet.common.Result;
import org.springframework.web.multipart.MultipartFile;
import com.rabbiter.pet.entity.User;import org.springframework.web.bind.annotation.RestController;/*** <p>*  前端控制器* </p>** @author * @since 2023-04-02*/
@RestController
@RequestMapping("/applcation")
public class ApplcationController {@Resourceprivate IApplcationService applcationService;@Resourceprivate IAnimalService animalService;private final String now = DateUtil.now();// 新增或者更新@PostMappingpublic Result save(@RequestBody Applcation applcation) {applcationService.saveOrUpdate(applcation);return Result.success();}@PostMapping("/state/{id}/{state}")public Result state(@PathVariable Integer id, @PathVariable String state) {Applcation applcation = applcationService.getById(id);applcation.setState(state);QueryWrapper<Applcation> queryWrapper = new QueryWrapper<>();queryWrapper.eq("animal_id", applcation.getAnimalId());List<Applcation> list = applcationService.list(queryWrapper);for (Applcation app : list) {app.setState("审核不通过");applcationService.updateById(app);}applcationService.updateById(applcation);Animal animal = animalService.getById(applcation.getAnimalId());animal.setIsAdopt("是");animal.setAdopt("不可领养");animalService.updateById(animal);return Result.success();}@DeleteMapping("/{id}")public Result delete(@PathVariable Integer id) {applcationService.removeById(id);return Result.success();}@PostMapping("/del/batch")public Result deleteBatch(@RequestBody List<Integer> ids) {applcationService.removeByIds(ids);return Result.success();}@GetMappingpublic Result findAll() {return Result.success(applcationService.list());}@GetMapping("/{id}")public Result findOne(@PathVariable Integer id) {return Result.success(applcationService.getById(id));}@GetMapping("/my")public Result my() {List<Animal> animals = animalService.list();QueryWrapper<Applcation> queryWrapper = new QueryWrapper<>();queryWrapper.orderByDesc("id");User currentUser = TokenUtils.getCurrentUser();if (currentUser == null) {return Result.success(new ArrayList<>());}queryWrapper.eq("user_id", currentUser.getId());List<Applcation> applcations = applcationService.list(queryWrapper);for (Applcation record : applcations) {animals.stream().filter(animal -> animal.getId().equals(record.getAnimalId())).findFirst().ifPresent(record::setAnimal);}return Result.success(applcations);}@GetMapping("/page")public Result findPage(@RequestParam(defaultValue = "") String name,@RequestParam Integer pageNum,@RequestParam Integer pageSize) {List<Animal> animals = animalService.list();QueryWrapper<Applcation> queryWrapper = new QueryWrapper<>();queryWrapper.orderByDesc("id");if (!"".equals(name)) {queryWrapper.like("name", name);}Page<Applcation> page = applcationService.page(new Page<>(pageNum, pageSize), queryWrapper);for (Applcation record : page.getRecords()) {animals.stream().filter(animal -> animal.getId().equals(record.getAnimalId())).findFirst().ifPresent(record::setAnimal);}return Result.success(page);}}
package com.rabbiter.pet.controller;import cn.hutool.core.date.DateUtil;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelWriter;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletOutputStream;
import java.net.URLEncoder;import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.rabbiter.pet.entity.User;
import com.rabbiter.pet.service.IUserService;
import com.rabbiter.pet.utils.TokenUtils;
import com.rabbiter.pet.entity.Comment;
import com.rabbiter.pet.service.ICommentService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.rabbiter.pet.common.Result;
import org.springframework.web.multipart.MultipartFile;import org.springframework.web.bind.annotation.RestController;/*** <p>*  前端控制器* </p>** @author* @since 2023-03-19*/
@RestController
@RequestMapping("/comment")
public class CommentController {@Resourceprivate ICommentService commentService;@Resourceprivate IUserService userService;// 新增或者更新@PostMappingpublic Result save(@RequestBody Comment comment) {comment.setUser(TokenUtils.getCurrentUser().getNickname());comment.setTime(DateUtil.now());commentService.saveOrUpdate(comment);return Result.success();}@DeleteMapping("/{id}")public Result delete(@PathVariable Integer id) {commentService.removeById(id);return Result.success();}@PostMapping("/del/batch")public Result deleteBatch(@RequestBody List<Integer> ids) {commentService.removeByIds(ids);return Result.success();}@GetMappingpublic Result findAll() {return Result.success(commentService.list());}@GetMapping("/article/{type}/{articleId}")public Result findAll(@PathVariable Integer type, @PathVariable Integer articleId) {QueryWrapper<Comment> queryWrapper = new QueryWrapper<>();queryWrapper.eq("article_id", articleId);queryWrapper.eq("type", type);List<Comment> list = commentService.list(queryWrapper);List<Comment> res = new ArrayList<>();for (Comment comment : list) {User one = userService.getOne(Wrappers.<User>lambdaQuery().eq(User::getNickname, comment.getUser()));if (one != null) {comment.setAvatar(one.getAvatarUrl());  // 设置头像}if (comment.getPid() == null) {res.add(comment);List<Comment> children = list.stream().filter(c -> comment.getId().equals(c.getPid())).collect(Collectors.toList());comment.setChildren(children);}}return Result.success(res);}@GetMapping("/{id}")public Result findOne(@PathVariable Integer id) {return Result.success(commentService.getById(id));}@GetMapping("/page")public Result findPage(@RequestParam(defaultValue = "") String name,@RequestParam Integer pageNum,@RequestParam Integer pageSize) {QueryWrapper<Comment> queryWrapper = new QueryWrapper<>();queryWrapper.orderByDesc("id");if (!"".equals(name)) {queryWrapper.like("name", name);}return Result.success(commentService.page(new Page<>(pageNum, pageSize), queryWrapper));}}
package com.rabbiter.pet.controller;import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.rabbiter.pet.common.Result;
import com.rabbiter.pet.entity.Files;
import com.rabbiter.pet.mapper.FileMapper;
import com.rabbiter.pet.utils.PathUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;/*** 文件上传相关接口*/
@RestController
@RequestMapping("/file")
public class FileController {@Value("${server.port}")private String serverPort;@Resourceprivate FileMapper fileMapper;/*** 文件上传接口* @param file 前端传递过来的文件* @return* @throws IOException*/@PostMapping("/upload")public String upload(@RequestParam MultipartFile file) throws IOException {String originalFilename = file.getOriginalFilename();String type = FileUtil.extName(originalFilename);long size = file.getSize();// 定义一个文件唯一的标识码String fileUUID = IdUtil.fastSimpleUUID() + StrUtil.DOT + type;File uploadFile = new File(PathUtils.getClassLoadRootPath() + "/files/" + fileUUID);// 判断配置的文件目录是否存在,若不存在则创建一个新的文件目录File parentFile = uploadFile.getParentFile();if(!parentFile.exists()) {parentFile.mkdirs();}String url;// 获取文件的md5String md5 = SecureUtil.md5(file.getInputStream());// 从数据库查询是否存在相同的记录Files dbFiles = getFileByMd5(md5);if (dbFiles != null) {url = dbFiles.getUrl();} else {// 上传文件到磁盘file.transferTo(uploadFile);// 数据库若不存在重复文件,则不删除刚才上传的文件url = "/file/" + fileUUID;}// 存储数据库Files saveFile = new Files();saveFile.setName(originalFilename);saveFile.setType(type);saveFile.setSize(size/1024); // 单位 kbsaveFile.setUrl(url);saveFile.setMd5(md5);fileMapper.insert(saveFile);return url;}/*** 文件下载接口   http://localhost:9090/file/{fileUUID}* @param fileUUID* @param response* @throws IOException*/@GetMapping("/{fileUUID}")public void download(@PathVariable String fileUUID, HttpServletResponse response) throws IOException {// 根据文件的唯一标识码获取文件File uploadFile = new File(PathUtils.getClassLoadRootPath() + "/files/" + fileUUID);// 设置输出流的格式ServletOutputStream os = response.getOutputStream();response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileUUID, "UTF-8"));response.setContentType("application/octet-stream");// 读取文件的字节流try {os.write(FileUtil.readBytes(uploadFile));} catch (Exception e) {System.err.println("文件下载失败,文件不存在");}os.flush();os.close();}/*** 通过文件的md5查询文件* @param md5* @return*/private Files getFileByMd5(String md5) {// 查询文件的md5是否存在QueryWrapper<Files> queryWrapper = new QueryWrapper<>();queryWrapper.eq("md5", md5);List<Files> filesList = fileMapper.selectList(queryWrapper);return filesList.size() == 0 ? null : filesList.get(0);}@PostMapping("/update")public Result update(@RequestBody Files files) {return Result.success(fileMapper.updateById(files));}@DeleteMapping("/{id}")public Result delete(@PathVariable Integer id) {Files files = fileMapper.selectById(id);files.setIsDelete(true);fileMapper.updateById(files);return Result.success();}@PostMapping("/del/batch")public Result deleteBatch(@RequestBody List<Integer> ids) {// select * from sys_file where id in (id,id,id...)QueryWrapper<Files> queryWrapper = new QueryWrapper<>();queryWrapper.in("id", ids);List<Files> files = fileMapper.selectList(queryWrapper);for (Files file : files) {file.setIsDelete(true);fileMapper.updateById(file);}return Result.success();}/*** 分页查询接口* @param pageNum* @param pageSize* @param name* @return*/@GetMapping("/page")public Result findPage(@RequestParam Integer pageNum,@RequestParam Integer pageSize,@RequestParam(defaultValue = "") String name) {QueryWrapper<Files> queryWrapper = new QueryWrapper<>();// 查询未删除的记录queryWrapper.eq("is_delete", false);queryWrapper.orderByDesc("id");if (!"".equals(name)) {queryWrapper.like("name", name);}return Result.success(fileMapper.selectPage(new Page<>(pageNum, pageSize), queryWrapper));}}

六、底部获取项目源码和万字论文参考(9.9¥带走)

有问题,或者需要协助调试运行项目的也可以

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/697384.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Redis】Redis入门概述

&#x1f600;大家好&#xff0c;我是白晨&#xff0c;一个不是很能熬夜&#x1f62b;&#xff0c;但是也想日更的人✈。如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下&#x1f440;白晨吧&#xff01;你的支持就是我最大的动力&#xff01;&#x1f4…

Linux 第三十章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…

基于LeNet5实现手写数字识别,可视化卷积层。

LeNet5 CNN卷积网络的发展史 1. LetNet5(1998) 2. AlexNet(2012) 3. ZFNet(2013) 4. VGGNet(2014) 5. GoogLeNet(2014) 6. ResNet(2015) 7. DenseNet(2017) 8. EfficientNet(2019) 9. Vision Transformers(2020) 10. 自适应卷积网络(2021) 上面列出了发展到现在CNN的一些经典…

【超详细】跑通YOLOv8之深度学习环境配置3-YOLOv8安装

环境配置3下载安装内容如下&#xff1a; 1、配置清华等镜像源 2、创建环境 3、下载安装Pytorch 4、下载安装YOLOv8运行环境 版本&#xff1a;Python3.8&#xff08;要求>3.8&#xff09;&#xff0c;torch1.12.0cu113&#xff08;要求>1.8&#xff09; 1、配置清华等镜…

光数据传送器|光通讯传感器极速版OPT系列尺寸与安装步骤

光数据传送器|光通讯传感器极速版OPT系列是利用可见光及不可见光作为信息载体&#xff0c;无需光纤、网线等有线介质&#xff0c;在空中直接进行信息传输的无线方式通信。驱动光源以可见光及不可见光的高速明暗变化来传输数字信号&#xff0c;以极高光频率双向发射接收光信号&a…

Java Web开篇

Java Web开篇 大纲 整个内容梳理 具体案例 整个内容梳理 这是前端和后端组成的系统的框架结构

C#语言进阶

一、简单数据结构类 1. ArrayList ArrayList是一个 C# 为我们封装好的类&#xff0c;它的本质是一个 object 类型的数组。ArrayList类帮助我们实现了很多方法&#xff0c;比如数组的增删查改 1.1 声明 using System.Collections;ArrayList array new ArrayList(); 1.2 增…

任务通知理论和使用

文章目录 一、任务通知是什么&#xff1f;1.1任务通知的优势1.2任务通知的限制1.3通知状态和通知值 二、任务通知的使用2.1任务通知使用_轻量级信号量2.2任务通知使用_轻量级队列2.3任务通知使用_轻量级事件组 一、任务通知是什么&#xff1f; 我们使用队列、信号量、事件组等…

AI如何改变PPT制作流程?推荐四款ai生成ppt工具

提起PPT&#xff0c;大家的第一反应就是痛苦。经常接触PPT的学生党和打工人&#xff0c;光看到这3个字母&#xff0c;就已经开始头痛了&#xff1a; 1、PPT内容框架与文案挑战重重&#xff0c;任务艰巨&#xff0c;耗费大量精力。 2、PPT的排版技能要求高&#xff0c;并非易事…

centos7中如何全局搜索一下nginx的配置文件?

在CentOS 7中搜索Nginx的配置文件&#xff0c;你可以使用一些常用的命令行工具&#xff0c;比如find、grep等。这些工具可以帮助你在文件系统中查找文件&#xff0c;也可以用来查找Docker容器内部的文件&#xff0c;只要你知道如何访问容器的文件系统。 1. 搜索系统中的Nginx配…

深度剖析深度神经网络(DNN):原理、实现与应用

目录 引言 一、DNN基本原理 二、DNN核心算法原理 三、DNN具体操作步骤 四、代码演示 引言 在人工智能和机器学习的浪潮中&#xff0c;深度神经网络&#xff08;Deep Neural Network&#xff0c;简称DNN&#xff09;已经成为了一种非常重要的工具。DNN模仿人脑神经网络的结…

C语言leetcode刷题笔记3

C语言leetcode刷题笔记3 第8题&#xff1a;876.链表的中间结点遍历数节点个数快慢指针 第9题&#xff1a;874.比较含退格的字符串第10题&#xff1a;155.最小栈法1&#xff1a;getMin内部实现查找法2&#xff1a;getmin直接返回值补充&#xff1a;栈的使用例子优化&#xff1a;…