SpringBoot+React养老院管理系统 附带详细运行指导视频
文章目录
- 一、项目演示
- 二、项目介绍
- 三、运行截图
- 四、主要代码
- 1.入住合同文件上传
- 2.添加和修改套餐的代码
- 3.查看入住记录代码
一、项目演示
项目演示地址: 视频地址
二、项目介绍
项目描述:这是一个基于SpringBoot+React框架开发的养老院管理系统。首先,这是一个前后端分离的项目,代码简洁规范,注释说明详细,易于理解和学习。其次,这项目功能丰富,具有一个养老院管理系统该有的所有功能。
项目功能:此项目分为两个角色:普通用户和管理员。普通用户有登录注册、浏览个人数据统计信息、管理个人信息、浏览楼栋信息、浏览套餐信息、浏览个人入住信息、浏览入住的日常记录信息、浏览入住的套餐选购信息、发布留言、浏览留言信息、删除个人留言信息、浏览公告信息、浏览活动信息等等功能。管理员有查看全部数据统计信息、管理所有用户信息、管理所有楼栋信息、管理所有套餐信息、管理所有入住信息、管理所有入住的日常记录信息、浏览所有入住的套餐选购信息、管理所有留言信息、管理所有公告信息、管理所有活动信息等等功能。
应用技术:SpringBoot + React + MySQL + MyBatis + Redis + Ant Design + Vite + TypeScript + Drools
运行环境:IntelliJ IDEA2019.3.5 + MySQL5.7(项目压缩包中自带) + Redis5.0.5(项目压缩包中自带) + JDK1.8 + Maven3.6.3(项目压缩包中自带)+ Node16.20.2(项目压缩包中自带)
三、运行截图















