业务需求总结
- 后台管理端(Admin)
- 产品新增/编辑,录入基准价格:人民币(CNY)为主价格
- 后台独立汇率管理页面:
/admin/currency-exchange-rates,维护【CNY ↔ USD】实时汇率 - 管理员修改汇率后,全站前台所有美金价格自动刷新生效
- 前台官网 + Flutter买家App
- 对外展示以美金(USD)作为主展示货币
- 换算逻辑:
USD价格 = 产品人民币基准价 ÷ 后台配置汇率 - 支持访客手动切换CNY/USD;GEO自动匹配默认展示币种
- 配套规则
- 每月监控人民币与美金价差波动;汇率调整后无需逐个修改产品价格,统一全局生效
- 产品原始价格永久保存人民币基准价,保证源头数据唯一,避免多币种价格维护混乱
- 缓存联动:汇率变更主动清理产品价格缓存,前台立刻展示最新换算美金价格
一、数据库结构设计
1. 汇率主表 currency_exchange_rate(对应后台 /admin/currency-exchange-rates)
| 字段 | 说明 |
|---|---|
| id | 主键ID |
| base_currency | 基准货币 CNY |
| target_currency | 目标货币 USD |
| rate | 汇率数值(示例:1 USD = 7.25 CNY,rate=7.25) |
| status | 启用状态 1启用 0禁用 |
| updated_at | 更新时间 |
业务计算公式:
USD Price = product_cny_price / rate
2. 产品主表核心价格字段
仅保留单一基准价格,不存储独立美金价格product_base_price DECIMAL(10,2) 【人民币基准出厂价】product_wholesale_price DECIMAL(10,2) 【人民币基准批发价】
❌ 不额外存储USD价格,所有美金价格实时动态换算,杜绝两套价格数据不一致问题
二、后台功能逻辑(Admin Web + Admin Mobile App)
2.1 汇率管理页面 /admin/currency-exchange-rates
功能清单:
- 展示当前生效 CNY→USD 汇率
- 表单输入新汇率,提交保存
- 汇率保存成功触发事件:
- 清除Redis中全部产品价格相关缓存
- 清除FileCache页面静态缓存
- 清除首页、分类页、产品详情页缓存
> 实现:前台刷新页面立即读取新汇率换算后的美金价格
- 操作日志:记录操作人员、修改前汇率、修改后汇率、修改时间,方便月度价差核对
2.2 产品新增 / 产品编辑页面
- 价格输入框仅展示人民币输入框(出厂价、批发价、MOQ价格等全部录入人民币)
- 页面增加实时预览:根据当前后台生效汇率,实时计算并预览对应美金价格(仅作管理员参考,不存入数据库)
- 保存产品时,只入库人民币基准价格,不存储美金价格
- 产品保存完成 → 自动清理该产品对应的Redis & FileCache缓存
三、前台 Web + Buyer App 价格渲染逻辑
3.1 基础换算规则
USD展示价格 = 产品人民币基准价格 ÷ 当前后台有效汇率
价格统一保留2位小数,四舍五入。
3.2 默认展示策略
- 首次访问默认展示:USD(美金为主)
- GEO识别优化:
- 中国大陆IP访客:默认展示CNY
- 海外所有地区IP:默认展示USD
- 访客支持手动切换币种(USD / CNY),选择存入本地缓存,优先级高于GEO自动匹配
3.3 前端页面全部统一规则
适用页面:首页推荐产品、分类列表、产品详情、询价弹窗、结算页、订单中心、订单详情
- 模式A:访客默认币种USD → 优先展示换算后的美金价格,可切换查看人民币
- 模式B:访客手动切换CNY → 直接展示原始基准人民币价格
3.4 Google Shopping Feed 适配
Feed输出价格以USD换算价格为准;汇率更新后,Feed自动生成最新美金售价,无需人工重新编辑商品。
四、缓存架构联动(核心关键点,配合现有MySQL+Redis+FileCache)
- 产品列表、产品详情页面缓存Key 携带当前生效汇率版本标识
- 管理员在
/admin/currency-exchange-rates修改汇率
✅ 系统自动执行:
- 删除全部产品价格Redis缓存
- 删除所有产品页面FileCache静态缓存
- 用户再次访问页面,程序重新读取最新汇率,实时换算美金价格并生成新缓存
效果:汇率修改完成,前台刷新页面立刻生效,不存在旧价格缓存滞留问题
五、结算 & 订单模块规则
- 用户下单时,同时记录两组数据
- 下单时刻生效汇率
- 原始人民币基准价
- 换算后的美金成交价格
作用:订单历史价格锁定!后续后台修改汇率,不会改变已经生成订单的历史价格,杜绝订单金额变动纠纷。
- 订单详情页面:展示下单当时锁定的币种价格,附带汇率备注,便于财务对账。
六、月度价差管理配套方案(业务需求)
- 汇率管理页面增加汇率变更历史记录列表,留存每次调整时间、新旧汇率
- 支持导出汇率变更报表,用于财务月度核算人民币、美金价差
- 可在后台设置汇率波动预警阈值;当汇率波动超过阈值,系统提醒运营评估是否调整报价策略
七、多语言页面适配
所有14种语言页面统一使用同一套换算逻辑;
页面币种文字由语言包控制:USD = US DollarCNY = Chinese Yuan
价格符号自动随选中币种切换 $ / ¥
八、边界异常处理
- 汇率未配置 / 汇率=0:系统设置保护默认汇率,前台正常展示,同时后台发送异常提醒
- 价格计算出现极小/负数:增加校验,前台展示占位提示,避免错误价格对外展示
- 汇率修改过程中瞬时并发访问:加简易分布式锁,防止缓存清理不完全导致价格错乱
九、开发任务清单
- [ ] 创建
currency_exchange_rate数据表,开发后台/admin/currency-exchange-rates管理页面 - [ ] 产品表移除USD价格字段,统一只保留CNY基准价格
- [ ] 产品新增/编辑页面:仅人民币录入,增加实时USD预览
- [ ] 汇率更新事件:自动清理Redis、FileCache全站产品缓存
- [ ] 前台所有商品页面重构价格渲染逻辑:实时动态换算
- [ ] GEO自动币种识别 + 用户手动币种切换功能开发
- [ ] 订单数据表增加【下单汇率】字段,锁定订单成交价格
- [ ] Google Shopping Feed适配动态换算USD价格
- [ ] Flutter买家App统一对接价格换算接口,和网页逻辑保持一致
- [ ] 汇率变更历史日志、导出功能,满足月度价差财务统计
十、可选扩展优化
增加「汇率定时自动同步」接口,可对接第三方汇率API,实现每日自动更新汇率,减少人工操作;运营人员仅需审核确认生效。
如果你需要,我可以输出:
- 数据库SQL建表语句
- 前后端标准价格换算API接口文档
- 汇率变更缓存清理伪代码逻辑