From 4b69da9871f95de72d81883d804be54761b56c5d Mon Sep 17 00:00:00 2001 From: wangchengjun Date: Thu, 7 Apr 2022 23:33:23 +0800 Subject: [PATCH] =?UTF-8?q?word=E6=8B=86=E5=88=86=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../split/entity/SarFileSplitInfoEO.java | 5 + .../split/enums/SplitFilePragraTypeEnum.java | 26 + .../mapper/xml/SarFileSplitItemsEOMapper.xml | 23 +- .../mapper/xml/SarFileSplitMenuEOMapper.xml | 26 +- .../service/ISarFileSplitItemsEOService.java | 1 + .../ISarFileSplitItemsValEOService.java | 1 + .../split/service/impl/FileSpiltService.java | 1296 +++++++++++++++++ .../impl/SarFileSplitInfoServiceImpl.java | 28 +- .../impl/SarFileSplitItemsEOServiceImpl.java | 4 + .../SarFileSplitItemsValEOServiceImpl.java | 6 + .../modules/split/util/ReadWordTable.java | 234 +++ .../modules/entity/SarFileSplitItemsEO.java | 1034 ++++++------- .../com/jero/modules/utils/ReadWordTable.java | 234 +++ 13 files changed, 2365 insertions(+), 553 deletions(-) create mode 100644 jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/enums/SplitFilePragraTypeEnum.java create mode 100644 jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/FileSpiltService.java create mode 100644 jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/util/ReadWordTable.java create mode 100644 jero-boot/jreo-boot-split/src/main/java/com/jero/modules/utils/ReadWordTable.java diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/entity/SarFileSplitInfoEO.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/entity/SarFileSplitInfoEO.java index d777fbc1b..31c55f6cd 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/entity/SarFileSplitInfoEO.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/entity/SarFileSplitInfoEO.java @@ -100,4 +100,9 @@ public class SarFileSplitInfoEO implements Serializable { @TableField(exist = false) private String flag; + @TableField(exist = false) + private int startNumber; + @TableField(exist = false) + private int stopNumber; + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/enums/SplitFilePragraTypeEnum.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/enums/SplitFilePragraTypeEnum.java new file mode 100644 index 000000000..bc6272245 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/enums/SplitFilePragraTypeEnum.java @@ -0,0 +1,26 @@ +package com.jero.modules.split.enums; + +/** + * 标准库参数类型枚举设置 + * @author gaoyan + * date 2018/09/03 + */ +public enum SplitFilePragraTypeEnum { + + TEXT("TEXT","文字"),IMG("IMG","图片"),TABLE("TABLE","表格"); + + private String value; + private String lable; + + private SplitFilePragraTypeEnum(String value, String lable) { + this.value = value; + this.lable = lable; + } + public String getValue() { + return value; + } + public String getLable() { + return lable; + } + +} diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/xml/SarFileSplitItemsEOMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/xml/SarFileSplitItemsEOMapper.xml index 80911708e..91cb84d42 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/xml/SarFileSplitItemsEOMapper.xml +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/xml/SarFileSplitItemsEOMapper.xml @@ -367,24 +367,23 @@ - begin - - insert into sar_file_split_items_0329 - (id, info_id, items_num, items_name, newcar_put_time, product_put_time, menu_id, function_territory, apply_arctic, reference_stand, information_category, relevance_file, technology_territory, valid_flag, creation_user, creation_time, modify_time, + + insert into sar_file_split_items + (id, info_id, items_num, items_name, menu_id, function_territory, + information_category, technology_territory, + creation_user, creation_time, modify_time, modify_user, iterms_conditions) - values ( + values + ( #{item.id, jdbcType=VARCHAR}, #{item.infoId, jdbcType=VARCHAR}, #{item.itemsNum, jdbcType=VARCHAR}, #{item.itemsName, jdbcType=VARCHAR}, - #{item.newcarPutTime, jdbcType=TIMESTAMP}, #{item.productPutTime, jdbcType=TIMESTAMP}, - #{item.menuId, jdbcType=VARCHAR}, #{item.functionTerritory, jdbcType=VARCHAR}, #{item.applyArctic, jdbcType=VARCHAR}, - #{item.referenceStand, jdbcType=VARCHAR}, #{item.informationCategory, jdbcType=VARCHAR}, - #{item.relevanceFile, jdbcType=VARCHAR}, #{item.technologyTerritory, jdbcType=VARCHAR}, - #{item.validFlag, jdbcType=INTEGER}, #{item.creationUser, jdbcType=VARCHAR}, + #{item.menuId, jdbcType=VARCHAR}, #{item.functionTerritory, jdbcType=VARCHAR}, + #{item.informationCategory, jdbcType=VARCHAR}, #{item.technologyTerritory, jdbcType=VARCHAR}, + #{item.creationUser, jdbcType=VARCHAR}, #{item.creationTime, jdbcType=TIMESTAMP}, #{item.modifyTime, jdbcType=TIMESTAMP}, #{item.modifyUser, jdbcType=VARCHAR}, #{item.itermsConditions, jdbcType=CLOB} - ) + ) - ;end; diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/xml/SarFileSplitMenuEOMapper.xml b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/xml/SarFileSplitMenuEOMapper.xml index 08a3fc20e..ba1e9b4eb 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/xml/SarFileSplitMenuEOMapper.xml +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/mapper/xml/SarFileSplitMenuEOMapper.xml @@ -219,20 +219,20 @@ - insert into SAR_FILE_SPLIT_MENU() ( - - select - #{item.id, jdbcType=VARCHAR}, - #{item.infoId, jdbcType=VARCHAR}, - #{item.name, jdbcType=VARCHAR}, - #{item.pId, jdbcType=VARCHAR}, - #{item.displaySeq, jdbcType=VARCHAR}, - #{item.validFlag, jdbcType=INTEGER}, - #{item.creationTime, jdbcType=TIMESTAMP}, - #{item.modifyTime, jdbcType=TIMESTAMP}, #{item.remarks, jdbcType=VARCHAR}, - #{item.creationUser, jdbcType=VARCHAR}, #{item.modifyUser, jdbcType=VARCHAR} , #{item.itemName, jdbcType=VARCHAR} from dual + insert into SAR_FILE_SPLIT_MENU()values + + ( #{item.id, jdbcType=VARCHAR}, + #{item.infoId, jdbcType=VARCHAR}, + #{item.name, jdbcType=VARCHAR}, + #{item.pId, jdbcType=VARCHAR}, + #{item.displaySeq, jdbcType=VARCHAR}, + #{item.validFlag, jdbcType=INTEGER}, + #{item.creationTime, jdbcType=TIMESTAMP}, + #{item.modifyTime, jdbcType=TIMESTAMP}, #{item.remarks, jdbcType=VARCHAR}, + #{item.creationUser, jdbcType=VARCHAR}, #{item.modifyUser, jdbcType=VARCHAR} , + #{item.itemName, jdbcType=VARCHAR} + ) - ) diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/ISarFileSplitItemsEOService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/ISarFileSplitItemsEOService.java index 2b2eb1130..06ed7c50f 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/ISarFileSplitItemsEOService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/ISarFileSplitItemsEOService.java @@ -112,4 +112,5 @@ public interface ISarFileSplitItemsEOService extends IService messageList); } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/ISarFileSplitItemsValEOService.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/ISarFileSplitItemsValEOService.java index 3a1f322b9..00690914c 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/ISarFileSplitItemsValEOService.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/ISarFileSplitItemsValEOService.java @@ -40,4 +40,5 @@ public interface ISarFileSplitItemsValEOService extends IService queryByPage(SarFileSplitItemsValEOPage page); + int insertForeach(List itemValList); } 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 new file mode 100644 index 000000000..504cda611 --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/FileSpiltService.java @@ -0,0 +1,1296 @@ +package com.jero.modules.split.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.jero.common.exception.JeroBootException; +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.*; +import com.jero.modules.split.enums.SplitFilePragraTypeEnum; +import com.jero.modules.split.mapper.SarFileSplitMenuEOMapper; +import com.jero.modules.split.service.ISarFileSplitItemsEOService; +import com.jero.modules.split.service.ISarFileSplitItemsValEOService; +import com.jero.modules.split.util.ReadWordTable; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.poi.xwpf.usermodel.*; +import org.apache.xmlbeans.XmlCursor; +import org.apache.xmlbeans.XmlObject; +import org.openxmlformats.schemas.drawingml.x2006.main.CTGraphicalObject; +import org.openxmlformats.schemas.drawingml.x2006.picture.CTPicture; +import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTAnchor; +import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDrawing; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTLevelText; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTR; +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.io.*; +import java.util.*; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +/** + * + *
+ * 功能:SAR_FILE_SPLIT_INFO SarFileSplitInfoEOService
+ * 作者:code generator
+ * 日期: 2022-04-07
+ * 版权所有:版权归北京卡达克数据技术中心所有。
+ */ +@Service +@Transactional(value = "transactionManager", readOnly = false, propagation = Propagation.REQUIRED, rollbackFor = Throwable.class) +public class FileSpiltService { + + @Autowired + private SarFileSplitMenuEOMapper sarFileSplitMenuEOMapper; + @Autowired + private ISarFileSplitItemsEOService iSarFileSplitItemsEOService; + @Autowired + private ISarFileSplitItemsValEOService iSarFileSplitItemsValEOService; + @Autowired + private IOSSFileService iossFileService; + + @Value("${jero.path.upload}") + private String filePath; + + + // public SarFileSplitInfoEODao getDao() { +// return dao; +// } +// public static void main(String[] args) { +// SarFileSplitInfoEO sarFileSplitInfoEO = new SarFileSplitInfoEO(); +// sarFileSplitInfoEO.setId(UUIDUtils.randomUUID20()); +// sarFileSplitInfoEO.setStartNumber(0); +// sarFileSplitInfoEO.setStopNumber(10); +// int i = new FileSpilt().fileCHN(sarFileSplitInfoEO); +// } +//中国 + public int fileCHN(SarFileSplitInfoEO sarFileSplitInfoEO) { + if (sarFileSplitInfoEO.getStopNumber()<=0){ + sarFileSplitInfoEO.setStopNumber(200); + } + if (sarFileSplitInfoEO.getStartNumber()<=0){ + sarFileSplitInfoEO.setStartNumber(1); + } + + // 拆分文件条款表中最终插入数据 + List messageList = new ArrayList<>(); +// 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,"总目录","",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<>(); +// if (sarFileSplitInfoEO.getStartNumber()<4){ + //从第四个开始拆解 + nowStart.add("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("当前文件未找到,请重新选择!"); + } +// AttFileEO attFileEO = attFileEOService.getFileInfo(sarFileSplitInfoEO.getAttId()); +// String readFilePath = filePath + "/" + attFileEO.getFilePath() + attFileEO.getFileName(); +// String readFilePath = "C:\\Users\\wangc\\Desktop\\蔚来演示数据\\GB 11551-2014 汽车正面碰撞的乘员保护.docx"; + + InputStream is = new FileInputStream(readFilePath); //需要将文件路更改为word文档所在路径。 + XWPFDocument doc = new XWPFDocument(is); + + Pattern ptest = Pattern.compile("^1范围"); + Matcher matcher; + + // 记录拆分后的每一段文字 + List elements = doc.getBodyElements(); + // 记录word自动生成的编号数据 + Map numberMap = new HashMap(); + boolean menuCanAdd = false; // 判断当前目录下是否可以正常填写数据 + 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 (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(); + } + } + if (messageNumber == 0) { + ptest= Pattern.compile("^1\\s{0,3}范围"); + matcher=ptest.matcher(paragraphString); + while(matcher.find()){ + List clauseContent = new ArrayList<>(); + SarFileSplitItemsEO message = getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(),"1","范围",clauseContent); + SarFileSplitMenuEO documentTreeEO1 = new SarFileSplitMenuEO(); +// SarFileSplitMenuEO documentTreeEO1 = new SarFileSplitMenuEO(UUIDUtils.randomUUID20(),message.getItemsNum(),generalCatalogueId,sarFileSplitInfoEO.getId(),treeListDisplay++,"范围"); + documentTreeEO1.setId(UUIDUtils.randomUUID20()); + documentTreeEO1.setItemName("范围"); + documentTreeEO1.setPId(generalCatalogueId); + documentTreeEO1.setInfoId(sarFileSplitInfoEO.getId()); + documentTreeEO1.setDisplaySeq(treeListDisplay++); + documentTreeEO1.setName(message.getItemsNum()); + documentTreeEO1.setValidFlag(0); +// treeList.add(documentTreeEO1); + + message.setMenuId(documentTreeEO1.getId()); + if(sarFileSplitInfoEO.getStartNumber()<=1 && sarFileSplitInfoEO.getStopNumber()>=1){ + messageList.add(message); + treeList.add(documentTreeEO1); + menuCanAdd = true; + } else { + menuCanAdd = false; + } + messageNumber++; + } + } else if (messageNumber == 1){ + ptest= Pattern.compile("^2\\s{0,3}规范性引用文件"); + matcher=ptest.matcher(paragraphString); + if(matcher.find()){ + List clauseContent = new ArrayList<>(); + SarFileSplitItemsEO message = getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(),"2","规范性引用文件",clauseContent); + SarFileSplitMenuEO documentTreeEO1 = new SarFileSplitMenuEO(); +// SarFileSplitMenuEO documentTreeEO1 = new SarFileSplitMenuEO(UUIDUtils.randomUUID20(),message.getItemsNum(),generalCatalogueId,sarFileSplitInfoEO.getId(),treeListDisplay++,"规范性引用文件"); + + documentTreeEO1.setId(UUIDUtils.randomUUID20()); + documentTreeEO1.setItemName("规范性引用文件"); + documentTreeEO1.setPId(generalCatalogueId); + documentTreeEO1.setInfoId(sarFileSplitInfoEO.getId()); + documentTreeEO1.setDisplaySeq(treeListDisplay++); + documentTreeEO1.setName(message.getItemsNum()); + documentTreeEO1.setValidFlag(0); + + message.setMenuId(documentTreeEO1.getId()); + if(sarFileSplitInfoEO.getStartNumber()<=2 && sarFileSplitInfoEO.getStopNumber()>=2){ + messageList.add(message); + treeList.add(documentTreeEO1); + menuCanAdd = true; + } else { + menuCanAdd = false; + } + messageNumber++; + } else if(menuCanAdd){ + List imageBundleList = readImageInParagraph((XWPFParagraph)p); + if(CollectionUtils.isNotEmpty(imageBundleList)) { + addItermsConditionsImage(messageList.get(messageList.size()-1),itemValList, p,imageBundleList); + } else { + addItermsConditionsText(messageList.get(messageList.size()-1),itemValList, p.getText()); + } + } + } else if (messageNumber == 2){ + ptest= Pattern.compile("^3\\s{0,3}术语(和|与)定义"); + matcher=ptest.matcher(paragraphString); + if(matcher.find()){ + List clauseContent = new ArrayList<>(); + SarFileSplitItemsEO message = getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(),"3","术语与定义",clauseContent); + SarFileSplitMenuEO documentTreeEO1 = new SarFileSplitMenuEO(); +// SarFileSplitMenuEO documentTreeEO1 = new SarFileSplitMenuEO(UUIDUtils.randomUUID20(),message.getItemsNum(),generalCatalogueId,sarFileSplitInfoEO.getId(),treeListDisplay++,"术语与定义"); + documentTreeEO1.setId(UUIDUtils.randomUUID20()); + documentTreeEO1.setItemName("术语与定义"); + documentTreeEO1.setPId(generalCatalogueId); + documentTreeEO1.setInfoId(sarFileSplitInfoEO.getId()); + documentTreeEO1.setDisplaySeq(treeListDisplay++); + documentTreeEO1.setName(message.getItemsNum()); + documentTreeEO1.setValidFlag(0); + + message.setMenuId(documentTreeEO1.getId()); + if(sarFileSplitInfoEO.getStartNumber()<=3 && sarFileSplitInfoEO.getStopNumber()>=3){ + messageList.add(message); + treeList.add(documentTreeEO1); + menuCanAdd = true; + } else { + menuCanAdd = false; + } + messageNumber++; + } else if(menuCanAdd){ + List imageBundleList = readImageInParagraph((XWPFParagraph)p); + if(CollectionUtils.isNotEmpty(imageBundleList)) { + addItermsConditionsImage(messageList.get(messageList.size()-1),itemValList, p,imageBundleList); + } else { + addItermsConditionsText(messageList.get(messageList.size()-1),itemValList, p.getText()); + } + } + } else if (messageNumber>=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[] 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); + treeList.add(sarFileSplitMenuEO) ; + message.setMenuId(sarFileSplitMenuEO.getId()); + addItermsConditionsText(message,itemValList,paragraphString.substring(nowStart.get(i).length())); + messageList.add(message); + nowStart = getNewNowStart(nowStart.get(i)); + menuCanAdd = true; + } + hasGoIf = true; + break; + } + } + if(!hasGoIf && menuCanAdd) { + // 判断是否是附录 + ptest= Pattern.compile("^附录\\s{0,3}[A-Z]{1}"); + matcher=ptest.matcher(paragraphString); + // 获取当前最后一项num + String appendixNum = messageList.get(messageList.size()-1).getItemsNum().split("\\.")[0]; + if(matcher.find() && !messageList.get(messageList.size()-1).getItemsNum().equals("附录") ){ + if ( Integer.valueOf(appendixNum)+1 <= sarFileSplitInfoEO.getStopNumber()) { + String itemName = "附录"; + List clauseContent = new ArrayList<>(); + clauseContent.add(paragraphString); + SarFileSplitItemsEO message = getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(),"附录",itemName,clauseContent); + // 增加一条数据,需要在数结构中加一条数据 + SarFileSplitMenuEO sarFileSplitMenuEO = getTreeList("附录",treeList,generalCatalogueId,sarFileSplitInfoEO ,treeListDisplay++,""); + 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); + } + } + } + // 判断是否直接跳出所有循环 + 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); + System.out.println("=================================================================================="); +// System.out.println(treeList.toString()); + System.out.println(messageList.toString()); + System.out.println(itemValList.toString()); + System.out.println("=================================================================================="); +// sarFileSplitMenuEODao.insertForeach(treeList); +// sarFileSplitItemsEODao.insertForeach(messageList); +// sarFileSplitItemsValEODao.insertForeach(itemValList); + } else { + return -1; + } + return treeList.size(); + + } + +// public static void main(String[] args) { +// fileEU(new SarFileSplitInfoEO()); +// } +//GSO 欧洲 +// public static int fileEU(SarFileSplitInfoEO sarFileSplitInfoEO) { +// // 拆分文件主表中插入数据 +// sarFileSplitInfoEO.setId(UUIDUtils.randomUUID20()); +// sarFileSplitInfoEO.setValidFlag(0); +// sarFileSplitInfoEO.setCreationTime(new Date()); +// sarFileSplitInfoEO.setCreationUser(LoginUserUtil.getUserId()); +// sarFileSplitInfoEO.setModifyTime(new Date()); +// sarFileSplitInfoEO.setModifyUser(LoginUserUtil.getUserId()); +//// 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(generalCatalogueId,"General catalogue","",sarFileSplitInfoEO.getId(),treeListDisplay++,""); +// treeList.add(documentTreeEO); +// +// List nowStart = new ArrayList<>(); +//// if (sarFileSplitInfoEO.getStartNumber()<4){ +//// nowStart.add("4"); +//// } else { +//// nowStart.add(String.valueOf(sarFileSplitInfoEO.getStartNumber())); +//// } +// try { +//// AttFileEO attFileEO = attFileEOService.getFileInfo(sarFileSplitInfoEO.getAttId()); +//// String readFilePath = filePath + "/" + attFileEO.getFilePath() + attFileEO.getFileName(); +// +// InputStream is = new FileInputStream("E:/a.docx"); //需要将文件路更改为word文档所在路径。 +// XWPFDocument doc = new XWPFDocument(is); +// +// Pattern ptest ; +// Matcher matcher; +// +// // 记录拆分后的每一段文字 +// List elements = doc.getBodyElements(); +// // 记录word自动生成的编号数据 +// Map numberMap = new HashMap(); +// boolean menuCanAdd = false; // 判断当前目录下是否可以正常填写数据 +// 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 (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(); +// } +// } +// +// 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[] 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); +// treeList.add(sarFileSplitMenuEO) ; +// message.setMenuId(sarFileSplitMenuEO.getId()); +// addItermsConditionsText(message,itemValList,paragraphString.substring(nowStart.get(i).length())); +// messageList.add(message); +// nowStart = getNewNowStart(nowStart.get(i)); +// menuCanAdd = true; +// } +// hasGoIf = true; +// break; +// } +// } +// +// // 判断是否直接跳出所有循环 +// 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){ +//// sarFileSplitMenuEODao.insertForeach(treeList); +//// sarFileSplitItemsEODao.insertForeach(messageList); +//// sarFileSplitItemsValEODao.insertForeach(itemValList); +// } else { +// return -1; +// } +// return treeList.size(); +// +// } + //美国 +// public int fileUSA(SarFileSplitInfoEO sarFileSplitInfoEO) { +// // 拆分文件主表中插入数据 +// sarFileSplitInfoEO.setId(UUIDUtils.randomUUID20()); +// sarFileSplitInfoEO.setValidFlag(0); +// sarFileSplitInfoEO.setCreationTime(new Date()); +// sarFileSplitInfoEO.setCreationUser(LoginUserUtil.getUserId()); +// sarFileSplitInfoEO.setModifyTime(new Date()); +// sarFileSplitInfoEO.setModifyUser(LoginUserUtil.getUserId()); +// 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(generalCatalogueId,"General catalogue","",sarFileSplitInfoEO.getId(),treeListDisplay++,""); +// treeList.add(documentTreeEO); +// +// List nowStart = new ArrayList<>(); +// if (sarFileSplitInfoEO.getStartNumber()<4){ +// nowStart.add("4"); +// } else { +// nowStart.add(String.valueOf(sarFileSplitInfoEO.getStartNumber())); +// } +// try { +// AttFileEO attFileEO = attFileEOService.getFileInfo(sarFileSplitInfoEO.getAttId()); +// String readFilePath = filePath + "/" + attFileEO.getFilePath() + attFileEO.getFileName(); +// +// InputStream is = new FileInputStream(readFilePath); //需要将文件路更改为word文档所在路径。 +// XWPFDocument doc = new XWPFDocument(is); +// +// Pattern ptest = Pattern.compile("S^[\\d.]*$"); +// Matcher matcher; +// +// // 记录拆分后的每一段文字 +// List elements = doc.getBodyElements(); +// // 记录word自动生成的编号数据 +// Map numberMap = new HashMap(); +// boolean menuCanAdd = false; // 判断当前目录下是否可以正常填写数据 +// 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 (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("S^[\\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[] 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); +// treeList.add(sarFileSplitMenuEO) ; +// message.setMenuId(sarFileSplitMenuEO.getId()); +// addItermsConditionsText(message,itemValList,paragraphString.substring(nowStart.get(i).length())); +// messageList.add(message); +// nowStart = getNewNowStart(nowStart.get(i)); +// menuCanAdd = true; +// } +// hasGoIf = true; +// break; +// } +// } +// +// // 判断是否直接跳出所有循环 +// 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){ +// sarFileSplitMenuEODao.insertForeach(treeList); +// sarFileSplitItemsEODao.insertForeach(messageList); +// sarFileSplitItemsValEODao.insertForeach(itemValList); +// } else { +// return -1; +// } +// return treeList.size(); +// +// } + /** + * 通过传递过来的编号,得出下次可能出现的编号 + * @param nowStart + * @return + */ + private static List getNewNowStart(String nowStart){ + List nowStartList = new ArrayList<>(); + List nowResultStartList = new ArrayList<>(); + String[] numberStr = nowStart.split("\\."); + String startnumber = ""; + for(int i=0;i treeList,String generalCatalogueId,SarFileSplitInfoEO sarFileSplitInfoEO ,Long treeListDisplay,String itemName){ + SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(); +// SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(UUIDUtils.randomUUID20(),name,sarFileSplitInfoEO.getId(),treeListDisplay,itemName); + + documentTreeEO.setId(UUIDUtils.randomUUID20()); + documentTreeEO.setItemName(itemName); + documentTreeEO.setPId(generalCatalogueId); + documentTreeEO.setInfoId(sarFileSplitInfoEO.getId()); + documentTreeEO.setDisplaySeq(treeListDisplay); + documentTreeEO.setName(name); + documentTreeEO.setValidFlag(0); + + // 用现在得name 和之前得name 做比较,确定,parentId + if (name.indexOf(".")>=0) { + for (SarFileSplitMenuEO forDocumentTree : treeList) { + if (name.substring(0, name.lastIndexOf(".")).equals(forDocumentTree.getName())) { + documentTreeEO.setPId(forDocumentTree.getId()); + break; + } + } + }else { + documentTreeEO.setPId(generalCatalogueId); + } + return documentTreeEO; + } + + private static SarFileSplitItemsEO getSarFileSplitItemsEO(String infoId,String itemsNum,String itemsName,List itemsCondi) { + SarFileSplitItemsEO sarFileSplitItemsEO = new SarFileSplitItemsEO(); + sarFileSplitItemsEO.setInfoId(infoId); + sarFileSplitItemsEO.setItemsNum(itemsNum); + sarFileSplitItemsEO.setItemsName(itemsName); + sarFileSplitItemsEO.setItemsCondi(itemsCondi); + sarFileSplitItemsEO.setItermsConditions(""); + sarFileSplitItemsEO.setId(UUIDUtils.randomUUID20()); + sarFileSplitItemsEO.setValidFlag(0); + sarFileSplitItemsEO.setCreationTime(new Date()); + //TODO 需要修改 +// sarFileSplitItemsEO.setCreationUser(LoginUserUtil.getUserId()); + sarFileSplitItemsEO.setModifyTime(new Date()); + //TODO 需要修改 +// sarFileSplitItemsEO.setModifyUser(LoginUserUtil.getUserId()); + return sarFileSplitItemsEO; + } + +// public List queryByPageOwn(SarFileSplitInfoEOPage page) throws Exception { +// int rowCount = dao.queryByCountOwn(page); +// page.getPager().setRowCount(rowCount); +// List rows = dao.queryByPageOwn(page); +// if (rows != null && !rows.isEmpty()) { +// for (SarFileSplitInfoEO infoEO : rows) { +// //处理标准号和标准名称 +// if(StringUtils.isNotBlank(infoEO.getStandardNumber())){ +// infoEO.setShowNumber(infoEO.getStandardType()+" "+ infoEO.getStandardNumber()+"-"+infoEO.getYear()); +// infoEO.setStandName(infoEO.getStandardName()); +// } +// if(StringUtils.isNotBlank(infoEO.getOfficialNumber())){ +// infoEO.setShowNumber(infoEO.getOfficialNumber()); +// infoEO.setStandName(infoEO.getFileNameLaws()); +// } +// AttFileEO fileInfo = attFileEOService.getFileInfo(infoEO.getAttId()); +// if(ObjectUtils.allNotNull(fileInfo)){ +// infoEO.setFileName(fileInfo.getOldFileName()); +// } +// String collectId = personCollectEOService.queryCollectByUserAndId(infoEO.getId()); +// infoEO.setCollectId(collectId); +// if (StringUtils.isNotBlank(infoEO.getFileType())) { +// List getList = +// sarStandAttrDetailsEODao.selectFileFieldForSel1(infoEO.getFileType()); +// if (getList != null && !getList.isEmpty()) { +// infoEO.setFileTypeShow(getList.get(0).getLabel()); +// } else { +// infoEO.setFileTypeShow(null); +// } +// } +// } +// } +// return rows; +// } + + /** + * 标准拆分审核回调 + * 0.审核开始:拆分结果:审核中(1) + * 1.审核通过:拆分结果成功:成功(1) 拆分状态:已关联(1) + * 2.审核失败:拆分状态:编辑中(0) + * @param paragraph + * @return + */ +// public boolean changeSarFileSplitInfoStatusCallBack(ChangeSarFileSplitInfoStatusDTO changeSarFileSplitInfoStatusDTO)throws Exception{ +// SarFileSplitInfoEO sarFileSplitInfoEO = new SarFileSplitInfoEO(); +// sarFileSplitInfoEO.setId(changeSarFileSplitInfoStatusDTO.getSplitId()); +// Integer approveFlag = changeSarFileSplitInfoStatusDTO.getApproveResult(); +// if(0 == approveFlag){ +// sarFileSplitInfoEO.setSplitStatus("1"); +// }else if(1 == approveFlag){ +// sarFileSplitInfoEO.setSplitStatus("1"); +// sarFileSplitInfoEO.setResult("1"); +// }else{ +// sarFileSplitInfoEO.setSplitStatus("0"); +// } +// int i = updateByPrimaryKey(sarFileSplitInfoEO); +// if(i > 0){ +// return true; +// } +// return false; +// } + +// public int deleteByIds(String ids){ +// String[] infoIds = ids.split(","); +// // 删除info表数据 +// SarFileSplitInfoEO sarFileSplitInfoEO = new SarFileSplitInfoEO(); +// sarFileSplitInfoEO.setIdList(infoIds); +// int result = dao.deleteByIds(sarFileSplitInfoEO); +// +// //删除menu表数据 +// SarFileSplitMenuEO sarFileSplitMenuEO = new SarFileSplitMenuEO(); +// sarFileSplitMenuEO.setInfoIdList(infoIds); +// sarFileSplitMenuEODao.deleteByIds(sarFileSplitMenuEO); +// // 删除val表数据 +// List idList = Arrays.asList(infoIds); +// sarFileSplitItemsValEODao.deleteValByInfoIds(idList); +// // 删除table表数据 +// sarFileSplitItemsTableEODao.deleteTableByMenuIds(idList); +// //删除items表数据 +// SarFileSplitItemsEO sarFileSplitItemsEO = new SarFileSplitItemsEO(); +// sarFileSplitItemsEO.setInfoIdList(infoIds); +// sarFileSplitItemsEODao.deleteByIds(sarFileSplitItemsEO); +// //删除params表数据 +// sarFileSplitItemsParamsEODao.deleteByInfoIds(idList); +// //删除收藏表中数据 +// personCollectEODao.deleteByResIdList(idList); +//// // 删除分享表中数据 +//// personShareEODao.deleteByResIdList(idList); +// return result; +// } + + //获取某一个段落中的所有图片索引 + private List readImageInParagraph(XWPFParagraph paragraph) { + //图片索引List + List imageBundleList = new ArrayList(); + + //段落中所有XWPFRun + List runList = paragraph.getRuns(); + for (XWPFRun run : runList) { + //XWPFRun是POI对xml元素解析后生成的自己的属性,无法通过xml解析,需要先转化成CTR + CTR ctr = run.getCTR(); + //对子元素进行遍历 + XmlCursor c = ctr.newCursor(); + //这个就是拿到所有的子元素: + c.selectPath("./*"); + while (c.toNextSelection()) { + XmlObject o = c.getObject(); + //如果子元素是这样的形式,使用CTDrawing保存图片 + if (o instanceof CTDrawing) { + CTDrawing drawing = (CTDrawing) o; + CTInline[] ctInlines = drawing.getInlineArray(); + CTAnchor[] ctAnchors = drawing.getAnchorArray(); + for (CTInline ctInline : ctInlines) { + CTGraphicalObject graphic = ctInline.getGraphic(); + // + XmlCursor cursor = graphic.getGraphicData().newCursor(); + cursor.selectPath("./*"); + while (cursor.toNextSelection()) { + XmlObject xmlObject = cursor.getObject(); + // 如果子元素是这样的形式 + if (xmlObject instanceof CTPicture) { + CTPicture picture = (CTPicture) xmlObject; + //拿到元素的属性 + imageBundleList.add(picture.getBlipFill().getBlip().getEmbed()); + } + } + } + for (CTAnchor ctAnchor : ctAnchors) { + CTGraphicalObject graphic = ctAnchor.getGraphic(); + XmlCursor cursor = graphic.getGraphicData().newCursor(); + cursor.selectPath("./*"); + while (cursor.toNextSelection()) { + XmlObject xmlObject = cursor.getObject(); + // 如果子元素是这样的形式 + if (xmlObject instanceof CTPicture) { + CTPicture picture = (CTPicture) xmlObject; + //拿到元素的属性 + imageBundleList.add(picture.getBlipFill().getBlip().getEmbed()); + } + } + } + } else if (o instanceof CTLevelText){ + System.out.println(((CTLevelText) o).getVal()); + } + } + } + return imageBundleList; + } + + // 像每个条款中依次插入每一段的内容 + public static void addItermsConditionsText(SarFileSplitItemsEO message,List itemsValList,String p) { + message.getItemsCondi().add(p); + message.setItermsConditions(message.getItermsConditions() + "

"+p+ "

"); + // 判断message中是否引用到其他标准 +// String testString = p; +// Pattern ptest = Pattern.compile("[A-Z]{1,}/{0,1}[A-Z]{1,}\\s{0,1}[0-9]\\d*\\.?\\d*"); +// Pattern ptest2 = Pattern.compile("[A-Z]{1,}/{0,1}[A-Z]{1,}\\s{0,1}[0-9]\\d*\\.?\\d*-[0-9]{1,4}"); +// Matcher matcher = ptest2.matcher(testString); +// while (matcher.find()){ +// String standNumber = matcher.group(); +// if (StringUtils.isNotEmpty(message.getReferenceStand()) && message.getReferenceStand()!=""){ +// message.setReferenceStand(message.getReferenceStand() + ","+standNumber); +// } else { +// message.setReferenceStand(standNumber); +// } +// testString = testString.replaceAll(standNumber," "); +// } +// matcher = ptest.matcher(testString); +// while (matcher.find()){ +// if (StringUtils.isNotEmpty(message.getReferenceStand()) && message.getReferenceStand()!=""){ +// message.setReferenceStand(message.getReferenceStand() + ","+matcher.group()); +// } else { +// message.setReferenceStand(matcher.group()); +// } +// } + itemsValList.add(getSplitItemsValObject(message.getId(),SplitFilePragraTypeEnum.TEXT.getValue(),p,message.getItemsCondi().size(),null)); + } + + public static void addItermsConditionsOfTable(SarFileSplitItemsEO message,List itemsValList,XWPFTable table) throws IOException { + StringBuilder tabaleStringNew = new StringBuilder(""); + //将表格转为html字符串 + ReadWordTable readWordTable = new ReadWordTable(); + String tableStr = readWordTable.readTable(table); + tabaleStringNew.append(tableStr); + /*List rows = table.getRows(); + List tableList = new ArrayList<>(); + int rowNum = 1; + for (XWPFTableRow row : rows) { + List cells = row.getTableCells(); + int colNum = 1; + for (XWPFTableCell cell : cells) { + CTTcPr tcpr = cell.getCTTc().getTcPr(); + CTVMerge vMerge = tcpr.getVMerge(); + CTDecimalNumber gridSpan = tcpr.getGridSpan(); + if (gridSpan != null) { + String aa = gridSpan.getVal().toString(); + } + // 简单获取内容(简单方式是不能获取字体对齐方式的) + SarFileSplitItemsTableEO sarFileSplitItemsTableEO = new SarFileSplitItemsTableEO(); + sarFileSplitItemsTableEO.setRowNum(rowNum); + sarFileSplitItemsTableEO.setColNum(colNum); + sarFileSplitItemsTableEO.setContent(cell.getText()); + tableList.add(sarFileSplitItemsTableEO); + // 一个单元格可以理解为一个word文档,单元格里也可以加段落与表格 + *//* List paragraphs = cell.getParagraphs(); + for (XWPFParagraph paragraph : paragraphs) { + getParagraphText(paragraph); + }*//* + colNum++; + } + rowNum++; + }*/ + message.getItemsCondi().add(table.getText()); + message.setItermsConditions(message.getItermsConditions() + tabaleStringNew); + itemsValList.add(getSplitItemsValObject(message.getId(),SplitFilePragraTypeEnum.TABLE.getValue(),tabaleStringNew.toString(),message.getItemsCondi().size(),null)); + + } + + // 像每个条款中依次插入每一段的内容 + private void addItermsConditionsImage(SarFileSplitItemsEO message,List itemsValList,XWPFParagraph p,List imageBundleList) { + for (String pictureId : imageBundleList) { + XWPFPictureData pictureData = p.getDocument().getPictureDataByID(pictureId); + String imageName = UUIDUtils.randomUUID10() + pictureData.getFileName(); + byte[] bytev = pictureData.getData(); + String outPath = filePath + "/img/"; + File file1 = new File(outPath); + if(!file1.exists()){ + file1.mkdirs(); + } + String filepathandname = filePath + "/img/" + imageName; + try { + FileOutputStream fos = new FileOutputStream(filepathandname); + fos.write(bytev); + String path = "uploadPath/img/" + imageName; + String imgCon = ""; + message.getItemsCondi().add(imgCon); + message.setItermsConditions(message.getItermsConditions() + imgCon); + itemsValList.add(getSplitItemsValObject(message.getId(), SplitFilePragraTypeEnum.IMG.getValue(),imgCon,message.getItemsCondi().size(),null)); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + + private static SarFileSplitItemsValEO getSplitItemsValObject (String itemId,String type,String itemContent,int disPlaySql,List tableList) { + SarFileSplitItemsValEO sarFileSplitItemsValEO = new SarFileSplitItemsValEO(); + sarFileSplitItemsValEO.setId(UUIDUtils.randomUUID20()); + sarFileSplitItemsValEO.setValidFlag(0); + sarFileSplitItemsValEO.setCreationTime(new Date()); + //TODO 需要修改 +// sarFileSplitItemsValEO.setCreationUser(LoginUserUtil.getUserId()); + sarFileSplitItemsValEO.setModifyTime(new Date()); + //TODO 需要修改 +// sarFileSplitItemsValEO.setModifyUser(LoginUserUtil.getUserId()); + sarFileSplitItemsValEO.setItemId(itemId); + sarFileSplitItemsValEO.setType(type); + sarFileSplitItemsValEO.setDisplaySeq(disPlaySql); + sarFileSplitItemsValEO.setItemContent(itemContent); + /*if (tableList != null && tableList.size() > 0) { + for (SarFileSplitItemsTableEO tableEO : tableList) { + tableEO.setId(UUIDUtils.randomUUID20()); + tableEO.setItemsValId(sarFileSplitItemsValEO.getId()); + tableEO.setItemsId(itemId); + tableEO.setValidFlag(0); + tableEO.setCreationTime(new Date()); + tableEO.setModifyTime(new Date()); + tableEO.setModifyUser("yxn"); + } + }*/ +// sarFileSplitItemsValEO.setTableList(tableList); + return sarFileSplitItemsValEO; + } + +// public String addToStandItems(SarFileSplitInfoEO sarFileSplitInfoEO,SarStandardsInfoEO sarStandardsInfoEO ) throws Exception { +// //查询拆分中所有条款信息 +// SarFileSplitItemsEOPage splitItemsEOPage = new SarFileSplitItemsEOPage(); +// splitItemsEOPage.setInfoId(sarFileSplitInfoEO.getId()); +// // +// String fileType=sarFileSplitInfoEO.getFileType(); +// List getSplitItemsList = sarFileSplitItemsEODao.queryByList(splitItemsEOPage); +// if (getSplitItemsList != null && !getSplitItemsList.isEmpty()) { +// List addList = new ArrayList<>(); +// List updateList = new ArrayList<>(); +// //查询在标准条目表中数据 +// SarStandItemsEOPage itemPage = new SarStandItemsEOPage(); +// String standId = sarStandardsInfoEO.getId(); +// itemPage.setStandId(standId); +// itemPage.setValidFlag("0"); +// List getItemsIds = sarStandItemsEODao.queryIdsByList(itemPage); +// List idList = new ArrayList<>(); +// List itemValEOS = new ArrayList<>(); +// List delValItemIds = new ArrayList<>(); +// if (getItemsIds != null && !getItemsIds.isEmpty()) { +// for (SarStandItemsEO standItemsEO : getItemsIds) { +// idList.add(standItemsEO.getId()); +// } +// } +// List zrbmList= new ArrayList<>(); +// List svppsList= new ArrayList<>(); +// List foList= new ArrayList<>(); +// List xmpgjsList= new ArrayList<>(); +// String zrbm = SarStandAttrInfoEOService.selectFieldValByStandId("ZRBM", standId); +// if(StringUtils.isNotBlank(zrbm)){ +// zrbmList = Arrays.asList(zrbm.split(",")); +// } +// +// String svpps = SarStandAttrInfoEOService.selectFieldValByStandId("SVPPS", standId); +// if(StringUtils.isNotBlank(svpps)){ +// svppsList = Arrays.asList(svpps.split(",")); +// } +// String fo = SarStandAttrInfoEOService.selectFieldValByStandId("FO", standId); +// if(StringUtils.isNotBlank(fo)){ +// foList = Arrays.asList(fo.split(",")); +// } +// String xmpgjs = SarStandAttrInfoEOService.selectFieldValByStandId("XMPGJS", standId); +// if(StringUtils.isNotBlank(xmpgjs)){ +// xmpgjsList = Arrays.asList(xmpgjs.split(",")); +// } +// List zrbmListNew = new ArrayList(zrbmList); +// List svppsListNew = new ArrayList(svppsList); +// List foListNew = new ArrayList(foList); +// List xmpgjsListNew = new ArrayList(xmpgjsList); +// for(SarFileSplitItemsEO splitItems : getSplitItemsList){ +// SarStandItemsEO newStandItem = new SarStandItemsEO(); +// newStandItem.setId(splitItems.getId()); +// newStandItem.setItemsNum(splitItems.getItemsNum()); +// newStandItem.setItemsName(splitItems.getItemsName()); +// newStandItem.setApplyArctic(splitItems.getApplyArctic()); +// newStandItem.setStandId(standId); +// newStandItem.setTermsConditions(splitItems.getItermsConditions()); +// newStandItem.setParts(splitItems.getSvpps()); +// newStandItem.setCreationUser(UserUtils.getUserId()); +// newStandItem.setValidFlag(0); +// if(null!=fileType){ +// newStandItem.setFileType(fileType); +// } +// newStandItem.setRemarks(splitItems.getRemarks()); +// newStandItem.setModifyTime(new Date()); +// +// newStandItem.setResponsibleUnit(splitItems.getResponsibleUnit()); +// newStandItem.setFo(splitItems.getFo()); +// newStandItem.setDutyEngineer(splitItems.getDutyEngineer()); +// newStandItem.setSvpps(splitItems.getSvpps()); +// newStandItem.setClaimType(splitItems.getClaimType()); +// newStandItem.setBusStandCover(splitItems.getBusStandCover()); +// +// String splitItemsId = splitItems.getId(); +// if (idList != null && !idList.isEmpty()) { +// if (idList.contains(splitItemsId)) { +// updateList.add(newStandItem); +// } else { +// newStandItem.setCreationTime(new Date()); +// addList.add(newStandItem); +// } +// } else { +// newStandItem.setCreationTime(new Date()); +// addList.add(newStandItem); +// } +// //apply数据 +// if(StringUtils.isNotEmpty(splitItems.getApplyArctic())){ +// delValItemIds.add(splitItems.getId()); +// String[] applyarr = splitItems.getApplyArctic().trim().split(","); +// for(String applya:applyarr){ +// SarStandItemValEO sarStandItemValEO = new SarStandItemValEO(); +// sarStandItemValEO.setValidFlag(ValueStateEnum.VALUE_TRUE.getValue()); +// sarStandItemValEO.setCreationTime(new Date()); +// sarStandItemValEO.setModifyTime(new Date()); +// sarStandItemValEO.setItemId(splitItems.getId()); +// sarStandItemValEO.setId(UUIDUtils.randomUUID20()); +// sarStandItemValEO.setPropertyType(PropertyTypeEnum.APPLY_ARCTIC.getValue()); +// sarStandItemValEO.setPropertyVal(applya); +// itemValEOS.add(sarStandItemValEO); +// } +// +// } +// //更新自定义属性表属性 +// if(splitItems.getResponsibleUnit()!=null){ +// zrbmListNew.add(splitItems.getResponsibleUnit()); +// } +// if(splitItems.getSvpps()!=null){ +// svppsListNew.add(splitItems.getSvpps()); +// } +// if(splitItems.getFo()!=null){ +// foListNew.add(splitItems.getFo()); +// } +// if(splitItems.getDutyEngineer()!=null){ +// xmpgjsListNew.add(splitItems.getDutyEngineer()); +// } +// } +// //逻辑处理去重拼接 +// Set zrbmSet = new HashSet(zrbmListNew); +// Set svppsSet = new HashSet(svppsListNew); +// Set foSet = new HashSet(foListNew); +// Set xmpgjsSet = new HashSet(xmpgjsListNew); +// +// String zrbmStr = String.join(", ", zrbmSet); +// String svppsStr = String.join(", ", svppsSet); +// String foStr = String.join(", ", foSet); +// String xmpgjsStr = String.join(", ", xmpgjsSet); +// //更新自定义属性表 +// SarStandAttrInfoEOService.updateFiledVal("ZRBM",zrbmStr,standId); +// SarStandAttrInfoEOService.updateFiledVal("SVPPS",svppsStr,standId); +// SarStandAttrInfoEOService.updateFiledVal("FO",foStr,standId); +// SarStandAttrInfoEOService.updateFiledVal("XMPGJS",xmpgjsStr,standId); +// +// //执行批量新增操作 +// if(addList != null && !addList.isEmpty()){ +// for (SarStandItemsEO item:addList) { +// sarStandItemsEODao.insertSelective(item); +// } +// } +// //执行批量修改操作 +// if(updateList != null && !updateList.isEmpty()){ +// for (SarStandItemsEO item:updateList) { +// sarStandItemsEODao.updateByPrimaryKeySelective(item); +// } +// } +// //执行适用车型批量操作 +// if(itemValEOS != null && !itemValEOS.isEmpty()){ +// sarStandItemValEODao.deleteByItemsIds(delValItemIds); +// for (SarStandItemValEO sarStandItemValEO:itemValEOS) { +// sarStandItemValEODao.insertSelective(sarStandItemValEO); +// } +// } +// SarStandardsInfoEO sarStandardsInfoEO1 = sarStandardsInfoEOService.selectByPrimaryKey(standId); +// createStandMQService.sendStandMQ(sarStandardsInfoEO1, "update"); +// } else { +// return "关联失败,该条数据下没有拆分条款"; +// } +// return "关联成功"; +// } + +// public String addToStandItems1(SarFileSplitInfoEO sarFileSplitInfoEO,SarLawsInfoEO sarLawsInfoEO ){ +// //查询拆分中所有条款信息 +// SarFileSplitItemsEOPage splitItemsEOPage = new SarFileSplitItemsEOPage(); +// splitItemsEOPage.setInfoId(sarFileSplitInfoEO.getId()); +// // +// String fileType=sarFileSplitInfoEO.getFileType(); +// List getSplitItemsList = sarFileSplitItemsEODao.queryByList(splitItemsEOPage); +// if (getSplitItemsList != null && !getSplitItemsList.isEmpty()) { +// List addList = new ArrayList<>(); +// List updateList = new ArrayList<>(); +// //查询在标准条目表中数据 +// SarStandItemsEOPage itemPage = new SarStandItemsEOPage(); +// String standId = sarLawsInfoEO.getId(); +// itemPage.setStandId(standId); +// itemPage.setValidFlag("0"); +// List getItemsIds = sarStandItemsEODao.queryIdsByList(itemPage); +// List idList = new ArrayList<>(); +// List itemValEOS = new ArrayList<>(); +// List delValItemIds = new ArrayList<>(); +// if (getItemsIds != null && !getItemsIds.isEmpty()) { +// for (SarStandItemsEO standItemsEO : getItemsIds) { +// idList.add(standItemsEO.getId()); +// } +// } +// for(SarFileSplitItemsEO splitItems : getSplitItemsList){ +// SarStandItemsEO newStandItem = new SarStandItemsEO(); +// newStandItem.setId(splitItems.getId()); +// newStandItem.setItemsNum(splitItems.getItemsNum()); +// newStandItem.setItemsName(splitItems.getItemsName()); +// newStandItem.setApplyArctic(splitItems.getApplyArctic()); +// newStandItem.setStandId(standId); +// newStandItem.setTermsConditions(splitItems.getItermsConditions()); +// newStandItem.setParts(splitItems.getSvpps()); +// newStandItem.setCreationUser(UserUtils.getUserId()); +// newStandItem.setValidFlag(0); +// if(null!=fileType){ +// newStandItem.setFileType(fileType); +// } +// newStandItem.setRemarks(splitItems.getRemarks()); +// newStandItem.setModifyTime(new Date()); +// +// newStandItem.setResponsibleUnit(splitItems.getResponsibleUnit()); +// newStandItem.setFo(splitItems.getFo()); +// newStandItem.setDutyEngineer(splitItems.getDutyEngineer()); +// newStandItem.setSvpps(splitItems.getSvpps()); +// newStandItem.setClaimType(splitItems.getClaimType()); +// newStandItem.setBusStandCover(splitItems.getBusStandCover()); +// +// String splitItemsId = splitItems.getId(); +// if (idList != null && !idList.isEmpty()) { +// if (idList.contains(splitItemsId)) { +// updateList.add(newStandItem); +// } else { +// newStandItem.setCreationTime(new Date()); +// addList.add(newStandItem); +// } +// } else { +// newStandItem.setCreationTime(new Date()); +// addList.add(newStandItem); +// } +// //apply数据 +// if(StringUtils.isNotEmpty(splitItems.getApplyArctic())){ +// delValItemIds.add(splitItems.getId()); +// String[] applyarr = splitItems.getApplyArctic().trim().split(","); +// for(String applya:applyarr){ +// SarStandItemValEO sarStandItemValEO = new SarStandItemValEO(); +// sarStandItemValEO.setValidFlag(ValueStateEnum.VALUE_TRUE.getValue()); +// sarStandItemValEO.setCreationTime(new Date()); +// sarStandItemValEO.setModifyTime(new Date()); +// sarStandItemValEO.setItemId(splitItems.getId()); +// sarStandItemValEO.setId(UUIDUtils.randomUUID20()); +// sarStandItemValEO.setPropertyType(PropertyTypeEnum.APPLY_ARCTIC.getValue()); +// sarStandItemValEO.setPropertyVal(applya); +// itemValEOS.add(sarStandItemValEO); +// } +// +// } +// } +// //执行批量新增操作 +// if(addList != null && !addList.isEmpty()){ +// for (SarStandItemsEO item:addList) { +// sarStandItemsEODao.insertSelective(item); +// } +// } +// //执行批量修改操作 +// if(updateList != null && !updateList.isEmpty()){ +// for (SarStandItemsEO item:updateList) { +// sarStandItemsEODao.updateByPrimaryKeySelective(item); +// } +// } +// //执行适用车型批量操作 +// if(itemValEOS != null && !itemValEOS.isEmpty()){ +// sarStandItemValEODao.deleteByItemsIds(delValItemIds); +// for (SarStandItemValEO sarStandItemValEO:itemValEOS) { +// sarStandItemValEODao.insertSelective(sarStandItemValEO); +// } +// } +// } else { +// return "关联失败,该条数据下没有拆分条款"; +// } +// return "关联成功"; +// } + +// public String getClauseBySplitId(String standNum, String fileType){ +// SarFileSplitInfoEOPage sarFileSplitInfoEOPage = new SarFileSplitInfoEOPage(); +// sarFileSplitInfoEOPage.setNumOrName(standNum); +// sarFileSplitInfoEOPage.setFileType(fileType); +// sarFileSplitInfoEOPage.setSplitStatus("2"); +// List rows = dao.queryByPageOwn(sarFileSplitInfoEOPage); +// return rows.get(0).getId(); +// } + +// public PersonMsgEO updateNew(PersonMsgEO val) throws Exception { +// PersonMsgEO personMsgEO = personMsgEOService.selectByPrimaryKey(val.getId()); +// personMsgEO.setMsgResult(val.getMsgResult()); +// personMsgEOService.updateByPrimaryKeySelective(personMsgEO); +// if (personMsgEO.getMsgType().equals("SPLIT")){ +// PersonMsgEOPage page = new PersonMsgEOPage(); +// page.setMsgType("SPLIT"); +// page.setBusiId(personMsgEO.getBusiId()); +// page.setMsgTitle(personMsgEO.getMsgTitle()); +// List list = personMsgEOService.queryByList(page); +// for (PersonMsgEO item:list) { +// item.setMsgResult(personMsgEO.getMsgResult()); +// personMsgEOService.updateByPrimaryKeySelective(item); +// } +// SarFileSplitInfoEO sarFileSplitInfoEO = new SarFileSplitInfoEO(); +// sarFileSplitInfoEO.setId(personMsgEO.getBusiId()); +// if (personMsgEO.getMsgResult().equals("0")){ +// sarFileSplitInfoEO.setSplitStatus("2"); +// }else { +// sarFileSplitInfoEO.setSplitStatus("0"); +// } +// sarFileSplitInfoEO.setModifyTime(new Date()); +// this.updateByPrimaryKeySelective(sarFileSplitInfoEO); +// if (list.size() > 0 && list.get(0).getSenderId() != null){ +// PersonMsgEO personMsgEO1 = new PersonMsgEO(); +// personMsgEO1.setUserIds(list.get(0).getSenderId()); +// personMsgEO1.setMsgTitle(list.get(0).getMsgTitle().replace("确认","")+"审核结果"); +// personMsgEO1.setMsgContent(list.get(0).getMsgTitle().replace("确认","") + (personMsgEO.getMsgResult().equals("0")?"已审核通过":"未审核通过")); +// personMsgEO1.setMsgType("TEXT"); +// personMsgEOService.saveNew(personMsgEO1); +// List emailList = new ArrayList<>(); +// UserEO userEO = userEOService.selectByPrimaryKey(list.get(0).getSenderId()); +// if(userEO!=null){ +// emailList.add(userEO.getEmail()); +// String[] array=emailList.toArray(new String[0]); +// mailUtil.sendMsg(array,personMsgEO1.getMsgContent()); +// } +// +// } +// SarFileSplitInfoEOPage sarFileSplitInfoEOPage = new SarFileSplitInfoEOPage(); +// sarFileSplitInfoEOPage.setId(personMsgEO.getBusiId()); +// sarFileSplitInfoEOPage.setSplitStatus("2"); +// List list1 =this.queryByPageOwn(sarFileSplitInfoEOPage); +// for (SarFileSplitInfoEO data:list1) { +// //根据标准号查询标准是否存在 +// String standNum=""; +// if (StringUtils.isNotEmpty(data.getStandId())) { +// standNum=data.getShowNumber(); +// } else if(StringUtils.isNotEmpty(data.getStandNumSplit())){ +// standNum=data.getStandNumSplit(); +// } +// List getList = sarStandardsInfoEOService.selectStandardsByStandnumber(standNum,null); +// SarStandardsInfoEO result = new SarStandardsInfoEO(); +// if(getList != null && getList.size()>0){ +// result = getList.get(0); +// SarStandItemsEOPage itemPage = new SarStandItemsEOPage(); +// String standId = data.getStandId(); +// itemPage.setStandId(standId); +// itemPage.setValidFlag("0"); +// itemPage.setFileType(data.getFileType()); +// List getItemsIds = sarStandItemsEODao.queryIdsByList(itemPage); +// if (getItemsIds.size()>0){ +// this.addToStandItems(data,result); +// } +// } +// } +// } +// return personMsgEO; +// } +} 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 b5e23e1a1..facb788b5 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 @@ -11,7 +11,6 @@ import com.jero.generater.modules.online.cgform.service.impl.OnlCgformFieldServi 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.SarFileSplitMenuEO; import com.jero.modules.split.mapper.SarFileSplitInfoMapper; import com.jero.modules.split.mapper.SarFileSplitMenuEOMapper; import com.jero.modules.split.service.ISarFileSplitInfoService; @@ -47,6 +46,9 @@ public class SarFileSplitInfoServiceImpl extends ServiceImpl messageList) { + return dao.insertForeach(messageList); + } } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/SarFileSplitItemsValEOServiceImpl.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/SarFileSplitItemsValEOServiceImpl.java index 8ee781622..601da46c6 100644 --- a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/SarFileSplitItemsValEOServiceImpl.java +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/service/impl/SarFileSplitItemsValEOServiceImpl.java @@ -137,4 +137,10 @@ public class SarFileSplitItemsValEOServiceImpl extends ServiceImpl itemValList) { + + return dao.insertForeach(itemValList); + } + } diff --git a/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/util/ReadWordTable.java b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/util/ReadWordTable.java new file mode 100644 index 000000000..5fef79bec --- /dev/null +++ b/jero-boot/jero-boot-modules/src/main/java/com/jero/modules/split/util/ReadWordTable.java @@ -0,0 +1,234 @@ +package com.jero.modules.split.util; + +import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.apache.poi.xwpf.usermodel.XWPFTableCell; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDecimalNumber; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr; + +import java.io.IOException; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; + +/** + * @Description: + * @Author: yangxuenan + * date: 2020/2/25 16:58 + */ +public class ReadWordTable { + + + /** + * 保存生成HTML时需要被忽略的单元格 + */ + private List omitCellsList = new ArrayList<>(); + + /** + * 生成忽略的单元格列表中的格式 + * + * @param row + * @param col + * @return + */ + public String generateOmitCellStr(int row, int col) { + return row + ":" + col; + } + + /** + * 获取当前单元格的colspan(列合并)的列数 + * + * @param tcPr 单元格属性 + * @return + */ + public int getColspan(CTTcPr tcPr) { + // 判断是否存在列合并 + CTDecimalNumber gridSpan = null; + if ((gridSpan = tcPr.getGridSpan()) != null) { // 合并的起始列 + // 获取合并的列数 + BigInteger num = gridSpan.getVal(); + return num.intValue(); + } else { // 其他被合并的列或正常列 + return 1; + } + } + + /** + * 获取当前单元格的rowspan(行合并)的行数 + * + * @param table 表格 + * @param row 行值 + * @param col 列值 + * @return + */ + public int getRowspan(XWPFTable table, int row, int col) { + + XWPFTableCell cell = table.getRow(row).getCell(col); + // 正常独立单元格 + if (!isContinueRow(cell) && !isRestartRow(cell)) { + return 1; + } + // 当前单元格的宽度 + int cellWidth = getCellWidth(table, row, col); + // 当前单元格距离左侧边框的距离 + int leftWidth = getLeftWidth(table, row, col); + + // 用户保存当前单元格行合并的单元格数-1(因为不包含自身) + List list = new ArrayList<>(); + getRowspan(table, row, cellWidth, leftWidth, list); + + return list.size() + 1; + } + + private void getRowspan(XWPFTable table, int row, int cellWidth, int leftWidth, + List list) { + // 已达到最后一行 + if (row + 1 >= table.getNumberOfRows()) { + return; + } + row = row + 1; + int colsNum = table.getRow(row).getTableCells().size(); + // 因为列合并单元格可能导致行合并的单元格并不在同一列,所以从头遍历列,通过属性、宽度以及距离左边框间距来判断是否是行合并 + for (int i = 0; i < colsNum; i++) { + XWPFTableCell testTable = table.getRow(row).getCell(i); + // 是否为合并单元格的中间行(包括结尾行) + if (isContinueRow(testTable)) { + // 是被上一行单元格合并的单元格 + if (getCellWidth(table, row, i) == cellWidth + && getLeftWidth(table, row, i) == leftWidth) { + list.add(true); + // 被合并的单元格在生成html时需要忽略 + addOmitCell(row, i); + // 去下一行继续查找 + getRowspan(table, row, cellWidth, leftWidth, list); + break; + } + } + } + } + + /** + * 判断是否是合并行的起始行单元格 + * + * @param tableCell + * @return + */ + public boolean isRestartRow(XWPFTableCell tableCell) { + CTTcPr tcPr = tableCell.getCTTc().getTcPr(); + if (tcPr.getVMerge() == null) { + return false; + } + if (tcPr.getVMerge().getVal() == null) { + return false; + } + if (tcPr.getVMerge().getVal().toString().equalsIgnoreCase("restart")) { + return true; + } + return false; + } + + /** + * 判断是否是合并行的中间行单元格(包括结尾的最后一行的单元格) + * + * @param tableCell + * @return + */ + public boolean isContinueRow(XWPFTableCell tableCell) { + CTTcPr tcPr = tableCell.getCTTc().getTcPr(); + if (tcPr.getVMerge() == null) { + return false; + } + if (tcPr.getVMerge().getVal() == null) { + return true; + } + return false; + } + + public int getLeftWidth(XWPFTable table, int row, int col) { + int leftWidth = 0; + for (int i = 0; i < col; i++) { + leftWidth += getCellWidth(table, row, i); + } + return leftWidth; + } + + public int getCellWidth(XWPFTable table, int row, int col) { + BigInteger width = table.getRow(row).getCell(col).getCTTc().getTcPr().getTcW().getW(); + return width.intValue(); + } + + /** + * 添加忽略的单元格(被行合并的单元格,生成HTML时需要忽略) + * + * @param row + * @param col + */ + public void addOmitCell(int row, int col) { + String omitCellStr = generateOmitCellStr(row, col); + omitCellsList.add(omitCellStr); + } + + public boolean isOmitCell(int row, int col) { + String cellStr = generateOmitCellStr(row, col); + return omitCellsList.contains(cellStr); + } + + public String readTable(XWPFTable table) throws IOException { + // 表格行数 + int tableRowsSize = table.getRows().size(); + StringBuilder tableToHtmlStr = new StringBuilder(""); + + for (int i = 0; i < tableRowsSize; i++) { + tableToHtmlStr.append(""); + int tableCellsSize = table.getRow(i).getTableCells().size(); + for (int j = 0; j < tableCellsSize; j++) { + if (isOmitCell(i, j)) { + continue; + } + XWPFTableCell tableCell = table.getRow(i).getCell(j); + // 获取单元格的属性 + CTTcPr tcPr = tableCell.getCTTc().getTcPr(); + int colspan = getColspan(tcPr); + if (colspan > 1) { // 合并的列 + tableToHtmlStr.append(""); + + } + tableToHtmlStr.append(""); + } + tableToHtmlStr.append("
1) { // 合并的行 + tableToHtmlStr.append(" rowspan='" + rowspan + "'>"); + } else { + tableToHtmlStr.append(">"); + } + String text = tableCell.getText(); + tableToHtmlStr.append(text + "
"); + + clearTableInfo(); + + return tableToHtmlStr.toString(); + } + + public void clearTableInfo() { + // System.out.println(omitCellsList); + omitCellsList.clear(); + } + +// public static void main(String[] args) { +// ReadWordTable readWordTable = new com.adc.da.lawss.common.ReadWordTable(); +// +// try (FileInputStream fileInputStream = new FileInputStream("E:\\下载\\table1.docx"); +// XWPFDocument document = new XWPFDocument(fileInputStream);) { +// List tables = document.getTables(); +// for (XWPFTable table : tables) { +// System.out.println(readWordTable.readTable(table)); +// } +// } catch (IOException e) { +// e.printStackTrace(); +// } +// } +} diff --git a/jero-boot/jreo-boot-split/src/main/java/com/jero/modules/entity/SarFileSplitItemsEO.java b/jero-boot/jreo-boot-split/src/main/java/com/jero/modules/entity/SarFileSplitItemsEO.java index 6ee8b8d8d..2ac2d7d0b 100644 --- a/jero-boot/jreo-boot-split/src/main/java/com/jero/modules/entity/SarFileSplitItemsEO.java +++ b/jero-boot/jreo-boot-split/src/main/java/com/jero/modules/entity/SarFileSplitItemsEO.java @@ -1,522 +1,522 @@ -package com.jero.modules.entity; - -import com.fasterxml.jackson.annotation.JsonFormat; - -import java.util.Date; -import java.util.List; - -/** - * 功能:SAR_FILE_SPLIT_ITEMS SarFileSplitItemsEOEntity
- * 作者:code generator
- * 日期: 2020-01-03
- * 版权所有:版权归北京卡达克数据技术中心所有。
- */ -public class SarFileSplitItemsEO { - - private String id; - private String infoId; - private String itemsNum; - private String itemsName; - private String itermsConditions; - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") - private Date newcarPutTime; - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") - private Date productPutTime; - private String menuId; - private String svpps; - private String applyArctic; - private String referenceStand; - private String specialRequest; - private String relevanceFile; - private String remarks; - private Integer validFlag; - private String creationUser; - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") - private Date creationTime; - @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") - private Date modifyTime; - private String modifyUser; - private String[] infoIdList; - private String[] idList; -// private List itemValEOList; - // 前台删除的VAL表条目内容ID - private String delItemIds; - private String sMenuId; - //特殊参数要求 -// private List paramsList; - private String relevanceFileAttid; - - //新加字段 SVPPS在前边已经存在 - private String fo;//FO - private String dutyEngineer;//责任工程师 - private String claimType;//要求类型 - private String busStandCover;//企标覆盖关系 - private String fileType;//文件类型 - - //新加字段带show - private String foShow;//FO - private String dutyEngineerShow;//责任工程师 - private String svppsShow;//SVPPS - private String claimTypeShow;//要求类型 - private String busStandCoverShow;//企标覆盖关系 - private String fileTypeShow;//文件类型 - - private String responsibleUnit;//责任部门 - private String responsibleUnitShow; - /** - * java字段名转换为原始数据库列名。如果不存在则返回null
- *

字段列表:

- *
  • id -> id
  • - *
  • infoId -> info_id
  • - *
  • itemsNum -> items_num
  • - *
  • itemsName -> items_name
  • - *
  • itermsConditions -> iterms_conditions
  • - *
  • newcarPutTime -> newcar_put_time
  • - *
  • productPutTime -> product_put_time
  • - *
  • menuId -> menu_id
  • - *
  • svpps -> svpps
  • - *
  • applyArctic -> apply_arctic
  • - *
  • referenceStand -> reference_stand
  • - *
  • specialRequest -> special_request
  • - *
  • relevanceFile -> relevance_file
  • - *
  • remarks -> remarks
  • - *
  • validFlag -> valid_flag
  • - *
  • creationUser -> creation_user
  • - *
  • creationTime -> creation_time
  • - *
  • modifyTime -> modify_time
  • - *
  • modifyUser -> modify_user
  • - */ - public static String fieldToColumn(String fieldName) { - if (fieldName == null) return null; - switch (fieldName) { - case "id": return "id"; - case "infoId": return "info_id"; - case "itemsNum": return "items_num"; - case "itemsName": return "items_name"; - case "itermsConditions": return "iterms_conditions"; - case "newcarPutTime": return "newcar_put_time"; - case "productPutTime": return "product_put_time"; - case "menuId": return "menu_id"; - case "svpps": return "svpps"; - case "applyArctic": return "apply_arctic"; - case "referenceStand": return "reference_stand"; - case "specialRequest": return "special_request"; - case "relevanceFile": return "relevance_file"; - case "remarks": return "remarks"; - case "validFlag": return "valid_flag"; - case "creationUser": return "creation_user"; - case "creationTime": return "creation_time"; - case "modifyTime": return "modify_time"; - case "modifyUser": return "modify_user"; - default: return null; - } - } - - /** - * 原始数据库列名转换为java字段名。如果不存在则返回null
    - *

    字段列表:

    - *
  • id -> id
  • - *
  • info_id -> infoId
  • - *
  • items_num -> itemsNum
  • - *
  • items_name -> itemsName
  • - *
  • iterms_conditions -> itermsConditions
  • - *
  • newcar_put_time -> newcarPutTime
  • - *
  • product_put_time -> productPutTime
  • - *
  • menu_id -> menuId
  • - *
  • svpps -> svpps
  • - *
  • apply_arctic -> applyArctic
  • - *
  • reference_stand -> referenceStand
  • - *
  • special_request -> specialRequest
  • - *
  • relevance_file -> relevanceFile
  • - *
  • remarks -> remarks
  • - *
  • valid_flag -> validFlag
  • - *
  • creation_user -> creationUser
  • - *
  • creation_time -> creationTime
  • - *
  • modify_time -> modifyTime
  • - *
  • modify_user -> modifyUser
  • - */ - public static String columnToField(String columnName) { - if (columnName == null) return null; - switch (columnName) { - case "id": return "id"; - case "info_id": return "infoId"; - case "items_num": return "itemsNum"; - case "items_name": return "itemsName"; - case "iterms_conditions": return "itermsConditions"; - case "newcar_put_time": return "newcarPutTime"; - case "product_put_time": return "productPutTime"; - case "menu_id": return "menuId"; - case "svpps": return "svpps"; - case "apply_arctic": return "applyArctic"; - case "reference_stand": return "referenceStand"; - case "special_request": return "specialRequest"; - case "relevance_file": return "relevanceFile"; - case "remarks": return "remarks"; - case "valid_flag": return "validFlag"; - case "creation_user": return "creationUser"; - case "creation_time": return "creationTime"; - case "modify_time": return "modifyTime"; - case "modify_user": return "modifyUser"; - default: return null; - } - } - - /** **/ - public String getId() { - return this.id; - } - - /** **/ - public void setId(String id) { - this.id = id; - } - - /** **/ - public String getInfoId() { - return this.infoId; - } - - /** **/ - public void setInfoId(String infoId) { - this.infoId = infoId; - } - - /** **/ - public String getItemsNum() { - return this.itemsNum; - } - - /** **/ - public void setItemsNum(String itemsNum) { - this.itemsNum = itemsNum; - } - - /** **/ - public String getItemsName() { - return this.itemsName; - } - - /** **/ - public void setItemsName(String itemsName) { - this.itemsName = itemsName; - } - - public String getItermsConditions() { - return itermsConditions; - } - - public void setItermsConditions(String itermsConditions) { - this.itermsConditions = itermsConditions; - } - - /** **/ - public Date getNewcarPutTime() { - return this.newcarPutTime; - } - - /** **/ - public void setNewcarPutTime(Date newcarPutTime) { - this.newcarPutTime = newcarPutTime; - } - - /** **/ - public Date getProductPutTime() { - return this.productPutTime; - } - - /** **/ - public void setProductPutTime(Date productPutTime) { - this.productPutTime = productPutTime; - } - - /** **/ - public String getMenuId() { - return this.menuId; - } - - /** **/ - public void setMenuId(String menuId) { - this.menuId = menuId; - } - - /** **/ - public String getSvpps() { - return this.svpps; - } - - /** **/ - public void setSvpps(String svpps) { - this.svpps = svpps; - } - - /** **/ - public String getApplyArctic() { - return this.applyArctic; - } - - /** **/ - public void setApplyArctic(String applyArctic) { - this.applyArctic = applyArctic; - } - - /** **/ - public String getReferenceStand() { - return this.referenceStand; - } - - /** **/ - public void setReferenceStand(String referenceStand) { - this.referenceStand = referenceStand; - } - - /** **/ - public String getSpecialRequest() { - return this.specialRequest; - } - - /** **/ - public void setSpecialRequest(String specialRequest) { - this.specialRequest = specialRequest; - } - - /** **/ - public String getRelevanceFile() { - return this.relevanceFile; - } - - /** **/ - public void setRelevanceFile(String relevanceFile) { - this.relevanceFile = relevanceFile; - } - - /** **/ - public String getRemarks() { - return this.remarks; - } - - /** **/ - public void setRemarks(String remarks) { - this.remarks = remarks; - } - - /** **/ - public Integer getValidFlag() { - return this.validFlag; - } - - /** **/ - public void setValidFlag(Integer validFlag) { - this.validFlag = validFlag; - } - - /** **/ - public String getCreationUser() { - return this.creationUser; - } - - /** **/ - public void setCreationUser(String creationUser) { - this.creationUser = creationUser; - } - - /** **/ - public Date getCreationTime() { - return this.creationTime; - } - - /** **/ - public void setCreationTime(Date creationTime) { - this.creationTime = creationTime; - } - - /** **/ - public Date getModifyTime() { - return this.modifyTime; - } - - /** **/ - public void setModifyTime(Date modifyTime) { - this.modifyTime = modifyTime; - } - - /** **/ - public String getModifyUser() { - return this.modifyUser; - } - - /** **/ - public void setModifyUser(String modifyUser) { - this.modifyUser = modifyUser; - } - - - List itemsCondi; - - public List getItemsCondi() { - return itemsCondi; - } - - public void setItemsCondi(List itemsCondi) { - this.itemsCondi = itemsCondi; - } - - public String[] getInfoIdList() { - return infoIdList; - } - - public void setInfoIdList(String[] infoIdList) { - this.infoIdList = infoIdList; - } - - public String[] getIdList() { - return idList; - } - - public void setIdList(String[] idList) { - this.idList = idList; - } - -// public List getItemValEOList() { -// return itemValEOList; +//package com.jero.modules.entity; +// +//import com.fasterxml.jackson.annotation.JsonFormat; +// +//import java.util.Date; +//import java.util.List; +// +///** +// * 功能:SAR_FILE_SPLIT_ITEMS SarFileSplitItemsEOEntity
    +// * 作者:code generator
    +// * 日期: 2020-01-03
    +// * 版权所有:版权归北京卡达克数据技术中心所有。
    +// */ +//public class SarFileSplitItemsEO { +// +// private String id; +// private String infoId; +// private String itemsNum; +// private String itemsName; +// private String itermsConditions; +// @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") +// private Date newcarPutTime; +// @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") +// private Date productPutTime; +// private String menuId; +// private String svpps; +// private String applyArctic; +// private String referenceStand; +// private String specialRequest; +// private String relevanceFile; +// private String remarks; +// private Integer validFlag; +// private String creationUser; +// @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") +// private Date creationTime; +// @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") +// private Date modifyTime; +// private String modifyUser; +// private String[] infoIdList; +// private String[] idList; +//// private List itemValEOList; +// // 前台删除的VAL表条目内容ID +// private String delItemIds; +// private String sMenuId; +// //特殊参数要求 +//// private List paramsList; +// private String relevanceFileAttid; +// +// //新加字段 SVPPS在前边已经存在 +// private String fo;//FO +// private String dutyEngineer;//责任工程师 +// private String claimType;//要求类型 +// private String busStandCover;//企标覆盖关系 +// private String fileType;//文件类型 +// +// //新加字段带show +// private String foShow;//FO +// private String dutyEngineerShow;//责任工程师 +// private String svppsShow;//SVPPS +// private String claimTypeShow;//要求类型 +// private String busStandCoverShow;//企标覆盖关系 +// private String fileTypeShow;//文件类型 +// +// private String responsibleUnit;//责任部门 +// private String responsibleUnitShow; +// /** +// * java字段名转换为原始数据库列名。如果不存在则返回null
    +// *

    字段列表:

    +// *
  • id -> id
  • +// *
  • infoId -> info_id
  • +// *
  • itemsNum -> items_num
  • +// *
  • itemsName -> items_name
  • +// *
  • itermsConditions -> iterms_conditions
  • +// *
  • newcarPutTime -> newcar_put_time
  • +// *
  • productPutTime -> product_put_time
  • +// *
  • menuId -> menu_id
  • +// *
  • svpps -> svpps
  • +// *
  • applyArctic -> apply_arctic
  • +// *
  • referenceStand -> reference_stand
  • +// *
  • specialRequest -> special_request
  • +// *
  • relevanceFile -> relevance_file
  • +// *
  • remarks -> remarks
  • +// *
  • validFlag -> valid_flag
  • +// *
  • creationUser -> creation_user
  • +// *
  • creationTime -> creation_time
  • +// *
  • modifyTime -> modify_time
  • +// *
  • modifyUser -> modify_user
  • +// */ +// public static String fieldToColumn(String fieldName) { +// if (fieldName == null) return null; +// switch (fieldName) { +// case "id": return "id"; +// case "infoId": return "info_id"; +// case "itemsNum": return "items_num"; +// case "itemsName": return "items_name"; +// case "itermsConditions": return "iterms_conditions"; +// case "newcarPutTime": return "newcar_put_time"; +// case "productPutTime": return "product_put_time"; +// case "menuId": return "menu_id"; +// case "svpps": return "svpps"; +// case "applyArctic": return "apply_arctic"; +// case "referenceStand": return "reference_stand"; +// case "specialRequest": return "special_request"; +// case "relevanceFile": return "relevance_file"; +// case "remarks": return "remarks"; +// case "validFlag": return "valid_flag"; +// case "creationUser": return "creation_user"; +// case "creationTime": return "creation_time"; +// case "modifyTime": return "modify_time"; +// case "modifyUser": return "modify_user"; +// default: return null; +// } // } // -// public void setItemValEOList(List itemValEOList) { -// this.itemValEOList = itemValEOList; -// } - - public String getDelItemIds() { - return delItemIds; - } - - public void setDelItemIds(String delItemIds) { - this.delItemIds = delItemIds; - } - - public String getsMenuId() { - return sMenuId; - } - - public void setsMenuId(String sMenuId) { - this.sMenuId = sMenuId; - } - -// public List getParamsList() { -// return paramsList; +// /** +// * 原始数据库列名转换为java字段名。如果不存在则返回null
    +// *

    字段列表:

    +// *
  • id -> id
  • +// *
  • info_id -> infoId
  • +// *
  • items_num -> itemsNum
  • +// *
  • items_name -> itemsName
  • +// *
  • iterms_conditions -> itermsConditions
  • +// *
  • newcar_put_time -> newcarPutTime
  • +// *
  • product_put_time -> productPutTime
  • +// *
  • menu_id -> menuId
  • +// *
  • svpps -> svpps
  • +// *
  • apply_arctic -> applyArctic
  • +// *
  • reference_stand -> referenceStand
  • +// *
  • special_request -> specialRequest
  • +// *
  • relevance_file -> relevanceFile
  • +// *
  • remarks -> remarks
  • +// *
  • valid_flag -> validFlag
  • +// *
  • creation_user -> creationUser
  • +// *
  • creation_time -> creationTime
  • +// *
  • modify_time -> modifyTime
  • +// *
  • modify_user -> modifyUser
  • +// */ +// public static String columnToField(String columnName) { +// if (columnName == null) return null; +// switch (columnName) { +// case "id": return "id"; +// case "info_id": return "infoId"; +// case "items_num": return "itemsNum"; +// case "items_name": return "itemsName"; +// case "iterms_conditions": return "itermsConditions"; +// case "newcar_put_time": return "newcarPutTime"; +// case "product_put_time": return "productPutTime"; +// case "menu_id": return "menuId"; +// case "svpps": return "svpps"; +// case "apply_arctic": return "applyArctic"; +// case "reference_stand": return "referenceStand"; +// case "special_request": return "specialRequest"; +// case "relevance_file": return "relevanceFile"; +// case "remarks": return "remarks"; +// case "valid_flag": return "validFlag"; +// case "creation_user": return "creationUser"; +// case "creation_time": return "creationTime"; +// case "modify_time": return "modifyTime"; +// case "modify_user": return "modifyUser"; +// default: return null; +// } // } // -// public void setParamsList(List paramsList) { -// this.paramsList = paramsList; +// /** **/ +// public String getId() { +// return this.id; // } - - public String getRelevanceFileAttid() { - return relevanceFileAttid; - } - - public void setRelevanceFileAttid(String relevanceFileAttid) { - this.relevanceFileAttid = relevanceFileAttid; - } - - public String getFo() { - return fo; - } - - public void setFo(String fo) { - this.fo = fo; - } - - public String getDutyEngineer() { - return dutyEngineer; - } - - public void setDutyEngineer(String dutyEngineer) { - this.dutyEngineer = dutyEngineer; - } - - public String getClaimType() { - return claimType; - } - - public void setClaimType(String claimType) { - this.claimType = claimType; - } - - public String getBusStandCover() { - return busStandCover; - } - - public void setBusStandCover(String busStandCover) { - this.busStandCover = busStandCover; - } - - public String getFileType() { - return fileType; - } - - public void setFileType(String fileType) { - this.fileType = fileType; - } - - public String getFoShow() { - return foShow; - } - - public void setFoShow(String foShow) { - this.foShow = foShow; - } - - public String getDutyEngineerShow() { - return dutyEngineerShow; - } - - public void setDutyEngineerShow(String dutyEngineerShow) { - this.dutyEngineerShow = dutyEngineerShow; - } - - public String getSvppsShow() { - return svppsShow; - } - - public void setSvppsShow(String svppsShow) { - this.svppsShow = svppsShow; - } - - public String getClaimTypeShow() { - return claimTypeShow; - } - - public void setClaimTypeShow(String claimTypeShow) { - this.claimTypeShow = claimTypeShow; - } - - public String getBusStandCoverShow() { - return busStandCoverShow; - } - - public void setBusStandCoverShow(String busStandCoverShow) { - this.busStandCoverShow = busStandCoverShow; - } - - public String getFileTypeShow() { - return fileTypeShow; - } - - public void setFileTypeShow(String fileTypeShow) { - this.fileTypeShow = fileTypeShow; - } - - public String getResponsibleUnit() { - return responsibleUnit; - } - - public void setResponsibleUnit(String responsibleUnit) { - this.responsibleUnit = responsibleUnit; - } - - public String getResponsibleUnitShow() { - return responsibleUnitShow; - } - - public void setResponsibleUnitShow(String responsibleUnitShow) { - this.responsibleUnitShow = responsibleUnitShow; - } -} +// +// /** **/ +// public void setId(String id) { +// this.id = id; +// } +// +// /** **/ +// public String getInfoId() { +// return this.infoId; +// } +// +// /** **/ +// public void setInfoId(String infoId) { +// this.infoId = infoId; +// } +// +// /** **/ +// public String getItemsNum() { +// return this.itemsNum; +// } +// +// /** **/ +// public void setItemsNum(String itemsNum) { +// this.itemsNum = itemsNum; +// } +// +// /** **/ +// public String getItemsName() { +// return this.itemsName; +// } +// +// /** **/ +// public void setItemsName(String itemsName) { +// this.itemsName = itemsName; +// } +// +// public String getItermsConditions() { +// return itermsConditions; +// } +// +// public void setItermsConditions(String itermsConditions) { +// this.itermsConditions = itermsConditions; +// } +// +// /** **/ +// public Date getNewcarPutTime() { +// return this.newcarPutTime; +// } +// +// /** **/ +// public void setNewcarPutTime(Date newcarPutTime) { +// this.newcarPutTime = newcarPutTime; +// } +// +// /** **/ +// public Date getProductPutTime() { +// return this.productPutTime; +// } +// +// /** **/ +// public void setProductPutTime(Date productPutTime) { +// this.productPutTime = productPutTime; +// } +// +// /** **/ +// public String getMenuId() { +// return this.menuId; +// } +// +// /** **/ +// public void setMenuId(String menuId) { +// this.menuId = menuId; +// } +// +// /** **/ +// public String getSvpps() { +// return this.svpps; +// } +// +// /** **/ +// public void setSvpps(String svpps) { +// this.svpps = svpps; +// } +// +// /** **/ +// public String getApplyArctic() { +// return this.applyArctic; +// } +// +// /** **/ +// public void setApplyArctic(String applyArctic) { +// this.applyArctic = applyArctic; +// } +// +// /** **/ +// public String getReferenceStand() { +// return this.referenceStand; +// } +// +// /** **/ +// public void setReferenceStand(String referenceStand) { +// this.referenceStand = referenceStand; +// } +// +// /** **/ +// public String getSpecialRequest() { +// return this.specialRequest; +// } +// +// /** **/ +// public void setSpecialRequest(String specialRequest) { +// this.specialRequest = specialRequest; +// } +// +// /** **/ +// public String getRelevanceFile() { +// return this.relevanceFile; +// } +// +// /** **/ +// public void setRelevanceFile(String relevanceFile) { +// this.relevanceFile = relevanceFile; +// } +// +// /** **/ +// public String getRemarks() { +// return this.remarks; +// } +// +// /** **/ +// public void setRemarks(String remarks) { +// this.remarks = remarks; +// } +// +// /** **/ +// public Integer getValidFlag() { +// return this.validFlag; +// } +// +// /** **/ +// public void setValidFlag(Integer validFlag) { +// this.validFlag = validFlag; +// } +// +// /** **/ +// public String getCreationUser() { +// return this.creationUser; +// } +// +// /** **/ +// public void setCreationUser(String creationUser) { +// this.creationUser = creationUser; +// } +// +// /** **/ +// public Date getCreationTime() { +// return this.creationTime; +// } +// +// /** **/ +// public void setCreationTime(Date creationTime) { +// this.creationTime = creationTime; +// } +// +// /** **/ +// public Date getModifyTime() { +// return this.modifyTime; +// } +// +// /** **/ +// public void setModifyTime(Date modifyTime) { +// this.modifyTime = modifyTime; +// } +// +// /** **/ +// public String getModifyUser() { +// return this.modifyUser; +// } +// +// /** **/ +// public void setModifyUser(String modifyUser) { +// this.modifyUser = modifyUser; +// } +// +// +// List itemsCondi; +// +// public List getItemsCondi() { +// return itemsCondi; +// } +// +// public void setItemsCondi(List itemsCondi) { +// this.itemsCondi = itemsCondi; +// } +// +// public String[] getInfoIdList() { +// return infoIdList; +// } +// +// public void setInfoIdList(String[] infoIdList) { +// this.infoIdList = infoIdList; +// } +// +// public String[] getIdList() { +// return idList; +// } +// +// public void setIdList(String[] idList) { +// this.idList = idList; +// } +// +//// public List getItemValEOList() { +//// return itemValEOList; +//// } +//// +//// public void setItemValEOList(List itemValEOList) { +//// this.itemValEOList = itemValEOList; +//// } +// +// public String getDelItemIds() { +// return delItemIds; +// } +// +// public void setDelItemIds(String delItemIds) { +// this.delItemIds = delItemIds; +// } +// +// public String getsMenuId() { +// return sMenuId; +// } +// +// public void setsMenuId(String sMenuId) { +// this.sMenuId = sMenuId; +// } +// +//// public List getParamsList() { +//// return paramsList; +//// } +//// +//// public void setParamsList(List paramsList) { +//// this.paramsList = paramsList; +//// } +// +// public String getRelevanceFileAttid() { +// return relevanceFileAttid; +// } +// +// public void setRelevanceFileAttid(String relevanceFileAttid) { +// this.relevanceFileAttid = relevanceFileAttid; +// } +// +// public String getFo() { +// return fo; +// } +// +// public void setFo(String fo) { +// this.fo = fo; +// } +// +// public String getDutyEngineer() { +// return dutyEngineer; +// } +// +// public void setDutyEngineer(String dutyEngineer) { +// this.dutyEngineer = dutyEngineer; +// } +// +// public String getClaimType() { +// return claimType; +// } +// +// public void setClaimType(String claimType) { +// this.claimType = claimType; +// } +// +// public String getBusStandCover() { +// return busStandCover; +// } +// +// public void setBusStandCover(String busStandCover) { +// this.busStandCover = busStandCover; +// } +// +// public String getFileType() { +// return fileType; +// } +// +// public void setFileType(String fileType) { +// this.fileType = fileType; +// } +// +// public String getFoShow() { +// return foShow; +// } +// +// public void setFoShow(String foShow) { +// this.foShow = foShow; +// } +// +// public String getDutyEngineerShow() { +// return dutyEngineerShow; +// } +// +// public void setDutyEngineerShow(String dutyEngineerShow) { +// this.dutyEngineerShow = dutyEngineerShow; +// } +// +// public String getSvppsShow() { +// return svppsShow; +// } +// +// public void setSvppsShow(String svppsShow) { +// this.svppsShow = svppsShow; +// } +// +// public String getClaimTypeShow() { +// return claimTypeShow; +// } +// +// public void setClaimTypeShow(String claimTypeShow) { +// this.claimTypeShow = claimTypeShow; +// } +// +// public String getBusStandCoverShow() { +// return busStandCoverShow; +// } +// +// public void setBusStandCoverShow(String busStandCoverShow) { +// this.busStandCoverShow = busStandCoverShow; +// } +// +// public String getFileTypeShow() { +// return fileTypeShow; +// } +// +// public void setFileTypeShow(String fileTypeShow) { +// this.fileTypeShow = fileTypeShow; +// } +// +// public String getResponsibleUnit() { +// return responsibleUnit; +// } +// +// public void setResponsibleUnit(String responsibleUnit) { +// this.responsibleUnit = responsibleUnit; +// } +// +// public String getResponsibleUnitShow() { +// return responsibleUnitShow; +// } +// +// public void setResponsibleUnitShow(String responsibleUnitShow) { +// this.responsibleUnitShow = responsibleUnitShow; +// } +//} diff --git a/jero-boot/jreo-boot-split/src/main/java/com/jero/modules/utils/ReadWordTable.java b/jero-boot/jreo-boot-split/src/main/java/com/jero/modules/utils/ReadWordTable.java new file mode 100644 index 000000000..3428397fe --- /dev/null +++ b/jero-boot/jreo-boot-split/src/main/java/com/jero/modules/utils/ReadWordTable.java @@ -0,0 +1,234 @@ +package com.jero.modules.utils; + +import org.apache.poi.xwpf.usermodel.XWPFTable; +import org.apache.poi.xwpf.usermodel.XWPFTableCell; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTDecimalNumber; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr; + +import java.io.IOException; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.List; + +/** + * @Description: + * @Author: yangxuenan + * date: 2020/2/25 16:58 + */ +public class ReadWordTable { + + + /** + * 保存生成HTML时需要被忽略的单元格 + */ + private List omitCellsList = new ArrayList<>(); + + /** + * 生成忽略的单元格列表中的格式 + * + * @param row + * @param col + * @return + */ + public String generateOmitCellStr(int row, int col) { + return row + ":" + col; + } + + /** + * 获取当前单元格的colspan(列合并)的列数 + * + * @param tcPr 单元格属性 + * @return + */ + public int getColspan(CTTcPr tcPr) { + // 判断是否存在列合并 + CTDecimalNumber gridSpan = null; + if ((gridSpan = tcPr.getGridSpan()) != null) { // 合并的起始列 + // 获取合并的列数 + BigInteger num = gridSpan.getVal(); + return num.intValue(); + } else { // 其他被合并的列或正常列 + return 1; + } + } + + /** + * 获取当前单元格的rowspan(行合并)的行数 + * + * @param table 表格 + * @param row 行值 + * @param col 列值 + * @return + */ + public int getRowspan(XWPFTable table, int row, int col) { + + XWPFTableCell cell = table.getRow(row).getCell(col); + // 正常独立单元格 + if (!isContinueRow(cell) && !isRestartRow(cell)) { + return 1; + } + // 当前单元格的宽度 + int cellWidth = getCellWidth(table, row, col); + // 当前单元格距离左侧边框的距离 + int leftWidth = getLeftWidth(table, row, col); + + // 用户保存当前单元格行合并的单元格数-1(因为不包含自身) + List list = new ArrayList<>(); + getRowspan(table, row, cellWidth, leftWidth, list); + + return list.size() + 1; + } + + private void getRowspan(XWPFTable table, int row, int cellWidth, int leftWidth, + List list) { + // 已达到最后一行 + if (row + 1 >= table.getNumberOfRows()) { + return; + } + row = row + 1; + int colsNum = table.getRow(row).getTableCells().size(); + // 因为列合并单元格可能导致行合并的单元格并不在同一列,所以从头遍历列,通过属性、宽度以及距离左边框间距来判断是否是行合并 + for (int i = 0; i < colsNum; i++) { + XWPFTableCell testTable = table.getRow(row).getCell(i); + // 是否为合并单元格的中间行(包括结尾行) + if (isContinueRow(testTable)) { + // 是被上一行单元格合并的单元格 + if (getCellWidth(table, row, i) == cellWidth + && getLeftWidth(table, row, i) == leftWidth) { + list.add(true); + // 被合并的单元格在生成html时需要忽略 + addOmitCell(row, i); + // 去下一行继续查找 + getRowspan(table, row, cellWidth, leftWidth, list); + break; + } + } + } + } + + /** + * 判断是否是合并行的起始行单元格 + * + * @param tableCell + * @return + */ + public boolean isRestartRow(XWPFTableCell tableCell) { + CTTcPr tcPr = tableCell.getCTTc().getTcPr(); + if (tcPr.getVMerge() == null) { + return false; + } + if (tcPr.getVMerge().getVal() == null) { + return false; + } + if (tcPr.getVMerge().getVal().toString().equalsIgnoreCase("restart")) { + return true; + } + return false; + } + + /** + * 判断是否是合并行的中间行单元格(包括结尾的最后一行的单元格) + * + * @param tableCell + * @return + */ + public boolean isContinueRow(XWPFTableCell tableCell) { + CTTcPr tcPr = tableCell.getCTTc().getTcPr(); + if (tcPr.getVMerge() == null) { + return false; + } + if (tcPr.getVMerge().getVal() == null) { + return true; + } + return false; + } + + public int getLeftWidth(XWPFTable table, int row, int col) { + int leftWidth = 0; + for (int i = 0; i < col; i++) { + leftWidth += getCellWidth(table, row, i); + } + return leftWidth; + } + + public int getCellWidth(XWPFTable table, int row, int col) { + BigInteger width = table.getRow(row).getCell(col).getCTTc().getTcPr().getTcW().getW(); + return width.intValue(); + } + + /** + * 添加忽略的单元格(被行合并的单元格,生成HTML时需要忽略) + * + * @param row + * @param col + */ + public void addOmitCell(int row, int col) { + String omitCellStr = generateOmitCellStr(row, col); + omitCellsList.add(omitCellStr); + } + + public boolean isOmitCell(int row, int col) { + String cellStr = generateOmitCellStr(row, col); + return omitCellsList.contains(cellStr); + } + + public String readTable(XWPFTable table) throws IOException { + // 表格行数 + int tableRowsSize = table.getRows().size(); + StringBuilder tableToHtmlStr = new StringBuilder(""); + + for (int i = 0; i < tableRowsSize; i++) { + tableToHtmlStr.append(""); + int tableCellsSize = table.getRow(i).getTableCells().size(); + for (int j = 0; j < tableCellsSize; j++) { + if (isOmitCell(i, j)) { + continue; + } + XWPFTableCell tableCell = table.getRow(i).getCell(j); + // 获取单元格的属性 + CTTcPr tcPr = tableCell.getCTTc().getTcPr(); + int colspan = getColspan(tcPr); + if (colspan > 1) { // 合并的列 + tableToHtmlStr.append(""); + + } + tableToHtmlStr.append(""); + } + tableToHtmlStr.append("
    1) { // 合并的行 + tableToHtmlStr.append(" rowspan='" + rowspan + "'>"); + } else { + tableToHtmlStr.append(">"); + } + String text = tableCell.getText(); + tableToHtmlStr.append(text + "
    "); + + clearTableInfo(); + + return tableToHtmlStr.toString(); + } + + public void clearTableInfo() { + // System.out.println(omitCellsList); + omitCellsList.clear(); + } + +// public static void main(String[] args) { +// ReadWordTable readWordTable = new com.adc.da.lawss.common.ReadWordTable(); +// +// try (FileInputStream fileInputStream = new FileInputStream("E:\\下载\\table1.docx"); +// XWPFDocument document = new XWPFDocument(fileInputStream);) { +// List tables = document.getTables(); +// for (XWPFTable table : tables) { +// System.out.println(readWordTable.readTable(table)); +// } +// } catch (IOException e) { +// e.printStackTrace(); +// } +// } +}