Commit d3cf0584 authored by huyuchen's avatar huyuchen

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

parent 7f7fec60
...@@ -3,6 +3,7 @@ package com.yifu.cloud.plus.v1.batch.service.impl; ...@@ -3,6 +3,7 @@ package com.yifu.cloud.plus.v1.batch.service.impl;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.ZipUtil;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.read.listener.ReadListener; import com.alibaba.excel.read.listener.ReadListener;
...@@ -42,6 +43,7 @@ import org.springframework.web.multipart.MultipartFile; ...@@ -42,6 +43,7 @@ import org.springframework.web.multipart.MultipartFile;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicInteger;
...@@ -324,8 +326,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -324,8 +326,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
relationService.save(relation); relationService.save(relation);
} }
} }
log.info("任务关联关系创建成功,任务ID:{},关联数量:{}", taskId, uniqueMap.size());
} catch (Exception e) { } catch (Exception e) {
log.error("创建任务关联关系失败,任务ID:{}", taskId, e); log.error("创建任务关联关系失败,任务ID:{}", taskId, e);
} }
...@@ -379,8 +380,8 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -379,8 +380,8 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
// 将ZIP文件保存到临时目录 // 将ZIP文件保存到临时目录
String tempDirPath = System.getProperty("java.io.tmpdir") + File.separator + "zip_upload_" + taskId; String tempDirPath = System.getProperty("java.io.tmpdir") + File.separator + "zip_upload_" + taskId;
File tempDir = new File(tempDirPath); File tempDir = new File(tempDirPath);
if (!tempDir.exists()) { if (!tempDir.exists() && !tempDir.mkdirs()) {
tempDir.mkdirs(); throw new IOException("Failed to create directory: " + tempDirPath);
} }
tempZipFile = new File(tempDir, file.getOriginalFilename()); tempZipFile = new File(tempDir, file.getOriginalFilename());
...@@ -421,7 +422,6 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -421,7 +422,6 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
@Override @Override
@Async @Async
public R<?> asyncProcessUpload(String taskId) { public R<?> asyncProcessUpload(String taskId) {
log.info("开始异步处理任务:{}", taskId);
List<ArchiveFeedbackVO> feedbackList = new ArrayList<>(); List<ArchiveFeedbackVO> feedbackList = new ArrayList<>();
File tempDir = null; File tempDir = null;
...@@ -448,14 +448,12 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -448,14 +448,12 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
// 从附件记录中获取ZIP文件路径 // 从附件记录中获取ZIP文件路径
if (StrUtil.isBlank(zipAtta.getAttaSrc())) { if (StrUtil.isBlank(zipAtta.getAttaSrc())) {
log.error("ZIP文件路径为空,任务ID:{}", taskId);
updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED); updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED);
return R.failed("ZIP文件路径为空"); return R.failed("ZIP文件路径为空");
} }
zipSourceFile = new File(zipAtta.getAttaSrc()); zipSourceFile = new File(zipAtta.getAttaSrc());
if (!zipSourceFile.exists()) { if (!zipSourceFile.exists()) {
log.error("ZIP文件不存在:{},任务ID:{}", zipAtta.getAttaSrc(), taskId);
updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED); updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED);
return R.failed("ZIP文件不存在"); return R.failed("ZIP文件不存在");
} }
...@@ -465,7 +463,6 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -465,7 +463,6 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
.eq(TTaskArchiveRelation::getTaskId, taskId)); .eq(TTaskArchiveRelation::getTaskId, taskId));
if (CollUtil.isEmpty(relations)) { if (CollUtil.isEmpty(relations)) {
log.error("任务没有关联的明细数据,任务ID:{}", taskId);
updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED); updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED);
return R.failed("任务没有关联的明细数据"); return R.failed("任务没有关联的明细数据");
} }
...@@ -485,16 +482,13 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -485,16 +482,13 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
String tempDirPath = System.getProperty("java.io.tmpdir") + File.separator + "archive_" + taskId + "_" + System.currentTimeMillis(); String tempDirPath = System.getProperty("java.io.tmpdir") + File.separator + "archive_" + taskId + "_" + System.currentTimeMillis();
tempDir = new File(tempDirPath); tempDir = new File(tempDirPath);
if (!tempDir.mkdirs()) { if (!tempDir.mkdirs()) {
log.error("创建临时目录失败:{}", tempDirPath);
updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED); updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED);
return R.failed("创建临时目录失败"); return R.failed("创建临时目录失败");
} }
// 解压ZIP文件 // 解压ZIP文件
try { try {
log.info("开始解压ZIP文件:{},任务ID:{}", zipSourceFile.getAbsolutePath(), taskId); ZipUtil.unzip(zipSourceFile, tempDir);
cn.hutool.core.util.ZipUtil.unzip(zipSourceFile, tempDir);
log.info("ZIP文件解压成功,任务ID:{}", taskId);
} catch (Exception e) { } catch (Exception e) {
log.error("解压ZIP文件失败,任务ID:{}", taskId, e); log.error("解压ZIP文件失败,任务ID:{}", taskId, e);
updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED); updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED);
...@@ -504,7 +498,6 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -504,7 +498,6 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
// 获取ZIP包的根目录(第一级目录) // 获取ZIP包的根目录(第一级目录)
File[] zipRootDirs = tempDir.listFiles(File::isDirectory); File[] zipRootDirs = tempDir.listFiles(File::isDirectory);
if (zipRootDirs == null || zipRootDirs.length == 0) { if (zipRootDirs == null || zipRootDirs.length == 0) {
log.error("ZIP文件中没有找到目录,任务ID:{}", taskId);
updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED); updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED);
return R.failed("ZIP文件格式不正确"); return R.failed("ZIP文件格式不正确");
} }
...@@ -514,7 +507,6 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -514,7 +507,6 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
// 处理第二级目录(身份证+姓名目录) // 处理第二级目录(身份证+姓名目录)
File[] personDirs = zipRootDir.listFiles(File::isDirectory); File[] personDirs = zipRootDir.listFiles(File::isDirectory);
if (personDirs == null || personDirs.length == 0) { if (personDirs == null || personDirs.length == 0) {
log.error("ZIP文件中没有找到人员目录,任务ID:{}", taskId);
updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED); updateTaskStatus(task, ArchiveConstants.TASK_STATUS_NOT_UPLOADED);
return R.failed("ZIP文件格式不正确"); return R.failed("ZIP文件格式不正确");
} }
...@@ -545,9 +537,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -545,9 +537,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
if (tempDir != null && tempDir.exists()) { if (tempDir != null && tempDir.exists()) {
try { try {
FileUtil.del(tempDir); FileUtil.del(tempDir);
log.info("清理临时解压目录成功:{}", tempDir.getAbsolutePath());
} catch (Exception e) { } catch (Exception e) {
log.error("清理临时解压目录失败:{}", tempDir.getAbsolutePath(), e);
} }
} }
...@@ -555,9 +545,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -555,9 +545,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
if (zipSourceFile != null && zipSourceFile.exists()) { if (zipSourceFile != null && zipSourceFile.exists()) {
try { try {
FileUtil.del(zipSourceFile.getParentFile()); FileUtil.del(zipSourceFile.getParentFile());
log.info("清理ZIP源文件成功:{}", zipSourceFile.getAbsolutePath());
} catch (Exception e) { } catch (Exception e) {
log.error("清理ZIP源文件失败:{}", zipSourceFile.getAbsolutePath(), e);
} }
} }
atomicInteger.decrementAndGet(); atomicInteger.decrementAndGet();
...@@ -616,7 +604,6 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -616,7 +604,6 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
private void processPersonDirectory(File personDir, Map<String, TElectronicArchiveDetail> detailMap, private void processPersonDirectory(File personDir, Map<String, TElectronicArchiveDetail> detailMap,
List<ArchiveFeedbackVO> feedbackList, String taskId) { List<ArchiveFeedbackVO> feedbackList, String taskId) {
String dirName = personDir.getName(); String dirName = personDir.getName();
log.info("处理人员目录:{}", dirName);
// 解析身份证和姓名 // 解析身份证和姓名
Map<String, String> idNameMap = parseIdCardAndName(dirName); Map<String, String> idNameMap = parseIdCardAndName(dirName);
...@@ -889,7 +876,6 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -889,7 +876,6 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
*/ */
private void generateFeedbackExcel(String taskId, List<ArchiveFeedbackVO> feedbackList) { private void generateFeedbackExcel(String taskId, List<ArchiveFeedbackVO> feedbackList) {
if (CollUtil.isEmpty(feedbackList)) { if (CollUtil.isEmpty(feedbackList)) {
log.info("没有反馈数据,跳过生成反馈表");
return; return;
} }
...@@ -914,7 +900,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -914,7 +900,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
taskId taskId
); );
if (uploadResult != null && R.isSuccess(uploadResult)) { if (R.isSuccess(uploadResult)) {
log.info("反馈表生成成功,任务ID:{}", taskId); log.info("反馈表生成成功,任务ID:{}", taskId);
} else { } else {
log.error("反馈表上传失败,任务ID:{}", taskId); log.error("反馈表上传失败,任务ID:{}", taskId);
...@@ -1129,7 +1115,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo ...@@ -1129,7 +1115,7 @@ public class ElectronicArchiveImportServiceImpl implements ElectronicArchiveImpo
detail.getId() detail.getId()
); );
if (uploadResult != null && R.isSuccess(uploadResult)) { if (R.isSuccess(uploadResult)) {
successCount++; successCount++;
} else { } else {
failCount++; failCount++;
......
...@@ -13,7 +13,6 @@ import com.yifu.cloud.plus.v1.batch.entity.TAttaInfo; ...@@ -13,7 +13,6 @@ import com.yifu.cloud.plus.v1.batch.entity.TAttaInfo;
import com.yifu.cloud.plus.v1.batch.entity.TElectronicArchiveDetail; import com.yifu.cloud.plus.v1.batch.entity.TElectronicArchiveDetail;
import com.yifu.cloud.plus.v1.batch.entity.TElectronicArchiveTask; import com.yifu.cloud.plus.v1.batch.entity.TElectronicArchiveTask;
import com.yifu.cloud.plus.v1.batch.entity.TTaskArchiveRelation; import com.yifu.cloud.plus.v1.batch.entity.TTaskArchiveRelation;
import com.yifu.cloud.plus.v1.batch.mapper.SysConfigLimitMapper;
import com.yifu.cloud.plus.v1.batch.mapper.TElectronicArchiveDetailMapper; import com.yifu.cloud.plus.v1.batch.mapper.TElectronicArchiveDetailMapper;
import com.yifu.cloud.plus.v1.batch.service.TAttaInfoService; import com.yifu.cloud.plus.v1.batch.service.TAttaInfoService;
import com.yifu.cloud.plus.v1.batch.service.TElectronicArchiveDetailService; import com.yifu.cloud.plus.v1.batch.service.TElectronicArchiveDetailService;
...@@ -42,7 +41,6 @@ import java.net.URLEncoder; ...@@ -42,7 +41,6 @@ import java.net.URLEncoder;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream; import java.util.zip.ZipOutputStream;
...@@ -96,7 +94,6 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -96,7 +94,6 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
.eq(TTaskArchiveRelation::getArchiveDetailId, id)); .eq(TTaskArchiveRelation::getArchiveDetailId, id));
if (CollUtil.isEmpty(relations)) { if (CollUtil.isEmpty(relations)) {
log.info("电子档案明细没有关联的任务,明细ID:{}", id);
return R.ok(detail); return R.ok(detail);
} }
...@@ -298,8 +295,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -298,8 +295,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
.eq(TElectronicArchiveDetail::getEmpName, request.getEmpName()) .eq(TElectronicArchiveDetail::getEmpName, request.getEmpName())
.eq(TElectronicArchiveDetail::getEmpIdcard, request.getEmpIdcard()) .eq(TElectronicArchiveDetail::getEmpIdcard, request.getEmpIdcard())
.eq(TElectronicArchiveDetail::getDeptNo, request.getDeptNo()) .eq(TElectronicArchiveDetail::getDeptNo, request.getDeptNo())
.eq(ArchiveConstants.DETAIL_STATUS_ENABLED.equals(ArchiveConstants.DETAIL_STATUS_ENABLED), .eq(TElectronicArchiveDetail::getStatus, ArchiveConstants.DETAIL_STATUS_ENABLED);
TElectronicArchiveDetail::getStatus, ArchiveConstants.DETAIL_STATUS_ENABLED);
// 如果项目名称不为空,添加项目名称条件 // 如果项目名称不为空,添加项目名称条件
if (StrUtil.isNotBlank(request.getDeptName())) { if (StrUtil.isNotBlank(request.getDeptName())) {
...@@ -320,9 +316,6 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -320,9 +316,6 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
if (downloadAllTypes) { if (downloadAllTypes) {
// 资料类型为空,下载该人员该项目下所有资料类型 // 资料类型为空,下载该人员该项目下所有资料类型
log.info("资料类型为空,将下载该人员该项目下所有资料类型,姓名:{},身份证:{},项目编码:{}",
request.getEmpName(), request.getEmpIdcard(), request.getDeptNo());
// 查询该明细下所有可用附件 // 查询该明细下所有可用附件
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())
...@@ -475,8 +468,6 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -475,8 +468,6 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
zipOut.closeEntry(); zipOut.closeEntry();
excelOut.close(); excelOut.close();
log.info("反馈Excel添加成功,共{}条记录", feedbackList.size());
} catch (Exception e) { } catch (Exception e) {
log.error("生成反馈Excel失败", e); log.error("生成反馈Excel失败", e);
} }
...@@ -570,10 +561,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -570,10 +561,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
*/ */
@Override @Override
public R<String> deleteArchiveAttachments(ArchiveAttachmentDeleteRequestVO request) { public R<String> deleteArchiveAttachments(ArchiveAttachmentDeleteRequestVO request) {
log.info("开始删除电子档案附件,明细ID:{},任务ID:{},资料类型:{},附件数量:{}",
request.getDetailId(), request.getTaskId(), request.getMaterialType(),
request.getAttachmentIds().size());
try { try {
// 1. 校验明细是否存在 // 1. 校验明细是否存在
TElectronicArchiveDetail detail = baseMapper.selectById(request.getDetailId()); TElectronicArchiveDetail detail = baseMapper.selectById(request.getDetailId());
...@@ -641,7 +629,6 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -641,7 +629,6 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
try { try {
ossUtil.deleteObject("yf-hr-efile-source", atta.getAttaSrc()); ossUtil.deleteObject("yf-hr-efile-source", atta.getAttaSrc());
successCount++; successCount++;
log.info("删除附件成功,附件ID:{},文件名:{}", atta.getId(), atta.getAttaName());
} catch (Exception e) { } catch (Exception e) {
log.error("删除OSS文件失败,附件ID:{},路径:{}", atta.getId(), atta.getAttaSrc(), e); log.error("删除OSS文件失败,附件ID:{},路径:{}", atta.getId(), atta.getAttaSrc(), e);
// OSS删除失败不影响整体流程,已经逻辑删除了 // OSS删除失败不影响整体流程,已经逻辑删除了
...@@ -676,8 +663,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -676,8 +663,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
if (failCount > 0) { if (failCount > 0) {
resultMsg += "。失败的附件:" + failReasons.toString(); resultMsg += "。失败的附件:" + failReasons.toString();
} }
log.info("删除电子档案附件完成,明细ID:{},结果:{}", request.getDetailId(), resultMsg);
return R.ok(null, resultMsg); return R.ok(null, resultMsg);
} catch (Exception e) { } catch (Exception e) {
...@@ -725,7 +711,6 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -725,7 +711,6 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
} }
baseMapper.updateById(detail); baseMapper.updateById(detail);
log.info("更新档案明细资料类型成功,明细ID:{},新的资料类型:{}", detail.getId(), detail.getMaterialType());
} catch (Exception e) { } catch (Exception e) {
log.error("更新档案明细资料类型失败,明细ID:{}", detail.getId(), e); log.error("更新档案明细资料类型失败,明细ID:{}", detail.getId(), e);
...@@ -751,8 +736,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -751,8 +736,7 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
*/ */
@Override @Override
public void selectedExportArchives(List<ArchiveSelectedExportRequestVO> requestList, HttpServletResponse response) { public void selectedExportArchives(List<ArchiveSelectedExportRequestVO> requestList, HttpServletResponse response) {
log.info("开始勾选导出电子档案,请求数量:{}", requestList.size());
// 反馈列表 // 反馈列表
List<ArchiveDownloadFeedbackVO> feedbackList = new ArrayList<>(); List<ArchiveDownloadFeedbackVO> feedbackList = new ArrayList<>();
...@@ -811,7 +795,6 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -811,7 +795,6 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
addFeedbackExcel(zipOut, feedbackList); addFeedbackExcel(zipOut, feedbackList);
zipOut.finish(); zipOut.finish();
log.info("电子档案勾选导出完成");
} }
} catch (Exception e) { } catch (Exception e) {
......
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