Commit 95a072fa by jianan

前端对接问题修复92

parent 94b4b63b
......@@ -177,10 +177,11 @@ public class Commission implements Serializable {
@TableField(exist = false)
private static final long serialVersionUID = 1L;
public BigDecimal calculateCurrentPaidRatio() {
// 当前来佣比例=当前入账金额/结算汇率/保费 * 100
return amount.divide(new BigDecimal(premium), 4, RoundingMode.HALF_UP)
.divide(exchangeRate, 4, RoundingMode.HALF_UP)
.multiply(new BigDecimal(100));
}
// public BigDecimal calculateCurrentPaidRatio() {
// // 当前来佣比例=当前入账金额/结算汇率/保费 * 100
// return amount.divide(new BigDecimal(premium), 4, RoundingMode.HALF_UP)
// .divide(exchangeRate, 4, RoundingMode.HALF_UP)
// .multiply(new BigDecimal(100));
// }
}
\ No newline at end of file
......@@ -12,6 +12,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yd.common.enums.CommonEnum;
import com.yd.common.enums.ResultCode;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
import com.yd.common.utils.RandomStringGenerator;
import com.yd.csf.service.component.CommissionAsyncService;
import com.yd.csf.service.component.ReceivableService;
......@@ -24,12 +25,15 @@ import com.yd.csf.service.service.*;
import com.yd.csf.service.dao.CommissionMapper;
import com.yd.csf.service.vo.CommissionStatisticsVO;
import com.yd.csf.service.vo.CommissionVO;
import com.yd.user.feign.client.sysdict.ApiSysDictFeignClient;
import com.yd.user.feign.response.sysdict.GetDictItemListByDictTypeResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.TransactionSynchronization;
......@@ -75,6 +79,8 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
private TransactionTemplate transactionTemplate;
@Resource
private ReceivableService receivableService;
@Autowired
private ApiSysDictFeignClient apiSysDictFeignClient;
@Override
......@@ -253,7 +259,6 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commission.setReconciliationCompany(policy.getReconciliationCompany());
commission.setReconciliationCompanyCode(policy.getReconciliationCompanyCode());
commission.setReconciliationCompanyBizId(policy.getReconciliationCompanyBizId());
commission.setCurrentCommissionRatio(commission.calculateCurrentPaidRatio());
}
// 匹配预计来佣记录
CommissionExpected expected = findExpectedFromList(commission, commissionExpectedList);
......@@ -261,6 +266,9 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commission.setCommissionExpectedBizId(expected.getCommissionExpectedBizId());
commission.setReceivableNo(expected.getReceivableNo());
commission.setTotalPeriod(expected.getTotalPeriod());
// 本次入账比例
commission.setCurrentCommissionRatio(calculateCurrentCommissionRatio(
commission.getPremium(), commission.getAmount(), commission.getCurrency(), commission.getExchangeRate(), expected));
} else {
commission.setRemark("未查询到预计来佣记录");
commission.setStatus(CommissionStatusEnum.MATCH_FAILED.getItemValue());
......@@ -315,18 +323,20 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
}
BigDecimal requestAmount = commissionUpdateRequest.getAmount();
if ("R".equals(commissionUpdateRequest.getCommissionBizType())) {
// 关联应收单,计算当前来佣比例
BigDecimal currentCommissionRatio = this.calculateCurrentCommissionRatio(
commission.getPremium(),
requestAmount,
commissionUpdateRequest.getExchangeRate());
commission.setCurrentCommissionRatio(currentCommissionRatio);
} else {
commission.setPolicyNo(null);
}
// 重新关联预计来佣记录
getCommissionExpectedBizId(commission);
CommissionExpected commissionExpected = getCommissionExpectedBizId(commission);
if (commissionExpected != null) {
if ("R".equals(commissionUpdateRequest.getCommissionBizType())) {
// 关联应收单,计算当前来佣比例
BigDecimal currentCommissionRatio = this.calculateCurrentCommissionRatio(
commission.getPremium(),
requestAmount,
commissionUpdateRequest.getCurrency(),
commissionUpdateRequest.getExchangeRate(),
commissionExpected);
commission.setCurrentCommissionRatio(currentCommissionRatio);
}
}
// 计算来佣金额(港币)
commission.setHkdAmount(calculateHKDAmount(
requestAmount,
......@@ -342,6 +352,9 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
// 更新属性
BeanUtils.copyProperties(commissionUpdateRequest, commission, "commissionBizId");
if ("U".equals(commissionUpdateRequest.getCommissionBizType())) {
commission.setPolicyNo(null);
}
commission.setUpdaterId(loginUserId);
commission.setUpdateTime(new Date());
// 执行更新操作(这个方法将在当前事务中执行)
......@@ -373,7 +386,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
return requestAmount.multiply(exchangeRate);
}
private void getCommissionExpectedBizId(Commission commission) {
private CommissionExpected getCommissionExpectedBizId(Commission commission) {
CommissionExpected commissionExpected = null;
if ("R".equals(commission.getCommissionBizType())) {
commissionExpected = commissionExpectedService.lambdaQuery()
......@@ -397,6 +410,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
} else {
commission.setStatus(CommissionStatusEnum.MATCH_FAILED.getItemValue());
}
return commissionExpected;
}
@Override
......@@ -414,6 +428,9 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
if (ObjectUtils.isEmpty(commissionUpdateRequest.getAmount())) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "入账金额不能为空");
}
if (ObjectUtils.isEmpty(commissionUpdateRequest.getCurrency())) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "入账币种不能为空");
}
if (ObjectUtils.isEmpty(commissionUpdateRequest.getExchangeRate())) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "结算汇率不能为空");
}
......@@ -689,7 +706,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
return this.getOne(new QueryWrapper<Commission>().eq("commission_biz_id", commissionBizId));
}
public BigDecimal calculateCurrentCommissionRatio(String premium, BigDecimal amount, BigDecimal exchangeRate) {
public BigDecimal calculateCurrentCommissionRatio(String premium, BigDecimal amount, String currentCurrency, BigDecimal exchangeRate, CommissionExpected commissionExpected) {
if (ObjectUtils.isEmpty(premium)) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "保单保费不能为空");
}
......@@ -699,10 +716,43 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
if (ObjectUtils.isEmpty(exchangeRate)) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "当前结算汇率不能为空");
}
// 获取保单币种
String currency = commissionExpected.getCurrency();
// 如果当前入账币种等于保单币种,直接计算来佣比例
if (StringUtils.equals(currentCurrency, currency)) {
return amount.divide(new BigDecimal(premium), 4, RoundingMode.HALF_UP)
.multiply(new BigDecimal(100));
}
// 如果币种不同,首先把当前入账金额转换为对应币种金额
if (!StringUtils.equals(currentCurrency, "HKD")) {
Result<List<GetDictItemListByDictTypeResponse>> result = apiSysDictFeignClient.getDictItemListByDictType("csf_exchange_rate_hkd");
log.info("--------------当前入账金额: {} {}", amount, currentCurrency);
log.info("--------------当前入账币种: {}", currentCurrency);
BigDecimal defaultExchangeRate = null;
if (CollectionUtils.isNotEmpty(result.getData())) {
for (GetDictItemListByDictTypeResponse dictItem : result.getData()) {
if (StringUtils.equalsIgnoreCase(dictItem.getItemLabel(), currentCurrency)) {
defaultExchangeRate = new BigDecimal(dictItem.getItemValue());
}
}
}
if (ObjectUtils.isEmpty(defaultExchangeRate)) {
throw new BusinessException(ResultCode.NULL_ERROR.getCode(), "未找到当前入账币种对应的结算汇率");
}
amount = amount.divide(defaultExchangeRate, 4, RoundingMode.HALF_UP);
log.info("--------------当前入账港币: {}", amount);
}
// 当前来佣比例=当前入账金额/结算汇率/保费 * 100
return amount.divide(new BigDecimal(premium), 4, RoundingMode.HALF_UP)
BigDecimal currentCommissionRatio = amount.divide(new BigDecimal(premium), 4, RoundingMode.HALF_UP)
.divide(exchangeRate, 4, RoundingMode.HALF_UP)
.multiply(new BigDecimal(100));
log.info("--------------当前结算汇率: {}", exchangeRate);
log.info("--------------当前来佣比例: {}", currentCommissionRatio);
return currentCommissionRatio;
}
@Override
......@@ -779,8 +829,6 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commission.setProductLaunchBizId(policy.getProductLaunchBizId());
commission.setInsuranceCompanyBizId(policy.getInsuranceCompanyBizId());
commission.setPremium(Convert.toStr(policy.getPaymentPremium()));
// 本次入账比例
commission.setCurrentCommissionRatio(commission.calculateCurrentPaidRatio());
} else {
throw new BusinessException(ResultCode.PARAMS_ERROR.getCode(), "保单不存在, policyNo: " + request.getPolicyNo());
}
......@@ -789,7 +837,12 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commission.setPolicyNo(null);
}
// 关联预计来佣信息
getCommissionExpectedBizIdBatch(request, policyNoSet, commission);
CommissionExpected expected = getCommissionExpectedBizIdBatch(request, policyNoSet, commission);
if (expected != null) {
// 本次入账比例
commission.setCurrentCommissionRatio(calculateCurrentCommissionRatio(
commission.getPremium(), commission.getAmount(), commission.getCurrency(), commission.getExchangeRate(), expected));
}
commissionList.add(commission);
}
......@@ -814,7 +867,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
return commissionList;
}
private void getCommissionExpectedBizIdBatch(CommissionAddRequest request, Set<String> policyNoSet, Commission commission) {
private CommissionExpected getCommissionExpectedBizIdBatch(CommissionAddRequest request, Set<String> policyNoSet, Commission commission) {
CommissionExpected expected = null;
if ("R".equals(request.getCommissionBizType())) {
// 查询预计入账信息
......@@ -857,6 +910,7 @@ public class CommissionServiceImpl extends ServiceImpl<CommissionMapper, Commiss
commission.setRemark("未查询到预计来佣记录");
commission.setStatus(CommissionStatusEnum.MATCH_FAILED.getItemValue());
}
return expected;
}
private void validateAddCommissionBatch(List<CommissionAddRequest> customerAddRequestList) {
......
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