From d0d400d13686971c928bd1723a7725b39056482f Mon Sep 17 00:00:00 2001 From: liyawei Date: Thu, 6 Oct 2022 23:48:42 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3=E6=8B=86=E5=88=86-PDF?= =?UTF-8?q?=E6=8B=86=E5=88=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../split/service/impl/FileSpiltService.java | 662 ++++-- .../service/impl/FileSplitPdfService.java | 1849 +++++++++++++++++ .../impl/SarFileSplitInfoServiceImpl.java | 57 +- .../splitting/modules/SplitText.vue | 6 +- 4 files changed, 2369 insertions(+), 205 deletions(-) create mode 100644 jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/FileSplitPdfService.java diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/FileSpiltService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/FileSpiltService.java index af9c9838a..130f6b31f 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/FileSpiltService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/FileSpiltService.java @@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.jero.common.exception.JeroBootException; import com.jero.common.system.vo.LoginUser; import com.jero.common.util.oss.CosBootUtil; -import com.jero.modules.document.utils.ReadPdfUtil; import com.jero.modules.ocr.util.UUIDUtils; import com.jero.modules.oss.entity.OSSFile; import com.jero.modules.oss.service.IOSSFileService; @@ -61,6 +60,8 @@ public class FileSpiltService { private ISarFileSplitItemsValEOService iSarFileSplitItemsValEOService; @Autowired private IOSSFileService iossFileService; + @Autowired + private FileSplitPdfService fileSplitPdfService; @Value("${jero.path.upload}") private String filePath; @@ -110,9 +111,8 @@ public class FileSpiltService { List nowStart = new ArrayList<>(); // if (sarFileSplitInfoEO.getStartNumber()<4){ - //从第四个开始拆解 - nowStart.add("3.1"); - nowStart.add("4"); + //从第二个开始拆解 + nowStart.add("2"); // } else { // nowStart.add(String.valueOf(sarFileSplitInfoEO.getStartNumber())); // } @@ -154,27 +154,20 @@ public class FileSpiltService { // 记录word自动生成的编号数据 Map numberMap = new HashMap(); boolean menuCanAdd = false; // 判断当前目录下是否可以正常填写数据 - boolean startFlag = false; // 判断开始拆分的起始段落,因为需要从标题:范围 开始拆,但会受目录的影响 - int count = 0; // 记录标题:范围 出现的次数 - for (IBodyElement element : elements) { + boolean firstFlag = true; + List startDigitList = getStartDigit(elements, enumByValue); + String regex = "^[0-9]*$"; + String preName = ""; + int preNameNum = 0; +// for (IBodyElement element : elements) { + for (int g=0; g< elements.size(); g++) { + IBodyElement element = elements.get(g); // 段落 if (element instanceof XWPFParagraph) { XWPFParagraph p = (XWPFParagraph) element; // 处理段落生成编号不识别问题 String paragraphString = p.getText(); - if ("前言".equals(getChinese(paragraphString))) { - count++; - if (count > 1) { - startFlag = true; - } - - continue; - } else { - if(!startFlag) { - continue; - } - } if (StringUtils.isNotBlank(paragraphString)) { paragraphString = paragraphString.replace((char) 12288, ' '); paragraphString = paragraphString.trim(); @@ -192,6 +185,15 @@ public class FileSpiltService { paragraphString = paragraphString.replaceAll("\r\n",""); paragraphString = paragraphString.replaceAll("\n",""); paragraphString = paragraphString.trim(); + + if ("前言".equals(getChinese(paragraphString)) && (paragraphString.replaceAll("\t", "") + .replaceAll("\b", "").replaceAll(" ", "").length() == 2)) { // 前言后面有文本,判定为是目录中的前言 + firstFlag = false; + } + if(firstFlag) { + continue; + } + if(StringUtils.isEmpty(paragraphString)){ // 处理当前段落仅为图片的情况 List imageBundleList = readImageInParagraph((XWPFParagraph) p); @@ -239,13 +241,16 @@ public class FileSpiltService { if (sarFileSplitInfoEO.getStartNumber() <= 1 && sarFileSplitInfoEO.getStopNumber() >= 1) { messageList.add(message); treeList.add(documentTreeEO1); + preName = getOneStartDigit(paragraphString, enumByValue);; + preNameNum = g; menuCanAdd = true; } else { menuCanAdd = false; } messageNumber++; } - } else if (messageNumber == 1) { + } + /*else if (messageNumber == 1) { ptest = Pattern.compile("^2\\s{0,50}规范性引用文件"); matcher = ptest.matcher(paragraphString); if (matcher.find()) { @@ -312,11 +317,21 @@ public class FileSpiltService { addItermsConditionsText(messageList.get(messageList.size() - 1), itemValList, p.getText()); } } - } else if (messageNumber >= 3) { + } */ + else if (messageNumber >= 1) { ptest = Pattern.compile("^[\\d.]*$"); boolean hasGoIf = false; + String startDigit = getOneStartDigit(paragraphString, enumByValue); for (int i = 0; i < nowStart.size(); i++) { - if (paragraphString.startsWith(nowStart.get(i))) { +// if (paragraphString.startsWith(nowStart.get(i))) { + if (startDigit.equals(nowStart.get(i))) { + // 判断真的是标题还是干扰项 TODO + if (nowStart.get(i).matches(regex)) { + boolean result = fileSplitPdfService.judge(preName, preNameNum, startDigit, g, startDigitList, "."); + if (result) { + continue; + } + } // 判断名称,如果大于10位,取十位, String itemName = paragraphString.substring(nowStart.get(i).length()).length() > 10 ? paragraphString.substring(nowStart.get(i).length(), nowStart.get(i).length() + 10) : paragraphString.substring(nowStart.get(i).length()); List clauseContent = new ArrayList<>(); @@ -330,6 +345,8 @@ public class FileSpiltService { // 增加一条数据,需要在数结构中加一条数据 SarFileSplitMenuEO sarFileSplitMenuEO = getTreeList(nowStart.get(i), treeList, generalCatalogueId, sarFileSplitInfoEO, treeListDisplay++, itemName, enumByValue); treeList.add(sarFileSplitMenuEO); + preName = startDigit; + preNameNum = g; message.setMenuId(sarFileSplitMenuEO.getId()); if(!StringUtils.isEmpty(itemName)){ addItermsConditionsText(message, itemValList, paragraphString.substring(nowStart.get(i).length())); @@ -416,18 +433,16 @@ public class FileSpiltService { * @return */ public int fileGSO(SarFileSplitInfoEO sarFileSplitInfoEO, SplitFileTypeTypeEnum enumByValue) { - // 拆分文件主表中插入数据 if (sarFileSplitInfoEO.getStopNumber() <= 0) { sarFileSplitInfoEO.setStopNumber(200); } if (sarFileSplitInfoEO.getStartNumber() <= 0) { sarFileSplitInfoEO.setStartNumber(1); } -// dao.insertSelective(sarFileSplitInfoEO); // 拆分文件条款表中最终插入数据 List messageList = new ArrayList<>(); -// int messageNumber = 0; + int messageNumber = 0; // 拆分文件目录表中最终插入数据 List treeList = new ArrayList<>(); // 拆分文件条款详情表中最终插入数据 @@ -447,94 +462,89 @@ public class FileSpiltService { List nowStart = new ArrayList<>(); nowStart.add("1"); - try { +// if (sarFileSplitInfoEO.getStartNumber()<4){ +// } else { +// nowStart.add(String.valueOf(sarFileSplitInfoEO.getStartNumber())); +// } + //获取文件地址 + String connectId = sarFileSplitInfoEO.getConnectId(); + String fileName = sarFileSplitInfoEO.getFileName(); + if (StringUtils.isEmpty(connectId) || StringUtils.isEmpty(fileName)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(OSSFile::getConnectId, connectId); + queryWrapper.eq(OSSFile::getFileName, fileName); + queryWrapper.orderByDesc(OSSFile::getCreateTime); + List ossFileList = iossFileService.list(queryWrapper); + if (CollectionUtils.isEmpty(ossFileList)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + OSSFile ossFile = ossFileList.get(0); + String readFilePath = ossFile.getUrl(); + if (StringUtils.isEmpty(readFilePath) || !CosBootUtil.doesObjectExist(readFilePath)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + try (InputStream is = CosBootUtil.download(readFilePath);) { - //获取文件地址 - String connectId = sarFileSplitInfoEO.getConnectId(); - String fileName = sarFileSplitInfoEO.getFileName(); - if (StringUtils.isEmpty(connectId) || StringUtils.isEmpty(fileName)) { - throw new JeroBootException("当前文件未找到,请重新选择!"); - } - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); - queryWrapper.eq(OSSFile::getConnectId, connectId); - queryWrapper.eq(OSSFile::getFileName, fileName); - queryWrapper.orderByDesc(OSSFile::getCreateTime); - List ossFileList = iossFileService.list(queryWrapper); - if (CollectionUtils.isEmpty(ossFileList)) { - throw new JeroBootException("当前文件未找到,请重新选择!"); - } - OSSFile ossFile = ossFileList.get(0); - String readFilePath = ossFile.getUrl(); - - if (StringUtils.isEmpty(readFilePath) || !CosBootUtil.doesObjectExist(readFilePath)) { - throw new JeroBootException("当前文件未找到,请重新选择!"); - } - - //修改为读取PDF // InputStream is = new FileInputStream(readFilePath); //需要将文件路更改为word文档所在路径。 -// XWPFDocument doc = new XWPFDocument(is); - // GSO因为word内容格式读取有问题,对GSO文件进行特殊处理,必须使用PDF文件 - if (!(readFilePath.endsWith(".pdf") || readFilePath.endsWith(".PDF"))) { - throw new JeroBootException("GSO必须选择PDF文件!"); - } + XWPFDocument doc = new XWPFDocument(is); - String readPdf = ReadPdfUtil.readPdf(readFilePath); - if (StringUtils.isEmpty(readPdf)) { - throw new JeroBootException("未读取到文件内容,请检查后重试!"); - } - String[] pdfArrays; - - String os = System.getProperty("os.name"); - //Windows操作系统 - if (os != null && os.toLowerCase().startsWith("windows")) { - pdfArrays = readPdf.split("\r\n"); - } else if (os != null && os.toLowerCase().startsWith("linux")) {//Linux操作系统 - pdfArrays = readPdf.split("\n"); - } else { //其它操作系统 - pdfArrays = readPdf.split("\n"); - } - -// Pattern ptest ; + Pattern ptest = Pattern.compile("^[\\d.]*$"); // Matcher matcher; // 记录拆分后的每一段文字 - //修改为读取PDF -// List elements = doc.getBodyElements(); + List elements = doc.getBodyElements(); // 记录word自动生成的编号数据 Map numberMap = new HashMap(); boolean menuCanAdd = false; // 判断当前目录下是否可以正常填写数据 - //修改为读取PDF -// for (IBodyElement element : elements) { - //定义初始化数据 + List startDigitList = getStartDigit(elements, enumByValue); + List newStartDigitList = new ArrayList<>(); + for (String startDigit : startDigitList) { + if(startDigit.endsWith(".")) { + startDigit = startDigit.substring(0, startDigit.lastIndexOf(".")); + } + newStartDigitList.add(startDigit); + } + String regex = "^[0-9]*$"; boolean firstFlag = true; - for (String paragraphString : pdfArrays) { - if (paragraphString.contains("SCOPE")) { - firstFlag = false; - } - if (firstFlag) { - continue; - } - + String preName = ""; + int preNameNum = 0; +// for (IBodyElement element : elements) { + for (int g=0; g< elements.size(); g++) { + IBodyElement element = elements.get(g); // 段落 - //修改为读取PDF -// if (element instanceof XWPFParagraph) { -// XWPFParagraph p = (XWPFParagraph)element; + if (element instanceof XWPFParagraph) { + XWPFParagraph p = (XWPFParagraph) element; - // 处理段落生成编号不识别问题 -// String paragraphString = p.getText(); - if (StringUtils.isNotBlank(paragraphString)) { - paragraphString = paragraphString.replace((char) 12288, ' '); - paragraphString = paragraphString.trim(); - } - if(StringUtils.isEmpty(paragraphString)){ - continue; - } - paragraphString = paragraphString.replaceAll("\r\n",""); - paragraphString = paragraphString.replaceAll("\n",""); - paragraphString = paragraphString.trim(); - if(StringUtils.isEmpty(paragraphString)){ - continue; - } + // 处理段落生成编号不识别问题 + String paragraphString = p.getText(); + if (!StringUtils.isEmpty(paragraphString)) { + paragraphString = paragraphString.replace((char) 12288, ' '); + paragraphString = paragraphString.replaceAll("\r\n",""); + paragraphString = paragraphString.replaceAll("\n",""); + paragraphString = paragraphString.trim(); + } + if(StringUtils.isEmpty(paragraphString)){ + // 处理当前段落仅为图片的情况 + List imageBundleList = readImageInParagraph((XWPFParagraph) p); + if (CollectionUtils.isNotEmpty(imageBundleList)) { + if (messageList.size() > 0) { + addItermsConditionsImage(messageList.get(messageList.size() - 1), itemValList, p, imageBundleList); + } + } + continue; + } + if (paragraphString.toLowerCase().contains("scope")) { + String pp = paragraphString.replaceAll("\t", "") + .replaceAll("\b", "").replaceAll(" ", ""); + if (!pp.substring(pp.length()-1).matches(regex)) { + firstFlag = false; + } + } + if (firstFlag) { + continue; + } // if (StringUtils.isNotEmpty(p.getNumLevelText())&& p.getNumLevelText().indexOf(".")>0) { // String numberParent = p.getNumLevelText().substring(0,p.getNumLevelText().lastIndexOf(".")); // if (numberMap.containsKey(numberParent)){ @@ -551,66 +561,113 @@ public class FileSpiltService { // paragraphString = numberParent+".1"+ p.getText(); // } // } - -// ptest = Pattern.compile("^[\\d.]*$"); - boolean hasGoIf = false; - for (int i = 0; i < nowStart.size(); i++) { - if (paragraphString.startsWith(nowStart.get(i))) { - // 判断名称,如果大于10位,取十位, -// String itemName = paragraphString.substring(nowStart.get(i).length()).length()>10?paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+10):paragraphString.substring(nowStart.get(i).length()); - String itemName = FileSplitUtils.getItemName(paragraphString, nowStart.get(i)); - List clauseContent = new ArrayList<>(); - clauseContent.add(paragraphString); - SarFileSplitItemsEO message = getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(), nowStart.get(i), itemName, clauseContent); - - String[] numberStr = nowStart.get(i).split("\\."); - if (Integer.valueOf(numberStr[0]) > sarFileSplitInfoEO.getStopNumber()) { - menuCanAdd = false; - } else { - // 增加一条数据,需要在数结构中加一条数据 - SarFileSplitMenuEO sarFileSplitMenuEO = getTreeList(nowStart.get(i), treeList, generalCatalogueId, sarFileSplitInfoEO, treeListDisplay++, itemName, enumByValue); - treeList.add(sarFileSplitMenuEO); - message.setMenuId(sarFileSplitMenuEO.getId()); - if(!StringUtils.isEmpty(itemName)){ - addItermsConditionsText(message, itemValList, paragraphString.substring(nowStart.get(i).length())); +//^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$ + ptest = Pattern.compile("^[\\d.]*$"); + //定义查看是否有编号,没有编号则按照上一个编号放置数据 + boolean hasGoIf = false; + String startDigit = getOneStartDigit(paragraphString, enumByValue); + for (int i = 0; i < nowStart.size(); i++) { +// if (paragraphString.startsWith(nowStart.get(i))) { + if (startDigit.equals(nowStart.get(i)) || startDigit.equals(nowStart.get(i)+ ".") || startDigit.equals(nowStart.get(i)+ "-") ) { + // 判断一级 真的是标题还是干扰项 TODO + if (startDigit.matches("^[0-9]*.$") || startDigit.matches("^[0-9]*-$")) { + if(startDigit.endsWith(".")) { + boolean result = fileSplitPdfService.judge(preName, preNameNum, startDigit.substring(0, startDigit.lastIndexOf(".")), g, newStartDigitList, "."); + if (result) { + continue; + } + } else if(startDigit.endsWith("-")) { + boolean result = fileSplitPdfService.judge(preName, preNameNum, startDigit.substring(0, startDigit.lastIndexOf("-")), g, newStartDigitList, "."); + if (result) { + continue; + } + } else { + boolean result = fileSplitPdfService.judge(preName, preNameNum, startDigit, g, newStartDigitList, "."); + if (result) { + continue; + } + } } - messageList.add(message); - nowStart = getNewNowStart(nowStart.get(i)); - menuCanAdd = true; + // 判断名称,如果大于10位,取十位, +// String itemName = paragraphString.substring(nowStart.get(i).length()).length()>10?paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+10):paragraphString.substring(nowStart.get(i).length()); + String itemName = FileSplitUtils.getItemName(paragraphString, startDigit); + List clauseContent = new ArrayList<>(); + clauseContent.add(paragraphString); + SarFileSplitItemsEO message = getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(), startDigit, itemName, clauseContent); + + String[] numberStr = nowStart.get(i).split("\\."); +// String numberStrTemp = numberStr[0].replace("S", ""); + + if (Integer.valueOf(numberStr[0]) > sarFileSplitInfoEO.getStopNumber()) { + menuCanAdd = false; + } else { + // 增加一条数据,需要在数结构中加一条数据 + SarFileSplitMenuEO sarFileSplitMenuEO = getTreeList(nowStart.get(i), treeList, generalCatalogueId, sarFileSplitInfoEO, treeListDisplay++, itemName, enumByValue); + treeList.add(sarFileSplitMenuEO); + preName = nowStart.get(i); + preNameNum = g; + message.setMenuId(sarFileSplitMenuEO.getId()); +// addItermsConditionsText(message, itemValList, paragraphString.substring(nowStart.get(i).length())); + if(!StringUtils.isEmpty(itemName)){ + addItermsConditionsText(message, itemValList, paragraphString.substring(startDigit.length())); + } + messageList.add(message); + nowStart = getNewNowStart(nowStart.get(i)); + menuCanAdd = true; + } + hasGoIf = true; + break; + } - hasGoIf = true; - break; } - } + if (!hasGoIf && menuCanAdd) { + if ("annex1".equals(paragraphString.toLowerCase().replaceAll("\t", "") + .replaceAll("\b", "").replaceAll(" ", "")) + && !messageList.get(messageList.size() - 1).getItemsNum().equals("annex")) { - if (!hasGoIf && menuCanAdd) { - if (!paragraphString.equals("")) { - addItermsConditionsText(messageList.get(messageList.size() - 1), itemValList, paragraphString); - } -// List imageBundleList = readImageInParagraph((XWPFParagraph)p); -// if(CollectionUtils.isNotEmpty(imageBundleList)) { -// addItermsConditionsImage(messageList.get(messageList.size()-1),itemValList, p,imageBundleList); -// } + String appendixNum = messageList.get(messageList.size() - 1).getItemsNum().split("\\.")[0]; + if (Integer.valueOf(appendixNum) + 1 <= sarFileSplitInfoEO.getStopNumber()) { + String itemName = "annex"; + List clauseContent = new ArrayList<>(); + clauseContent.add(paragraphString); + SarFileSplitItemsEO message = getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(), "annex", itemName, clauseContent); + // 增加一条数据,需要在数结构中加一条数据 + SarFileSplitMenuEO sarFileSplitMenuEO = getTreeList("annex", treeList, generalCatalogueId, sarFileSplitInfoEO, treeListDisplay++, "", enumByValue); + addItermsConditionsText(message, itemValList, paragraphString); + treeList.add(sarFileSplitMenuEO); + message.setMenuId(sarFileSplitMenuEO.getId()); + messageList.add(message); + nowStart = new ArrayList<>(); + } else { + break; + } + + } else { + if (!p.getText().equals("")) { + addItermsConditionsText(messageList.get(messageList.size() - 1), itemValList, p.getText()); + } + List imageBundleList = readImageInParagraph((XWPFParagraph) p); + if (CollectionUtils.isNotEmpty(imageBundleList)) { + addItermsConditionsImage(messageList.get(messageList.size() - 1), itemValList, p, imageBundleList); + } + } // } - hasGoIf = true; - } - // 判断是否直接跳出所有循环 - if (!menuCanAdd && messageList.size() > 0) { - break; - } + hasGoIf = true; + } - //修改为读取PDF -// } else if (element instanceof XWPFTable){ -// if(messageList != null && !messageList.isEmpty()){ -// addItermsConditionsOfTable(messageList.get(messageList.size()-1),itemValList,(XWPFTable)element); -// } -// } + // 判断是否直接跳出所有循环 + if (!menuCanAdd && messageList.size() > 0) { + break; + } + + } else if (element instanceof XWPFTable) { + if (messageList != null && !messageList.isEmpty()) { + addItermsConditionsOfTable(messageList.get(messageList.size() - 1), itemValList, (XWPFTable) element); + } + } } - } catch (JeroBootException e) { - e.printStackTrace(); - throw new JeroBootException(e.getMessage()); } catch (Exception e) { e.printStackTrace(); return -1; @@ -699,7 +756,22 @@ public class FileSpiltService { // 记录word自动生成的编号数据 Map numberMap = new HashMap(); boolean menuCanAdd = false; // 判断当前目录下是否可以正常填写数据 - for (IBodyElement element : elements) { + List startDigitList = getStartDigit(elements, enumByValue); + List newStartDigitList = new ArrayList<>(); + for (String startDigit : startDigitList) { + if(startDigit.endsWith("S")) { + startDigit = startDigit.substring(0, startDigit.lastIndexOf("S")); + } + if(startDigit.endsWith(".")) { + startDigit = startDigit.substring(0, startDigit.lastIndexOf(".")); + } + newStartDigitList.add(startDigit); + } + String preName = ""; + int preNameNum = 0; +// for (IBodyElement element : elements) { + for (int g=0; g< elements.size(); g++) { + IBodyElement element = elements.get(g); // 段落 if (element instanceof XWPFParagraph) { XWPFParagraph p = (XWPFParagraph) element; @@ -752,14 +824,33 @@ public class FileSpiltService { //^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$ ptest = Pattern.compile("S^[\\d.]*$"); boolean hasGoIf = false; + String startDigit = getOneStartDigit(paragraphString,enumByValue); + if(startDigit.endsWith("S")) { + startDigit = startDigit.substring(0, startDigit.lastIndexOf("S")); + } for (int i = 0; i < nowStart.size(); i++) { - if (paragraphString.startsWith(nowStart.get(i))) { +// if (paragraphString.startsWith(nowStart.get(i))) { + if (startDigit.equals(nowStart.get(i)) || startDigit.equals(nowStart.get(i)+ ".") ) { + // 判断一级 真的是标题还是干扰项 TODO + if (startDigit.matches("^[0-9]*.$")) { + if(startDigit.endsWith(".")) { + boolean result = fileSplitPdfService.judge(preName, preNameNum, startDigit.substring(0, startDigit.lastIndexOf(".")), g, newStartDigitList, "."); + if (result) { + continue; + } + } else { + boolean result = fileSplitPdfService.judge(preName, preNameNum, startDigit, g, newStartDigitList, "."); + if (result) { + continue; + } + } + } // 判断名称,如果大于10位,取十位, // String itemName = paragraphString.substring(nowStart.get(i).length()).length()>10?paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+10):paragraphString.substring(nowStart.get(i).length()); - String itemName = FileSplitUtils.getItemName(paragraphString, nowStart.get(i)); + String itemName = FileSplitUtils.getItemName(paragraphString, startDigit); List clauseContent = new ArrayList<>(); clauseContent.add(paragraphString); - SarFileSplitItemsEO message = getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(), nowStart.get(i), itemName, clauseContent); + SarFileSplitItemsEO message = getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(), startDigit, itemName, clauseContent); String[] numberStr = nowStart.get(i).split("\\."); String numberStrTemp = numberStr[0].replace("S", ""); @@ -770,6 +861,8 @@ public class FileSpiltService { // 增加一条数据,需要在数结构中加一条数据 SarFileSplitMenuEO sarFileSplitMenuEO = getTreeList(nowStart.get(i), treeList, generalCatalogueId, sarFileSplitInfoEO, treeListDisplay++, itemName, enumByValue); treeList.add(sarFileSplitMenuEO); + preName = nowStart.get(i); + preNameNum = g; message.setMenuId(sarFileSplitMenuEO.getId()); if(!StringUtils.isEmpty(itemName)){ addItermsConditionsText(message, itemValList, paragraphString.substring(nowStart.get(i).length())); @@ -1262,7 +1355,7 @@ public class FileSpiltService { treeList.add(documentTreeEO); List nowStart = new ArrayList<>(); - nowStart.add("1."); + nowStart.add("1"); // if (sarFileSplitInfoEO.getStartNumber()<4){ // } else { // nowStart.add(String.valueOf(sarFileSplitInfoEO.getStartNumber())); @@ -1299,7 +1392,21 @@ public class FileSpiltService { // 记录word自动生成的编号数据 Map numberMap = new HashMap(); boolean menuCanAdd = false; // 判断当前目录下是否可以正常填写数据 - for (IBodyElement element : elements) { + List startDigitList = getStartDigit(elements, enumByValue); + List newStartDigitList = new ArrayList<>(); + for (String startDigit : startDigitList) { + if(startDigit.endsWith(".")) { + startDigit = startDigit.substring(0, startDigit.lastIndexOf(".")); + } + newStartDigitList.add(startDigit); + } + String regex = "^[0-9]*$"; + boolean firstFlag = true; + String preName = ""; + int preNameNum = 0; +// for (IBodyElement element : elements) { + for (int g=0; g< elements.size(); g++) { + IBodyElement element = elements.get(g); // 段落 if (element instanceof XWPFParagraph) { XWPFParagraph p = (XWPFParagraph) element; @@ -1312,6 +1419,26 @@ public class FileSpiltService { paragraphString = paragraphString.replaceAll("\n",""); paragraphString = paragraphString.trim(); } + if(StringUtils.isEmpty(paragraphString)){ + // 处理当前段落仅为图片的情况 + List imageBundleList = readImageInParagraph((XWPFParagraph) p); + if (CollectionUtils.isNotEmpty(imageBundleList)) { + if (messageList.size() > 0) { + addItermsConditionsImage(messageList.get(messageList.size() - 1), itemValList, p, imageBundleList); + } + } + continue; + } + if (paragraphString.toLowerCase().contains("scope")) { + String pp = paragraphString.replaceAll("\t", "") + .replaceAll("\b", "").replaceAll(" ", ""); + if (!pp.substring(pp.length()-1).matches(regex)) { + firstFlag = false; + } + } + if (firstFlag) { + continue; + } // if (StringUtils.isNotEmpty(p.getNumLevelText())&& p.getNumLevelText().indexOf(".")>0) { // String numberParent = p.getNumLevelText().substring(0,p.getNumLevelText().lastIndexOf(".")); // if (numberMap.containsKey(numberParent)){ @@ -1332,14 +1459,35 @@ public class FileSpiltService { ptest = Pattern.compile("^[\\d.]*$"); //定义查看是否有编号,没有编号则按照上一个编号放置数据 boolean hasGoIf = false; + String startDigit = getOneStartDigit(paragraphString, enumByValue); for (int i = 0; i < nowStart.size(); i++) { - if (paragraphString.startsWith(nowStart.get(i))) { +// if (paragraphString.startsWith(nowStart.get(i))) { + if (startDigit.equals(nowStart.get(i)) || startDigit.equals(nowStart.get(i)+ ".") || startDigit.equals(nowStart.get(i)+ "-") ) { + // 判断一级 真的是标题还是干扰项 TODO + if (startDigit.matches("^[0-9]*.$") || startDigit.matches("^[0-9]*-$")) { + if(startDigit.endsWith(".")) { + boolean result = fileSplitPdfService.judge(preName, preNameNum, startDigit.substring(0, startDigit.lastIndexOf(".")), g, newStartDigitList, "."); + if (result) { + continue; + } + } else if(startDigit.endsWith("-")) { + boolean result = fileSplitPdfService.judge(preName, preNameNum, startDigit.substring(0, startDigit.lastIndexOf("-")), g, newStartDigitList, "."); + if (result) { + continue; + } + } else { + boolean result = fileSplitPdfService.judge(preName, preNameNum, startDigit, g, newStartDigitList, "."); + if (result) { + continue; + } + } + } // 判断名称,如果大于10位,取十位, // String itemName = paragraphString.substring(nowStart.get(i).length()).length()>10?paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+10):paragraphString.substring(nowStart.get(i).length()); - String itemName = FileSplitUtils.getItemName(paragraphString, nowStart.get(i)); + String itemName = FileSplitUtils.getItemName(paragraphString, startDigit); List clauseContent = new ArrayList<>(); clauseContent.add(paragraphString); - SarFileSplitItemsEO message = getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(), nowStart.get(i), itemName, clauseContent); + SarFileSplitItemsEO message = getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(), startDigit, itemName, clauseContent); String[] numberStr = nowStart.get(i).split("\\."); // String numberStrTemp = numberStr[0].replace("S", ""); @@ -1350,13 +1498,15 @@ public class FileSpiltService { // 增加一条数据,需要在数结构中加一条数据 SarFileSplitMenuEO sarFileSplitMenuEO = getTreeList(nowStart.get(i), treeList, generalCatalogueId, sarFileSplitInfoEO, treeListDisplay++, itemName, enumByValue); treeList.add(sarFileSplitMenuEO); + preName = nowStart.get(i); + preNameNum = g; message.setMenuId(sarFileSplitMenuEO.getId()); // addItermsConditionsText(message, itemValList, paragraphString.substring(nowStart.get(i).length())); if(!StringUtils.isEmpty(itemName)){ - addItermsConditionsText(message, itemValList, paragraphString.substring(nowStart.get(i).length())); + addItermsConditionsText(message, itemValList, paragraphString.substring(startDigit.length())); } messageList.add(message); - nowStart = getNewNowStartEU(nowStart.get(i)); + nowStart = getNewNowStart(nowStart.get(i)); menuCanAdd = true; } hasGoIf = true; @@ -1366,12 +1516,37 @@ public class FileSpiltService { } if (!hasGoIf && menuCanAdd) { - if (!p.getText().equals("")) { - addItermsConditionsText(messageList.get(messageList.size() - 1), itemValList, p.getText()); - } - List imageBundleList = readImageInParagraph((XWPFParagraph) p); - if (CollectionUtils.isNotEmpty(imageBundleList)) { - addItermsConditionsImage(messageList.get(messageList.size() - 1), itemValList, p, imageBundleList); + if (("annex1".equals(paragraphString.toLowerCase().replaceAll("\t", "") + .replaceAll("\b", "").replaceAll(" ", "")) + || "annex1a".equals(paragraphString.toLowerCase().replaceAll("\t", "") + .replaceAll("\b", "").replaceAll(" ", ""))) + && !messageList.get(messageList.size() - 1).getItemsNum().equals("annex")) { + + String appendixNum = messageList.get(messageList.size() - 1).getItemsNum().split("\\.")[0]; + if (Integer.valueOf(appendixNum) + 1 <= sarFileSplitInfoEO.getStopNumber()) { + String itemName = "annex"; + List clauseContent = new ArrayList<>(); + clauseContent.add(paragraphString); + SarFileSplitItemsEO message = getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(), "annex", itemName, clauseContent); + // 增加一条数据,需要在数结构中加一条数据 + SarFileSplitMenuEO sarFileSplitMenuEO = getTreeList("annex", treeList, generalCatalogueId, sarFileSplitInfoEO, treeListDisplay++, "", enumByValue); + addItermsConditionsText(message, itemValList, paragraphString); + treeList.add(sarFileSplitMenuEO); + message.setMenuId(sarFileSplitMenuEO.getId()); + messageList.add(message); + nowStart = new ArrayList<>(); + } else { + break; + } + + } else { + if (!p.getText().equals("")) { + addItermsConditionsText(messageList.get(messageList.size() - 1), itemValList, p.getText()); + } + List imageBundleList = readImageInParagraph((XWPFParagraph) p); + if (CollectionUtils.isNotEmpty(imageBundleList)) { + addItermsConditionsImage(messageList.get(messageList.size() - 1), itemValList, p, imageBundleList); + } } // } hasGoIf = true; @@ -1840,7 +2015,7 @@ public class FileSpiltService { * @param nowStart * @return */ - private static List getNewNowStartEU(String nowStart) { + public static List getNewNowStartEU(String nowStart) { // List nowStartList = new ArrayList<>(); List nowResultStartList = new ArrayList<>(); String[] numberStr = nowStart.split("\\."); @@ -1866,7 +2041,7 @@ public class FileSpiltService { * @param nowStart * @return */ - private static List getNewNowStartUS(String nowStart) { + public static List getNewNowStartUS(String nowStart) { // List nowStartList = new ArrayList<>(); List nowResultStartList = new ArrayList<>(); String[] numberStr = nowStart.replace("S", "").split("\\."); @@ -1893,7 +2068,7 @@ public class FileSpiltService { * @param nowStart 当前标题内容 * @return */ - private static List getNewNowStartJapanOne(String lastStr, String nowStart) { + public static List getNewNowStartJapanOne(String lastStr, String nowStart) { List nowResultStartList = new ArrayList<>(); if (FileSplitUtils.hasDigit(nowStart) && nowStart.contains(".")) { //包含数字且. @@ -1934,7 +2109,7 @@ public class FileSpiltService { * @param nowStart 当前标题内容 * @return */ - private static List getNewNowStartJapanTwo(StringBuilder lastStr, StringBuilder secondStr, String nowStart) { + public static List getNewNowStartJapanTwo(StringBuilder lastStr, StringBuilder secondStr, String nowStart) { List nowResultStartList = new ArrayList<>(); if (FileSplitUtils.hasDigit(nowStart) && nowStart.contains(".")) { //包含数字且. @@ -1980,7 +2155,7 @@ public class FileSpiltService { * @param nowStart * @return */ - private static List getNewNowStartKmvssArticle(StringBuilder lastStr, String nowStart) { + public static List getNewNowStartKmvssArticle(StringBuilder lastStr, String nowStart) { List nowResultStartList = new ArrayList<>(); if (FileSplitUtils.hasDigit(nowStart) && nowStart.contains(")")) { //包含数字且包含括号 @@ -2014,7 +2189,7 @@ public class FileSpiltService { * @param menuLevel * @return */ - private static List getNewNowStartKmvssTable(String[] catalogerArr, String nowStart, int menuLevel) { + public static List getNewNowStartKmvssTable(String[] catalogerArr, String nowStart, int menuLevel) { /* *1.韩国KmvssTable模板处理 * 分为五级拆分,拆分为以下内容: @@ -2111,7 +2286,7 @@ public class FileSpiltService { * @param nowStart * @return */ - private static List getNewNowStart(String nowStart) { + public static List getNewNowStart(String nowStart) { // List nowStartList = new ArrayList<>(); List nowResultStartList = new ArrayList<>(); String[] numberStr = nowStart.split("\\."); @@ -2131,7 +2306,7 @@ public class FileSpiltService { return nowResultStartList; } - private static SarFileSplitMenuEO getTreeList(String name, + public static SarFileSplitMenuEO getTreeList(String name, List treeList, String generalCatalogueId, SarFileSplitInfoEO sarFileSplitInfoEO, @@ -2143,14 +2318,14 @@ public class FileSpiltService { documentTreeEO.setId(UUIDUtils.randomUUID20()); documentTreeEO.setItemName(itemName); - documentTreeEO.setPId(generalCatalogueId); + documentTreeEO.setPId(generalCatalogueId); // 默认情况 documentTreeEO.setInfoId(sarFileSplitInfoEO.getId()); documentTreeEO.setDisplaySeq(treeListDisplay); documentTreeEO.setName(name); documentTreeEO.setValidFlag(0); // 用现在得name 和之前得name 做比较,确定,parentId - +// List pIdList = new ArrayList<>(); boolean oneFlag = false; boolean twoFlag = false; boolean threeFlag = false; @@ -2159,11 +2334,13 @@ public class FileSpiltService { switch (enumByValue) { case GB: case GBT: + case EU: case US: case GSO: if (name.indexOf(".") >= 0) { if (name.substring(0, name.lastIndexOf(".")).equals(forDocumentTree.getName())) { documentTreeEO.setPId(forDocumentTree.getId()); +// pIdList.add(forDocumentTree.getId()); break a; } } else { @@ -2171,36 +2348,41 @@ public class FileSpiltService { } break; - case EU: - - if (name.indexOf(".") >= 0) { - if (name.substring(0, name.lastIndexOf(".") - 1).equals(forDocumentTree.getName())) { - documentTreeEO.setPId(forDocumentTree.getId()); - break a; - } - } else { - documentTreeEO.setPId(generalCatalogueId); - } - break; +// case EU: +// if (name.indexOf(".") >= 0) { +// if (name.substring(0, name.lastIndexOf(".") - 1).equals(forDocumentTree.getName())) { +// documentTreeEO.setPId(forDocumentTree.getId()); +//// pIdList.add(forDocumentTree.getId()); +// break a; +// } +// } else { +// documentTreeEO.setPId(generalCatalogueId); +//// pIdList.add(generalCatalogueId); +// } +// break; case JPN_ATTACHMENT: if (name.contains(".")) { if (name.indexOf(".") >= 0) { if (name.substring(0, name.lastIndexOf(".")).equals(forDocumentTree.getName())) { documentTreeEO.setPId(forDocumentTree.getId()); +// pIdList.add(forDocumentTree.getId()); break a; } } else { documentTreeEO.setPId(generalCatalogueId); +// pIdList.add(generalCatalogueId); } } else { if (name.indexOf("–") >= 0) { if (name.substring(0, name.lastIndexOf("–")).equals(forDocumentTree.getName()) || (name.substring(0, name.lastIndexOf("–")) + ".").equals(forDocumentTree.getName())) { documentTreeEO.setPId(forDocumentTree.getId()); +// pIdList.add(forDocumentTree.getId()); break a; } } else { documentTreeEO.setPId(generalCatalogueId); +// pIdList.add(generalCatalogueId); } } break; @@ -2226,6 +2408,7 @@ public class FileSpiltService { if (firstNameTemp.equals(forDocumentTree.getName())) { documentTreeEO.setName(nameTemp); documentTreeEO.setPId(forDocumentTree.getId()); +// pIdList.add(forDocumentTree.getId()); break a; } } else if (FileSplitUtils.judgeContainsStr(nameTemp)) { @@ -2250,12 +2433,14 @@ public class FileSpiltService { if (oneFlag && secondTemp.equals(forDocumentTree.getName())) { documentTreeEO.setName(nameTemp); documentTreeEO.setPId(forDocumentTree.getId()); +// pIdList.add(forDocumentTree.getId()); break a; } } } else { documentTreeEO.setPId(generalCatalogueId); +// pIdList.add(generalCatalogueId); } break; case KMVSS_ARTICLE: @@ -2279,11 +2464,13 @@ public class FileSpiltService { if (firstNameTemp.equals(forDocumentTree.getName())) { documentTreeEO.setName(nameTemp); documentTreeEO.setPId(forDocumentTree.getId()); +// pIdList.add(forDocumentTree.getId()); break a; } } } else { documentTreeEO.setPId(generalCatalogueId); +// pIdList.add(generalCatalogueId); } break; case KMVSS_TABLE: @@ -2310,6 +2497,7 @@ public class FileSpiltService { if (firstNameTemp.equals(forDocumentTree.getName())) { documentTreeEO.setName(nameTemp); documentTreeEO.setPId(forDocumentTree.getId()); +// pIdList.add(forDocumentTree.getId()); break a; } } else if (FileSplitUtils.hasDigit(nameTemp) && nameTemp.contains(")") && (!nameTemp.contains("("))) { @@ -2334,6 +2522,7 @@ public class FileSpiltService { if (oneFlag && secondTemp.equals(forDocumentTree.getName())) { documentTreeEO.setName(nameTemp); documentTreeEO.setPId(forDocumentTree.getId()); +// pIdList.add(forDocumentTree.getId()); break a; } @@ -2368,6 +2557,7 @@ public class FileSpiltService { if (oneFlag && twoFlag && threeTemp.equals(forDocumentTree.getName())) { documentTreeEO.setName(nameTemp); documentTreeEO.setPId(forDocumentTree.getId()); +// pIdList.add(forDocumentTree.getId()); break a; } @@ -2411,30 +2601,38 @@ public class FileSpiltService { if (oneFlag && twoFlag && threeFlag && fourTemp.equals(forDocumentTree.getName())) { documentTreeEO.setName(nameTemp); documentTreeEO.setPId(forDocumentTree.getId()); +// pIdList.add(forDocumentTree.getId()); break a; } } } else { documentTreeEO.setPId(generalCatalogueId); +// pIdList.add(generalCatalogueId); } break; default: if (name.indexOf(".") >= 0) { if (name.substring(0, name.lastIndexOf(".")).equals(forDocumentTree.getName())) { documentTreeEO.setPId(forDocumentTree.getId()); +// pIdList.add(forDocumentTree.getId()); break a; } } else { documentTreeEO.setPId(generalCatalogueId); +// pIdList.add(generalCatalogueId); } + break; } } +// if (CollectionUtils.isNotEmpty(pIdList)) { +// documentTreeEO.setPId(pIdList.get(pIdList.size()-1)); // 拿最后一个 +// } return documentTreeEO; } - private static SarFileSplitItemsEO getSarFileSplitItemsEO(String infoId, String itemsNum, String itemsName, List itemsCondi) { + public static SarFileSplitItemsEO getSarFileSplitItemsEO(String infoId, String itemsNum, String itemsName, List itemsCondi) { SarFileSplitItemsEO sarFileSplitItemsEO = new SarFileSplitItemsEO(); sarFileSplitItemsEO.setInfoId(infoId); sarFileSplitItemsEO.setItemsNum(itemsNum); @@ -3065,7 +3263,7 @@ public class FileSpiltService { // return personMsgEO; // } - private String getChinese(String source) { + public String getChinese(String source) { char[] chars = source.toCharArray(); StringBuilder stringBuilder = new StringBuilder(); @@ -3079,4 +3277,84 @@ public class FileSpiltService { return stringBuilder.toString(); } + public List getStartDigit(List elements, SplitFileTypeTypeEnum enumByValue) { + String regex = "[^\\p{Punct}\\p{Space}\\p{Digit}]"; // TODO + switch (enumByValue) { + case GB: + case GBT: + case EU: + case GSO: + case JPN_ARTICLE: + regex = "[^\\p{Punct}\\p{Space}\\p{Digit}]"; + break; + case KMVSS_ARTICLE: + case JPN_ATTACHMENT: + regex = "[^\\p{Punct}\\p{Space}\\p{Digit}–]"; + break; + case US: + regex = "[^\\p{Punct}\\p{Space}\\p{Digit}S]"; + break; + } + Matcher matcher; + List startDigitList = new ArrayList<>(); + for (int l=0; l< elements.size(); l++) { + IBodyElement element = elements.get(l); + if (element instanceof XWPFParagraph) { + XWPFParagraph p = (XWPFParagraph) element; + String arr = p.getText(); + + matcher = Pattern.compile(regex).matcher(arr); + if(matcher.find()) { + int index = matcher.start(); + String startDigit = arr.substring(0, index); + startDigit = startDigit.replaceAll("\t", "").replaceAll("\b", "") + .replaceAll(" ", "").replaceAll("\"", "").replaceAll("\'", ""); + startDigitList.add(startDigit); + + } else { + startDigitList.add(arr.replaceAll("\t", "").replaceAll("\b", "") + .replaceAll(" ", "").replaceAll("\"", "").replaceAll("\'", "")); + + } + } else if (element instanceof XWPFTable) { + startDigitList.add(""); + } + } + return startDigitList; + } + + public String getOneStartDigit(String arr, SplitFileTypeTypeEnum enumByValue) { + String regex="[^\\p{Punct}\\p{Space}\\p{Digit}]"; // TODO + switch (enumByValue) { + case GB: + case GBT: + case EU: + case GSO: + case JPN_ARTICLE: + regex = "[^\\p{Punct}\\p{Space}\\p{Digit}]"; + break; + case KMVSS_ARTICLE: + case JPN_ATTACHMENT: + regex = "[^\\p{Punct}\\p{Space}\\p{Digit}–]"; + break; + case US: + regex = "[^\\p{Punct}\\p{Space}\\p{Digit}S]"; + break; + } + Matcher matcher; + matcher = Pattern.compile(regex).matcher(arr); + if(matcher.find()) { + int index = matcher.start(); + String startDigit = arr.substring(0, index); + startDigit = startDigit.replaceAll(" ", ""); + if(StringUtils.isNotBlank(startDigit)) { + return startDigit.replaceAll("\t", "").replaceAll("\b", "") + .replaceAll("\"", "").replaceAll("\'", ""); + } + } else { + return arr.replaceAll("\t", "").replaceAll("\b", "") + .replaceAll(" ", "").replaceAll("\"", "").replaceAll("\'", ""); + } + return ""; + } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/FileSplitPdfService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/FileSplitPdfService.java new file mode 100644 index 000000000..1946515db --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/FileSplitPdfService.java @@ -0,0 +1,1849 @@ +package com.jero.modules.split.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.exception.JeroBootException; +import com.jero.common.util.oss.CosBootUtil; +import com.jero.modules.document.utils.ReadPdfUtil; +import com.jero.modules.ocr.util.UUIDUtils; +import com.jero.modules.oss.entity.OSSFile; +import com.jero.modules.oss.service.IOSSFileService; +import com.jero.modules.split.entity.SarFileSplitInfoEO; +import com.jero.modules.split.entity.SarFileSplitItemsEO; +import com.jero.modules.split.entity.SarFileSplitItemsValEO; +import com.jero.modules.split.entity.SarFileSplitMenuEO; +import com.jero.modules.split.enums.SplitFileTypeTypeEnum; +import com.jero.modules.split.mapper.SarFileSplitMenuEOMapper; +import com.jero.modules.split.service.IFileSplitItemsEOService; +import com.jero.modules.split.service.ISarFileSplitItemsValEOService; +import com.jero.modules.split.util.FileSplitUtils; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; + +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +@Service +@Transactional(value = "transactionManager", readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class) +public class FileSplitPdfService { + + @Autowired + private SarFileSplitMenuEOMapper sarFileSplitMenuEOMapper; + @Autowired + private IFileSplitItemsEOService iSarFileSplitItemsEOService; + @Autowired + private ISarFileSplitItemsValEOService iSarFileSplitItemsValEOService; + @Autowired + private IOSSFileService iossFileService; + @Autowired + private FileSpiltService fileSpiltService; + + @Value("${jero.path.upload}") + private String filePath; + @Value("${jero.path.uploadCos}") + private String filePathCos; + @Value("${jero.splitUrl}") + private String splitUrl; + + public int fileCHN(SarFileSplitInfoEO sarFileSplitInfoEO, SplitFileTypeTypeEnum enumByValue) { + + // 拆分文件主表中插入数据 + if (sarFileSplitInfoEO.getStopNumber() <= 0) { + sarFileSplitInfoEO.setStopNumber(200); + } + if (sarFileSplitInfoEO.getStartNumber() <= 0) { + sarFileSplitInfoEO.setStartNumber(1); + } + + // 拆分文件条款表中最终插入数据 + List messageList = new ArrayList<>(); +// int messageNumber = 0; + // 拆分文件目录表中最终插入数据 + List treeList = new ArrayList<>(); + // 拆分文件条款详情表中最终插入数据 + List itemValList = new ArrayList<>(); + Long treeListDisplay = 1L; + + String generalCatalogueId = UUIDUtils.randomUUID20(); + SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(); +// SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(generalCatalogueId,"General Catalogue","",sarFileSplitInfoEO.getId(),treeListDisplay++,""); + documentTreeEO.setId(generalCatalogueId); + documentTreeEO.setName("总目录"); + documentTreeEO.setInfoId(sarFileSplitInfoEO.getId()); + documentTreeEO.setDisplaySeq(1L); + documentTreeEO.setDisplaySeq(treeListDisplay++); + documentTreeEO.setValidFlag(0); + treeList.add(documentTreeEO); + + List nowStart = new ArrayList<>(); + nowStart.add("1"); + try { + + //获取文件地址 + String connectId = sarFileSplitInfoEO.getConnectId(); + String fileName = sarFileSplitInfoEO.getFileName(); + if (StringUtils.isEmpty(connectId) || StringUtils.isEmpty(fileName)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(OSSFile::getConnectId, connectId); + queryWrapper.eq(OSSFile::getFileName, fileName); + queryWrapper.orderByDesc(OSSFile::getCreateTime); + List ossFileList = iossFileService.list(queryWrapper); + if (CollectionUtils.isEmpty(ossFileList)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + OSSFile ossFile = ossFileList.get(0); + String readFilePath = ossFile.getUrl(); + + if (StringUtils.isEmpty(readFilePath) || !CosBootUtil.doesObjectExist(readFilePath)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + + String readPdf = ReadPdfUtil.readPdf(readFilePath); + if (StringUtils.isEmpty(readPdf)) { + throw new JeroBootException("未读取到文件内容,请检查后重试!"); + } + String[] pdfArrays; + + String os = System.getProperty("os.name"); + //Windows操作系统 + if (os != null && os.toLowerCase().startsWith("windows")) { + pdfArrays = readPdf.split("\r\n"); + } else if (os != null && os.toLowerCase().startsWith("linux")) {//Linux操作系统 + pdfArrays = readPdf.split("\n"); + } else { //其它操作系统 + pdfArrays = readPdf.split("\n"); + } + + List startDigitList = getStartDigit(pdfArrays, enumByValue); + String regex = "^[0-9]*$"; + boolean menuCanAdd = false; // 判断当前目录下是否可以正常填写数据 + boolean firstFlag = true; + String preName = ""; + int preNameNum = 0; +// for (String paragraphString : pdfArrays) { + for (int g=0; g10?paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+10):paragraphString.substring(nowStart.get(i).length()); + String itemName = FileSplitUtils.getItemName(paragraphString, startDigit); + List clauseContent = new ArrayList<>(); + clauseContent.add(paragraphString); + SarFileSplitItemsEO message = fileSpiltService.getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(), startDigit, itemName, clauseContent); + + String[] numberStr = startDigit.split("\\."); + if (Integer.valueOf(numberStr[0]) > sarFileSplitInfoEO.getStopNumber()) { + menuCanAdd = false; + } else { + // 增加一条数据,需要在数结构中加一条数据 + SarFileSplitMenuEO sarFileSplitMenuEO = fileSpiltService.getTreeList(startDigit, treeList, generalCatalogueId, sarFileSplitInfoEO, treeListDisplay++, itemName, enumByValue); + treeList.add(sarFileSplitMenuEO); + preName = startDigit; + preNameNum = g; + message.setMenuId(sarFileSplitMenuEO.getId()); + if(!StringUtils.isEmpty(itemName)){ + fileSpiltService.addItermsConditionsText(message, itemValList, paragraphString.substring(startDigit.length())); + } + messageList.add(message); + nowStart = fileSpiltService.getNewNowStart(startDigit); +// nowStart.addAll(treeList.stream().filter(e->!"1".equals(e.getName())).map(SarFileSplitMenuEO:: getName).collect(Collectors.toList())); + menuCanAdd = true; + } + hasGoIf = true; + break; + + } + } + // 不是标题行 + if (!hasGoIf && menuCanAdd) { + Pattern ptest = Pattern.compile("^附录\\s{0,50}[A-Z]{1}"); + Matcher matcher = ptest.matcher(paragraphString); + // 获取当前最后一项num + if (matcher.find() && !messageList.get(messageList.size() - 1).getItemsNum().equals("附录")) { + String appendixNum = messageList.get(messageList.size() - 1).getItemsNum().split("\\.")[0]; + if (Integer.valueOf(appendixNum) + 1 <= sarFileSplitInfoEO.getStopNumber()) { + String itemName = "附录"; + List clauseContent = new ArrayList<>(); + clauseContent.add(paragraphString); + SarFileSplitItemsEO message = fileSpiltService.getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(), "附录", itemName, clauseContent); + // 增加一条数据,需要在数结构中加一条数据 + SarFileSplitMenuEO sarFileSplitMenuEO = fileSpiltService.getTreeList("附录", treeList, generalCatalogueId, sarFileSplitInfoEO, treeListDisplay++, "", enumByValue); + fileSpiltService.addItermsConditionsText(message, itemValList, paragraphString); + treeList.add(sarFileSplitMenuEO); + message.setMenuId(sarFileSplitMenuEO.getId()); + messageList.add(message); + nowStart = new ArrayList<>(); + } else { + break; + } + } else { + if (!paragraphString.equals("")) { + fileSpiltService.addItermsConditionsText(messageList.get(messageList.size() - 1), itemValList, paragraphString); + } + } + hasGoIf = true; + } + // 判断是否直接跳出所有循环 + if (!menuCanAdd && messageList.size() > 0) { + break; + } + } + + } catch (JeroBootException e) { + e.printStackTrace(); + throw new JeroBootException(e.getMessage()); + } catch (Exception e) { + e.printStackTrace(); + return -1; + } + if (treeList.size() > 0 && messageList.size() > 0) { + sarFileSplitMenuEOMapper.insertForeach(treeList); + iSarFileSplitItemsEOService.insertForeach(messageList); + iSarFileSplitItemsValEOService.insertForeach(itemValList); + } else { + return -1; + } + return treeList.size(); + + } + + public int fileGSO(SarFileSplitInfoEO sarFileSplitInfoEO, SplitFileTypeTypeEnum enumByValue) { + + // 拆分文件主表中插入数据 + if (sarFileSplitInfoEO.getStopNumber() <= 0) { + sarFileSplitInfoEO.setStopNumber(200); + } + if (sarFileSplitInfoEO.getStartNumber() <= 0) { + sarFileSplitInfoEO.setStartNumber(1); + } +// dao.insertSelective(sarFileSplitInfoEO); + + // 拆分文件条款表中最终插入数据 + List messageList = new ArrayList<>(); +// int messageNumber = 0; + // 拆分文件目录表中最终插入数据 + List treeList = new ArrayList<>(); + // 拆分文件条款详情表中最终插入数据 + List itemValList = new ArrayList<>(); + Long treeListDisplay = 1L; + + String generalCatalogueId = UUIDUtils.randomUUID20(); + SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(); +// SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(generalCatalogueId,"General Catalogue","",sarFileSplitInfoEO.getId(),treeListDisplay++,""); + documentTreeEO.setId(generalCatalogueId); + documentTreeEO.setName("General Catalogue"); + documentTreeEO.setInfoId(sarFileSplitInfoEO.getId()); + documentTreeEO.setDisplaySeq(1L); + documentTreeEO.setDisplaySeq(treeListDisplay++); + documentTreeEO.setValidFlag(0); + treeList.add(documentTreeEO); + + List nowStart = new ArrayList<>(); + nowStart.add("1"); + try { + + //获取文件地址 + String connectId = sarFileSplitInfoEO.getConnectId(); + String fileName = sarFileSplitInfoEO.getFileName(); + if (StringUtils.isEmpty(connectId) || StringUtils.isEmpty(fileName)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(OSSFile::getConnectId, connectId); + queryWrapper.eq(OSSFile::getFileName, fileName); + queryWrapper.orderByDesc(OSSFile::getCreateTime); + List ossFileList = iossFileService.list(queryWrapper); + if (CollectionUtils.isEmpty(ossFileList)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + OSSFile ossFile = ossFileList.get(0); + String readFilePath = ossFile.getUrl(); + + if (StringUtils.isEmpty(readFilePath) || !CosBootUtil.doesObjectExist(readFilePath)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + + String readPdf = ReadPdfUtil.readPdf(readFilePath); + if (StringUtils.isEmpty(readPdf)) { + throw new JeroBootException("未读取到文件内容,请检查后重试!"); + } + String[] pdfArrays; + + String os = System.getProperty("os.name"); + //Windows操作系统 + if (os != null && os.toLowerCase().startsWith("windows")) { + pdfArrays = readPdf.split("\r\n"); + } else if (os != null && os.toLowerCase().startsWith("linux")) {//Linux操作系统 + pdfArrays = readPdf.split("\n"); + } else { //其它操作系统 + pdfArrays = readPdf.split("\n"); + } + + List startDigitList = getStartDigit(pdfArrays, enumByValue); + List newStartDigitList = new ArrayList<>(); + for (String startDigit : startDigitList) { + if(startDigit.endsWith(".")) { + startDigit = startDigit.substring(0, startDigit.lastIndexOf(".")); + } + newStartDigitList.add(startDigit); + } + String regex = "^[0-9]*$"; + boolean menuCanAdd = false; // 判断当前目录下是否可以正常填写数据 + boolean firstFlag = true; + String preName = ""; + int preNameNum = 0; +// for (String paragraphString : pdfArrays) { + for (int g=0; g10?paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+10):paragraphString.substring(nowStart.get(i).length()); + String itemName = FileSplitUtils.getItemName(paragraphString, startDigit); + List clauseContent = new ArrayList<>(); + clauseContent.add(paragraphString); + SarFileSplitItemsEO message = fileSpiltService.getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(), startDigit, itemName, clauseContent); + + String[] numberStr = nowStart.get(i).split("\\."); + if (Integer.valueOf(numberStr[0]) > sarFileSplitInfoEO.getStopNumber()) { + menuCanAdd = false; + } else { + // 增加一条数据,需要在数结构中加一条数据 + SarFileSplitMenuEO sarFileSplitMenuEO = fileSpiltService.getTreeList(nowStart.get(i), treeList, generalCatalogueId, sarFileSplitInfoEO, treeListDisplay++, itemName, enumByValue); + treeList.add(sarFileSplitMenuEO); + preName = nowStart.get(i); + preNameNum = g; + message.setMenuId(sarFileSplitMenuEO.getId()); + if(!StringUtils.isEmpty(itemName)){ + fileSpiltService.addItermsConditionsText(message, itemValList, paragraphString.substring(startDigit.length())); + } + messageList.add(message); + nowStart = fileSpiltService.getNewNowStart(nowStart.get(i)); + menuCanAdd = true; + } + hasGoIf = true; + break; + + } + } + // 不是标题行 + if (!hasGoIf && menuCanAdd) { + if ("annex1".equals(paragraphString.toLowerCase().replaceAll("\t", "") + .replaceAll("\b", "").replaceAll(" ", "")) + && !messageList.get(messageList.size() - 1).getItemsNum().equals("annex")) { + + String appendixNum = messageList.get(messageList.size() - 1).getItemsNum().split("\\.")[0]; + if (Integer.valueOf(appendixNum) + 1 <= sarFileSplitInfoEO.getStopNumber()) { + String itemName = "annex"; + List clauseContent = new ArrayList<>(); + clauseContent.add(paragraphString); + SarFileSplitItemsEO message = fileSpiltService.getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(), "annex", itemName, clauseContent); + // 增加一条数据,需要在数结构中加一条数据 + SarFileSplitMenuEO sarFileSplitMenuEO = fileSpiltService.getTreeList("annex", treeList, generalCatalogueId, sarFileSplitInfoEO, treeListDisplay++, "", enumByValue); + fileSpiltService.addItermsConditionsText(message, itemValList, paragraphString); + treeList.add(sarFileSplitMenuEO); + message.setMenuId(sarFileSplitMenuEO.getId()); + messageList.add(message); + nowStart = new ArrayList<>(); + } else { + break; + } + + } else { + if (!paragraphString.equals("")) { + fileSpiltService.addItermsConditionsText(messageList.get(messageList.size() - 1), itemValList, paragraphString); + } + } + hasGoIf = true; + } + // 判断是否直接跳出所有循环 + if (!menuCanAdd && messageList.size() > 0) { + break; + } + } + + } catch (JeroBootException e) { + e.printStackTrace(); + throw new JeroBootException(e.getMessage()); + } catch (Exception e) { + e.printStackTrace(); + return -1; + } + if (treeList.size() > 0 && messageList.size() > 0) { + sarFileSplitMenuEOMapper.insertForeach(treeList); + iSarFileSplitItemsEOService.insertForeach(messageList); + iSarFileSplitItemsValEOService.insertForeach(itemValList); + } else { + return -1; + } + return treeList.size(); + + } + + public int fileEU(SarFileSplitInfoEO sarFileSplitInfoEO, SplitFileTypeTypeEnum enumByValue) { + + // 拆分文件主表中插入数据 + if (sarFileSplitInfoEO.getStopNumber() <= 0) { + sarFileSplitInfoEO.setStopNumber(200); + } + if (sarFileSplitInfoEO.getStartNumber() <= 0) { + sarFileSplitInfoEO.setStartNumber(1); + } +// dao.insertSelective(sarFileSplitInfoEO); + + // 拆分文件条款表中最终插入数据 + List messageList = new ArrayList<>(); +// int messageNumber = 0; + // 拆分文件目录表中最终插入数据 + List treeList = new ArrayList<>(); + // 拆分文件条款详情表中最终插入数据 + List itemValList = new ArrayList<>(); + Long treeListDisplay = 1L; + + String generalCatalogueId = UUIDUtils.randomUUID20(); + SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(); +// SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(generalCatalogueId,"General Catalogue","",sarFileSplitInfoEO.getId(),treeListDisplay++,""); + documentTreeEO.setId(generalCatalogueId); + documentTreeEO.setName("General Catalogue"); + documentTreeEO.setInfoId(sarFileSplitInfoEO.getId()); + documentTreeEO.setDisplaySeq(1L); + documentTreeEO.setDisplaySeq(treeListDisplay++); + documentTreeEO.setValidFlag(0); + treeList.add(documentTreeEO); + + List nowStart = new ArrayList<>(); + nowStart.add("1"); + try { + + //获取文件地址 + String connectId = sarFileSplitInfoEO.getConnectId(); + String fileName = sarFileSplitInfoEO.getFileName(); + if (StringUtils.isEmpty(connectId) || StringUtils.isEmpty(fileName)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(OSSFile::getConnectId, connectId); + queryWrapper.eq(OSSFile::getFileName, fileName); + queryWrapper.orderByDesc(OSSFile::getCreateTime); + List ossFileList = iossFileService.list(queryWrapper); + if (CollectionUtils.isEmpty(ossFileList)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + OSSFile ossFile = ossFileList.get(0); + String readFilePath = ossFile.getUrl(); + + if (StringUtils.isEmpty(readFilePath) || !CosBootUtil.doesObjectExist(readFilePath)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + + String readPdf = ReadPdfUtil.readPdf(readFilePath); + if (StringUtils.isEmpty(readPdf)) { + throw new JeroBootException("未读取到文件内容,请检查后重试!"); + } + String[] pdfArrays; + + String os = System.getProperty("os.name"); + //Windows操作系统 + if (os != null && os.toLowerCase().startsWith("windows")) { + pdfArrays = readPdf.split("\r\n"); + } else if (os != null && os.toLowerCase().startsWith("linux")) {//Linux操作系统 + pdfArrays = readPdf.split("\n"); + } else { //其它操作系统 + pdfArrays = readPdf.split("\n"); + } + + List startDigitList = getStartDigit(pdfArrays, enumByValue); + List newStartDigitList = new ArrayList<>(); + for (String startDigit : startDigitList) { + if(startDigit.endsWith(".")) { + startDigit = startDigit.substring(0, startDigit.lastIndexOf(".")); + } + newStartDigitList.add(startDigit); + } + String regex = "^[0-9]*$"; + boolean menuCanAdd = false; // 判断当前目录下是否可以正常填写数据 + boolean firstFlag = true; + String preName = ""; + int preNameNum = 0; +// for (String paragraphString : pdfArrays) { + for (int g=0; g10?paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+10):paragraphString.substring(nowStart.get(i).length()); + String itemName = FileSplitUtils.getItemName(paragraphString, startDigit); + List clauseContent = new ArrayList<>(); + clauseContent.add(paragraphString); + SarFileSplitItemsEO message = fileSpiltService.getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(), startDigit, itemName, clauseContent); + + String[] numberStr = nowStart.get(i).split("\\."); +// String numberStrTemp = numberStr[0].replace("S", ""); + + if (Integer.valueOf(numberStr[0]) > sarFileSplitInfoEO.getStopNumber()) { + menuCanAdd = false; + } else { + // 增加一条数据,需要在数结构中加一条数据 + SarFileSplitMenuEO sarFileSplitMenuEO = fileSpiltService.getTreeList(nowStart.get(i), treeList, generalCatalogueId, sarFileSplitInfoEO, treeListDisplay++, itemName, enumByValue); + treeList.add(sarFileSplitMenuEO); + preName = nowStart.get(i); + preNameNum = g; + message.setMenuId(sarFileSplitMenuEO.getId()); + if(!StringUtils.isEmpty(itemName)){ + fileSpiltService.addItermsConditionsText(message, itemValList, paragraphString.substring(startDigit.length())); + } + messageList.add(message); +// nowStart = fileSpiltService.getNewNowStartEU(nowStart.get(i)); + nowStart = fileSpiltService.getNewNowStart(nowStart.get(i)); + menuCanAdd = true; + } + hasGoIf = true; + break; + + } + } + // 不是标题行 + if (!hasGoIf && menuCanAdd) { + if (("annex1".equals(paragraphString.toLowerCase().replaceAll("\t", "") + .replaceAll("\b", "").replaceAll(" ", "")) + || "annex1a".equals(paragraphString.toLowerCase().replaceAll("\t", "") + .replaceAll("\b", "").replaceAll(" ", ""))) + && !messageList.get(messageList.size() - 1).getItemsNum().equals("annex")) { + + String appendixNum = messageList.get(messageList.size() - 1).getItemsNum().split("\\.")[0]; + if (Integer.valueOf(appendixNum) + 1 <= sarFileSplitInfoEO.getStopNumber()) { + String itemName = "annex"; + List clauseContent = new ArrayList<>(); + clauseContent.add(paragraphString); + SarFileSplitItemsEO message = fileSpiltService.getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(), "annex", itemName, clauseContent); + // 增加一条数据,需要在数结构中加一条数据 + SarFileSplitMenuEO sarFileSplitMenuEO = fileSpiltService.getTreeList("annex", treeList, generalCatalogueId, sarFileSplitInfoEO, treeListDisplay++, "", enumByValue); + fileSpiltService.addItermsConditionsText(message, itemValList, paragraphString); + treeList.add(sarFileSplitMenuEO); + message.setMenuId(sarFileSplitMenuEO.getId()); + messageList.add(message); + nowStart = new ArrayList<>(); + } else { + break; + } + + } else { + if (!paragraphString.equals("")) { + fileSpiltService.addItermsConditionsText(messageList.get(messageList.size() - 1), itemValList, paragraphString); + } + } + hasGoIf = true; + } + // 判断是否直接跳出所有循环 + if (!menuCanAdd && messageList.size() > 0) { + break; + } + } + + } catch (JeroBootException e) { + e.printStackTrace(); + throw new JeroBootException(e.getMessage()); + } catch (Exception e) { + e.printStackTrace(); + return -1; + } + if (treeList.size() > 0 && messageList.size() > 0) { + sarFileSplitMenuEOMapper.insertForeach(treeList); + iSarFileSplitItemsEOService.insertForeach(messageList); + iSarFileSplitItemsValEOService.insertForeach(itemValList); + } else { + return -1; + } + return treeList.size(); + + } + + + public int fileUSA(SarFileSplitInfoEO sarFileSplitInfoEO, SplitFileTypeTypeEnum enumByValue) { + + // 拆分文件主表中插入数据 + if (sarFileSplitInfoEO.getStopNumber() <= 0) { + sarFileSplitInfoEO.setStopNumber(200); + } + if (sarFileSplitInfoEO.getStartNumber() <= 0) { + sarFileSplitInfoEO.setStartNumber(1); + } +// dao.insertSelective(sarFileSplitInfoEO); + + // 拆分文件条款表中最终插入数据 + List messageList = new ArrayList<>(); +// int messageNumber = 0; + // 拆分文件目录表中最终插入数据 + List treeList = new ArrayList<>(); + // 拆分文件条款详情表中最终插入数据 + List itemValList = new ArrayList<>(); + Long treeListDisplay = 1L; + + String generalCatalogueId = UUIDUtils.randomUUID20(); + SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(); +// SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(generalCatalogueId,"General Catalogue","",sarFileSplitInfoEO.getId(),treeListDisplay++,""); + documentTreeEO.setId(generalCatalogueId); + documentTreeEO.setName("General Catalogue"); + documentTreeEO.setInfoId(sarFileSplitInfoEO.getId()); + documentTreeEO.setDisplaySeq(1L); + documentTreeEO.setDisplaySeq(treeListDisplay++); + documentTreeEO.setValidFlag(0); + treeList.add(documentTreeEO); + + List nowStart = new ArrayList<>(); + nowStart.add("S1"); + try { + + //获取文件地址 + String connectId = sarFileSplitInfoEO.getConnectId(); + String fileName = sarFileSplitInfoEO.getFileName(); + if (StringUtils.isEmpty(connectId) || StringUtils.isEmpty(fileName)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(OSSFile::getConnectId, connectId); + queryWrapper.eq(OSSFile::getFileName, fileName); + queryWrapper.orderByDesc(OSSFile::getCreateTime); + List ossFileList = iossFileService.list(queryWrapper); + if (CollectionUtils.isEmpty(ossFileList)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + OSSFile ossFile = ossFileList.get(0); + String readFilePath = ossFile.getUrl(); + + if (StringUtils.isEmpty(readFilePath) || !CosBootUtil.doesObjectExist(readFilePath)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + + String readPdf = ReadPdfUtil.readPdf(readFilePath); + if (StringUtils.isEmpty(readPdf)) { + throw new JeroBootException("未读取到文件内容,请检查后重试!"); + } + String[] pdfArrays; + + String os = System.getProperty("os.name"); + //Windows操作系统 + if (os != null && os.toLowerCase().startsWith("windows")) { + pdfArrays = readPdf.split("\r\n"); + } else if (os != null && os.toLowerCase().startsWith("linux")) {//Linux操作系统 + pdfArrays = readPdf.split("\n"); + } else { //其它操作系统 + pdfArrays = readPdf.split("\n"); + } + + List startDigitList = getStartDigit(pdfArrays, enumByValue); + List newStartDigitList = new ArrayList<>(); + for (String startDigit : startDigitList) { + if(startDigit.endsWith("S")) { + startDigit = startDigit.substring(0, startDigit.lastIndexOf("S")); + } + if(startDigit.endsWith(".")) { + startDigit = startDigit.substring(0, startDigit.lastIndexOf(".")); + } + newStartDigitList.add(startDigit); + } +// String regex = "^[0-9]*$"; + boolean menuCanAdd = false; // 判断当前目录下是否可以正常填写数据 +// boolean firstFlag = true; + String preName = ""; + int preNameNum = 0; +// for (String paragraphString : pdfArrays) { + for (int g=0; g10?paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+10):paragraphString.substring(nowStart.get(i).length()); + String itemName = FileSplitUtils.getItemName(paragraphString, startDigit); + List clauseContent = new ArrayList<>(); + clauseContent.add(paragraphString); + SarFileSplitItemsEO message = fileSpiltService.getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(), startDigit, itemName, clauseContent); + + String[] numberStr = nowStart.get(i).split("\\."); + String numberStrTemp = numberStr[0].replace("S", ""); + + if (Integer.valueOf(numberStrTemp) > sarFileSplitInfoEO.getStopNumber()) { + menuCanAdd = false; + } else { + // 增加一条数据,需要在数结构中加一条数据 + SarFileSplitMenuEO sarFileSplitMenuEO = fileSpiltService.getTreeList(nowStart.get(i), treeList, generalCatalogueId, sarFileSplitInfoEO, treeListDisplay++, itemName, enumByValue); + treeList.add(sarFileSplitMenuEO); + preName = nowStart.get(i); + preNameNum = g; + message.setMenuId(sarFileSplitMenuEO.getId()); + if(!StringUtils.isEmpty(itemName)){ + fileSpiltService.addItermsConditionsText(message, itemValList, paragraphString.substring(startDigit.length())); + } + messageList.add(message); + nowStart = fileSpiltService.getNewNowStartUS(nowStart.get(i)); + menuCanAdd = true; + } + hasGoIf = true; + break; + + } + } + // 不是标题行 + if (!hasGoIf && menuCanAdd) { + if (!paragraphString.equals("")) { + fileSpiltService.addItermsConditionsText(messageList.get(messageList.size() - 1), itemValList, paragraphString); + } + hasGoIf = true; + } + // 判断是否直接跳出所有循环 + if (!menuCanAdd && messageList.size() > 0) { + break; + } + } + + } catch (JeroBootException e) { + e.printStackTrace(); + throw new JeroBootException(e.getMessage()); + } catch (Exception e) { + e.printStackTrace(); + return -1; + } + if (treeList.size() > 0 && messageList.size() > 0) { + sarFileSplitMenuEOMapper.insertForeach(treeList); + iSarFileSplitItemsEOService.insertForeach(messageList); + iSarFileSplitItemsValEOService.insertForeach(itemValList); + } else { + return -1; + } + return treeList.size(); + + } + + public int fileKmvssArticle(SarFileSplitInfoEO sarFileSplitInfoEO, SplitFileTypeTypeEnum enumByValue) { + + // 拆分文件主表中插入数据 + if (sarFileSplitInfoEO.getStopNumber() <= 0) { + sarFileSplitInfoEO.setStopNumber(200); + } + if (sarFileSplitInfoEO.getStartNumber() <= 0) { + sarFileSplitInfoEO.setStartNumber(1); + } +// dao.insertSelective(sarFileSplitInfoEO); + + // 拆分文件条款表中最终插入数据 + List messageList = new ArrayList<>(); +// int messageNumber = 0; + // 拆分文件目录表中最终插入数据 + List treeList = new ArrayList<>(); + // 拆分文件条款详情表中最终插入数据 + List itemValList = new ArrayList<>(); + Long treeListDisplay = 1L; + + String generalCatalogueId = UUIDUtils.randomUUID20(); + SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(); +// SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(generalCatalogueId,"General Catalogue","",sarFileSplitInfoEO.getId(),treeListDisplay++,""); + documentTreeEO.setId(generalCatalogueId); + documentTreeEO.setName("General Catalogue"); + documentTreeEO.setInfoId(sarFileSplitInfoEO.getId()); + documentTreeEO.setDisplaySeq(1L); + documentTreeEO.setDisplaySeq(treeListDisplay++); + documentTreeEO.setValidFlag(0); + treeList.add(documentTreeEO); + + List nowStart = new ArrayList<>(); + nowStart.add("(1)"); + try { + + //获取文件地址 + String connectId = sarFileSplitInfoEO.getConnectId(); + String fileName = sarFileSplitInfoEO.getFileName(); + if (StringUtils.isEmpty(connectId) || StringUtils.isEmpty(fileName)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(OSSFile::getConnectId, connectId); + queryWrapper.eq(OSSFile::getFileName, fileName); + queryWrapper.orderByDesc(OSSFile::getCreateTime); + List ossFileList = iossFileService.list(queryWrapper); + if (CollectionUtils.isEmpty(ossFileList)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + OSSFile ossFile = ossFileList.get(0); + String readFilePath = ossFile.getUrl(); + + if (StringUtils.isEmpty(readFilePath) || !CosBootUtil.doesObjectExist(readFilePath)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + + String readPdf = ReadPdfUtil.readPdf(readFilePath); + if (StringUtils.isEmpty(readPdf)) { + throw new JeroBootException("未读取到文件内容,请检查后重试!"); + } + String[] pdfArrays; + + String os = System.getProperty("os.name"); + //Windows操作系统 + if (os != null && os.toLowerCase().startsWith("windows")) { + pdfArrays = readPdf.split("\r\n"); + } else if (os != null && os.toLowerCase().startsWith("linux")) {//Linux操作系统 + pdfArrays = readPdf.split("\n"); + } else { //其它操作系统 + pdfArrays = readPdf.split("\n"); + } + +// List startDigitList = getStartDigit(pdfArrays, enumByValue); +// String regex = "^[0-9]*$"; + boolean menuCanAdd = false; // 判断当前目录下是否可以正常填写数据 + StringBuilder lastStr = new StringBuilder(); +// boolean firstFlag = true; +// for (String paragraphString : pdfArrays) { + for (int g=0; g10?paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+10):paragraphString.substring(nowStart.get(i).length()); + String itemName = FileSplitUtils.getItemName(paragraphString, nowStart.get(i)); + List clauseContent = new ArrayList<>(); + clauseContent.add(paragraphString); + SarFileSplitItemsEO message = fileSpiltService.getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(), nowStart.get(i), itemName, clauseContent); + + // 增加一条数据,需要在数结构中加一条数据 + String name = lastStr + "=" + nowStart.get(i); + SarFileSplitMenuEO sarFileSplitMenuEO = fileSpiltService.getTreeList(name, treeList, generalCatalogueId, sarFileSplitInfoEO, treeListDisplay++, itemName, enumByValue); + treeList.add(sarFileSplitMenuEO); + message.setMenuId(sarFileSplitMenuEO.getId()); + if(!StringUtils.isEmpty(itemName)){ + fileSpiltService.addItermsConditionsText(message, itemValList, paragraphString.substring(nowStart.get(i).length())); + } + messageList.add(message); + nowStart = fileSpiltService.getNewNowStartKmvssArticle(lastStr, nowStart.get(i)); + menuCanAdd = true; + hasGoIf = true; + break; + + } + } + // 不是标题行 + if (!hasGoIf && menuCanAdd) { + if (!paragraphString.equals("")) { + fileSpiltService.addItermsConditionsText(messageList.get(messageList.size() - 1), itemValList, paragraphString); + } + hasGoIf = true; + } + // 判断是否直接跳出所有循环 + if (!menuCanAdd && messageList.size() > 0) { + break; + } + } + + } catch (JeroBootException e) { + e.printStackTrace(); + throw new JeroBootException(e.getMessage()); + } catch (Exception e) { + e.printStackTrace(); + return -1; + } + if (treeList.size() > 0 && messageList.size() > 0) { + sarFileSplitMenuEOMapper.insertForeach(treeList); + iSarFileSplitItemsEOService.insertForeach(messageList); + iSarFileSplitItemsValEOService.insertForeach(itemValList); + } else { + return -1; + } + return treeList.size(); + + } + + public int fileKmvssTable(SarFileSplitInfoEO sarFileSplitInfoEO, SplitFileTypeTypeEnum enumByValue) { + + // 拆分文件主表中插入数据 + if (sarFileSplitInfoEO.getStopNumber() <= 0) { + sarFileSplitInfoEO.setStopNumber(200); + } + if (sarFileSplitInfoEO.getStartNumber() <= 0) { + sarFileSplitInfoEO.setStartNumber(1); + } +// dao.insertSelective(sarFileSplitInfoEO); + + // 拆分文件条款表中最终插入数据 + List messageList = new ArrayList<>(); +// int messageNumber = 0; + // 拆分文件目录表中最终插入数据 + List treeList = new ArrayList<>(); + // 拆分文件条款详情表中最终插入数据 + List itemValList = new ArrayList<>(); + //固定字段内容跳过,包含Note:、Notes: + List filterList = new ArrayList<>(); + filterList.add("Note:"); + filterList.add("Notes:"); + + Long treeListDisplay = 1L; + + String generalCatalogueId = UUIDUtils.randomUUID20(); + SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(); +// SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(generalCatalogueId,"General Catalogue","",sarFileSplitInfoEO.getId(),treeListDisplay++,""); + documentTreeEO.setId(generalCatalogueId); + documentTreeEO.setName("General Catalogue"); + documentTreeEO.setInfoId(sarFileSplitInfoEO.getId()); + documentTreeEO.setDisplaySeq(1L); + documentTreeEO.setDisplaySeq(treeListDisplay++); + documentTreeEO.setValidFlag(0); + treeList.add(documentTreeEO); + + List nowStart = new ArrayList<>(); + //临时保存note数据列表 + List nowStartNotes = new ArrayList<>(); + //初始判断值 + nowStart.add("1."); + nowStartNotes.add("1."); + try { + + //获取文件地址 + String connectId = sarFileSplitInfoEO.getConnectId(); + String fileName = sarFileSplitInfoEO.getFileName(); + if (StringUtils.isEmpty(connectId) || StringUtils.isEmpty(fileName)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(OSSFile::getConnectId, connectId); + queryWrapper.eq(OSSFile::getFileName, fileName); + queryWrapper.orderByDesc(OSSFile::getCreateTime); + List ossFileList = iossFileService.list(queryWrapper); + if (CollectionUtils.isEmpty(ossFileList)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + OSSFile ossFile = ossFileList.get(0); + String readFilePath = ossFile.getUrl(); + + if (StringUtils.isEmpty(readFilePath) || !CosBootUtil.doesObjectExist(readFilePath)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + + String readPdf = ReadPdfUtil.readPdf(readFilePath); + if (StringUtils.isEmpty(readPdf)) { + throw new JeroBootException("未读取到文件内容,请检查后重试!"); + } + String[] pdfArrays; + + String os = System.getProperty("os.name"); + //Windows操作系统 + if (os != null && os.toLowerCase().startsWith("windows")) { + pdfArrays = readPdf.split("\r\n"); + } else if (os != null && os.toLowerCase().startsWith("linux")) {//Linux操作系统 + pdfArrays = readPdf.split("\n"); + } else { //其它操作系统 + pdfArrays = readPdf.split("\n"); + } + +// List startDigitList = getStartDigit(pdfArrays, enumByValue); +// String regex = "^[0-9]*$"; + boolean menuCanAdd = false; // 判断当前目录下是否可以正常填写数据 + boolean filterFlag = false; + int menuLevel = 0;//菜单等级,分为1/2/3/4/5级 + int menuNoteLevel = 0;//菜单等级,分为1/2/3/4/5级 + //存储前四级目录数据 + String[] catalogerArr = new String[4]; + String[] catalogerNoteArr = new String[4]; +// boolean firstFlag = true; +// for (String paragraphString : pdfArrays) { + for (int g=0; g(); + nowStartNotes.add("1."); + catalogerNoteArr = new String[4]; + menuNoteLevel = 0; + } + + boolean hasGoIf = false; + // 处理标题行 +// String startDigit = getOneStartDigit(paragraphString,enumByValue); + for (int i = 0; i < nowStart.size(); i++) { + if (paragraphString.startsWith(nowStart.get(i)) && (!filterFlag)) { +// if (startDigit.equals(nowStart.get(i))) { + // 判断真的是标题还是干扰项 TODO +// String startDigit = nowStart.get(i); +// if (startDigit.matches(regex)) { +// boolean result = judge(nowStart, startDigit, startDigitList, "\\."); +// if (result) { +// continue; +// } +// } + // 判断名称,如果大于10位,取十位, +// String itemName = paragraphString.substring(nowStart.get(i).length()).length()>10?paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+10):paragraphString.substring(nowStart.get(i).length()); + String itemName = FileSplitUtils.getItemName(paragraphString, nowStart.get(i)); + List clauseContent = new ArrayList<>(); + clauseContent.add(paragraphString); + SarFileSplitItemsEO message = fileSpiltService.getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(), nowStart.get(i), itemName, clauseContent); + + // 增加一条数据,需要在数结构中加一条数据 + String name = ""; + for (int j = 0; j < catalogerArr.length; j++) { + name = name + "=" + catalogerArr[j]; + } + name = name + "=" + nowStart.get(i); + SarFileSplitMenuEO sarFileSplitMenuEO = fileSpiltService.getTreeList(name, treeList, generalCatalogueId, sarFileSplitInfoEO, treeListDisplay++, itemName, enumByValue); + treeList.add(sarFileSplitMenuEO); + message.setMenuId(sarFileSplitMenuEO.getId()); + if(!StringUtils.isEmpty(itemName)){ + fileSpiltService.addItermsConditionsText(message, itemValList, paragraphString.substring(nowStart.get(i).length())); + } + messageList.add(message); + nowStart = fileSpiltService.getNewNowStartKmvssTable(catalogerArr, nowStart.get(i), menuLevel); + menuCanAdd = true; + hasGoIf = true; + break; + + } + } + // 不是标题行 + if (!hasGoIf && menuCanAdd) { + if (!paragraphString.equals("")) { + fileSpiltService.addItermsConditionsText(messageList.get(messageList.size() - 1), itemValList, paragraphString); + } + hasGoIf = true; + } + // 判断是否直接跳出所有循环 + if (!menuCanAdd && messageList.size() > 0) { + break; + } + } + + } catch (JeroBootException e) { + e.printStackTrace(); + throw new JeroBootException(e.getMessage()); + } catch (Exception e) { + e.printStackTrace(); + return -1; + } + if (treeList.size() > 0 && messageList.size() > 0) { + sarFileSplitMenuEOMapper.insertForeach(treeList); + iSarFileSplitItemsEOService.insertForeach(messageList); + iSarFileSplitItemsValEOService.insertForeach(itemValList); + } else { + return -1; + } + return treeList.size(); + + } + + public int fileJapanOne(SarFileSplitInfoEO sarFileSplitInfoEO, SplitFileTypeTypeEnum enumByValue) { + + // 拆分文件主表中插入数据 + if (sarFileSplitInfoEO.getStopNumber() <= 0) { + sarFileSplitInfoEO.setStopNumber(200); + } + if (sarFileSplitInfoEO.getStartNumber() <= 0) { + sarFileSplitInfoEO.setStartNumber(1); + } +// dao.insertSelective(sarFileSplitInfoEO); + + // 拆分文件条款表中最终插入数据 + List messageList = new ArrayList<>(); +// int messageNumber = 0; + // 拆分文件目录表中最终插入数据 + List treeList = new ArrayList<>(); + // 拆分文件条款详情表中最终插入数据 + List itemValList = new ArrayList<>(); + Long treeListDisplay = 1L; + + String generalCatalogueId = UUIDUtils.randomUUID20(); + SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(); +// SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(generalCatalogueId,"General Catalogue","",sarFileSplitInfoEO.getId(),treeListDisplay++,""); + documentTreeEO.setId(generalCatalogueId); + documentTreeEO.setName("General Catalogue"); + documentTreeEO.setInfoId(sarFileSplitInfoEO.getId()); + documentTreeEO.setDisplaySeq(1L); + documentTreeEO.setDisplaySeq(treeListDisplay++); + documentTreeEO.setValidFlag(0); + treeList.add(documentTreeEO); + + List nowStart = new ArrayList<>(); + //初始判断值 + nowStart.add("1."); + try { + + //获取文件地址 + String connectId = sarFileSplitInfoEO.getConnectId(); + String fileName = sarFileSplitInfoEO.getFileName(); + if (StringUtils.isEmpty(connectId) || StringUtils.isEmpty(fileName)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(OSSFile::getConnectId, connectId); + queryWrapper.eq(OSSFile::getFileName, fileName); + queryWrapper.orderByDesc(OSSFile::getCreateTime); + List ossFileList = iossFileService.list(queryWrapper); + if (CollectionUtils.isEmpty(ossFileList)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + OSSFile ossFile = ossFileList.get(0); + String readFilePath = ossFile.getUrl(); + + if (StringUtils.isEmpty(readFilePath) || !CosBootUtil.doesObjectExist(readFilePath)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + + String readPdf = ReadPdfUtil.readPdf(readFilePath); + if (StringUtils.isEmpty(readPdf)) { + throw new JeroBootException("未读取到文件内容,请检查后重试!"); + } + String[] pdfArrays; + + String os = System.getProperty("os.name"); + //Windows操作系统 + if (os != null && os.toLowerCase().startsWith("windows")) { + pdfArrays = readPdf.split("\r\n"); + } else if (os != null && os.toLowerCase().startsWith("linux")) {//Linux操作系统 + pdfArrays = readPdf.split("\n"); + } else { //其它操作系统 + pdfArrays = readPdf.split("\n"); + } + +// List startDigitList = getStartDigit(pdfArrays, enumByValue); +// String regex = "^[0-9]*$"; + boolean menuCanAdd = false; // 判断当前目录下是否可以正常填写数据 +// boolean firstFlag = true; +// String preName = ""; +// int preNameNum = 0; +// for (String paragraphString : pdfArrays) { + for (int g=0; g10?paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+10):paragraphString.substring(nowStart.get(i).length()); + String itemName = FileSplitUtils.getItemName(paragraphString, nowStart.get(i)); + + + List clauseContent = new ArrayList<>(); + clauseContent.add(paragraphString); + SarFileSplitItemsEO message = fileSpiltService.getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(), nowStart.get(i), itemName, clauseContent); + + String[] numberStr; + if (nowStart.get(i).contains(".")) { + numberStr = nowStart.get(i).split("\\."); + } else { + numberStr = nowStart.get(i).split("–"); + } +// String numberStrTemp = numberStr[0].replace("S", ""); + + if (Integer.valueOf(numberStr[0]) > sarFileSplitInfoEO.getStopNumber()) { + menuCanAdd = false; + } else { + // 增加一条数据,需要在数结构中加一条数据 + SarFileSplitMenuEO sarFileSplitMenuEO = fileSpiltService.getTreeList(nowStart.get(i), treeList, generalCatalogueId, sarFileSplitInfoEO, treeListDisplay++, itemName, enumByValue); + treeList.add(sarFileSplitMenuEO); +// preName = nowStart.get(i); +// preNameNum = g; + message.setMenuId(sarFileSplitMenuEO.getId()); + if(!StringUtils.isEmpty(itemName)){ + fileSpiltService.addItermsConditionsText(message, itemValList, paragraphString.substring(nowStart.get(i).length())); + } + messageList.add(message); + nowStart = fileSpiltService.getNewNowStartJapanOne("", nowStart.get(i)); + menuCanAdd = true; + } + hasGoIf = true; + + break; + + + } + } + // 不是标题行 + if (!hasGoIf && menuCanAdd) { + if (!paragraphString.equals("")) { + fileSpiltService.addItermsConditionsText(messageList.get(messageList.size() - 1), itemValList, paragraphString); + } + hasGoIf = true; + } + // 判断是否直接跳出所有循环 + if (!menuCanAdd && messageList.size() > 0) { + break; + } + } + + } catch (JeroBootException e) { + e.printStackTrace(); + throw new JeroBootException(e.getMessage()); + } catch (Exception e) { + e.printStackTrace(); + return -1; + } + if (treeList.size() > 0 && messageList.size() > 0) { + sarFileSplitMenuEOMapper.insertForeach(treeList); + iSarFileSplitItemsEOService.insertForeach(messageList); + iSarFileSplitItemsValEOService.insertForeach(itemValList); + } else { + return -1; + } + return treeList.size(); + + } + + public int fileJapanTwo(SarFileSplitInfoEO sarFileSplitInfoEO, SplitFileTypeTypeEnum enumByValue) { + + // 拆分文件主表中插入数据 + if (sarFileSplitInfoEO.getStopNumber() <= 0) { + sarFileSplitInfoEO.setStopNumber(200); + } + if (sarFileSplitInfoEO.getStartNumber() <= 0) { + sarFileSplitInfoEO.setStartNumber(1); + } +// dao.insertSelective(sarFileSplitInfoEO); + + // 拆分文件条款表中最终插入数据 + List messageList = new ArrayList<>(); +// int messageNumber = 0; + // 拆分文件目录表中最终插入数据 + List treeList = new ArrayList<>(); + // 拆分文件条款详情表中最终插入数据 + List itemValList = new ArrayList<>(); + Long treeListDisplay = 1L; + + String generalCatalogueId = UUIDUtils.randomUUID20(); + SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(); +// SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(generalCatalogueId,"General Catalogue","",sarFileSplitInfoEO.getId(),treeListDisplay++,""); + documentTreeEO.setId(generalCatalogueId); + documentTreeEO.setName("General Catalogue"); + documentTreeEO.setInfoId(sarFileSplitInfoEO.getId()); + documentTreeEO.setDisplaySeq(1L); + documentTreeEO.setDisplaySeq(treeListDisplay++); + documentTreeEO.setValidFlag(0); + treeList.add(documentTreeEO); + + List nowStart = new ArrayList<>(); + //初始判断值 + nowStart.add("1."); + try { + + //获取文件地址 + String connectId = sarFileSplitInfoEO.getConnectId(); + String fileName = sarFileSplitInfoEO.getFileName(); + if (StringUtils.isEmpty(connectId) || StringUtils.isEmpty(fileName)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(OSSFile::getConnectId, connectId); + queryWrapper.eq(OSSFile::getFileName, fileName); + queryWrapper.orderByDesc(OSSFile::getCreateTime); + List ossFileList = iossFileService.list(queryWrapper); + if (CollectionUtils.isEmpty(ossFileList)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + OSSFile ossFile = ossFileList.get(0); + String readFilePath = ossFile.getUrl(); + + if (StringUtils.isEmpty(readFilePath) || !CosBootUtil.doesObjectExist(readFilePath)) { + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + + String readPdf = ReadPdfUtil.readPdf(readFilePath); + if (StringUtils.isEmpty(readPdf)) { + throw new JeroBootException("未读取到文件内容,请检查后重试!"); + } + String[] pdfArrays; + + String os = System.getProperty("os.name"); + //Windows操作系统 + if (os != null && os.toLowerCase().startsWith("windows")) { + pdfArrays = readPdf.split("\r\n"); + } else if (os != null && os.toLowerCase().startsWith("linux")) {//Linux操作系统 + pdfArrays = readPdf.split("\n"); + } else { //其它操作系统 + pdfArrays = readPdf.split("\n"); + } + +// List startDigitList = getStartDigit(pdfArrays, enumByValue); +// String regex = "^[0-9]*$"; + boolean menuCanAdd = false; // 判断当前目录下是否可以正常填写数据 + StringBuilder lastStrTemp = new StringBuilder(); + StringBuilder secondStrTemp = new StringBuilder(); +// boolean firstFlag = true; +// String preName = ""; +// int preNameNum = 0; +// for (String paragraphString : pdfArrays) { + for (int g=0; g10?paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+10):paragraphString.substring(nowStart.get(i).length()); + String itemName = FileSplitUtils.getItemName(paragraphString, nowStart.get(i)); + List clauseContent = new ArrayList<>(); + clauseContent.add(paragraphString); + SarFileSplitItemsEO message = fileSpiltService.getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(), nowStart.get(i), itemName, clauseContent); + +// String[] numberStr = nowStart.get(i).split("\\."); +// String numberStrTemp = numberStr[0].replace("S", ""); + +// if (Integer.valueOf(numberStr[0]) > sarFileSplitInfoEO.getStopNumber()){ +// menuCanAdd = false; +// } else { + // 增加一条数据,需要在数结构中加一条数据 + String name = lastStrTemp.toString() + "=" + secondStrTemp.toString() + "=" + nowStart.get(i); + SarFileSplitMenuEO sarFileSplitMenuEO = fileSpiltService.getTreeList(name, treeList, generalCatalogueId, sarFileSplitInfoEO, treeListDisplay++, itemName, enumByValue); + treeList.add(sarFileSplitMenuEO); +// preName = nowStart.get(i); +// preNameNum = g; + message.setMenuId(sarFileSplitMenuEO.getId()); + if(!StringUtils.isEmpty(itemName)){ + fileSpiltService.addItermsConditionsText(message, itemValList, paragraphString.substring(nowStart.get(i).length())); + } + messageList.add(message); + nowStart = fileSpiltService.getNewNowStartJapanTwo(lastStrTemp, secondStrTemp, nowStart.get(i)); + menuCanAdd = true; +// } + hasGoIf = true; + break; + + + } + } + // 不是标题行 + if (!hasGoIf && menuCanAdd) { + if (!paragraphString.equals("")) { + fileSpiltService.addItermsConditionsText(messageList.get(messageList.size() - 1), itemValList, paragraphString); + } + hasGoIf = true; + } + // 判断是否直接跳出所有循环 + if (!menuCanAdd && messageList.size() > 0) { + break; + } + } + + } catch (JeroBootException e) { + e.printStackTrace(); + throw new JeroBootException(e.getMessage()); + } catch (Exception e) { + e.printStackTrace(); + return -1; + } + if (treeList.size() > 0 && messageList.size() > 0) { + sarFileSplitMenuEOMapper.insertForeach(treeList); + iSarFileSplitItemsEOService.insertForeach(messageList); + iSarFileSplitItemsValEOService.insertForeach(itemValList); + } else { + return -1; + } + return treeList.size(); + + } + + public String getOneStartDigit(String arr, SplitFileTypeTypeEnum enumByValue) { + String regex="[^\\p{Punct}\\p{Space}\\p{Digit}]"; // TODO + switch (enumByValue) { + case GB: + case GBT: + case EU: + case GSO: + case JPN_ARTICLE: + regex = "[^\\p{Punct}\\p{Space}\\p{Digit}]"; + break; + case KMVSS_ARTICLE: + case JPN_ATTACHMENT: + regex = "[^\\p{Punct}\\p{Space}\\p{Digit}–]"; + break; + case US: + regex = "[^\\p{Punct}\\p{Space}\\p{Digit}S]"; + break; + } + Matcher matcher; + matcher = Pattern.compile(regex).matcher(arr); + if(matcher.find()) { + int index = matcher.start(); + String startDigit = arr.substring(0, index); + startDigit = startDigit.replaceAll(" ", ""); + if(StringUtils.isNotBlank(startDigit)) { + return startDigit.replaceAll("\t", "").replaceAll("\b", "") + .replaceAll("\"", "").replaceAll("\'", ""); + } + } else { + return arr.replaceAll("\t", "").replaceAll("\b", "") + .replaceAll(" ", "").replaceAll("\"", "").replaceAll("\'", ""); + } + return ""; + } + + public List getStartDigit(String[] pdfArrays, SplitFileTypeTypeEnum enumByValue) { + String regex = "[^\\p{Punct}\\p{Space}\\p{Digit}]"; // TODO + switch (enumByValue) { + case GB: + case GBT: + case EU: + case GSO: + case JPN_ARTICLE: + regex = "[^\\p{Punct}\\p{Space}\\p{Digit}]"; + break; + case KMVSS_ARTICLE: + case JPN_ATTACHMENT: + regex = "[^\\p{Punct}\\p{Space}\\p{Digit}–]"; + break; + case US: + regex = "[^\\p{Punct}\\p{Space}\\p{Digit}S]"; + break; + } + List startDigitList = new ArrayList<>(); + Matcher matcher; + boolean firstFlag = true; + for(int i=0; i startDigitList, String splitChar) { + if(StringUtils.isNotBlank(preName)) { + List nowStartList = fileSpiltService.getNewNowStart(preName); + + List subList1 = startDigitList.subList(preNameNum, startDigitList.size()-1); + // 后文有一级以下的标题 + for (int i = nowStartList.size() - 1; i >= 1; i--) { + int index1 = subList1.indexOf(nowStartList.get(i)); + if (index1 != -1 && (index1-0) <= 100) { // TODO + return true; + } + } + + // 后文没有一级以下的标题 + // 先看看一级有没重复 + int index3 = subList1.indexOf(currentNowStart + splitChar + "1"); + if(index3 == -1 || index3 > 100 ) { + index3 = subList1.indexOf(Integer.valueOf(currentNowStart) + 1); + } + if(index3 > 0 && index3 <= 100) { + List subList = subList1.subList(0, index3); // 这个范围要尽可能的小 + int index4 = subList.indexOf(currentNowStart); + int index5 = subList.lastIndexOf(currentNowStart); + if (index4 != index5 && index5 != (currentNum-preNameNum)) { // TODO + return true; + } + } + // 重复的话 看看该一级标题第一次出现时后面的标题 +// List nowStartList2 = fileSpiltService.getNewNowStart(currentNowStart); +// judge(nowStartList2, nowStartList2.get(0), newStartDigitList, splitChar); + + } + return false; + } + + public boolean judgeJapanOne(String preName, int preNameNum, String currentNowStart, int currentNum, List startDigitList, String splitChar) { + if(StringUtils.isNotBlank(preName)) { + List nowStartList = fileSpiltService.getNewNowStartJapanOne(null,preName); + + List subList1 = startDigitList.subList(preNameNum, startDigitList.size()-1); + // 后文有一级以下的标题 + for (int i = nowStartList.size() - 1; i >= 1; i--) { + int index1 = subList1.indexOf(nowStartList.get(i)); + if (index1 != -1 && (index1-0) <= 100) { // TODO + return true; + } + } + + // 后文没有一级以下的标题 + // 先看看一级有没重复 + int index3 = subList1.indexOf(currentNowStart + splitChar + "1"); + if(index3 == -1 || index3 > 100 ) { + index3 = subList1.indexOf(nowStartList.get(0)); + } + if(index3 > 0 && index3 <= 100) { + List subList = subList1.subList(0, index3); // 这个范围要尽可能的小 + int index4 = subList.indexOf(currentNowStart); + int index5 = subList.lastIndexOf(currentNowStart); + if (index4 != index5 && index5 != (currentNum-preNameNum)) { // TODO + return true; + } + } + + } + return false; + } +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/SarFileSplitInfoServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/SarFileSplitInfoServiceImpl.java index d22c18234..7c96c9c61 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/SarFileSplitInfoServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/SarFileSplitInfoServiceImpl.java @@ -12,7 +12,6 @@ import com.jero.generater.modules.online.cgform.entity.OnlCgformField; import com.jero.generater.modules.online.cgform.service.impl.OnlCgformFieldServiceImpl; import com.jero.modules.document.enums.FieldTypeEnum; import com.jero.modules.document.service.IBussDocumentLibraryEOService; -import com.jero.modules.ocr.entity.OcrRecordEO; import com.jero.modules.ocr.util.LineHumpUtil; import com.jero.modules.oss.entity.OSSFile; import com.jero.modules.oss.service.IOSSFileService; @@ -58,6 +57,8 @@ public class SarFileSplitInfoServiceImpl extends ServiceImpl