# BUG修复需求分析

## 任务概述

修复盲盒游戏系统中6个BUG问题。

## BUG清单

### BUG 1: 任务中心任务类型统计错误
**问题描述**: 设置任务是完成A活动才可以算完成，但玩了一局B活动竟然也算任务成功了。

**根因分析**:
- 任务中心 `GetUserProgress` 函数 (`internal/service/task_center/service.go:290-386`)
- 该函数通过订单 `remark` 字段使用 LIKE 匹配来过滤活动ID
- 匹配模式: `%%activity:%d%%`
- **问题**: 虽然有活动ID过滤逻辑，但需要确认任务配置时是否正确设置了 `activity_id`
- 相关代码位置: `service.go` 第306-312行

---

### BUG 2: 任务中心把商城订单也计入了
**问题描述**: 任务中心统计时不应该包含商城订单，应该根据设置的类型来结算。

**根因分析**:
- `GetUserProgress` 函数统计订单时只过滤了 `status = 2`（已支付）
- **问题**: 没有过滤 `source_type`，导致商城订单（`source_type = 1`）也被计入
- 订单 `source_type` 定义 (`model/orders.gen.go:20`):
  - 1: 商城直购
  - 2: 抽奖票据
  - 3: 其他
  - 4: 次数卡支付

---

### BUG 3: 活动盈亏仪表盘退款订单未排除
**问题描述**: 对用户订单进行退款了，统计不应该把这个订单累计进来。

**根因分析**:
- `DashboardActivityProfitLoss` 函数 (`internal/api/admin/dashboard_activity.go:132-139`)
- 营收统计查询条件: `orders.status = 2`（已支付）
- **问题**: 订单状态4表示已退款，但当前只过滤了 `status = 2`，不会包含退款订单
- **实际问题**: 退款后订单状态应该从2变成4，但如果状态未更新则会被统计。需要确认退款流程是否正确更新订单状态

---

### BUG 4: 活动盈亏抽奖记录缺少字段
**问题描述**: 需要在抽奖记录中体现 优惠券 / 道具卡 / 次数卡 字段。

**根因分析**:
- `DashboardActivityLogs` 函数 (`internal/api/admin/dashboard_activity.go:222-354`)
- 当前返回字段已包含:
  - `coupon_name`: 通过 `orders.coupon_id` LEFT JOIN `system_coupons`
  - `item_card_name`: 通过 `orders.item_card_id` LEFT JOIN `system_item_cards`
- **问题**: `source_type = 4` 表示次数卡支付，但次数卡使用信息存储在订单 `remark` 字段中（格式: `gp_use:ID:Count`），当前未解析显示
- 需要增加解析 `remark` 字段中的次数卡使用信息

---

### BUG 5: 一番赏不能使用优惠券
**问题描述**: 一番赏目前不能使用优惠券。

**根因分析**:
- `JoinLottery` 函数 (`internal/api/activity/lottery_app.go:78-81`)
- 优惠券检查逻辑: `if !activity.AllowCoupons && req.CouponID != nil`
- **问题**: 一番赏活动的 `AllowCoupons` 字段可能被设置为 `false`
- 数据库字段定义 (`model/activities.gen.go:27`): `AllowCoupons bool` 默认值为1（允许）
- **解决方向**: 
  1. 检查一番赏活动在数据库中的 `allow_coupons` 字段值
  2. 如果业务上确实不允许，则是配置问题而非代码问题
  3. 如果业务上应该允许，需修改活动配置

---

### BUG 6: 活动盈亏出现已下架活动数据
**问题描述**: 活动盈亏里面出现了以前已经下架了的数据，应该按照现在活动表存在的活动来统计。

**根因分析**:
- `DashboardActivityProfitLoss` 函数 (`internal/api/admin/dashboard_activity.go:58-75`)
- 当前查询直接从 `activities` 表获取活动列表
- 支持按 `status` 过滤（1进行中 2下线）
- **问题**: 虽然支持状态过滤，但默认不过滤任何状态
- 另外活动表使用了软删除 (`deleted_at`)，但需确认是否正确应用了软删除条件

## 需求理解

| BUG编号 | 问题类型 | 修复难度 | 涉及文件 |
|---------|----------|----------|----------|
| BUG 1 | 业务逻辑 | 中 | `service/task_center/service.go` |
| BUG 2 | 业务逻辑 | 低 | `service/task_center/service.go` |
| BUG 3 | 数据过滤 | 低 | `api/admin/dashboard_activity.go` |
| BUG 4 | 字段缺失 | 低 | `api/admin/dashboard_activity.go` |
| BUG 5 | 配置问题 | 低 | 需检查数据库配置 |
| BUG 6 | 数据过滤 | 低 | `api/admin/dashboard_activity.go` |

## 待确认问题

1. **BUG 1**: 任务配置时，`task_center_task_tiers.activity_id` 字段是否正确设置？
2. **BUG 3**: 退款时订单状态是否正确更新为4？
3. **BUG 5**: 一番赏活动的 `allow_coupons` 数据库字段当前值是什么？是配置问题还是需要代码修复？
4. **BUG 6**: 是否需要默认只显示在线活动（status=1）？还是只过滤软删除的活动？
