add 定时任务
This commit is contained in:
+20
@@ -0,0 +1,20 @@
|
|||||||
|
package com.jero.modules.docking.asms.job;
|
||||||
|
|
||||||
|
import com.jero.common.util.SpringContextUtils;
|
||||||
|
import com.jero.modules.docking.asms.service.impl.SynchronizationAsmsService;
|
||||||
|
import org.quartz.Job;
|
||||||
|
import org.quartz.JobExecutionContext;
|
||||||
|
import org.quartz.JobExecutionException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: liao
|
||||||
|
* @Date: 2023/11/3 13:43
|
||||||
|
* @Description: 同步asms国内法规
|
||||||
|
*/
|
||||||
|
public class AsmsDomesticJob implements Job {
|
||||||
|
@Override
|
||||||
|
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
|
||||||
|
SynchronizationAsmsService bean = SpringContextUtils.getBean(SynchronizationAsmsService.class);
|
||||||
|
bean.syncDomestic();
|
||||||
|
}
|
||||||
|
}
|
||||||
+20
@@ -0,0 +1,20 @@
|
|||||||
|
package com.jero.modules.docking.asms.job;
|
||||||
|
|
||||||
|
import com.jero.common.util.SpringContextUtils;
|
||||||
|
import com.jero.modules.docking.asms.service.impl.SynchronizationAsmsService;
|
||||||
|
import org.quartz.Job;
|
||||||
|
import org.quartz.JobExecutionContext;
|
||||||
|
import org.quartz.JobExecutionException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: liao
|
||||||
|
* @Date: 2023/11/3 13:44
|
||||||
|
* @Description: 同步asms文档拆分
|
||||||
|
*/
|
||||||
|
public class AsmsSplitJob implements Job {
|
||||||
|
@Override
|
||||||
|
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
|
||||||
|
SynchronizationAsmsService bean = SpringContextUtils.getBean(SynchronizationAsmsService.class);
|
||||||
|
bean.syncSplit();
|
||||||
|
}
|
||||||
|
}
|
||||||
+590
@@ -0,0 +1,590 @@
|
|||||||
|
package com.jero.modules.docking.asms.service.impl;
|
||||||
|
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.jero.common.exception.JeroBootException;
|
||||||
|
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.mapper.LawsAsmsOpenApiMapper;
|
||||||
|
import com.jero.modules.docking.asms.service.ILawsAsmsDomesticService;
|
||||||
|
import com.jero.modules.docking.asms.util.AlphanumericComparator;
|
||||||
|
import com.jero.modules.docking.asms.util.AsmsPostUtil;
|
||||||
|
import com.jero.modules.laws.common.util.DateUtil;
|
||||||
|
import com.jero.modules.laws.documenttool.entity.LawsDocumentSplit;
|
||||||
|
import com.jero.modules.laws.documenttool.mapper.LawsDocumentSplitMapper;
|
||||||
|
import com.jero.modules.laws.standard.entity.LawsDomesticStandard;
|
||||||
|
import com.jero.modules.laws.standard.service.ILawsDomesticStandardService;
|
||||||
|
import com.jero.modules.laws.standard.service.ILawsReplacedStandardService;
|
||||||
|
import com.jero.modules.laws.standardization.entity.LawsStandardization;
|
||||||
|
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 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.Component;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.util.*;
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: liao
|
||||||
|
* @Date: 2023/11/3 13:46
|
||||||
|
* @Description: 定时同步asms
|
||||||
|
*/
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class SynchronizationAsmsService {
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AsmsPostUtil asmsPostUtil;
|
||||||
|
@Autowired
|
||||||
|
private ISysDictItemService sysDictItemService;
|
||||||
|
@Autowired
|
||||||
|
private ILawsAsmsDomesticService lawsAsmsDomesticService;
|
||||||
|
@Autowired
|
||||||
|
private LawsAsmsOpenApiMapper lawsAsmsOpenApiMapper;
|
||||||
|
@Autowired
|
||||||
|
private ILawsStandardizationService lawsStandardizationService;
|
||||||
|
@Autowired
|
||||||
|
private ILawsDomesticStandardService lawsDomesticStandardService;
|
||||||
|
@Autowired
|
||||||
|
private ISarFileSplitInfoService sarFileSplitInfoService;
|
||||||
|
@Autowired
|
||||||
|
private LawsDocumentSplitMapper lawsDocumentSplitMapper;
|
||||||
|
@Autowired
|
||||||
|
private ISarFileSplitMenuEOService sarFileSplitMenuEOService;
|
||||||
|
@Autowired
|
||||||
|
private SarFileSplitMenuEOMapper sarFileSplitMenuEOMapper;
|
||||||
|
@Autowired
|
||||||
|
private ISarFileSplitItemsValEOService sarFileSplitItemsValEOService;
|
||||||
|
@Autowired
|
||||||
|
private ILawsReplacedStandardService lawsReplacedStandardService;
|
||||||
|
@Autowired
|
||||||
|
private IOSSFileService ossFileService;
|
||||||
|
|
||||||
|
private final static String filePath = "asms/";
|
||||||
|
private static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
||||||
|
private static SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
||||||
|
private static SimpleDateFormat oldDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: liao
|
||||||
|
* @Date: 2023/11/3 13:48
|
||||||
|
* @Description: 定时同步国内法规
|
||||||
|
**/
|
||||||
|
@Transactional
|
||||||
|
public void syncDomestic() {
|
||||||
|
log.info("=====================定时同步国内法规=====================");
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// 法规列表
|
||||||
|
String url = "xiaobodata/openApi/domesticLaws/list";
|
||||||
|
Map<String, String> paramMap = new HashMap<>();
|
||||||
|
paramMap.put("pageNo", "1");
|
||||||
|
paramMap.put("pageSize", "2");
|
||||||
|
Map<String, Object> totalMap = asmsPostUtil.sendGetReq2(url, paramMap);
|
||||||
|
String total = (String) totalMap.get("total");
|
||||||
|
paramMap.put("pageSize", total);
|
||||||
|
|
||||||
|
List<Map<String, String>> mapList = asmsPostUtil.sendGetReq(url, paramMap);
|
||||||
|
if (Objects.isNull(mapList)) {
|
||||||
|
log.info("=====================没有获取到ASMS系统数据,同步结束=====================");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
List<LawsAsmsDomestic> lawsAsmsDomesticList = new ArrayList();
|
||||||
|
mapList.forEach(eMap -> {
|
||||||
|
String createTimeString = eMap.get("createTime");
|
||||||
|
Date createTime = DateUtil.getDateSecond(createTimeString);
|
||||||
|
Date yesterday = DateUtil.getDateAddDays(new Date(), -1);
|
||||||
|
// 创建时间为昨天的数据
|
||||||
|
if (createTime.after(DateUtil.getDayStart(yesterday)) && createTime.before(DateUtil.getDayEnd(yesterday))) {
|
||||||
|
LawsAsmsDomestic lawsAsmsDomestic = JSONObject.parseObject(JSONObject.toJSONString(eMap), LawsAsmsDomestic.class);
|
||||||
|
lawsAsmsDomestic.setCreateTimeString(createTimeString);
|
||||||
|
lawsAsmsDomestic.setUpdateTimeString(eMap.get("updateTime"));
|
||||||
|
lawsAsmsDomestic.setFocalPointName(eMap.get("focalPoint"));
|
||||||
|
lawsAsmsDomesticList.add(lawsAsmsDomestic);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (CollectionUtils.isEmpty(lawsAsmsDomesticList)) {
|
||||||
|
log.info("=====================昨天新增法规0条,同步结束=====================");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 法规详情
|
||||||
|
String detailUrl = "xiaobodata/openApi/domesticLaws/getInfo";
|
||||||
|
List<LawsAsmsDomestic> detailList = new ArrayList();
|
||||||
|
Map<String, String> detailMap = new HashMap<>();
|
||||||
|
lawsAsmsDomesticList.forEach(lawsAsmsDomestic -> {
|
||||||
|
detailMap.put("lawCode", lawsAsmsDomestic.getCode());
|
||||||
|
Map<String, Object> objectMap = asmsPostUtil.sendGetReq2(detailUrl, detailMap);
|
||||||
|
|
||||||
|
LawsAsmsDomestic parseObject = JSONObject.parseObject(JSONObject.toJSONString(objectMap), LawsAsmsDomestic.class);
|
||||||
|
parseObject.setCreateTimeString((String) objectMap.get("createTime"));
|
||||||
|
parseObject.setUpdateTimeString((String) objectMap.get("updateTime"));
|
||||||
|
parseObject.setFocalPointName((String) objectMap.get("focalPoint"));
|
||||||
|
detailList.add(parseObject);
|
||||||
|
});
|
||||||
|
|
||||||
|
// 同步到数据库
|
||||||
|
List<SysDictItem> sysDictItemList = sysDictItemService.list();
|
||||||
|
List<LawsStandardization> lawsStandardizationList = lawsStandardizationService.list();
|
||||||
|
List<LawsDomesticStandard> insertDomesticList = new ArrayList<>();
|
||||||
|
detailList.forEach(lawsAsmsDomestic -> {
|
||||||
|
String[] parts = lawsAsmsDomestic.getCode().split("[-\\s]"); // 使用空格或破折号作为分隔符
|
||||||
|
if (parts.length < 3) {
|
||||||
|
parts = lawsAsmsDomestic.getCode().split("[—\\s]"); // 使用空格或破折号作为分隔符
|
||||||
|
}
|
||||||
|
// 封装实例
|
||||||
|
LawsDomesticStandard lawsDomesticStandard = new LawsDomesticStandard();
|
||||||
|
// 对接标识
|
||||||
|
lawsDomesticStandard.setIsAsmsImport("1");
|
||||||
|
// 标准编号
|
||||||
|
lawsDomesticStandard.setStandardNumber(lawsAsmsDomestic.getCode());
|
||||||
|
// 标准类别
|
||||||
|
lawsDomesticStandard.setStandardClass(parts[0]);
|
||||||
|
// 标准号
|
||||||
|
lawsDomesticStandard.setStandardNumberTemp(parts[1]);
|
||||||
|
// 年代号
|
||||||
|
lawsDomesticStandard.setYearNumber(parts[2]);
|
||||||
|
// 标准名称
|
||||||
|
lawsDomesticStandard.setStandardName(lawsAsmsDomestic.getName());
|
||||||
|
// 标准英文名称
|
||||||
|
lawsDomesticStandard.setStandardEnglishName(lawsAsmsDomestic.getEnglishName());
|
||||||
|
// 适用认证
|
||||||
|
String itemValues = getItemValues(lawsAsmsDomestic.getApplicableCertificationListString(),
|
||||||
|
"1696008107352854529", sysDictItemList);
|
||||||
|
lawsDomesticStandard.setApplicableCertification(itemValues);
|
||||||
|
// 适用车型
|
||||||
|
itemValues = getItemValues(lawsAsmsDomestic.getApplicableModelsListString(),
|
||||||
|
"1702518672924110850", sysDictItemList);
|
||||||
|
lawsDomesticStandard.setApplicableVehicle(itemValues);
|
||||||
|
// 采标程度
|
||||||
|
itemValues = getItemValues(lawsAsmsDomestic.getDegreeAdoption(),
|
||||||
|
"1696042735686049793", sysDictItemList);
|
||||||
|
lawsDomesticStandard.setDegreeOfBidAcquisition(itemValues);
|
||||||
|
// 实施日期
|
||||||
|
lawsDomesticStandard.setImplementationDate(getSimpleDate(lawsAsmsDomestic.getImplementationDate()));
|
||||||
|
// 采用国际标准号
|
||||||
|
lawsDomesticStandard.setAdoptTheInternationalStandardNumber(lawsAsmsDomestic.getInternationalStandard());
|
||||||
|
// 新车实施日期
|
||||||
|
lawsDomesticStandard.setNewModelImplementationDate(getManyDateString(lawsAsmsDomestic.getNewCarImplementationDate()));
|
||||||
|
// 动力类型
|
||||||
|
itemValues = getItemValues(lawsAsmsDomestic.getPowerTypeListString(),
|
||||||
|
"1702518671166697474", sysDictItemList);
|
||||||
|
lawsDomesticStandard.setDynamicType(itemValues);
|
||||||
|
// 在产车实施日期
|
||||||
|
lawsDomesticStandard.setOnTheProductionDate(getManyDateString(lawsAsmsDomestic.getProductionCarImplementationDate()));
|
||||||
|
// 发布日期
|
||||||
|
lawsDomesticStandard.setReleaseDate(getSimpleDate(lawsAsmsDomestic.getPublishDate()));
|
||||||
|
// 代替标准号
|
||||||
|
lawsReplacedStandardService.addRelation(lawsAsmsDomestic.getReplaceCode(), lawsAsmsDomestic.getCode(), 1);
|
||||||
|
// 标准性质
|
||||||
|
itemValues = getItemValues(lawsAsmsDomestic.getStandardNature(),
|
||||||
|
"1695010513489833985", sysDictItemList);
|
||||||
|
lawsDomesticStandard.setStandardProperty(itemValues);
|
||||||
|
// 标准状态
|
||||||
|
itemValues = getItemValues(lawsAsmsDomestic.getStandardStatus(),
|
||||||
|
"1695991936599715842", sysDictItemList);
|
||||||
|
lawsDomesticStandard.setStandardState(itemValues);
|
||||||
|
// 分标委
|
||||||
|
String subcommittee = lawsAsmsDomestic.getSubcommittee();
|
||||||
|
if (StringUtils.isNotBlank(subcommittee)) {
|
||||||
|
lawsDomesticStandard.setBiddingCommittee(lawsStandardizationList.stream()
|
||||||
|
.filter(e -> subcommittee.equals(e.getName())).collect(Collectors.toList()).get(0).getId());
|
||||||
|
}
|
||||||
|
// 创建时间
|
||||||
|
lawsDomesticStandard.setCreateTime(getSimpleDate2(lawsAsmsDomestic.getCreateTimeString()));
|
||||||
|
// 更新时间
|
||||||
|
lawsDomesticStandard.setUpdateTime(getSimpleDate2(lawsAsmsDomestic.getUpdateTimeString()));
|
||||||
|
|
||||||
|
// 生成id
|
||||||
|
lawsDomesticStandard.setId(UUIDUtils.randomUUID20());
|
||||||
|
|
||||||
|
insertDomesticList.add(lawsDomesticStandard);
|
||||||
|
});
|
||||||
|
// 插入国内法规标准数据库
|
||||||
|
lawsDomesticStandardService.saveBatch(insertDomesticList, insertDomesticList.size());
|
||||||
|
long time1 = System.currentTimeMillis();
|
||||||
|
log.info("=====================同步国内法规标准数据:{}条,耗时:{}毫秒=====================", insertDomesticList.size(), time1 - start);
|
||||||
|
|
||||||
|
// 同步国内法规相关文档
|
||||||
|
String fileUrl = "xiaobodata/openApi/domesticLaws/getFile";
|
||||||
|
insertDomesticList.forEach(lawsDomesticStandard -> {
|
||||||
|
String id = lawsDomesticStandard.getId();
|
||||||
|
String code = lawsDomesticStandard.getStandardNumber();
|
||||||
|
Map<String, String> fileParamMap = new HashMap<>();
|
||||||
|
fileParamMap.put("lawCode", code);
|
||||||
|
Map<String, Object> objectMap = asmsPostUtil.sendGetReq2(fileUrl, fileParamMap);
|
||||||
|
if (!Objects.isNull(objectMap)) {
|
||||||
|
Map<String, String> standardTextPdf = (Map<String, String>) objectMap.get("standardTextPdf");
|
||||||
|
String fileName = standardTextPdf.get("fileName");
|
||||||
|
String fileType = standardTextPdf.get("fileType");
|
||||||
|
String uri = standardTextPdf.get("url");
|
||||||
|
if (StringUtils.isNotBlank(uri)) {
|
||||||
|
upload(uri, fileName, fileType, id, code);
|
||||||
|
}
|
||||||
|
Map<String, String> standardTextWord = (Map<String, String>) objectMap.get("standardTextWord");
|
||||||
|
fileName = standardTextWord.get("fileName");
|
||||||
|
fileType = standardTextWord.get("fileType");
|
||||||
|
uri = standardTextWord.get("url");
|
||||||
|
if (StringUtils.isNotBlank(uri)) {
|
||||||
|
upload(uri, fileName, fileType, id, code);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
long time2 = System.currentTimeMillis();
|
||||||
|
log.info("=====================同步国内法规文件耗时:{}毫秒=====================", time2 - time1);
|
||||||
|
|
||||||
|
long end = System.currentTimeMillis();
|
||||||
|
log.info("=====================全部同步完成,耗时:{} 毫秒=====================", end - start);
|
||||||
|
log.info("=====================定时任务同步结束=====================");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: liao
|
||||||
|
* @Date: 2023/11/3 13:49
|
||||||
|
* @Description: 同步文档拆分
|
||||||
|
**/
|
||||||
|
@Transactional
|
||||||
|
public void syncSplit() {
|
||||||
|
log.info("=====================定时同步文档拆分=====================");
|
||||||
|
long start = System.currentTimeMillis();
|
||||||
|
|
||||||
|
// 文档拆分
|
||||||
|
String url = "xiaobodata/openApi/article/search";
|
||||||
|
Map<String, String> paramMap = new HashMap<>();
|
||||||
|
paramMap.put("pageNo", "1");
|
||||||
|
paramMap.put("pageSize", "2");
|
||||||
|
Map<String, Object> totalMap = asmsPostUtil.sendGetReq2(url, paramMap);
|
||||||
|
String total = (String) totalMap.get("total");
|
||||||
|
paramMap.put("pageSize", total);
|
||||||
|
|
||||||
|
List<Map<String, String>> mapList = asmsPostUtil.sendGetReq(url, paramMap);
|
||||||
|
if (Objects.isNull(mapList)) {
|
||||||
|
log.info("=====================没有获取到ASMS系统数据,同步结束=====================");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
List<SarFileSplitInfoEO> allSplitList = sarFileSplitInfoService.list();
|
||||||
|
List<String> codeList = allSplitList.stream().map(SarFileSplitInfoEO::getSerialNumber).collect(Collectors.toList());
|
||||||
|
|
||||||
|
List<SarFileSplitInfoEO> insertSplitList = new ArrayList<>();
|
||||||
|
mapList.forEach(eMap -> {
|
||||||
|
String code = eMap.get("code");
|
||||||
|
if (CollectionUtils.isEmpty(codeList) || !codeList.contains(code)) {
|
||||||
|
LambdaQueryWrapper<LawsDomesticStandard> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.eq(LawsDomesticStandard::getStandardNumber, code);
|
||||||
|
LawsDomesticStandard lawsDomesticStandard = lawsDomesticStandardService.getOne(queryWrapper);
|
||||||
|
|
||||||
|
LambdaQueryWrapper<OSSFile> 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.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";
|
||||||
|
Map<String, String> paramMap1 = new HashMap<>();
|
||||||
|
Map<String, String> paramMap2 = new HashMap<>();
|
||||||
|
Map<String, String> paramMap3 = new HashMap<>();
|
||||||
|
Map<String, List<LawsDocumentSplit>> infoMap = new HashMap<>();
|
||||||
|
int[] n = {0};
|
||||||
|
insertSplitList.forEach(sarFileSplitInfoEO -> {
|
||||||
|
paramMap.put("standardCode", sarFileSplitInfoEO.getSerialNumber());
|
||||||
|
List<Map<String, String>> mapListAll = asmsPostUtil.sendGetReq(splitUrl, paramMap1);
|
||||||
|
List<LawsDocumentSplit> insertDocumentList = new ArrayList<>();
|
||||||
|
mapListAll.forEach(eMap -> {
|
||||||
|
// 单个法规的条文解读详情
|
||||||
|
paramMap2.put("standardCode", sarFileSplitInfoEO.getSerialNumber());
|
||||||
|
paramMap2.put("termsCode", eMap.get("termsNum"));
|
||||||
|
Map<String, Object> objectMap = asmsPostUtil.sendGetReq2("xiaobodata/openApi/article/interpretation/details", paramMap2);
|
||||||
|
|
||||||
|
// 单个法规的条文标签详情
|
||||||
|
paramMap3.put("standardCode", sarFileSplitInfoEO.getSerialNumber());
|
||||||
|
paramMap3.put("termsCode", eMap.get("termsNum"));
|
||||||
|
Map<String, Object> 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.setFunctionGroupName((String) objectMap2.get("groupingName"));
|
||||||
|
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());
|
||||||
|
|
||||||
|
insertDocumentList.add(lawsDocumentSplit);
|
||||||
|
lawsDocumentSplitMapper.insert(lawsDocumentSplit);
|
||||||
|
n[0]++;
|
||||||
|
});
|
||||||
|
infoMap.put(sarFileSplitInfoEO.getId(), insertDocumentList);
|
||||||
|
});
|
||||||
|
long time2 = System.currentTimeMillis();
|
||||||
|
log.info("=====================同步DocumentSplit条文数据:{}条,耗时:{}毫秒=====================", n[0], time2 - time1);
|
||||||
|
|
||||||
|
insertSplitList.forEach(sarFileSplitInfoEO -> {
|
||||||
|
String infoId = sarFileSplitInfoEO.getId();
|
||||||
|
List<LawsDocumentSplit> lawsDocumentSplitList = infoMap.get(infoId);
|
||||||
|
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);
|
||||||
|
});
|
||||||
|
long time3 = System.currentTimeMillis();
|
||||||
|
log.info("=====================生成拆分详情左侧目录耗时:{}毫秒=====================", time3 - time2);
|
||||||
|
|
||||||
|
insertSplitList.forEach(sarFileSplitInfoEO -> {
|
||||||
|
String infoId = sarFileSplitInfoEO.getId();
|
||||||
|
List<LawsDocumentSplit> lawsDocumentSplitList = infoMap.get(infoId);
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
long time4 = System.currentTimeMillis();
|
||||||
|
log.info("=====================生成条文详情耗时:{}毫秒=====================", time4 - time3);
|
||||||
|
|
||||||
|
long end = System.currentTimeMillis();
|
||||||
|
log.info("=====================全部同步完成,耗时:{} 毫秒=====================", end - start);
|
||||||
|
log.info("=====================定时任务同步结束=====================");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void upload(String url, String fileName, String fileType, String id, String code) {
|
||||||
|
InputStream inputStream = asmsPostUtil.getFileByteArray(url);
|
||||||
|
try {
|
||||||
|
MinioUtil.upload(inputStream, filePath + url);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new JeroBootException("文件上传错误");
|
||||||
|
}
|
||||||
|
OSSFile ossFile = new OSSFile();
|
||||||
|
ossFile.setFileName(fileName + "." + fileType);
|
||||||
|
ossFile.setUrl(filePath + url);
|
||||||
|
ossFile.setStandardId(id);
|
||||||
|
ossFile.setStandardNo(code);
|
||||||
|
ossFile.setStandardFileType("publish_of_original");
|
||||||
|
ossFileService.save(ossFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
private Date getSimpleDate(String dateStr) {
|
||||||
|
if (StringUtils.isBlank(dateStr)) return null;
|
||||||
|
try {
|
||||||
|
return simpleDateFormat.parse(dateStr);
|
||||||
|
} catch (ParseException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new JeroBootException("时间格式转换错误");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Date getSimpleDate2(String dateStr) {
|
||||||
|
if (StringUtils.isBlank(dateStr)) return null;
|
||||||
|
try {
|
||||||
|
return dateFormat.parse(dateStr);
|
||||||
|
} catch (ParseException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new JeroBootException("时间格式转换错误");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: liao
|
||||||
|
* @Date: 2023/10/23 15:57
|
||||||
|
* @Description: 获取多日期字符串
|
||||||
|
**/
|
||||||
|
private String getManyDateString(String oldManyDateString) {
|
||||||
|
if (StringUtils.isBlank(oldManyDateString)) return "";
|
||||||
|
List<String> oldValueList = Arrays.asList(oldManyDateString.split("、"));
|
||||||
|
// 使用正则表达式提取日期部分
|
||||||
|
Pattern pattern = Pattern.compile("\\d{4}年\\d{2}月\\d{2}日");
|
||||||
|
|
||||||
|
List<String> valueList = new java.util.ArrayList<>();
|
||||||
|
oldValueList.forEach(value -> {
|
||||||
|
Matcher matcher = pattern.matcher(value);
|
||||||
|
String dateStr;
|
||||||
|
if (matcher.find()) {
|
||||||
|
dateStr = matcher.group(0);
|
||||||
|
} else {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
Date parse = oldDateFormat.parse(dateStr);
|
||||||
|
String format = simpleDateFormat.format(parse);
|
||||||
|
valueList.add(format);
|
||||||
|
} catch (ParseException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
throw new JeroBootException("时间格式转换错误");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (valueList.size() == 1) {
|
||||||
|
// 如果只有一个日期值,则复制成两个,用于查询和排序
|
||||||
|
return valueList.get(0) + "," + valueList.get(0);
|
||||||
|
}
|
||||||
|
List<LocalDate> dateList = valueList.stream()
|
||||||
|
.map(LocalDate::parse) // 解析日期字符串为 LocalDate 对象
|
||||||
|
.sorted() // 按照日期大小进行排序
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
// 将排序后的 LocalDate 对象转换为字符串
|
||||||
|
List<String> sortedDateStrList = dateList.stream()
|
||||||
|
.map(LocalDate::toString)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
return String.join(",", sortedDateStrList);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: liao
|
||||||
|
* @Date: 2023/10/23 15:09
|
||||||
|
* @Description: 获取字典值
|
||||||
|
**/
|
||||||
|
private String getItemValues(String itemTexts, String dictId, List<SysDictItem> sysDictItemList) {
|
||||||
|
if (StringUtils.isBlank(itemTexts)) return "";
|
||||||
|
List<String> itemTextList = Arrays.asList(itemTexts.split(";"));
|
||||||
|
List<String> itemValues = sysDictItemList.stream()
|
||||||
|
.filter(sysDictItem -> itemTextList.contains(sysDictItem.getItemText()) && dictId.equals(sysDictItem.getDictId()))
|
||||||
|
.map(SysDictItem::getItemValue).collect(Collectors.toList());
|
||||||
|
return StringUtils.join(itemValues, ",");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
@@ -6,8 +6,11 @@ import java.text.DateFormat;
|
|||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -49,6 +52,48 @@ public class DateUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: liao
|
||||||
|
* @Date: 2023/11/3 14:16
|
||||||
|
* @Description: 获取某天的开始时间 00:00:00
|
||||||
|
**/
|
||||||
|
public static Date getDayStart(Date date) {
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
calendar.setTime(date);
|
||||||
|
|
||||||
|
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||||
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
|
calendar.set(Calendar.SECOND, 0);
|
||||||
|
return calendar.getTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: liao
|
||||||
|
* @Date: 2023/11/3 14:16
|
||||||
|
* @Description: 获取某天的结束时间 23.59.59.999999999
|
||||||
|
**/
|
||||||
|
public static Date getDayEnd(Date date) {
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
calendar.setTime(date);
|
||||||
|
|
||||||
|
calendar.set(Calendar.HOUR_OF_DAY, 23);
|
||||||
|
calendar.set(Calendar.MINUTE, 59);
|
||||||
|
calendar.set(Calendar.SECOND, 59);
|
||||||
|
return calendar.getTime();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @Author: liao
|
||||||
|
* @Date: 2023/11/3 14:31
|
||||||
|
* @Description: 将一个日期,加上n天,n可以是负数
|
||||||
|
**/
|
||||||
|
public static Date getDateAddDays(Date date, int n) {
|
||||||
|
Calendar calendar = Calendar.getInstance();
|
||||||
|
calendar.setTime(date);
|
||||||
|
calendar.add(Calendar.DAY_OF_MONTH, n);
|
||||||
|
return calendar.getTime();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @Author: liao
|
* @Author: liao
|
||||||
* @Date: 2023/10/31 10:42
|
* @Date: 2023/10/31 10:42
|
||||||
@@ -61,6 +106,8 @@ public class DateUtil {
|
|||||||
List<String> dayStrings = new ArrayList<>();
|
List<String> dayStrings = new ArrayList<>();
|
||||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
||||||
|
|
||||||
|
lastWeek = lastWeek.plusDays(1);
|
||||||
|
|
||||||
while (!lastWeek.isAfter(today)) {
|
while (!lastWeek.isAfter(today)) {
|
||||||
dayStrings.add(lastWeek.format(formatter));
|
dayStrings.add(lastWeek.format(formatter));
|
||||||
lastWeek = lastWeek.plusDays(1);
|
lastWeek = lastWeek.plusDays(1);
|
||||||
|
|||||||
Reference in New Issue
Block a user