欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

分布式醫(yī)療掛號(hào)系統(tǒng)Nacos微服務(wù)Feign遠(yuǎn)程調(diào)用數(shù)據(jù)字典

 更新時(shí)間:2022年04月25日 10:47:26   作者:Hudie.  
這篇文章主要為大家介紹了分布式醫(yī)療掛號(hào)系統(tǒng)Nacos微服務(wù)Feign遠(yuǎn)程調(diào)用數(shù)據(jù)字典,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>

需求:制作一個(gè)醫(yī)院列表的顯示功能。列表中包含醫(yī)院編號(hào)、醫(yī)院等級(jí)、醫(yī)院地址、狀態(tài)等。
分析:首先確定是典型的條件查詢帶分頁。由于醫(yī)院的等級(jí)需要查詢數(shù)據(jù)字典部分,這個(gè)調(diào)用是在不同的微服務(wù)模塊中,這就需要進(jìn)行遠(yuǎn)程調(diào)用。

步驟1:向Nacos服務(wù)中心注冊(cè)微服務(wù)

(1)引入Nacos依賴

  <!--服務(wù)注冊(cè)-->
  <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  </dependency>

(2)配置微服務(wù)到Nacos

1.配置service-hosp

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

2.配置service-cmn

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

3.將各微服務(wù)模塊添加到注冊(cè)中心

在各微服務(wù)模塊的啟動(dòng)類添加@EnableDiscoveryClient,表示將微服務(wù)注冊(cè)到Nacos。

步驟2:使用Feign進(jìn)行遠(yuǎn)程調(diào)用

下面在service-hosp創(chuàng)建醫(yī)院列表接口(條件查詢帶分頁),在service-cmn中創(chuàng)建根據(jù)編號(hào)查詢數(shù)據(jù)字典名稱的醫(yī)院等級(jí)接口。然后通過Feign完成遠(yuǎn)程調(diào)用。

(1)service-hosp醫(yī)院列表接口

訪問路徑

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

Controller:

@RestController
@RequestMapping("/admin/hosp/hospital")
@CrossOrigin
public class HospitalController {
    @Autowired
    private HospitalService hospitalService;
    /**
     * 醫(yī)院列表(條件查詢帶分頁)
     * @param page
     * @param limit
     * @param hospitalQueryVo
     * @return
     */
    @GetMapping("list/{page}/{limit}")
    public Result listHosp(@PathVariable Integer page,
                           @PathVariable Integer limit,
                           HospitalQueryVo hospitalQueryVo){
        Page<Hospital> pageModel = hospitalService.selectHospPage(page,limit,hospitalQueryVo);
        return Result.ok(pageModel);
    }
}

Service接口:

    // 醫(yī)院列表(條件查詢帶分頁)
    Page<Hospital> selectHospPage(Integer page, Integer limit, HospitalQueryVo hospitalQueryVo);

Service實(shí)現(xiàn)類:

// 醫(yī)院列表(條件查詢帶分頁)
    @Override
    public Page<Hospital> selectHospPage(Integer page, Integer limit, HospitalQueryVo hospitalQueryVo) {
        // 1.創(chuàng)建pageable對(duì)象
        Pageable pageable = PageRequest.of(page - 1, limit);
        // 2.創(chuàng)建條件匹配器
        ExampleMatcher matcher = ExampleMatcher.matching()
                .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)
                .withIgnoreCase(true);
        // 3.hospitalQueryVo轉(zhuǎn)換為Hospital對(duì)象
        Hospital hospital = new Hospital();
        BeanUtils.copyProperties(hospitalQueryVo, hospital);
        // 4.創(chuàng)建對(duì)象
        Example<Hospital> example = Example.of(hospital, matcher);
        // 5.調(diào)用方法實(shí)現(xiàn)查詢
        Page<Hospital> pages = hospitalRepository.findAll(example, pageable);
        // 6.得到所有醫(yī)院信息的集合
        pages.getContent().stream().forEach(item -> {
        	// 此方法執(zhí)行了遠(yuǎn)程調(diào)用
            this.setHospitalHosType(item);
        });
        return pages;
    }

Repository:

@Repository
public interface HospitalRepository extends MongoRepository<Hospital,String> {
    /**
     * 根據(jù)HosCode獲得記錄
     * @param hoscode
     * @return
     */
    Hospital getHospitalByHoscode(String hoscode);
}

(2)service-cmn醫(yī)院等級(jí)/地址接口

由于醫(yī)院等級(jí)、省市區(qū)地址都是取得數(shù)據(jù)字典value值,所以在列表顯示醫(yī)院等級(jí)、醫(yī)院地址時(shí)要根據(jù)數(shù)據(jù)字典value值獲取數(shù)據(jù)字典名稱。我們?cè)谶@里需要寫兩個(gè)接口。

