Commit 7f72298b authored by 332784038@qq.com's avatar 332784038@qq.com Committed by wux

调用汇率的业务逻辑修改调用新的汇率计算逻辑公式:

调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
parent cbedcb77
......@@ -2528,8 +2528,9 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
if (Objects.isNull(exchangeRateRespDTO)) {
throw exception(EXCHANGE_RATE_NOT_EXISTS_PARAM, currencyRespDTOMap.get(feeDto.getCurrencyId()).getFuhao(), currencyRespDTOMap.get(1).getFuhao());
}
oldFreightAndClearanceFee =
oldFreightAndClearanceFee.add(feeDto.getAmount().multiply(exchangeRateRespDTO.getCurrencyRate()));
// oldFreightAndClearanceFee = oldFreightAndClearanceFee.add(feeDto.getAmount().multiply(exchangeRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
oldFreightAndClearanceFee = oldFreightAndClearanceFee.add(feeDto.getAmount().multiply(exchangeRateRespDTO.getTargetCurrencyAmount()).divide(exchangeRateRespDTO.getSourceCurrencyAmount(), 2, RoundingMode.HALF_UP));
} else {
oldFreightAndClearanceFee =
oldFreightAndClearanceFee.add(feeDto.getAmount());
......@@ -2550,7 +2551,9 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
if (Objects.isNull(exchangeRateRespDTO)) {
throw exception(EXCHANGE_RATE_NOT_EXISTS_PARAM, currencyRespDTOMap.get(feeDto.getCurrencyId()).getFuhao(), currencyRespDTOMap.get(1).getFuhao());
}
newFreightAndClearanceFee = newFreightAndClearanceFee.add(feeDto.getAmount().multiply(exchangeRateRespDTO.getCurrencyRate()));
// newFreightAndClearanceFee = newFreightAndClearanceFee.add(feeDto.getAmount().multiply(exchangeRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
newFreightAndClearanceFee = newFreightAndClearanceFee.add(feeDto.getAmount().multiply(exchangeRateRespDTO.getTargetCurrencyAmount()).divide(exchangeRateRespDTO.getSourceCurrencyAmount(), 2 ,RoundingMode.HALF_UP));
} else {
newFreightAndClearanceFee = newFreightAndClearanceFee.add(feeDto.getAmount());
}
......@@ -4072,12 +4075,14 @@ public class OrderBusinessServiceImpl extends AbstractService<OrderMapper, Order
BigDecimal totalOnePrice = BigDecimal.ZERO;
if (Objects.nonNull(param.getOneFreight()) && param.getOneFreight().compareTo(BigDecimal.ZERO) > 0) {
ExchangeRateRespDTO freightExchangeRate = currencyApi.getCurrencyRate(Long.valueOf(param.getFreightCurrency().toString()), targetId);
totalOnePrice = totalOnePrice.add(param.getOneFreight().multiply(freightExchangeRate.getCurrencyRate()).setScale(2, RoundingMode.HALF_UP));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
totalOnePrice = totalOnePrice.add(param.getOneFreight().multiply(freightExchangeRate.getTargetCurrencyAmount()).divide(freightExchangeRate.getSourceCurrencyAmount(), 2, RoundingMode.HALF_UP));
}
if (param.getCharging() == 0) {
if (Objects.nonNull(param.getOneClearanceFee()) && param.getOneClearanceFee().compareTo(BigDecimal.ZERO) > 0) {
ExchangeRateRespDTO clearanceExchangeRate = currencyApi.getCurrencyRate(Long.valueOf(param.getClearanceFeeCurrency().toString()), targetId);
totalOnePrice = totalOnePrice.add(param.getOneClearanceFee().multiply(clearanceExchangeRate.getCurrencyRate()).setScale(2, RoundingMode.HALF_UP));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
totalOnePrice = totalOnePrice.add(param.getOneClearanceFee().multiply(clearanceExchangeRate.getTargetCurrencyAmount()).divide(clearanceExchangeRate.getSourceCurrencyAmount(), 2, RoundingMode.HALF_UP));
}
}
orderItemDO.setTotalOnePrice(totalOnePrice);
......
......@@ -1303,12 +1303,13 @@ public class OrderQueryServiceImpl implements OrderQueryService {
//重新获取汇率-转成RMB
ExchangeRateRespDTO rateRespDTO = currencyApi.getCurrencyRateByCode(rate.getFuhao(), "¥");
if (null != rateRespDTO && null != rateRespDTO.getCurrencyRate()) {
totalAmount = totalAmount.add(receivableFee.multiply(rateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
totalAmount = totalAmount.add(receivableFee.multiply(rateRespDTO.getTargetCurrencyAmount()).divide(rateRespDTO.getSourceCurrencyAmount(), 2, RoundingMode.HALF_UP));
if (null != receivableBackVO.getFeeType() && receivableBackVO.getFeeType() == 1) {
totalYunfei = totalYunfei.add(receivableFee.multiply(rateRespDTO.getCurrencyRate()));
totalYunfei = totalYunfei.add(receivableFee.multiply(rateRespDTO.getTargetCurrencyAmount()).divide(rateRespDTO.getSourceCurrencyAmount(), 2, RoundingMode.HALF_UP));
}
if (null != receivableBackVO.getFeeType() && receivableBackVO.getFeeType() == 2) {
totalQingguanfei = totalQingguanfei.add(receivableFee.multiply(rateRespDTO.getCurrencyRate()));
totalQingguanfei = totalQingguanfei.add(receivableFee.multiply(rateRespDTO.getTargetCurrencyAmount()).divide(rateRespDTO.getSourceCurrencyAmount(), 2, RoundingMode.HALF_UP));
}
}
}
......@@ -1344,7 +1345,10 @@ public class OrderQueryServiceImpl implements OrderQueryService {
//重新获取汇率
ExchangeRateRespDTO rateRespDTO = currencyApi.getCurrencyRateByCode(rate.getFuhao(), "¥");
if (null != rateRespDTO && null != rateRespDTO.getCurrencyRate()) {
needTotalAmount = needTotalAmount.add(receivableFee.multiply(rateRespDTO.getCurrencyRate()).multiply(BigDecimal.valueOf(receiptDO.getWriteOffProportion().doubleValue() / 100)));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
needTotalAmount = needTotalAmount.add(receivableFee.multiply(rateRespDTO.getTargetCurrencyAmount().divide(rateRespDTO.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP))
.divide(rateRespDTO.getSourceCurrencyAmount(), 2, RoundingMode.HALF_UP)
.multiply(BigDecimal.valueOf(receiptDO.getWriteOffProportion().doubleValue() / 100)));
}
}
......@@ -2402,7 +2406,8 @@ public class OrderQueryServiceImpl implements OrderQueryService {
receivableTotalFeeGroupDtoMap.put(freightCurrencyId, receivableSeaFreight.setScale(0, RoundingMode.HALF_UP));
}
// 总应收转换
receivableTotalFee = receivableTotalFee.add(receivableSeaFreight.multiply(freightTotalFeeRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
receivableTotalFee = receivableTotalFee.add(receivableSeaFreight.multiply(freightTotalFeeRateRespDTO.getTargetCurrencyAmount()).divide(freightTotalFeeRateRespDTO.getSourceCurrencyAmount(), 2, RoundingMode.HALF_UP));
// 总实收金额
if (netReceiptsTotalFeeGroupDtoMap.containsKey(freightCurrencyId)) {
netReceiptsTotalFeeGroupDtoMap.put(freightCurrencyId, seaFreight.add(netReceiptsTotalFeeGroupDtoMap.get(freightCurrencyId)).setScale(0, RoundingMode.HALF_UP));
......@@ -2410,7 +2415,8 @@ public class OrderQueryServiceImpl implements OrderQueryService {
netReceiptsTotalFeeGroupDtoMap.put(freightCurrencyId, seaFreight.setScale(0, RoundingMode.HALF_UP));
}
// 总实收收转换
netReceiptsTotalFee = netReceiptsTotalFee.add(seaFreight.multiply(freightTotalFeeRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
netReceiptsTotalFee = netReceiptsTotalFee.add(seaFreight.multiply(freightTotalFeeRateRespDTO.getTargetCurrencyAmount()).divide(freightTotalFeeRateRespDTO.getSourceCurrencyAmount(), 2, RoundingMode.HALF_UP));
// 总运费应收金额
if (totalReceivableFreightFeeGroupDtoMap.containsKey(freightCurrencyId)) {
totalReceivableFreightFeeGroupDtoMap.put(freightCurrencyId, receivableSeaFreight.add(totalReceivableFreightFeeGroupDtoMap.get(freightCurrencyId)).setScale(0, RoundingMode.HALF_UP));
......@@ -2425,8 +2431,9 @@ public class OrderQueryServiceImpl implements OrderQueryService {
totalNetReceiptsFreightFeeGroupDtoMap.put(freightCurrencyId, seaFreight.setScale(0, RoundingMode.HALF_UP));
}
// 运费的应收与实收根据目的地设置的进口运费货币汇率来转换计算
totalReceivableFreightFee = totalReceivableFreightFee.add(receivableSeaFreight.multiply(collectFreightRateRespDTO.getCurrencyRate()));
totalNetReceiptsFreightFee = totalNetReceiptsFreightFee.add(seaFreight.multiply(collectFreightRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
totalReceivableFreightFee = totalReceivableFreightFee.add(receivableSeaFreight.multiply(collectFreightRateRespDTO.getTargetCurrencyAmount()).divide(collectFreightRateRespDTO.getSourceCurrencyAmount(), 2, RoundingMode.HALF_UP));
totalNetReceiptsFreightFee = totalNetReceiptsFreightFee.add(seaFreight.multiply(collectFreightRateRespDTO.getTargetCurrencyAmount()).divide(collectFreightRateRespDTO.getSourceCurrencyAmount(), 2, RoundingMode.HALF_UP));
if (orderItemDO.getCharging() == 0) {
Long clearanceCurrencyId = Long.parseLong(String.valueOf(orderItemDO.getClearanceFreightCurrency()));
......@@ -2440,7 +2447,8 @@ public class OrderQueryServiceImpl implements OrderQueryService {
receivableTotalFeeGroupDtoMap.put(clearanceCurrencyId, receivableClearanceFreight.setScale(0, RoundingMode.HALF_UP));
}
// 总应收转换
receivableTotalFee = receivableTotalFee.add(receivableClearanceFreight.multiply(clearanceTotalFeeRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
receivableTotalFee = receivableTotalFee.add(receivableClearanceFreight.multiply(clearanceTotalFeeRateRespDTO.getTargetCurrencyAmount()).divide(clearanceTotalFeeRateRespDTO.getSourceCurrencyAmount(), 2, RoundingMode.HALF_UP));
// 总实收金额
if (netReceiptsTotalFeeGroupDtoMap.containsKey(clearanceCurrencyId)) {
netReceiptsTotalFeeGroupDtoMap.put(clearanceCurrencyId, clearanceFreight.add(netReceiptsTotalFeeGroupDtoMap.get(clearanceCurrencyId)).setScale(0, RoundingMode.HALF_UP));
......@@ -2448,7 +2456,8 @@ public class OrderQueryServiceImpl implements OrderQueryService {
netReceiptsTotalFeeGroupDtoMap.put(clearanceCurrencyId, clearanceFreight.setScale(0, RoundingMode.HALF_UP));
}
// 总实收收转换
netReceiptsTotalFee = netReceiptsTotalFee.add(clearanceFreight.multiply(clearanceTotalFeeRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
netReceiptsTotalFee = netReceiptsTotalFee.add(clearanceFreight.multiply(clearanceTotalFeeRateRespDTO.getTargetCurrencyAmount()).divide(clearanceTotalFeeRateRespDTO.getSourceCurrencyAmount(), 2, RoundingMode.HALF_UP));
// 总清关费应收金额
if (totalReceivableClearanceFeeGroupDtoMap.containsKey(clearanceCurrencyId)) {
totalReceivableClearanceFeeGroupDtoMap.put(clearanceCurrencyId, receivableClearanceFreight.add(totalReceivableClearanceFeeGroupDtoMap.get(clearanceCurrencyId)).setScale(0, RoundingMode.HALF_UP));
......@@ -2462,8 +2471,9 @@ public class OrderQueryServiceImpl implements OrderQueryService {
totalNetReceiptsClearanceFeeGroupDtoMap.put(clearanceCurrencyId, clearanceFreight.setScale(0, RoundingMode.HALF_UP));
}
// 清关费的应收与实收转换
totalReceivableClearanceFee = totalReceivableClearanceFee.add(receivableClearanceFreight.multiply(collectClearanceRateRespDTO.getCurrencyRate()));
totalNetReceiptsClearanceFee = totalNetReceiptsClearanceFee.add(clearanceFreight.multiply(collectClearanceRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
totalReceivableClearanceFee = totalReceivableClearanceFee.add(receivableClearanceFreight.multiply(collectClearanceRateRespDTO.getTargetCurrencyAmount()).divide(collectClearanceRateRespDTO.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP));
totalNetReceiptsClearanceFee = totalNetReceiptsClearanceFee.add(clearanceFreight.multiply(collectClearanceRateRespDTO.getTargetCurrencyAmount()).divide(collectClearanceRateRespDTO.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP));
}
}
}
......@@ -2491,7 +2501,8 @@ public class OrderQueryServiceImpl implements OrderQueryService {
} else {
netReceiptsTotalFeeGroupDtoMap.put(currencyId, discountFee.setScale(0, RoundingMode.HALF_UP).negate());
}
netReceiptsTotalFee = netReceiptsTotalFee.subtract(discountFee.multiply(totalFeeRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
netReceiptsTotalFee = netReceiptsTotalFee.subtract(discountFee.multiply(totalFeeRateRespDTO.getTargetCurrencyAmount()).divide(totalFeeRateRespDTO.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP));
if (receivableDO.getFeeType() == 1) {
ExchangeRateRespDTO collectFreightRateRespDTO = currencyApi.getCurrencyRate(currencyId, collectFreightFeeId);
// 总运费实收金额
......@@ -2500,7 +2511,8 @@ public class OrderQueryServiceImpl implements OrderQueryService {
} else {
totalNetReceiptsFreightFeeGroupDtoMap.put(currencyId, discountFee.setScale(0, RoundingMode.HALF_UP).negate());
}
totalNetReceiptsFreightFee = totalNetReceiptsFreightFee.subtract(discountFee.multiply(collectFreightRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
totalNetReceiptsFreightFee = totalNetReceiptsFreightFee.subtract(discountFee.multiply(collectFreightRateRespDTO.getTargetCurrencyAmount()).divide(collectFreightRateRespDTO.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP));
if (receivableDO.getState() == 2 && Objects.nonNull(receiptDO)) {
if (Objects.nonNull(isChina) && isChina) {
// 中国付
......@@ -2510,7 +2522,8 @@ public class OrderQueryServiceImpl implements OrderQueryService {
} else {
totalNetReceiptsAdvanceFreightFeeGroupDtoMap.put(currencyId, netReceiptsFee.setScale(0, RoundingMode.HALF_UP));
}
totalNetReceiptsAdvanceFreightFee = totalNetReceiptsAdvanceFreightFee.add(netReceiptsFee.multiply(collectFreightRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
totalNetReceiptsAdvanceFreightFee = totalNetReceiptsAdvanceFreightFee.add(netReceiptsFee.multiply(collectFreightRateRespDTO.getTargetCurrencyAmount()).divide(collectFreightRateRespDTO.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP));
} else {
// 国外付
// 总到付运费实收金额
......@@ -2519,7 +2532,8 @@ public class OrderQueryServiceImpl implements OrderQueryService {
} else {
totalNetReceiptsCollectFreightFeeGroupDtoMap.put(currencyId, netReceiptsFee.setScale(0, RoundingMode.HALF_UP));
}
totalNetReceiptsCollectFreightFee = totalNetReceiptsCollectFreightFee.add(netReceiptsFee.multiply(collectFreightRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
totalNetReceiptsCollectFreightFee = totalNetReceiptsCollectFreightFee.add(netReceiptsFee.multiply(collectFreightRateRespDTO.getTargetCurrencyAmount()).divide(collectFreightRateRespDTO.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP));
}
}
}
......@@ -2531,7 +2545,8 @@ public class OrderQueryServiceImpl implements OrderQueryService {
} else {
totalNetReceiptsClearanceFeeGroupDtoMap.put(currencyId, discountFee.setScale(0, RoundingMode.HALF_UP).negate());
}
totalNetReceiptsClearanceFee = totalNetReceiptsClearanceFee.subtract(discountFee.multiply(collectClearanceRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
totalNetReceiptsClearanceFee = totalNetReceiptsClearanceFee.subtract(discountFee.multiply(collectClearanceRateRespDTO.getTargetCurrencyAmount()).divide(collectClearanceRateRespDTO.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP));
if (receivableDO.getState() == 2) {
if (receivableDO.getState() == 2) {
if (Objects.nonNull(isChina) && isChina) {
......@@ -2542,7 +2557,8 @@ public class OrderQueryServiceImpl implements OrderQueryService {
} else {
totalNetReceiptsAdvanceClearanceFeeGroupDtoMap.put(currencyId, netReceiptsFee.setScale(0, RoundingMode.HALF_UP));
}
totalNetReceiptsAdvanceClearanceFee = totalNetReceiptsAdvanceClearanceFee.add(netReceiptsFee.multiply(collectClearanceRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
totalNetReceiptsAdvanceClearanceFee = totalNetReceiptsAdvanceClearanceFee.add(netReceiptsFee.multiply(collectClearanceRateRespDTO.getTargetCurrencyAmount()).divide(collectClearanceRateRespDTO.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP));
} else {
// 国外付
// 总到付清关费实收金额
......@@ -2551,7 +2567,8 @@ public class OrderQueryServiceImpl implements OrderQueryService {
} else {
totalNetReceiptsCollectClearanceFeeGroupDtoMap.put(currencyId, netReceiptsFee.setScale(0, RoundingMode.HALF_UP));
}
totalNetReceiptsCollectClearanceFee = totalNetReceiptsCollectClearanceFee.add(netReceiptsFee.multiply(collectClearanceRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
totalNetReceiptsCollectClearanceFee = totalNetReceiptsCollectClearanceFee.add(netReceiptsFee.multiply(collectClearanceRateRespDTO.getTargetCurrencyAmount()).divide(collectClearanceRateRespDTO.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP));
}
}
}
......@@ -2565,21 +2582,24 @@ public class OrderQueryServiceImpl implements OrderQueryService {
} else {
totalReceivableOtherFeeGroupDtoMap.put(currencyId, receivableFee.setScale(0, RoundingMode.HALF_UP));
}
totalReceivableOtherFee = totalReceivableOtherFee.add(receivableFee.multiply(collectOtherRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
totalReceivableOtherFee = totalReceivableOtherFee.add(receivableFee.multiply(collectOtherRateRespDTO.getTargetCurrencyAmount()).divide(collectOtherRateRespDTO.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP));
// 实收额外费用
if (totalNetReceiptsOtherFeeGroupDtoMap.containsKey(currencyId)) {
totalNetReceiptsOtherFeeGroupDtoMap.put(currencyId, netReceiptsFee.add(totalNetReceiptsOtherFeeGroupDtoMap.get(currencyId)).setScale(0, RoundingMode.HALF_UP));
} else {
totalNetReceiptsOtherFeeGroupDtoMap.put(currencyId, netReceiptsFee.setScale(0, RoundingMode.HALF_UP));
}
totalNetReceiptsOtherFee = totalNetReceiptsOtherFee.add(netReceiptsFee.multiply(collectOtherRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
totalNetReceiptsOtherFee = totalNetReceiptsOtherFee.add(netReceiptsFee.multiply(collectOtherRateRespDTO.getTargetCurrencyAmount()).divide(collectOtherRateRespDTO.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP));
// 总应收金额
if (receivableTotalFeeGroupDtoMap.containsKey(currencyId)) {
receivableTotalFeeGroupDtoMap.put(currencyId, receivableFee.add(receivableTotalFeeGroupDtoMap.get(currencyId)).setScale(0, RoundingMode.HALF_UP));
} else {
receivableTotalFeeGroupDtoMap.put(currencyId, receivableFee.setScale(0, RoundingMode.HALF_UP));
}
receivableTotalFee = receivableTotalFee.add(receivableFee.multiply(totalFeeRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
receivableTotalFee = receivableTotalFee.add(receivableFee.multiply(totalFeeRateRespDTO.getTargetCurrencyAmount()).divide(totalFeeRateRespDTO.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP));
// 总实收金额
if (netReceiptsTotalFeeGroupDtoMap.containsKey(currencyId)) {
netReceiptsTotalFeeGroupDtoMap.put(currencyId, netReceiptsFee.add(netReceiptsTotalFeeGroupDtoMap.get(currencyId)).setScale(0, RoundingMode.HALF_UP));
......@@ -2587,7 +2607,8 @@ public class OrderQueryServiceImpl implements OrderQueryService {
netReceiptsTotalFeeGroupDtoMap.put(currencyId, netReceiptsFee.setScale(0, RoundingMode.HALF_UP));
}
// 总实收收转换
netReceiptsTotalFee = netReceiptsTotalFee.add(netReceiptsFee.multiply(totalFeeRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
netReceiptsTotalFee = netReceiptsTotalFee.add(netReceiptsFee.multiply(totalFeeRateRespDTO.getTargetCurrencyAmount()).divide(totalFeeRateRespDTO.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP));
if (receivableDO.getState() == 2) {
if (Objects.nonNull(isChina) && isChina) {
// 中国付
......@@ -2600,13 +2621,15 @@ public class OrderQueryServiceImpl implements OrderQueryService {
}
if (!Objects.equals(currencyId, collectOtherFeeId)) {
ExchangeRateRespDTO otherRateRespDTO = currencyApi.getCurrencyRate(currencyId, collectOtherFeeId);
totalNetReceiptsAdvanceOtherFee = totalNetReceiptsAdvanceOtherFee.add(netReceiptsFee.multiply(otherRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
totalNetReceiptsAdvanceOtherFee = totalNetReceiptsAdvanceOtherFee.add(netReceiptsFee.multiply(otherRateRespDTO.getTargetCurrencyAmount()).divide(otherRateRespDTO.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP));
} else {
totalNetReceiptsAdvanceOtherFee = totalNetReceiptsAdvanceOtherFee.add(netReceiptsFee);
}
if (!Objects.equals(currencyId, collectAssistantOtherFeeId)) {
ExchangeRateRespDTO assistantOtherRateRespDTO = currencyApi.getCurrencyRate(currencyId, collectAssistantOtherFeeId);
totalNetReceiptsAdvanceAssistantOtherFee = totalNetReceiptsAdvanceAssistantOtherFee.add(netReceiptsFee.multiply(assistantOtherRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
totalNetReceiptsAdvanceAssistantOtherFee = totalNetReceiptsAdvanceAssistantOtherFee.add(netReceiptsFee.multiply(assistantOtherRateRespDTO.getTargetCurrencyAmount()).divide(assistantOtherRateRespDTO.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP));
} else {
totalNetReceiptsAdvanceAssistantOtherFee = totalNetReceiptsAdvanceAssistantOtherFee.add(netReceiptsFee);
}
......@@ -2620,13 +2643,15 @@ public class OrderQueryServiceImpl implements OrderQueryService {
}
if (!Objects.equals(currencyId, collectOtherFeeId)) {
ExchangeRateRespDTO otherRateRespDTO = currencyApi.getCurrencyRate(currencyId, collectOtherFeeId);
totalNetReceiptsCollectOtherFee = totalNetReceiptsCollectOtherFee.add(netReceiptsFee.multiply(otherRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
totalNetReceiptsCollectOtherFee = totalNetReceiptsCollectOtherFee.add(netReceiptsFee.multiply(otherRateRespDTO.getTargetCurrencyAmount()).divide(otherRateRespDTO.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP));
} else {
totalNetReceiptsCollectOtherFee = totalNetReceiptsCollectOtherFee.add(netReceiptsFee);
}
if (!Objects.equals(currencyId, collectAssistantOtherFeeId)) {
ExchangeRateRespDTO assistantOtherRateRespDTO = currencyApi.getCurrencyRate(currencyId, collectAssistantOtherFeeId);
totalNetReceiptsCollectAssistantOtherFee = totalNetReceiptsCollectAssistantOtherFee.add(netReceiptsFee.multiply(assistantOtherRateRespDTO.getCurrencyRate()));
// 调整汇率计算为新的逻辑公式: 待计算原币种金额 * 目标支付币种金额基础值 / 原币种金额基础值(注:这里的币种金额基础值为后台设定的汇兑基础值) ,最终结果保留两位小数点四舍五入
totalNetReceiptsCollectAssistantOtherFee = totalNetReceiptsCollectAssistantOtherFee.add(netReceiptsFee.multiply(assistantOtherRateRespDTO.getTargetCurrencyAmount()).divide(assistantOtherRateRespDTO.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP));
} else {
totalNetReceiptsCollectAssistantOtherFee = totalNetReceiptsCollectAssistantOtherFee.add(netReceiptsFee);
}
......@@ -2671,17 +2696,13 @@ public class OrderQueryServiceImpl implements OrderQueryService {
// 订单总金额应收分组
StringBuilder receivableTotalFeeGroup = new StringBuilder();
List<FeeGroupDto> receivableTotalFeeGroupDtoList = new ArrayList<>();
this.
convertFeeGroup(currencyRespDTOMap, receivableTotalFeeGroupDtoMap, receivableTotalFeeGroupDtoList, receivableTotalFeeGroup);
this.convertFeeGroup(currencyRespDTOMap, receivableTotalFeeGroupDtoMap, receivableTotalFeeGroupDtoList, receivableTotalFeeGroup);
summaryDto.setReceivableTotalFeeGroupDtoList(receivableTotalFeeGroupDtoList);
summaryDto.setReceivableTotalFeeGroup(receivableTotalFeeGroup.toString());
// 订单总金额实收分组
StringBuilder netReceiptsTotalFeeGroup = new StringBuilder();
List<FeeGroupDto> netReceiptsTotalFeeGroupDtoList = new ArrayList<>();
this.
convertFeeGroup(currencyRespDTOMap, netReceiptsTotalFeeGroupDtoMap, netReceiptsTotalFeeGroupDtoList, netReceiptsTotalFeeGroup);
this.convertFeeGroup(currencyRespDTOMap, netReceiptsTotalFeeGroupDtoMap, netReceiptsTotalFeeGroupDtoList, netReceiptsTotalFeeGroup);
summaryDto.setNetReceiptsTotalFeeGroupDtoList(netReceiptsTotalFeeGroupDtoList);
summaryDto.setNetReceiptsTotalFeeGroup(netReceiptsTotalFeeGroup.toString());
// 订单总优惠分组
......@@ -2930,6 +2951,8 @@ public class OrderQueryServiceImpl implements OrderQueryService {
freightExchangeRateRespDTO.setTargetCurrencyId(1L);
freightExchangeRateRespDTO.setTargetCurrencyCode("$");
freightExchangeRateRespDTO.setCurrencyRate(new BigDecimal("1"));//美元兑美元,默认1:1
freightExchangeRateRespDTO.setSourceCurrencyAmount(new BigDecimal("1"));//美元兑美元,默认1:1
freightExchangeRateRespDTO.setTargetCurrencyAmount(new BigDecimal("1"));//美元兑美元,默认1:1
}
if (Objects.isNull(clearanceExchangeRateRespDTO)) {
clearanceExchangeRateRespDTO = new ExchangeRateRespDTO();
......@@ -2938,6 +2961,8 @@ public class OrderQueryServiceImpl implements OrderQueryService {
clearanceExchangeRateRespDTO.setTargetCurrencyId(1L);
clearanceExchangeRateRespDTO.setTargetCurrencyCode("$");
clearanceExchangeRateRespDTO.setCurrencyRate(new BigDecimal("1"));//美元兑美元,默认1:1
clearanceExchangeRateRespDTO.setSourceCurrencyAmount(new BigDecimal("1"));//美元兑美元,默认1:1
clearanceExchangeRateRespDTO.setTargetCurrencyAmount(new BigDecimal("1"));//美元兑美元,默认1:1
}
chargeVolume = chargeVolume.add(orderItemBackVO.getChargeVolume().compareTo(orderItemBackVO.getMinMeteringVolume()) < 0 ?
orderItemBackVO.getMinMeteringVolume() : orderItemBackVO.getChargeVolume());
......@@ -2971,10 +2996,10 @@ public class OrderQueryServiceImpl implements OrderQueryService {
if (allCurrencyIds.size() > 1) {
// 当所有费用的货币不统一时,总的优惠金额需要统一转换成美元来累加处理
// 该订单下清关费多种货币,需要统一转换成美元来累加处理
BigDecimal freightReceivableFee = receivableSeaFreight.multiply(freightExchangeRateRespDTO.getCurrencyRate()).setScale(0, RoundingMode.HALF_UP);
BigDecimal freightNetReceiptsFee = seaFreight.multiply(freightExchangeRateRespDTO.getCurrencyRate()).setScale(0, RoundingMode.HALF_UP);
BigDecimal clearanceReceivableFee = receivableClearanceFreight.multiply(clearanceExchangeRateRespDTO.getCurrencyRate()).setScale(0, RoundingMode.HALF_UP);
BigDecimal clearanceNetReceiptsFee = clearanceFreight.multiply(clearanceExchangeRateRespDTO.getCurrencyRate()).setScale(0, RoundingMode.HALF_UP);
BigDecimal freightReceivableFee = receivableSeaFreight.multiply(freightExchangeRateRespDTO.getTargetCurrencyAmount()).divide(freightExchangeRateRespDTO.getSourceCurrencyAmount(),0, RoundingMode.HALF_UP);
BigDecimal freightNetReceiptsFee = seaFreight.multiply(freightExchangeRateRespDTO.getTargetCurrencyAmount()).divide(freightExchangeRateRespDTO.getSourceCurrencyAmount(),0, RoundingMode.HALF_UP);
BigDecimal clearanceReceivableFee = receivableClearanceFreight.multiply(clearanceExchangeRateRespDTO.getTargetCurrencyAmount()).divide(clearanceExchangeRateRespDTO.getSourceCurrencyAmount(),0, RoundingMode.HALF_UP);
BigDecimal clearanceNetReceiptsFee = clearanceFreight.multiply(clearanceExchangeRateRespDTO.getTargetCurrencyAmount()).divide(clearanceExchangeRateRespDTO.getSourceCurrencyAmount(),0, RoundingMode.HALF_UP);
receivableTotalAmount = receivableTotalAmount.add(freightReceivableFee).add(clearanceReceivableFee);
netReceiptsTotalAmount = netReceiptsTotalAmount.add(freightNetReceiptsFee).add(clearanceNetReceiptsFee);
} else {
......@@ -3040,11 +3065,11 @@ public class OrderQueryServiceImpl implements OrderQueryService {
// 该订单下运费多种货币,需要统一转换成美元来累加处理
if (isWarehouseIn) {
// 入仓的品名才计算实收
BigDecimal receivableFee = orderItemBackVO.getReceivableSeaFreight().multiply(clearanceExchangeRateRespDTO.getCurrencyRate()).setScale(0, RoundingMode.HALF_UP);
BigDecimal receivableFee = orderItemBackVO.getReceivableSeaFreight().multiply(clearanceExchangeRateRespDTO.getTargetCurrencyAmount()).divide(clearanceExchangeRateRespDTO.getSourceCurrencyAmount(),0, RoundingMode.HALF_UP);
totalReceivableFreightFee = totalReceivableFreightFee.add(receivableFee).setScale(0, RoundingMode.HALF_UP);
BigDecimal fee = orderItemBackVO.getSeaFreight().multiply(clearanceExchangeRateRespDTO.getCurrencyRate()).setScale(0, RoundingMode.HALF_UP);
BigDecimal fee = orderItemBackVO.getSeaFreight().multiply(clearanceExchangeRateRespDTO.getTargetCurrencyAmount()).divide(clearanceExchangeRateRespDTO.getSourceCurrencyAmount(),0, RoundingMode.HALF_UP);
totalNetReceiptsFreightFee = totalNetReceiptsFreightFee.add(fee);
BigDecimal discountFee = orderItemBackVO.getDiscountFreightTotalPrice().multiply(freightExchangeRateRespDTO.getCurrencyRate()).setScale(0, RoundingMode.HALF_UP);
BigDecimal discountFee = orderItemBackVO.getDiscountFreightTotalPrice().multiply(freightExchangeRateRespDTO.getTargetCurrencyAmount()).divide(freightExchangeRateRespDTO.getSourceCurrencyAmount(),0, RoundingMode.HALF_UP);
totalDiscountFreightFee = totalDiscountFreightFee.add(discountFee).setScale(0, RoundingMode.HALF_UP);
}
......@@ -3063,11 +3088,11 @@ public class OrderQueryServiceImpl implements OrderQueryService {
// 该订单下清关费多种货币,需要统一转换成美元来累加处理
if (isWarehouseIn) {
// 入仓的品名才计算实收
BigDecimal receivableFee = orderItemBackVO.getReceivableClearanceFreight().multiply(clearanceExchangeRateRespDTO.getCurrencyRate()).setScale(0, RoundingMode.HALF_UP);
BigDecimal receivableFee = orderItemBackVO.getReceivableClearanceFreight().multiply(clearanceExchangeRateRespDTO.getTargetCurrencyAmount()).divide(clearanceExchangeRateRespDTO.getSourceCurrencyAmount(),0, RoundingMode.HALF_UP);
totalReceivableClearanceFee = totalReceivableClearanceFee.add(receivableFee).setScale(0, RoundingMode.HALF_UP);
BigDecimal fee = orderItemBackVO.getClearanceFreight().multiply(clearanceExchangeRateRespDTO.getCurrencyRate()).setScale(0, RoundingMode.HALF_UP);
BigDecimal fee = orderItemBackVO.getClearanceFreight().multiply(clearanceExchangeRateRespDTO.getTargetCurrencyAmount()).divide(clearanceExchangeRateRespDTO.getSourceCurrencyAmount(),0, RoundingMode.HALF_UP);
totalNetReceiptsClearanceFee = totalNetReceiptsClearanceFee.add(fee).setScale(0, RoundingMode.HALF_UP);
BigDecimal discountFee = orderItemBackVO.getDiscountClearanceFeeTotalPrice().multiply(clearanceExchangeRateRespDTO.getCurrencyRate()).setScale(0, RoundingMode.HALF_UP);
BigDecimal discountFee = orderItemBackVO.getDiscountClearanceFeeTotalPrice().multiply(clearanceExchangeRateRespDTO.getTargetCurrencyAmount()).divide(clearanceExchangeRateRespDTO.getSourceCurrencyAmount(),0, RoundingMode.HALF_UP);
totalDiscountClearanceFee = totalDiscountClearanceFee.add(discountFee).setScale(0, RoundingMode.HALF_UP);
}
} else {
......@@ -3134,11 +3159,13 @@ public class OrderQueryServiceImpl implements OrderQueryService {
exchangeRateRespDTO.setTargetCurrencyId(1L);
exchangeRateRespDTO.setTargetCurrencyCode("$");
exchangeRateRespDTO.setCurrencyRate(new BigDecimal("1"));//美元兑美元,默认1:1
exchangeRateRespDTO.setTargetCurrencyAmount(new BigDecimal("1"));//美元兑美元,默认1:1
exchangeRateRespDTO.setSourceCurrencyAmount(new BigDecimal("1"));//美元兑美元,默认1:1
}
if (allCurrencyIds.size() > 1) {
// 该订单下运费多种货币,需要统一转换成美元来累加处理
BigDecimal fee = netReceiptsFee.multiply(exchangeRateRespDTO.getCurrencyRate()).setScale(0, RoundingMode.HALF_UP);
BigDecimal fee = netReceiptsFee.multiply(exchangeRateRespDTO.getTargetCurrencyAmount()).divide(exchangeRateRespDTO.getSourceCurrencyAmount(),0, RoundingMode.HALF_UP);
if (receivableDO.getState() == 1) {
// 核销中的金额计算
writeOffAmount = writeOffAmount.add(fee.multiply(writeOffProportion));
......@@ -3149,11 +3176,11 @@ public class OrderQueryServiceImpl implements OrderQueryService {
// 所有费用的货币id不统一,则计算所有费用的数据时
if (receivableDO.getFeeSource() == 1 && (receivableDO.getFeeType() == 1 || receivableDO.getFeeType() == 2)) {
// 运费和清关费的应收只需要将总实收减去收款单可能的优惠
netReceiptsTotalAmount = netReceiptsTotalAmount.subtract(discountFee.multiply(exchangeRateRespDTO.getCurrencyRate()).setScale(0, RoundingMode.HALF_UP));
netReceiptsTotalAmount = netReceiptsTotalAmount.subtract(discountFee.multiply(exchangeRateRespDTO.getTargetCurrencyAmount()).divide(exchangeRateRespDTO.getSourceCurrencyAmount(),0, RoundingMode.HALF_UP));
} else {
// 额外费用的应收需要累加到总应收和实收中
receivableTotalAmount = receivableTotalAmount.add(receivableFee.multiply(exchangeRateRespDTO.getCurrencyRate()).setScale(0, RoundingMode.HALF_UP));
netReceiptsTotalAmount = netReceiptsTotalAmount.add(netReceiptsFee.multiply(exchangeRateRespDTO.getCurrencyRate()).setScale(0, RoundingMode.HALF_UP));
receivableTotalAmount = receivableTotalAmount.add(receivableFee.multiply(exchangeRateRespDTO.getTargetCurrencyAmount()).divide(exchangeRateRespDTO.getSourceCurrencyAmount(),0, RoundingMode.HALF_UP));
netReceiptsTotalAmount = netReceiptsTotalAmount.add(netReceiptsFee.multiply(exchangeRateRespDTO.getTargetCurrencyAmount()).divide(exchangeRateRespDTO.getSourceCurrencyAmount(),0, RoundingMode.HALF_UP));
}
} else {
// 该订单下费用单一货币,不需要转换汇率,直接累加
......@@ -3222,7 +3249,7 @@ public class OrderQueryServiceImpl implements OrderQueryService {
//}
if (seaFreightCurrencyIds.size() > 1) {
// 该订单下运费多种货币,需要统一转换成美元来累加处理,实收运费减去收款单的优惠金额
totalNetReceiptsFreightFee = totalNetReceiptsFreightFee.subtract(discountFee.multiply(exchangeRateRespDTO.getCurrencyRate()).setScale(0, RoundingMode.HALF_UP));
totalNetReceiptsFreightFee = totalNetReceiptsFreightFee.subtract(discountFee.multiply(exchangeRateRespDTO.getTargetCurrencyAmount()).divide(exchangeRateRespDTO.getSourceCurrencyAmount(),0, RoundingMode.HALF_UP));
} else {
// 该订单下运费单一货币,不需要转换汇率,实收运费减去收款单的优惠金额
totalNetReceiptsFreightFee = totalNetReceiptsFreightFee.subtract(discountFee);
......@@ -3267,7 +3294,7 @@ public class OrderQueryServiceImpl implements OrderQueryService {
// 清关费实收
if (clearanceFreightCurrencyIds.size() > 1) {
// 该订单下清关多种货币,需要统一转换成美元来累加处理,实收金额直接减去收款单优惠
totalNetReceiptsClearanceFee = totalNetReceiptsClearanceFee.subtract(discountFee.multiply(exchangeRateRespDTO.getCurrencyRate()).setScale(0, RoundingMode.HALF_UP));
totalNetReceiptsClearanceFee = totalNetReceiptsClearanceFee.subtract(discountFee.multiply(exchangeRateRespDTO.getTargetCurrencyAmount()).divide(exchangeRateRespDTO.getSourceCurrencyAmount(),0, RoundingMode.HALF_UP));
} else {
// 该订单下清关费单一货币,不需要转换汇率,实收金额直接减去收款单优惠
totalNetReceiptsClearanceFee = totalNetReceiptsClearanceFee.subtract(discountFee);
......@@ -3337,8 +3364,8 @@ public class OrderQueryServiceImpl implements OrderQueryService {
// TODO 额外费用的实收金额是否需要累加,这里的实收额外费用是不减收款单优惠的金额
if (otherCurrencyIds.size() > 1) {
// 该订单下其他费用多种货币,需要统一转换成美元来累加处理
totalReceivableOtherFee = totalReceivableOtherFee.add(receivableFee.multiply(exchangeRateRespDTO.getCurrencyRate()).setScale(0, RoundingMode.HALF_UP));
BigDecimal fee = netReceiptsFee.multiply(exchangeRateRespDTO.getCurrencyRate()).setScale(0, RoundingMode.HALF_UP);
totalReceivableOtherFee = totalReceivableOtherFee.add(receivableFee.multiply(exchangeRateRespDTO.getTargetCurrencyAmount()).divide(exchangeRateRespDTO.getSourceCurrencyAmount(),0, RoundingMode.HALF_UP));
BigDecimal fee = netReceiptsFee.multiply(exchangeRateRespDTO.getTargetCurrencyAmount()).divide(exchangeRateRespDTO.getSourceCurrencyAmount(),0, RoundingMode.HALF_UP);
totalNetReceiptsOtherFee = totalNetReceiptsOtherFee.add(fee);
} else {
// 该订单下其他费用单一货币,不需要转换汇率,直接累加
......
......@@ -471,7 +471,7 @@ public class ProdCostCalculation {
if (costDto.getTotalWorth().compareTo(BigDecimal.ZERO) > 0) {
// 因为货值为RMB计算,保价费应换算为目标货币(默认为美元)
BigDecimal insuranceFee = costDto.getTotalWorth().multiply(new BigDecimal("1.1"))
.multiply(new BigDecimal("0.002")).multiply(exchangeRateRespDTO.getCurrencyRate()).setScale(0, RoundingMode.HALF_UP);
.multiply(new BigDecimal("0.002")).multiply(exchangeRateRespDTO.getTargetCurrencyAmount()).divide(exchangeRateRespDTO.getSourceCurrencyAmount(),0, RoundingMode.HALF_UP);
costDto.setInsuranceFee(insuranceFee);
feeDto.setAmount(insuranceFee);
} else {
......@@ -1582,9 +1582,9 @@ public class ProdCostCalculation {
if (Objects.nonNull(priceStepDO)) {
BigDecimal productClearancePrice =
productExchangeRate.getCurrencyRate().
multiply(priceStepDO.getClearancePrice()).
setScale(2, BigDecimal.ROUND_HALF_UP);
priceStepDO.getClearancePrice().
multiply(productExchangeRate.getTargetCurrencyAmount()).
divide(productExchangeRate.getSourceCurrencyAmount(),2, BigDecimal.ROUND_HALF_UP);
if (lineClearanceBasePrice.getClearancePrice().
compareTo(BigDecimal.ZERO) > 0) {
......@@ -1634,9 +1634,9 @@ public class ProdCostCalculation {
clearanceBasePrice.getClearancePriceUnit(),
1L);
BigDecimal productClearancePrice =
productExchangeRate.getCurrencyRate().
multiply(clearanceBasePrice.getClearancePrice()).
setScale(2,
clearanceBasePrice.getClearancePrice().
multiply(productExchangeRate.getTargetCurrencyAmount()).
divide(productExchangeRate.getSourceCurrencyAmount(),2,
BigDecimal.ROUND_HALF_UP);
BigDecimal lineClearancePrice =
lineClearanceBasePrice.getProductClearanceAsExchangePrice();
......
......@@ -1196,11 +1196,13 @@ public class CouponServiceImpl extends AbstractService<CouponMapper, CouponDO> i
freightRateRespDTO.setSourceCurrencyId(dto.getReduceCurrencyId().longValue());
freightRateRespDTO.setTargetCurrencyId(rmbCurrency.longValue());
freightRateRespDTO.setCurrencyRate(new BigDecimal("1"));
freightRateRespDTO.setSourceCurrencyAmount(new BigDecimal("1"));
freightRateRespDTO.setTargetCurrencyAmount(new BigDecimal("1"));
}
}
BigDecimal freightRMBReduceAmount = dto.getReduceAmount().compareTo(BigDecimal.ZERO) > 0 && Objects.nonNull(dto.getReduceCurrencyId()) &&
Objects.nonNull(freightRateRespDTO.getCurrencyRate()) && freightRateRespDTO.getCurrencyRate().compareTo(BigDecimal.ZERO) > 0 ?
dto.getReduceAmount().multiply(freightRateRespDTO.getCurrencyRate()).setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO;
dto.getReduceAmount().multiply(freightRateRespDTO.getTargetCurrencyAmount()).divide(freightRateRespDTO.getSourceCurrencyAmount(),2, RoundingMode.HALF_UP) : BigDecimal.ZERO;
ExchangeRateRespDTO clearanceFeeRateRespDTO = new ExchangeRateRespDTO();
if (Objects.nonNull(dto.getClearanceReduceCurrencyId())) {
clearanceFeeRateRespDTO = currencyApi.getCurrencyRate(dto.getClearanceReduceCurrencyId().longValue(), rmbCurrency.longValue());
......@@ -1210,11 +1212,13 @@ public class CouponServiceImpl extends AbstractService<CouponMapper, CouponDO> i
clearanceFeeRateRespDTO.setSourceCurrencyId(rmbCurrency.longValue());
clearanceFeeRateRespDTO.setTargetCurrencyId(rmbCurrency.longValue());
clearanceFeeRateRespDTO.setCurrencyRate(new BigDecimal("1"));
clearanceFeeRateRespDTO.setSourceCurrencyAmount(new BigDecimal("1"));
clearanceFeeRateRespDTO.setTargetCurrencyAmount(new BigDecimal("1"));
}
}
BigDecimal clearanceFeeRMBReduceAmount = dto.getClearanceReduceAmount().compareTo(BigDecimal.ZERO) > 0 && Objects.nonNull(dto.getClearanceReduceCurrencyId()) &&
Objects.nonNull(clearanceFeeRateRespDTO.getCurrencyRate()) && clearanceFeeRateRespDTO.getCurrencyRate().compareTo(BigDecimal.ZERO) > 0 ?
dto.getClearanceReduceAmount().multiply(clearanceFeeRateRespDTO.getCurrencyRate()).setScale(2, RoundingMode.HALF_UP) : BigDecimal.ZERO;
dto.getClearanceReduceAmount().multiply(clearanceFeeRateRespDTO.getTargetCurrencyAmount()).divide(clearanceFeeRateRespDTO.getSourceCurrencyAmount(),2, RoundingMode.HALF_UP) : BigDecimal.ZERO;
dto.setTotalRMBReduceAmount(freightRMBReduceAmount.add(clearanceFeeRMBReduceAmount));
// 封装优惠详情
CouponInfoVO infoVO = new CouponInfoVO();
......
......@@ -2369,9 +2369,9 @@ public class ProductPriceServiceImpl extends AbstractService<ProductPriceMapper,
int result = 0;
if (productPrice.getClearancePriceUnit() != channelPrice.getClearancePriceUnit()) {
ExchangeRateRespDTO productExchangeRate = currencyApi.getCurrencyRate(productPrice.getClearancePriceUnit(), 1L);
BigDecimal productClearancePrice = productExchangeRate.getCurrencyRate().multiply(productPrice.getClearancePrice()).setScale(2, BigDecimal.ROUND_HALF_UP);
BigDecimal productClearancePrice = productPrice.getClearancePrice().multiply(productExchangeRate.getTargetCurrencyAmount()).divide(productExchangeRate.getSourceCurrencyAmount(),2, BigDecimal.ROUND_HALF_UP);
ExchangeRateRespDTO channelExchangeRate = currencyApi.getCurrencyRate(channelPrice.getClearancePriceUnit(), 1L);
BigDecimal channelClearancePrice = channelExchangeRate.getCurrencyRate().multiply(channelPrice.getClearancePrice()).setScale(2, BigDecimal.ROUND_HALF_UP);
BigDecimal channelClearancePrice = channelPrice.getClearancePrice().multiply(channelExchangeRate.getTargetCurrencyAmount()).divide(channelExchangeRate.getSourceCurrencyAmount(),2, BigDecimal.ROUND_HALF_UP);
result = productClearancePrice.compareTo(channelClearancePrice);
} else {
result = productPrice.getClearancePrice().compareTo(channelPrice.getClearancePrice());
......
......@@ -522,7 +522,7 @@ public class AirBillReceivableExcelExportListener {
private BigDecimal changeAmountToDestCurrency(Long fromCurrencyId,Long toCurrencyId,BigDecimal fromAmount){
BigDecimal destAmount = BigDecimal.ZERO;
ExchangeRateRespDTO currencyRate = currencyApi.getCurrencyRate(fromCurrencyId, toCurrencyId);
destAmount = fromAmount.multiply(currencyRate.getCurrencyRate());
destAmount = fromAmount.multiply(currencyRate.getTargetCurrencyAmount()).divide(currencyRate.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP);
return destAmount;
}
......
......@@ -631,7 +631,7 @@ public class ShipmentReceivableExcelExportListener2 {
BigDecimal fromAmount) {
BigDecimal destAmount = BigDecimal.ZERO;
ExchangeRateRespDTO currencyRate = currencyApi.getCurrencyRate(fromCurrencyId, toCurrencyId);
destAmount = fromAmount.multiply(currencyRate.getCurrencyRate());
destAmount = fromAmount.multiply(currencyRate.getTargetCurrencyAmount()).divide(currencyRate.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP);
return destAmount;
}
......
......@@ -1338,7 +1338,7 @@ public class MakeBillOfLadingServiceImpl extends AbstractService<MakeBillOfLadin
private BigDecimal changeAmountToDestCurrency(Long fromCurrencyId, Long toCurrencyId, BigDecimal fromAmount) {
BigDecimal destAmount = BigDecimal.ZERO;
ExchangeRateRespDTO currencyRate = currencyApi.getCurrencyRate(fromCurrencyId, toCurrencyId);
destAmount = fromAmount.multiply(currencyRate.getCurrencyRate());
destAmount = fromAmount.multiply(currencyRate.getTargetCurrencyAmount()).divide(currencyRate.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP);
return destAmount;
}
}
......@@ -52,6 +52,7 @@ import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.net.URLEncoder;
import java.util.Collection;
import java.util.HashMap;
......@@ -570,7 +571,7 @@ public class ReceiptController {
} else {
if (StrUtil.isNotBlank(currencyRespDTO.getFuhao())) {
ExchangeRateRespDTO exchangeRateRespDTO = currencyApi.getCurrencyRateByCode(currencyRespDTO.getFuhao(), "$");
usdTotal = usdTotal.add(receivableBackVO.getTotalAmount().multiply(exchangeRateRespDTO.getCurrencyRate()));
usdTotal = usdTotal.add(receivableBackVO.getTotalAmount().multiply(exchangeRateRespDTO.getTargetCurrencyAmount()).divide(exchangeRateRespDTO.getSourceCurrencyAmount(),2, RoundingMode.HALF_UP));
}
}
......@@ -603,7 +604,7 @@ public class ReceiptController {
if (StrUtil.isNotBlank(currencyRespDTO.getFuhao())) {
ExchangeRateRespDTO exchangeRateRespDTO = currencyApi.getCurrencyRateByCode(currencyRespDTO.getFuhao(), "$");
usdTotal = usdTotal.add(receivableBackVO.getTotalAmount().multiply(exchangeRateRespDTO.getCurrencyRate()));
usdTotal = usdTotal.add(receivableBackVO.getTotalAmount().multiply(exchangeRateRespDTO.getTargetCurrencyAmount()).divide(exchangeRateRespDTO.getSourceCurrencyAmount(),2,RoundingMode.HALF_UP));
}
}
......
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