# 订单记录与渠道分析优化计划

本计划旨在解决用户提出的两个问题：

1. **订单记录优化**：补充缺失的“开奖状态”和“活动信息”。
2. **渠道分析优化**：将渠道分析的统计维度调整为按“月份”划分。

## 1. 需求分析与对齐 (Align)

* **需求 1 (订单记录)**:

  * **问题**: 订单列表（Admin/App 端）缺乏上下文信息，无法知道订单属于哪个活动，以及是否中奖。

  * **解决方案**:

    * 在订单列表中关联 `ActivityDrawLogs` 表，通过 `OrderID` 关联。

    * 如果在 `ActivityDrawLogs` 中找到记录，说明已开奖，可以获取 `IsWinner` (是否中奖) 和 `RewardID` (奖品信息)。

    * 通过 `ActivityDrawLogs` 的 `IssueID` -> `ActivityIssues` -> `Activities` 链条，或者直接通过商品信息反查活动，来获取活动名称。

    * 注意：`ActivityDrawLogs` 是通过 `OrderID` 关联的 (`comment:抽奖票据订单ID`)。

  * **实现细节**: 修改 `internal/service/user/orders_list.go` 中的 `ListOrdersWithItems`，在返回结构中增加 `ActivityInfo` 和 `DrawInfo`。

* **需求 2 (渠道分析)**:

  * **问题**: 渠道分析目前按天统计，用户希望按月统计。

  * **解决方案**: 修改 `GetStats` 方法，将 SQL 中的 `DATE_FORMAT` 格式从 `%Y-%m-%d` 改为 `%Y-%m`，并调整日期范围计算逻辑（按月计算）。

  * **交互调整**: 前端默认请求的时间范围应适应按月展示（如最近 6-12 个月）。也可以 手动选择时间类型 区间等

## 2. 架构设计 (Architect)

### 2.1 订单列表数据增强

* **数据模型扩展**:

  * 在 `internal/service/user/orders_list.go` 中，扩展 `OrderWithItems` 结构体（或新建 `OrderWithDetail`），增加：

    * `ActivityName`: 活动名称

    * `IssueNumber`: 期号

    * `IsDraw`: 是否已开奖

    * `IsWinner`: 是否中奖

    * `RewardLevel`: 中奖等级

* **查询逻辑**:

  * 查询 `orders` 后，收集 `order_ids`。

  * 批量查询 `activity_draw_logs` WHERE `order_id IN (?)`。

  * 批量查询 `activity_issues` (通过 logs 中的 `issue_id`)。

  * 批量查询 `activities` (通过 issues 中的 `activity_id`)。

  * 将这些信息组装回订单列表。

### 2.2 渠道分析按月统计

* **后端调整**:

  * 修改 `GetStats` 签名或内部逻辑。考虑到用户明确说“只需要按月份”，我们可以直接修改默认行为。

  * SQL: `DATE_FORMAT(created_at, '%Y-%m')`

  * Range: 最近 12 个月。

## 3. 任务拆解 (Atomize)

### 3.1 渠道分析优化 (优先执行，改动小)

1. **Modify Backend**: 修改 `internal/service/channel/channel.go` 中的 `GetStats` 方法。

   * 调整日期格式为 `%Y-%m`。

   * 调整循环逻辑，生成月份列表。

   * 调整默认天数/月数为 12。
2. **Modify Frontend**: 修改 `web/admin/src/views/operations/channels/index.vue`。

   * 调整图表 X 轴显示。

   * 调整 API 调用参数（如果需要）。

### 3.2 订单列表增强

1. **Modify Service**: 修改 `internal/service/user/orders_list.go`。

   * 定义新的结构体字段。

   * 在 `ListOrders` / `ListOrdersWithItems` 中增加查询 `ActivityDrawLogs` 和相关表的逻辑。
2. **Verify**: 确保管理端和 APP 端调用该 Service 的地方都能正常展示新字段（可能需要同步修改 Controller 或 API 定义）。

   * 检查 `internal/api/admin/users_admin.go` 和 `internal/api/user/orders_app.go`。

## 4. 执行步骤 (Automate)

1. **Step 1**: 修改 `channel.go` 实现按月统计。
2. **Step 2**: 修改 `orders_list.go` 实现订单详情增强。
3. **Step 3**: 验证并修复可能受影响的 API 响应结构。

