医院管理 Nacos 注册中心和服务调用

医院管理

目前我们把医院、科室和排班都上传到了平台,那么管理平台就应该把他们管理起来,在我们的管理平台能够直观的查看这些信息。

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>对象。

至此,可以获得包含医院等级和地区信息的医院信息。

在这里插入图片描述

前端显示(三部分)

  • 省市联动搜索框

  • 更新医院状态
    在这里插入图片描述

  • 医院详情页显示
    在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值