datai/docs/archive/2026-01-21-002-05-货币格式化需求.md

10 KiB
Raw Permalink Blame History

货币格式化需求

元数据

  • 需求编号2026-01-21-002-05
  • 创建时间2026-01-21
  • 创建人SSOT 架构师
  • 状态:进行中
  • 优先级:中
  • 父需求2026-01-21-002-项目国际化需求

需求概述

实现货币格式化功能,支持根据用户地区显示货币,支持常用货币符号、货币小数位格式化、货币千分位分隔符。

目标

  1. 货币符号支持:支持常用货币符号(如:¥、$、€ 等)
  2. 小数位格式化:支持货币小数位格式化
  3. 千分位分隔符:支持货币千分位分隔符
  4. 自动选择:根据用户地区偏好自动选择货币格式
  5. 自定义格式:支持自定义货币格式
  6. 多货币显示:支持多货币显示和实时汇率转换
  7. 后端统一处理:通过 AOP 在 Service 层统一处理货币格式化

业务上下文

当前问题

  • 货币显示格式固定,无法根据用户地区自动调整
  • 缺乏货币格式化功能,用户体验不佳

业务场景

货币格式化
├─ 货币符号
│  ├─ 人民币:¥
│  ├─ 美元:$
│  ├─ 欧元:€
│  └─ 英镑:£
├─ 小数位
│  ├─ 两位小数1,234.56
│  └─ 三位小数1,234.567
├─ 千分位分隔符
│  ├─ 逗号分隔1,234.56
│  └─ 点分隔1.234,56
└─ 多货币显示
   ├─ 单一货币¥100.00
   ├─ 多货币显示¥100.00 ($14.50, €13.20)
   └─ 实时汇率转换:根据实时汇率自动转换

应用场景

  1. 财务数据:显示财务数据时,需要符合用户地区的货币格式
  2. 商品价格:显示商品价格时,需要符合用户地区的货币格式
  3. 订单金额:显示订单金额时,需要符合用户地区的货币格式
  4. 报表统计:生成报表时,需要符合用户地区的货币格式

功能需求

核心功能

