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、需求背景:在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前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)
最后
前端CSS面试题文档,JavaScript面试题文档,Vue面试题文档,大厂面试题文档,需要的读者可以戳这里获取!
693791246)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
[外链图片转存中…(img-Zo9WWYY1-1711693791247)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(资料价值较高,非无偿)
最后
前端CSS面试题文档,JavaScript面试题文档,Vue面试题文档,大厂面试题文档,需要的读者可以戳这里获取!
[外链图片转存中…(img-Io0a4nPH-1711693791247)]
[外链图片转存中…(img-w5xwuCJl-1711693791248)]