add ASMS国内法规同步到业务表
This commit is contained in:
+1
-1
@@ -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>
|
||||
+236
-29
@@ -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
|
||||
|
||||
+5
@@ -205,4 +205,9 @@ public class LawsDomesticStandard implements Serializable {
|
||||
@Excel(name = "草案", width = 15)
|
||||
@ApiModelProperty(value = "草案")
|
||||
private java.lang.String draft;
|
||||
|
||||
/**是否ASMS导入(1是)*/
|
||||
private String isAsmsImport;
|
||||
/**标准号*/
|
||||
private String standardNumberTemp;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user