diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/LawsAsmsOpenApiServiceImpl.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/LawsAsmsOpenApiServiceImpl.java index df0462ef..ee95df5e 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/LawsAsmsOpenApiServiceImpl.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/LawsAsmsOpenApiServiceImpl.java @@ -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 queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.orderByAsc(LawsAsmsDomestic::getId); @@ -588,6 +603,119 @@ public class LawsAsmsOpenApiServiceImpl extends ServiceImpl queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SarFileSplitInfoEO::getIsAsmsImport, "1"); + List sarFileSplitInfoEOList = sarFileSplitInfoService.list(queryWrapper); + sarFileSplitInfoEOList.forEach(sarFileSplitInfoEO -> { + String infoId = sarFileSplitInfoEO.getId(); + LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); + queryWrapper1.eq(LawsDocumentSplit::getInfoId, infoId); + List lawsDocumentSplitList = lawsDocumentSplitMapper.selectList(queryWrapper1); + List itemNumList = lawsDocumentSplitList.stream().map(LawsDocumentSplit::getItemNum).collect(Collectors.toList()); + // 对目录排序 + Collections.sort(itemNumList, new AlphanumericComparator()); + Map sortMap = new HashMap<>(); + for (int i = 0; i < itemNumList.size(); i++) { + sortMap.put(itemNumList.get(i), i+2L); + } + List 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 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 queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SarFileSplitInfoEO::getIsAsmsImport, "1"); + List sarFileSplitInfoEOList = sarFileSplitInfoService.list(queryWrapper); + sarFileSplitInfoEOList.forEach(sarFileSplitInfoEO -> { + String infoId = sarFileSplitInfoEO.getId(); + LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); + queryWrapper1.eq(LawsDocumentSplit::getInfoId, infoId); + List lawsDocumentSplitList = lawsDocumentSplitMapper.selectList(queryWrapper1); + lawsDocumentSplitList.forEach(lawsDocumentSplit -> { + String itemContent = lawsDocumentSplit.getItemContent(); + // 使用 jsoup 解析 HTML + Document doc = Jsoup.parse(itemContent); + + // 选择所有的

元素 + Elements paragraphs = doc.select("p"); + + // 存储提取的文本内容 + List textContents = new java.util.ArrayList<>(); + + for (Element paragraph : paragraphs) { + // 获取每个

元素的文本内容并添加到集合中 + String textContent = paragraph.text(); + textContents.add(textContent); + } + + //List 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()); } }); // 同步接口的状态 diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/util/AlphanumericComparator.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/util/AlphanumericComparator.java new file mode 100644 index 00000000..3dfdb80b --- /dev/null +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/util/AlphanumericComparator.java @@ -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 { + 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; + } + } +}