基于springboot+vue的器官捐献系统
✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌
🍅文末获取项目下载方式🍅
一、项目背景介绍:
孟德斯鸠曾经说:“能将自己的生命寄托在他人的记忆中,生命仿佛就加长了一些;生命仿佛就加长了一些;其可珍可贵,实不下于天赋的生命。”生命,因短暂和仅有一次而显得宝贵。器官捐献者却战胜了短暂,器官捐献者却战胜了短暂,也让他人获得新生和光明的愿望成为可能。也让他人获得新生和光明的愿望成为可能。也让他人获得新生和光明的愿望成为可能。做一次庄严的选择吧!
改革开放以来,我国工业化道路取得巨大成就,建成了全球最为完整的工业体系,成为世界第一大工业国。但是伴随着工业发展的弊端也慢慢的显露。工业发展对环境带来的污染不仅对于大自然来说是不可逆的,而且对于人们的身体造成了不可逆的伤害。往往许多的疾病最后都无法通过药物来进行治疗,最后也就只有器官移植才能挽救人们的生命。
在该系统的帮助下,可以发现更多的潜在捐献者,更好的帮助那些每日因器官基本饱受折磨的患者。
二、项目技术简介:
- JAVA:Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。
- Vue:Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的JavaScript框架。它基于标准HTML、CSS和JavaScript构建,并提供了一套声明式的、组件化的编程模型,帮助开发者高效地开发用户界面。
Vue是一个独立的社区驱动的项目,它是由尤雨溪在2014年作为其个人项目创建, 是一个成熟的、经历了无数实战考验的框架,它是目前生产环境中使用最广泛的JavaScript框架之一,可以轻松处理大多数web应用的场景,并且几乎不需要手动优化,并且Vue完全有能力处理大规模的应用。 - Spring:Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、AOP及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork、Tapestry等众多Web框架组合使用,并且可以与 Swing等桌面应用程序AP组合。因此, Spring不仅仅能应用于J2EE应用程序之中,也可以应用于桌面应用程序以及小应用程序之中。Spring框架主要由七部分组成,分别是 Spring Core、 Spring AOP、 Spring ORM、 Spring DAO、Spring Context、 Spring Web和 Spring Web MVC。
- SpringBoot:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
- Mybatis-Plus:MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生。
- Html:HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形、动画、声音、表格、链接等。
超文本是一种组织信息的方式,它通过超级链接方法将文本中的文字、图表与其他信息媒体相关联。这些相互关联的信息媒体可能在同一文本中,也可能是其他文件,或是地理位置相距遥远的某台计算机上的文件。这种组织信息方式将分布在不同位置的信息资源用随机方式进行连接,为人们查找,检索信息提供方便。
三、系统功能模块介绍:
四、数据库设计:
1:‘管理员表’(admin)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | id |
user_name | varchar | NULL | 用户名 |
pass_word | varchar | NULL | 密码 |
nick_name | varchar | NULL | 昵称 |
head_img | varchar | NULL | 头像 |
2:‘审核表’(audit)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | id |
user_id | bigint | NULL | 用户ID |
organ_id | bigint | NULL | 器官ID |
remark | varchar | NULL | 备注 |
status | int | NULL | 申请状态[0:审核中,1:审核通过,2审核不通过,3:撤销申请] |
create_time | datetime | NULL | 创建时间 |
3:‘逝者信息表’(dead_info)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | id |
user_id | bigint | NULL | 用户ID |
create_time | datetime | NULL | 创建时间 |
end_age | int | NULL | 享年岁数 |
info | varchar | NULL | 逝世原因 |
address | varchar | NULL | 家庭住址 |
home_name | varchar | NULL | 家庭联系人 |
home_tel | varchar | NULL | 家庭电话 |
4:‘器官类型表’(organ)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | id |
organ_name | varchar | NULL | 器官名称 |
attention | text | NULL | 捐赠注意事项 |
5:‘用户表’(users)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | id |
user_name | varchar | NULL | 用户名 |
pass_word | varchar | NULL | 密码 |
tel | varchar | NULL | 联系方式 |
header_img | varchar | NULL | 基本照片 |
name | varchar | NULL | 真实姓名 |
sex | int | NULL | 性别[0:未知,1:男,2:女] |
age | int | NULL | 年龄 |
create_time | datetime | NULL | 创建时间 |
五、功能模块:
-
系统登录模块:已有账户的用户可以直接选择登录该系统,没有该系统账户的用户可以注册新的账户来登录该系统。
-
志愿者个人信息管理:用户在进入系统后可以添加管理自己的个人信息。
-
捐献信息管理:用户可以在该模块提出自己的捐献申请,并且可以查看自己的申请进度,以及队友的撤销与修改申请。
-
捐献器官类型管理:管理人员可以增加、删除、查询、修改志愿者可以捐献的器官。
-
逝者信息管理:管理人员可以增加、删除、查询、修改志愿者的逝去信息。
-
管理员信息管理:7.管理人员可以增加、删除、查询、修改管理者的信息。
-
用户信息管理:管理人员可以增加、删除、查询、修改用户的基本信息。
六、代码示例:
系统登录模块
@RequestMapping("/client/login")
public class ClientLoginController {
@Autowired
private UsersService usersService;
@PostMapping("/do")
public ReturnMsg login(@RequestBody UsersDTO usersDTO) {
Assert.isTrue(StrUtil.isNotEmpty(usersDTO.getUserName()) && StrUtil.isNotEmpty(usersDTO.getPassWord()), "账号或密码不能为空!");
LambdaQueryWrapper<UsersDTO> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(UsersDTO::getUserName, usersDTO.getUserName()).
eq(UsersDTO::getPassWord, usersDTO.getPassWord()).last(BaseConstant.LIMIT_ONE);
UsersDTO loginUser = usersService.getOne(queryWrapper);
Assert.notNull(loginUser, "账号或密码错误!");
return ReturnMsg.ok(loginUser);
}
@PostMapping("/register")
public ReturnMsg register(@RequestBody UsersDTO usersDTO) throws Exception {
Assert.isTrue(StrUtil.isNotEmpty(usersDTO.getUserName()) && StrUtil.isNotEmpty(usersDTO.getPassWord()), "账号或密码不能为空!");
LambdaQueryWrapper<UsersDTO> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(UsersDTO::getUserName, usersDTO.getUserName());
List<UsersDTO> list = usersService.list(queryWrapper);
if (CollectionUtil.isNotEmpty(list)) {
throw new Exception("该用户名已经存在!");
}
usersService.save(usersDTO);
return ReturnMsg.ok();
}
}
}
志愿者个人信息管理
@Service("usersService")
public class UsersServiceImpl extends ServiceImpl<UsersDao, UsersDTO> implements UsersService {
@Override
public Page<UsersDTO> basePage(UsersDTO usersDTO) {
if (null != usersDTO.getCurrent() && null != usersDTO.getPageSize())
usersDTO.setCurrent((usersDTO.getCurrent() - 1) * usersDTO.getPageSize());
List<UsersDTO> list = this.baseMapper.findList(usersDTO);
int count = this.baseMapper.findPageCount(usersDTO);
Page<UsersDTO> page = new Page<>();
page.setTotal(count);
page.setRecords(list);
return page;
}
@Override
public UsersDTO find(UsersDTO usersDTO) { return this.baseMapper.find(usersDTO); }
}
捐献信息管理
@RestController
@RequestMapping("/audit")
public class AuditController extends BaseController<AuditService, AuditDTO> {
@Override
@Resource(name = "auditService")
protected void setBaseService(AuditService auditService) {
this.baseService = auditService;
}
@Autowired
private OrganService organService;
@Autowired
private UsersService usersService;
/**
* 默认分页查询
* @param auditDTO
* @return
* @throws IOException
*/
@PostMapping("/page")
public ReturnMsg page(@RequestBody AuditDTO auditDTO) {
return ReturnMsg.ok(baseService.basePage(auditDTO));
}
@Override
protected void beforeSaveOrUpdate(AuditDTO entity) throws Exception {
entity.setCreateTime(new Date());
super.beforeSaveOrUpdate(entity);
}
@GetMapping("/getOrganData")
public ReturnMsg getOrganData(){
List<OrganDTO> dataList = organService.list();
List<BaseSelectEntity> selectEntities = new ArrayList<>();
if(CollectionUtil.isNotEmpty(dataList)){
dataList.forEach(item -> {
BaseSelectEntity baseSelectEntity = new BaseSelectEntity();
baseSelectEntity.setKey(item.getId());
baseSelectEntity.setValue(item.getOrganName());
selectEntities.add(baseSelectEntity);
});
}
return ReturnMsg.ok(selectEntities);
}
@GetMapping("/getUsersData")
public ReturnMsg getUsersData(){
List<UsersDTO> dataList = usersService.list();
List<BaseSelectEntity> selectEntities = new ArrayList<>();
if(CollectionUtil.isNotEmpty(dataList)){
dataList.forEach(item -> {
BaseSelectEntity baseSelectEntity = new BaseSelectEntity();
baseSelectEntity.setKey(item.getId());
baseSelectEntity.setValue(item.getName());
selectEntities.add(baseSelectEntity);
});
}
return ReturnMsg.ok(selectEntities);
}
}
捐献器官类型管理
@Service("organService")
public class OrganServiceImpl extends ServiceImpl<OrganDao, OrganDTO> implements OrganService {
@Override
public Page<OrganDTO> basePage(OrganDTO organDTO) {
if (null != organDTO.getCurrent() && null != organDTO.getPageSize())
organDTO.setCurrent((organDTO.getCurrent() - 1) * organDTO.getPageSize());
List<OrganDTO> list = this.baseMapper.findList(organDTO);
int count = this.baseMapper.findPageCount(organDTO);
Page<OrganDTO> page = new Page<>();
page.setTotal(count);
page.setRecords(list);
return page;
}
@Override
public OrganDTO find(OrganDTO organDTO) { return this.baseMapper.find(organDTO); }
}
逝者信息管理
@RestController
@RequestMapping("/deadInfo")
public class DeadInfoController extends BaseController<DeadInfoService, DeadInfoDTO> {
@Override
@Resource(name = "deadInfoService")
protected void setBaseService(DeadInfoService deadInfoService) {
this.baseService = deadInfoService;
}
@Autowired
private UsersService usersService;
/**
* 默认分页查询
* @param deadInfoDTO
* @return
* @throws IOException
*/
@PostMapping("/page")
public ReturnMsg page(@RequestBody DeadInfoDTO deadInfoDTO) {
return ReturnMsg.ok(baseService.basePage(deadInfoDTO));
}
@GetMapping("/getUsersData")
public ReturnMsg getUsersData(){
List<UsersDTO> dataList = usersService.list();
List<BaseSelectEntity> selectEntities = new ArrayList<>();
if(CollectionUtil.isNotEmpty(dataList)){
dataList.forEach(item -> {
BaseSelectEntity baseSelectEntity = new BaseSelectEntity();
baseSelectEntity.setKey(item.getId());
baseSelectEntity.setValue(item.getName());
selectEntities.add(baseSelectEntity);
});
}
return ReturnMsg.ok(selectEntities);
}
@Override
protected void beforeSaveOrUpdate(DeadInfoDTO entity) throws Exception {
if(entity.getId() == null) {
Long userId = entity.getUserId();
LambdaQueryWrapper<DeadInfoDTO> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(DeadInfoDTO::getUserId,userId);
List<DeadInfoDTO> list = baseService.list(queryWrapper);
if(CollectionUtil.isNotEmpty(list)) {
throw new Exception("该逝者已经添加,不能重复添加!");
}
}
super.beforeSaveOrUpdate(entity);
}
}
管理员信息管理
@RestController
@RequestMapping("/admin")
public class AdminController extends BaseController<AdminService, AdminDTO> {
@Override
@Resource(name = "adminService")
protected void setBaseService(AdminService adminService) {
this.baseService = adminService;
}
/**
* 图片上传文件夹名称
*/
private final String realPath = "/admin";
/**
* 图片上传
*
* @param filename
* @param id 需要修改的数据主键id
* @return
* @throws IOException
*/
@PostMapping("/upload/{id}")
public ReturnMsg upload(@RequestParam("file") MultipartFile filename, @PathVariable("id") Long id) throws IOException {
return this.baseUpLoad(filename, id, realPath, AdminDTO.class) ? ReturnMsg.ok() : ReturnMsg.error();
}
/**
* 默认分页查询
* @param adminDTO
* @return
* @throws IOException
*/
@PostMapping("/page")
public ReturnMsg page(@RequestBody AdminDTO adminDTO) {
return ReturnMsg.ok(baseService.basePage(adminDTO));
}
}
用户信息管理
@Service("usersService")
public class UsersServiceImpl extends ServiceImpl<UsersDao, UsersDTO> implements UsersService {
public Page<UsersDTO> basePage(UsersDTO usersDTO) {
if (null != usersDTO.getCurrent() && null != usersDTO.getPageSize())
usersDTO.setCurrent((usersDTO.getCurrent() - 1) * usersDTO.getPageSize());
List<UsersDTO> list = this.baseMapper.findList(usersDTO);
int count = this.baseMapper.findPageCount(usersDTO);
Page<UsersDTO> page = new Page<>();
page.setTotal(count);
page.setRecords(list);
return page;
}
public UsersDTO find(UsersDTO usersDTO) { return this.baseMapper.find(usersDTO); }
}
七、项目总结:
人体器官移植是20世纪医学进步的最主要的成果之一,对于终末期器官功能衰竭来说,人体器官的移植是拯救生命提高生活质量的最有效手段之一。遗憾的是全球普遍存在待移植器官来源短缺,自愿捐献器官者少之又少, 明显制约了器官移植事业的发展。
为了帮助那些患有器官衰竭、尿毒症等疾病的患者,可以在有限的时间内获取到那些伟大的器官捐献者的帮助。本系统利用计算机和网络信息化建设,采用当今十分火热的Java语言作为开发语言,使用MVC三层架构进行后端的开发与架构,使用当今最主流的SpringBoot框架来快速开发简化开发周期与成本。数据系统方面使用Mysql数据库来存储数据,使数据更加持久也更加方便管理人员进行管理。本系统在前后端交互上使用的是与SpringBoot的好兄弟Vue.js,一个响应式的js框架,使用MVVM模型来完成页面之间的交互,使得工程师们不需要太过关注原生DOM的操作,从而使得页面的响应速度加快。在UI层使用element-ui来作为展示,此技术是阿里为广大前端工程师们开源的,在美观度和多样性方面非常强大,非常适合快速开发,而且对用户体验度也非常的友好。
系统在使用者角度可分为前台后台俩个模块。但是在具体的功能上面又可以再细分为8个模块,这8个模块分别是登录注册、个人信息管理、捐献管理、捐献申请审核、捐献器官类型管理、逝者信息管理、管理员管理、用户管理在各个模块的相互促进下得以构建出该器官捐献系统。最后对系统进行一个整体性的测试,解决系统中存在的问题,从而提高系统的稳定性,使系统变得更加稳定,来保证用户的正常使用。
八、源码获取:
大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取联系方式👇🏻👇🏻👇🏻
得工程师们不需要太过关注原生DOM的操作,从而使得页面的响应速度加快。在UI层使用element-ui来作为展示,此技术是阿里为广大前端工程师们开源的,在美观度和多样性方面非常强大,非常适合快速开发,而且对用户体验度也非常的友好。
系统在使用者角度可分为前台后台俩个模块。但是在具体的功能上面又可以再细分为8个模块,这8个模块分别是登录注册、个人信息管理、捐献管理、捐献申请审核、捐献器官类型管理、逝者信息管理、管理员管理、用户管理在各个模块的相互促进下得以构建出该器官捐献系统。最后对系统进行一个整体性的测试,解决系统中存在的问题,从而提高系统的稳定性,使系统变得更加稳定,来保证用户的正常使用。
八、源码获取:
大家点赞、收藏、关注、评论啦 、查看👇🏻👇🏻👇🏻获取联系方式👇🏻👇🏻👇🏻
链接点击直达:下载链接