医院信息化与智能化系统(14)

发布于:2024-11-03 ⋅ 阅读:(4) ⋅ 点赞:(0)

医院信息化与智能化系统(14)

这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置
如果你想通过文字描述或代码画流程图,可以试试PlantUML,告诉GPT你的文件结构,让他给你对应的代码

预约挂号微服务模块搭建

前端知识点补充,此章节不会详细讲具体前端的每个知识点

1、查询医院 接口

与上传医院 接口类似,在ApiController内创建方法,指定@PostMapping路径,下面只描述逻辑。

通过 HttpServletRequest request获取传递过来的医院编号签名,并判断签名是否一致;

调用getByHoscode方法实现根据hoscode查询,该方法在HospitalServiceImpl定义。其方法体就是内部调用getHospitalByHoscode方法,这个方法是Spring Data提供的。

完成的测试结果是:
在这里插入图片描述

2、上传科室 接口

在model模块的yygh/model/hosp提供了Department实体类,对应科室信息,包括医院编号科室编号

随后在service-hosp模块的repository文件夹下创建DepartmentRepository,用@Repository修饰,继承MongoRepository

接着创建DepartmentService接口,DepartmentServiceImpl实现该接口,用@Service修饰。

controller继续沿用之前的ApiController,上传方法的编写和上传医院几乎一样,就是把方法写在DepartmentServiceImpl

具体逻辑是:把参数map集合转换成对象Department,随后创建getDepartmentByHoscodeAndDepcode:根据hoscode和depcode查询并返回变量departmentExist后续来判断是否存在,由Spring Data提供,只要声明即可使用。

测试,在科室列表点添加,使用提供的department.json上传即可,成功会返回操作成功,在Mongdb数据库会有Department表

在这里插入图片描述

3、查询|删除 科室 接口

查询科室

在ApiController中创建方法findDepartment,设置post请求方式,这里要判断传递来的信息是否包含当前页page与每页记录数limit,不存在默认设为1

int page = StringUtils.isEmpty(paremMap.get("page"))? 1:Integer.parseInt((String) paremMap.get("page"));

判断完签名之后,实例化一个DepartmentQueryVo类,并把hoscode设置给它。在查询时创建一个新的查询类DepartmentQueryVo而不直接使用原有的实体类Department是为了将查询条件和实体类分离,以更好地管理数据结构和业务逻辑。

随后调用findPageDepartment方法处理查询条件,返回查询结果,在DepartmentServiceImpl完成业务逻辑

使用departmentRepositoryfindall方法需要传递两个参数,一个Example类一个Pageable类;

Pageable类可以直接用当前页每页记录数构建

Example类需要构建匹配规则以及查询样本对象(这里要求是Department类)

    @Override
    public Page<Department> findPageDepartment(int page, int limit, DepartmentQueryVo departmentQueryVo) {
        //创建Pageable对象,设置当前页和每页记录数
        //0是第一页
        Pageable pageable = PageRequest.of(page-1,limit);
        //创建Example对象
        Department department = new Department();
        BeanUtils.copyProperties(departmentQueryVo,department);

        ExampleMatcher matcher = ExampleMatcher.matching()
                .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)
                .withIgnoreCase(true);
        Example<Department> example = Example.of(department,matcher);
        Page<Department> all = departmentRepository.findAll(example, pageable);
        return all;
    }

删除科室

在ApiController中创建方法removeDepartment,设置post请求方式,这里要接受hoscodedepcode用于后续指定删除对象。

这里使用的删除方式是物理删除,注释部分是逻辑删除,但使用逻辑删除前端删不掉,即删除了还有信息存留

    public void remove(String hoscode, String depcode) {
        //根据医院编号和科室编号查询
        Department department = departmentRepository.getDepartmentByHoscodeAndDepcode(hoscode, depcode);
        if (department != null){
            departmentRepository.deleteById(department.getId());
              //department.setIsDeleted(1);
             // departmentRepository.save(department);
        }

4、排班接口功能实现

项目提供了Schedule实体类作为排班表对应类,这里和之前相同,所以直接写名称对照即可。

创建ScheduleRepositoryScheduleServiceScheduleServiceImpl

上传功能和department上传科室几乎相同,需要注意的是:

  1. 查询排班是否存在,用的是hoscodehosScheduleId,所以对应spring data的方法要修改
  2. 无论是否存在,都需要设置状态为1 schedule.setStatus(1);

查询功能,需要注意的是:
1. 项目也提供了对应的vo类,ScheduleQueryVo
2. 需要获取depcode并设置给scheduleQueryVo.setDepcode(depcode);

删除功能,需要注意的是

  1. 方法体中需要获取hosScheduleId用来删除排班(这里也暂时设置逻辑删除)

在这里插入图片描述