fix(asms): 同步问题

This commit is contained in:
yjz
2024-03-01 21:59:52 +08:00
parent 104cd6b021
commit e976ab9bb1
3 changed files with 129 additions and 8 deletions
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -49,8 +50,12 @@ 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.http.*;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
@@ -105,6 +110,8 @@ public class LawsAsmsOpenApiServiceImpl extends ServiceImpl<LawsAsmsOpenApiMappe
private ISysDictService sysDictService;
@Resource
private ILawsHomeSearchService lawsHomeSearchService;
@Autowired
private RestTemplate restTemplate;
private final static String filePath = "asms/";
private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
@@ -613,8 +620,7 @@ public class LawsAsmsOpenApiServiceImpl extends ServiceImpl<LawsAsmsOpenApiMappe
List<Map<String, String>> mapList = new ArrayList<>();
try{
mapList = asmsPostUtil.sendGetReq(lawsAsmsOpenApi.getApiUrl(), paramMap);
}
catch (JeroBootException e){
} catch (JeroBootException e){
log.error(e.getMessage());
}
// List<Map<String, String>> mapList = asmsPostUtil.sendGetReq(lawsAsmsOpenApi.getApiUrl(), paramMap);
@@ -633,7 +639,51 @@ public class LawsAsmsOpenApiServiceImpl extends ServiceImpl<LawsAsmsOpenApiMappe
lawsDocumentSplit.setInfoId(sarFileSplitInfoEO.getId());
lawsDocumentSplit.setItemNum(eMap.get("termsNum"));
lawsDocumentSplit.setItemTitle(eMap.get("termsName"));
lawsDocumentSplit.setItemContent(eMap.get("articleContent"));
// 条文内容
String articleContent = eMap.get("articleContent");
// 处理图片
if (articleContent.contains("<img src=")){
String urlSuffix = articleContent.substring(articleContent.indexOf("getImg"),
articleContent.indexOf("\" alt"));
String url = asmsPostUtil.getHost() + urlSuffix;
String fileName = url.substring(url.lastIndexOf("/") + 1);
// 获取图片
HttpHeaders headers = new HttpHeaders();
headers.set(HttpHeaders.USER_AGENT, "Mozilla/5.0");
headers.set(HttpHeaders.ACCEPT, MediaType.ALL_VALUE);
HttpEntity<String> entity = new HttpEntity<>(headers);
ResponseEntity<byte[]> responseEntity = restTemplate.exchange(url, HttpMethod.GET, entity, byte[].class);
if (HttpStatus.OK == responseEntity.getStatusCode()) {
byte[] imageBytes = responseEntity.getBody();
MultipartFile file = new MockMultipartFile(fileName, fileName,"application/octet-stream" ,imageBytes);
// 上传图片
OSSFile oSSFile = ossFileService.uploadLocalForSplit(file, "", "", "");
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("<p>").append("<img class=\"wordImg\" style=\"width:100%;height:100%\" src=\"")
.append(oSSFile.getUrl()).append("\">").append("</p>");
articleContent = stringBuilder.toString();
}
}
// 处理表格
if (articleContent.contains("<table style=")){
articleContent = "<p>" + articleContent + "</p>";
}
// 重复性校验
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;
}
lawsDocumentSplit.setItemContent(articleContent);
lawsDocumentSplit.setCreateTime(getSimpleDate2(eMap.get("createTime")));
lawsDocumentSplit.setUpdateTime(getSimpleDate2(eMap.get("updateTime")));
@@ -683,12 +733,17 @@ public class LawsAsmsOpenApiServiceImpl extends ServiceImpl<LawsAsmsOpenApiMappe
LambdaQueryWrapper<SarFileSplitInfoEO> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(SarFileSplitInfoEO::getIsAsmsImport, "1");
List<SarFileSplitInfoEO> sarFileSplitInfoEOList = sarFileSplitInfoService.list(queryWrapper);
String regex = "[^a-zA-Z0-9.]";
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());
List<String> itemNumList = new ArrayList<>();
for (LawsDocumentSplit lawsDocumentSplit : lawsDocumentSplitList) {
String itemNum = lawsDocumentSplit.getItemNum();
itemNumList.add(itemNum.replaceAll(regex, ""));
}
// 对目录排序
Collections.sort(itemNumList, new AlphanumericComparator());
Map<String, Long> sortMap = new HashMap<>();
@@ -714,12 +769,13 @@ public class LawsAsmsOpenApiServiceImpl extends ServiceImpl<LawsAsmsOpenApiMappe
sarFileSplitMenuEO.setId(id);
sarFileSplitMenuEO.setInfoId(infoId);
sarFileSplitMenuEO.setName(itemNum);
sarFileSplitMenuEO.setDisplaySeq(sortMap.get(itemNum.replaceAll(regex, "")));
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);
idMap.put(itemNum.replaceAll(regex, ""), id);
lawsDocumentSplit.setMenuId(id);
lawsDocumentSplitMapper.updateById(lawsDocumentSplit);
@@ -727,7 +783,7 @@ public class LawsAsmsOpenApiServiceImpl extends ServiceImpl<LawsAsmsOpenApiMappe
// 设置父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);
@@ -918,4 +974,11 @@ public class LawsAsmsOpenApiServiceImpl extends ServiceImpl<LawsAsmsOpenApiMappe
lawsAsmsOpenApiMapper.removeDictItemBatch(dictIdList);
}
}
public static void main(String[] args) {
String str = "111<img src=\"/getImg/1689745730599/31f7baf57aimg1.png\" alt=\"\" />222";
String substring = str.substring(str.indexOf("getImg"), str.indexOf("\" alt"));
System.out.println(substring);
System.out.println(substring.substring(substring.lastIndexOf("/") + 1));
}
}
@@ -2,6 +2,7 @@ package com.jero.modules.docking.asms.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.jero.common.exception.JeroBootException;
import com.jero.common.util.MinioUtil;
import com.jero.common.util.UUIDUtils;
@@ -40,8 +41,12 @@ 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.http.*;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.InputStream;
@@ -92,6 +97,8 @@ public class SynchronizationAsmsService {
private IOSSFileService ossFileService;
@Autowired
private IDocumentSplitService documentSplitService;
@Autowired
private RestTemplate restTemplate;
private final static String filePath = "asms/";
private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
@@ -388,7 +395,51 @@ public class SynchronizationAsmsService {
lawsDocumentSplit.setInfoId(sarFileSplitInfoEO.getId());
lawsDocumentSplit.setItemNum(eMap.get("termsNum"));
lawsDocumentSplit.setItemTitle(eMap.get("termsName"));
lawsDocumentSplit.setItemContent(eMap.get("articleContent"));
// 条文内容
String articleContent = eMap.get("articleContent");
// 处理图片
if (articleContent.contains("<img src=")){
String urlSuffix = articleContent.substring(articleContent.indexOf("getImg"),
articleContent.indexOf("\" alt"));
String imageUrl = asmsPostUtil.getHost() + urlSuffix;
String fileName = imageUrl.substring(imageUrl.lastIndexOf("/") + 1);
// 获取图片
HttpHeaders headers = new HttpHeaders();
headers.set(HttpHeaders.USER_AGENT, "Mozilla/5.0");
headers.set(HttpHeaders.ACCEPT, MediaType.ALL_VALUE);
HttpEntity<String> entity = new HttpEntity<>(headers);
ResponseEntity<byte[]> responseEntity = restTemplate.exchange(imageUrl, HttpMethod.GET, entity, byte[].class);
if (HttpStatus.OK == responseEntity.getStatusCode()) {
byte[] imageBytes = responseEntity.getBody();
MultipartFile file = new MockMultipartFile(fileName, fileName,"application/octet-stream" ,imageBytes);
// 上传图片
OSSFile oSSFile = ossFileService.uploadLocalForSplit(file, "", "", "");
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("<p>").append("<img class=\"wordImg\" style=\"width:100%;height:100%\" src=\"")
.append(oSSFile.getUrl()).append("\">").append("</p>");
articleContent = stringBuilder.toString();
}
}
// 处理表格
if (articleContent.contains("<table style=")){
articleContent = "<p>" + articleContent + "</p>";
}
// 重复性校验
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;
}
lawsDocumentSplit.setItemContent(articleContent);
lawsDocumentSplit.setCreateTime(getSimpleDate2(eMap.get("createTime")));
lawsDocumentSplit.setUpdateTime(getSimpleDate2(eMap.get("updateTime")));
@@ -497,7 +548,9 @@ public class SynchronizationAsmsService {
sarFileSplitMenuEO.setPId(pid);
}
});
sarFileSplitMenuEOMapper.insertForeach(sarFileSplitMenuEOList);
if (!sarFileSplitMenuEOList.isEmpty()) {
sarFileSplitMenuEOMapper.insertForeach(sarFileSplitMenuEOList);
}
});
long time3 = System.currentTimeMillis();
log.info("=====================生成拆分详情左侧目录耗时:{}毫秒=====================", time3 - time2);
@@ -36,6 +36,11 @@ public class AsmsPostUtil {
private String host;
@Value("${asms.username}")
private String username;
public String getHost() {
return host;
}
@Value("${asms.password}")
private String password;
@Value("${asms.expire}")