From 9ef284e9f3a8e3da2c17b0ec8773e7c68e8aff39 Mon Sep 17 00:00:00 2001
From: xiang2lin <251481237@qq.com>
Date: Tue, 8 Apr 2025 18:39:30 +0800
Subject: [PATCH] =?UTF-8?q?=E6=8A=A5=E9=94=80=E5=8D=95=E9=99=84=E4=BB=B6?=
=?UTF-8?q?=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../oerannex/entity/OerAnnexEntity.xml | 3 +-
.../nxproof/oerdjml/dto/FileInfoDTO.java | 21 ++++-
.../service/impl/OerDjmlExtServiceImpl.java | 90 +++++++++++++------
.../service/impl/OerDjmlServiceImpl.java | 35 +++++++-
.../nxproof/oerdjml/util/OerDjmlUtil.java | 22 +++++
5 files changed, 138 insertions(+), 33 deletions(-)
create mode 100644 fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerdjml/util/OerDjmlUtil.java
diff --git a/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerannex/entity/OerAnnexEntity.xml b/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerannex/entity/OerAnnexEntity.xml
index fd4cde53..32521682 100644
--- a/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerannex/entity/OerAnnexEntity.xml
+++ b/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerannex/entity/OerAnnexEntity.xml
@@ -77,8 +77,7 @@
FROM
OER_ANNEX
- KJND = #{kjnd}
- and GSDM = #{gsdm}
+ GSDM = #{gsdm}
diff --git a/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerdjml/dto/FileInfoDTO.java b/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerdjml/dto/FileInfoDTO.java
index 9604dd9d..783faf6a 100644
--- a/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerdjml/dto/FileInfoDTO.java
+++ b/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerdjml/dto/FileInfoDTO.java
@@ -9,7 +9,10 @@ public class FileInfoDTO {
private byte[] data;//附件压缩成zip后的数据
private String file_name;//附件名字
private String file_size;//附件大小
-
+ //压缩后附件路径
+ private String zip_file_path;
+ //原始附件路径
+ private String original_file_path;
public byte[] getData() {
return data;
}
@@ -33,4 +36,20 @@ public class FileInfoDTO {
public void setFile_size(String file_size) {
this.file_size = file_size;
}
+
+ public String getZip_file_path() {
+ return zip_file_path;
+ }
+
+ public void setZip_file_path(String zip_file_path) {
+ this.zip_file_path = zip_file_path;
+ }
+
+ public String getOriginal_file_path() {
+ return original_file_path;
+ }
+
+ public void setOriginal_file_path(String original_file_path) {
+ this.original_file_path = original_file_path;
+ }
}
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 61d22b18..59c9238d 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
@@ -5,6 +5,7 @@ import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
+import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
@@ -17,6 +18,7 @@ import com.hzya.frame.grpU8.nxproof.oerdjml.entity.OerDjmlEntity;
import com.hzya.frame.grpU8.nxproof.oerdjml.entity.RestUtil;
import com.hzya.frame.grpU8.nxproof.oerdjml.enums.ColEventTypeEnum;
import com.hzya.frame.grpU8.nxproof.oerdjml.service.IOerDjmlExtService;
+import com.hzya.frame.grpU8.nxproof.oerdjml.util.OerDjmlUtil;
import com.hzya.frame.grpU8.nxproof.oerdjnr.entity.OerDjnrEntity;
import com.hzya.frame.grpU8.nxproof.oeryszb.entity.OerYszbEntity;
import com.hzya.frame.sysnew.application.database.entity.SysApplicationDatabaseEntity;
@@ -236,7 +238,7 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService {
djml.setCurshjd("-9");
djml.setNextshjd("999");
djml.setFlowcode(flowcode);
- djml.setJsfs(spliceStr(forsonData0.getString("field0042"),forsonData0.getString("field0043")));//结算方式
+ djml.setJsfs(OerDjmlUtil.spliceStr(forsonData0.getString("field0042"),forsonData0.getString("field0043")));//结算方式
djml.setTel("");//电话
djml.setSsrq(DateUtil.format(formmainData.getDate("field0039"),"yyyyMMddHHmmssSSS"));//送审日期
djml.setSsrid(formmainData.getString("field0037"));//送审人id
@@ -341,16 +343,14 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService {
djml.setZt("3");
djml.setCurshjd("999");
djml.setNextshjd("-1");
+ djml.setCrerdm(formmainData.getString("field0037"));//制单人代码
+ djml.setCrermc(formmainData.getString("field0038"));//制单人名称
//查询协同附件
- List fileInfoList = fileDownload(summaryId, fileApiCode);
- logger.info("接收文件22222");
+ List fileInfoList = fileDownloadV1(summaryId, fileApiCode);
djml.setFileInfoList(fileInfoList);
- logger.info("set文件33333");
}
- logger.info("序列化djml对象444444");
String djmlStr = JSONObject.toJSONString(djml);
- //logger.info("费用报销单报文:{}",djmlStr);
- logger.info("序列化djml完成55555");
+ logger.info("费用报销单报文:{}",djmlStr);
return djmlStr;
}
@@ -408,7 +408,7 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService {
djml.setCurshjd("-9");
djml.setNextshjd("999");
djml.setFlowcode(flowcode);
- djml.setJsfs(spliceStr(forjsonData0.getString("field0086"), forjsonData0.getString("field0042")));
+ djml.setJsfs(OerDjmlUtil.spliceStr(forjsonData0.getString("field0086"), forjsonData0.getString("field0042")));
//电话
djml.setTel(formmainData.getString("field0005"));
djml.setClf_ccr(formmainData.getString("field0089"));
@@ -546,7 +546,7 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService {
djml.setCurshjd("999");
djml.setNextshjd("-1");
//查询协同附件
- List fileInfoList = fileDownload(summaryId, fileApiCode);
+ List fileInfoList = fileDownloadV1(summaryId, fileApiCode);
djml.setFileInfoList(fileInfoList);
}
String djmlStr = JSONObject.toJSONString(djml);
@@ -578,7 +578,8 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService {
}
return timestamp;
}
- public List fileDownload(String summaryId, String apiCode) {
+ //这个方法暂时没用
+ public List fileDownloadDiscard(String summaryId, String apiCode) {
try {
List colAttachmentList = restUtil.getColAttachments(summaryId, "0", apiCode, null);
// 下载协同附件
@@ -646,6 +647,56 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService {
return null;
}
+ //从OA下载附件
+ public List fileDownloadV1(String summaryId, String apiCode) {
+ Assert.notEmpty(summaryId,"summaryId不能为空");
+ Assert.notEmpty(apiCode,"apiCode不能为空");
+ try {
+ //1、查询协同附件
+ List colAttachmentList = restUtil.getColAttachments(summaryId, "0", apiCode, null);
+ //2、下载协同附件
+ if (CollectionUtils.isNotEmpty(colAttachmentList)){
+ //获取OA token
+ String token = restUtil.getToken(null, apiCode);
+ List fileList = new ArrayList<>();
+ String today = DateUtil.today();
+ String basePath = DSK + File.separator + today + File.separator;
+ // 确保目录存在
+ if (!FileUtil.isDirectory(basePath)) {
+ FileUtil.mkdir(basePath);
+ }
+ for (GrpU8CollAttachmentResDTO att : colAttachmentList) {
+ String fileName = URLDecoder.decode(att.getFilename(), "UTF-8");
+ String fileUrl = att.getFileUrl();
+ byte[] bytes = restUtil.downloadFileBytes(null, apiCode, att.getFileUrl(), fileName, token);
+ String filePath = basePath + att.getFileUrl() + "." + att.getExtension();
+ File file = new File(filePath);
+ // 使用 FileOutputStream 写入字节数组到文件
+ try (FileOutputStream fos = new FileOutputStream(file)) {
+ fos.write(bytes);
+ }
+ //3、把协同附件压缩成.zip
+ if (null != file){
+ String zipPath = basePath + att.getFileUrl() + ".zip";
+ ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipPath), Charset.forName("GBK"));
+ writeZipFile(file, zos, fileName,fileUrl);
+ zos.close();
+ //4、返回.zip附件路径
+ FileInfoDTO fileInfo = new FileInfoDTO();
+ fileInfo.setZip_file_path(zipPath);
+ fileInfo.setOriginal_file_path(filePath);
+ fileInfo.setFile_name(fileName);
+ fileInfo.setFile_size(att.getSize());
+ fileList.add(fileInfo);
+ }
+ }
+ return fileList;
+ }
+ }catch(Exception e){
+ logger.error("下载OA附件出错:{}",e);
+ }
+ return null;
+ }
/**
* 把文件压缩成zip
* @param file 要压缩的文件
@@ -658,37 +709,22 @@ public class OerDjmlExtServiceImpl implements IOerDjmlExtService {
try (FileInputStream fos = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fos)) {
logger.info("=====压缩文件=====");
- zos.putNextEntry(new ZipEntry(fileName + fileUrl));
+ zos.putNextEntry(new ZipEntry(fileUrl+fileName ));
int len;
byte[] buf = new byte[1024];
while ((len = bis.read(buf, 0, 1024)) != -1) {
zos.write(buf, 0, len);
}
- zos.closeEntry();
logger.info("=====压缩完成=====");
} catch (Exception e) {
e.printStackTrace();
logger.error("=====压缩文件出错=====:{}", e);
- try {
- zos.closeEntry();
- } catch (IOException ex) {
- throw new RuntimeException(ex);
- }
}
}
}
- /**
- * code和name拼接[]
- * @param code
- * @param name
- * @return 格式:03[公务卡]
- */
- private String spliceStr(String code,String name){
- String template = "{}[{}]";
- return StrUtil.format(template,code,name);
- }
+
public enum DjlxEnum {
TRAVEL("travel","差旅报销单"),
diff --git a/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerdjml/service/impl/OerDjmlServiceImpl.java b/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerdjml/service/impl/OerDjmlServiceImpl.java
index 14985eb5..72b7a605 100644
--- a/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerdjml/service/impl/OerDjmlServiceImpl.java
+++ b/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerdjml/service/impl/OerDjmlServiceImpl.java
@@ -23,6 +23,7 @@ import com.hzya.frame.grpU8.nxproof.oerdjml.entity.GbiZbsyrecAllEntity;
import com.hzya.frame.grpU8.nxproof.oerdjml.entity.OerDjmlEntity;
import com.hzya.frame.grpU8.nxproof.oerdjml.enums.ColEventTypeEnum;
import com.hzya.frame.grpU8.nxproof.oerdjml.service.IOerDjmlService;
+import com.hzya.frame.grpU8.nxproof.oerdjml.util.OerDjmlUtil;
import com.hzya.frame.grpU8.nxproof.oerdjnr.dao.IOerDjnrDao;
import com.hzya.frame.grpU8.nxproof.oerdjnr.entity.OerDjnrEntity;
import com.hzya.frame.grpU8.nxproof.oeryszb.dao.IOerYszbDao;
@@ -41,6 +42,10 @@ import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
+import java.io.BufferedInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Date;
@@ -837,14 +842,16 @@ public class OerDjmlServiceImpl implements IOerDjmlService {
delete.setGsdm(oerDjmlAllEntities.get(0).getGsdm());
delete.setDataSourceCode(entity.getDataSourceCode());
oerAnnexDao.deleteAnnex(delete);
- int no = 1;
+ int no = 0;
for (FileInfoDTO fileInfo : entity.getFileInfoList()) {
try {
AttachmentFileEntity fileEntity = new AttachmentFileEntity();
fileEntity.setDataSourceCode(entity.getDataSourceCode());
String fileName = URLDecoder.decode(fileInfo.getFile_name(), "UTF-8");
fileEntity.setaTFileName(fileName);
- fileEntity.setaTFile(fileInfo.getData());
+ fileEntity.setaTFile(file2bytes(fileInfo.getZip_file_path()));
+ fileEntity.setCreateID(OerDjmlUtil.spliceStr(entity.getCrerdm(),entity.getCrermc()));
+ fileEntity.setUpdateID(OerDjmlUtil.spliceStr(entity.getCrerdm(),entity.getCrermc()));
saveAttachment(fileEntity);
//保存附件关系
OerAnnexEntity annexEntity = new OerAnnexEntity();
@@ -870,7 +877,7 @@ public class OerDjmlServiceImpl implements IOerDjmlService {
annexEntity.setShowSize(showSize);
}
- annexEntity.setFjType("其它");
+ //annexEntity.setFjType("其它");
oerAnnexDao.saveData(annexEntity);
no++;
}catch (Exception e){
@@ -887,6 +894,28 @@ public class OerDjmlServiceImpl implements IOerDjmlService {
return BaseResult.getSuccessMessageEntity("处理成功");
}
+ //附件转成字节数组
+ private byte[] file2bytes(String filePath){
+ if (null != filePath){
+ File zipFile = new File(filePath);
+ if (null != zipFile){
+ try(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;
+ while (-1 != (len = bufferedInputStream.read(buffer, 0, buf_size))) {
+ byteArrayOutputStream.write(buffer, 0, len);
+ }
+ byte[] fileByte = byteArrayOutputStream.toByteArray();
+ return fileByte;
+ }catch (Exception ex){
+ logger.error("附件转成字节数组出错:{}",ex);
+ }
+ }
+ }
+ return null;
+ }
public String queryMaxId(OerAnnexEntity entity) {
if (null == entity){
entity = new OerAnnexEntity();
diff --git a/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerdjml/util/OerDjmlUtil.java b/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerdjml/util/OerDjmlUtil.java
new file mode 100644
index 00000000..f2e1e01a
--- /dev/null
+++ b/fw-grpU8/src/main/java/com/hzya/frame/grpU8/nxproof/oerdjml/util/OerDjmlUtil.java
@@ -0,0 +1,22 @@
+package com.hzya.frame.grpU8.nxproof.oerdjml.util;
+
+import cn.hutool.core.util.StrUtil;
+
+/**
+ * @Description 报销单工具类
+ * @Author xiangerlin
+ * @Date 2025/4/8 18:01
+ **/
+public class OerDjmlUtil {
+
+ /**
+ * code和name拼接[]
+ * @param code
+ * @param name
+ * @return 格式:03[公务卡]
+ */
+ public static String spliceStr(String code,String name){
+ String template = "{}[{}]";
+ return StrUtil.format(template,code,name);
+ }
+}