Commit 37b2faef authored by huyuchen's avatar huyuchen

huych-电子档案批量导入第四次提交

parent bd54c0d1
...@@ -61,13 +61,19 @@ public class TAttaInfo extends BaseEntity { ...@@ -61,13 +61,19 @@ public class TAttaInfo extends BaseEntity {
@Length(max = 20, message = "关系类型不能超过20个字符") @Length(max = 20, message = "关系类型不能超过20个字符")
@Schema(description = "关系类型 1 任务表附件 2 zip附件 3反馈表附件 4人员文件") @Schema(description = "关系类型 1 任务表附件 2 zip附件 3反馈表附件 4人员文件")
private String relationType; private String relationType;
/** /**
* 实体id和关系类型共同确定附件所属 * 实体id和关系类型共同确定附件所属
*/ */
@NotBlank(message = "实体id和关系类型共同确定附件所属不能为空") @NotBlank(message = "实体id和关系类型共同确定附件所属不能为空")
@Length(max = 32, message = "实体id和关系类型共同确定附件所属不能超过32个字符") @Length(max = 32, message = "实体id和关系类型共同确定附件所属不能超过32个字符")
@Schema(description = "实体id和关系类型共同确定附件所属") @Schema(description = "实体id和关系类型共同确定附件所属")
private String domainId; private String domainId;
/**
* 任务ID,用于区分同一个domainId下不同任务的附件
*/
@Length(max = 32, message = "任务ID不能超过32个字符")
@Schema(description = "任务ID,用于区分同一个domainId下不同任务的附件")
private String taskId;
/** /**
* 状态 0可用 1不可用 * 状态 0可用 1不可用
*/ */
......
...@@ -149,7 +149,7 @@ public class FileUploadController { ...@@ -149,7 +149,7 @@ public class FileUploadController {
if (Common.isEmpty(attas)) { if (Common.isEmpty(attas)) {
return new R<>(attas); return new R<>(attas);
} }
for (TAttaInfo atta:attas){ for (TAttaInfo atta:attas){
URL url = ossUtil.getObjectUrl("yf-hr-efile-source", atta.getAttaSrc()); URL url = ossUtil.getObjectUrl("yf-hr-efile-source", atta.getAttaSrc());
atta.setAttaUrl(url.toString().replace("http","https")); atta.setAttaUrl(url.toString().replace("http","https"));
} }
...@@ -218,6 +218,7 @@ public class FileUploadController { ...@@ -218,6 +218,7 @@ public class FileUploadController {
attaInfo.setRelationType(type); attaInfo.setRelationType(type);
attaInfo.setDomainId(CommonConstants.ZERO_STRING); // 临时设置为"0",后续更新 attaInfo.setDomainId(CommonConstants.ZERO_STRING); // 临时设置为"0",后续更新
attaInfo.setTaskId(CommonConstants.ZERO_STRING);// 临时设置为"0",后续更新
attaInfo.setStatus(CommonConstants.ZERO_STRING); // 0可用 attaInfo.setStatus(CommonConstants.ZERO_STRING); // 0可用
// 保存附件信息到数据库 // 保存附件信息到数据库
......
...@@ -20,8 +20,12 @@ public interface FileUploadService { ...@@ -20,8 +20,12 @@ public interface FileUploadService {
R<TAttaInfo> uploadFileReturnAtta(MultipartFile file, String filePath, String type, String domainId) throws IOException; R<TAttaInfo> uploadFileReturnAtta(MultipartFile file, String filePath, String type, String domainId) throws IOException;
R<TAttaInfo> uploadFileReturnAtta(MultipartFile file, String filePath, String type, String domainId, String taskId) throws IOException;
R<T> uploadAsso(MultipartFile file, String filePath, String type, String domain, String uploadType); R<T> uploadAsso(MultipartFile file, String filePath, String type, String domain, String uploadType);
R<T> uploadAsso(MultipartFile file, String filePath, String type, String domain, String uploadType, String taskId);
/** /**
* 检查文件是否存在 * 检查文件是否存在
* *
......
...@@ -291,6 +291,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -291,6 +291,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
attaInfo.setAttaName(fileName); attaInfo.setAttaName(fileName);
attaInfo.setRelationType(ArchiveConstants.ATTA_RELATION_TYPE_TASK); attaInfo.setRelationType(ArchiveConstants.ATTA_RELATION_TYPE_TASK);
attaInfo.setDomainId(taskId); attaInfo.setDomainId(taskId);
attaInfo.setTaskId(taskId);
attaInfo.setAttaSrc(filePath); attaInfo.setAttaSrc(filePath);
attaInfo.setAttaType(fileName.substring(fileName.lastIndexOf('.'))); attaInfo.setAttaType(fileName.substring(fileName.lastIndexOf('.')));
attaInfo.setStatus(ArchiveConstants.ATTA_STATUS_ENABLED); attaInfo.setStatus(ArchiveConstants.ATTA_STATUS_ENABLED);
...@@ -441,6 +442,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -441,6 +442,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
zipAtta.setAttaSize(fileSize); zipAtta.setAttaSize(fileSize);
zipAtta.setRelationType(ArchiveConstants.ATTA_RELATION_TYPE_ZIP); zipAtta.setRelationType(ArchiveConstants.ATTA_RELATION_TYPE_ZIP);
zipAtta.setDomainId(taskId); zipAtta.setDomainId(taskId);
zipAtta.setTaskId(taskId);
zipAtta.setStatus(ArchiveConstants.ATTA_STATUS_DISABLED); zipAtta.setStatus(ArchiveConstants.ATTA_STATUS_DISABLED);
zipAtta.setAttaSrc(tempZipFile.getAbsolutePath()); // 临时存储文件路径 zipAtta.setAttaSrc(tempZipFile.getAbsolutePath()); // 临时存储文件路径
attaInfoService.save(zipAtta); attaInfoService.save(zipAtta);
...@@ -724,10 +726,10 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -724,10 +726,10 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
continue; continue;
} }
// 递归处理资料类型目录下的所有文件(包括子目录) // 递归处理资料类型目录下的所有文件(包括子目录)
processDirectoryRecursively(subFile, detail, materialType, feedbackList, materialTypes); processDirectoryRecursively(subFile, detail, materialType, feedbackList, materialTypes, taskId);
} else { } else {
// 直接是文件,默认为存量类型 // 直接是文件,默认为存量类型
processFile(subFile, detail, ArchiveConstants.MATERIAL_TYPE_STOCK, feedbackList, materialTypes); processFile(subFile, detail, ArchiveConstants.MATERIAL_TYPE_STOCK, feedbackList, materialTypes, taskId);
} }
} }
...@@ -742,7 +744,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -742,7 +744,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
*/ */
private void processDirectoryRecursively(File directory, TElectronicArchiveDetail detail, private void processDirectoryRecursively(File directory, TElectronicArchiveDetail detail,
String materialType, List<ArchiveFeedbackVO> feedbackList, String materialType, List<ArchiveFeedbackVO> feedbackList,
Set<String> materialTypes) { Set<String> materialTypes, String taskId) {
File[] files = directory.listFiles(); File[] files = directory.listFiles();
if (files == null || files.length == 0) { if (files == null || files.length == 0) {
// 文件夹为空 // 文件夹为空
...@@ -756,10 +758,10 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -756,10 +758,10 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
for (File file : files) { for (File file : files) {
if (file.isDirectory()) { if (file.isDirectory()) {
// 如果是子目录,递归处理 // 如果是子目录,递归处理
processDirectoryRecursively(file, detail, materialType, feedbackList, materialTypes); processDirectoryRecursively(file, detail, materialType, feedbackList, materialTypes, taskId);
} else if (file.isFile()) { } else if (file.isFile()) {
// 如果是文件,上传到阿里云并生成TAttaInfo记录 // 如果是文件,上传到阿里云并生成TAttaInfo记录
processFile(file, detail, materialType, feedbackList, materialTypes); processFile(file, detail, materialType, feedbackList, materialTypes, taskId);
} }
} }
} }
...@@ -768,7 +770,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -768,7 +770,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
* 处理单个文件(上传到阿里云OSS,每个文件生成一条TAttaInfo记录) * 处理单个文件(上传到阿里云OSS,每个文件生成一条TAttaInfo记录)
*/ */
private void processFile(File file, TElectronicArchiveDetail detail, String materialType, private void processFile(File file, TElectronicArchiveDetail detail, String materialType,
List<ArchiveFeedbackVO> feedbackList, Set<String> materialTypes) { List<ArchiveFeedbackVO> feedbackList, Set<String> materialTypes, String taskId) {
String fileName = file.getName(); String fileName = file.getName();
// 2. 校验文件格式 // 2. 校验文件格式
...@@ -795,11 +797,13 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -795,11 +797,13 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
// 上传文件,uploadFileReturnAtta会自动生成TAttaInfo记录 // 上传文件,uploadFileReturnAtta会自动生成TAttaInfo记录
// domainId为电子档案详情表的id(detail.getId()) // domainId为电子档案详情表的id(detail.getId())
// taskId为任务表的id,用于区分同一个domainId下不同任务的附件
R<TAttaInfo> uploadResult = fileUploadService.uploadFileReturnAtta( R<TAttaInfo> uploadResult = fileUploadService.uploadFileReturnAtta(
multipartFile, multipartFile,
ossDirectory, ossDirectory,
CommonConstants.FOUR_STRING, CommonConstants.FOUR_STRING,
detail.getId() detail.getId(),
taskId
); );
if (!R.isSuccess(uploadResult)) { if (!R.isSuccess(uploadResult)) {
...@@ -819,7 +823,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -819,7 +823,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
feedbackList.add(feedback); feedbackList.add(feedback);
} catch (Exception e) { } catch (Exception e) {
log.error("上传文件失败:{},电子档案详情ID:{}", fileName, detail.getId(), e); log.error("上传文件失败:{},电子档案详情ID:{},任务ID:{}", fileName, detail.getId(), taskId, e);
ArchiveFeedbackVO feedback = createFeedbackVO(detail, materialType, ArchiveFeedbackVO feedback = createFeedbackVO(detail, materialType,
ArchiveConstants.PROCESS_RESULT_FAILED, "文件上传异常:" + fileName + ",原因:" + e.getMessage()); ArchiveConstants.PROCESS_RESULT_FAILED, "文件上传异常:" + fileName + ",原因:" + e.getMessage());
feedbackList.add(feedback); feedbackList.add(feedback);
...@@ -1227,6 +1231,13 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -1227,6 +1231,13 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
.last(CommonConstants.LAST_ONE_SQL); .last(CommonConstants.LAST_ONE_SQL);
TElectronicArchiveDetail detail = detailService.getOne(wrapper); TElectronicArchiveDetail detail = detailService.getOne(wrapper);
// 创建任务,假删除任务
TElectronicArchiveTask task = new TElectronicArchiveTask();
task.setTaskCode("DZDAPL_SINGLE");
task.setUploadFileName("单个上传");
task.setStatus(ArchiveConstants.TASK_STATUS_GENERATED);
task.setDeleteFlag(CommonConstants.ONE_STRING);
taskService.save(task);
// 4. 如果不存在,创建新的明细 // 4. 如果不存在,创建新的明细
if (detail == null) { if (detail == null) {
detail = new TElectronicArchiveDetail(); detail = new TElectronicArchiveDetail();
...@@ -1244,14 +1255,6 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -1244,14 +1255,6 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
detail.setFileTown(empInfo.getFileTown()); detail.setFileTown(empInfo.getFileTown());
detailService.save(detail); detailService.save(detail);
// 创建任务,假删除任务
TElectronicArchiveTask task = new TElectronicArchiveTask();
task.setTaskCode("DZDAPL_SINGLE");
task.setUploadFileName("单个上传");
task.setStatus(ArchiveConstants.TASK_STATUS_GENERATED);
task.setDeleteFlag(CommonConstants.ONE_STRING);
taskService.save(task);
// 建立任务和档案详情的关联关系 // 建立任务和档案详情的关联关系
TTaskArchiveRelation relation = new TTaskArchiveRelation(); TTaskArchiveRelation relation = new TTaskArchiveRelation();
relation.setTaskId(task.getId()); relation.setTaskId(task.getId());
...@@ -1290,6 +1293,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -1290,6 +1293,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
// 更新domainId // 更新domainId
attaInfo.setDomainId(detail.getId()); attaInfo.setDomainId(detail.getId());
attaInfo.setTaskId(task.getId());
boolean updateSuccess = attaInfoService.updateById(attaInfo); boolean updateSuccess = attaInfoService.updateById(attaInfo);
if (updateSuccess) { if (updateSuccess) {
......
...@@ -44,6 +44,11 @@ public class FileUploadServiceImpl implements FileUploadService { ...@@ -44,6 +44,11 @@ public class FileUploadServiceImpl implements FileUploadService {
@Override @Override
public R<TAttaInfo> uploadFileReturnAtta(MultipartFile file, String filePath, String type, String domainId) throws IOException { public R<TAttaInfo> uploadFileReturnAtta(MultipartFile file, String filePath, String type, String domainId) throws IOException {
return uploadFileReturnAtta(file, filePath, type, domainId, null);
}
@Override
public R<TAttaInfo> uploadFileReturnAtta(MultipartFile file, String filePath, String type, String domainId, String taskId) throws IOException {
if (null == file) { if (null == file) {
return R.failed("文件删除异常,请重新上传!"); return R.failed("文件删除异常,请重新上传!");
} }
...@@ -91,6 +96,7 @@ public class FileUploadServiceImpl implements FileUploadService { ...@@ -91,6 +96,7 @@ public class FileUploadServiceImpl implements FileUploadService {
attaInfo.setRelationType(type); attaInfo.setRelationType(type);
try { try {
attaInfo.setDomainId(domainId); attaInfo.setDomainId(domainId);
attaInfo.setTaskId(taskId);
Set<String> dbAuthsSet = new HashSet<>(); Set<String> dbAuthsSet = new HashSet<>();
Collection<? extends GrantedAuthority> authorities = AuthorityUtils Collection<? extends GrantedAuthority> authorities = AuthorityUtils
...@@ -197,17 +203,26 @@ public class FileUploadServiceImpl implements FileUploadService { ...@@ -197,17 +203,26 @@ public class FileUploadServiceImpl implements FileUploadService {
**/ **/
@Override @Override
public R uploadAsso(MultipartFile file, String filePath, String type, String domain, String uploadType){ public R uploadAsso(MultipartFile file, String filePath, String type, String domain, String uploadType){
return getR(file, filePath, type, domain, uploadType); return uploadAsso(file, filePath, type, domain, uploadType, null);
}
@Override
public R uploadAsso(MultipartFile file, String filePath, String type, String domain, String uploadType, String taskId){
return getR(file, filePath, type, domain, uploadType, taskId);
} }
public R getR(MultipartFile file, String filePath, String type, String domain, String uploadType) { public R getR(MultipartFile file, String filePath, String type, String domain, String uploadType) {
return getR(file, filePath, type, domain, uploadType, null);
}
public R getR(MultipartFile file, String filePath, String type, String domain, String uploadType, String taskId) {
maxLimit = configLimitMapper.getSysConfigLimitByKey("UPLOAD_MAX_LIMIT"); maxLimit = configLimitMapper.getSysConfigLimitByKey("UPLOAD_MAX_LIMIT");
if (atomicInteger.incrementAndGet() <= maxLimit){ if (atomicInteger.incrementAndGet() <= maxLimit){
try { try {
if (CommonConstants.ZERO_STRING.equals(uploadType)){ if (CommonConstants.ZERO_STRING.equals(uploadType)){
return uploadImg(file, filePath, type, domain); return uploadImg(file, filePath, type, domain);
}else if (CommonConstants.ONE_STRING.equals(uploadType)){ }else if (CommonConstants.ONE_STRING.equals(uploadType)){
return uploadFileReturnAtta(file, filePath, type, domain); return uploadFileReturnAtta(file, filePath, type, domain, taskId);
} }
}catch (Exception e){ }catch (Exception e){
log.error("附件上传异常:",e); log.error("附件上传异常:",e);
......
...@@ -109,9 +109,10 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -109,9 +109,10 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
continue; continue;
} }
// 查询该任务上传的附件(domainId为明细ID,附件是在处理ZIP时关联到明细的 // 查询该任务上传的附件(domainId为明细ID,taskId为任务ID,用于区分同一个domainId下不同任务的附件
List<TAttaInfo> taskAttachments = attaInfoService.list(Wrappers.<TAttaInfo>lambdaQuery() List<TAttaInfo> taskAttachments = attaInfoService.list(Wrappers.<TAttaInfo>lambdaQuery()
.eq(TAttaInfo::getDomainId, id) .eq(TAttaInfo::getDomainId, id)
.eq(TAttaInfo::getTaskId, relation.getTaskId())
.eq(TAttaInfo::getRelationType, ArchiveConstants.ATTA_RELATION_TYPE_PER) .eq(TAttaInfo::getRelationType, ArchiveConstants.ATTA_RELATION_TYPE_PER)
.eq(TAttaInfo::getStatus, ArchiveConstants.ATTA_STATUS_ENABLED)); .eq(TAttaInfo::getStatus, ArchiveConstants.ATTA_STATUS_ENABLED));
...@@ -364,7 +365,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -364,7 +365,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
// 查询该明细下所有可用附件 // 查询该明细下所有可用附件
List<TAttaInfo> allAttaList = attaInfoService.list(Wrappers.<TAttaInfo>lambdaQuery() List<TAttaInfo> allAttaList = attaInfoService.list(Wrappers.<TAttaInfo>lambdaQuery()
.eq(TAttaInfo::getDomainId, detail.getId()) .eq(TAttaInfo::getDomainId, detail.getId())
.eq(TAttaInfo::getRelationType, ArchiveConstants.ATTA_RELATION_TYPE_ZIP) .eq(TAttaInfo::getRelationType, ArchiveConstants.ATTA_RELATION_TYPE_PER)
.eq(TAttaInfo::getStatus, ArchiveConstants.ATTA_STATUS_ENABLED)); .eq(TAttaInfo::getStatus, ArchiveConstants.ATTA_STATUS_ENABLED));
if (CollUtil.isEmpty(allAttaList)) { if (CollUtil.isEmpty(allAttaList)) {
...@@ -419,7 +420,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -419,7 +420,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
// 查询该明细下指定资料类型的附件(状态为可用) // 查询该明细下指定资料类型的附件(状态为可用)
List<TAttaInfo> attaList = attaInfoService.list(Wrappers.<TAttaInfo>lambdaQuery() List<TAttaInfo> attaList = attaInfoService.list(Wrappers.<TAttaInfo>lambdaQuery()
.eq(TAttaInfo::getDomainId, detail.getId()) .eq(TAttaInfo::getDomainId, detail.getId())
.eq(TAttaInfo::getRelationType, ArchiveConstants.ATTA_RELATION_TYPE_ZIP) .eq(TAttaInfo::getRelationType, ArchiveConstants.ATTA_RELATION_TYPE_PER)
.eq(TAttaInfo::getStatus, ArchiveConstants.ATTA_STATUS_ENABLED) .eq(TAttaInfo::getStatus, ArchiveConstants.ATTA_STATUS_ENABLED)
.like(TAttaInfo::getAttaSrc, request.getMaterialType())); // 附件路径中包含资料类型 .like(TAttaInfo::getAttaSrc, request.getMaterialType())); // 附件路径中包含资料类型
...@@ -632,7 +633,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -632,7 +633,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
} }
// 校验附件关系类型是否为ZIP附件 // 校验附件关系类型是否为ZIP附件
if (!ArchiveConstants.ATTA_RELATION_TYPE_ZIP.equals(atta.getRelationType())) { if (!ArchiveConstants.ATTA_RELATION_TYPE_PER.equals(atta.getRelationType())) {
return R.failed("附件【" + atta.getAttaName() + "】不是电子档案附件"); return R.failed("附件【" + atta.getAttaName() + "】不是电子档案附件");
} }
...@@ -676,7 +677,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -676,7 +677,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
// 6. 检查该资料类型下是否还有其他可用附件 // 6. 检查该资料类型下是否还有其他可用附件
LambdaQueryWrapper<TAttaInfo> attaWrapper = Wrappers.<TAttaInfo>lambdaQuery() LambdaQueryWrapper<TAttaInfo> attaWrapper = Wrappers.<TAttaInfo>lambdaQuery()
.eq(TAttaInfo::getDomainId, request.getDetailId()) .eq(TAttaInfo::getDomainId, request.getDetailId())
.eq(TAttaInfo::getRelationType, ArchiveConstants.ATTA_RELATION_TYPE_ZIP) .eq(TAttaInfo::getRelationType, ArchiveConstants.ATTA_RELATION_TYPE_PER)
.eq(TAttaInfo::getStatus, ArchiveConstants.ATTA_STATUS_ENABLED) .eq(TAttaInfo::getStatus, ArchiveConstants.ATTA_STATUS_ENABLED)
.like(TAttaInfo::getAttaSrc, "/" + request.getMaterialType() + "/"); .like(TAttaInfo::getAttaSrc, "/" + request.getMaterialType() + "/");
long remainingCount = attaInfoService.count(attaWrapper); long remainingCount = attaInfoService.count(attaWrapper);
...@@ -770,7 +771,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -770,7 +771,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
// 用于存储需要导出的档案及其附件 // 用于存储需要导出的档案及其附件
Map<String, ArchiveDownloadInfo> downloadMap = new LinkedHashMap<>(); Map<String, ArchiveDownloadInfo> downloadMap = new LinkedHashMap<>();
try { try {
// 1. 校验请求并查询档案信息 // 1. 校验请求并查询档案信息
for (ArchiveSelectedExportRequestVO request : requestList) { for (ArchiveSelectedExportRequestVO request : requestList) {
...@@ -785,7 +786,6 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -785,7 +786,6 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
// 2. 检查是否有可导出的档案 // 2. 检查是否有可导出的档案
if (downloadMap.isEmpty()) { if (downloadMap.isEmpty()) {
log.warn("没有可导出的档案");
response.setContentType("application/json;charset=UTF-8"); response.setContentType("application/json;charset=UTF-8");
response.getWriter().write("{\"code\":1,\"msg\":\"没有可导出的档案\"}"); response.getWriter().write("{\"code\":1,\"msg\":\"没有可导出的档案\"}");
return; return;
...@@ -873,14 +873,13 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -873,14 +873,13 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
// 5. 构建文件夹名称:项目编码-姓名-身份证 // 5. 构建文件夹名称:项目编码-姓名-身份证
String folderName = detail.getDeptNo() + "-" + detail.getEmpName() + "-" + detail.getEmpIdcard(); String folderName = detail.getDeptNo() + "-" + detail.getEmpName() + "-" + detail.getEmpIdcard();
// 6. 按资料类型查询附件 // 6. 按资料类型查询附件
Map<String, List<TAttaInfo>> materialTypeAttaMap = new LinkedHashMap<>(); Map<String, List<TAttaInfo>> materialTypeAttaMap = new LinkedHashMap<>();
for (String materialType : request.getMaterialTypes()) { for (String materialType : request.getMaterialTypes()) {
// 校验资料类型是否有效 // 校验资料类型是否有效
if (!isValidMaterialType(materialType)) { if (!isValidMaterialType(materialType)) {
log.warn("资料类型无效,跳过:{}", materialType);
continue; continue;
} }
...@@ -888,31 +887,18 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -888,31 +887,18 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
// 通过附件路径匹配资料类型和任务 // 通过附件路径匹配资料类型和任务
List<TAttaInfo> attaList = attaInfoService.list(Wrappers.<TAttaInfo>lambdaQuery() List<TAttaInfo> attaList = attaInfoService.list(Wrappers.<TAttaInfo>lambdaQuery()
.eq(TAttaInfo::getDomainId, request.getDetailId()) .eq(TAttaInfo::getDomainId, request.getDetailId())
.eq(TAttaInfo::getRelationType, ArchiveConstants.ATTA_RELATION_TYPE_ZIP) .eq(TAttaInfo::getTaskId, request.getTaskId())
.eq(TAttaInfo::getRelationType, ArchiveConstants.ATTA_RELATION_TYPE_PER)
.eq(TAttaInfo::getStatus, ArchiveConstants.ATTA_STATUS_ENABLED) .eq(TAttaInfo::getStatus, ArchiveConstants.ATTA_STATUS_ENABLED)
.like(TAttaInfo::getAttaSrc, materialType)); // 附件路径中包含资料类型 .like(TAttaInfo::getAttaSrc, materialType)); // 附件路径中包含资料类型
// 过滤附件:只保留属于指定任务的附件
// 方法:通过创建时间范围过滤(任务创建时间之后的附件)
List<TAttaInfo> taskAttaList = new ArrayList<>();
for (TAttaInfo atta : attaList) {
// 简单判断:附件创建时间在任务创建时间之后
if (atta.getCreateTime() != null && task.getCreateTime() != null &&
!atta.getCreateTime().isBefore(task.getCreateTime())) {
taskAttaList.add(atta);
}
}
// 如果该资料类型下有附件,添加到Map中 // 如果该资料类型下有附件,添加到Map中
if (CollUtil.isNotEmpty(taskAttaList)) { if (CollUtil.isNotEmpty(attaList)) {
materialTypeAttaMap.put(materialType, taskAttaList); materialTypeAttaMap.put(materialType, attaList);
// 添加成功的反馈 // 添加成功的反馈
feedbackList.add(createSelectedExportSuccessFeedbackVO(detail, task, materialType)); feedbackList.add(createSelectedExportSuccessFeedbackVO(detail, task, materialType));
} else { } else {
// 添加失败的反馈
log.warn("该资料类型下没有可用的附件,明细ID:{},任务ID:{},资料类型:{}",
request.getDetailId(), request.getTaskId(), materialType);
feedbackList.add(createSelectedExportFeedbackVOWithDetail(detail, task, materialType, feedbackList.add(createSelectedExportFeedbackVOWithDetail(detail, task, materialType,
"该资料类型下没有可用的附件")); "该资料类型下没有可用的附件"));
} }
...@@ -927,8 +913,22 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -927,8 +913,22 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
downloadInfo.setMaterialTypeAttaMap(materialTypeAttaMap); downloadInfo.setMaterialTypeAttaMap(materialTypeAttaMap);
downloadMap.put(folderName, downloadInfo); downloadMap.put(folderName, downloadInfo);
} else { } else {
Map<String, List<TAttaInfo>> targetMap = downloadInfo.getMaterialTypeAttaMap();
// 合并资料类型附件 // 合并资料类型附件
downloadInfo.getMaterialTypeAttaMap().putAll(materialTypeAttaMap); for (Map.Entry<String, List<TAttaInfo>> entry : materialTypeAttaMap.entrySet()) {
String key = entry.getKey();
List<TAttaInfo> sourceValue = entry.getValue();
if (targetMap.containsKey(key)) {
// 如果key已存在,合并两个List
List<TAttaInfo> targetValue = targetMap.get(key);
targetValue.addAll(sourceValue);
materialTypeAttaMap.put(key, targetValue);
}
downloadInfo.getMaterialTypeAttaMap().putAll(materialTypeAttaMap);
}
} }
// 设置资料类型列表 // 设置资料类型列表
...@@ -1020,7 +1020,8 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -1020,7 +1020,8 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
if (feedback.getEmpName().equals(detail.getEmpName()) && if (feedback.getEmpName().equals(detail.getEmpName()) &&
feedback.getEmpIdcard().equals(detail.getEmpIdcard()) && feedback.getEmpIdcard().equals(detail.getEmpIdcard()) &&
feedback.getDeptNo().equals(detail.getDeptNo()) && feedback.getDeptNo().equals(detail.getDeptNo()) &&
materialTypes.contains(feedback.getMaterialType())) { materialTypes.contains(feedback.getMaterialType()) &&
Common.isEmpty(feedback.getFailReason())) {
feedback.setDownloadStatus(status); feedback.setDownloadStatus(status);
feedback.setFailReason(failReason); feedback.setFailReason(failReason);
} }
...@@ -1162,7 +1163,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -1162,7 +1163,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
// 1. 查询该明细下所有可用附件 // 1. 查询该明细下所有可用附件
List<TAttaInfo> allAttaList = attaInfoService.list(Wrappers.<TAttaInfo>lambdaQuery() List<TAttaInfo> allAttaList = attaInfoService.list(Wrappers.<TAttaInfo>lambdaQuery()
.eq(TAttaInfo::getDomainId, detail.getId()) .eq(TAttaInfo::getDomainId, detail.getId())
.eq(TAttaInfo::getRelationType, ArchiveConstants.ATTA_RELATION_TYPE_ZIP) .eq(TAttaInfo::getRelationType, ArchiveConstants.ATTA_RELATION_TYPE_PER)
.eq(TAttaInfo::getStatus, ArchiveConstants.ATTA_STATUS_ENABLED)); .eq(TAttaInfo::getStatus, ArchiveConstants.ATTA_STATUS_ENABLED));
// 2. 如果没有附件,添加失败反馈 // 2. 如果没有附件,添加失败反馈
...@@ -1294,7 +1295,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -1294,7 +1295,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
// 2. 查询该明细下所有的附件(包括可用和不可用的) // 2. 查询该明细下所有的附件(包括可用和不可用的)
List<TAttaInfo> attachments = attaInfoService.list(Wrappers.<TAttaInfo>lambdaQuery() List<TAttaInfo> attachments = attaInfoService.list(Wrappers.<TAttaInfo>lambdaQuery()
.eq(TAttaInfo::getDomainId, id) .eq(TAttaInfo::getDomainId, id)
.eq(TAttaInfo::getRelationType, ArchiveConstants.ATTA_RELATION_TYPE_ZIP)); .eq(TAttaInfo::getRelationType, ArchiveConstants.ATTA_RELATION_TYPE_PER));
// 3. 删除所有附件并删除OSS文件 // 3. 删除所有附件并删除OSS文件
int attachmentSuccessCount = 0; int attachmentSuccessCount = 0;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment