医院管理
目前我们把医院、科室和排班都上传到了平台,那么管理平台就应该把他们管理起来,在我们的管理平台能够直观的查看这些信息。
Nacos 目的
目前在医院列表中需要医院的信息和等级信息,而两段信息属于不同的的模块,service-hosp和service-cmn,所以我们需要使用到远程调用。
步骤
- 首先service的pom文件中启动加入服务注册和服务调用feign依赖
- 在service_client的pom文件中也加入服务调用依赖,并且添加@FeignClient(“service-cmn”)注解
- 在被调用着cmn的启动类中添加@EnableDiscoveryClient注解
- 在调用着service_hosp的启动类中添加@EnableDiscoveryClient,@EnableFeignClients注解,指定clients,这里不指定无法在service中注入DictFeignClient(个人原因,不知道为啥)
@EnableDiscoveryClient
@EnableFeignClients(basePackages = "com.atguigu",clients = {DictFeignClient.class})
实现流程
在mongodb中,存在hosptype、provinceCode、cityCode、districtCode这些字段,但是这些字段只是存放一个value值,并没有真实信息,要想获取具体信息,就要去对应的数据字典中查。
所以,查询医院列表,列表中包含医院的等级信息和区域,等级信息通过dictFeignClient远程调用cmn实现,下面是service_hosp中的HospitalServiceImpl实现类中的方法
//查询医院列表,列表中包含医院的等级信息,等级信息通过dictFeignClient远程调用cmn实现
@Override
public Page<Hospital> selectPage(Integer page, Integer limit, HospitalQueryVo hospitalQueryVo) {
Pageable pageable = PageRequest.of(page-1, limit);
Hospital hospital = new Hospital();
BeanUtils.copyProperties(hospitalQueryVo, hospital);
//创建匹配器,即如何使用查询条件
ExampleMatcher matcher = ExampleMatcher.matching() //构建对象
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
.withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写
//创建实例
Example<Hospital> example = Example.of(hospital, matcher);
Page<Hospital> pages = hospitalRepository.findAll(example, pageable);
//获取查询list集合,遍历进行医院等级封装,封装到Hospital的paramMap中
pages.getContent().stream().forEach(item -> {
this.setHospitalHosType(item);
});
return pages;
}
private Hospital setHospitalHosType(Hospital hospital) {
//根据dictCode和value获取医院等级名称
String hostypeString = dictFeignClient.getName("Hostype", hospital.getHostype());
//查询省 市 地区
String provinceString = dictFeignClient.getName(hospital.getProvinceCode());
String cityString = dictFeignClient.getName(hospital.getCityCode());
String districtString = dictFeignClient.getName(hospital.getDistrictCode());
hospital.getParam().put("fullAddress",provinceString+cityString+districtString);
hospital.getParam().put("hostypeString",hostypeString);
return hospital;
}
这里的dictFeignClient是单独的一个Service_client子模块,包括一个DictFeignClient接口,加上@FeignClient(“service-cmn”)注解
/**
* 数据字典API接口
*/
@FeignClient("service-cmn")
@Repository
public interface DictFeignClient {
/**
* 获取数据字典名称
* @param parentDictCode
* @param value
* @return
*/
@GetMapping(value = "/admin/cmn/dict/getName/{parentDictCode}/{value}")
String getName(@PathVariable("parentDictCode") String parentDictCode, @PathVariable("value") String value);
/**
* 获取数据字典名称
* @param value
* @return
*/
@GetMapping(value = "/admin/cmn/dict/getName/{value}")
String getName(@PathVariable("value") String value);
}
其中的getname方法是cnm的dictController中的方法,通过value获取地区信息和通过value和dictcode获得医院等级信息(因为仅用value不能得到等级信息)。
dictController中的dictService.getNameByParentDictCodeAndValue方法操作mybatisPlus获得value或者dictcode和value所对应的地区名称或医院等级,最后在service_hosp的实现类中会调用dictFeignClient.getName(),返回等级和地区信息,封装到hosptial中并返回Page<hosptial>对象。
至此,可以获得包含医院等级和地区信息的医院信息。
前端显示(三部分)
-
省市联动搜索框
-
更新医院状态
-
医院详情页显示