word拆分功能处理

This commit is contained in:
wangchengjun
2022-04-08 01:55:41 +08:00
parent 4b69da9871
commit d460a5d5da
7 changed files with 475 additions and 266 deletions
@@ -104,5 +104,7 @@ public class SarFileSplitInfoEO implements Serializable {
private int startNumber;
@TableField(exist = false)
private int stopNumber;
@TableField(exist = false)
private String fileGroup;
}
@@ -0,0 +1,41 @@
package com.jero.modules.split.enums;
/**
* 标准文件类型枚举设置
* @author gaoyan
* date 2018/09/03
*/
public enum SplitFileTypeTypeEnum {
GSO("GSO","GSO"),
KOREAN("Korean","韩国"),
US("US","美国"),
EU("EU","欧洲"),
JAPAN("Japan","日本"),
CN("CN","中国");
private String value;
private String lable;
private SplitFileTypeTypeEnum(String value, String lable) {
this.value = value;
this.lable = lable;
}
public static SplitFileTypeTypeEnum getEnumByValue(String value){
SplitFileTypeTypeEnum[] values = values();
for (SplitFileTypeTypeEnum splitFileTypeTypeEnum : values) {
if(splitFileTypeTypeEnum.value.equals(value)){
return splitFileTypeTypeEnum;
}
}
return null;
}
public String getValue() {
return value;
}
public String getLable() {
return lable;
}
}
@@ -60,17 +60,11 @@ public class FileSpiltService {
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);
// }
//中国
/**
* 中国标准数据拆分
* @param sarFileSplitInfoEO
* @return
*/
public int fileCHN(SarFileSplitInfoEO sarFileSplitInfoEO) {
if (sarFileSplitInfoEO.getStopNumber()<=0){
sarFileSplitInfoEO.setStopNumber(200);
@@ -338,11 +332,6 @@ public class FileSpiltService {
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);
@@ -356,268 +345,391 @@ public class FileSpiltService {
// 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<SarFileSplitItemsEO> messageList = new ArrayList<>();
// int messageNumber = 0;
// // 拆分文件目录表中最终插入数据
// List<SarFileSplitMenuEO> treeList = new ArrayList<>();
// // 拆分文件条款详情表中最终插入数据
// List<SarFileSplitItemsValEO> itemValList = new ArrayList<>();
// Long treeListDisplay = 1L;
//
// String generalCatalogueId = UUIDUtils.randomUUID20();
// SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(generalCatalogueId,"General catalogue","",sarFileSplitInfoEO.getId(),treeListDisplay++,"");
// treeList.add(documentTreeEO);
//
// List<String> 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<IBodyElement> elements = doc.getBodyElements();
// // 记录word自动生成的编号数据
// Map numberMap = new HashMap<String,Integer>();
// 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;i<nowStart.size();i++){
// if(paragraphString.startsWith(nowStart.get(i)) && !ptest.matcher(paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+1)).matches()){
// // 判断名称,如果大于10位,取十位,
// String itemName = paragraphString.substring(nowStart.get(i).length()).length()>10?paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+10):paragraphString.substring(nowStart.get(i).length());
// List<String> 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());
/**
* GSO 欧洲标准拆分
* @param sarFileSplitInfoEO
* @return
*/
public int fileEU(SarFileSplitInfoEO sarFileSplitInfoEO) {
// 拆分文件主表中插入数据
if (sarFileSplitInfoEO.getStopNumber()<=0){
sarFileSplitInfoEO.setStopNumber(200);
}
if (sarFileSplitInfoEO.getStartNumber()<=0){
sarFileSplitInfoEO.setStartNumber(1);
}
// dao.insertSelective(sarFileSplitInfoEO);
//
// // 拆分文件条款表中最终插入数据
// List<SarFileSplitItemsEO> messageList = new ArrayList<>();
// 拆分文件条款表中最终插入数据
List<SarFileSplitItemsEO> messageList = new ArrayList<>();
// int messageNumber = 0;
// // 拆分文件目录表中最终插入数据
// List<SarFileSplitMenuEO> treeList = new ArrayList<>();
// // 拆分文件条款详情表中最终插入数据
// List<SarFileSplitItemsValEO> itemValList = new ArrayList<>();
// Long treeListDisplay = 1L;
//
// String generalCatalogueId = UUIDUtils.randomUUID20();
// 拆分文件目录表中最终插入数据
List<SarFileSplitMenuEO> treeList = new ArrayList<>();
// 拆分文件条款详情表中最终插入数据
List<SarFileSplitItemsValEO> itemValList = new ArrayList<>();
Long treeListDisplay = 1L;
String generalCatalogueId = UUIDUtils.randomUUID20();
SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO();
// SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(generalCatalogueId,"General catalogue","",sarFileSplitInfoEO.getId(),treeListDisplay++,"");
// treeList.add(documentTreeEO);
//
// List<String> nowStart = new ArrayList<>();
documentTreeEO.setId(generalCatalogueId);
documentTreeEO.setName("General catalogue");
documentTreeEO.setInfoId(sarFileSplitInfoEO.getId());
documentTreeEO.setDisplaySeq(1L);
documentTreeEO.setDisplaySeq(treeListDisplay++);
documentTreeEO.setValidFlag(0);
treeList.add(documentTreeEO);
List<String> nowStart = new ArrayList<>();
// if (sarFileSplitInfoEO.getStartNumber()<4){
// nowStart.add("4");
nowStart.add("1");
// } 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<IBodyElement> elements = doc.getBodyElements();
// // 记录word自动生成的编号数据
// Map numberMap = new HashMap<String,Integer>();
// 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;i<nowStart.size();i++){
// if(paragraphString.startsWith(nowStart.get(i)) && !ptest.matcher(paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+1)).matches()){
// // 判断名称,如果大于10位,取十位,
// String itemName = paragraphString.substring(nowStart.get(i).length()).length()>10?paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+10):paragraphString.substring(nowStart.get(i).length());
// List<String> 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);
try {
//获取文件地址
String connectId = sarFileSplitInfoEO.getConnectId();
if(StringUtils.isEmpty(connectId)){
throw new JeroBootException("当前文件未找到,请重新选择!");
}
LambdaQueryWrapper<OSSFile> queryWrapper = new LambdaQueryWrapper();
queryWrapper.eq(OSSFile::getConnectId,connectId);
OSSFile ossFile = iossFileService.getOne(queryWrapper);
String readFilePath = ossFile.getUrl();
if(StringUtils.isEmpty(readFilePath)){
throw new JeroBootException("当前文件未找到,请重新选择!");
}
InputStream is = new FileInputStream(readFilePath); //需要将文件路更改为word文档所在路径。
XWPFDocument doc = new XWPFDocument(is);
Pattern ptest ;
Matcher matcher;
// 记录拆分后的每一段文字
List<IBodyElement> elements = doc.getBodyElements();
// 记录word自动生成的编号数据
Map numberMap = new HashMap<String,Integer>();
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;i<nowStart.size();i++){
System.out.println(nowStart.get(i));
if(paragraphString.startsWith(nowStart.get(i)) ){
if(paragraphString.length()>nowStart.get(i).length()
&& !ptest.matcher(paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+1)).matches()){
// 判断名称,如果大于10位,取十位,
String itemName = paragraphString.substring(nowStart.get(i).length()).length()>10?paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+10):paragraphString.substring(nowStart.get(i).length());
List<String> 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;
}else {
// 判断名称,如果大于10位,取十位,
String itemName = paragraphString.substring(nowStart.get(i).length()).length()>10?paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+10):paragraphString.substring(nowStart.get(i).length());
List<String> 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){
sarFileSplitMenuEOMapper.insertForeach(treeList);
iSarFileSplitItemsEOService.insertForeach(messageList);
iSarFileSplitItemsValEOService.insertForeach(itemValList);
} else {
return -1;
}
return treeList.size();
}
/**
* 美国标准
* @param sarFileSplitInfoEO
* @return
*/
public int fileUSA(SarFileSplitInfoEO sarFileSplitInfoEO) {
if (sarFileSplitInfoEO.getStopNumber()<=0){
sarFileSplitInfoEO.setStopNumber(200);
}
if (sarFileSplitInfoEO.getStartNumber()<=0){
sarFileSplitInfoEO.setStartNumber(1);
}
// 拆分文件条款表中最终插入数据
List<SarFileSplitItemsEO> messageList = new ArrayList<>();
int messageNumber = 0;
// 拆分文件目录表中最终插入数据
List<SarFileSplitMenuEO> treeList = new ArrayList<>();
// 拆分文件条款详情表中最终插入数据
List<SarFileSplitItemsValEO> itemValList = new ArrayList<>();
Long treeListDisplay = 1L;
String generalCatalogueId = UUIDUtils.randomUUID20();
SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO();
// SarFileSplitMenuEO documentTreeEO = new SarFileSplitMenuEO(generalCatalogueId,"General catalogue","",sarFileSplitInfoEO.getId(),treeListDisplay++,"");
documentTreeEO.setId(generalCatalogueId);
documentTreeEO.setName("General catalogue");
documentTreeEO.setInfoId(sarFileSplitInfoEO.getId());
documentTreeEO.setDisplaySeq(1L);
documentTreeEO.setDisplaySeq(treeListDisplay++);
documentTreeEO.setValidFlag(0);
treeList.add(documentTreeEO);
List<String> nowStart = new ArrayList<>();
nowStart.add("S1");
// if (sarFileSplitInfoEO.getStartNumber()<4){
// } else {
// return -1;
// nowStart.add(String.valueOf(sarFileSplitInfoEO.getStartNumber()));
// }
// return treeList.size();
//
// }
try {
//获取文件地址
String connectId = sarFileSplitInfoEO.getConnectId();
if(StringUtils.isEmpty(connectId)){
throw new JeroBootException("当前文件未找到,请重新选择!");
}
LambdaQueryWrapper<OSSFile> queryWrapper = new LambdaQueryWrapper();
queryWrapper.eq(OSSFile::getConnectId,connectId);
OSSFile ossFile = iossFileService.getOne(queryWrapper);
String readFilePath = ossFile.getUrl();
if(StringUtils.isEmpty(readFilePath)){
throw new JeroBootException("当前文件未找到,请重新选择!");
}
InputStream is = new FileInputStream(readFilePath); //需要将文件路更改为word文档所在路径。
XWPFDocument doc = new XWPFDocument(is);
Pattern ptest = Pattern.compile("S^[\\d.]*$");
Matcher matcher;
// 记录拆分后的每一段文字
List<IBodyElement> elements = doc.getBodyElements();
// 记录word自动生成的编号数据
Map numberMap = new HashMap<String,Integer>();
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;i<nowStart.size();i++){
if(paragraphString.startsWith(nowStart.get(i))){
if(paragraphString.length()>nowStart.get(i).length()
&& !ptest.matcher(paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+1)).matches()){
// 判断名称,如果大于10位,取十位,
String itemName = paragraphString.substring(nowStart.get(i).length()).length()>10?paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+10):paragraphString.substring(nowStart.get(i).length());
List<String> clauseContent = new ArrayList<>();
clauseContent.add(paragraphString);
SarFileSplitItemsEO message = getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(),nowStart.get(i),itemName,clauseContent);
String[] numberStr = nowStart.get(i).split("\\.");
String numberStrTemp = numberStr[0].replace("S", "");
if (Integer.valueOf(numberStrTemp) > sarFileSplitInfoEO.getStopNumber()){
menuCanAdd = false;
} else {
// 增加一条数据,需要在数结构中加一条数据
SarFileSplitMenuEO sarFileSplitMenuEO = 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 = getNewNowStartUS(nowStart.get(i));
menuCanAdd = true;
}
hasGoIf = true;
break;
}else {
// 判断名称,如果大于10位,取十位,
String itemName = paragraphString.substring(nowStart.get(i).length()).length()>10?paragraphString.substring(nowStart.get(i).length(),nowStart.get(i).length()+10):paragraphString.substring(nowStart.get(i).length());
List<String> clauseContent = new ArrayList<>();
clauseContent.add(paragraphString);
SarFileSplitItemsEO message = getSarFileSplitItemsEO(sarFileSplitInfoEO.getId(),nowStart.get(i),itemName,clauseContent);
String[] numberStr = nowStart.get(i).split("\\.");
String numberStrTemp = numberStr[0].replace("S", "");
if (Integer.valueOf(numberStrTemp) > sarFileSplitInfoEO.getStopNumber()){
menuCanAdd = false;
} else {
// 增加一条数据,需要在数结构中加一条数据
SarFileSplitMenuEO sarFileSplitMenuEO = 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 = getNewNowStartUS(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){
sarFileSplitMenuEOMapper.insertForeach(treeList);
iSarFileSplitItemsEOService.insertForeach(messageList);
iSarFileSplitItemsValEOService.insertForeach(itemValList);
} else {
return -1;
}
return treeList.size();
}
/**
* 通过传递过来的编号,得出下次可能出现的编号
* @param nowStart
* @return
*/
private static List<String> getNewNowStartUS(String nowStart){
// List<String> nowStartList = new ArrayList<>();
List<String> nowResultStartList = new ArrayList<>();
String[] numberStr = nowStart.replace("S","").split("\\.");
String startnumber = "";
for(int i=0;i<numberStr.length;i++) {
if (i==0) {
startnumber = "";
} else if (i==1) {
startnumber = numberStr[0];
} else {
startnumber = startnumber +"." +numberStr[i-1];
}
Integer lastnumber = Integer.valueOf(numberStr[i])+1;
nowResultStartList.add("S"+(startnumber.equals("")?"":(startnumber+".")) + lastnumber);
}
nowResultStartList.add(nowStart+".1");
return nowResultStartList;
}
/**
* 通过传递过来的编号,得出下次可能出现的编号
* @param nowStart
* @return
*/
private static List<String> getNewNowStart(String nowStart){
List<String> nowStartList = new ArrayList<>();
// List<String> nowStartList = new ArrayList<>();
List<String> nowResultStartList = new ArrayList<>();
String[] numberStr = nowStart.split("\\.");
String startnumber = "";
@@ -11,6 +11,7 @@ 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.enums.SplitFileTypeTypeEnum;
import com.jero.modules.split.mapper.SarFileSplitInfoMapper;
import com.jero.modules.split.mapper.SarFileSplitMenuEOMapper;
import com.jero.modules.split.service.ISarFileSplitInfoService;
@@ -67,7 +68,31 @@ public class SarFileSplitInfoServiceImpl extends ServiceImpl<SarFileSplitInfoMap
sarFileSplitInfoEO.setUpdateTime(now);
save(sarFileSplitInfoEO);
fileSpiltService.fileCHN(sarFileSplitInfoEO);
SplitFileTypeTypeEnum enumByValue = SplitFileTypeTypeEnum.getEnumByValue(sarFileSplitInfoEO.getFileGroup());
switch (enumByValue){
case CN:
fileSpiltService.fileCHN(sarFileSplitInfoEO);
break;
case EU:
break;
case US:
fileSpiltService.fileUSA(sarFileSplitInfoEO);
break;
case GSO:
fileSpiltService.fileEU(sarFileSplitInfoEO);
break;
case JAPAN:
break;
case KOREAN:
break;
default:
}
// fileSpiltService.fileCHN(sarFileSplitInfoEO);
// fileSpiltService.fileEU(sarFileSplitInfoEO);
// fileSpiltService.fileUSA(sarFileSplitInfoEO);
// 添加条款总目录 TODO 这块之后可能不会用到
// SarFileSplitMenuEO sarFileSplitMenuEO = new SarFileSplitMenuEO();
+1
View File
@@ -390,6 +390,7 @@ module.exports = {
check: 'check',
enName: 'English name',
selectLeastOne: 'Please select at least one piece of data',
selectFileType:'Please select a file type',
sureVerified: 'Are you sure this file is not verified?',
sureSynchronize: 'The file has not been verified. Are you sure you want to synchronize to the document library?',
UploadFile: 'Upload file',
+1
View File
@@ -394,6 +394,7 @@ module.exports = {
check:'校核',
enName:'英文名称',
selectLeastOne:'请选择至少一条数据',
selectFileType:'请选择文件类型',
sureVerified:'确定对该文件未进行校验?',
sureSynchronize:'该文件未进行校验确定要同步至文档库?',
UploadFile:'上传文件',
@@ -24,6 +24,29 @@
@onSelectChange="onSelectChange"
/>
</div>
<div style="width: 100px">
文件类型:
<a-select v-model="fileGroup" style="width: 100px">
<a-select-option value="GSO" key="GSO">
GSO
</a-select-option>
<a-select-option value="Korean" key="Korean">
韩国
</a-select-option>
<a-select-option value="US" key="US">
美国
</a-select-option>
<a-select-option value="EU" key="EU">
欧洲
</a-select-option>
<a-select-option value="Japan" key="Japan">
日本
</a-select-option>
<a-select-option value="CN" key="CN">
中国
</a-select-option>
</a-select>
</div>
<div class="split-footer">
<div class="split-footer-wrap">
<a-button class="split-btn split-chai" type="primary" @click="submitSplit">{{$t('split')}}</a-button>
@@ -49,6 +72,7 @@
data(){
return{
visible:false,
fileGroup:'',
tableSource:[], //列表数据
selectedRowKeys:[],
queryParams:{
@@ -161,7 +185,9 @@
},
//拆分
submitSplit(){
if(this.rows&&this.rows.length>1){
if(this.fileGroup.length == 0){
this.$message.warning(this.$t('selectFileType'))
}else if(this.rows&&this.rows.length>1){
this.$message.warning(this.$t('OnlyOneSelected'))
}else if(this.rows==undefined||this.rows.length===0){
this.$message.warning(this.$t('selectLeastOne'))
@@ -176,7 +202,8 @@
title: file.title,
fileName:file.file_name,
serialNumber: file.serial_number,
connectId: file.connect_id
connectId: file.connect_id,
fileGroup: this.fileGroup,
}
if (file.text_info == '发布稿(必读)') {
params.fileType = '1'