Files
ccdi/docs/reports/implementation/2026-03-24-project-archive-backend-record.md
2026-03-24 21:45:55 +08:00

3.1 KiB

项目归档后端实施记录

本次改动概述

本次后端实施围绕“项目归档”和“归档后禁止继续写入”两条主线展开:

  1. 在项目管理控制器中新增归档接口
  2. 在项目服务中新增归档动作与归档态校验
  3. 将“已归档不可写”保护下沉到上传数据与参数保存服务入口

改动文件

  • ccdi-project/src/main/java/com/ruoyi/ccdi/project/controller/CcdiProjectController.java
  • ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/ICcdiProjectService.java
  • ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectServiceImpl.java
  • ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiFileUploadServiceImpl.java
  • ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiModelParamServiceImpl.java
  • ccdi-project/src/test/java/com/ruoyi/ccdi/project/controller/CcdiProjectControllerTest.java
  • ccdi-project/src/test/java/com/ruoyi/ccdi/project/controller/CcdiProjectControllerContractTest.java
  • ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectServiceImplTest.java
  • ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiFileUploadServiceImplTest.java
  • ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiModelParamServiceImplTest.java

实现说明

1. 新增项目归档接口

新增接口:

  • POST /ccdi/project/{projectId}/archive

控制器仅负责:

  • 读取 projectId
  • 获取当前登录用户名
  • 调用项目服务归档动作
  • 返回“项目归档成功”

2. 项目服务新增归档动作

CcdiProjectServiceImpl 中新增:

  • archiveProject(Long projectId, String operator)
  • ensureProjectNotArchived(Long projectId, String message)

归档动作规则:

  • 仅允许 status = 1 的已完成项目归档
  • 若项目已归档,直接拒绝重复归档
  • 归档成功后写入:
    • status = 2
    • isArchived = 1
    • updateBy
    • updateTime

3. 补齐归档态后端写保护

本次不仅做了前端入口限制,还把后端入口一起封住,避免通过绕过页面直接调用接口继续写入。

新增归档校验已接入:

  • CcdiFileUploadServiceImpl
    • 拉取本行信息
    • 批量上传文件
  • CcdiModelParamServiceImpl
    • 保存单模型参数
    • 保存全部参数

拦截文案分别为:

  • 已归档项目暂不允许上传或拉取数据
  • 已归档项目暂不允许修改参数

为什么这样实现

为什么新增专用归档接口

归档是独立业务动作,不适合混入“更新项目”接口,否则前端和后端都会失去明确语义,后续状态校验也会分散。

为什么把归档保护放到服务层

这次用户要求的是“归档后上传数据和参数配置不可操作”。如果只锁页面页签,依然可能通过接口直调写入数据,因此必须在服务层统一加一层归档态校验,前后端限制才真正一致。

结果

本次后端实施后,项目归档链路已经具备完整闭环:

  • 列表页可真实归档
  • 非法状态无法归档
  • 已归档项目无法再上传或拉取数据
  • 已归档项目无法再修改参数