diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/controller/LawsAsmsDomesticController.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/controller/LawsAsmsDomesticController.java index e8f2c796..b36f106c 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/controller/LawsAsmsDomesticController.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/controller/LawsAsmsDomesticController.java @@ -3,12 +3,14 @@ package com.jero.modules.docking.asms.controller; import java.util.Arrays; import java.util.List; import java.util.Map; +import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.jero.common.api.vo.Result; import com.jero.modules.docking.asms.entity.LawsAsmsDomestic; import com.jero.modules.docking.asms.service.ILawsAsmsDomesticService; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.jero.modules.docking.asms.service.impl.SynchronizationAsmsService; import lombok.extern.slf4j.Slf4j; import com.jero.common.system.base.controller.JeroController; import org.springframework.beans.factory.annotation.Autowired; @@ -35,7 +37,8 @@ import org.apache.poi.ss.formula.functions.T; public class LawsAsmsDomesticController extends JeroController { @Autowired private ILawsAsmsDomesticService lawsAsmsDomesticService; - + @Resource + private SynchronizationAsmsService synchronizationAsmsService; /** * 分页列表查询 * @@ -162,4 +165,15 @@ public class LawsAsmsDomesticController extends JeroController syncSplitByStandardNumber(@RequestParam(name="standardNumber") String standardNumber) { + synchronizationAsmsService.syncSplitByStandardNumber(standardNumber); + return Result.OK("!"); + } } diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/SynchronizationAsmsService.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/SynchronizationAsmsService.java index 85c31611..01c85bdb 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/SynchronizationAsmsService.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/SynchronizationAsmsService.java @@ -436,17 +436,20 @@ public class SynchronizationAsmsService { }); long time2 = System.currentTimeMillis(); log.info("=====================同步DocumentSplit条文数据:{}条,耗时:{}毫秒=====================", n[0], time2 - time1); - + String regex = "[^a-zA-Z0-9.]"; insertSplitList.forEach(sarFileSplitInfoEO -> { String infoId = sarFileSplitInfoEO.getId(); List lawsDocumentSplitList = infoMap.get(infoId); - List itemNumList = lawsDocumentSplitList.stream().map(LawsDocumentSplit::getItemNum).collect(Collectors.toList()); - + List itemNumList = new ArrayList<>(); + for (LawsDocumentSplit lawsDocumentSplit : lawsDocumentSplitList) { + String itemNum = lawsDocumentSplit.getItemNum(); + itemNumList.add(itemNum.replaceAll(regex, "")); + } // 对目录排序 Collections.sort(itemNumList, new AlphanumericComparator()); Map sortMap = new HashMap<>(); for (int i = 0; i < itemNumList.size(); i++) { - sortMap.put(itemNumList.get(i), i+2L); + sortMap.put(itemNumList.get(i), i + 2L); } List sarFileSplitMenuEOList = new java.util.ArrayList<>(); // 根目录 @@ -467,12 +470,12 @@ public class SynchronizationAsmsService { sarFileSplitMenuEO.setId(id); sarFileSplitMenuEO.setInfoId(infoId); sarFileSplitMenuEO.setName(itemNum); - sarFileSplitMenuEO.setDisplaySeq(sortMap.get(itemNum)); + sarFileSplitMenuEO.setDisplaySeq(sortMap.get(itemNum.replaceAll(regex, ""))); sarFileSplitMenuEO.setValidFlag(0); String itemTitle = lawsDocumentSplit.getItemTitle(); sarFileSplitMenuEO.setItemName(itemTitle.substring(0, Math.min(10, itemTitle.length()))); sarFileSplitMenuEOList.add(sarFileSplitMenuEO); - idMap.put(itemNum, id); + idMap.put(itemNum.replaceAll(regex, ""), id); lawsDocumentSplit.setMenuId(id); lawsDocumentSplitMapper.updateById(lawsDocumentSplit); @@ -480,7 +483,7 @@ public class SynchronizationAsmsService { // 设置父id sarFileSplitMenuEOList.forEach(sarFileSplitMenuEO -> { - String itemNum = sarFileSplitMenuEO.getName(); + String itemNum = sarFileSplitMenuEO.getName().replaceAll(regex, ""); String[] split = itemNum.split("\\."); if (split.length == 1) { sarFileSplitMenuEO.setPId(rootId); @@ -545,6 +548,264 @@ public class SynchronizationAsmsService { log.info("=====================定时任务同步结束====================="); } + public void syncSplitByStandardNumber(String standardNumber) { + log.info("=====================定时同步文档拆分====================="); + long start = System.currentTimeMillis(); + + // 文档拆分 + String url = "xiaobodata/openApi/article/search"; + Map paramMap = new HashMap<>(); + paramMap.put("pageNo", "1"); + paramMap.put("pageSize", "2"); + Map totalMap = asmsPostUtil.sendGetReq2(url, paramMap); + Integer total = (Integer) totalMap.get("total"); + paramMap.put("pageSize", total.toString()); + + List> mapList = asmsPostUtil.sendGetReq(url, paramMap); + if (Objects.isNull(mapList)) { + log.info("=====================没有获取到ASMS系统数据,同步结束====================="); + return; + } + + List insertSplitList = new ArrayList<>(); + mapList.forEach(eMap -> { + String code = eMap.get("code").trim(); + String name = eMap.get("name"); + if (!code.contains(standardNumber)) { + return; + } + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(LawsDomesticStandard::getStandardNumber, code); + LawsDomesticStandard lawsDomesticStandard = lawsDomesticStandardService.getOne(queryWrapper); + if (Objects.isNull(lawsDomesticStandard)) { + return; + } + + LambdaQueryWrapper queryWrapper1 = new LambdaQueryWrapper<>(); + queryWrapper1.eq(OSSFile::getStandardId, lawsDomesticStandard.getId()); + queryWrapper1.eq(OSSFile::getStandardFileType, "publish_of_original"); + queryWrapper1.like(OSSFile::getFileName, ".docx"); + OSSFile ossFile = ossFileService.getOne(queryWrapper1); + + SarFileSplitInfoEO sarFileSplitInfoEO = new SarFileSplitInfoEO(); + sarFileSplitInfoEO.setStandardId(lawsDomesticStandard.getId()); + sarFileSplitInfoEO.setSerialNumber(lawsDomesticStandard.getStandardNumber()); + sarFileSplitInfoEO.setTitle(lawsDomesticStandard.getStandardName()); + sarFileSplitInfoEO.setFileType("publish_of_original"); + sarFileSplitInfoEO.setFileId(ossFile.getId()); + sarFileSplitInfoEO.setFileName(ossFile.getFileName()); + sarFileSplitInfoEO.setSplitStatus("1"); + sarFileSplitInfoEO.setCreateTime(getSimpleDate2(eMap.get("createTime"))); + sarFileSplitInfoEO.setUpdateTime(getSimpleDate2(eMap.get("updateTime"))); + sarFileSplitInfoEO.setIsAsmsImport("1"); + sarFileSplitInfoEO.setAuthor("云平台"); + sarFileSplitInfoEO.setSplitResult("成功"); + + sarFileSplitInfoEO.setId(UUIDUtils.randomUUID20()); + + insertSplitList.add(sarFileSplitInfoEO); + }); + if (CollectionUtils.isEmpty(insertSplitList)) { + log.info("=====================昨天新增拆分0条,同步结束====================="); + return; + } + + sarFileSplitInfoService.saveBatch(insertSplitList, insertSplitList.size()); + long time1 = System.currentTimeMillis(); + log.info("=====================同步标准拆分数据:{}条,耗时:{}毫秒=====================", insertSplitList.size(), time1 - start); + + // 单条拆分的详情 + String splitUrl = "xiaobodata/openApi/article/details"; + List sysDictItemList = sysDictItemService.list(); + Map paramMap1 = new HashMap<>(); + Map paramMap2 = new HashMap<>(); + Map paramMap3 = new HashMap<>(); + Map> infoMap = new HashMap<>(); + int[] n = {0}; + + for (SarFileSplitInfoEO sarFileSplitInfoEO : insertSplitList) { + paramMap.put("standardCode", sarFileSplitInfoEO.getSerialNumber()); + paramMap1.put("standardCode", sarFileSplitInfoEO.getSerialNumber()); + List> mapListAll = asmsPostUtil.sendGetReq(splitUrl, paramMap1); + List insertDocumentList = new ArrayList<>(); + for (Map eMap : mapListAll) { + // 单个法规的条文解读详情 + paramMap2.put("standardCode", sarFileSplitInfoEO.getSerialNumber()); + + paramMap2.put("termsCode", eMap.get("termsNum")); + Map objectMap = asmsPostUtil.sendGetReq2("xiaobodata/openApi/article/interpretation/details", paramMap2); + + // 单个法规的条文标签详情 + paramMap3.put("standardCode", sarFileSplitInfoEO.getSerialNumber()); + paramMap3.put("termsCode", eMap.get("termsNum")); + Map objectMap2 = asmsPostUtil.sendGetReq2("xiaobodata/openApi/article/label/details", paramMap3); + + LawsDocumentSplit lawsDocumentSplit = new LawsDocumentSplit(); + lawsDocumentSplit.setInfoId(sarFileSplitInfoEO.getId()); + lawsDocumentSplit.setItemNum(eMap.get("termsNum")); + lawsDocumentSplit.setItemTitle(eMap.get("termsName")); + lawsDocumentSplit.setItemContent(eMap.get("articleContent")); + lawsDocumentSplit.setCreateTime(getSimpleDate2(eMap.get("createTime"))); + lawsDocumentSplit.setUpdateTime(getSimpleDate2(eMap.get("updateTime"))); + + lawsDocumentSplit.setInterpretationArticles((String) objectMap.get("termsInterpretation")); + + lawsDocumentSplit.setFunctionClassification((String) objectMap2.get("functionClassification")); + lawsDocumentSplit.setFunctionProfessional((String) objectMap2.get("functionProfession")); + lawsDocumentSplit.setFunctionGroupCode((String) objectMap2.get("groupingNum")); + lawsDocumentSplit.setFunctionGroupName((String) objectMap2.get("groupingNum")); + lawsDocumentSplit.setCerImplementDate((String) objectMap2.get("implementDateCertified")); + lawsDocumentSplit.setNewCerImplementDate((String) objectMap2.get("implementDateNewCer")); + lawsDocumentSplit.setNewRegisterImplementDate((String) objectMap2.get("implementDateNewRegister")); + lawsDocumentSplit.setLawsRequireType((String) objectMap2.get("lawsRequireType")); + lawsDocumentSplit.setApplications((String) objectMap2.get("modelsType")); + lawsDocumentSplit.setDynamicType((String) objectMap2.get("powerType")); + + lawsDocumentSplit.setId(UUIDUtils.randomUUID20()); + + if (StringUtils.isNotBlank(lawsDocumentSplit.getLawsRequireType())) { + lawsDocumentSplit.setLawsRequireType(getItemValues(lawsDocumentSplit.getLawsRequireType().replace(",", ";"), + "1702212236079886338", sysDictItemList)); // 法规要求类型 + } + if (StringUtils.isNotBlank(lawsDocumentSplit.getFunctionClassification())) { + lawsDocumentSplit.setFunctionClassification(getItemValues(lawsDocumentSplit.getFunctionClassification().replace(",", ";"), + "1702212237296234497", sysDictItemList)); // 功能分类 + } + if (StringUtils.isNotBlank(lawsDocumentSplit.getFunctionProfessional())) { + lawsDocumentSplit.setFunctionProfessional(getItemValues(lawsDocumentSplit.getFunctionProfessional().replace(",", ";"), + "1702202280677044226", sysDictItemList)); // 功能专业 + } + if (StringUtils.isNotBlank(lawsDocumentSplit.getApplications())) { + lawsDocumentSplit.setApplications(getItemValues(lawsDocumentSplit.getApplications().replace(",", ";"), + "1702518672924110850", sysDictItemList)); // 适用车型 + } + if (StringUtils.isNotBlank(lawsDocumentSplit.getDynamicType())) { + lawsDocumentSplit.setDynamicType(getItemValues(lawsDocumentSplit.getDynamicType().replace(",", ";"), + "1702518671166697474", sysDictItemList)); // 动力类型 + } + + insertDocumentList.add(lawsDocumentSplit); + lawsDocumentSplitMapper.insert(lawsDocumentSplit); + n[0]++; + } + ; + infoMap.put(sarFileSplitInfoEO.getId(), insertDocumentList); + } + ; + long time2 = System.currentTimeMillis(); + log.info("=====================同步DocumentSplit条文数据:{}条,耗时:{}毫秒=====================", n[0], time2 - time1); + String regex = "[^a-zA-Z0-9.]"; + insertSplitList.forEach(sarFileSplitInfoEO -> { + String infoId = sarFileSplitInfoEO.getId(); + List lawsDocumentSplitList = infoMap.get(infoId); + List itemNumList = new ArrayList<>(); + for (LawsDocumentSplit lawsDocumentSplit : lawsDocumentSplitList) { + String itemNum = lawsDocumentSplit.getItemNum(); + itemNumList.add(itemNum.replaceAll(regex, "")); + } + // 对目录排序 + 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.replaceAll(regex, ""))); + sarFileSplitMenuEO.setValidFlag(0); + String itemTitle = lawsDocumentSplit.getItemTitle(); + sarFileSplitMenuEO.setItemName(itemTitle.substring(0, Math.min(10, itemTitle.length()))); + sarFileSplitMenuEOList.add(sarFileSplitMenuEO); + idMap.put(itemNum.replaceAll(regex, ""), id); + + lawsDocumentSplit.setMenuId(id); + lawsDocumentSplitMapper.updateById(lawsDocumentSplit); + }); + + // 设置父id + sarFileSplitMenuEOList.forEach(sarFileSplitMenuEO -> { + String itemNum = sarFileSplitMenuEO.getName().replaceAll(regex, ""); + 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); + }); + long time3 = System.currentTimeMillis(); + log.info("=====================生成拆分详情左侧目录耗时:{}毫秒=====================", time3 - time2); + + insertSplitList.forEach(sarFileSplitInfoEO -> { + String infoId = sarFileSplitInfoEO.getId(); + List lawsDocumentSplitList = infoMap.get(infoId); + 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); + } + + 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); + sarFileSplitItemsValEOService.insertSelective(sarFileSplitItemsValEO); + } + }); + }); + + for (SarFileSplitInfoEO sarFileSplitInfoEO : insertSplitList) { + HashMap parameter = new HashMap<>(); + parameter.put("id", sarFileSplitInfoEO.getId()); + documentSplitService.publish(parameter); + } + long time4 = System.currentTimeMillis(); + log.info("=====================生成条文详情耗时:{}毫秒=====================", time4 - time3); + + long end = System.currentTimeMillis(); + log.info("=====================全部同步完成,耗时:{} 毫秒=====================", end - start); + log.info("=====================定时任务同步结束====================="); + } + @Transactional public void upload(String url, String fileName, String fileType, String id, String code) { InputStream inputStream = asmsPostUtil.getFileByteArray(url); @@ -643,5 +904,4 @@ public class SynchronizationAsmsService { return StringUtils.join(itemValues, ","); } - }