diff --git a/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiFileUploadServiceImpl.java b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiFileUploadServiceImpl.java new file mode 100644 index 0000000..5155fe5 --- /dev/null +++ b/ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiFileUploadServiceImpl.java @@ -0,0 +1,104 @@ +package com.ruoyi.ccdi.project.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.ruoyi.ccdi.project.domain.dto.CcdiFileUploadQueryDTO; +import com.ruoyi.ccdi.project.domain.entity.CcdiFileUploadRecord; +import com.ruoyi.ccdi.project.domain.vo.CcdiFileUploadStatisticsVO; +import com.ruoyi.ccdi.project.mapper.CcdiFileUploadRecordMapper; +import com.ruoyi.ccdi.project.service.ICcdiFileUploadService; +import jakarta.annotation.Resource; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; +import org.springframework.util.StringUtils; +import org.springframework.web.multipart.MultipartFile; + +import java.util.List; +import java.util.Map; + +/** + * 文件上传服务实现 + * + * @author ruoyi + * @date 2026-03-05 + */ +@Slf4j +@Service +public class CcdiFileUploadServiceImpl implements ICcdiFileUploadService { + + @Resource + private CcdiFileUploadRecordMapper recordMapper; + + @Override + public Page selectPage(Page page, + CcdiFileUploadQueryDTO queryDTO) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + + // 项目ID + if (queryDTO.getProjectId() != null) { + queryWrapper.eq(CcdiFileUploadRecord::getProjectId, queryDTO.getProjectId()); + } + + // 文件状态 + if (StringUtils.hasText(queryDTO.getFileStatus())) { + queryWrapper.eq(CcdiFileUploadRecord::getFileStatus, queryDTO.getFileStatus()); + } + + // 文件名称(模糊查询) + if (StringUtils.hasText(queryDTO.getFileName())) { + queryWrapper.like(CcdiFileUploadRecord::getFileName, queryDTO.getFileName()); + } + + // 上传人 + if (StringUtils.hasText(queryDTO.getUploadUser())) { + queryWrapper.eq(CcdiFileUploadRecord::getUploadUser, queryDTO.getUploadUser()); + } + + // 按上传时间倒序 + queryWrapper.orderByDesc(CcdiFileUploadRecord::getUploadTime); + + return recordMapper.selectPage(page, queryWrapper); + } + + @Override + public CcdiFileUploadStatisticsVO countByStatus(Long projectId) { + // 查询统计数据 + List> statusCounts = recordMapper.countByStatus(projectId); + + // 组装 VO + CcdiFileUploadStatisticsVO vo = new CcdiFileUploadStatisticsVO(); + vo.setUploading(0L); + vo.setParsing(0L); + vo.setParsedSuccess(0L); + vo.setParsedFailed(0L); + + long total = 0L; + for (Map item : statusCounts) { + String status = (String) item.get("status"); + Long count = ((Number) item.get("count")).longValue(); + total += count; + + switch (status) { + case "uploading" -> vo.setUploading(count); + case "parsing" -> vo.setParsing(count); + case "parsed_success" -> vo.setParsedSuccess(count); + case "parsed_failed" -> vo.setParsedFailed(count); + } + } + + vo.setTotal(total); + return vo; + } + + @Override + public CcdiFileUploadRecord getById(Long id) { + return recordMapper.selectById(id); + } + + // batchUploadFiles 方法将在下一步实现 + @Override + public String batchUploadFiles(Long projectId, MultipartFile[] files, String username) { + // TODO: 将在下一步实现 + throw new UnsupportedOperationException("Method not implemented yet"); + } +}