92 lines
3.1 KiB
Markdown
92 lines
3.1 KiB
Markdown
|
|
# 项目归档后端实施记录
|
||
|
|
|
||
|
|
## 本次改动概述
|
||
|
|
|
||
|
|
本次后端实施围绕“项目归档”和“归档后禁止继续写入”两条主线展开:
|
||
|
|
|
||
|
|
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`
|
||
|
|
- 保存单模型参数
|
||
|
|
- 保存全部参数
|
||
|
|
|
||
|
|
拦截文案分别为:
|
||
|
|
|
||
|
|
- `已归档项目暂不允许上传或拉取数据`
|
||
|
|
- `已归档项目暂不允许修改参数`
|
||
|
|
|
||
|
|
## 为什么这样实现
|
||
|
|
|
||
|
|
### 为什么新增专用归档接口
|
||
|
|
|
||
|
|
归档是独立业务动作,不适合混入“更新项目”接口,否则前端和后端都会失去明确语义,后续状态校验也会分散。
|
||
|
|
|
||
|
|
### 为什么把归档保护放到服务层
|
||
|
|
|
||
|
|
这次用户要求的是“归档后上传数据和参数配置不可操作”。如果只锁页面页签,依然可能通过接口直调写入数据,因此必须在服务层统一加一层归档态校验,前后端限制才真正一致。
|
||
|
|
|
||
|
|
## 结果
|
||
|
|
|
||
|
|
本次后端实施后,项目归档链路已经具备完整闭环:
|
||
|
|
|
||
|
|
- 列表页可真实归档
|
||
|
|
- 非法状态无法归档
|
||
|
|
- 已归档项目无法再上传或拉取数据
|
||
|
|
- 已归档项目无法再修改参数
|