refactor: 重构企业文件验证和移动逻辑 fix: 修复企业合规验证逻辑及路径处理问题 docs: 添加VerifyContext工具类及相关文档 style: 优化代码格式及注释
123 lines
4.3 KiB
Java
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;
|
|
}
|
|
}
|
|
} |