✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌
文末获取项目下载方式
一、项目背景介绍:
医院管理系统从整个社会实践过程来看,对医院进行信息化管理可以带来的好处如下所示:
(1)患者快速预约就诊。不同于线下就诊的是,患者不需要到医院进行排队叫号,然后才能正常就诊,信息化的结果就为该过程省略了第一步的时间,从而整体上缩短了问诊时间,方便了患者用户,和医院的叫号系统。并且患者还可以通过系统来一目了然的了解自己的症状和需要用药的情况。
(2)促使经济效益得到提升。医院在信息化的管理下,整个医院的问诊效率都大大得到了提高,并且也大大降低了各项成本,节约了人力,时间成本。物资管理中严格记录出、入库数据,随时动态掌握每种物资和药品库存利用情况,从而获得物资和经费的最大使用效益。
(3)提高社会福利。患者掌握了医院信息,提高了医院的知名度,并且可以随时知道自己的医疗费用,减少纠纷,有效的提高了社会效益。
(4)加快医院管理流程。使用管理系统,可以了解所有的医疗状况、医生和患者信息等数据,有效的提高了医院管理的效率。
二、项目技术简介:
三、系统功能模块介绍:
四、数据库设计:
1:‘管理员表’(admin)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键ID |
user_name | varchar | NULL | 用户名 |
pass_word | varchar | NULL | 密码 |
head_img | varchar | NULL | 头像 |
nick_name | varchar | NULL | 姓名 |
create_time | datetime | NULL | 创建时间 |
2:‘科室表’(dept)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键ID |
department_name | varchar | NULL | 科室名称 |
create_time | datetime | NULL | 创建时间 |
3:‘医生表’(doctor)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键ID |
nick_name | varchar | NULL | 医生姓名 |
sex | int | NULL | 性别[1:男,2:女] |
age | int | NULL | 年龄 |
head_img | varchar | NULL | 头像 |
id_card | varchar | NULL | 身份证号 |
dept_id | bigint | NULL | 所属科室ID |
create_time | datetime | NULL | 创建时间 |
tel | varchar | NULL | 手机 |
varchar | NULL | 邮箱 | |
user_name | varchar | NULL | 用户名 |
pass_word | varchar | NULL | 密码 |
info | text | NULL | 简介 |
4:‘药物表’(drug)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键ID |
drug_name | varchar | NULL | 药物名称 |
drug_num | varchar | NULL | 药物编号 |
drug_price | varchar | NULL | 药物价格 |
location | varchar | NULL | 产地 |
describes | text | NULL | 药物描述 |
drug_info | text | NULL | 功能 |
remark | text | NULL | 注意事项 |
drug_img | varchar | NULL | 药品图片 |
5:‘预约药品表’(sick_drug)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键ID |
drug_id | bigint | NULL | 药品ID |
subscribe_id | bigint | NULL | 预约表ID |
6:‘患者表’(sick_info)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键ID |
name | varchar | NULL | 姓名 |
sex | int | NULL | 性别[1:男,2:女] |
age | int | NULL | 年龄 |
id_card | varchar | NULL | 身份证号 |
home_location | varchar | NULL | 家庭住址 |
family_tel | varchar | NULL | 手机号 |
info_img | varchar | NULL | 基本图片 |
7:‘病人预约表’(subscribe)
字段名 | 类型 | 默认值 | 列注释 |
---|---|---|---|
id | bigint | NULL | 主键ID |
doctor_id | bigint | NULL | 医生ID |
sick_id | bigint | NULL | 病人ID |
create_time | datetime | NULL | 预约时间 |
info | varchar | NULL | 病情信息 |
status | int | NULL | [1:未处理,2:已处理] |
prescription | varchar | NULL | 药方 |
update_time | datetime | NULL | 治疗时间 |
五、功能模块:
系统登录模块:本系统主要分为管理员,医生,患者三种不同身份的用户,三者皆使用同一个登录页面,但不同的是登录之后的操作页面将会根据角色不同进行变化。
医生管理:医生管理模块主要是对于医院所有医生的一个管理,其中包括医生的基本信息,例如姓名,性别,年龄,照片等。该模块主要对医生的详细信息信息进行维护,其中包括基本信息检索,证件照上传等
预约管理页面功能:预约管理模块主要用来操作刚刚入院的病人信息,为病人分配主治医生,在病人治疗期间开治疗药品等。
管理员管理:管理员即是系统管理员的信息管理,包括管理员的基本信息等。
患者管理:系统患者管理主要是患者自己进行操作录入,改模块可以根据不同的条件查询不同的患者信息,也包括对患者的一些特殊处理等。
科室管理:科室管理主要对医院中所存在的科室,例如心血管内科,泌尿科等科室进行基本信息的信息化管理,其中主要包括查询,添加,编辑,删除等基本功能。
药品管理:药品管理模块主要包括药品的基本信息,图片,注意事项,功能的信息化管理。
六、代码示例:
@PostMapping()
public ReturnMsg login(@RequestBody AdminDTO adminDTO) {
if (adminDTO.getType() == 1) {
Assert.isTrue(StrUtil.isNotEmpty(adminDTO.getUserName())
&& StrUtil.isNotEmpty(adminDTO.getPassWord()), "账号或密码不能为空!");
LambdaQueryWrapper<AdminDTO> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(AdminDTO::getUserName, adminDTO.getUserName()).
eq(AdminDTO::getPassWord, adminDTO.getPassWord()).last(BaseConstant.LIMIT_ONE);
AdminDTO loginUser = adminService.getOne(queryWrapper);
Assert.notNull(loginUser, "账号或密码错误!");
loginUser.setType(1);
return ReturnMsg.ok(loginUser);
}
if (adminDTO.getType() == 2) {
Assert.isTrue(StrUtil.isNotEmpty(adminDTO.getUserName())
&& StrUtil.isNotEmpty(adminDTO.getPassWord()), "账号或密码不能为空!");
LambdaQueryWrapper<DoctorDTO> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(DoctorDTO::getUserName, adminDTO.getUserName()).
eq(DoctorDTO::getPassWord, adminDTO.getPassWord()).last(BaseConstant.LIMIT_ONE);
DoctorDTO loginUser = doctorService.getOne(queryWrapper);
Assert.notNull(loginUser, "账号或密码错误!");
loginUser.setType(2);
return ReturnMsg.ok(loginUser);
}
if (adminDTO.getType() == 3) {
Assert.isTrue(StrUtil.isNotEmpty(adminDTO.getUserName()), "联系方式不能为空!");
LambdaQueryWrapper<SickInfoDTO> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(SickInfoDTO::getFamilyTel, adminDTO.getUserName()).last(BaseConstant.LIMIT_ONE);
SickInfoDTO loginUser = sickInfoService.getOne(queryWrapper);
if (loginUser == null) {
loginUser = new SickInfoDTO();
loginUser.setFamilyTel(adminDTO.getUserName());
loginUser.setName("患者-游客");
sickInfoService.save(loginUser);
}
loginUser.setType(3);
return ReturnMsg.ok(loginUser);
}
return ReturnMsg.error("账号或密码错误");
}
@GetMapping("/getDeptData")
public ReturnMsg getDeptData(){
List<DeptDTO> dataList = deptService.list();
List<BaseSelectEntity> selectEntities = new ArrayList<>();
if(CollectionUtil.isNotEmpty(dataList)){
dataList.forEach(item -> {
BaseSelectEntity baseSelectEntity = new BaseSelectEntity();
baseSelectEntity.setKey(item.getId());
baseSelectEntity.setValue(item.getDepartmentName());
selectEntities.add(baseSelectEntity);
});
}
return ReturnMsg.ok(selectEntities);
}
/**
* 默认分页查询
*
* @param sickDrugDTO
* @return
* @throws IOException
*/
@PostMapping("/page")
public ReturnMsg page(@RequestBody SickDrugDTO sickDrugDTO) {
return ReturnMsg.ok(baseService.basePage(sickDrugDTO));
}
@PostMapping(value = "/save/update1")
public ReturnMsg baseSaveOrUpdate1(@RequestBody SickDrugDTO entity) throws Exception {
LambdaQueryWrapper<SickDrugDTO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SickDrugDTO::getSubscribeId, entity.getSubscribeId()).eq(SickDrugDTO::getDrugId, entity.getDrugId());
List<SickDrugDTO> list = this.baseService.list(queryWrapper);
if (CollectionUtil.isNotEmpty(list)) {
return ReturnMsg.ok();
}
this.baseService.save(entity);
return ReturnMsg.ok();
}
@Override
public Page<AdminDTO> basePage(AdminDTO adminDTO) {
if (null != adminDTO.getCurrent() && null != adminDTO.getPageSize())
adminDTO.setCurrent((adminDTO.getCurrent() - 1) * adminDTO.getPageSize());
List<AdminDTO> list = this.baseMapper.findList(adminDTO);
int count = this.baseMapper.findPageCount(adminDTO);
Page<AdminDTO> page = new Page<>();
page.setTotal(count);
page.setRecords(list);
return page;
}
@GetMapping("/getDoctorData")
public ReturnMsg getDoctorData() {
List<DoctorDTO> dataList = doctorService.list();
List<BaseSelectEntity> selectEntities = new ArrayList<>();
if (CollectionUtil.isNotEmpty(dataList)) {
dataList.forEach(item -> {
BaseSelectEntity baseSelectEntity = new BaseSelectEntity();
baseSelectEntity.setKey(item.getId());
baseSelectEntity.setValue(item.getNickName());
selectEntities.add(baseSelectEntity);
});
}
return ReturnMsg.ok(selectEntities);
}
@Override
@Resource(name = "drugService")
protected void setBaseService(DrugService drugService) {
this.baseService = drugService;
}
/**
* 图片上传文件夹名称
*/
private final String realPath = "/drug";
/**
* 图片上传
*
* @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 ReturnMsg.ok(this.baseUpLoad(filename, id, realPath, DrugDTO.class));
}
public Page<SubscribeDTO> basePage(SubscribeDTO subscribeDTO) {
if (null != subscribeDTO.getCurrent() && null != subscribeDTO.getPageSize())
subscribeDTO.setCurrent((subscribeDTO.getCurrent() - 1) * subscribeDTO.getPageSize());
List<SubscribeDTO> list = this.baseMapper.findList(subscribeDTO);
int count = this.baseMapper.findPageCount(subscribeDTO);
Page<SubscribeDTO> page = new Page<>();
page.setTotal(count);
page.setRecords(list);
return page;
}
七、论文参考:
八、项目总结:
时间飞逝,一转眼五个月时间已经过去,医院管理系统也从无到可以正式使用,经过此次软件整个流程的设计与开发,使我感触颇深,也让我从中学习到了很多实践性的知识。
一个软件开发的难以程度完全取决于初期对于技术的选型以及之后的项目基础架构的搭建工作。正所谓磨刀不误砍柴工,只有把刀磨的锋利了,效率才会高,软件建设亦是如此。对于项目基础结构的搭建时,需要考虑的因素非常之多,例如项目包结构如何正确划分才能够使结构清晰,基础公共部分的代码该如何处理或者说如何高效的编写等等,在前端项目方面亦是如此,组件化如何拆分才能使代码复用性更高,使功能更加简易开发,在此些问题的基础之下,后端包结构划分为connom公共包,util帮助包,controller Web项目接口包,biz业务处理包,entity实体包,dao持久成包,在此项目包结构的帮助下,整个项目中的文件变得清晰明了,当处理问题的时候新建的文件或者需要修改的代码在什么地方,可以做到一目了然。所以整个项目我认为基础搭建尤为重要。
一个好的项目的研发离不开生活中人们需要的问题,只要存在问题就会存在需要,存在需要,项目才会变得更加的有意义,这才是一个完整的供需关系。在弄清楚需求之后,需要对整个项目的整体业务逻辑进行构思以及最重要的数据库表的设计,项目主要面向的用户是B端用户还是C端用户,不同的用户数据库表的设计思路也存在差异,C端用户的系统主要关键在查询操作,查询速度必须要更快,而此系统主要面向的用户为B端用户所以项目主要关注的点在于如何减少用户的操作难度,对查询速度要求很高。
系统实现是整个项目整体流程的最后一个环节,在明确本次项目需求之后,首先需求进行整体的需求分析和项目设计,然后在进行技术的一个确认工作。此外,最好能和学院的老师一起交流探讨设计的系统有啥不足之处,然后进行修改。最后在慢慢的调试中,系统得以被完整的开发出来。但系统依旧存在不足之处,需要不断的补充和完善。
九、源码获取:
大家点赞、收藏、关注、评论啦 、查看获取联系方式
链接点击直达:下载链接