From 59c99bb025ea2ca72325711638a5ac1a22e9498a Mon Sep 17 00:00:00 2001 From: wangzhijiang Date: Mon, 15 May 2023 16:45:06 +0800 Subject: [PATCH] =?UTF-8?q?OTA-=E7=A1=AC=E4=BB=B6=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E7=94=9F=E6=88=90word=E6=96=87=E4=BB=B6=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/OtaBaSjSjxtbhServiceImpl.java | 76 ++++++++++++++++++- .../jero/modules/project/util/WordUtil.java | 36 ++++++++- 2 files changed, 107 insertions(+), 5 deletions(-) diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/impl/OtaBaSjSjxtbhServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/impl/OtaBaSjSjxtbhServiceImpl.java index 54a126f67..000e93844 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/impl/OtaBaSjSjxtbhServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/ota/service/impl/OtaBaSjSjxtbhServiceImpl.java @@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.jero.common.exception.JeroBootException; +import com.jero.modules.oss.entity.OSSFile; import com.jero.modules.oss.service.IOSSFileService; import com.jero.modules.ota.entity.*; import com.jero.modules.ota.enums.OtaModuleEnum; @@ -13,21 +14,29 @@ import com.jero.modules.ota.mapper.OtaBaSjSjxtbhMapper; import com.jero.modules.ota.service.IOtaBaCxTxjlService; import com.jero.modules.ota.service.IOtaBaSjGnxtwhService; import com.jero.modules.ota.service.IOtaBaSjSjxtbhService; +import com.jero.modules.ota.service.IOtaBaSjSjyxpgService; import com.jero.modules.ota.utils.ComparisonUtil; import com.jero.modules.ota.utils.ImportFileUtil; +import com.jero.modules.project.util.WordUtil; +import com.jero.modules.split.common.FileUnZip; import com.jero.modules.system.service.ISysDictService; +import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.ObjectUtils; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.ss.usermodel.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.mock.web.MockMultipartFile; import org.springframework.stereotype.Service; import java.io.File; +import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.IOException; import java.lang.reflect.Field; import java.util.*; +import java.util.stream.Collectors; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.web.multipart.MultipartFile; @@ -61,6 +70,9 @@ public class OtaBaSjSjxtbhServiceImpl extends ServiceImpl otaBaSjSjxtbh = this.getByOtaId(otaId); + List oldYjbbList = otaBaSjSjxtbh.stream().map(OtaBaSjSjxtbh::getYjbb).distinct().collect(Collectors.toList()); + List oldTempFileNameList = new ArrayList<>(); + oldYjbbList.forEach(sjSjxtbh -> { + oldTempFileNameList.add(sjSjxtbh.replaceAll("见","") + ".docx"); + }); + + int tempFileIndex = 1; + String tempFilePath = uploadPath + "tempFile" + "/" + otaId; + File tempFile = new File(tempFilePath); + if(!tempFile.exists()){ + tempFile.mkdirs(); + } + List tempFileNames = new ArrayList<>(); for (int i = 4; i < rows; i++) { OtaBaSjSjxtbh xtbh = new OtaBaSjSjxtbh(); Row row = s.getRow(i); @@ -253,7 +280,17 @@ public class OtaBaSjSjxtbhServiceImpl extends ServiceImpl 50){ + String fileName = "附件" + tempFileIndex + ".docx"; + String tempFileUrl = WordUtil.createWord(tempFilePath, fileName, yjbb); + if (StringUtils.isNotEmpty(tempFileUrl)) { + tempFileNames.add(fileName); + } + yjbb = "见附件" + tempFileIndex; + tempFileIndex ++; + } + xtbh.setYjbb(yjbb); cell = row.getCell(4); xtbh.setSjqrjbb(ImportFileUtil.getCellValue(cell, wb)); cell = row.getCell(5); @@ -279,6 +316,43 @@ public class OtaBaSjSjxtbhServiceImpl extends ServiceImpl newClfjList = new ArrayList<>(); + List oldClfjList = new ArrayList<>(); + OtaBaSjSjyxpg otaBaSjSjyxpg = this.otaBaSjSjyxpgService.queryByOtaId(otaId, null); + if(StringUtils.isNotEmpty(otaBaSjSjyxpg.getClfj())){ + List clfjFileList = this.ossFileService.getFileInfos(otaBaSjSjyxpg.getClfj()); + oldClfjList = clfjFileList.stream().filter(clfjFile -> { + boolean flag = true; + for (String oldTempFileName : oldTempFileNameList) { + if (StringUtils.equals(clfjFile.getFileName(), oldTempFileName)) { + flag = false; + break; + } + } + return flag; + }).map(OSSFile::getId).collect(Collectors.toList()); + } + // 读取临时文件,上传至服务器。 + for (String tempFileName : tempFileNames) { + try { + FileInputStream input = new FileInputStream(tempFilePath + "/" + tempFileName); + MultipartFile multipartFile = new MockMultipartFile(tempFileName, tempFileName, "text/plain", input); + OSSFile ossFile = this.ossFileService.uploadLocalOfCos(multipartFile, "", null,null); + if (ObjectUtils.isNotEmpty(ossFile)) { + newClfjList.add(ossFile.getId()); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + if(ObjectUtils.isNotEmpty(otaBaSjSjyxpg)){ + newClfjList.addAll(oldClfjList); + otaBaSjSjyxpg.setClfj(StringUtils.join(newClfjList.stream().distinct().collect(Collectors.toList()), ",")); + this.otaBaSjSjyxpgService.updateById(otaBaSjSjyxpg); + } + } + FileUnZip.deleteDir(tempFile); return list; } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/WordUtil.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/WordUtil.java index e21195135..11987bc8b 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/WordUtil.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/project/util/WordUtil.java @@ -1,6 +1,9 @@ package com.jero.modules.project.util; import cn.hutool.core.collection.CollectionUtil; +import org.apache.poi.xwpf.usermodel.XWPFDocument; +import org.apache.poi.xwpf.usermodel.XWPFParagraph; +import org.apache.poi.xwpf.usermodel.XWPFRun; import org.docx4j.Docx4J; import org.docx4j.TraversalUtil; import org.docx4j.XmlUtils; @@ -22,10 +25,7 @@ import org.slf4j.LoggerFactory; import org.springframework.util.FileCopyUtils; import javax.xml.bind.JAXBElement; -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStream; -import java.io.OutputStream; +import java.io.*; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -632,5 +632,33 @@ public class WordUtil { addImageInlineAndTextToPackage(wordMLPackage, bytes, "这是图3,name.png,看图片的嵌入方式"); wordMLPackage.save(new File("d:/opt/测试" + System.currentTimeMillis() + ".docx")); } + + /** + * 创建word文件。 + * @param path + * @param fileName + * @param content + * @return + */ + public static String createWord(String path,String fileName,String content){ + String result = ""; + try { + result = path + "/" +fileName; + XWPFDocument document = new XWPFDocument(); + // 段落 + XWPFParagraph paragraph = document.createParagraph(); + // 添加文本 + XWPFRun run = paragraph.createRun(); + run.setText(content); + + FileOutputStream out = new FileOutputStream(new File(result)); + document.write(out); + out.close(); + log.info(fileName + " Word文件创建成功!"); + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } }