From 1395c1a34e4d517e964ba46722c9704adf1ee5f1 Mon Sep 17 00:00:00 2001 From: wangchengjun <616865598@qq.com> Date: Mon, 11 Apr 2022 20:14:39 +0800 Subject: [PATCH] =?UTF-8?q?=E9=9F=A9=E5=9B=BD=E6=96=87=E4=BB=B6=E6=8B=86?= =?UTF-8?q?=E5=88=86=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../split/enums/SplitFileTypeTypeEnum.java | 11 +- .../split/service/impl/FileSpiltService.java | 390 +++++++++++++++--- .../impl/SarFileSplitInfoServiceImpl.java | 7 +- .../modules/split/util/ReadWordTable.java | 8 +- jero-web/src/common/lang/en-us.js | 7 +- jero-web/src/common/lang/zh-cn.js | 7 +- .../splitting/modules/SplitText.vue | 8 +- 7 files changed, 363 insertions(+), 75 deletions(-) diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/enums/SplitFileTypeTypeEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/enums/SplitFileTypeTypeEnum.java index b250e85f1..e32f0360a 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/enums/SplitFileTypeTypeEnum.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/enums/SplitFileTypeTypeEnum.java @@ -8,11 +8,16 @@ package com.jero.modules.split.enums; public enum SplitFileTypeTypeEnum { GSO("GSO","GSO"), - KOREAN("Korean","韩国"), + KMVSS_TABLE("KMVSS_Table","KMVSS_Table"), + KMVSS_ARTICLE("KMVSS_Article","KMVSS_Article"), US("US","美国"), EU("EU","欧洲"), - JAPAN_ONE("Japan_one","日本"), - JAPAN_TWO("Japan_two","日本"), + /** + * Japan Attachment + */ + JAPAN_ONE("Japan_one","Japan Attachment"), + + JAPAN_TWO("Japan_two","Japan Article"), CN("CN","中国"); private String value; 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 e06127cd1..5f45bebad 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 @@ -1228,12 +1228,12 @@ public class FileSpiltService { return treeList.size(); } /** - *韩国标准 + * KMVSS_ARTICLE标准 * @param sarFileSplitInfoEO * @param enumByValue * @return */ - public int fileKorean(SarFileSplitInfoEO sarFileSplitInfoEO, SplitFileTypeTypeEnum enumByValue) { + public int fileKmvssArticle(SarFileSplitInfoEO sarFileSplitInfoEO, SplitFileTypeTypeEnum enumByValue) { if (sarFileSplitInfoEO.getStopNumber()<=0){ sarFileSplitInfoEO.setStopNumber(200); } @@ -1339,7 +1339,192 @@ public class FileSpiltService { message.setMenuId(sarFileSplitMenuEO.getId()); addItermsConditionsText(message,itemValList,paragraphString.substring(nowStart.get(i).length())); messageList.add(message); - nowStart = getNewNowStartKorean(lastStr,nowStart.get(i)); + nowStart = getNewNowStartKmvssArticle(lastStr,nowStart.get(i)); + menuCanAdd = true; + hasGoIf = true; + break; + + } + + } + 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); + } +// } + hasGoIf = true; + } + + // 判断是否直接跳出所有循环 + 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 (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(); + } + + /** + * KMVSS_TABLE标准 + * @param sarFileSplitInfoEO + * @param enumByValue + * @return + */ + public int fileKmvssTable(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<>(); + + //固定字段内容跳过,包含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<>(); + //初始判断值 + nowStart.add("1."); +// if (sarFileSplitInfoEO.getStartNumber()<4){ +// } else { +// nowStart.add(String.valueOf(sarFileSplitInfoEO.getStartNumber())); +// } + try { + //获取文件地址 + String connectId = sarFileSplitInfoEO.getConnectId(); + if(StringUtils.isEmpty(connectId)){ + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper(); + queryWrapper.eq(OSSFile::getConnectId,connectId); + OSSFile ossFile = iossFileService.getOne(queryWrapper); + String readFilePath = ossFile.getUrl(); + if(StringUtils.isEmpty(readFilePath)){ + throw new JeroBootException("当前文件未找到,请重新选择!"); + } + + InputStream is = new FileInputStream(readFilePath); //需要将文件路更改为word文档所在路径。 + XWPFDocument doc = new XWPFDocument(is); + + Pattern ptest = Pattern.compile("^[\\d.]*$"); +// Matcher matcher; + + // 记录拆分后的每一段文字 + List elements = doc.getBodyElements(); + // 记录word自动生成的编号数据 +// Map numberMap = new HashMap(); + boolean menuCanAdd = false; // 判断当前目录下是否可以正常填写数据 + boolean filterFlag = false; + int menuLevel = 0;//菜单等级,分为1/2/3/4/5级 +// StringBuilder lastStr = new StringBuilder(); + //存储前四级目录数据 + String[] catalogerArr = new String[4]; + for (IBodyElement element : elements) { + // 段落 + 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(filterList.contains(paragraphString)){ + filterFlag = true; + } + if(menuLevel <= 3){ + String thisLevel = catalogerArr[menuLevel]; + if (StringUtils.isNotEmpty(thisLevel)){ + String replace = thisLevel.replace(".", "").replace("(", "").replace(")", ""); + if(FileSplitUtils.hasDigit(replace)){ + int menuNumber = Integer.parseInt(replace) - 1; + + }else { + + } +// menuLevel + } + } +// if (StringUtils.isNotEmpty(p.getNumLevelText())&& p.getNumLevelText().indexOf(".")>0) { +// String numberParent = p.getNumLevelText().substring(0,p.getNumLevelText().lastIndexOf(".")); +// if (numberMap.containsKey(numberParent)){ +// Integer numbernow =(Integer)numberMap.get(numberParent)+1; +// if (messageList != null && !messageList.isEmpty() && messageList.get(messageList.size()-1).getItemsNum().equals(numberParent + "." + String.valueOf(numbernow))){ +// numberMap.put(numberParent,numbernow+1); +// paragraphString = numberParent + "." + String.valueOf(numbernow+1)+ p.getText(); +// } else { +// numberMap.put(numberParent,numbernow); +// paragraphString = numberParent + "." + String.valueOf(numbernow)+ p.getText(); +// } +// } else { +// numberMap.put(numberParent,1); +// paragraphString = numberParent+".1"+ p.getText(); +// } +// } +//^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; + for (int i=0;i10?paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+10):paragraphString.substring(nowStart.get(i).length()); + List clauseContent = new ArrayList<>(); + clauseContent.add(paragraphString); + SarFileSplitItemsEO message = getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(),nowStart.get(i),itemName,clauseContent); + + // 增加一条数据,需要在数结构中加一条数据 + String name = nowStart.get(i); + SarFileSplitMenuEO sarFileSplitMenuEO = getTreeList(name,treeList,generalCatalogueId,sarFileSplitInfoEO ,treeListDisplay++,itemName,enumByValue); + treeList.add(sarFileSplitMenuEO) ; + message.setMenuId(sarFileSplitMenuEO.getId()); + addItermsConditionsText(message,itemValList,paragraphString.substring(nowStart.get(i).length())); + messageList.add(message); + nowStart = getNewNowStartKmvssTable(catalogerArr,nowStart.get(i),menuLevel); menuCanAdd = true; hasGoIf = true; break; @@ -1522,7 +1707,7 @@ public class FileSpiltService { * @param nowStart * @return */ - private static List getNewNowStartKorean(StringBuilder lastStr,String nowStart){ + private static List getNewNowStartKmvssArticle(StringBuilder lastStr,String nowStart){ List nowResultStartList = new ArrayList<>(); if(FileSplitUtils.hasDigit(nowStart) && nowStart.contains(")")){ //包含数字且包含括号 @@ -1547,6 +1732,103 @@ public class FileSpiltService { } return nowResultStartList; } + /** + * 通过传递过来的编号,得出下次可能出现的编号 + * @param catalogerArr + * @param nowStart + * @param menuLevel + * @return + */ + private static List getNewNowStartKmvssTable(String[] catalogerArr,String nowStart,int menuLevel){ + /* + *1.韩国KmvssTable模板处理 + * 分为五级拆分,拆分为以下内容: + * 第一级:1. 2. 3. 4. 等 + * 第二级:A. B. C. D. 等 + * 第三级:1) 2) 3) 4) 等 + * 第四级:A) B) C) D) 等 + * 第五级:(1) (2) (3) (4) 等 + * + */ + if(catalogerArr.length != 4){ + throw new JeroBootException("不符合目录规则,请使用其他方法"); + } + + List nowResultStartList = new ArrayList<>(); + if(FileSplitUtils.hasDigit(nowStart) && nowStart.contains(".")){ + menuLevel = 0; + //第一级:1. 2. 3. 4. 等 + String numberStr = nowStart.replace(".",""); + Integer lastnumber = Integer.valueOf(numberStr)+1; + catalogerArr[0] = lastnumber+"."; + nowResultStartList.add(lastnumber+"."); + //推测下级目录 + nowResultStartList.add("A."); + + }else if(FileSplitUtils.judgeContainsStr(nowStart) && nowStart.contains(".")){ + menuLevel = 1; + //第二级:A. B. C. D. 等 + String numberStr = nowStart.replace(".",""); + String nextUpEn = FileSplitUtils.getNextUpEn(numberStr); + catalogerArr[1] = nextUpEn+"."; + nowResultStartList.add(nextUpEn+"."); + + //上一级 + nowResultStartList.add(catalogerArr[0]); + + //下一级 + nowResultStartList.add("1)"); + + + }else if(FileSplitUtils.hasDigit(nowStart) && nowStart.contains(")") && (!nowStart.contains("("))){ + menuLevel = 2; + //第三级:1) 2) 3) 4) 等 + String numberStr = nowStart.replace(")",""); + Integer lastnumber = Integer.valueOf(numberStr)+1; + catalogerArr[2] = lastnumber+")"; + nowResultStartList.add(lastnumber+")"); + + //上一级 + nowResultStartList.add(catalogerArr[0]); + nowResultStartList.add(catalogerArr[1]); + + //下一级 + nowResultStartList.add("A)"); + + }else if(FileSplitUtils.judgeContainsStr(nowStart) && nowStart.contains(")")){ + menuLevel = 3; + //第四级:A) B) C) D) 等 + String numberStr = nowStart.replace(")",""); + String nextUpEn = FileSplitUtils.getNextUpEn(numberStr); + catalogerArr[3] = nextUpEn+")"; + nowResultStartList.add(nextUpEn+")"); + + //上一级 + nowResultStartList.add(catalogerArr[0]); + nowResultStartList.add(catalogerArr[1]); + nowResultStartList.add(catalogerArr[2]); + + //下一级 + nowResultStartList.add("(1)"); + + }else if(FileSplitUtils.hasDigit(nowStart) && nowStart.contains("(") && nowStart.contains(")")){ + menuLevel = 4; + //第五级:(1) (2) (3) (4) 等 + String numberStr = nowStart.replace("(","").replace(")",""); + Integer lastnumber = Integer.valueOf(numberStr)+1; +// catalogerArr[4] = lastnumber+")"; + nowResultStartList.add(lastnumber+")"); + + //上一级 + nowResultStartList.add(catalogerArr[0]); + nowResultStartList.add(catalogerArr[1]); + nowResultStartList.add(catalogerArr[2]); + nowResultStartList.add(catalogerArr[3]); + + + } + return nowResultStartList; + } /** * 通过传递过来的编号,得出下次可能出现的编号 * @param nowStart @@ -1575,10 +1857,10 @@ public class FileSpiltService { private static SarFileSplitMenuEO getTreeList(String name, List treeList, String generalCatalogueId, - SarFileSplitInfoEO sarFileSplitInfoEO , + SarFileSplitInfoEO sarFileSplitInfoEO, Long treeListDisplay, String itemName, - SplitFileTypeTypeEnum enumByValue){ + SplitFileTypeTypeEnum enumByValue) { SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(); // SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(UUIDUtils.randomUUID20(),name,sarFileSplitInfoEO.getId(),treeListDisplay,itemName); @@ -1593,74 +1875,57 @@ public class FileSpiltService { // 用现在得name 和之前得name 做比较,确定,parentId boolean flag = false; - a:for (SarFileSplitMenuEO forDocumentTree : treeList) { - switch (enumByValue){ + a: + for (SarFileSplitMenuEO forDocumentTree : treeList) { + switch (enumByValue) { case CN: - if (name.indexOf(".")>=0) { + case US: + case GSO: + if (name.indexOf(".") >= 0) { if (name.substring(0, name.lastIndexOf(".")).equals(forDocumentTree.getName())) { documentTreeEO.setPId(forDocumentTree.getId()); break a; } - }else { + } else { documentTreeEO.setPId(generalCatalogueId); } break; case EU: - if (name.indexOf(".")>=0) { - if (name.substring(0, name.lastIndexOf(".")-1).equals(forDocumentTree.getName())) { + 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 US: - if (name.indexOf(".")>=0) { - if (name.substring(0, name.lastIndexOf(".")).equals(forDocumentTree.getName())) { - documentTreeEO.setPId(forDocumentTree.getId()); - break a; - } - }else { - documentTreeEO.setPId(generalCatalogueId); - } - break; - case GSO: - if (name.indexOf(".")>=0) { - if (name.substring(0, name.lastIndexOf(".")).equals(forDocumentTree.getName())) { - documentTreeEO.setPId(forDocumentTree.getId()); - break a; - } - }else { + } else { documentTreeEO.setPId(generalCatalogueId); } break; case JAPAN_ONE: - if(name.contains(".")){ - if (name.indexOf(".")>=0) { + if (name.contains(".")) { + if (name.indexOf(".") >= 0) { if (name.substring(0, name.lastIndexOf(".")).equals(forDocumentTree.getName())) { documentTreeEO.setPId(forDocumentTree.getId()); break a; } - }else { + } else { documentTreeEO.setPId(generalCatalogueId); } - }else { - if (name.indexOf("–")>=0) { + } else { + if (name.indexOf("–") >= 0) { if (name.substring(0, name.lastIndexOf("–")).equals(forDocumentTree.getName()) - || (name.substring(0, name.lastIndexOf("–"))+".").equals(forDocumentTree.getName())) { + || (name.substring(0, name.lastIndexOf("–")) + ".").equals(forDocumentTree.getName())) { documentTreeEO.setPId(forDocumentTree.getId()); break a; } - }else { + } else { documentTreeEO.setPId(generalCatalogueId); } } break; case JAPAN_TWO: - if (name.indexOf("=")>=0) { + if (name.indexOf("=") >= 0) { String[] nameSplit = name.split("="); //获取name值 @@ -1668,12 +1933,12 @@ public class FileSpiltService { String secondTemp = nameSplit[1]; String nameTemp = nameSplit[2]; - if(FileSplitUtils.hasDigit(nameTemp) && nameTemp.contains(".")){ + if (FileSplitUtils.hasDigit(nameTemp) && nameTemp.contains(".")) { //包含数字且. documentTreeEO.setName(nameTemp); - }else if(FileSplitUtils.hasDigit(nameTemp) && nameTemp.contains(")")){ + } else if (FileSplitUtils.hasDigit(nameTemp) && nameTemp.contains(")")) { //包含数字且包含括号 - if(StringUtils.isNotEmpty(firstNameTemp)){ + if (StringUtils.isNotEmpty(firstNameTemp)) { String firstStr = firstNameTemp.replaceAll("\\.", ""); int firstNumber = Integer.parseInt(firstStr) - 1; firstNameTemp = firstNumber + "."; @@ -1683,11 +1948,11 @@ public class FileSpiltService { documentTreeEO.setPId(forDocumentTree.getId()); break a; } - }else if(FileSplitUtils.judgeContainsStr(nameTemp)){ + } else if (FileSplitUtils.judgeContainsStr(nameTemp)) { //包含数字且包含括号 //先找一级目录 - if(StringUtils.isNotEmpty(firstNameTemp)){ + if (StringUtils.isNotEmpty(firstNameTemp)) { String firstStr = firstNameTemp.replaceAll("\\.", ""); int firstNumber = Integer.parseInt(firstStr) - 1; firstNameTemp = firstNumber + "."; @@ -1697,37 +1962,37 @@ public class FileSpiltService { } //再找二级目录 - if(StringUtils.isNotEmpty(secondTemp)){ - String firstStr = secondTemp.replace("(", "").replace(")",""); + if (StringUtils.isNotEmpty(secondTemp)) { + String firstStr = secondTemp.replace("(", "").replace(")", ""); int firstNumber = Integer.parseInt(firstStr) - 1; - secondTemp = "("+firstNumber + ")"; + secondTemp = "(" + firstNumber + ")"; } - if(flag && secondTemp.equals(forDocumentTree.getName())){ + if (flag && secondTemp.equals(forDocumentTree.getName())) { documentTreeEO.setName(nameTemp); documentTreeEO.setPId(forDocumentTree.getId()); break a; } } - }else { + } else { documentTreeEO.setPId(generalCatalogueId); } break; - case KOREAN: - if (name.indexOf("=")>=0) { + case KMVSS_ARTICLE: + if (name.indexOf("=") >= 0) { String[] nameSplit = name.split("="); //获取name值 String firstNameTemp = nameSplit[0]; String nameTemp = nameSplit[1]; - if(FileSplitUtils.hasDigit(nameTemp) && nameTemp.contains(")")){ + if (FileSplitUtils.hasDigit(nameTemp) && nameTemp.contains(")")) { //包含数字且. documentTreeEO.setName(nameTemp); - }else if(FileSplitUtils.hasDigit(nameTemp) && nameTemp.contains(".")){ + } else if (FileSplitUtils.hasDigit(nameTemp) && nameTemp.contains(".")) { //包含数字且包含括号 - if(StringUtils.isNotEmpty(firstNameTemp)){ - String firstStr = firstNameTemp.replace("(", "").replace(")",""); + if (StringUtils.isNotEmpty(firstNameTemp)) { + String firstStr = firstNameTemp.replace("(", "").replace(")", ""); int firstNumber = Integer.parseInt(firstStr) - 1; firstNameTemp = "(" + firstNumber + ")"; } @@ -1737,24 +2002,27 @@ public class FileSpiltService { break a; } } - }else { + } else { documentTreeEO.setPId(generalCatalogueId); } break; + case KMVSS_TABLE: + documentTreeEO.setPId(generalCatalogueId); + break; default: - if (name.indexOf(".")>=0) { + if (name.indexOf(".") >= 0) { if (name.substring(0, name.lastIndexOf(".")).equals(forDocumentTree.getName())) { documentTreeEO.setPId(forDocumentTree.getId()); break a; } - }else { + } else { documentTreeEO.setPId(generalCatalogueId); } } } - return documentTreeEO; + return documentTreeEO; } private static SarFileSplitItemsEO getSarFileSplitItemsEO(String infoId,String itemsNum,String itemsName,List itemsCondi) { 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 0b79f4c66..07738c972 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 @@ -94,8 +94,11 @@ public class SarFileSplitInfoServiceImpl extends ServiceImpl GSO - - {{$t('Korea')}} + + {{$t('KMVSS_Table')}} + + + {{$t('KMVSS_Article')}} {{$t('America')}} @@ -195,6 +198,7 @@ }, //拆分 submitSplit(){ + debugger if(this.fileGroup.length == 0||this.fileGroup==undefined){ this.$message.warning(this.$t('selectFileType')) }else if(this.rows&&this.rows.length>1){