# 架构设计:统一积分与元比例 (Design) ## 1. 总体架构 本次改造主要涉及 **计算逻辑层的标准化** 和 **配置数据的动态化**,不涉及大规模架构重构。 核心思路:**后端收敛计算逻辑,前端收敛展示逻辑**。 ```mermaid graph TD A[Admin User] -->|配置 ExchangeRate| B(Admin Panel) B -->|API: upsertSystemConfig| C(Backend API) C -->|Update| D[(MySQL: sys_configs)] E[App User] -->|Action: Pay/Refund| F(Backend Service) F -->|Read Config| D F -->|Call| G{pkg/points/convert} G -->|Calculate based on Rate| F F -->|Save Integer Points| D H[Mini App] -->|Read Points| F H -->|Display Raw Integer| I[UI Display] ``` ## 2. 模块设计 ### 2.1 后端 (`bindbox_game`) - **`internal/pkg/points`**: 核心计算包。 - 职责:提供基于汇率的 `Cents <-> Points` 转换函数。 - 变更: - `CentsToPoints(cents, rate)`: 逻辑改为 `cents * rate / 100`。 - `PointsToCents(points, rate)`: 逻辑改为 `points * 100 / rate`。 - **`internal/service/user`**: 业务服务层。 - 职责:在积分变动(增加、扣减、退款)时,从 `sys_configs` 读取最新 `points_exchange_rate` 并传入计算包。 - 变更:检查所有调用点,确保不再硬编码。 ### 2.2 数据库 (`MySQL`) - **Schema**: 无变更。 - **Data Migration**: - 需执行数据清洗,将现有的积分数值 `x` 更新为 `x / 100` (假设之前是按分存的)。 - **Risk**: 需要用户确认是否执行此 SQL。**默认提供 SQL 但不自动运行**。 ### 2.3 管理后台 (`web/admin`) - **SystemConfigs**: - 新增 "积分配置" Section。 - Key: `points_exchange_rate`。 - 验证:必须为正整数,默认为 1。 ### 2.4 小程序 (`bindbox-mini`) - **Utils**: - `formatPoints`: 移除除以 100 的逻辑,仅保留千分位格式化。 - **Pages**: - 检查积分明细、下单抵扣、商品兑换等页面的展示。 - **Vue Filters/Formatters**: 全局搜索使用 `/ 100` 展示积分的地方进行替换。 ## 3. 接口规范 - **API**: `POST /admin/system/configs` (现有) - Payload: `{ "key": "points_exchange_rate", "value": "1" }` ## 4. 迁移策略 1. **停机维护** (建议): 防止数据在迁移过程中变动。 2. **代码部署**: 部署新版后端(新算法)。 3. **数据清洗**: ```sql -- 假设所有用户的积分都需要缩小 100 倍以适配新算法 UPDATE user_points SET points = FLOOR(points / 100); UPDATE user_points_ledger SET points = FLOOR(points / 100); ``` 4. **验证**: 检查某测试账号积分是否符合预期。