跨境电商币种转换方案

文章介绍了处理跨境电商业务时面临的币种转换问题,提出了一套解决方案。首先,从阿里云获取每日汇率并存储到MySQL数据库;然后,通过创建视图脚本来便捷地进行多币种换算;最后,结合Redis和SpringBoot实现缓存,提升查询性能。该方案确保了运算的准确性和系统性能。
摘要由CSDN通过智能技术生成

        在跨境电商业务处理过程中,经常需要对币种进行转换,之后参与订单金额的精确换算。对于这种运算重要、频繁,并且准确性与性能要求都比较高,这对于研发人员是一种挑战。下面我将结合实际,提供币种转换方案,供各位参考使用。

        开门见山,我先把输出的目标表展示如下,有了该对应关系表,我们就可以不经过计算快速查出需要转换的币种汇率。为了得到该迪卡尔汇率表,需要下面三步曲。

   

       第一步,需要定时从阿里云中获取到每天的浮动汇率,存储到mysql表中。表结构如下(说明:脱敏后)

CREATE TABLE `exchange_rate` (
  `bzbm` varchar(10) NOT NULL COMMENT '币种编码',
  `hbmc` varchar(100) DEFAULT NULL COMMENT '货币名称',
  `zsje` decimal(18,4) DEFAULT NULL COMMENT '当前折算金额',
  `rmb` decimal(18,4) DEFAULT NULL COMMENT '当前人民币金额',
  `hl` decimal(18,4) DEFAULT NULL COMMENT '汇率,计算公式,ZSJE÷RMB,保留四位小数',
  `rq` varchar(20) DEFAULT NULL COMMENT '日期',
)

       第二步,关键所在,编写视图脚本。

SELECT
    b.rq,
    b.bzbm,
    SUM(
    IF
        (
            b.`bzbm` = 'USD',
            ROUND( b.rmb * b.hl / b.zsje, 2 ),
            (
            SELECT
                ROUND( b.rmb * b.hl / t.zsje, 2 ) 
            FROM
                exchange_rate t 
            WHERE
                t.rq = '2021-01-15' 
                AND t.bzbm = 'USD' 
            ) 
        ) 
    ) AS 'USD',
    SUM(
    IF
        (
            b.`bzbm` = 'GBP',
            ROUND( b.rmb * b.hl / b.zsje, 2 ),
            (
            SELECT
                ROUND( b.rmb * b.hl / t.zsje, 2 ) 
            FROM
                exchange_rate t 
            WHERE
                t.rq = '2021-01-15' 
                AND t.bzbm = 'GBP' 
            ) 
        ) 
    ) AS 'GBP',
    SUM(
    IF
        (
            b.`bzbm` = 'JPY',
            ROUND( b.rmb * b.hl / b.zsje, 2 ),
            (
            SELECT
                ROUND( b.rmb * b.hl / t.zsje, 2 ) 
            FROM
                exchange_rate t 
            WHERE
                t.rq = '2021-01-15' 
                AND t.bzbm = 'JPY' 
            ) 
        ) 
    ) AS 'JPY',
    SUM(
    IF
        (
            b.`bzbm` = 'CAD',
            ROUND( b.rmb * b.hl / b.zsje, 2 ),
            (
            SELECT
                ROUND( b.rmb * b.hl / t.zsje, 2 ) 
            FROM
                exchange_rate t 
            WHERE
                t.rq = '2021-01-15' 
                AND t.bzbm = 'CAD' 
            ) 
        ) 
    ) AS 'CAD',
    SUM(
    IF
        (
            b.`bzbm` = 'EUR',
            ROUND( b.rmb * b.hl / b.zsje, 2 ),
            (
            SELECT
                ROUND( b.rmb * b.hl / t.zsje, 2 ) 
            FROM
                exchange_rate t 
            WHERE
                t.rq = '2021-01-15' 
                AND t.bzbm = 'EUR' 
            ) 
        ) 
    ) AS 'EUR' 
FROM
    exchange_rate b 
WHERE
    b.rq = '2021-01-15' 
GROUP BY
    bzbm

 第三步、把redis与springboot结合,每次都从缓存中获取货币对应的汇率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值