add ASMS国内法规同步到业务表

This commit is contained in:
liao
2023-10-23 17:50:00 +08:00
parent 35b3c36807
commit 7d393a8885
3 changed files with 242 additions and 30 deletions
@@ -16,7 +16,7 @@
</foreach>
</delete>
<select id="getStandardTypeList" resultType="java.lang.String">
SELECT DISTINCT SUBSTRING_INDEX(ID, ' ', 1) AS first_part
SELECT DISTINCT SUBSTRING_INDEX(code, ' ', 1) AS standard_class
FROM laws_asms_domestic;
</select>
</mapper>
@@ -10,6 +10,11 @@ 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.AsmsPostUtil;
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.system.entity.SysDictItem;
import com.jero.modules.system.service.ISysDictItemService;
import com.spire.ms.System.Collections.ArrayList;
@@ -21,10 +26,12 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.jero.common.exception.JeroBootException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
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;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -53,6 +60,16 @@ public class LawsAsmsOpenApiServiceImpl extends ServiceImpl<LawsAsmsOpenApiMappe
private ILawsAsmsDomesticService lawsAsmsDomesticService;
@Autowired
private LawsAsmsOpenApiMapper lawsAsmsOpenApiMapper;
@Autowired
private ILawsStandardizationService lawsStandardizationService;
@Autowired
private ILawsDomesticStandardService lawsDomesticStandardService;
@Autowired
private ILawsReplacedStandardService lawsReplacedStandardService;
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日");
/**
* 分页查询
@@ -234,42 +251,46 @@ public class LawsAsmsOpenApiServiceImpl extends ServiceImpl<LawsAsmsOpenApiMappe
} else if ("2".equals(lawsAsmsOpenApi.getApiType())) {
// 如果是分标委
List<Map<String, String>> mapList = asmsPostUtil.sendGetReq(lawsAsmsOpenApi.getApiUrl(), map);
List<LawsStandardization> lawsStandardizationList = new ArrayList();
mapList.forEach(eMap -> {
LawsStandardization lawsStandardization = new LawsStandardization();
lawsStandardization.setType("2");
eMap.forEach((k,v) -> {
if ("code".equals(k)) {
lawsStandardization.setNum(v);
} else if ("name".equals(k)) {
lawsStandardization.setName(v);
} else if ("field".equals(k)) {
lawsStandardization.setWorkingArea(v);
}
});
lawsStandardizationList.add(lawsStandardization);
});
lawsStandardizationService.saveBatch(lawsStandardizationList);
// 状态设置为已同步
lawsAsmsOpenApi.setStatus("1");
} else if ("3".equals(lawsAsmsOpenApi.getApiType()) && "xiaobodata/openApi/domesticLaws/list".equals(lawsAsmsOpenApi.getApiUrl())) {
// 如果是国内法规,并且url为国内法规标准检索列表
List<Map<String, String>> mapList = asmsPostUtil.sendGetReq(lawsAsmsOpenApi.getApiUrl(), map);
Integer pageNo;
Integer pageSize;
if (CollectionUtils.isNotEmpty(mapList)) {
// 不为空则增加查询的分页
pageNo = Integer.valueOf(map.get("pageNo")) + 1;
List<LawsAsmsDomestic> lawsAsmsDomesticList = new ArrayList();
mapList.forEach(eMap -> {
LawsAsmsDomestic lawsAsmsDomestic = JSONObject.parseObject(JSONObject.toJSONString(eMap), LawsAsmsDomestic.class);
lawsAsmsDomestic.setId(lawsAsmsDomestic.getCode());
lawsAsmsDomestic.setCreateTimeString(eMap.get("createTime"));
lawsAsmsDomestic.setUpdateTimeString(eMap.get("updateTime"));
lawsAsmsDomestic.setFocalPointName(eMap.get("focalPoint"));
lawsAsmsDomestic.setSyncFlag("A");
lawsAsmsDomesticList.add(lawsAsmsDomestic);
});
lawsAsmsDomesticService.saveOrUpdateBatch(lawsAsmsDomesticList);
} else {
// 为空则全部置0
pageNo = 1;
// 已同步
lawsAsmsOpenApi.setStatus("1");
lawsAsmsDomesticService.saveBatch(lawsAsmsDomesticList);
}
map.put("pageNo", pageNo.toString());
String jsonString = JSON.toJSONString(map);
lawsAsmsOpenApi.setQueryParamJson(jsonString);
// 已同步
lawsAsmsOpenApi.setStatus("1");
log.info("{}同步成功{}条数据", lawsAsmsOpenApi.getApiName(), mapList.size());
} else if ("3".equals(lawsAsmsOpenApi.getApiType()) && "xiaobodata/openApi/domesticLaws/getInfo".equals(lawsAsmsOpenApi.getApiUrl())) {
// 如果是国内法规,并且url为国内法规标准基本信息
LambdaQueryWrapper<LawsAsmsDomestic> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.select(LawsAsmsDomestic::getCode);
queryWrapper.eq(LawsAsmsDomestic::getSyncFlag, "A");
List<LawsAsmsDomestic> lawsAsmsDomesticList = lawsAsmsDomesticService.list(queryWrapper);
List<LawsAsmsDomestic> lawsAsmsDomesticList = lawsAsmsDomesticService.list();
if (CollectionUtils.isEmpty(lawsAsmsDomesticList)) {
lawsAsmsOpenApi.setStatus("1");
}
@@ -277,13 +298,15 @@ public class LawsAsmsOpenApiServiceImpl extends ServiceImpl<LawsAsmsOpenApiMappe
if (CollectionUtils.isNotEmpty(lawsAsmsDomesticList)) {
Map<String, String> paramMap = new HashMap<>();
lawsAsmsDomesticList.forEach(lawsAsmsDomestic -> {
String code = lawsAsmsDomestic.getCode();
paramMap.put("lawCode", code);
paramMap.put("lawCode", lawsAsmsDomestic.getCode());
List<Map<String, String>> mapList = asmsPostUtil.sendGetReq(lawsAsmsOpenApi.getApiUrl(), paramMap);
LawsAsmsDomestic parseObject = JSONObject.parseObject(JSONObject.toJSONString(mapList.get(0)), LawsAsmsDomestic.class);
log.info(parseObject.toString());
parseObject.setSyncFlag("B");
parseObject.setId(code);
parseObject.setId(lawsAsmsDomestic.getId());
parseObject.setCreateTimeString(mapList.get(0).get("createTime"));
parseObject.setUpdateTimeString(mapList.get(0).get("updateTime"));
parseObject.setFocalPointName(mapList.get(0).get("focalPoint"));
updateList.add(parseObject);
});
lawsAsmsDomesticService.updateBatchById(updateList);
@@ -314,9 +337,33 @@ public class LawsAsmsOpenApiServiceImpl extends ServiceImpl<LawsAsmsOpenApiMappe
dictItem.setDelFlag(0);
// 排序
dictItem.setSortOrder(i + 1);
String standardType = standardTypeList.get(i);
dictItem.setItemValue(standardType);
String itemText;
switch (standardType) {
case "GB":
itemText = "强制性国家标准GB";
break;
case "GB/T":
itemText = "推荐性国家标准GB/T";
break;
case "QC/T":
itemText = "汽车行业标准QC/T";
break;
case "QCn":
itemText = "汽车行业标准QCn";
break;
case "HJ/T":
itemText = "环境保护行业标准HJ/T";
break;
case "GB/Z":
itemText = "国家职业卫生标准GB/Z";
break;
default:
itemText = standardType;
}
dictItem.setItemValue(standardTypeList.get(i));
dictItem.setItemText(standardTypeList.get(i));
dictItem.setItemText(itemText);
dictItemList.add(dictItem);
}
@@ -326,18 +373,178 @@ public class LawsAsmsOpenApiServiceImpl extends ServiceImpl<LawsAsmsOpenApiMappe
lawsAsmsOpenApi.setStatus("1");
} else if ("4".equals(lawsAsmsOpenApi.getApiType()) && "B".equals(lawsAsmsOpenApi.getApiUrl())) {
// 国内法规同步到业务表
List<LawsAsmsDomestic> lawsAsmsDomesticList = lawsAsmsDomesticService.list();
LambdaQueryWrapper<LawsAsmsDomestic> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.orderByAsc(LawsAsmsDomestic::getId);
List<LawsAsmsDomestic> lawsAsmsDomesticList = lawsAsmsDomesticService.list(queryWrapper);
List<SysDictItem> sysDictItemList = sysDictItemService.list();
List<LawsStandardization> lawsStandardizationList = lawsStandardizationService.list();
List<LawsDomesticStandard> lawsDomesticStandardList = new ArrayList();
lawsAsmsDomesticList.forEach(lawsAsmsDomestic -> {
String[] parts = lawsAsmsDomestic.getCode().split("[-\\s]"); // 使用空格或破折号作为分隔符
if (parts.length < 3) {
parts = lawsAsmsDomestic.getCode().split("[—\\s]"); // 使用空格或破折号作为分隔符
}
// 封装实例
LawsDomesticStandard lawsDomesticStandard = new LawsDomesticStandard();
// 主键
lawsDomesticStandard.setId(lawsAsmsDomestic.getId());
// 对接标识
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()));
// 代替标准号
if (StringUtils.isNotBlank(lawsAsmsDomestic.getReplaceCode())) {
List<String> replaceCodeList = Arrays.asList(lawsAsmsDomestic.getReplaceCode().split(";"));
replaceCodeList.forEach(replaceCode -> {
lawsReplacedStandardService.addRelation(replaceCode, 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()));
lawsDomesticStandardService.save(lawsDomesticStandard);
lawsDomesticStandardList.add(lawsDomesticStandard);
});
// 状态设置为已同步
lawsAsmsOpenApi.setStatus("1");
log.info("{}同步成功{}条数据", lawsAsmsOpenApi.getApiName(), lawsDomesticStandardList.size());
}
});
// 同步接口的状态
updateBatchById(lawsAsmsOpenApiList);
}
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, ",");
}
/**
* @Author: liao
* @Date: 2023/10/18 16:20