zoukankan      html  css  js  c++  java
  • 如何才能设计出一个优美的多币种系统?

    系统需求

    首先,我们来讲一下背景需求

    现在需要做一个中港物流的系统,大致要实现一下功能:

    • 从珠三角这边收货,录单,需要上门提货费、运费、报关费等等
    • 然后运送到深圳报关,报关之后运送到香港仓库
    • 香港这边派货送货,需要填写停车费、过关费、路桥费、压夜费、上楼费等等

    众所周知,香港那边实行的是港币制度,因此那边填写的是港币,但是也不排除人民币。在大陆这边发货,一般都是人民币,当然,也有少部分是港币,因为物流运输过程有时是需要到付的。

    系统分析

    根据上述的需求分析,我们大致设计出如下的几张重要的表:

    • 运送单:编号、货物名称、日期、实收费用、提货费、运费、报关费
    • 派送单:编号(同运送单单号)、日期、停车费、过关费、路桥费、压夜费、上楼费

    这里我们省略了其中一些更为复杂的需求和设计,因为这里主要讨论多币种的实现。分析上面的两张表,那么问题来了

    1. 运送单中的运费有可能是港币,因为如果是到付,香港人付的是港币
    2. 派送单中的各个费用,基本是港币,但是也不排除是人民币。因为香港人有可能是付人民币,也有可能因为是现付而在大陆给的是人民币
    3. 对于系统的操作人员,在汇总以及列表显示时,大陆的希望看到的整体都是人民币;但是对于香港人,希望看到的是整体的都是港币
    4. 汇率是天天都变的,但是在实际操作的过程中,系统的汇率变化会比实际的汇率慢一头半个月,因为在汇率变化的过程中,也是有一些利润可图的。
    5. 每个单的实际汇率,也有可能是跟标准的汇率是有差别的,因为这里也有利润可图。

    系统实现

    我的实现是这样的,虽然不是很优美,但是基本满足了一些需求,不知各位大牛有什么好的设计可以推荐一下:

    • 在派送单和运算单都增加两个字段:币种,汇率。其中费用字段存入的都是人民币的价格。比如运费存储的是100,则表示人民币是100.另外还存储当前的汇率,比如是港币0.78,然后币种字段存储为港币。那么我自然就知道该单就是客户给的就是港币,然后转换为人民币是100,港币实际对应的是:128.2.
    • 用一个表记录最新的币种和汇率。在录入新的单时,系统自动用当前最新的汇率填入。

    对应的ER图为:

    币种设计ER图

    程序的实现如下:

    存在的不足

    • 如果在派送单中,既有港币,又有人民币,则无法处理了。比如派送费为人民币,而其他的停车费、路桥费、上楼费等都是港币。
    • 如果我发现上个月1号的汇率是0.8的,而不是0.78,那么也无法统一修改所有设置该汇率的发货单和派送单

    改进的设计

    一种改进的设计,我是这么考虑的:把币种、日期保存下来,以币种和日期生成唯一的Id,然后这个Id赋值给发货单记录和派送单记录,这样如果汇率错误时,就能够修改到。

    如果需要针对某个费用,则在该费用字段的基础上,增加一个额外的字段,存储这个“汇率币种”的Id

    但是这个方法,又会引入一个问题:如何针对每一个单来修改当前的汇率呢?

    你会怎么做?

    如果你有想法,或者有更好的建议,请在评论中回复,大家一起讨论改进。

  • 相关阅读:
    Max Function
    动态语句语法:EXEC\SP_EXECUTESQL语法(转载)
    [转帖]在SQL SERVER中实现RSA加密算法
    [转]C#实现QQ接口软件QQ的HTTP接口协议探究
    用一条sql语句删除表中所相同的记录
    SQL Server存储过程 对数组参数的循环处理
    在WinDBG中, 使用.shell命令来搜索字符串
    SharePoint提供的一些javascript函数
    IP协议里的Time To Live(TTL)
    SharePoint Application Pool的推荐设置
  • 原文地址:https://www.cnblogs.com/marvin/p/howToDesignAGracefulMultiCurrencySystem.html
Copyright © 2011-2022 走看看