四、主要代码
1.入住合同文件上传
@PostMapping(value="/upload")public ResponseDTO<String> uploadFile(MultipartFile file, HttpServletRequest request){if(file == null){return ResponseDTO.errorByMsg(CodeMsg.FILE_EMPTY);}//检查上传文件大小 不能超过50MBif(file.getSize() > 50*1024*1024) {return ResponseDTO.errorByMsg(CodeMsg.FILE_SURPASS_MAX_SIZE);}//获取文件后缀String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);String savePath = uploadFilePath + CommonUtil.getFormatterDate(new Date(), "yyyyMMdd") + "\\";File savePathFile = new File(savePath);if(!savePathFile.exists()){//若不存在改目录,则创建目录savePathFile.mkdirs();}String filename = new Date().getTime()+"."+suffix;logger.info("保存文件的路径:{}",savePath + filename);try {//将文件保存至指定目录file.transferTo(new File(savePath + filename));}catch (Exception e) {e.printStackTrace();return ResponseDTO.errorByMsg(CodeMsg.SAVE_FILE_EXCEPTION);}String filepath = CommonUtil.getFormatterDate(new Date(), "yyyyMMdd") + "/" + filename;return ResponseDTO.successByMsg(filepath, "文件上传成功!");}
2.添加和修改套餐的代码
@Overridepublic ResponseDTO<Boolean> savePackage(PackageDTO packagesDTO) {// 进行统一表单验证CodeMsg validate = ValidateEntityUtil.validate(packagesDTO);if (!validate.getCode().equals(CodeMsg.SUCCESS.getCode())) {return ResponseDTO.errorByMsg(validate);}Package packages = CopyUtil.copy(packagesDTO, Package.class);if(CommonUtil.isEmpty(packages.getId())) {// 添加操作// 判断套餐名称是否存在if(isNameExist(packages, "")){return ResponseDTO.errorByMsg(CodeMsg.PACKAGE_NAME_EXIST);}packages.setId(UuidUtil.getShortUuid());if(packagesMapper.insertSelective(packages) == 0) {return ResponseDTO.errorByMsg(CodeMsg.PACKAGE_ADD_ERROR);}} else {// 修改操作// 判断套餐名称是否存在if(isNameExist(packages, packages.getId())){return ResponseDTO.errorByMsg(CodeMsg.PACKAGE_NAME_EXIST);}if(packagesMapper.updateByPrimaryKeySelective(packages) == 0) {return ResponseDTO.errorByMsg(CodeMsg.PACKAGE_EDIT_ERROR);}}return ResponseDTO.success(true);}
3.查看入住记录代码
@Overridepublic ResponseDTO<PageDTO<CheckDTO>> getCheckList(PageDTO<CheckDTO> pageDTO) {CheckExample checkExample = new CheckExample();// 不知道当前页多少,默认为第一页if(pageDTO.getPage() == null){pageDTO.setPage(1);}// 不知道每页多少条记录,默认为每页10条记录if(pageDTO.getSize() == null){pageDTO.setSize(10);}CheckExample.Criteria c1 = checkExample.createCriteria();if(pageDTO.getParam() != null) {CheckDTO checkDTO = pageDTO.getParam();if(!CommonUtil.isEmpty(checkDTO.getUsername())) {c1.andUsernameLike("%" + checkDTO.getUsername() + "%");}if(!CommonUtil.isEmpty(checkDTO.getPhone())) {c1.andPhoneLike("%" + checkDTO.getPhone() + "%");}if(!CommonUtil.isEmpty(checkDTO.getUserId())) {c1.andUserIdEqualTo(checkDTO.getUserId());}if(checkDTO.getState() != null && checkDTO.getState() != 0) {c1.andStateEqualTo(checkDTO.getState());}}checkExample.setOrderByClause("start_date desc, id desc");PageHelper.startPage(pageDTO.getPage(), pageDTO.getSize());// 分页查出入住数据List<Check> checkList = checkMapper.selectByExample(checkExample);PageInfo<Check> pageInfo = new PageInfo<>(checkList);// 获取数据的总数pageDTO.setTotal(pageInfo.getTotal());// 将domain类型数据 转成 DTO类型数据List<CheckDTO> checkDTOList = CopyUtil.copyList(checkList, CheckDTO.class);for(CheckDTO checkDTO : checkDTOList) {User user = userMapper.selectByPrimaryKey(checkDTO.getUserId());checkDTO.setUserDTO(CopyUtil.copy(Optional.ofNullable(user).orElse(new User()), UserDTO.class));PackageItemExample packageItemExample = new PackageItemExample();packageItemExample.createCriteria().andCheckIdEqualTo(checkDTO.getId());List<PackageItem> packageItemList = packageItemMapper.selectByExample(packageItemExample);checkDTO.setPackageItemDTOList(CopyUtil.copyList(packageItemList, PackageItemDTO.class));Building building = buildingMapper.selectByPrimaryKey(checkDTO.getBuildingId());checkDTO.setBuildingDTO(CopyUtil.copy(Optional.ofNullable(building).orElse(new Building()), BuildingDTO.class));// 更新入住数据的状态checkDTO.setState(updateCheckState(checkDTO));}pageDTO.setList(checkDTOList);return ResponseDTO.success(pageDTO);}
相关文章:
SpringBoot+React养老院管理系统 附带详细运行指导视频
文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.入住合同文件上传2.添加和修改套餐的代码3.查看入住记录代码 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBootReact框架开发的养老院管理系统。首先…...
使用element-plus el-table中使用el-image层级冲突table表格会覆盖预览的图片等问题
在日常开发项目中 使用element-plus 中表格中使用 el-image的点击图片出现图片预览 会出现以下问题 表格一行会覆盖预览的图片 鼠标滑过也会显示表格 el-image 的预览层级和表格的层级冲突导致的。 解决方法:有两种一种是直接使用样式穿透 第二种推荐方法 使用官网推…...
python读取Oracle库并生成API返回Json格式
一、安装必要的库 首先,确保已经安装了以下库: 有网模式 pip install flask pip install gevent pi install cx_Oracle离线模式: 下载地址:https://pypi.org/simple/flask/ # a. Flask Werkzeug-1.0.1-py2.py3-none-any.whl J…...
音视频入门基础:MPEG2-TS专题(5)——FFmpeg源码中,判断某文件是否为TS文件的实现
一、引言 通过FFmpeg命令: ./ffmpeg -i XXX.ts 可以判断出某个文件是否为TS文件: 所以FFmpeg是怎样判断出某个文件是否为TS文件呢?它内部其实是通过mpegts_probe函数来判断的。从《FFmpeg源码:av_probe_input_format3函数和AVI…...
每天10个vue面试题(九)
1、如何在组件中批量使用Vuex的getter属性? 使用mapGetters辅助函数, 利用对象展开运算符将getter混入computed 对象中computed:{ ...mapGetters([total,discountTotal]) } 2、vue2和vue3的区别? 双向数据绑定不同:vue2 的双向数据绑定…...
Jenkins的环境部署
day22 回顾 Jenkins 简介 官网Jenkins Jenkins Build great things at any scale The leading open source automation server, Jenkins provides hundreds of plugins to support building, deploying and automating any project. 用来构建一切 其实就是用Java写的一个项目…...
八、鸿蒙开发-网络请求、应用级状态管理
提示:本文根据b站尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程课整理 链接指引 > 尚硅谷2024最新鸿蒙开发HarmonyOS4.0鸿蒙NEXT星河版零基础教程 文章目录 一、网络请求1.1 申请网络访问权限1.2 安装axios库1.2.1 配置环境变量1.2.2 第二步&…...
经验笔记:Git 中的远程仓库链接及上下游关系管理
Git 中的远程仓库链接及上下游关系管理 1. 远程仓库的链接信息 当你克隆一个远程仓库时,Git 会在本地仓库中记录远程仓库的信息。这些信息包括远程仓库的 URL、默认的远程名称(通常是 origin),以及远程仓库中的所有分支和标签。…...
Paint 学习笔记
目录 ippaint 外扩对象 LCM_inpaint_Outpaint_Comfy: 不支持文字引导 ippaint https://github.com/Sanster/IOPaint 外扩对象 https://www.iopaint.com/models/diffusion/powerpaint_v2 GitHub - open-mmlab/PowerPaint: [ECCV 2024] PowerPaint, a versatile …...
Jenkins修改LOGO
重启看的LOGO和登录页面左上角的LOGO 进入LOGO存在的目录 [roottest-server01 svgs]# pwd /opt/jenkins_data/war/images/svgs [roottest-server01 svgs]# ll logo.svg -rw-r--r-- 1 jenkins jenkins 29819 Oct 21 10:58 logo.svg #jenkins_data目录是我挂载到了/opt目录&…...
kafka是如何做到高效读写
消息持久化: Kafka 将消息存储在磁盘上,并且通过顺序写入的方式提高写入性能。 消息被追加到日志文件的尾部,避免了随机写操作,从而提高了写入速度。零拷贝技术:利用操作系统的零拷贝特性,数据可以从磁盘直…...
Intern大模型训练营(九):XTuner 微调实践微调
本节课程的视频和教程都相当清晰,尤其是教程,基本只要跟着文档,在开发机上把指令都相同地输出一遍,就可以完成任务(大赞),相当顺利。因此,这里的笔记就不重复赘述步骤,更…...
从一次java.io.StreamCorruptedException: invalid stream header: 48656C6C 错误中学到的调试思路
问题场景: 在项目中,我试图使用 Java 的 ObjectInputStream 反序列化一个对象。代码逻辑看似简单:读取字节流,将其转为 Java 对象。然而,程序抛出了以下异常: java.io.StreamCorruptedException: invalid…...
树莓派的发展历史
树莓派(Raspberry Pi)是由英国的树莓派基金会开发的一系列单板计算机,其目标是为了促进计算机科学教育,同时提供廉价的计算机硬件平台。 1. 诞生背景与初代模型(2006-2012) 背景:树莓派的概念起…...
K8S containerd拉取harbor镜像
前言 接前面的环境 K8S 1.24以后开始启用docker作为CRI,这里用containerd拉取 参考文档 正文 vim /etc/containerd/config.toml #修改内容如下 #sandbox_image "registry.aliyuncs.com/google_containers/pause:3.10" systemd_cgroup true [plugins.…...
Ubuntu 环境下通过 Apt-get 安装软件
操作场景 为提升用户在云服务器上的软件安装效率,减少下载和安装软件的成本,腾讯云提供了 Apt-get 下载源。在 Ubuntu 环境下,用户可通过 Apt-get 快速安装软件。对于 Apt-get 下载源,不需要添加软件源,可以直接安装软…...
vue使用List.forEach遍历集合元素
需要遍历集合对其每个元素进行操作时,可以使用forEach方法 1.语法:集合.forEach ( 定义每一项 > 定义每一项都要进行的逻辑 ) 2、使用场景: //例如需要给每个员工的工资数量加1000this.personList.forEach(item>item.salary100…...
ROM修改进阶教程------安卓14去除修改系统应用后导致的卡logo验证步骤 适用安卓13 14 安卓15可借鉴参考
上期的博文解析了安卓14 安卓15去除系统应用签名验证的步骤解析。我们要明白。修改系统应用后有那些验证。其中签名验证 去卡logo验证 与可降级安装应用验证等等的区别。有些要相互结合使用。今天的博文将对修改系统应用后卡logo验证做个步骤解析。 通过博文了解💝💝�…...
苹果macbook,MacOS 11,12,13,14,15 跳过监管锁(配置锁)
第一步:进入恢复模式 长按电源键关机,再长按开机进入恢复模式。(M,Intel芯片方法不同) 第二步:复制代码 右上角联网,打开Safari,地址栏输入http://i7q.cn/61NWfQ。复制以下命令&am…...
【YOLOv8】安卓端部署-2-项目实战
文章目录 1 准备Android项目文件1.1 解压文件1.2 放置ncnn模型文件1.3 放置ncnn和opencv的android文件1.4 修改CMakeLists.txt文件 2 手机连接电脑并编译软件2.1 编译软件2.2 更新配置及布局2.3 编译2.4 连接手机 3 自己数据集训练模型的部署4 参考 1 准备Android项目文件 1.1…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
