宠物管理系统带万字文档

文章目录

  • 宠物管理系统
    • 一、项目演示
    • 二、项目介绍
    • 三、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.mzph.cn/web/12472.shtml

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

相关文章

新串口通道打通纪实

在计算机系统中&#xff0c;串口是“古老”的通信方式&#xff0c;和它同时代的“并口”通信方式已经消失了。但它仍然顽强的存活着&#xff0c;主要原因是在开发和调试底层软件时还经常用到串口。 正因为有这样的需求&#xff0c;幽兰代码本是支持串口的&#xff0c;而且有两种…

【现代C++】概念的使用

现代C&#xff08;特别是C20及以后的版本&#xff09;引入了概念&#xff08;Concepts&#xff09;&#xff0c;这是一种指定模板参数必须满足的约束的方式。概念使得模板代码更清晰&#xff0c;更容易理解和使用&#xff0c;并且能在编译时提供更好的错误信息。以下是C概念的关…

UStaticMesh几何数据相关(UE5.2)

UStaticMesh相关类图 UStaticMesh的数据构成 UStaticMesh的FStaticMeshSourceModel UStaticMesh的Mesh几何元数据来自于FStaticMeshSourceModel&#xff0c; 一级Lod就存在一个FStaticMeshSourceModel. FStaticMeshSourceModel几何数据大致包含以下几类: Vertex(点), VertexI…

玩转Matlab-Simscape(初级)- 06 - 基于Solidworks、Matlab Simulink、COMSOL的协同仿真(理论部分2)

** 玩转Matlab-Simscape&#xff08;初级&#xff09;- 06 - 基于Solidworks、Matlab Simulink、COMSOL的协同仿真&#xff08;理论部分2&#xff09; ** 目录 玩转Matlab-Simscape&#xff08;初级&#xff09;- 06 - 基于Solidworks、Matlab Simulink、COMSOL的协同仿真&am…

风电功率预测 | 基于GRU门控循环单元的风电功率预测(附matlab完整源码)

风电功率预测 风电功率预测 | 基于GRU门控循环单元的风电功率预测(附matlab完整源码)完整代码风电功率预测 | 基于GRU门控循环单元的风电功率预测(附matlab完整源码) 完整代码 clc; clear close allX = xlsread(风电场预测.xlsx)

python数据分析——seaborn绘图2

参考资料&#xff1a;活用pandas库 # 导入库 import pandas as pd import matplotlib.pyplot as plt import seaborn as sns tipspd.read_csv(r"...\seaborn常用数据案例\tips.csv") print(tips.head()) 1、成对关系表示 当数据大部分是数据时&#xff0c;可以使用…

分享一个基于Qt的Ymodem的上位机(GitHub开源)

文章目录 1.项目地址2.Ymodem 协议介绍3.文件传输过程4.使用5.SecureCRT 软件也支持Ymodem6.基于PyQt5的Ymodem界面实现案例 1.项目地址 https://github.com/XinLiGH/SerialPortYmodem 基于VS2019 Qt5.15.2 编译&#xff0c;Linux下编译也可以&#xff0c;这里不做说明。 2.…

Python | Leetcode Python题解之第89题格雷编码

题目&#xff1a; 题解&#xff1a; class Solution:def grayCode(self, n: int) -> List[int]:ans [0] * (1 << n)for i in range(1 << n):ans[i] (i >> 1) ^ ireturn ans

如何在云电脑实现虚拟应用—数据分层(应用分层)技术简介

如何在云电脑实现虚拟应用—数据分层&#xff08;应用分层&#xff09;技术简介 近几年虚拟化市场实现了非常大的发展&#xff0c;桌面虚拟化在企业中应用越来越广泛&#xff0c;其拥有的如下优点得到大量企业的青睐&#xff1a; 数据安全不落地。在虚拟化环境下面数据保存在…

STL库简介

一、STL库的概念 STL&#xff1a;是C标准库的重要追组成部分&#xff0c;不仅是一个可以复用的组件库&#xff0c;而且还是一个包含了数据结构和算法的软件框架。 二、STL的版本 原始版本 Alexander Stepanov、 Meng Lee 在惠普实验室完成的原始版本&#xff0c; 是一个开源…

JVM 双亲委派机制详解

文章目录 1. 双亲委派机制2. 证明3. 优势与劣势 1. 双亲委派机制 类加载器用来把类加载到 Java 虚拟机中。从JDK1.2版本开始&#xff0c;类的加载过程采用双亲委派机制&#xff0c;这种机制能更好地保证 Java 平台的安全。 1.定义 如果一个类加载器在接到加载类的请求时&…

(done) NLP+HMM 协作,还有维特比算法

参考视频&#xff1a;https://www.bilibili.com/video/BV1aP4y147gA/?p2&spm_id_frompageDriver&vd_source7a1a0bc74158c6993c7355c5490fc600 &#xff08;这实际上是 “序列标注任务”&#xff09; HMM 的训练和预测如下图 训练过程&#xff1a;我们首先先给出一个语…

web学习记录--(5.14)

1.Sublime安装与汉化 直接点击windows即可下载&#xff0c;安装即可 Thank You - Sublime Text 汉化 Install Package ChineseLocalzation 2.PHPstorm下载以及激活,汉化 直接下载&#xff0c;然后找激活码激活即可 汉化 plugins&#xff08;插件&#xff09;/chinese&…

SpringBoot接收参数的19种方式

https://juejin.cn/post/7343243744479625267?share_token6D3AD82C-0404-47A7-949C-CA71F9BC9583

未授权访问:ZooKeeper 未授权访问漏洞

目录 1、漏洞原理 2、环境搭建 3、未授权访问 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验&#xff0c;一共有好多篇&#xff0c;内容主要是参考先知社区的一位大佬的关于未授权访问的好文章&#xff0c;还有其他大佬总结好的文章&#xff1a; 这里附上大…

2025年第十一届北京国际印刷技术展览会

2025年第十一届北京国际印刷技术展览会 展览时间&#xff1a;2025年5月15-19日 展览地点&#xff1a;北京中国国际展览中心&#xff08;顺义馆&#xff09; 主办单位&#xff1a;中国印刷及设备器材工业协会中国国际展览中心集团有限公司 承办单位&#xff1a;北京中印协华港国…

海思Hi3065H 200MHz 高性能 RISCV32 A² MCU

这是一款海思自研的RISCV32内核的高性能实时控制专用MCU&#xff0c; 具有高性能、高集成度、高可靠性、易开发的特点&#xff0c;同时还有嵌入式AI能力。 CPU • RISC-V200MHzFPU 存储 • Up to 152KB Code Flash • 8KB Data Flash • 16KB SRAM 个人认为这是MCU梯队非常…

【PB案例学习笔记】-02 目录浏览器

写在前面 这是PB案例学习笔记系列文章的第二篇&#xff0c;该系列文章适合具有一定PB基础的读者&#xff0c; 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上…

基于Django实现的(bert)深度学习文本相似度检测系统设计

基于Django实现的&#xff08;bert&#xff09;深度学习文本相似度检测系统设计 开发语言:Python 数据库&#xff1a;MySQL所用到的知识&#xff1a;Django框架工具&#xff1a;pycharm、Navicat、Maven 系统功能实现 登录页面 注册页面&#xff1a;用户账号&#xff0c;密码…