## ADDED Requirements ### Requirement: 退款后处理状态展示 退款列表与退款详情 SHALL 展示资产后处理状态 `asset_post_status`(0 未开始、1 待重试、2 已完成、3 需人工处理),列表用标签展示,"需人工处理"用警示色。详情 SHALL 另外展示已尝试次数 `asset_post_attempts`(注明自动重试上限 10 次)、最后一次错误 `asset_post_last_error`、下次自动重试时间 `asset_post_next_at`(仅待重试时有值)。字段缺失时显示"-",不影响现有展示。 #### Scenario: 待重试 - **WHEN** 一笔退款 `asset_post_status = 1`、已尝试 3 次、下次重试时间为 10:30 - **THEN** 详情显示"待重试"、已尝试 3/10 次、最后错误与下次重试时间 10:30 ### Requirement: 按后处理状态筛选 退款列表 SHALL 增加"资产后处理状态"筛选项,选中后请求带 `asset_post_status`;清空时不传该参数。 #### Scenario: 筛选需人工处理 - **WHEN** 运营选择"需人工处理"并查询 - **THEN** 请求带 `asset_post_status = 3`,列表只显示需人工处理的退款单 ### Requirement: 人工重试后处理 退款单 `asset_post_status = 3` 且当前账号为平台账号或超级管理员、并有人工重试按钮权限时,退款列表操作列与详情页 SHALL 显示"人工重试"按钮;其他状态或账号类型 MUST NOT 显示。点击后 SHALL 二次确认,提示"重试会重新执行退款后的资产处理(可能包括停机),确认继续?"。调用 `POST /api/admin/refunds/{id}/asset-post-processing/retry`,提交中 MUST 防重复。成功时 SHALL 用返回的最新退款详情刷新当前行或详情;失败时 SHALL 显示后端错误信息(如"资产后处理仍未完成:…"),并重新加载该退款单以展示最新尝试次数与错误。 #### Scenario: 重试成功 - **WHEN** 运营对需人工处理的退款单点击"人工重试"并确认,后端返回成功 - **THEN** 页面提示重试成功,该退款单后处理状态显示"已完成",按钮消失 #### Scenario: 重试仍失败 - **WHEN** 后端返回"资产后处理仍未完成:停机失败" - **THEN** 页面显示该错误,重新加载后仍显示"需人工处理"和最新错误 #### Scenario: 非需人工处理 - **WHEN** 退款单后处理状态为"待重试" - **THEN** 不显示"人工重试"按钮 ### Requirement: 后处理尝试记录查询 系统 SHALL 提供"退款后处理尝试记录"列表页,调用 `GET /api/admin/refund-post-process-attempts`,仅平台账号与超级管理员可用。筛选条件:时间范围(必填,跨度不超过 31 天)、退款单 ID 或单号、资产标识、处理步骤 `step`、结果 `result`、错误码、触发方式 `trigger`(自动 / 人工)。列表 SHALL 展示记录时间、退款单号、资产类型与 ICCID、第几次尝试、步骤、结果、错误码与错误信息、触发方式、耗时;步骤、结果、触发方式显示中文名称。退款详情 SHALL 提供"后处理尝试记录"入口,打开该列表并自动带上退款单 ID。 #### Scenario: 从退款详情查看 - **WHEN** 运营在退款详情点击"后处理尝试记录" - **THEN** 打开尝试记录列表,已按该退款单 ID 筛选,时间范围为最近 31 天 #### Scenario: 时间范围必填 - **WHEN** 运营清空时间范围后查询 - **THEN** 页面提示请选择时间范围,不发请求