Description or Example
# 核心代码
```java
@FeignClient("bitmall-member")
public interface MemberService {
/**
* 通过地址ID, 获取用户的地址信息
* @param id
* @return
*/
@RequestMapping("/member/memberreceiveaddress/info/{id}")
R info(@PathVariable("id") Long id);
}
```
```java
/**
* 通过用户的地址, 计算邮费
* @param addrId
* @return
*/
@GetMapping("/fare")
public R getFare(@RequestParam Long addrId) {
FareVO fareVO = wareInfoService.getFare(addrId);
return R.ok().setData(fareVO);
}
```
```java
@Override
public FareVO getFare(Long addrId) {
// 这里不需要异步编排, 因为虽然调用了远程微服务, 但是其他操作并没有非常耗时, 几乎是一瞬间执行完的, 因此, 异步编排反而会拖累系统,
// 复杂度更高
// 0. 封装目标对象
FareVO fareVO = new FareVO();
// 1. 通过地址Id获取用户地址
R info = memberService.info(addrId);
MemberAddressVO addressVO = info.getData("memberReceiveAddress", new TypeReference<MemberAddressVO>() {});
fareVO.setMemberAddressVO(addressVO);
fareVO.setFare(RandomUtil.randomBigDecimal(new BigDecimal("0.01"), new BigDecimal("100.00")));
return fareVO;
}
```
# 知识点
## 为什么跨过了Memeber, 先访问Ware呢?
> 这个问题很抽象, 即为什么不直接访问Member微服务获取地址信息, 而去访问Ware微服务, 然后远程调用, 因为, 如果我们想要做运费信息, 我们肯定需要知道来源地和目的地, 因此调用Ware没有问题
> 但是, 我们并没有真正的去写计算运费的代码, 只是简单的弄了一个随机数来替代, 相关的代码以后完善
## 获取价格存在的问题
> 这里获取运费是通过随机值的, 因此每次获取的运费都不一样, 以至于比价的时候出现问题