目录:
(1)医院列表接口-医院等级接口
(2)医院列表接口-远程调用
(3)医院列表接口-功能测试
(1)医院列表接口-医院等级接口
由于我们的医院等级、省市区地址都是取的数据字典value值,因此我们在列表显示医院等级与医院地址时要根据数据字典value值获取数据字典名称
通过学习数据字典我们知道,根据上级编码与value值可以获取对应的数据字典名称,如果value值能够保持唯一(不一定唯一),我们也可以直接通过value值获取数据字典名称,目前省市区三级数据我们使用的是国家统计局的数据,数据编码我们就是数据字典的id与value,所以value能够唯一确定一条数据字典
省市区根据value则就可以进行查询,医院等级则根据dict_code和value进行查询医院等级获取数据如图:
在DictController中添加两个方法:
//根据dictcode和value进行查询 医院等级
@ApiOperation(value = "获取数据字典名称")
@GetMapping(value = "/getName/{dictCode}/{value}")
public String getName(
@ApiParam(name = "dictCode", value = "上级编码", required = true)
@PathVariable("dictCode") String dictCode,
@ApiParam(name = "value", value = "值", required = true)
@PathVariable("value") String value) {
//调用Service的方法进行查询
String dicName=dictService.getDictName(dictCode, value);
return dicName;
}
//根据value进行查询 省市区
@ApiOperation(value = "获取数据字典名称")
@GetMapping(value = "/getName/{value}")
public String getName(
@ApiParam(name = "value", value = "值", required = true)
@PathVariable("value") String value) {
//调用Service的方法进行查询
String dicName=dictService.getDictName("", value);
return dicName;
}
DictService 接口:
package com.atguigu.yygh.cmn.service;
import com.atguigu.yygh.model.cmn.Dict;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
public interface DictService extends IService<Dict> {
//根据数据id查询子数据列表
List<Dict> findChlidData(Long id);
//导出数据字典接口
void exportDictData(HttpServletResponse response);
//导入数据字典
void importDictData(MultipartFile file);
//查询 医院等级
String getDictName(String dictCode, String value);
}
实现类:DictServiceImpl:
//查询 医院等级
@Override
public String getDictName(String dictCode, String value) {
//如果dictCode为空,直接根据value查询
if (StringUtils.isEmpty(dictCode)){
//根据value进行查询
QueryWrapper<Dict> wrapper=new QueryWrapper<>();
wrapper.eq("value",value);
Dict dict = baseMapper.selectOne(wrapper);
return dict.getName();
}else{//如果dictCode不为空,直接根据dictCode和 value查询
//根据dictCode查询dict对象,得到dict的id值
QueryWrapper<Dict> wrapper=new QueryWrapper<>();
wrapper.eq("dict_code",dictCode);
Dict codedict = baseMapper.selectOne(wrapper);
Long parent_id = codedict.getId();
//根据parent_id和value进行查询
Dict findDict=baseMapper.selectOne(new QueryWrapper<Dict>()
.eq("parent_id",parent_id)
.eq("value",value));
return findDict.getName();
}
}
(2)医院列表接口-远程调用
我们通过service-hosp去调用service_cmn得到医院的等级信息,需要用到SpringCloud中的另外一个组件Feign
我们可以把调用代码写到service_hosp模块中通过它调用service_cmn,为了接口更加明显可以单独建立一个模块,专门封装调用的内容
里面还需要在穿件子模块,我们把它改为pom类型:
引入依赖:
<dependencies>
<!--引入上面模块common的依赖-->
<dependency>
<groupId>com.atguigu</groupId>
<artifactId>common_util</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!--引入上面模块model的依赖-->
<dependency>
<groupId>com.atguigu</groupId>
<artifactId>model</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<scope>provided </scope>
</dependency>
<!-- 服务调用feign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<scope>provided </scope>
</dependency>
</dependencies>
在他下面再创建一个子模块:
删除src:
创建DictFeignClient 接口:接口和service_cmn里面的那两个方法相对应
package com.atguigu.yygh.cmn.client;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
@FeignClient("service-cmn") //定义服务的名字
public interface DictFeignClient {
//根据dictcode和value进行查询 医院等级
@GetMapping(value = "/admin/cmn/dict/getName/{dictCode}/{value}")
String getName(@PathVariable("dictCode") String parentDictCode, @PathVariable("value") String value);
//根据value查询
@GetMapping(value = "/admin/cmn/dict/getName/{value}")
String getName(@PathVariable("value") String value);
}
service_hosp是调用端service_cmn被调用端,首先在调用端引入:pom中
在HospitalServiceImpl:
先注入这个接口:
在医院列表的方法中继续添加代码:
//医院列表(条件查询分页)
@Override
public Page<Hospital> selectHospPage(Integer page, Integer limit, HospitalQueryVo hospitalQueryVo) {
//创建Pageable的对象
Pageable pageable= PageRequest.of(page-1,limit);
//创建条件匹配器
ExampleMatcher matcher=ExampleMatcher.matching()
.withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) //改变默认字符串匹配方式:模糊查询
.withIgnoreCase(true); //改变默认大小写忽略方式:忽略大小写
//将hospitalQueryVo对象转换为Hospital对象
Hospital hospital =new Hospital();
BeanUtils.copyProperties(hospitalQueryVo, hospital);//使用工具类把HospitalQueryVo转换成department
//创建Example对象
Example<Hospital> example=Example.of(hospital,matcher);
//调用方法进行实现
Page<Hospital> pages = hospitalRepository.findAll(example, pageable);
//使用java8里面的stream流的方法遍历,在使用lombda进行遍历赋值 获取查到的list集合,遍历进行医院等级的封装
pages.getContent().stream().forEach(item ->{
this.setHospitalHosType(item);//封装方法
});
return pages;
}
//封装医院等级方法
private Hospital setHospitalHosType(Hospital hospital){
//获取到医院等级的名称
String hostypeString= dictFeignClient.getName("Hostype", hospital.getHostype());
//给hospital里面的Map属性赋值
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 + hospital.getAddress());
return hospital;
}
(3)医院列表接口-功能测试
分被启动数据字典模块service_cmn 启用service_hosp医院模块
在service模块的pom下引入依赖:
在ServiceHospApplication 主启动类上加上Feign的注解
package com.atguigu.yygh.hosp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
@ComponentScan(basePackages = "com.atguigu")
@EnableDiscoveryClient //服务在Nacos中注册
@EnableFeignClients(basePackages = "com.atguigu") //Feign的注解开关 因为远程调用写在另外一个模块,让他扫描包 它会扫描@FeignClient
public class ServiceHospApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceHospApplication.class, args);
}
}
打开swagger文档:
测试这个接口:
发现param:中成功设置的数据