From 7d393a888596d28bc5c27020d99dc6322658cbdd Mon Sep 17 00:00:00 2001 From: liao Date: Mon, 23 Oct 2023 17:50:00 +0800 Subject: [PATCH] =?UTF-8?q?add=20ASMS=E5=9B=BD=E5=86=85=E6=B3=95=E8=A7=84?= =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=88=B0=E4=B8=9A=E5=8A=A1=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../asms/mapper/xml/LawsAsmsOpenApiMapper.xml | 2 +- .../impl/LawsAsmsOpenApiServiceImpl.java | 265 ++++++++++++++++-- .../standard/entity/LawsDomesticStandard.java | 5 + 3 files changed, 242 insertions(+), 30 deletions(-) diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/mapper/xml/LawsAsmsOpenApiMapper.xml b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/mapper/xml/LawsAsmsOpenApiMapper.xml index 36389461..611903f7 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/mapper/xml/LawsAsmsOpenApiMapper.xml +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/mapper/xml/LawsAsmsOpenApiMapper.xml @@ -16,7 +16,7 @@ \ No newline at end of file diff --git a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/LawsAsmsOpenApiServiceImpl.java b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/LawsAsmsOpenApiServiceImpl.java index d57b7cec..bdc1cb14 100644 --- a/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/LawsAsmsOpenApiServiceImpl.java +++ b/laws-modules-docking/src/main/java/com/jero/modules/docking/asms/service/impl/LawsAsmsOpenApiServiceImpl.java @@ -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> mapList = asmsPostUtil.sendGetReq(lawsAsmsOpenApi.getApiUrl(), map); + List 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> mapList = asmsPostUtil.sendGetReq(lawsAsmsOpenApi.getApiUrl(), map); - Integer pageNo; - Integer pageSize; if (CollectionUtils.isNotEmpty(mapList)) { - // 不为空则增加查询的分页 - pageNo = Integer.valueOf(map.get("pageNo")) + 1; List 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 queryWrapper = new LambdaQueryWrapper<>(); - queryWrapper.select(LawsAsmsDomestic::getCode); - queryWrapper.eq(LawsAsmsDomestic::getSyncFlag, "A"); - List lawsAsmsDomesticList = lawsAsmsDomesticService.list(queryWrapper); + List lawsAsmsDomesticList = lawsAsmsDomesticService.list(); if (CollectionUtils.isEmpty(lawsAsmsDomesticList)) { lawsAsmsOpenApi.setStatus("1"); } @@ -277,13 +298,15 @@ public class LawsAsmsOpenApiServiceImpl extends ServiceImpl paramMap = new HashMap<>(); lawsAsmsDomesticList.forEach(lawsAsmsDomestic -> { - String code = lawsAsmsDomestic.getCode(); - paramMap.put("lawCode", code); + paramMap.put("lawCode", lawsAsmsDomestic.getCode()); List> 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 lawsAsmsDomesticList = lawsAsmsDomesticService.list(); + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.orderByAsc(LawsAsmsDomestic::getId); + List lawsAsmsDomesticList = lawsAsmsDomesticService.list(queryWrapper); + List sysDictItemList = sysDictItemService.list(); + List lawsStandardizationList = lawsStandardizationService.list(); + List 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 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 oldValueList = Arrays.asList(oldManyDateString.split("、")); + // 使用正则表达式提取日期部分 + Pattern pattern = Pattern.compile("\\d{4}年\\d{2}月\\d{2}日"); + + List 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 dateList = valueList.stream() + .map(LocalDate::parse) // 解析日期字符串为 LocalDate 对象 + .sorted() // 按照日期大小进行排序 + .collect(Collectors.toList()); + + // 将排序后的 LocalDate 对象转换为字符串 + List 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 sysDictItemList) { + if (StringUtils.isBlank(itemTexts)) return ""; + List itemTextList = Arrays.asList(itemTexts.split(";")); + List 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 diff --git a/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/LawsDomesticStandard.java b/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/LawsDomesticStandard.java index d3352bd0..98a659bd 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/LawsDomesticStandard.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/standard/entity/LawsDomesticStandard.java @@ -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; }