From 8dd1bf5ed849126340eba6decaeb67a0d6eb5dc2 Mon Sep 17 00:00:00 2001 From: cwchen <1048842385@qq.com> Date: Mon, 17 Nov 2025 14:53:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=BC=82=E5=B8=B8=E6=B6=88=E6=81=AF=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E4=BB=BB=E5=8A=A1=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/IMDErrorInfoMapper.java | 10 ++ .../service/IMDErrorInfoService.java | 10 ++ .../service/impl/MDEnterpriseServiceImpl.java | 7 + .../service/impl/MDErrorInfoServiceImpl.java | 5 + .../resources/mapper/EnterpriseMapper.xml | 9 +- .../main/resources/mapper/ErrorInfoMapper.xml | 11 ++ .../quartz/task/ScanCertificateTask.java | 135 ++++++++++++++++-- 7 files changed, 173 insertions(+), 14 deletions(-) diff --git a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/mapper/IMDErrorInfoMapper.java b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/mapper/IMDErrorInfoMapper.java index 32acdf8..04e43a2 100644 --- a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/mapper/IMDErrorInfoMapper.java +++ b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/mapper/IMDErrorInfoMapper.java @@ -65,4 +65,14 @@ public interface IMDErrorInfoMapper { * @date 2025/11/17 13:28 */ List getErrorInfoByTable(ErrorInfo errorQueryDto); + + /** + * 根据业务id和来源表查询已存在的异常消息 + * @param businessIds + * @param tableName + * @return List + * @author cwchen + * @date 2025/11/17 14:29 + */ + List getErrorInfoByBusiness(@Param("list") List businessIds,@Param("tableName") String tableName); } diff --git a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/IMDErrorInfoService.java b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/IMDErrorInfoService.java index 1f7be1b..d02a1b9 100644 --- a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/IMDErrorInfoService.java +++ b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/IMDErrorInfoService.java @@ -63,4 +63,14 @@ public interface IMDErrorInfoService { * @date 2025/11/17 13:28 */ List getErrorInfoByTable(ErrorInfo errorQueryDto); + + /** + * 根据业务id和来源表查询已存在的异常消息 + * @param businessIds + * @param tbEnterprise + * @return List + * @author cwchen + * @date 2025/11/17 14:28 + */ + List getErrorInfoByBusiness(List businessIds, String tbEnterprise); } diff --git a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/MDEnterpriseServiceImpl.java b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/MDEnterpriseServiceImpl.java index 62612be..e82550e 100644 --- a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/MDEnterpriseServiceImpl.java +++ b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/MDEnterpriseServiceImpl.java @@ -84,11 +84,18 @@ public class MDEnterpriseServiceImpl implements IMDEnterpriseService { List list = Optional.ofNullable(imdEnterpriseMapper.queryExpiredCertificate()).orElse(new ArrayList<>()); if(CollectionUtils.isNotEmpty(list)){ for (EnterpriseVo.EnterpriseDetailVo vo : list) { + // 身份证 ErrorInfo errorInfo = CertificateUtil.checkCertificateState(vo.getIdCardStartDate(), CertificateConstants.NATIONAL_EMBLEM_ID_CARD, vo.getEnterpriseId(), vo.getEnterpriseId(), TableConstants.TB_ENTERPRISE); + // 营业执照 + ErrorInfo errorInfo2 = CertificateUtil.checkCertificateState(vo.getBusinessTerm(), CertificateConstants.BUSINESS_LICENSE, + vo.getEnterpriseId(), vo.getEnterpriseId(), TableConstants.TB_ENTERPRISE); if(Objects.nonNull(errorInfo)){ errorInfos.add(errorInfo); } + if(Objects.nonNull(errorInfo2)){ + errorInfos.add(errorInfo2); + } } } return errorInfos; diff --git a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/MDErrorInfoServiceImpl.java b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/MDErrorInfoServiceImpl.java index 2e35820..ea0beb6 100644 --- a/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/MDErrorInfoServiceImpl.java +++ b/bonus-mainDatabase/src/main/java/com/bonus/mainDataBase/service/impl/MDErrorInfoServiceImpl.java @@ -49,4 +49,9 @@ public class MDErrorInfoServiceImpl implements IMDErrorInfoService { public List getErrorInfoByTable(ErrorInfo errorQueryDto) { return imdErrorInfoMapper.getErrorInfoByTable(errorQueryDto); } + + @Override + public List getErrorInfoByBusiness(List businessIds, String tableName) { + return imdErrorInfoMapper.getErrorInfoByBusiness(businessIds,tableName); + } } diff --git a/bonus-mainDatabase/src/main/resources/mapper/EnterpriseMapper.xml b/bonus-mainDatabase/src/main/resources/mapper/EnterpriseMapper.xml index 82463a6..29f5979 100644 --- a/bonus-mainDatabase/src/main/resources/mapper/EnterpriseMapper.xml +++ b/bonus-mainDatabase/src/main/resources/mapper/EnterpriseMapper.xml @@ -146,9 +146,10 @@ diff --git a/bonus-mainDatabase/src/main/resources/mapper/ErrorInfoMapper.xml b/bonus-mainDatabase/src/main/resources/mapper/ErrorInfoMapper.xml index 4bd8543..b553949 100644 --- a/bonus-mainDatabase/src/main/resources/mapper/ErrorInfoMapper.xml +++ b/bonus-mainDatabase/src/main/resources/mapper/ErrorInfoMapper.xml @@ -63,4 +63,15 @@ + + + diff --git a/bonus-quartz/src/main/java/com/bonus/quartz/task/ScanCertificateTask.java b/bonus-quartz/src/main/java/com/bonus/quartz/task/ScanCertificateTask.java index 21e79c7..a52fdf8 100644 --- a/bonus-quartz/src/main/java/com/bonus/quartz/task/ScanCertificateTask.java +++ b/bonus-quartz/src/main/java/com/bonus/quartz/task/ScanCertificateTask.java @@ -1,5 +1,6 @@ package com.bonus.quartz.task; +import com.bonus.common.constant.TableConstants; import com.bonus.common.domain.mainDatabase.po.ErrorInfo; import com.bonus.mainDataBase.service.IMDEnterpriseService; import com.bonus.mainDataBase.service.IMDErrorInfoService; @@ -9,8 +10,8 @@ import org.apache.commons.collections4.CollectionUtils; import org.springframework.stereotype.Component; import javax.annotation.Resource; -import java.util.ArrayList; -import java.util.List; +import java.util.*; +import java.util.stream.Collectors; /** * @className:Scan @@ -36,17 +37,131 @@ public class ScanCertificateTask { log.info("开始扫描证件是否过期"); List totalList = new ArrayList<>(); // 主体库 - List enterpriselist = imdEnterpriseService.queryExpiredCertificate(); - if(CollectionUtils.isNotEmpty(enterpriselist)) { - totalList.addAll(enterpriselist); + List enterpriseErrorInfos = handleDataByType(TableConstants.TB_ENTERPRISE); + if (CollectionUtils.isEmpty(enterpriseErrorInfos)) { + totalList.addAll(enterpriseErrorInfos); } - // 人员库 - List personnellist = imdPersonnelService.queryExpiredCertificate(); - if(CollectionUtils.isNotEmpty(personnellist)) { - totalList.addAll(personnellist); + // 人员证件库 + List personnelErrorInfos = handleDataByType(TableConstants.TB_PERSONNEL_CERTIFICATE); + if (CollectionUtils.isEmpty(personnelErrorInfos)) { + totalList.addAll(personnelErrorInfos); } - if(CollectionUtils.isNotEmpty(totalList)) { + if (CollectionUtils.isNotEmpty(totalList)) { imdErrorInfoService.addErrorInfo(totalList); } } + + public List handleDataByType(String type) { + List errorInfos = new ArrayList<>(); + switch (type) { + case TableConstants.TB_ENTERPRISE: // 主体库 + List enterpriseList = handleEnterpriseErrorInfo(); + errorInfos.addAll(enterpriseList); + break; + case TableConstants.TB_PERSONNEL_CERTIFICATE: // 人员证件 + List personnelCertificateList = handlePersonnelCertificateErrorInfo(); + errorInfos.addAll(personnelCertificateList); + break; + default: + break; + } + return errorInfos; + } + + /** + * 处理主体库证件过期异常数据 + * + * @return List + * @author cwchen + * @date 2025/11/17 14:41 + */ + public List handleEnterpriseErrorInfo() { + List expiredList = imdEnterpriseService.queryExpiredCertificate(); + return filterNotExistErrorInfo(expiredList, TableConstants.TB_ENTERPRISE); + } + + /** + * 处理人员证件过期异常数据 + * + * @return List + * @author cwchen + * @date 2025/11/17 14:50 + */ + private List handlePersonnelCertificateErrorInfo() { + List expiredList = imdPersonnelService.queryExpiredCertificate(); + return filterNotExistErrorInfo(expiredList, TableConstants.TB_PERSONNEL_CERTIFICATE); + } + + /** + * 公共方法:过滤掉已存在的异常信息 + * + * @param expiredList 过期证件列表 + * @param sourceTable 来源表 + * @return 不存在的异常信息列表 + */ + private List filterNotExistErrorInfo(List expiredList, String sourceTable) { + if (CollectionUtils.isEmpty(expiredList)) { + return Collections.emptyList(); // 返回空集合而不是null,避免NPE + } + + // 提取业务ID并去重 + List businessIds = extractBusinessIds(expiredList); + if (CollectionUtils.isEmpty(businessIds)) { + return expiredList; // 如果没有有效的businessId,返回所有记录 + } + + // 查询已存在的异常信息 + List existErrorInfo = imdErrorInfoService.getErrorInfoByBusiness(businessIds, sourceTable); + + // 筛选出不存在的记录 + return filterNotExistRecords(expiredList, existErrorInfo); + } + + /** + * 从错误信息列表中提取业务ID并去重 + */ + private List extractBusinessIds(List errorInfoList) { + return errorInfoList.stream() + .map(ErrorInfo::getBusinessId) + .filter(Objects::nonNull) + .distinct() + .collect(Collectors.toList()); + } + + /** + * 筛选出不存在的记录 + */ + private List filterNotExistRecords(List sourceList, List existList) { + if (CollectionUtils.isEmpty(existList)) { + return new ArrayList<>(sourceList); // 如果没有已存在的记录,返回所有源记录 + } + + // 创建存在的记录的键值集合 + Set existKeys = buildExistKeys(existList); + + // 筛选出不存在的记录 + return sourceList.stream() + .filter(item -> !existKeys.contains(buildKey(item))) + .collect(Collectors.toList()); + } + + /** + * 构建已存在记录的键集合 + */ + private Set buildExistKeys(List existList) { + return existList.stream() + .map(this::buildKey) + .collect(Collectors.toSet()); + } + + /** + * 构建记录的唯一键 + */ + private String buildKey(ErrorInfo errorInfo) { + return String.join("|", + String.valueOf(errorInfo.getBusinessId()), + Objects.toString(errorInfo.getBusinessType(), ""), + Objects.toString(errorInfo.getSourceTable(), "") + ); + } }