医院信息化与智能化系统(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
完成业务逻辑
使用departmentRepository
的findall
方法需要传递两个参数,一个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请求方式,这里要接受hoscode
和depcode
用于后续指定删除对象。
这里使用的删除方式是物理删除
,注释部分是逻辑删除,但使用逻辑删除前端删不掉
,即删除了还有信息存留
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
实体类作为排班表对应类,这里和之前相同,所以直接写名称对照即可。
创建ScheduleRepository
、ScheduleService
、ScheduleServiceImpl
上传功能和department上传科室几乎相同,需要注意的是:
- 查询排班是否存在,用的是
hoscode
和hosScheduleId
,所以对应spring data的方法要修改 - 无论是否存在,都需要设置状态为1
schedule.setStatus(1);
查询功能,需要注意的是:
1. 项目也提供了对应的vo类,ScheduleQueryVo
2. 需要获取depcode
并设置给scheduleQueryVo.setDepcode(depcode);
删除功能,需要注意的是
- 方法体中需要获取
hosScheduleId
用来删除排班(这里也暂时设置逻辑删除)