From cbeb66f9dd7273e45494b16aec066a492472258a Mon Sep 17 00:00:00 2001 From: xiang2lin <251481237@qq.com> Date: Mon, 7 Apr 2025 17:24:30 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=93=E5=8D=B0=E6=97=A5=E5=BF=97=E6=8A=A5?= =?UTF-8?q?=E9=94=99=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../nxproof/oerdjml/entity/OerDjmlEntity.xml | 7 +- .../service/impl/OerDjmlExtServiceImpl.java | 132 ++++++++++-------- 2 files changed, 78 insertions(+), 61 deletions(-) diff --git a/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerdjml/entity/OerDjmlEntity.xml b/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerdjml/entity/OerDjmlEntity.xml index d3c90a45..aaaee1eb 100644 --- a/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerdjml/entity/OerDjmlEntity.xml +++ b/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerdjml/entity/OerDjmlEntity.xml @@ -528,11 +528,8 @@ GSDM,KJND,mlId ZT = #{zt}, curshjd = #{curshjd}, nextshjd = #{nextshjd}, - ssrid = #{ssrid}, - ssr = #{ssr}, - ssrq = #{ssrq}, - shrid = #{ssrid}, - shrq = #{shrq} + shrid = #{shrId}, + shrq = #{shrq} where MLID = #{mlId} and DJBH = #{djbh} diff --git a/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerdjml/service/impl/OerDjmlExtServiceImpl.java b/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerdjml/service/impl/OerDjmlExtServiceImpl.java index 83f00e53..c0bba35c 100644 --- a/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerdjml/service/impl/OerDjmlExtServiceImpl.java +++ b/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerdjml/service/impl/OerDjmlExtServiceImpl.java @@ -338,10 +338,14 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService { djml.setNextshjd("-1"); //查询协同附件 List fileInfoList = fileDownload(summaryId, fileApiCode); + logger.info("接收文件22222"); djml.setFileInfoList(fileInfoList); + logger.info("set文件33333"); } + logger.info("序列化djml对象444444"); String djmlStr = JSONObject.toJSONString(djml); - logger.info("费用报销单报文:{}",djmlStr); + //logger.info("费用报销单报文:{}",djmlStr); + logger.info("序列化djml完成55555"); return djmlStr; } @@ -569,91 +573,107 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService { } return timestamp; } - - /** - * 附件下载并压缩成zip - * @param summaryId - * @param apiCode - * @return - */ - private List fileDownload(String summaryId,String apiCode){ + public List fileDownload(String summaryId, String apiCode) { try { List colAttachmentList = restUtil.getColAttachments(summaryId, "0", apiCode, null); - //下载协同附件 - if (CollectionUtils.isNotEmpty(colAttachmentList)){ + // 下载协同附件 + if (CollectionUtils.isNotEmpty(colAttachmentList)) { String token = restUtil.getToken(null, apiCode); List fileList = new ArrayList<>(); - for (GrpU8CollAttachmentResDTO att : colAttachmentList) { - FileInfoDTO fileInfoDTO = new FileInfoDTO(); + String today = DateUtil.today(); + String zipPath = DSK + File.separator + today + File.separator + "attachments.zip"; - String fileName = URLDecoder.decode(att.getFilename(), "UTF-8"); - byte[] bytes = restUtil.downloadFileBytes(null, apiCode, att.getFileUrl(), fileName,token); - if (!FileUtil.isDirectory(DSK+ File.separator+DateUtil.today())){ - FileUtil.mkdir(DSK+ File.separator+DateUtil.today()); - } - String filePath = DSK+ File.separator+DateUtil.today()+File.separator+att.getFileUrl()+"."+att.getExtension(); - File file = new File(filePath); - // 使用 FileOutputStream 写入字节数组到文件 - try (FileOutputStream fos = new FileOutputStream(file)) { - fos.write(bytes); - } - if (null != file){ - String zipPath = DSK+File.separator+DateUtil.today()+File.separator+att.getFileUrl()+".zip"; - ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipPath), Charset.forName("GBK")); - writeZipFile(file, zos, fileName); - zos.close(); - // 获取压缩文件的字节数组 - File zipFile = new File(zipPath); - ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream((int) zipFile.length()); - BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(zipFile)); - int buf_size = 1024; - byte[] buffer = new byte[buf_size]; - int len = 0; - while (-1 != (len = bufferedInputStream.read(buffer, 0, buf_size))) { - byteArrayOutputStream.write(buffer, 0, len); - } - byte[] fileByte = byteArrayOutputStream.toByteArray(); - fileInfoDTO.setData(fileByte); - fileInfoDTO.setFile_size(att.getSize()); - fileInfoDTO.setFile_name(fileName); - fileList.add(fileInfoDTO); - } + // 确保目录存在 + if (!FileUtil.isDirectory(DSK + File.separator + today)) { + FileUtil.mkdir(DSK + File.separator + today); + } + + // 创建 ZipOutputStream + try (ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipPath), Charset.forName("GBK"))) { + for (GrpU8CollAttachmentResDTO att : colAttachmentList) { + FileInfoDTO fileInfoDTO = new FileInfoDTO(); + + String fileName = URLDecoder.decode(att.getFilename(), "UTF-8"); + String fileUrl = att.getFileUrl(); + byte[] bytes = restUtil.downloadFileBytes(null, apiCode, att.getFileUrl(), fileName, token); + String filePath = DSK + File.separator + today + File.separator + att.getFileUrl() + "." + att.getExtension(); + File file = new File(filePath); + + // 使用 FileOutputStream 写入字节数组到文件 + try (FileOutputStream fos = new FileOutputStream(file)) { + fos.write(bytes); + } + + if (null != file) { + // 将文件添加到压缩包 + writeZipFile(file, zos, fileName, fileUrl); + + // 读取压缩文件的字节数组 + File zipFile = new File(zipPath); + ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream((int) zipFile.length()); + try (BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(zipFile))) { + int buf_size = 1024; + byte[] buffer = new byte[buf_size]; + int len; + while (-1 != (len = bufferedInputStream.read(buffer, 0, buf_size))) { + byteArrayOutputStream.write(buffer, 0, len); + } + byte[] fileByte = byteArrayOutputStream.toByteArray(); + fileInfoDTO.setData(fileByte); + fileInfoDTO.setFile_size(att.getSize()); + fileInfoDTO.setFile_name(fileName); + fileList.add(fileInfoDTO); + logger.info("压缩后的文件读取字节数组完成"); + } catch (Exception e) { + logger.error("压缩附件&读取字节数组出错:{}", e); + } + } + } + logger.info("压缩文件1111111"); + return fileList; + } catch (Exception ex) { + logger.error("压缩附件添加到fileList出错:{}", ex); } - return fileList; } - }catch (Exception e){ - logger.error("下载附件出错:{}",e); + } catch (Exception e) { + logger.error("下载附件出错:{}", e); } return null; } + /** * 把文件压缩成zip * @param file 要压缩的文件 * @param zos 文件压缩流 * @param fileName 文件名 + * @param fileUrl 文件id */ - private void writeZipFile(File file, ZipOutputStream zos, String fileName) { + private void writeZipFile(File file, ZipOutputStream zos, String fileName, String fileUrl) { if (null != file && null != zos) { - try { + try (FileInputStream fos = new FileInputStream(file); + BufferedInputStream bis = new BufferedInputStream(fos)) { logger.info("=====压缩文件====="); - zos.putNextEntry(new ZipEntry(fileName)); - FileInputStream fos = new FileInputStream(file); - BufferedInputStream bis = new BufferedInputStream(fos); + zos.putNextEntry(new ZipEntry(fileName + fileUrl)); int len; byte[] buf = new byte[1024]; while ((len = bis.read(buf, 0, 1024)) != -1) { zos.write(buf, 0, len); } - bis.close(); - fos.close(); + zos.closeEntry(); logger.info("=====压缩完成====="); } catch (Exception e) { e.printStackTrace(); - logger.error("=====压缩文件出错====="); + logger.error("=====压缩文件出错=====:{}", e); + try { + zos.closeEntry(); + } catch (IOException ex) { + throw new RuntimeException(ex); + } } } } + /** * code和name拼接[] * @param code