Commit 2a96b3b7 by zhangxingmin

push

parent 3617eaf1
...@@ -15,6 +15,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; ...@@ -15,6 +15,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.yd.base.feign.client.exchangerate.ApiExchangeRateFeignClient; import com.yd.base.feign.client.exchangerate.ApiExchangeRateFeignClient;
import com.yd.base.feign.dto.ApiQueryBatchExchangeRateDTO;
import com.yd.base.feign.request.exchangerate.ApiQueryBatchExchangeRateRequest;
import com.yd.base.feign.response.exchangerate.ApiQueryBatchExchangeRateResponse;
import com.yd.common.constant.CommonConstant; import com.yd.common.constant.CommonConstant;
import com.yd.common.constant.RedisConstants; import com.yd.common.constant.RedisConstants;
import com.yd.common.enums.ResultCode; import com.yd.common.enums.ResultCode;
...@@ -1108,16 +1111,49 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte ...@@ -1108,16 +1111,49 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
.list(); .list();
log.info("查询保单信息耗时: {} ms, 结果数量: {}", System.currentTimeMillis() - t3, policyList.size()); log.info("查询保单信息耗时: {} ms, 结果数量: {}", System.currentTimeMillis() - t3, policyList.size());
if (CollectionUtils.isNotEmpty(policyList)) {
// 1. 收集所有需要查询的币种(去重)
Set<String> currencies = policyList.stream()
.map(Policy::getCurrency)
.filter(StringUtils::isNotBlank)
.collect(Collectors.toSet());
// 2. 构建批量查询请求(币种 -> HKD)
ApiQueryBatchExchangeRateRequest batchRequest = new ApiQueryBatchExchangeRateRequest();
List<ApiQueryBatchExchangeRateDTO> dtoList = new ArrayList<>();
for (String currency : currencies) {
ApiQueryBatchExchangeRateDTO dto = new ApiQueryBatchExchangeRateDTO();
dto.setBaseCurrency(currency);
dto.setTargetCurrency("HKD");
dtoList.add(dto);
}
batchRequest.setRateDTOList(dtoList);
// 3. 调用批量汇率接口
Result<ApiQueryBatchExchangeRateResponse> batchResult = apiExchangeRateFeignClient.queryBatchExchangeRate(batchRequest);
Map<String, BigDecimal> rateMap = new HashMap<>();
if (batchResult != null && batchResult.getCode() == 200 && batchResult.getData() != null) {
List<ApiQueryBatchExchangeRateDTO> resultList = batchResult.getData().getRateDTOList();
for (ApiQueryBatchExchangeRateDTO result : resultList) {
if (result.getExchangeRate() != null) {
rateMap.put(result.getBaseCurrency(), result.getExchangeRate());
}
}
}
// 4. 循环计算总保费,从 map 中取汇率
long t4 = System.currentTimeMillis(); long t4 = System.currentTimeMillis();
for (Policy policy : policyList) { for (Policy policy : policyList) {
BigDecimal rate = queryExchangeRateByFeign(policy.getCurrency(), "HKD"); BigDecimal rate = rateMap.getOrDefault(policy.getCurrency(), BigDecimal.ONE);
if (rate == null) rate = BigDecimal.ONE;
totalPremium = totalPremium.add(policy.getTotalPaymentPremium().multiply(rate)); totalPremium = totalPremium.add(policy.getTotalPaymentPremium().multiply(rate));
fromTotalPremium = fromTotalPremium.add(policy.getTotalPaymentPremium()); fromTotalPremium = fromTotalPremium.add(policy.getTotalPaymentPremium());
} }
log.info("汇率计算及保费累加耗时: {} ms", System.currentTimeMillis() - t4); log.info("汇率计算及保费累加耗时: {} ms", System.currentTimeMillis() - t4);
} }
}
// 组装返回对象 // 组装返回对象
CommissionExpectedStatisticsVO vo = new CommissionExpectedStatisticsVO(); CommissionExpectedStatisticsVO vo = new CommissionExpectedStatisticsVO();
vo.setTotalAmount(totalAmount); vo.setTotalAmount(totalAmount);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment