实现项目归档功能

This commit is contained in:
wkc
2026-03-24 21:45:55 +08:00
parent bb49d78a3a
commit 294164a504
23 changed files with 680 additions and 87 deletions

View File

@@ -14,6 +14,7 @@ import com.ruoyi.ccdi.project.service.ICcdiProjectService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import com.ruoyi.common.utils.SecurityUtils;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@@ -53,6 +54,17 @@ public class CcdiProjectController extends BaseController {
return AjaxResult.success("项目更新成功", vo);
}
/**
* 归档项目
*/
@PostMapping("/{projectId}/archive")
@Operation(summary = "归档项目")
@PreAuthorize("@ss.hasPermi('ccdi:project:edit')")
public AjaxResult archiveProject(@PathVariable Long projectId) {
projectService.archiveProject(projectId, SecurityUtils.getUsername());
return AjaxResult.success("项目归档成功");
}
/**
* 删除项目
*/

View File

@@ -60,6 +60,14 @@ public interface ICcdiProjectService {
*/
CcdiProjectStatusCountsVO getStatusCounts();
/**
* 归档项目
*
* @param projectId 项目ID
* @param operator 操作人
*/
void archiveProject(Long projectId, String operator);
/**
* 更新项目状态
*
@@ -76,6 +84,14 @@ public interface ICcdiProjectService {
*/
void ensureProjectCanStartTagging(Long projectId);
/**
* 校验项目是否未归档
*
* @param projectId 项目ID
* @param message 拒绝文案
*/
void ensureProjectNotArchived(Long projectId, String message);
/**
* 校验项目是否允许写入
*

View File

@@ -169,6 +169,7 @@ public class CcdiFileUploadServiceImpl implements ICcdiFileUploadService {
throw new IllegalArgumentException("开始日期不能晚于结束日期");
}
projectService.ensureProjectNotArchived(projectId, "已归档项目暂不允许上传或拉取数据");
projectService.ensureProjectWritable(projectId, "当前项目正在进行银行流水打标,暂不允许上传或拉取数据");
CcdiProject project = projectMapper.selectById(projectId);
@@ -323,6 +324,7 @@ public class CcdiFileUploadServiceImpl implements ICcdiFileUploadService {
log.info("【文件上传】开始批量上传: projectId={}, 文件数量={}, username={}",
projectId, files.length, username);
projectService.ensureProjectNotArchived(projectId, "已归档项目暂不允许上传或拉取数据");
projectService.ensureProjectWritable(projectId, "当前项目正在进行银行流水打标,暂不允许上传或拉取数据");
// 1. 生成批次ID

View File

@@ -111,6 +111,7 @@ public class CcdiModelParamServiceImpl implements ICcdiModelParamService {
Long projectId = saveDTO.getProjectId();
if (projectId > 0) {
projectService.ensureProjectNotArchived(projectId, "已归档项目暂不允许修改参数");
projectService.ensureProjectWritable(projectId, "当前项目正在进行银行流水打标,暂不允许修改参数");
switchToCustomConfigIfNeeded(getRequiredProject(projectId));
}
@@ -192,6 +193,7 @@ public class CcdiModelParamServiceImpl implements ICcdiModelParamService {
Long projectId = saveAllDTO.getProjectId();
if (projectId > 0) {
projectService.ensureProjectNotArchived(projectId, "已归档项目暂不允许修改参数");
projectService.ensureProjectWritable(projectId, "当前项目正在进行银行流水打标,暂不允许修改参数");
switchToCustomConfigIfNeeded(getRequiredProject(projectId));
}

View File

@@ -152,6 +152,26 @@ public class CcdiProjectServiceImpl implements ICcdiProjectService {
return vo;
}
@Override
public void archiveProject(Long projectId, String operator) {
CcdiProject project = getRequiredProject(projectId);
if (CcdiProjectStatusConstants.ARCHIVED.equals(project.getStatus())) {
throw new ServiceException("项目已归档,无需重复操作");
}
if (!CcdiProjectStatusConstants.COMPLETED.equals(project.getStatus())) {
throw new ServiceException("仅已完成项目允许归档");
}
project.setStatus(CcdiProjectStatusConstants.ARCHIVED);
project.setIsArchived(1);
project.setUpdateBy(operator);
project.setUpdateTime(new Date());
projectMapper.updateById(project);
log.info("【项目】项目状态变更: projectId={}, projectName={}, oldStatus={}, oldStatusLabel={}, newStatus={}, newStatusLabel={}, operator={}",
project.getProjectId(), project.getProjectName(), CcdiProjectStatusConstants.COMPLETED,
resolveStatusLabel(CcdiProjectStatusConstants.COMPLETED), CcdiProjectStatusConstants.ARCHIVED,
resolveStatusLabel(CcdiProjectStatusConstants.ARCHIVED), resolveOperator(operator));
}
@Override
public void updateProjectStatus(Long projectId, String status, String operator) {
CcdiProject project = getRequiredProject(projectId);
@@ -179,6 +199,14 @@ public class CcdiProjectServiceImpl implements ICcdiProjectService {
}
}
@Override
public void ensureProjectNotArchived(Long projectId, String message) {
CcdiProject project = getRequiredProject(projectId);
if (CcdiProjectStatusConstants.ARCHIVED.equals(project.getStatus())) {
throw new ServiceException(message);
}
}
@Override
public void ensureProjectWritable(Long projectId, String message) {
CcdiProject project = getRequiredProject(projectId);