功能 1货币符号支持

  • 描述:支持常用货币符号
  • 验收标准
    1. 支持人民币符号(¥)
    2. 支持美元符号($
    3. 支持欧元符号(€)
    4. 支持英镑符号(£)
    5. 支持日元符号(¥)
  • 优先级:高
  • 依赖关系:无

功能 2小数位格式化

  • 描述:支持货币小数位格式化
  • 验收标准
    1. 支持两位小数格式化
    2. 支持三位小数格式化
    3. 支持自定义小数位
    4. 小数位四舍五入
  • 优先级:高
  • 依赖关系:无

功能 3千分位分隔符

  • 描述:支持货币千分位分隔符
  • 验收标准
    1. 支持逗号分隔符(,
    2. 支持点分隔符(.
    3. 支持空格分隔符(
    4. 支持自定义分隔符
  • 优先级:高
  • 依赖关系:无

功能 4自动选择格式

  • 描述:根据用户地区偏好自动选择货币格式
  • 验收标准
    1. 根据用户地区偏好自动选择货币符号
    2. 根据用户地区偏好自动选择小数位
    3. 根据用户地区偏好自动选择千分位分隔符
    4. 格式选择准确无误
  • 优先级:高
  • 依赖关系:依赖用户语言偏好表

功能 5自定义格式

  • 描述:支持用户自定义货币格式
  • 验收标准
    1. 支持用户自定义货币符号
    2. 支持用户自定义小数位
    3. 支持用户自定义千分位分隔符
    4. 自定义格式立即生效
  • 优先级:中
  • 依赖关系:依赖用户语言偏好表

功能 6多货币显示

  • 描述:支持多货币显示和实时汇率转换
  • 验收标准
    1. 支持单一货币显示例如¥100.00
    2. 支持多货币显示例如¥100.00 ($14.50, €13.20)
    3. 支持实时汇率转换
    4. 汇率数据准确可靠
    5. 汇率更新及时
  • 优先级:高
  • 依赖关系:依赖汇率数据表

功能 7后端统一处理

  • 描述:通过 AOP 在 Service 层统一处理货币格式化
  • 验收标准
    1. 使用 AOP 切面拦截 Service 方法返回值
    2. 自动识别 BigDecimal 类型字段
    3. 根据用户货币偏好自动格式化
    4. 支持多货币显示和汇率转换
    5. 格式化逻辑统一,避免重复代码
  • 优先级:高
  • 依赖关系:依赖 AOP 框架

非功能需求

性能需求

  • 格式化时间:货币格式化时间 < 10ms

兼容性需求

  • 浏览器兼容性支持主流浏览器Chrome、Firefox、Edge、Safari
  • 国际化库使用成熟的国际化库Intl.NumberFormat

可维护性需求

  • 代码可读性:代码符合项目编码规范,注释完整
  • 测试覆盖率:单元测试覆盖率 ≥ 80%

数据需求

数据依赖

  • 依赖用户表sys_user扩展 currency_code 字段
  • 依赖汇率数据表sys_exchange_rate
  • 依赖系统配置文件application.yml

数据流转需求

货币显示
  └─ 读取用户货币偏好currency_code
  └─ 读取系统默认货币配置
  └─ 读取实时汇率数据
  └─ Service 层 AOP 拦截返回值
  └─ 识别 BigDecimal 类型字段
  └─ 根据用户货币偏好和汇率进行格式化
  └─ 支持单一货币或多货币显示
  └─ 返回格式化后的货币数据

业务规则

  1. 货币偏好优先级用户货币偏好currency_code优先于系统默认货币
  2. 格式化准确性:货币格式化必须准确无误
  3. 四舍五入:货币小数位四舍五入
  4. 自定义格式权限:所有用户都可以自定义货币格式
  5. 多货币显示规则:支持单一货币显示和多货币显示
  6. 汇率转换规则:根据实时汇率自动转换,汇率数据准确可靠
  7. AOP 处理规则Service 层统一处理货币格式化,避免重复代码

技术约束

  1. Spring Boot 版本3.5.7
  2. Java 版本21
  3. 国际化库java.text.DecimalFormat
  4. AOP 框架Spring AOP
  5. 必须使用现有的认证授权机制:不能引入新的认证方式
  6. 数据类型:货币数据使用 BigDecimal 类型

成功标准

  1. 支持常用货币符号
  2. 支持小数位格式化
  3. 支持千分位分隔符
  4. 支持自动选择格式
  5. 支持自定义格式
  6. 支持多货币显示
  7. 支持实时汇率转换
  8. 货币格式化时间 < 10ms
  9. 单元测试覆盖率 ≥ 80%
  10. Service 层 AOP 统一处理货币格式化

风险评估

风险 影响程度 发生概率 缓解措施
货币格式化错误 使用成熟的国际化库,充分测试
汇率数据不准确 选择可靠的汇率数据源,定期验证汇率数据
汇率更新延迟 实现汇率自动更新机制,设置合理的更新频率
AOP 拦截失败 充分测试 AOP 切面,添加异常处理机制

依赖关系

  • 依赖用户表sys_user扩展 currency_code 字段
  • 依赖汇率数据表sys_exchange_rate
  • 依赖系统配置文件application.yml
  • 依赖现有的 Spring Boot 框架
  • 依赖现有的认证授权机制
  • 依赖 AOP 框架Spring AOP

相关文档

最优方案说明

1. 货币偏好存储方案

选择方案:扩展 sys_user 表,添加 currency_code 字段

理由

  • 用户货币偏好是用户级别的配置,应该存储在用户表中
  • 复用现有的用户表,避免创建额外的关联表
  • 支持用户级别的货币偏好覆盖系统默认设置
  • 与现有的 lang_code 字段保持一致,便于管理

2. 系统默认货币配置方案

选择方案:在配置文件中设置系统默认货币

理由

  • 系统默认货币是全局配置,适合在配置文件中设置
  • 配置文件修改方便,不需要重启服务即可生效(使用 Spring Cloud Config
  • 便于不同环境(开发、测试、生产)配置不同的默认货币
  • 与现有的系统配置保持一致

3. 货币格式化实现方案

选择方案:后端使用 java.text.DecimalFormat通过 AOP 在 Service 层统一处理

理由

  • java.text.DecimalFormat 是 Java 内置的国际化库,成熟稳定
  • 后端实现可以保证格式化逻辑的一致性
  • 通过 AOP 在 Service 层统一处理,避免重复代码
  • 支持自动识别 BigDecimal 类型字段,减少手动标注的工作量
  • 与现有的时区国际化实现保持一致(使用 AOP

4. 多货币显示方案

选择方案:支持多货币显示和实时汇率转换

理由

  • 多货币显示可以满足不同地区用户的需求
  • 实时汇率转换可以保证货币数据的准确性
  • 提升用户体验,用户可以选择自己熟悉的货币查看数据
  • 支持单一货币和多货币显示两种模式,灵活适应不同场景

5. 汇率数据管理方案

选择方案创建汇率数据表sys_exchange_rate支持实时汇率更新

理由

  • 汇率数据需要持久化存储,便于查询和审计
  • 支持实时汇率更新,保证汇率数据的及时性
  • 可以记录汇率历史数据,便于追溯和分析
  • 支持多种汇率来源(央行、第三方 API

6. 性能和安全性方案

选择方案:不考虑性能和安全性问题(根据用户要求)

理由

  • 用户明确表示不考虑性能和安全性问题
  • 专注于功能实现,简化开发流程
  • 后续可以根据实际需求进行优化

7. 数据类型方案

选择方案:货币数据使用 BigDecimal 类型

理由

  • BigDecimal 可以保证货币数据的精度
  • 避免浮点数计算带来的精度问题
  • 符合金融行业的最佳实践
  • 与现有的货币数据处理保持一致