千家信息网

分布式医疗挂号系统Nacos微服务Feign远程调用数据字典的方法

发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍"分布式医疗挂号系统Nacos微服务Feign远程调用数据字典的方法",在日常操作中,相信很多人在分布式医疗挂号系统Nacos微服务Feign远程调用数据字典的方法问题上存在疑惑,小编
千家信息网最后更新 2025年01月19日分布式医疗挂号系统Nacos微服务Feign远程调用数据字典的方法

这篇文章主要介绍"分布式医疗挂号系统Nacos微服务Feign远程调用数据字典的方法",在日常操作中,相信很多人在分布式医疗挂号系统Nacos微服务Feign远程调用数据字典的方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"分布式医疗挂号系统Nacos微服务Feign远程调用数据字典的方法"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

    需求:制作一个医院列表的显示功能。列表中包含医院编号、医院等级、医院地址、状态等。
    分析:首先确定是典型的条件查询带分页。由于医院的等级需要查询数据字典部分,这个调用是在不同的微服务模块中,这就需要进行远程调用。

    步骤1:向Nacos服务中心注册微服务

    (1)引入Nacos依赖

              com.alibaba.cloud      spring-cloud-starter-alibaba-nacos-discovery  

    (2)配置微服务到Nacos 1.配置service-hosp

    # 服务端口server.port=8201# 服务名spring.application.name=service-hosp# Nacos服务地址spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

    2.配置service-cmn

    # 服务端口server.port=8202# 服务名spring.application.name=service-cmn# Nacos服务地址spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

    3.将各微服务模块添加到注册中心

    在各微服务模块的启动类添加@EnableDiscoveryClient,表示将微服务注册到Nacos。

    步骤2:使用Feign进行远程调用

    下面在service-hosp创建医院列表接口(条件查询带分页),在service-cmn中创建根据编号查询数据字典名称的医院等级接口。然后通过Feign完成远程调用。

    (1)service-hosp医院列表接口

    访问路径

    /admin/hosp/hospital/list/{page}/{limit}

    Controller:

    @RestController@RequestMapping("/admin/hosp/hospital")@CrossOriginpublic class HospitalController {    @Autowired    private HospitalService hospitalService;    /**     * 医院列表(条件查询带分页)     * @param page     * @param limit     * @param hospitalQueryVo     * @return     */    @GetMapping("list/{page}/{limit}")    public Result listHosp(@PathVariable Integer page,                           @PathVariable Integer limit,                           HospitalQueryVo hospitalQueryVo){        Page pageModel = hospitalService.selectHospPage(page,limit,hospitalQueryVo);        return Result.ok(pageModel);    }}

    Service接口:

        // 医院列表(条件查询带分页)    Page selectHospPage(Integer page, Integer limit, HospitalQueryVo hospitalQueryVo);

    Service实现类:

    // 医院列表(条件查询带分页)    @Override    public Page selectHospPage(Integer page, Integer limit, HospitalQueryVo hospitalQueryVo) {        // 1.创建pageable对象        Pageable pageable = PageRequest.of(page - 1, limit);        // 2.创建条件匹配器        ExampleMatcher matcher = ExampleMatcher.matching()                .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)                .withIgnoreCase(true);        // 3.hospitalQueryVo转换为Hospital对象        Hospital hospital = new Hospital();        BeanUtils.copyProperties(hospitalQueryVo, hospital);        // 4.创建对象        Example example = Example.of(hospital, matcher);        // 5.调用方法实现查询        Page pages = hospitalRepository.findAll(example, pageable);        // 6.得到所有医院信息的集合        pages.getContent().stream().forEach(item -> {                // 此方法执行了远程调用            this.setHospitalHosType(item);        });        return pages;    }

    Repository:

    @Repositorypublic interface HospitalRepository extends MongoRepository {    /**     * 根据HosCode获得记录     * @param hoscode     * @return     */    Hospital getHospitalByHoscode(String hoscode);}

    (2)service-cmn医院等级/地址接口

    由于医院等级、省市区地址都是取得数据字典value值,所以在列表显示医院等级、医院地址时要根据数据字典value值获取数据字典名称。我们在这里需要写两个接口。

    查询医院等级,访问路径为

    /admin/cmn/dict/getName/{dictCode}/{value}

    查询医院地址,访问路径为

    /admin/cmn/dict/getName/{value}

    Controller:

        /**     * 根据dictCode和value查询 数据字典     * @param dictCode     * @param value     * @return     */    @GetMapping("getName/{dictCode}/{value}")    public String getName(@PathVariable String dictCode,                          @PathVariable String value) {        String dictName = dictService.getDictName(dictCode, value);        return dictName;    }     /**     * 根据value查询 数据字典     * @param value     * @return     */    @GetMapping("getName/{value}")    public String getName(@PathVariable String value) {        String dictName = dictService.getDictName("",value);        return dictName;    }

    Service接口:

        /**     * 根据dictCode和value查询 数据字典     * @param dictCode     * @param value     * @return     */    String getDictName(String dictCode, String value);

    Service实现类:

     /**     * 根据dictCode和value查询 数据字典     * @param dictCode     * @param value     * @return     */    @Override    public String getDictName(String dictCode, String value) {        // 如果dictCode为空,直接根据value查询;否则根据dictCode和value查询        if (StringUtils.isEmpty(dictCode)) {            QueryWrapper wrapper = new QueryWrapper<>();            wrapper.eq("value", value);            Dict dict = baseMapper.selectOne(wrapper);            return dict.getName();        } else {            // 根据dictcode查询dict对象,得到dict的id值            Dict codeDict = this.getDictByDictCode(dictCode);            Long parent_id = codeDict.getId();            // 根据parent_id和value进行查询            Dict finalDict = baseMapper.selectOne(new QueryWrapper()                    .eq("parent_id", parent_id)                    .eq("value", value));            return finalDict.getName();        }    }

    数据访问层由Mybatis-plus完成。

    (3)引入Feign依赖

                        org.springframework.cloud            spring-cloud-starter-openfeign            provided        

    单独创建service-cmn-clientMave工程进行远程调用。

    (4)调用端通过包扫描Feign

    在调用端的启动类上,添加 @EnableFeignClients(basePackages = "com.gql") 注解。

    (5)远程调用

    接口中的方法为要调用模块的方法签名,注意访问路径为完整路径,且形参中注解后要加上参数名称。

    1.远程调用接口

    // 要调用的微服务名称@FeignClient("service-cmn")@Repositorypublic interface DictFeignClient {    /**     * 根据dictCode和value查询 数据字典     * @param dictCode     * @param value     * @return     */    @GetMapping("/admin/cmn/dict/getName/{dictCode}/{value}")    public String getName(@PathVariable("dictCode") String dictCode,                          @PathVariable("value") String value);    /**     * 根据value查询 数据字典     * @param value     * @return     */    @GetMapping("/admin/cmn/dict/getName/{value}")    public String getName(@PathVariable("value") String value);}

    2.执行远程调用

        @Autowired    private DictFeignClient dictFeignClient;    // 获取查询list集合,遍历进行医院等级封装    private Hospital setHospitalHosType(Hospital hospital) {        // 封装医院等级        String hostypeString = dictFeignClient.getName("Hostype", hospital.getHostype());        hospital.getParam().put("hostypeString", hostypeString);        // 封装医院省市区        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);        return hospital;    }

    步骤3:使用swagger测试

    在swagger页面中添加请求参数后,点击执行按钮。

    成功通过远程调用获取到医院等级、地址:

    到此,关于"分布式医疗挂号系统Nacos微服务Feign远程调用数据字典的方法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

    医院 查询 服务 数据 字典 等级 接口 方法 地址 条件 路径 分布式 医疗 系统 名称 对象 模块 学习 步骤 封装 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 文件从客户机转移到服务器 轻量网络数据库 如何用mcgs来测数据库 方舟服务器在哪里建房子安全 5g网络安全供应商 数据库系统概论第五版pdf p2p网络安全是什么意思 学软件开发技术哪种好 企业网络安全准入控制系统哪家好 南阳网络安全教育平台下载 用友u8软件开发语言 地理信息系统软件开发公司 世界ol服务器消失怎么找回 深圳网络技术有限公司产品 赌博游戏软件开发价格 软件开发行业税收筹划方案 ios 模型软件开发 txt和数据库哪个读取快 南京网络技术有限公司怎么样 计算机三级考试网络技术填空题 华图网络安全申论题目 数据库管理系统属于什么应用软件 数据库如何做网页视频 宝山区无线网络技术产品 达梦数据库操作履历 最好的收银系统的软件开发 无锡电子软件开发优势 网络安全人才素质要求 深圳网络安全保卫 首都网络安全日活动
    0