查詢醫(yī)院等級(jí),訪問路徑為

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

查詢醫(yī)院地址,訪問路徑為

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

Controller:

    /**
     * 根據(jù)dictCode和value查詢 數(shù)據(jù)字典
     * @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;
    }
     /**
     * 根據(jù)value查詢 數(shù)據(jù)字典
     * @param value
     * @return
     */
    @GetMapping("getName/{value}")
    public String getName(@PathVariable String value) {
        String dictName = dictService.getDictName("",value);
        return dictName;
    }

Service接口:

    /**
     * 根據(jù)dictCode和value查詢 數(shù)據(jù)字典
     * @param dictCode
     * @param value
     * @return
     */
    String getDictName(String dictCode, String value);

Service實(shí)現(xiàn)類:

 /**
     * 根據(jù)dictCode和value查詢 數(shù)據(jù)字典
     * @param dictCode
     * @param value
     * @return
     */
    @Override
    public String getDictName(String dictCode, String value) {
        // 如果dictCode為空,直接根據(jù)value查詢;否則根據(jù)dictCode和value查詢
        if (StringUtils.isEmpty(dictCode)) {
            QueryWrapper<Dict> wrapper = new QueryWrapper<>();
            wrapper.eq("value", value);
            Dict dict = baseMapper.selectOne(wrapper);
            return dict.getName();
        } else {
            // 根據(jù)dictcode查詢dict對(duì)象,得到dict的id值
            Dict codeDict = this.getDictByDictCode(dictCode);
            Long parent_id = codeDict.getId();
            // 根據(jù)parent_id和value進(jìn)行查詢
            Dict finalDict = baseMapper.selectOne(new QueryWrapper<Dict>()
                    .eq("parent_id", parent_id)
                    .eq("value", value));
            return finalDict.getName();
        }
    }

數(shù)據(jù)訪問層由Mybatis-plus完成。

(3)引入Feign依賴

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <scope>provided</scope>
        </dependency>

單獨(dú)創(chuàng)建service-cmn-clientMave工程進(jìn)行遠(yuǎn)程調(diào)用。

(4)調(diào)用端通過包掃描Feign

在調(diào)用端的啟動(dòng)類上,添加 @EnableFeignClients(basePackages = "com.gql") 注解。

(5)遠(yuǎn)程調(diào)用

接口中的方法為要調(diào)用模塊的方法簽名,注意訪問路徑為完整路徑,且形參中注解后要加上參數(shù)名稱。

1.遠(yuǎn)程調(diào)用接口

// 要調(diào)用的微服務(wù)名稱
@FeignClient("service-cmn")
@Repository
public interface DictFeignClient {
    /**
     * 根據(jù)dictCode和value查詢 數(shù)據(jù)字典
     * @param dictCode
     * @param value
     * @return
     */
    @GetMapping("/admin/cmn/dict/getName/{dictCode}/{value}")
    public String getName(@PathVariable("dictCode") String dictCode,
                          @PathVariable("value") String value);
    /**
     * 根據(jù)value查詢 數(shù)據(jù)字典
     * @param value
     * @return
     */
    @GetMapping("/admin/cmn/dict/getName/{value}")
    public String getName(@PathVariable("value") String value);
}

2.執(zhí)行遠(yuǎn)程調(diào)用

    @Autowired
    private DictFeignClient dictFeignClient;
    // 獲取查詢list集合,遍歷進(jìn)行醫(yī)院等級(jí)封裝
    private Hospital setHospitalHosType(Hospital hospital) {
        // 封裝醫(yī)院等級(jí)
        String hostypeString = dictFeignClient.getName("Hostype", hospital.getHostype());
        hospital.getParam().put("hostypeString", hostypeString);
        // 封裝醫(yī)院省市區(qū)
        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頁面中添加請(qǐng)求參數(shù)后,點(diǎn)擊執(zhí)行按鈕。

swagger頁面添加請(qǐng)求參數(shù)

成功通過遠(yuǎn)程調(diào)用獲取到醫(yī)院等級(jí)、地址:

通過遠(yuǎn)程調(diào)用獲取到醫(yī)院等級(jí)、地址

以上就是分布式醫(yī)療掛號(hào)系統(tǒng)Nacos微服務(wù)Feign遠(yuǎn)程調(diào)用數(shù)據(jù)字典的詳細(xì)內(nèi)容,更多關(guān)于分布式醫(yī)療掛號(hào)系統(tǒng)Nacos Feign遠(yuǎn)程調(diào)用數(shù)據(jù)字典的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論