# 项目打标失败状态后端实施计划

## 保存路径确认

- 后端计划：`docs/plans/backend/2026-05-27-project-tag-failed-status-backend-implementation.md`
- 实施记录：`docs/reports/implementation/2026-05-27-project-tag-failed-status-implementation.md`

## 目标

新增正式项目状态 `4-打标失败`，打标任务失败后项目状态停留在失败态；项目详情接口在失败态下返回最近失败任务错误信息，列表接口不返回完整错误。

## 实施步骤

1. 扩展项目状态常量、实体注释、状态文案和状态统计 VO，新增 `TAG_FAILED = "4"` 与 `status4`。
2. 修改打标失败流转：`CcdiBankTagServiceImpl.rebuildProject` 捕获异常后保留任务失败信息，并将项目状态更新为 `4`。
3. 新增 `CcdiBankTagTaskMapper.selectLatestFailedTaskByProjectId`，按 `id desc limit 1` 查询项目最近失败任务。
4. 扩展 `CcdiProjectVO`，只新增 `latestTagTaskErrorMessage`、`latestTagTaskEndTime`；`getProjectById` 仅在状态为 `4` 时组装失败任务信息。
5. 补充 SQL 初始化与迁移脚本，新增 `ccdi_project_status` 字典值 `4-打标失败`，并回填未归档且最新打标任务失败的 `0/3` 项目。
6. 补充后端单测覆盖失败状态流转、详情失败信息、`status4` 统计、`4` 状态可写和 SQL/Mapper 契约。

## 验证

- 执行本次相关后端测试类。
- 执行 `mvn -pl ccdi-project -am test` 观察全量状态并记录非本次问题。
