Commit 76054f58 by zhangxingmin

Merge remote-tracking branch 'origin/test' into test

parents 2a9e30e5 e5d3aee9
...@@ -75,7 +75,7 @@ public class CommissionAddRequest implements Serializable { ...@@ -75,7 +75,7 @@ public class CommissionAddRequest implements Serializable {
private String currency; private String currency;
/** /**
* 结算汇率 * 页面输入的结算汇率:保费币种对实际结算币种的汇率
*/ */
@Schema(description = "结算汇率", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "结算汇率", requiredMode = Schema.RequiredMode.REQUIRED)
private BigDecimal exchangeRate; private BigDecimal exchangeRate;
......
...@@ -131,7 +131,7 @@ public class CommissionExpected implements Serializable { ...@@ -131,7 +131,7 @@ public class CommissionExpected implements Serializable {
private String statusDesc; private String statusDesc;
/** /**
* 默认结算汇率 * 保单币种对结算币种的汇率
*/ */
private BigDecimal defaultExchangeRate; private BigDecimal defaultExchangeRate;
......
...@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; ...@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.base.feign.client.exchangerate.ApiExchangeRateFeignClient;
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;
...@@ -42,6 +43,7 @@ import org.springframework.transaction.annotation.Transactional; ...@@ -42,6 +43,7 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDate;
import java.util.*; import java.util.*;
import java.util.function.Function; import java.util.function.Function;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -72,6 +74,8 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte ...@@ -72,6 +74,8 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
private ApiAnnouncementCommissionRatioFeignClient apiAnnouncementCommissionRatioFeignClient; private ApiAnnouncementCommissionRatioFeignClient apiAnnouncementCommissionRatioFeignClient;
@Resource @Resource
private RedisUtil redisUtil; private RedisUtil redisUtil;
@Resource
private ApiExchangeRateFeignClient apiExchangeRateFeignClient;
@Override @Override
...@@ -531,13 +535,14 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte ...@@ -531,13 +535,14 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
commissionExpected.setCommissionDate(calculateCommissionDate(item.getEndPeriod(), effectiveDate)); commissionExpected.setCommissionDate(calculateCommissionDate(item.getEndPeriod(), effectiveDate));
commissionExpected.setStatus(CommissionExpectedStatusEnum.PENDING.getItemValue()); commissionExpected.setStatus(CommissionExpectedStatusEnum.PENDING.getItemValue());
commissionExpected.setStatusDesc(null); commissionExpected.setStatusDesc(null);
commissionExpected.setDefaultExchangeRate(queryDefaultExchangeRate(item.getCurrency())); commissionExpected.setDefaultExchangeRate(queryExchangeRateByFeign(policy.getCurrency(), item.getCurrency()));
commissionExpected.setExpectedAmount(calculateExpectedAmount( commissionExpected.setExpectedAmount(calculateExpectedAmount(
paymentPremium, paymentPremium,
item.getCommissionRate(), item.getCommissionRate(),
"R", "R",
null, null,
item.getCurrency(), item.getCurrency(),
policy.getCurrency(),
commissionExpected.getDefaultExchangeRate())); commissionExpected.getDefaultExchangeRate()));
commissionExpected.setPaidAmount(BigDecimal.ZERO); commissionExpected.setPaidAmount(BigDecimal.ZERO);
commissionExpected.setPaidRatio(BigDecimal.ZERO); commissionExpected.setPaidRatio(BigDecimal.ZERO);
...@@ -579,17 +584,31 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte ...@@ -579,17 +584,31 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
return false; return false;
} }
/**
* 计算预计来佣港币金额
* @param premium 保费
* @param commissionRatio 佣金比例
* @param commissionBizType 佣金业务类型
* @param amount 金额
* @param currency 预计来佣的结算币种=产品绑定的来佣结算币种
* @param policyCurrency 保单币种
* @param defaultExchangeRate 默认结算汇率
* @return 预计来佣金额
*/
private BigDecimal calculateExpectedAmount(BigDecimal premium, BigDecimal commissionRatio, String commissionBizType, private BigDecimal calculateExpectedAmount(BigDecimal premium, BigDecimal commissionRatio, String commissionBizType,
BigDecimal amount, String currency, BigDecimal defaultExchangeRate) { BigDecimal amount, String currency, String policyCurrency, BigDecimal defaultExchangeRate) {
if ("R".equals(commissionBizType)) { if ("R".equals(commissionBizType)) {
// 关联保单应收单:保费 × 佣金比例 × 默认结算汇率 ÷ 100 // 关联保单应收单:保费 × 佣金比例 × 默认结算汇率 ÷ 100
BigDecimal exchangeRate = defaultExchangeRate; BigDecimal exchangeRate = defaultExchangeRate;
BigDecimal exchangeRateHkd = queryDefaultExchangeRate(currency);
if (exchangeRate == null) { if (exchangeRate == null) {
exchangeRate = queryDefaultExchangeRate(currency); // 这里获取保单币种对预计来佣的结算币种的默认汇率
exchangeRate = queryExchangeRateByFeign(policyCurrency, currency);
} }
return premium return premium
.multiply(commissionRatio) .multiply(commissionRatio)
.multiply(exchangeRate) .multiply(exchangeRate)
.multiply(exchangeRateHkd)
.divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP); .divide(BigDecimal.valueOf(100), 4, RoundingMode.HALF_UP);
} else { } else {
// 非关联保单应收单:金额 × 默认结算汇率 // 非关联保单应收单:金额 × 默认结算汇率
...@@ -602,6 +621,21 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte ...@@ -602,6 +621,21 @@ public class CommissionExpectedServiceImpl extends ServiceImpl<CommissionExpecte
} }
/** /**
* 保单币种对预计来佣的结算币种的默认汇率
* @param policyCurrency 保单币种
* @param currency 预计来佣的结算币种
* @return 汇率
*/
private BigDecimal queryExchangeRateByFeign(String policyCurrency, String currency) {
// 调用Feign客户端查询汇率
Result<BigDecimal> result = apiExchangeRateFeignClient.getExchangeRate(policyCurrency, currency, "");
if (result != null && result.getData() != null) {
return result.getData();
}
return null;
}
/**
* 根据保单生效日期和佣金期数计算预计来佣日期,首期为保单生效日次月,后续期数为首期的次年 * 根据保单生效日期和佣金期数计算预计来佣日期,首期为保单生效日次月,后续期数为首期的次年
* @param endPeriod 佣金期数 * @param endPeriod 佣金期数
* @param effectiveDate 保单生效日期 * @param effectiveDate 保单生效日期
......
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