我正在编写货币换算代码。
我具有以下存储库界面:
@Repository
public interface FxRateRepository extends JpaRepository<FxRate,Long> {
List<FxRate> findByCurrencyCode(String currencyTo, String currencyFrom);
以及以下数据库记录:
情况是,有一笔汇入的欧元资金,我想将其保存到美元的银行帐户中。为此,我必须根据当前的汇率进行转换。
我有以下代码段:
private BigDecimal getAmount(AccountData accountData, Input input) {
String currencyOfAccount = accountData.getCurrency();
String amountCurrency = input.getCurrency();
List<FxRate> res = fxRateRepository.findByCurrencyCode(currencyOfAccount, amountCurrency);
if (Objects.nonNull(res)) {
for (FxRate fxRate : res) {
if (amountCurrency.equals(currencyOfAccount)) {
return inputAmount;
} else if (currencyOfAccount.equals("HUF")) {
BigDecimal midPrice = getMidPriceBasedOnAmountCurrency(input, fxRate);
if (Objects.nonNull(midPrice)) {
return inputAmount.multiply(midPrice)
.setScale(5, BigDecimal.ROUND_UP);
}
} else if (!currencyOfAccount.equals("HUF")) {
BigDecimal midPriceBasedOnCurrencyOfAccount = getMidPriceBasedOnCurrencyOfAccount(accountData, fxRate);
if (Objects.nonNull(midPriceBasedOnAmountCurrency) && Objects.nonNull(midPriceBasedOnCurrencyOfAccount)) {
return inputAmount.multiply(midPrice).divide(midPriceBasedOnCurrencyOfAccount)
.setScale(5, BigDecimal.ROUND_UP);
}
}
}
}
return null;
}
以下获取midPrice的方法,这是一种不断返回null值的方法:
private BigDecimal getMidPriceBasedOnAmountCurrency(Input input, FxRate fxRate) {
if (fxRate.getCurrencyCode().equals(input.getCurrency())) {
return fxRate.getMidPrice();
} else if (input.getCurrency().equals(fxRate.getFixingCurrencyCode())) {
return new BigDecimal("0");
} else if (!input.getCurrency().equals(fxRate.getCurrencyCode()) && !input.getCurrency().equals(fxRate.getFixingCurrencyCode())){
BigDecimal midPrice = fxRateRepository.findMidPrice(input.getCurrency());
return midPrice;
}
return null;
}
基于...。
@Query("SELECT fx.midPrice FROM FxRate fx WHERE fx.currencyCode =:currencyTo")
BigDecimal findMidPrice(@Param("currencyTo") String currencyTo);
此查询使我不断将nullTo货币成功替换为EUR,但未找到数据库记录...
我还尝试了列表搜索:
List<FxRate> findMidPrice(String currencyTo);
...,然后使用:
List<FxRate> midPriceList = fxRateRepository.findMidPrice(amountCurrency);
BigDecimal midPrice = midPriceList.get(0).getMidPrice();
也给出空值...
我不明白为什么它不能返回正确的值,尽管它与findByCurrencyCode一起使用就像一个魅力。...
有什么主意吗?
更新
如果我将第二个查询放到一个单独的新类/存储库中,则它正在运行...