add 文档拆分对接左侧目录和条文列表
This commit is contained in:
+133
-5
@@ -5,13 +5,17 @@ import com.alibaba.fastjson.JSONObject;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.jero.common.util.MinioUtil;
|
||||
import com.jero.common.util.UUIDUtils;
|
||||
import com.jero.modules.docking.asms.entity.LawsAsmsDomestic;
|
||||
import com.jero.modules.docking.asms.entity.LawsAsmsOpenApi;
|
||||
import com.jero.modules.docking.asms.mapper.LawsAsmsOpenApiMapper;
|
||||
import com.jero.modules.docking.asms.service.ILawsAsmsDomesticService;
|
||||
import com.jero.modules.docking.asms.service.ILawsAsmsOpenApiService;
|
||||
import com.jero.modules.docking.asms.util.AlphanumericComparator;
|
||||
import com.jero.modules.docking.asms.util.AsmsPostUtil;
|
||||
import com.jero.modules.laws.documenttool.entity.LawsDocumentSplit;
|
||||
import com.jero.modules.laws.documenttool.entity.SarFileSplitItemsVal;
|
||||
import com.jero.modules.laws.documenttool.entity.SarFileSplitMenu;
|
||||
import com.jero.modules.laws.documenttool.mapper.LawsDocumentSplitMapper;
|
||||
import com.jero.modules.laws.standard.entity.LawsDomesticStandard;
|
||||
import com.jero.modules.laws.standard.service.ILawsDomesticStandardService;
|
||||
@@ -21,23 +25,28 @@ import com.jero.modules.laws.standardization.service.ILawsStandardizationService
|
||||
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.SarFileSplitItemsValEO;
|
||||
import com.jero.modules.split.entity.SarFileSplitMenuEO;
|
||||
import com.jero.modules.split.mapper.SarFileSplitMenuEOMapper;
|
||||
import com.jero.modules.split.service.ISarFileSplitInfoService;
|
||||
import com.jero.modules.split.service.ISarFileSplitItemsValEOService;
|
||||
import com.jero.modules.split.service.ISarFileSplitMenuEOService;
|
||||
import com.jero.modules.system.entity.SysDictItem;
|
||||
import com.jero.modules.system.service.ISysDictItemService;
|
||||
import com.spire.ms.System.Collections.ArrayList;
|
||||
import io.minio.errors.*;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.jsoup.Jsoup;
|
||||
import org.jsoup.nodes.Document;
|
||||
import org.jsoup.nodes.Element;
|
||||
import org.jsoup.select.Elements;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import com.jero.common.exception.JeroBootException;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.security.InvalidKeyException;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
@@ -81,6 +90,12 @@ public class LawsAsmsOpenApiServiceImpl extends ServiceImpl<LawsAsmsOpenApiMappe
|
||||
@Autowired
|
||||
private LawsDocumentSplitMapper lawsDocumentSplitMapper;
|
||||
@Autowired
|
||||
private ISarFileSplitMenuEOService sarFileSplitMenuEOService;
|
||||
@Autowired
|
||||
private SarFileSplitMenuEOMapper sarFileSplitMenuEOMapper;
|
||||
@Autowired
|
||||
private ISarFileSplitItemsValEOService sarFileSplitItemsValEOService;
|
||||
@Autowired
|
||||
private ILawsReplacedStandardService lawsReplacedStandardService;
|
||||
@Autowired
|
||||
private IOSSFileService ossFileService;
|
||||
@@ -390,7 +405,7 @@ public class LawsAsmsOpenApiServiceImpl extends ServiceImpl<LawsAsmsOpenApiMappe
|
||||
}
|
||||
// 状态设置为已同步
|
||||
lawsAsmsOpenApi.setStatus("1");
|
||||
} else if ("4".equals(lawsAsmsOpenApi.getApiType()) && "B".equals(lawsAsmsOpenApi.getApiUrl())) {
|
||||
} else if ("4".equals(lawsAsmsOpenApi.getApiType()) && "B".equals(lawsAsmsOpenApi.getApiUrl())) {
|
||||
// 国内法规同步到业务表
|
||||
LambdaQueryWrapper<LawsAsmsDomestic> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.orderByAsc(LawsAsmsDomestic::getId);
|
||||
@@ -588,6 +603,119 @@ public class LawsAsmsOpenApiServiceImpl extends ServiceImpl<LawsAsmsOpenApiMappe
|
||||
// 状态设置为已同步
|
||||
lawsAsmsOpenApi.setStatus("1");
|
||||
log.info("{}同步成功{}条数据", lawsAsmsOpenApi.getApiName(), sarFileSplitInfoEOList.size());
|
||||
} else if ("4".equals(lawsAsmsOpenApi.getApiType()) && "C".equals(lawsAsmsOpenApi.getApiUrl())) {
|
||||
// 给拆分的条款加上左侧目录
|
||||
LambdaQueryWrapper<SarFileSplitInfoEO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(SarFileSplitInfoEO::getIsAsmsImport, "1");
|
||||
List<SarFileSplitInfoEO> sarFileSplitInfoEOList = sarFileSplitInfoService.list(queryWrapper);
|
||||
sarFileSplitInfoEOList.forEach(sarFileSplitInfoEO -> {
|
||||
String infoId = sarFileSplitInfoEO.getId();
|
||||
LambdaQueryWrapper<LawsDocumentSplit> queryWrapper1 = new LambdaQueryWrapper<>();
|
||||
queryWrapper1.eq(LawsDocumentSplit::getInfoId, infoId);
|
||||
List<LawsDocumentSplit> lawsDocumentSplitList = lawsDocumentSplitMapper.selectList(queryWrapper1);
|
||||
List<String> itemNumList = lawsDocumentSplitList.stream().map(LawsDocumentSplit::getItemNum).collect(Collectors.toList());
|
||||
// 对目录排序
|
||||
Collections.sort(itemNumList, new AlphanumericComparator());
|
||||
Map<String, Long> sortMap = new HashMap<>();
|
||||
for (int i = 0; i < itemNumList.size(); i++) {
|
||||
sortMap.put(itemNumList.get(i), i+2L);
|
||||
}
|
||||
List<SarFileSplitMenuEO> sarFileSplitMenuEOList = new java.util.ArrayList<>();
|
||||
// 根目录
|
||||
SarFileSplitMenuEO rootEO = new SarFileSplitMenuEO();
|
||||
String rootId = UUIDUtils.randomUUID20();
|
||||
rootEO.setId(rootId);
|
||||
rootEO.setInfoId(infoId);
|
||||
rootEO.setName("总目录");
|
||||
rootEO.setDisplaySeq(1L);
|
||||
rootEO.setValidFlag(0);
|
||||
sarFileSplitMenuEOMapper.insertSelective(rootEO);
|
||||
|
||||
Map<String, String> idMap = new HashMap<>();
|
||||
lawsDocumentSplitList.forEach(lawsDocumentSplit -> {
|
||||
SarFileSplitMenuEO sarFileSplitMenuEO = new SarFileSplitMenuEO();
|
||||
String itemNum = lawsDocumentSplit.getItemNum();
|
||||
String id = UUIDUtils.randomUUID20();
|
||||
sarFileSplitMenuEO.setId(id);
|
||||
sarFileSplitMenuEO.setInfoId(infoId);
|
||||
sarFileSplitMenuEO.setName(itemNum);
|
||||
sarFileSplitMenuEO.setDisplaySeq(sortMap.get(itemNum));
|
||||
sarFileSplitMenuEO.setValidFlag(0);
|
||||
String itemTitle = lawsDocumentSplit.getItemTitle();
|
||||
sarFileSplitMenuEO.setItemName(itemTitle.substring(0, Math.min(10, itemTitle.length())));
|
||||
sarFileSplitMenuEOList.add(sarFileSplitMenuEO);
|
||||
idMap.put(itemNum, id);
|
||||
|
||||
lawsDocumentSplit.setMenuId(id);
|
||||
lawsDocumentSplitMapper.updateById(lawsDocumentSplit);
|
||||
});
|
||||
|
||||
// 设置父id
|
||||
sarFileSplitMenuEOList.forEach(sarFileSplitMenuEO -> {
|
||||
String itemNum = sarFileSplitMenuEO.getName();
|
||||
String[] split = itemNum.split("\\.");
|
||||
if (split.length == 1) {
|
||||
sarFileSplitMenuEO.setPId(rootId);
|
||||
} else {
|
||||
// 去除数组中的最后一个元素
|
||||
split = Arrays.copyOf(split, split.length - 1);
|
||||
String pid = idMap.get(StringUtils.join(split, "."));
|
||||
if (StringUtils.isBlank(pid)) {
|
||||
pid = rootId;
|
||||
}
|
||||
sarFileSplitMenuEO.setPId(pid);
|
||||
}
|
||||
});
|
||||
sarFileSplitMenuEOMapper.insertForeach(sarFileSplitMenuEOList);
|
||||
});
|
||||
// 状态设置为已同步
|
||||
lawsAsmsOpenApi.setStatus("1");
|
||||
log.info("{}同步成功{}条数据", lawsAsmsOpenApi.getApiName(), sarFileSplitInfoEOList.size());
|
||||
} else if ("4".equals(lawsAsmsOpenApi.getApiType()) && "D".equals(lawsAsmsOpenApi.getApiUrl())) {
|
||||
// 拆分的条款的条文列表
|
||||
LambdaQueryWrapper<SarFileSplitInfoEO> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(SarFileSplitInfoEO::getIsAsmsImport, "1");
|
||||
List<SarFileSplitInfoEO> sarFileSplitInfoEOList = sarFileSplitInfoService.list(queryWrapper);
|
||||
sarFileSplitInfoEOList.forEach(sarFileSplitInfoEO -> {
|
||||
String infoId = sarFileSplitInfoEO.getId();
|
||||
LambdaQueryWrapper<LawsDocumentSplit> queryWrapper1 = new LambdaQueryWrapper<>();
|
||||
queryWrapper1.eq(LawsDocumentSplit::getInfoId, infoId);
|
||||
List<LawsDocumentSplit> lawsDocumentSplitList = lawsDocumentSplitMapper.selectList(queryWrapper1);
|
||||
lawsDocumentSplitList.forEach(lawsDocumentSplit -> {
|
||||
String itemContent = lawsDocumentSplit.getItemContent();
|
||||
// 使用 jsoup 解析 HTML
|
||||
Document doc = Jsoup.parse(itemContent);
|
||||
|
||||
// 选择所有的 <p> 元素
|
||||
Elements paragraphs = doc.select("p");
|
||||
|
||||
// 存储提取的文本内容
|
||||
List<String> textContents = new java.util.ArrayList<>();
|
||||
|
||||
for (Element paragraph : paragraphs) {
|
||||
// 获取每个 <p> 元素的文本内容并添加到集合中
|
||||
String textContent = paragraph.text();
|
||||
textContents.add(textContent);
|
||||
}
|
||||
|
||||
//List<SarFileSplitItemsValEO> sarFileSplitItemsValEOList = new ArrayList<>();
|
||||
for (int i = 0; i < textContents.size(); i++) {
|
||||
SarFileSplitItemsValEO sarFileSplitItemsValEO = new SarFileSplitItemsValEO();
|
||||
sarFileSplitItemsValEO.setId(UUIDUtils.randomUUID20());
|
||||
sarFileSplitItemsValEO.setType("TEXT");
|
||||
sarFileSplitItemsValEO.setItemId(lawsDocumentSplit.getId());
|
||||
sarFileSplitItemsValEO.setItemContent(textContents.get(i));
|
||||
sarFileSplitItemsValEO.setDisplaySeq(i+1);
|
||||
sarFileSplitItemsValEO.setValidFlag(0);
|
||||
//sarFileSplitItemsValEOList.add(sarFileSplitItemsValEO);
|
||||
sarFileSplitItemsValEOService.insertSelective(sarFileSplitItemsValEO);
|
||||
}
|
||||
//sarFileSplitItemsValEOService.insertForeach(sarFileSplitItemsValEOList);
|
||||
});
|
||||
});
|
||||
// 状态设置为已同步
|
||||
lawsAsmsOpenApi.setStatus("1");
|
||||
log.info("{}同步成功{}条数据", lawsAsmsOpenApi.getApiName(), sarFileSplitInfoEOList.size());
|
||||
}
|
||||
});
|
||||
// 同步接口的状态
|
||||
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
package com.jero.modules.docking.asms.util;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
* @Author: liao
|
||||
* @Date: 2023/10/25 9:33
|
||||
* @Description: 目录顺序排序
|
||||
*/
|
||||
public class AlphanumericComparator implements Comparator<String> {
|
||||
private Pattern pattern = Pattern.compile("(\\d+|\\D+)");
|
||||
|
||||
@Override
|
||||
public int compare(String s1, String s2) {
|
||||
Matcher matcher1 = pattern.matcher(s1);
|
||||
Matcher matcher2 = pattern.matcher(s2);
|
||||
|
||||
while (matcher1.find() && matcher2.find()) {
|
||||
String group1 = matcher1.group();
|
||||
String group2 = matcher2.group();
|
||||
|
||||
int result;
|
||||
if (isInteger(group1) && isInteger(group2)) {
|
||||
result = Integer.compare(Integer.parseInt(group1), Integer.parseInt(group2));
|
||||
} else {
|
||||
result = group1.compareTo(group2);
|
||||
}
|
||||
|
||||
if (result != 0) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
private boolean isInteger(String s) {
|
||||
try {
|
||||
Integer.parseInt(s);
|
||||
return true;
|
||||
} catch (NumberFormatException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user