## MODIFIED Requirements

### Requirement: 按优先级顺序返回所有匹配配置（多匹配 + interval 过滤）

原描述：
> `MatchConfig(card)`：按优先级顺序返回第一个匹配的配置

修改为：

`MatchConfigs(card) []*model.PollingConfig` 按 priority ASC 遍历所有启用的配置，返回**所有满足匹配条件且至少有一个非 NULL interval**的配置。无匹配时返回空切片。

`matchConfigConditions(config, card)` 判断卡是否满足配置条件时，**额外过滤**所有 polling interval 均为 NULL 的配置（`RealnameCheckInterval`、`CarddataCheckInterval`、`PackageCheckInterval`、`ProtectCheckInterval`、`CardStatusCheckInterval` 均无有效值）。

#### Scenario: 多配置同时匹配一张卡
- **GIVEN** 配置 A (priority=5, card_condition="", card_status_check_interval=600, protect_check_interval=nil) 和配置 B (priority=10, card_condition="suspended", card_status_check_interval=nil, package_check_interval=60) 均处于启用状态
- **WHEN** 调用 `MatchConfigs(card)`，其中 card.network_status=0（suspended）
- **THEN** 返回 [配置 A, 配置 B]，按 priority ASC 排序；配置 B 的 `package_check_interval=60` 来自配置 A 不覆盖的 task type

#### Scenario: 所有 interval 均为 NULL 的配置被过滤
- **GIVEN** 配置 C (priority=1, card_condition="", 所有 interval 全为 NULL) 和配置 D (priority=25, card_condition="suspended", card_status_check_interval=600) 均处于启用状态
- **WHEN** 调用 `MatchConfigs(card)` 对任意卡
- **THEN** 返回结果**不包含**配置 C（因为没有任何有效 interval）；配置 D 正常返回

#### Scenario: 无任何配置匹配
- **GIVEN** 没有任何启用的配置，或所有配置的条件都不满足卡属性
- **WHEN** 调用 `MatchConfigs(card)`
- **THEN** 返回空切片 `[]`

### Requirement: 多配置 Interval 合并选取

新增 `MergedTaskIntervals(card) map[string]TaskTypeInterval` 方法。

对 `MatchConfigs(card)` 返回的所有配置，按 priority ASC 遍历，对每种 task type（realname、carddata、package、protect、card_status）选取**最高优先级（priority 数值最小）的那个 config 的 interval**。

#### Scenario: 相同 task type 不同 interval 按优先级选取
- **GIVEN** 配置 A (priority=5, card_status_check_interval=300) 和配置 B (priority=10, card_status_check_interval=600) 同时匹配某张停机卡
- **WHEN** 调用 `MergedTaskIntervals(card)`
- **THEN** 结果中 `card_status` 的 interval 为 300（来自 priority=5 的配置 A）

#### Scenario: 不同 task type 来自不同配置
- **GIVEN** 配置 A (priority=5, card_status_check_interval=300, package_check_interval=nil) 和配置 B (priority=10, card_status_check_interval=nil, package_check_interval=60) 同时匹配某张停机卡
- **WHEN** 调用 `MergedTaskIntervals(card)`
- **THEN** 结果中 `card_status` interval=300（来自配置 A），`package` interval=60（来自配置 B）
