如何设计多币种支付支付的系统

问题描述 投票:0回答:1

我正在开发一个会计应用程序,用户可以在其中拥有带有货币的产品

A
。产品的价值可以使用货币
B
的支票付款进行托管,并且该支票付款可以用货币
C
以现金支付。每当为该产品创建支票/现金付款时,如果是现金,则
paid_amount
以及如果是该产品的支票,则
escrow_amount
应增加此值。每当通过现金支付支票付款时,付款和产品的
paid_amount
应递增,产品的
escrow_amount
应随付款金额递减。向表中添加“CHECK”约束,其中
paid_amount >= 0 && <= amount AND escrow_amount >= 0 && <= amount
以下是两个表之间的关系。

我在尝试通过货币兑换支付/托管金额时遇到问题。

enter image description here

假设我们有一个产品,

amount
为“4000.00”,货币为
A
。使用货币
B
创建支票付款,应支付产品的全额金额(“4000.00”
A
)。该应用程序将要求以货币
A
支付的金额,并根据输入的兑换率应用换算并将结果保存在付款中
amount
。 IE。 "4000.00"
A
≈ "1066.67"
B
,因此将创建带有
amount
"1066.67"
B
的付款,并且产品的
escrow_amount
将增加“4000.00”。现在创建现金支付来支付支票的全额。该应用程序将要求以货币支付的金额
B
。 IE。 "1066.67"
B
≈ "996.89"
C
,因此将创建包含
amount
"996.89"
C
的付款。现在支票付款
paid_amount
列将增加“1066.67”,这是输入值。现在产品的
paid_amount
列应该递增。使用以下计算
1066.67 * 3.75 ≈ 4000.01
。这将引发错误,因为最大允许值为“4000.00”。

A
= 3.75
B

B
= 1.07
C

我问的是,即使采用正确的计算方法或提示客户输入的方式,如何解决这个问题。

database postgresql math database-design architecture
1个回答
0
投票

首先,您可以创建一个存储函数,负责将货币 X 转换为货币 Y。

其次,为您的计算选择一种货币,并使用您的参考货币存储所有内容,并始终将原始货币、最终货币和金额(以原始货币计)传递到您的计算中。

第三,确保您的限制以您的参考货币进行引用和计算。

简而言之,您应该在计算中始终应用一种货币,并将计算空间中的每个输入转换为该货币,然后将其转换回用户感兴趣的货币以进行表示。

© www.soinside.com 2019 - 2024. All rights reserved.