# 数据源版本控制说明

## 概述

为了确保系统的稳定性和可靠性，我们实现了数据源的版本控制机制。系统现在支持两个版本的数据源：

- **新版本 (V2)**: 从两个新的BigQuery表获取数据
  - `gcp-digital-bi-dev.sandbox_ywang.revrec_order_test` (order/revrec数据)
  - `gcp-digital-bi-dev.sandbox_ywang.revrec_org_test` (collection数据)

- **旧版本 (Legacy)**: 从原始单表获取数据
  - `gcp-digital-bi.model_of_monthly_cloud_revrec_confirm.dwm_monthly_order_info_calculation11_of_revrec_tenant_v3_view`

## 版本控制配置

### 配置文件位置
- 开发环境: `config/config-dev.yaml`
- 生产环境: `config/config-prod.yaml`

### 配置选项
```yaml
# 数据源版本控制
datasource:
  use_legacy_data_source: false  # 设置为 true 时使用旧版本数据源，false 时使用新版本数据源
```

## 如何切换版本

### 切换到旧版本（紧急回退）
1. 修改配置文件中的设置：
   ```yaml
   datasource:
     use_legacy_data_source: true
   ```

2. 重启服务

### 切换到新版本
1. 修改配置文件中的设置：
   ```yaml
   datasource:
     use_legacy_data_source: false
   ```

2. 重启服务

## 代码结构

### 主要文件
- `internal/dataplatform/service/bigquery.go` - 包含统一入口函数和新版本实现
- `internal/dataplatform/service/bigquery_legacy.go` - 包含旧版本实现

### 关键函数
- `FetchMonthlyOrderInfo()` - 统一入口函数，根据配置选择版本
- `FetchMonthlyOrderInfoV2()` - 新版本实现
- `FetchMonthlyOrderInfoLegacy()` - 旧版本实现

## 新版本特性

### 新增字段支持
- 新增了 `essentials_revenue_amount` 字段的完整支持
- 支持新的字段映射:
  - `new_order_start_date` -> `order_start_date`
  - `new_order_end_date` -> `order_end_date`
  - `new_order_amount` -> `revenue_amount`

### 数据源分离
- Order/Revrec数据从 `revrec_order_test` 表获取
- Collection数据从 `revrec_org_test` 表获取
- 通过 `is_new_order` 字段判断是否需要创建新order

## 监控和日志

系统会在日志中明确指示当前使用的数据源版本：

- 使用新版本时: `"Using new data source"`
- 使用旧版本时: `"Using legacy data source"`

## 紧急回退流程

如果新版本出现问题，可以按以下步骤快速回退：

1. **立即回退**:
   - 修改配置文件: `use_legacy_data_source: true`
   - 重启服务

2. **验证回退**:
   - 检查日志确认使用了旧版本数据源
   - 验证数据获取功能正常

3. **问题排查**:
   - 在旧版本稳定运行的情况下排查新版本问题
   - 修复问题后重新切换到新版本

## 注意事项

1. **数据一致性**: 确保新旧版本数据源的数据一致性
2. **配置同步**: 确保开发和生产环境的配置正确同步
3. **监控**: 切换版本后密切监控系统运行状况
4. **备份**: 重要操作前确保数据备份完整

## 联系信息

如有问题或需要协助，请联系开发团队。
