add 文档拆分对接左侧目录和条文列表

This commit is contained in:
liao
2023-10-25 14:28:47 +08:00
parent 7324abcd00
commit dd693fb069
2 changed files with 180 additions and 5 deletions
@@ -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());
}
});
// 同步接口的状态
@@ -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;
}
}
}