# /mp/banner/active 响应顶层新增 seasons 字段

**日期**: 2026-04-20
**PR**: #1003
**服务**: hl-user-service

## 改动
`BannerVO` 顶层新增 `seasons: List<String>`：
- banner 绑定产品（linkType=PRODUCT）→ 继承 `product.seasons`
- banner 绑定产品线（linkType=PRODUCT_LINE）→ 继承 `product_line.seasons`
- 其他绑定类型（URL/PAGE/NONE/...）或目标被删 → `seasons=null`

## 响应示例
```json
{
  "id": "...",
  "title": "2026 草原夏令营",
  "linkType": "PRODUCT",
  "linkId": "2044306857534636034",
  "seasons": ["summer", "winter"],          // 新增：顶层
  "linkTarget": {
    "type": "PRODUCT",
    "name": "...",
    "seasons": ["summer", "winter"]         // 原已存在：嵌套
  }
}
```

## 前端建议
- **推荐**：直接读 `banner.seasons`（顶层），便于按季节筛选
- 如需更多目标信息（name/coverImageUrl）继续从 `banner.linkTarget` 取

## 存量数据
**纯运行时继承**，不存 DB。banner 表无 seasons 列。每次请求根据 linkType/linkId 即时从产品/产品线 seasons 回填。

## 缓存
Redis `banner:active:list:v3`（TTL 5 分钟）。之前版本 `v2` 被 bump 抛弃，确保旧 VO 结构不回吐。管理端新增/修改/删除 banner 时异步清缓存。

## 验证（测试环境）
```
banner 1: linkType=PRODUCT     seasons=["summer","winter"]
banner 2: linkType=PRODUCT_LINE seasons=["summer"]
```
