Commit 9a7278aa authored by huyuchen's avatar huyuchen

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

parent 1f1bd8e7
...@@ -243,6 +243,9 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -243,6 +243,9 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
// 2. 校验文件总大小是否超过500MB // 2. 校验文件总大小是否超过500MB
long totalSize = calculateTotalFileSize(downloadMap); long totalSize = calculateTotalFileSize(downloadMap);
long maxSize = 500 * 1024 * 1024L; // 500MB long maxSize = 500 * 1024 * 1024L; // 500MB
// #region agent log
try{java.nio.file.Files.write(java.nio.file.Paths.get("e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"),("{\"location\":\"TElectronicArchiveDetailServiceImpl.java:244\",\"message\":\"开始批量下载\",\"data\":{\"totalSizeMB\":"+(totalSize/1024/1024)+",\"fileCount\":"+downloadMap.size()+"},\"timestamp\":"+System.currentTimeMillis()+",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H1,H2\"}\n").getBytes(java.nio.charset.StandardCharsets.UTF_8),java.nio.file.StandardOpenOption.CREATE,java.nio.file.StandardOpenOption.APPEND);}catch(Exception e){}
// #endregion
if (totalSize > maxSize) { if (totalSize > maxSize) {
log.warn("批量下载文件总大小超过限制,总大小:{}MB,限制:500MB", totalSize / 1024 / 1024); log.warn("批量下载文件总大小超过限制,总大小:{}MB,限制:500MB", totalSize / 1024 / 1024);
response.setContentType("application/json;charset=UTF-8"); response.setContentType("application/json;charset=UTF-8");
...@@ -261,17 +264,37 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -261,17 +264,37 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
response.setHeader(CommonConstants.CONTENT_DISPOSITION, response.setHeader(CommonConstants.CONTENT_DISPOSITION,
"attachment; filename=" + URLEncoder.encode(fileName, "UTF-8")); "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
// #region agent log
try{java.nio.file.Files.write(java.nio.file.Paths.get("e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"),("{\"location\":\"TElectronicArchiveDetailServiceImpl.java:263\",\"message\":\"响应头已设置\",\"data\":{\"fileName\":\""+fileName+"\"},\"timestamp\":"+System.currentTimeMillis()+",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H1,H2\"}\n").getBytes(java.nio.charset.StandardCharsets.UTF_8),java.nio.file.StandardOpenOption.CREATE,java.nio.file.StandardOpenOption.APPEND);}catch(Exception e){}
// #endregion
// 4. 创建ZIP输出流 // 4. 创建ZIP输出流
try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream())) { try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream())) {
// 5. 下载并打包档案文件 // 5. 下载并打包档案文件
// #region agent log
long totalBytesWritten = 0;
int folderIndex = 0;
// #endregion
for (Map.Entry<String, ArchiveDownloadInfo> entry : downloadMap.entrySet()) { for (Map.Entry<String, ArchiveDownloadInfo> entry : downloadMap.entrySet()) {
String folderName = entry.getKey(); String folderName = entry.getKey();
ArchiveDownloadInfo downloadInfo = entry.getValue(); ArchiveDownloadInfo downloadInfo = entry.getValue();
// #region agent log
folderIndex++;
long beforeWrite = totalBytesWritten;
try{java.nio.file.Files.write(java.nio.file.Paths.get("e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"),("{\"location\":\"TElectronicArchiveDetailServiceImpl.java:280\",\"message\":\"开始处理文件夹\",\"data\":{\"folderIndex\":"+folderIndex+",\"folderName\":\""+folderName.replace("\"","\\\"").replace("\\","/")+"\",\"totalBytesWritten\":"+totalBytesWritten+"},\"timestamp\":"+System.currentTimeMillis()+",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H3,H4\"}\n").getBytes(java.nio.charset.StandardCharsets.UTF_8),java.nio.file.StandardOpenOption.CREATE,java.nio.file.StandardOpenOption.APPEND);}catch(Exception ex){}
// #endregion
try { try {
downloadArchiveFiles(zipOut, folderName, downloadInfo); downloadArchiveFiles(zipOut, folderName, downloadInfo);
// #region agent log
try{zipOut.flush();response.getOutputStream().flush();}catch(Exception ex){}
totalBytesWritten += (downloadInfo.getMaterialTypeAttaMap().values().stream().mapToLong(list->list.stream().mapToLong(atta->atta.getAttaSize()!=null?atta.getAttaSize():0).sum()).sum());
try{java.nio.file.Files.write(java.nio.file.Paths.get("e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"),("{\"location\":\"TElectronicArchiveDetailServiceImpl.java:285\",\"message\":\"文件夹处理完成\",\"data\":{\"folderIndex\":"+folderIndex+",\"folderName\":\""+folderName.replace("\"","\\\"").replace("\\","/")+"\",\"totalBytesWritten\":"+totalBytesWritten+",\"bytesInFolder\":"+(totalBytesWritten-beforeWrite)+"},\"timestamp\":"+System.currentTimeMillis()+",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H1,H3,H4\"}\n").getBytes(java.nio.charset.StandardCharsets.UTF_8),java.nio.file.StandardOpenOption.CREATE,java.nio.file.StandardOpenOption.APPEND);}catch(Exception ex){}
// #endregion
// 更新反馈状态为成功 // 更新反馈状态为成功
// 使用materialTypeAttaMap的所有key来匹配,确保所有资料类型的反馈都被更新 // 使用materialTypeAttaMap的所有key来匹配,确保所有资料类型的反馈都被更新
Set<String> materialTypes = downloadInfo.getMaterialTypeAttaMap().keySet(); Set<String> materialTypes = downloadInfo.getMaterialTypeAttaMap().keySet();
...@@ -301,13 +324,25 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic ...@@ -301,13 +324,25 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
} }
// 6. 生成并添加反馈Excel表 // 6. 生成并添加反馈Excel表
// #region agent log
try{java.nio.file.Files.write(java.nio.file.Paths.get("e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"),("{\"location\":\"TElectronicArchiveDetailServiceImpl.java:311\",\"message\":\"开始添加反馈Excel\",\"data\":{\"totalBytesWritten\":"+totalBytesWritten+"},\"timestamp\":"+System.currentTimeMillis()+",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H4\"}\n").getBytes(java.nio.charset.StandardCharsets.UTF_8),java.nio.file.StandardOpenOption.CREATE,java.nio.file.StandardOpenOption.APPEND);}catch(Exception ex){}
// #endregion
addFeedbackExcel(zipOut, feedbackList); addFeedbackExcel(zipOut, feedbackList);
// #region agent log
try{java.nio.file.Files.write(java.nio.file.Paths.get("e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"),("{\"location\":\"TElectronicArchiveDetailServiceImpl.java:313\",\"message\":\"开始finish zip\",\"data\":{\"totalBytesWritten\":"+totalBytesWritten+"},\"timestamp\":"+System.currentTimeMillis()+",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H1,H4\"}\n").getBytes(java.nio.charset.StandardCharsets.UTF_8),java.nio.file.StandardOpenOption.CREATE,java.nio.file.StandardOpenOption.APPEND);}catch(Exception ex){}
// #endregion
zipOut.finish(); zipOut.finish();
// #region agent log
try{java.nio.file.Files.write(java.nio.file.Paths.get("e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"),("{\"location\":\"TElectronicArchiveDetailServiceImpl.java:315\",\"message\":\"zip finish完成\",\"data\":{\"totalBytesWritten\":"+totalBytesWritten+"},\"timestamp\":"+System.currentTimeMillis()+",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H1,H4\"}\n").getBytes(java.nio.charset.StandardCharsets.UTF_8),java.nio.file.StandardOpenOption.CREATE,java.nio.file.StandardOpenOption.APPEND);}catch(Exception ex){}
// #endregion
} }
} catch (Exception e) { } catch (Exception e) {
log.error("批量下载电子档案失败", e); log.error("批量下载电子档案失败", e);
// #region agent log
try{java.nio.file.Files.write(java.nio.file.Paths.get("e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"),("{\"location\":\"TElectronicArchiveDetailServiceImpl.java:319\",\"message\":\"批量下载异常\",\"data\":{\"error\":\""+e.getMessage().replace("\"","\\\"").replace("\\","/").substring(0,Math.min(100,e.getMessage().length()))+"\",\"exceptionClass\":\""+e.getClass().getName()+"\"},\"timestamp\":"+System.currentTimeMillis()+",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H2,H3,H4,H5\"}\n").getBytes(java.nio.charset.StandardCharsets.UTF_8),java.nio.file.StandardOpenOption.CREATE,java.nio.file.StandardOpenOption.APPEND);}catch(Exception ex){}
// #endregion
} }
} }
......
...@@ -241,7 +241,17 @@ public class OSSUtil { ...@@ -241,7 +241,17 @@ public class OSSUtil {
log.error("oss客户端获取错误,无此客户端",clientIndex); log.error("oss客户端获取错误,无此客户端",clientIndex);
}else{ }else{
OSSObject ossObject = null; OSSObject ossObject = null;
// #region agent log
int fileIndex = 0;
long totalBytesRead = 0;
// #endregion
for(OSSObjectBean key:srcList){ for(OSSObjectBean key:srcList){
// #region agent log
fileIndex++;
long fileBytesRead = 0;
String fileName = key.getName()!=null?key.getName().replace("\"","\\\"").replace("\\","/"):"null";
try{java.nio.file.Files.write(java.nio.file.Paths.get("e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"),("{\"location\":\"OSSUtil.java:246\",\"message\":\"开始读取OSS文件\",\"data\":{\"fileIndex\":"+fileIndex+",\"fileName\":\""+fileName+"\",\"key\":\""+key.getKey().replace("\"","\\\"").replace("\\","/")+"\"},\"timestamp\":"+System.currentTimeMillis()+",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H3,H5\"}\n").getBytes(java.nio.charset.StandardCharsets.UTF_8),java.nio.file.StandardOpenOption.CREATE,java.nio.file.StandardOpenOption.APPEND);}catch(Exception ex){}
// #endregion
// ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。 // ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
ossObject = client.getObject(bucketName, key.getKey()); ossObject = client.getObject(bucketName, key.getKey());
if(null != ossObject){ if(null != ossObject){
...@@ -254,20 +264,36 @@ public class OSSUtil { ...@@ -254,20 +264,36 @@ public class OSSUtil {
int len; int len;
while ((len = inputStream.read(buf)) != -1){ while ((len = inputStream.read(buf)) != -1){
zip.write(buf, 0, len); zip.write(buf, 0, len);
// #region agent log
fileBytesRead += len;
totalBytesRead += len;
// #endregion
} }
} }
// 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。 // 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
IoUtil.close(inputStream); IoUtil.close(inputStream);
zip.closeEntry(); zip.closeEntry();
// #region agent log
try{java.nio.file.Files.write(java.nio.file.Paths.get("e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"),("{\"location\":\"OSSUtil.java:262\",\"message\":\"OSS文件读取完成\",\"data\":{\"fileIndex\":"+fileIndex+",\"fileName\":\""+fileName+"\",\"fileBytesRead\":"+fileBytesRead+",\"totalBytesRead\":"+totalBytesRead+"},\"timestamp\":"+System.currentTimeMillis()+",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H3,H5\"}\n").getBytes(java.nio.charset.StandardCharsets.UTF_8),java.nio.file.StandardOpenOption.CREATE,java.nio.file.StandardOpenOption.APPEND);}catch(Exception ex){}
// #endregion
} }
} }
// 关闭OSSClient。 // 关闭OSSClient。
} catch (OSSException oe) { } catch (OSSException oe) {
ossexceptionlog(oe); ossexceptionlog(oe);
// #region agent log
try{java.nio.file.Files.write(java.nio.file.Paths.get("e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"),("{\"location\":\"OSSUtil.java:266\",\"message\":\"OSS异常\",\"data\":{\"error\":\""+oe.getMessage().replace("\"","\\\"").replace("\\","/").substring(0,Math.min(100,oe.getMessage().length()))+"\",\"errorCode\":\""+oe.getErrorCode()+"\"},\"timestamp\":"+System.currentTimeMillis()+",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H3,H5\"}\n").getBytes(java.nio.charset.StandardCharsets.UTF_8),java.nio.file.StandardOpenOption.CREATE,java.nio.file.StandardOpenOption.APPEND);}catch(Exception ex){}
// #endregion
} catch (ClientException ce) { } catch (ClientException ce) {
clientExceptionLog(ce); clientExceptionLog(ce);
// #region agent log
try{java.nio.file.Files.write(java.nio.file.Paths.get("e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"),("{\"location\":\"OSSUtil.java:268\",\"message\":\"OSS Client异常\",\"data\":{\"error\":\""+ce.getMessage().replace("\"","\\\"").replace("\\","/").substring(0,Math.min(100,ce.getMessage().length()))+"\",\"errorCode\":\""+ce.getErrorCode()+"\"},\"timestamp\":"+System.currentTimeMillis()+",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H3,H5\"}\n").getBytes(java.nio.charset.StandardCharsets.UTF_8),java.nio.file.StandardOpenOption.CREATE,java.nio.file.StandardOpenOption.APPEND);}catch(Exception ex){}
// #endregion
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
// #region agent log
try{java.nio.file.Files.write(java.nio.file.Paths.get("e:\\IdeaProjects\\yifu_mvp\\.cursor\\debug.log"),("{\"location\":\"OSSUtil.java:270\",\"message\":\"IO异常\",\"data\":{\"error\":\""+e.getMessage().replace("\"","\\\"").replace("\\","/").substring(0,Math.min(100,e.getMessage().length()))+"\",\"exceptionClass\":\""+e.getClass().getName()+"\"},\"timestamp\":"+System.currentTimeMillis()+",\"sessionId\":\"debug-session\",\"runId\":\"run1\",\"hypothesisId\":\"H1,H3,H4,H5\"}\n").getBytes(java.nio.charset.StandardCharsets.UTF_8),java.nio.file.StandardOpenOption.CREATE,java.nio.file.StandardOpenOption.APPEND);}catch(Exception ex){}
// #endregion
} finally { } finally {
IoUtil.close(inputStream); IoUtil.close(inputStream);
} }
......
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