后端-医院管理之医院列表实现

1.2.1、接口编写的背景

  • 由于我们的医院等级、省市区地址都是取的数据字典value值,因此我们在列表显示医院等级与医院地址时要根据数据字典value值获取数据字典名称。

  • 通过学习数据字典我们知道,根据上级编码与value值可以获取对应的数据字典名称,如果value值能够保持唯一(不一定唯一),我们也可以直接通过value值获取数据字典名称,目前省市区三级数据我们使用的是国家统计局的数据,数据编码我们就是数据字典的id与value,所以value能够唯一确定一条数据字典,如图:

在这里插入图片描述

1.2.2、编写接口

在service_cmn中编写接口,返回getName值,供service_hosp模块调用。

控制层:

在这里插入图片描述

//根据dictCode和value查询

@GetMapping(“getName/{dictCode}/{value}”)

public String getName(@PathVariable String dictCode,

@PathVariable String value){

String dictName = dictService.getName(dictCode,value);

return dictName;

}

//根据value查询

@GetMapping(“getName/{value}”)

public String getName(@PathVariable String value){

String dictName = dictService.getName(“”,value);

return dictName;

}

业务层接口:

//查询getName

String getName(String dictCode, String value);

业务层实现类:;

在这里插入图片描述

//查询getName

@Override

public String getName(String dictCode, String value) {

//如果dictCode为空,根据value查询

if(StringUtils.isEmpty(dictCode)){

QueryWrapper wrapper = new QueryWrapper<>();

wrapper.eq(“value”,value);

Dict dict = baseMapper.selectOne(wrapper);

return dict.getName();

}else {//如果value为空,首先根据dictCode查询出Dict对象

Dict Dict = getDictByDictCode(dictCode);

Long parentId = Dict.getId();

//在根据查询出来的parent_id和value查询

Dict finalDict = baseMapper.selectOne(new QueryWrapper()

.eq(“parent_id”, parentId)

.eq(“value”, value));

return finalDict.getName();

}

private Dict getDictByDictCode(String dictCode){

QueryWrapper wrapper = new QueryWrapper<>();

wrapper.eq(“dict_code”, dictCode);

Dict codeDict = baseMapper.selectOne(wrapper);

return codeDict;

}

1.3、服务调用–案例


1.3.1、需求背景:在service_hosp中调用service_cmn中的接口

因为医院的所有信息都在mysql数据库中的yygh_cmn数据库的dict表中存放。该数据是service_cmn模块下的数据库。

在这里插入图片描述

医院平台端系统的数据在mongoDB中存放,在mongoDB中存放的医院部分信息都是编号,没有真实的名字。该数据是service_hosp模块中的数据:

在这里插入图片描述因此要在service_hosp中调用service_cmn的接口,查询医院相关数据,并最终在浏览器上显示医院的真实名字,而不是显示其编号。

创建service_client模块,在该模块下在创建子模块做远程调用使用。

在这里插入图片描述

在service_client的pom.xml文件中引入依赖:

在这里插入图片描述

com.study

common_util

com.study

model

org.springframework.boot

spring-boot-starter-web

provided

org.springframework.cloud

spring-cloud-starter-openfeign

2.2.6.RELEASE

1.3.2、在service_client模块下创建模块service_client_cmn

把被调用的service_cmn的接口在service_client_cmn中做声明:

在这里插入图片描述

@FeignClient(“service-cmn”)

public interface DictFeignClient {

@GetMapping(“/admin/cmn/dict/getName/{dictCode}/{value}”)

public String getName(@PathVariable(“dictCode”) String dictCode,

@PathVariable(“value”) String value);

@GetMapping(“/admin/cmn/dict/getName/{value}”)

public String getName(@PathVariable(“value”) String value);

}

1.3.3、在service_hosp导入service_cmn_client模块坐标

因为服务调用的代码是在service_cmn_client中编写的,而最终是service_hosp调用service_cmn中的接口。所以要在service_hosp中引入service_cmn_client依赖。

在这里插入图片描述

1.3.4、在service_hosp的hospitalServiceImpl中注入DictFeignClient

在这里插入图片描述

1.3.5、在service_hosp的hospitalServiceImpl编写代码实现服务远程调用

主要是远程调用service_cmn中的接口,查询出来医院的等级信息。封装到hospital中供平台显示。

在这里插入图片描述

//医院信息列表(分页带模糊查询)

@Override

public Page selectHospPage(Integer page, Integer limit, HospitalQueryVo hospitalQueryVo) {

//创建pageable,用于设置分页信息

Pageable pageable = PageRequest.of(page,limit);

//设置条件匹配规则

ExampleMatcher matcher = ExampleMatcher.matching()

.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)//改变默认字符串匹配为:模糊查询

.withIgnoreCase(true);//查询时忽略大小写

//将hospitalQueryVo对象转换成Hospital对象

Hospital hospital = new Hospital();

BeanUtils.copyProperties(hospitalQueryVo,hospital);

//创建Example对象,用于设置查询条件

Example example = Example.of(hospital,matcher);

//调用方法实现查询,返回查询到底所有的医院的信息(list集合)

Page pages = hospitalRepository.findAll(example, pageable);

//获取查询的list集合,遍历及进行医院等级的封装

pages.getContent().stream().forEach(item->{

this.getHospitalHosType(item);

});

return pages;

}

