Files
contract-manager/client/src/main/java/com/ecep/contract/task/CompanyFileMoveTasker.java
songqq 510952d72e feat: 添加企业文件管理功能及相关任务类
refactor: 重构企业文件验证和移动逻辑

fix: 修复企业合规验证逻辑及路径处理问题

docs: 添加VerifyContext工具类及相关文档

style: 优化代码格式及注释
2025-09-26 19:40:34 +08:00

123 lines
4.3 KiB
Java

package com.ecep.contract.task;
import java.io.File;
import org.springframework.util.StringUtils;
import com.ecep.contract.MessageHolder;
import com.ecep.contract.service.CompanyFileService;
import com.ecep.contract.service.CompanyService;
import com.ecep.contract.vo.CompanyFileVo;
import com.ecep.contract.vo.CompanyVo;
import lombok.Getter;
import lombok.Setter;
/**
* 公司文件移动任务类
* 用于将文件从老系统中移动到指定的企业目录中
*/
public class CompanyFileMoveTasker extends Tasker<Boolean> {
@Getter
@Setter
private CompanyVo company;
@Getter
private boolean filesMoved = false;
@Override
protected Boolean execute(MessageHolder holder) throws Exception {
updateTitle("移动公司文件");
updateProgress(0, 100);
if (company == null) {
holder.error("公司对象为空");
updateProgress(100, 100);
return false;
}
try {
holder.info("开始移动公司文件:" + company.getName());
updateProgress(10, 100);
// 获取CompanyFileService
CompanyFileService companyFileService = getCachedBean(CompanyFileService.class);
CompanyService companyService = getCachedBean(CompanyService.class);
// 获取公司的所有文件
holder.info("获取公司文件列表...");
java.util.List<CompanyFileVo> list = companyFileService.findByCompany(company);
updateProgress(20, 100);
if (list.isEmpty()) {
holder.info("该公司没有文件需要移动");
updateProgress(100, 100);
return false;
}
holder.info("共有" + list.size() + "个文件需要处理");
// 确保公司目录存在
holder.info("检查并创建公司目录...");
if (companyService.makePathAbsent(company, holder)) {
company = companyService.save(company);
holder.info("公司目录已创建");
}
updateProgress(30, 100);
// 检查公司路径
String path = company.getPath();
if (!StringUtils.hasText(path)) {
holder.error("异常, 企业目录未设置");
updateProgress(100, 100);
return false;
}
File companyPath = new File(path);
int movedCount = 0;
int totalFiles = list.size();
// 逐个处理文件
for (int i = 0; i < list.size(); i++) {
CompanyFileVo companyFile = list.get(i);
String filePath = companyFile.getFilePath();
// 更新进度
updateProgress(30 + (i * 70) / totalFiles, 100);
if (StringUtils.hasText(filePath)) {
File file = new File(filePath);
if (file.exists()) {
if (file.getParentFile().equals(companyPath)) {
holder.info("文件已在目标位置:" + file.getName());
continue;
}
File dest = new File(companyPath, file.getName());
holder.info("移动文件:" + file.getName() + " -> " + companyPath.getName());
if (file.renameTo(dest)) {
companyFile.setFilePath(dest.getAbsolutePath());
companyFileService.save(companyFile);
holder.info("文件移动成功:" + file.getName());
movedCount++;
filesMoved = true;
} else {
holder.warn("文件移动失败:" + file.getName());
}
} else {
holder.warn("文件不存在:" + filePath);
}
}
}
holder.info("文件移动完成,成功移动" + movedCount + "个文件");
updateProgress(100, 100);
return filesMoved;
} catch (Exception e) {
holder.error("文件移动过程中发生错误:" + e.getMessage());
updateProgress(100, 100);
throw e;
}
}
}