Commit 9a7278aa authored by huyuchen's avatar huyuchen

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

parent 1f1bd8e7
......@@ -243,6 +243,9 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
// 2. 校验文件总大小是否超过500MB
long totalSize = calculateTotalFileSize(downloadMap);
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) {
log.warn("批量下载文件总大小超过限制,总大小:{}MB,限制:500MB", totalSize / 1024 / 1024);
response.setContentType("application/json;charset=UTF-8");
......@@ -261,17 +264,37 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
response.setHeader(CommonConstants.CONTENT_DISPOSITION,
"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输出流
try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream())) {
// 5. 下载并打包档案文件
// #region agent log
long totalBytesWritten = 0;
int folderIndex = 0;
// #endregion
for (Map.Entry<String, ArchiveDownloadInfo> entry : downloadMap.entrySet()) {
String folderName = entry.getKey();
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 {
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来匹配,确保所有资料类型的反馈都被更新
Set<String> materialTypes = downloadInfo.getMaterialTypeAttaMap().keySet();
......@@ -301,13 +324,25 @@ public class TElectronicArchiveDetailServiceImpl extends ServiceImpl<TElectronic
}
// 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);
// #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();
// #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) {
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 {
log.error("oss客户端获取错误,无此客户端",clientIndex);
}else{
OSSObject ossObject = null;
// #region agent log
int fileIndex = 0;
long totalBytesRead = 0;
// #endregion
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 = client.getObject(bucketName, key.getKey());
if(null != ossObject){
......@@ -254,20 +264,36 @@ public class OSSUtil {
int len;
while ((len = inputStream.read(buf)) != -1){
zip.write(buf, 0, len);
// #region agent log
fileBytesRead += len;
totalBytesRead += len;
// #endregion
}
}
// 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
IoUtil.close(inputStream);
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。
} catch (OSSException 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) {
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) {
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 {
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