应用软件中如何实现多币种自动换算

简介: 应用软件中如何实现多币种自动换算

由于国际业务或多币种业务的实际需要,在业务系统中能够处理多个币种并进行自动换算,是十分必要的。

一、设计汇率表

用于存储用户换算的外汇牌价。

mlwbpj字段列表:
id        int4         32 键号            textedit          
hbdh      varchar      50 贷币代号          textedit          
hbmc      varchar      20 货币名称          textedit          
jzhl      numeric      18 记账汇率(每100外币)  textedit        n4
sfsh      bool          0 是否审核          checkedit         
shry      varchar      20 审核人员          textedit          
rq        date          0 日期            dateedit  yyyy-MM-dd

二、换算函数

编写两个外币转换函数。使外币与本币可以相互换算。

1、外币换算成本币金额

CREATE OR REPLACE FUNCTION public.x9_bbje(
  ywrq date,
  wbmc character varying,
  wbsl numeric)
    RETURNS numeric
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
AS $BODY$
   -- Description:  本币金额
DECLARE
   bbje decimal(16,4);
   pjrq DATE;
BEGIN
  bbje:=0;
  IF $2 = '人民币(RMB)' OR $2 = '' THEN
    BEGIN
       bbje:=$3;
    END;
  ELSE
    BEGIN
      IF $3 IS NULL THEN $3 = 0;END IF;
      SELECT max(rq) INTO pjrq FROM mlwbpj WHERE rq <= $1;
      SELECT (jzhl * $3) / 100 INTO bbje FROM mlwbpj WHERE rq = pjrq AND hbmc = $2 ;
    END;
  END IF ;
  RETURN bbje;
END;
$BODY$;

2、本币换算为外币金额

CREATE OR REPLACE FUNCTION public.x9_wbje(
  wbmc character varying,
  bbsl numeric)
    RETURNS numeric
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE PARALLEL UNSAFE
AS $BODY$
   -- complete date:2022-09-18-- Description: 外币金额 
DECLARE
    ssmsg text;ssdet text;sstname text;sshint text;ssctt text; --错误处理
  wbje decimal(16,4);
  pjrq DATE;
BEGIN
  wbje:=0;
  IF $1 = '人民币(RMB)' OR $1 = '' THEN
     wbje:=0;
  ELSE
    IF $2 IS NULL THEN 
         wbje = 0;
      END IF ;
    SELECT max(rq) INTO pjrq FROM mlwbpj WHERE hbmc = $1;
    SELECT ($2 * 100 / jzhl) INTO wbje FROM mlwbpj WHERE hbmc = $1 AND rq = pjrq;
  END IF ;
  RETURN wbje;
   EXCEPTION WHEN others THEN
      GET stacked DIAGNOSTICS ssmsg = MESSAGE_TEXT,ssdet = pg_exception_detail,
         sstname = TABLE_NAME, sshint = pg_exception_hint, ssctt = pg_exception_context;
      CALL x9_jlproc(ssmsg, ssdet, sstname, sshint, ssctt);
      RETURN 0;
END;
$BODY$;

三、自动换算

在数据保存后,在后台自动计算并保存不同币种各自的金额。在设计数据表时,都设计有本币和外币字段。

四、总结

这些设计了以后,在数据查询时,就可按需要查询本币和外币了。

如果需要,在数据输入时,也可以调用后台函数,立即计算出换算后的结果,前提是实时更外币牌价表。

相关文章
|
4月前
|
存储 C++ 索引
【C++ 】C++ 停车场收费系统(源码)【独一无二】
【C++ 】C++ 停车场收费系统(源码)【独一无二】
|
5月前
|
前端开发 开发工具 数据库
支付系统资料-青戈版沙箱支付,订单编号样式设计,还有七天无理由退款,常与会员系统相搭配,内网穿透客户看到页面,前端展示,直播过程所有都能访问的写法
支付系统资料-青戈版沙箱支付,订单编号样式设计,还有七天无理由退款,常与会员系统相搭配,内网穿透客户看到页面,前端展示,直播过程所有都能访问的写法
支付系统资料-青戈版沙箱支付,订单编号样式设计,还有七天无理由退款,常与会员系统相搭配,内网穿透客户看到页面,前端展示,直播过程所有都能访问的写法
|
6月前
|
数据可视化 安全 区块链
区块链钱包浏览器开发功能,价格和时间周期
开发区块链钱包浏览器涉及账户管理、交易查询、区块浏览、智能合约查询及数据可视化等功能。价格因开发难度、需求、团队专业度及第三方服务费用而异,通常在数万至数百万元。开发周期约数月到半年,包括需求分析、设计、开发、测试和上线等阶段。
区块链钱包浏览器开发功能,价格和时间周期
|
vr&ar 开发工具 图形学
Unity引擎更新收费模式:从收入分成转向游戏安装量,将会有哪些影响呢
Unity引擎更新收费模式:从收入分成转向游戏安装量,将会有哪些影响呢
|
存储 区块链
Swap交易所的兑换质押池模式系统搭建部署
Swap交易所的兑换质押池模式系统搭建部署
[解决]:【TeamViewer作为个人用途免费,但仅可使用在有限数量的设备上。您已经到达可使用设备的上线】
[解决]:【TeamViewer作为个人用途免费,但仅可使用在有限数量的设备上。您已经到达可使用设备的上线】
559 0
|
Rust 自然语言处理 安全
【算法】2125. 银行中的激光束数量(多语言实现)
银行内部的防盗安全装置已经激活。给你一个下标从 0 开始的二进制字符串数组 bank ,表示银行的平面图,这是一个大小为 m x n 的二维矩阵。 bank[i] 表示第 i 行的设备分布,由若干 '0' 和若干 '1' 组成。'0' 表示单元格是空的,而 '1' 表示单元格有一个安全设备。 对任意两个安全设备而言,如果同时 满足下面两个条件,则二者之间存在 一个 激光束: 两个设备位于两个 不同行 :r1 和 r2 ,其中 r1 < r2 。 满足 r1 < i < r2 的 所有 行 i ,都 没有安全设备 。 激光束是独立的,也就是说,一个激光束既不会干扰另一个激光
【算法】2125. 银行中的激光束数量(多语言实现)
SAP MM 外部采购退货的ARM功能实在是鸡肋?
SAP MM 外部采购退货的ARM功能实在是鸡肋?
SAP MM 外部采购退货的ARM功能实在是鸡肋?
SAP MM 采购信息记录中价格单位转换因子的修改
SAP MM 采购信息记录中价格单位转换因子的修改
云支付小程序如何恢复退回蜻蜓标准版本
云支付小程序如何恢复退回蜻蜓标准版本
云支付小程序如何恢复退回蜻蜓标准版本