系统介绍
智慧医疗管理系统通过整合品牌、科室、疾病、药品等实体信息,提供了一个全面、可靠和易于使用的信息管理平台。在此基础上,系统进一步融合了智能医生功能,实现了智能问答,从而提升了系统的智能化水平和服务质量,使得系统能够模拟医生的问诊思路,通过自然语言处理技术与患者进行交互,理解患者的症状描述,并提供初步的诊断建议。这一功能不仅提高了患者咨询的响应速度,还减轻了医生的工作负担,使得医生可以更专注于复杂病例的诊疗。
系统功能
- 品牌管理
- 系统提供了品牌表,用于存储和管理不同医疗健康品牌的信息。
- 功能包括品牌的增加、删除、修改和查询。
- 科室管理
- 科室表用于维护医疗机构内各个科室的基本信息。
- 支持科室信息的增删改查,便于医院进行科室资源规划和管理。
- 疾病档案管理
- 疾病表记录了各种疾病的详细信息,包括疾病名称、介绍、一般症状、特殊症状、推荐用药等。
- 系统支持疾病信息的全面管理,包括疾病数据的录入、更新、浏览和统计分析。
- 药品管理
- 药品表用于跟踪药品的基本信息,如药品名称、品牌、类型(中药或西药)、介绍和图片等。
- 系统能够实现药品库存的动态管理,包括入库、出库、库存预警和药品信息查询。
- 智能医生问答
- 系统能够模拟医生的问诊思路,通过自然语言处理技术与患者进行交互,理解患者的症状描述,并提供初步的诊断建议
- 患者教育
- 利用疾病和药品表中的数据,系统可以提供患者教育资料,帮助患者更好地理解疾病和用药知识。
- 信息共享与交互
- 系统支持医疗信息在不同科室、医生和患者之间安全、高效地共享和交互。
- 用户权限管理
- 系统提供多层次的用户权限管理,确保信息安全和合规性。
- 交互式用户界面
- 提供直观、易用的用户界面,确保用户能够快速上手并高效地使用系统。
系统优势
- 高效性:优化的数据库设计和查询算法,提高数据处理速度。
- 智能化:利用智能算法辅助诊断和治疗建议,提升医疗服务质量。
- 可扩展性:模块化设计,便于系统功能扩展和升级。
- 用户友好:直观的操作界面和流畅的用户体验设计。
- 安全性:强大的数据安全保护措施,确保患者信息和医疗数据的安全。
功能图
代码
package com.example.springboot.controller;
import cn.hutool.core.util.StrUtil;
import cn.hutool.poi.excel.ExcelReader;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.springboot.common.OperationLogs;
import com.example.springboot.common.LogType;
import com.example.springboot.common.Result;
import com.example.springboot.entity.User;
import com.example.springboot.exception.ServiceException;
import com.example.springboot.service.UserService;
import com.example.springboot.utils.TokenUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@CrossOrigin
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
UserService userService;
/**
* 新增用户信息
*/
@OperationLogs(operation = "用户", type = LogType.ADD)
@PostMapping("/add")
public Result add(@RequestBody User user) {
try {
userService.save(user);
} catch (Exception e) {
if (e instanceof DuplicateKeyException) {
return Result.error("插入数据库错误");
} else {
return Result.error("系统错误");
}
}
return Result.success();
}
/**
* 修改用户信息
*/
@OperationLogs(operation = "用户", type = LogType.UPDATE)
@PutMapping("/update")
public Result update(@RequestBody User user) {
userService.updateById(user);
return Result.success();
}
/**
* 删除用户信息
*/
@OperationLogs(operation = "用户", type = LogType.DELETE)
@DeleteMapping("/delete/{id}")
public Result delete(@PathVariable Integer id) {
User currentUser = TokenUtils.getCurrentUser();
if (id.equals(currentUser.getId())) {
throw new ServiceException("不能删除当前的用户");
}
userService.removeById(id);
return Result.success();
}
/**
* 批量删除用户信息
*/
@OperationLogs(operation = "用户", type = LogType.BATCH_DELETE)
@DeleteMapping("/delete/batch")
public Result batchDelete(@RequestBody List<Integer> ids) { // [7, 8]
User currentUser = TokenUtils.getCurrentUser();
if (currentUser != null && currentUser.getId() != null && ids.contains(currentUser.getId())) {
throw new ServiceException("不能删除当前的用户");
}
userService.removeBatchByIds(ids);
return Result.success();
}
/**
* 查询全部用户信息
*/
@GetMapping("/selectAll")
public Result selectAll() {
List<User> userList = userService.list(new QueryWrapper<User>().orderByDesc("id")); // select * from user order by id desc
return Result.success(userList);
}
/**
* 根据ID查询用户信息
*/
@GetMapping("/selectById/{id}")
public Result selectById(@PathVariable Integer id) {
User user = userService.getById(id);
return Result.success(user);
}
/**
* 多条件模糊查询用户信息
* pageNum 当前的页码
* pageSize 每页查询的个数
*/
@GetMapping("/selectByPage")
public Result selectByPage(@RequestParam Integer pageNum,
@RequestParam Integer pageSize,
@RequestParam String username,
@RequestParam String name) {
QueryWrapper<User> queryWrapper = new QueryWrapper<User>().orderByDesc("id"); // 默认倒序,让最新的数据在最上面
queryWrapper.like(StrUtil.isNotBlank(username), "username", username);
queryWrapper.like(StrUtil.isNotBlank(name), "name", name);
// select * from user where username like '%#{username}%' and name like '%#{name}%'
Page<User> page = userService.page(new Page<>(pageNum, pageSize), queryWrapper);
return Result.success(page);
}
/**
* 批量导出数据
*/
@GetMapping("/export")
public void exportData(@RequestParam(required = false) String username,
@RequestParam(required = false) String name,
@RequestParam(required = false) String ids, // 1,2,3,4,5
HttpServletResponse response) throws IOException {
ExcelWriter writer = ExcelUtil.getWriter(true);
List<User> list;
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
if (StrUtil.isNotBlank(ids)) { // ["1", "2", "3"] => [1,2,3]
List<Integer> idsArr1 = Arrays.stream(ids.split(",")).map(Integer::valueOf).collect(Collectors.toList());
queryWrapper.in("id", idsArr1);
} else {
// 第一种全部导出或者条件导出
queryWrapper.like(StrUtil.isNotBlank(username), "username", username);
queryWrapper.like(StrUtil.isNotBlank(name), "name", name);
}
list = userService.list(queryWrapper); // 查询出当前User表的所有数据
writer.write(list, true);
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("用户信息表", "UTF-8") + ".xlsx");
ServletOutputStream outputStream = response.getOutputStream();
writer.flush(outputStream, true);
writer.close();
outputStream.flush();
outputStream.close();
}
/**
* 批量导入
* @param file 传入的excel文件对象
* @return 导入结果
*/
@PostMapping("/import")
public Result importData(MultipartFile file) throws IOException {
ExcelReader reader = ExcelUtil.getReader(file.getInputStream());
List<User> userList = reader.readAll(User.class);
// 写入数据到数据库
try {
userService.saveBatch(userList);
} catch (Exception e) {
e.printStackTrace();
return Result.error("数据批量导入错误");
}
return Result.success();
}
}