fix(asms): 同步问题修复

This commit is contained in:
yjz
2024-03-04 17:51:30 +08:00
parent d4caaa9bd9
commit b54aeea921
6 changed files with 230 additions and 87 deletions
@@ -1,11 +1,12 @@
package com.jero.modules.docking.asms.service; package com.jero.modules.docking.asms.service;
import com.jero.modules.docking.asms.entity.LawsAsmsOpenApi;
import com.baomidou.mybatisplus.extension.service.IService;
import javax.servlet.http.HttpServletRequest;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.modules.docking.asms.entity.LawsAsmsOpenApi;
import com.jero.modules.laws.documenttool.entity.LawsDocumentSplit;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import javax.servlet.http.HttpServletRequest;
import java.util.List; import java.util.List;
/** /**
@@ -92,4 +93,6 @@ public interface ILawsAsmsOpenApiService extends IService<LawsAsmsOpenApi> {
* @Description: 批量删除原字典配置项 * @Description: 批量删除原字典配置项
**/ **/
void removeDictItemBatch(List<String> idList); void removeDictItemBatch(List<String> idList);
void disposeItemVal(LawsDocumentSplit lawsDocumentSplit, String articleContent);
} }
File diff suppressed because one or more lines are too long
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.jero.common.exception.JeroBootException; import com.jero.common.exception.JeroBootException;
import com.jero.common.util.MinioUtil; import com.jero.common.util.MinioUtil;
import com.jero.common.util.SnowflakeUtils;
import com.jero.common.util.UUIDUtils; import com.jero.common.util.UUIDUtils;
import com.jero.modules.docking.asms.entity.LawsAsmsDomestic; import com.jero.modules.docking.asms.entity.LawsAsmsDomestic;
import com.jero.modules.docking.asms.mapper.LawsAsmsOpenApiMapper; import com.jero.modules.docking.asms.mapper.LawsAsmsOpenApiMapper;
@@ -37,18 +38,14 @@ import com.jero.modules.system.service.ISysDictItemService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.jsoup.Jsoup; import org.jsoup.Jsoup;
import org.jsoup.nodes.Document; import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element; import org.jsoup.nodes.Element;
import org.jsoup.select.Elements; import org.jsoup.select.Elements;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.io.InputStream; import java.io.InputStream;
@@ -188,6 +185,9 @@ public class SynchronizationAsmsService {
String[] parts = lawsAsmsDomestic.getCode().split("[-\\s]"); // 使用空格或破折号作为分隔符 String[] parts = lawsAsmsDomestic.getCode().split("[-\\s]"); // 使用空格或破折号作为分隔符
if (parts.length < 3) { if (parts.length < 3) {
parts = lawsAsmsDomestic.getCode().split("[—\\s]"); // 使用空格或破折号作为分隔符 parts = lawsAsmsDomestic.getCode().split("[—\\s]"); // 使用空格或破折号作为分隔符
if (parts.length < 3) {
parts = lawsAsmsDomestic.getCode().split("[一\\s]"); // 使用一或破折号作为分隔符
}
} }
// 封装实例 // 封装实例
LawsDomesticStandard lawsDomesticStandard = new LawsDomesticStandard(); LawsDomesticStandard lawsDomesticStandard = new LawsDomesticStandard();
@@ -234,7 +234,7 @@ public class SynchronizationAsmsService {
// 代替标准号 // 代替标准号
lawsReplacedStandardService.addRelation(lawsAsmsDomestic.getReplaceCode(), lawsAsmsDomestic.getCode(), 1); lawsReplacedStandardService.addRelation(lawsAsmsDomestic.getReplaceCode(), lawsAsmsDomestic.getCode(), 1);
// 标准性质 // 标准性质
/*itemValues = getItemValues(lawsAsmsDomestic.getStandardNature(), /*itemValues = getItemValues(lawsAsmsDomestic.getStandardNature(),
"1695010513489833985", sysDictItemList);*/ "1695010513489833985", sysDictItemList);*/
lawsDomesticStandard.setStandardProperty("SN002"); lawsDomesticStandard.setStandardProperty("SN002");
// 标准状态 // 标准状态
@@ -275,18 +275,23 @@ public class SynchronizationAsmsService {
Map<String, Object> objectMap = asmsPostUtil.sendGetReq2(fileUrl, fileParamMap); Map<String, Object> objectMap = asmsPostUtil.sendGetReq2(fileUrl, fileParamMap);
if (!Objects.isNull(objectMap)) { if (!Objects.isNull(objectMap)) {
Map<String, String> standardTextPdf = (Map<String, String>) objectMap.get("standardTextPdf"); Map<String, String> standardTextPdf = (Map<String, String>) objectMap.get("standardTextPdf");
String fileName = standardTextPdf.get("fileName"); if (!Objects.isNull(standardTextPdf)){
String fileType = standardTextPdf.get("fileType"); String fileName = standardTextPdf.get("fileName");
String uri = standardTextPdf.get("url"); String fileType = standardTextPdf.get("fileType");
if (StringUtils.isNotBlank(uri)) { String urls = standardTextPdf.get("url");
upload(uri, fileName, fileType, id, code); if (StringUtils.isNotBlank(urls)) {
upload(urls, fileName, fileType, id, code);
}
} }
Map<String, String> standardTextWord = (Map<String, String>) objectMap.get("standardTextWord"); Map<String, String> standardTextWord = (Map<String, String>) objectMap.get("standardTextWord");
fileName = standardTextWord.get("fileName"); if (!Objects.isNull(standardTextWord)){
fileType = standardTextWord.get("fileType"); String fileName = standardTextWord.get("fileName");
uri = standardTextWord.get("url"); String fileType = standardTextWord.get("fileType");
if (StringUtils.isNotBlank(uri)) { String urls = standardTextWord.get("url");
upload(uri, fileName, fileType, id, code); if (StringUtils.isNotBlank(urls)) {
upload(urls, fileName, fileType, id, code);
}
} }
} }
}); });
@@ -396,6 +401,7 @@ public class SynchronizationAsmsService {
Map<String, Object> objectMap2 = asmsPostUtil.sendGetReq2("xiaobodata/openApi/article/label/details", paramMap3); Map<String, Object> objectMap2 = asmsPostUtil.sendGetReq2("xiaobodata/openApi/article/label/details", paramMap3);
LawsDocumentSplit lawsDocumentSplit = new LawsDocumentSplit(); LawsDocumentSplit lawsDocumentSplit = new LawsDocumentSplit();
lawsDocumentSplit.setId(String.valueOf(SnowflakeUtils.snowflake()));
lawsDocumentSplit.setInfoId(sarFileSplitInfoEO.getId()); lawsDocumentSplit.setInfoId(sarFileSplitInfoEO.getId());
lawsDocumentSplit.setItemNum(eMap.get("termsNum")); lawsDocumentSplit.setItemNum(eMap.get("termsNum"));
lawsDocumentSplit.setItemTitle(eMap.get("termsName")); lawsDocumentSplit.setItemTitle(eMap.get("termsName"));
@@ -408,25 +414,11 @@ public class SynchronizationAsmsService {
log.error(e.getMessage()); log.error(e.getMessage());
log.error("图片处理失败!"); log.error("图片处理失败!");
} }
// 处理表格 // 处理条文详情
if (articleContent.contains("<table style=")){ lawsAsmsOpenApiService.disposeItemVal(lawsDocumentSplit, articleContent);
articleContent = "<p>" + articleContent + "</p>";
}
// 重复性校验 // 重复性校验
LawsDocumentSplit lawsDocumentSplits = lawsDocumentSplitMapper.selectOne( // if (duplicateCheck(lawsDocumentSplit, articleContent)) {return;}
new LambdaQueryWrapper<LawsDocumentSplit>()
.eq(LawsDocumentSplit::getInfoId, lawsDocumentSplit.getInfoId())
.eq(LawsDocumentSplit::getItemNum, lawsDocumentSplit.getItemNum())
.eq(LawsDocumentSplit::getItemTitle, lawsDocumentSplit.getItemTitle()));
if (!Objects.isNull(lawsDocumentSplits)){
// 合并
String itemContent = StringUtils.isNotBlank(lawsDocumentSplits.getItemContent()) ? lawsDocumentSplits.getItemContent() : "";
lawsDocumentSplitMapper.update(null,
new LambdaUpdateWrapper<LawsDocumentSplit>()
.set(LawsDocumentSplit::getItemContent, itemContent + articleContent)
.eq(LawsDocumentSplit::getId, lawsDocumentSplits.getId()));
return;
}
lawsDocumentSplit.setItemContent(articleContent); lawsDocumentSplit.setItemContent(articleContent);
lawsDocumentSplit.setCreateTime(getSimpleDate2(eMap.get("createTime"))); lawsDocumentSplit.setCreateTime(getSimpleDate2(eMap.get("createTime")));
lawsDocumentSplit.setUpdateTime(getSimpleDate2(eMap.get("updateTime"))); lawsDocumentSplit.setUpdateTime(getSimpleDate2(eMap.get("updateTime")));
@@ -589,6 +581,24 @@ public class SynchronizationAsmsService {
log.info("=====================定时任务同步结束====================="); log.info("=====================定时任务同步结束=====================");
} }
private boolean duplicateCheck(LawsDocumentSplit lawsDocumentSplit, String articleContent) {
LawsDocumentSplit lawsDocumentSplits = lawsDocumentSplitMapper.selectOne(
new LambdaQueryWrapper<LawsDocumentSplit>()
.eq(LawsDocumentSplit::getInfoId, lawsDocumentSplit.getInfoId())
.eq(LawsDocumentSplit::getItemNum, lawsDocumentSplit.getItemNum())
.eq(LawsDocumentSplit::getItemTitle, lawsDocumentSplit.getItemTitle()));
if (!Objects.isNull(lawsDocumentSplits)){
// 合并
String itemContent = StringUtils.isNotBlank(lawsDocumentSplits.getItemContent()) ? lawsDocumentSplits.getItemContent() : "";
lawsDocumentSplitMapper.update(null,
new LambdaUpdateWrapper<LawsDocumentSplit>()
.set(LawsDocumentSplit::getItemContent, itemContent + articleContent)
.eq(LawsDocumentSplit::getId, lawsDocumentSplits.getId()));
return true;
}
return false;
}
public void syncSplitByStandardNumber(String standardNumber) { public void syncSplitByStandardNumber(String standardNumber) {
log.info("=====================定时同步文档拆分====================="); log.info("=====================定时同步文档拆分=====================");
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
@@ -437,4 +437,18 @@ public class DocumentSplitController {
* documentSplitService.exportDocumentSplitDetail(parameter, request, response); * documentSplitService.exportDocumentSplitDetail(parameter, request, response);
* } * }
*/ */
/**
* 标准拆分详情-重新处理条文详情
* @param isAsmsImport
* @param serialNumber
* @return
*/
@AutoLog(value = "标准拆分详情-重新处理条文详情")
@ApiOperation(value = "标准拆分详情-重新处理条文详情")
@GetMapping("/disposeItemVal")
public Result<T> disposeItemVal(String isAsmsImport,String serialNumber) {
documentSplitService.disposeItemVal(isAsmsImport, serialNumber);
return Result.OK(MessageUtils.getMessage(ResultCommon.OK));
}
} }
@@ -216,4 +216,11 @@ public interface IDocumentSplitService {
* @param jsonObject * @param jsonObject
*/ */
void batchSplit(JSONObject jsonObject); void batchSplit(JSONObject jsonObject);
/**
* 重新处理条文详情
* @param isAsmsImport
* @param serialNumber
*/
void disposeItemVal(String isAsmsImport, String serialNumber);
} }
@@ -51,6 +51,7 @@ import com.jero.modules.split.enums.SplitFileTypeTypeEnum;
import com.jero.modules.split.mapper.SarFileSplitItemsValEOMapper; import com.jero.modules.split.mapper.SarFileSplitItemsValEOMapper;
import com.jero.modules.split.page.SarFileSplitMenuEOPage; import com.jero.modules.split.page.SarFileSplitMenuEOPage;
import com.jero.modules.split.service.ISarFileSplitInfoService; 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.split.service.ISarFileSplitMenuEOService;
import com.jero.modules.split.service.impl.FileSpiltService; import com.jero.modules.split.service.impl.FileSpiltService;
import com.jero.modules.sys.entity.LawsEnterpriseStandardLevel; import com.jero.modules.sys.entity.LawsEnterpriseStandardLevel;
@@ -79,6 +80,10 @@ import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.shiro.SecurityUtils; import org.apache.shiro.SecurityUtils;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
@@ -127,6 +132,7 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
private final PartNameService partNameService; private final PartNameService partNameService;
private final ILawsLabelDatabaseService lawsLabelDatabaseService; private final ILawsLabelDatabaseService lawsLabelDatabaseService;
private final ISysBaseAPI sysBaseAPI; private final ISysBaseAPI sysBaseAPI;
private final ISarFileSplitItemsValEOService sarFileSplitItemsValEOService;
private static final String INFO_ID = "info_id"; private static final String INFO_ID = "info_id";
private static final String ID = "id"; private static final String ID = "id";
private static final String IDS = "ids"; private static final String IDS = "ids";
@@ -156,7 +162,8 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
ILawsGradeService lawsGradeService, ILawsGradeService lawsGradeService,
PartNameService partNameService, PartNameService partNameService,
ILawsLabelDatabaseService lawsLabelDatabaseService, ILawsLabelDatabaseService lawsLabelDatabaseService,
ISysBaseAPI sysBaseAPI) { ISysBaseAPI sysBaseAPI,
ISarFileSplitItemsValEOService sarFileSplitItemsValEOService) {
this.documentSplitMapper = documentSplitMapper; this.documentSplitMapper = documentSplitMapper;
this.sarFileSplitInfoService = sarFileSplitInfoService; this.sarFileSplitInfoService = sarFileSplitInfoService;
this.lawsCommonMapper = lawsCommonMapper; this.lawsCommonMapper = lawsCommonMapper;
@@ -176,6 +183,7 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
this.partNameService = partNameService; this.partNameService = partNameService;
this.lawsLabelDatabaseService = lawsLabelDatabaseService; this.lawsLabelDatabaseService = lawsLabelDatabaseService;
this.sysBaseAPI = sysBaseAPI; this.sysBaseAPI = sysBaseAPI;
this.sarFileSplitItemsValEOService = sarFileSplitItemsValEOService;
} }
@Autowired @Autowired
@@ -1361,6 +1369,67 @@ public class DocumentSplitServiceImpl implements IDocumentSplitService {
} }
} }
@Override
public void disposeItemVal(String isAsmsImport, String serialNumber) {
LambdaQueryWrapper<SarFileSplitInfoEO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(StringUtils.isNotBlank(isAsmsImport), SarFileSplitInfoEO::getIsAsmsImport, isAsmsImport);
queryWrapper.eq(StringUtils.isNotBlank(serialNumber), SarFileSplitInfoEO::getSerialNumber, serialNumber);
List<SarFileSplitInfoEO> list = sarFileSplitInfoService.list(queryWrapper);
for (SarFileSplitInfoEO sarFileSplitInfoEO : list) {
// 查询条文表
List<LawsDocumentSplit> lawsDocumentSplits = lawsDocumentSplitMapper.selectList(
new LambdaQueryWrapper<LawsDocumentSplit>()
.in(LawsDocumentSplit::getInfoId, sarFileSplitInfoEO.getId()));
for (LawsDocumentSplit lawsDocumentSplit : lawsDocumentSplits) {
// 先删除旧条文详情
sarFileSplitItemsValEOMapper.delete(
new LambdaQueryWrapper<SarFileSplitItemsValEO>()
.eq(SarFileSplitItemsValEO::getItemId, lawsDocumentSplit.getId()));
// 构建新条文详情
if (StringUtils.isNotBlank(lawsDocumentSplit.getItemContent())){
Document document = Jsoup.parse(lawsDocumentSplit.getItemContent());
Elements elements = document.select("p:not(table p):not(:empty), img, table");
if (elements.isEmpty() && StringUtils.isNotBlank(lawsDocumentSplit.getItemContent())){
SarFileSplitItemsValEO sarFileSplitItemsValEO = new SarFileSplitItemsValEO();
sarFileSplitItemsValEO.setId(UUIDUtils.randomUUID20());
sarFileSplitItemsValEO.setItemId(lawsDocumentSplit.getId());
sarFileSplitItemsValEO.setDisplaySeq(1);
sarFileSplitItemsValEO.setValidFlag(0);
sarFileSplitItemsValEO.setType("TEXT");
sarFileSplitItemsValEO.setItemContent(lawsDocumentSplit.getItemContent());
sarFileSplitItemsValEOService.insertSelective(sarFileSplitItemsValEO);
return;
}
for (int i = 0; i < elements.size(); i++) {
Element element = elements.get(i);
if (StringUtils.isBlank(element.text()) && "p".equals(element.tagName())){
continue;
}
SarFileSplitItemsValEO sarFileSplitItemsValEO = new SarFileSplitItemsValEO();
if ("table".equals(element.tagName())){
sarFileSplitItemsValEO.setType("TABLE");
sarFileSplitItemsValEO.setItemContent(element.outerHtml());
}else if ("img".equals(element.tagName())){
sarFileSplitItemsValEO.setType("IMG");
sarFileSplitItemsValEO.setItemContent(element.attr("src"));
}else if ("p".equals(element.tagName())){
sarFileSplitItemsValEO.setType("TEXT");
sarFileSplitItemsValEO.setItemContent(element.text());
}
sarFileSplitItemsValEO.setId(UUIDUtils.randomUUID20());
sarFileSplitItemsValEO.setItemId(lawsDocumentSplit.getId());
sarFileSplitItemsValEO.setItemContent(element.outerHtml());
sarFileSplitItemsValEO.setDisplaySeq(i + 1);
sarFileSplitItemsValEO.setValidFlag(0);
sarFileSplitItemsValEOService.insertSelective(sarFileSplitItemsValEO);
}
}
}
}
}
private void manageData(Map<String, Object> resultMap, StringBuilder fieldsBuilder, List<String> valuesList) { private void manageData(Map<String, Object> resultMap, StringBuilder fieldsBuilder, List<String> valuesList) {
// 所有key(字段名) // 所有key(字段名)
resultMap.forEach((k, v) -> { resultMap.forEach((k, v) -> {