目标现状及问题
目标: 已有的国内项目,需要部署国际化。需要考虑币种、金额货币精度、多语言、汇率、税等一系列问题。这里主要说的就是其中金额精度的处理。 现状: 日常国内项目里,界面输入的金额是元,然后数据库存储以及与其他系统交互都是用的分,也是就固定的货币精度系数100。 问题: 那么国际化项目后,存在不同地方存金额精度不一致问题,同时根据不同币种存储和展示精度系数不一致问题。需提供一个整体解决方案。比如KHR 瑞尔 有的规定最小就是精度为0,那么页面填写100,数据库存储也是100。前置
币种的精度系数有专门的配置系统里配置好的,直接读配置获取系数即可解决方案
根据以上问题,目前发现三个解决方案方案名 | 描述 | 优缺点 | 改动点 |
全量修改 |
|
优点:需要处理的金额则直接处理,精细度高。
缺点:
|
|
拦截器统一处理 |
|
优点:统一处理
缺点:
|
|
前端修改 |
|
选定方案
经过考虑,使用拦截器统一处理的方案,首先哪个方案都需要梳理哪些地方涉及改动,但是拦截器的方案,后面有优化只需要修改一个地方即可。方案图例
拦截器统一处理 暂时无法在文档外展示此内容
具体实现
- 新增一个通用的金额处理方法,根据金额和精度得到最后的数据
注意
- BigDecimal 除以后需要四舍五入或者四舍六入五成双
- 入参里若是有MultipartFile 等特殊类型需要提前过滤
- 出参统一类返回更好,不然需要多处理一些