国内项目国际化后金额处理方案

目标现状及问题

目标
已有的国内项目,需要部署国际化。需要考虑币种、金额货币精度、多语言、汇率、税等一系列问题。这里主要说的就是其中金额精度的处理。
现状
日常国内项目里,界面输入的金额是元,然后数据库存储以及与其他系统交互都是用的分,也是就固定的货币精度系数100。
问题
那么国际化项目后,存在不同地方存金额精度不一致问题,同时根据不同币种存储和展示精度系数不一致问题。需提供一个整体解决方案。比如KHR 瑞尔 有的规定最小就是精度为0,那么页面填写100,数据库存储也是100。

前置

币种的精度系数有专门的配置系统里配置好的,直接读配置获取系数即可

解决方案

根据以上问题,目前发现三个解决方案

|---------|----------------------------------------------------------------------|-------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 方案名 | 描述 | 优缺点 | 改动点 |
| 全量修改 | * 提供金额处理方法 * 所有涉及到金额录入地方,前端入参后都调统一方法处理 * 所有涉及到金额展示地方,后端返回前端前都调统一方法处理 | 优点:需要处理的金额则直接处理,精细度高。 缺点: 1. 前端后端目前涉及金额的地方包括业务逻辑处都需处理,改动量大。 | |
| 拦截器统一处理 | * 去掉前后端所有金额处理地方,统一在垂直网关里,处理入参和出参。 | 优点:统一处理 缺点: 1. 需罗列出哪些金额需要处理,哪些不需要处理,并支持配置 | * [ ] 增加拦截器 * [ ] 增加精度接口查询以及出入参金额处理 * [ ] 增加金额字段可配置 * [ ] 增加实体金额展示字段,或者拦截器增加https://www.cnblogs.com/JaxYoun/p/13923703.html * [ ] 去掉前端后端所有处理金额的地方,并修改前端展示金额字段 |
| 前端修改 | * 前端增加处理金额统一方法 * 前端提交和展示对应的方法的请求前后,统一处理方法 | | |

选定方案

经过考虑,使用拦截器统一处理的方案,首先哪个方案都需要梳理哪些地方涉及改动,但是拦截器的方案,后面有优化只需要修改一个地方即可。

方案图例

拦截器统一处理
暂时无法在文档外展示此内容

具体实现

  1. 新增一个通用的金额处理方法,根据金额和精度得到最后的数据

伪代码--仅仅提供思路

注意

  1. BigDecimal 除以后需要四舍五入或者四舍六入五成双
  2. 入参里若是有MultipartFile 等特殊类型需要提前过滤
  3. 出参统一类返回更好,不然需要多处理一些

后记

其实说白了就是利用aop的切面,增加项目中日志、鉴权等功能

相关推荐
JaydenAI7 小时前
[MAF预定义Agent中间件-03]FunctionInvocationDelegatingAgent:将AOP引入函数调用
ai·c#·agent·aop·maf
qq_4203620311 天前
前端国际化方案
前端·javascript·vue.js·国际化·reactjs
行者-全栈开发16 天前
SpringBoot AOP 面向切面编程实战|4大企业级案例+自定义注解+5个避坑指南
spring boot·aop·权限校验·自定义注解·日志记录·避坑指南·切面编程
zz07232023 天前
Redis + Lua 实现高性能分布式限流
redis·lua·aop·限流算法·分布式限流
庞轩px1 个月前
第六篇:Spring用了哪些设计模式?——从单例到代理,拆解框架中的经典设计
java·spring·设计模式·bean·代理模式·aop·单例
小新同学^O^1 个月前
简单学习 --> SpringAOP
java·学习·spring·aop
庞轩px1 个月前
权限系统设计复盘——从RBAC模型到JWT双Token,方法级权限控制的完整实现
鉴权·jwt·rbac·aop·自定义注解·权限系统·双token
消失的旧时光-19431 个月前
Spring Boot 工程化进阶:统一返回 + 全局异常 + AOP 通用工具包
java·spring boot·后端·aop·自定义注解
升鲜宝供应链及收银系统源代码服务2 个月前
数据字典国际化完整方案字典类型主表 + 字典类型国际化子表 + 字典明细主表 + 字典明细国际化子表(一)----升鲜宝生鲜配送供应链管理系统源代码
国际化·数据字典·多语言·生鲜配送·供应链源代码
庞轩px2 个月前
反射与动态代理——Java语言动态性的核心
java·spring·反射·aop·动态代理·类型