Administrator
6 days ago 259cbaab9a033db8a8d5424fde57fb9d7509a1a2
feat(pay): 添加巴西雷亚尔货币转换功能

- 引入 BigDecimal 和 RoundingMode 支持精确金额计算
- 实现 getBRLAmount 方法进行货币汇率转换
- 从数据字典获取 BRL 汇率配置,支持动态调整
- 默认使用 5.18 汇率,可从数据库配置读取
- 在支付参数中使用转换后的金额替换原金额
- 支持向后兼容,保留原有的支付流程逻辑
1 files modified
17 ■■■■■ changed files
src/main/java/cc/mrbird/febs/pay/service/LwPayService.java 17 ●●●●● patch | view | raw | blame | history
src/main/java/cc/mrbird/febs/pay/service/LwPayService.java
@@ -14,6 +14,8 @@
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.Date;
import java.util.Map;
import java.util.TreeMap;
@@ -79,7 +81,7 @@
        params.put("pay_bankcode", bankCode);
        params.put("pay_notifyurl", getNotifyUrl());
        params.put("pay_callbackurl", getReturnUrl());
        params.put("pay_amount", order.getAmount().toPlainString());
        params.put("pay_amount", getBRLAmount(order.getAmount()));
        params.put("pay_productname", "商品订单-" + order.getOrderNo());
        // 通道 968 需要 network 参数
@@ -118,6 +120,19 @@
        return json.getString("payurl");
    }
    private String getBRLAmount(BigDecimal amount){
        DataDictionaryCustom dataDictionaryCustom = dataDictionaryCustomMapper.selectDicDataByTypeAndCode(
                "MONEY_CHANGE",
                "BRL"
        );
        BigDecimal rate = new BigDecimal("5.18");
        if (dataDictionaryCustom != null){
            rate = new BigDecimal(dataDictionaryCustom.getValue());
        }
        return  amount.multiply( rate).setScale(2, RoundingMode.DOWN).toString();
    }
    // ==================== 回调处理 ====================
    /**