# 流程列表项目删除与恢复后端实施计划

## 目标

在项目管理后端将删除改为业务逻辑删除，只更新 `ccdi_project` 主表状态与删除标记，不删除项目内上传记录、流水、标签结果、证据等关联数据。管理员范围按 `admin` 与 `manager` 执行，普通用户仅允许删除本人创建项目。

## 实施内容

1. 项目状态新增 `5-已删除`，同步常量、实体注释、状态统计 VO、状态文案、初始化 SQL 与迁移 SQL。
2. 项目删除接口保留原路径，入口权限允许拥有项目列表访问的用户进入，业务权限由 `CcdiProjectAccessService` 判断：`admin/manager` 可删除全部，普通用户仅可删除本人创建项目。
3. 删除实现改为 Mapper 专用更新语句，仅设置 `status='5'`、`del_flag='2'`、`update_by`、`update_time`，不调用 MyBatis Plus `deleteById`，不操作关联表。
4. 新增恢复接口 `POST /ccdi/project/{projectId}/restore`，仅 `admin/manager` 可恢复 `status='5' AND del_flag='2'` 的项目，恢复为 `status='1'`、`del_flag='0'`、`is_archived=0`。
5. 列表查询增加 `includeDeleted`：默认只查 `del_flag='0'` 且排除 `status='5'`；仅管理员查询已删除列表时查 `del_flag='2' AND status='5'`。
6. 状态统计增加 `status5`，仅管理员返回已删除数量，普通用户返回 0。
7. 详情、操作、归档、打标状态流转等链路对已删除项目按不可读或不可操作处理，异步状态更新不得覆盖已删除状态。

## 验证范围

后端定向测试覆盖删除只更新项目主表、恢复到已完成、普通入口可进入业务删除校验、默认列表与已删除列表条件、状态字典与迁移 SQL、已删除状态不可被异步打标状态覆盖。