//远程调用服务,获取医院等级

private Hospital getHospitalHosType(Hospital hospital){

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中

hospital.getParam().put(“fullAddress”,provinceString+cityString+districtString);

hospital.getParam().put(“hosTypeString”,hosTypeString);

return hospital;

}

1.4、 添加数据字典显示接口,查询出省份信息,一级省份下边的市


1.4.1、 编写controller

在这里插入图片描述

//根据dictCode获取其下级节点(例如根据省份的dictCode的值获取其下级节点(北京市,上海市))

@ApiModelProperty(value = “根据dictCode获取其下级节点”)

@GetMapping(“findByDictCode/{dictCode}”)

public Result findByDictCode(@PathVariable String dictCode){

List list = dictService.findByDictCode(dictCode);

return Result.ok(list);

}

1.4.2、业务层

接口:

在这里插入图片描述

//根据dictCode获取其下级节点(例如根据省份的dictCode的值获取其下级节点(北京市,上海市))

List findByDictCode(String dictCode);

实现类:

在这里插入图片描述

//根据dictCode获取其下级节点(例如根据省份的dictCode的值获取其下级节点(北京市,上海市))

@Override

public List findByDictCode(String dictCode) {

//根据传递过来的dictCode查询dict对象

Dict dict = this.getDictByDictCode(dictCode);

//获取该对象的id,调用方法已写好的方法,查询其下级节点

List childData = findChildData(dict.getId());

return childData;

}

private Dict getDictByDictCode(String dictCode){

QueryWrapper wrapper = new QueryWrapper<>();

wrapper.eq(“dict_code”, dictCode);

Dict codeDict = baseMapper.selectOne(wrapper);

return codeDict;

}

//根据数据id查询子数据列表

@Override

@Cacheable(value = “dict”, keyGenerator = “keyGenerator”)//作用是将该方法返回的值放到缓存中

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)

最后

前端CSS面试题文档,JavaScript面试题文档,Vue面试题文档,大厂面试题文档,需要的读者可以戳这里获取!

693791246)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

[外链图片转存中…(img-Zo9WWYY1-1711693791247)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)

最后

前端CSS面试题文档,JavaScript面试题文档,Vue面试题文档,大厂面试题文档,需要的读者可以戳这里获取!

[外链图片转存中…(img-Io0a4nPH-1711693791247)]

[外链图片转存中…(img-w5xwuCJl-1711693791248)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值