异常消息定时任务处理

This commit is contained in:
cwchen 2025-11-17 14:53:56 +08:00
parent b49b7d63c7
commit 8dd1bf5ed8
7 changed files with 173 additions and 14 deletions

View File

@ -65,4 +65,14 @@ public interface IMDErrorInfoMapper {
* @date 2025/11/17 13:28 * @date 2025/11/17 13:28
*/ */
List<String> getErrorInfoByTable(ErrorInfo errorQueryDto); List<String> getErrorInfoByTable(ErrorInfo errorQueryDto);
/**
* 根据业务id和来源表查询已存在的异常消息
* @param businessIds
* @param tableName
* @return List<ErrorInfo>
* @author cwchen
* @date 2025/11/17 14:29
*/
List<ErrorInfo> getErrorInfoByBusiness(@Param("list") List<Long> businessIds,@Param("tableName") String tableName);
} }

View File

@ -63,4 +63,14 @@ public interface IMDErrorInfoService {
* @date 2025/11/17 13:28 * @date 2025/11/17 13:28
*/ */
List<String> getErrorInfoByTable(ErrorInfo errorQueryDto); List<String> getErrorInfoByTable(ErrorInfo errorQueryDto);
/**
* 根据业务id和来源表查询已存在的异常消息
* @param businessIds
* @param tbEnterprise
* @return List<ErrorInfo>
* @author cwchen
* @date 2025/11/17 14:28
*/
List<ErrorInfo> getErrorInfoByBusiness(List<Long> businessIds, String tbEnterprise);
} }

View File

@ -84,11 +84,18 @@ public class MDEnterpriseServiceImpl implements IMDEnterpriseService {
List<EnterpriseVo.EnterpriseDetailVo> list = Optional.ofNullable(imdEnterpriseMapper.queryExpiredCertificate()).orElse(new ArrayList<>()); List<EnterpriseVo.EnterpriseDetailVo> list = Optional.ofNullable(imdEnterpriseMapper.queryExpiredCertificate()).orElse(new ArrayList<>());
if(CollectionUtils.isNotEmpty(list)){ if(CollectionUtils.isNotEmpty(list)){
for (EnterpriseVo.EnterpriseDetailVo vo : list) { for (EnterpriseVo.EnterpriseDetailVo vo : list) {
// 身份证
ErrorInfo errorInfo = CertificateUtil.checkCertificateState(vo.getIdCardStartDate(), CertificateConstants.NATIONAL_EMBLEM_ID_CARD, ErrorInfo errorInfo = CertificateUtil.checkCertificateState(vo.getIdCardStartDate(), CertificateConstants.NATIONAL_EMBLEM_ID_CARD,
vo.getEnterpriseId(), vo.getEnterpriseId(), TableConstants.TB_ENTERPRISE); 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)){ if(Objects.nonNull(errorInfo)){
errorInfos.add(errorInfo); errorInfos.add(errorInfo);
} }
if(Objects.nonNull(errorInfo2)){
errorInfos.add(errorInfo2);
}
} }
} }
return errorInfos; return errorInfos;

View File

@ -49,4 +49,9 @@ public class MDErrorInfoServiceImpl implements IMDErrorInfoService {
public List<String> getErrorInfoByTable(ErrorInfo errorQueryDto) { public List<String> getErrorInfoByTable(ErrorInfo errorQueryDto) {
return imdErrorInfoMapper.getErrorInfoByTable(errorQueryDto); return imdErrorInfoMapper.getErrorInfoByTable(errorQueryDto);
} }
@Override
public List<ErrorInfo> getErrorInfoByBusiness(List<Long> businessIds, String tableName) {
return imdErrorInfoMapper.getErrorInfoByBusiness(businessIds,tableName);
}
} }

View File

@ -146,9 +146,10 @@
<!--查询主体库过期证件--> <!--查询主体库过期证件-->
<select id="queryExpiredCertificate" resultType="com.bonus.common.domain.mainDatabase.vo.EnterpriseVo$EnterpriseDetailVo"> <select id="queryExpiredCertificate" resultType="com.bonus.common.domain.mainDatabase.vo.EnterpriseVo$EnterpriseDetailVo">
SELECT enterprise_id AS enterpriseId, SELECT te.enterprise_id AS enterpriseId,
id_card_start_date AS idCardStartDate te.id_card_start_date AS idCardStartDate,
FROM tb_enterprise te.business_term AS businessTerm
WHERE del_flag = '0' FROM tb_enterprise te
WHERE te.del_flag = '0'
</select> </select>
</mapper> </mapper>

View File

@ -63,4 +63,15 @@
<select id="getErrorInfoByTable" resultType="java.lang.String"> <select id="getErrorInfoByTable" resultType="java.lang.String">
SELECT error_content FROM tb_error_info WHERE source_table = #{sourceTable} AND business_id = #{businessId} SELECT error_content FROM tb_error_info WHERE source_table = #{sourceTable} AND business_id = #{businessId}
</select> </select>
<!--根据业务id和来源表查询已存在的异常消息-->
<select id="getErrorInfoByBusiness" resultType="com.bonus.common.domain.mainDatabase.po.ErrorInfo">
SELECT business_id AS businessId,
business_type AS businessType,
source_table AS sourceTable
FROM tb_error_info WHERE source_table = #{tableName} AND business_id IN
<foreach collection="list" open="(" close=")" item="item">
#{item}
</foreach>
</select>
</mapper> </mapper>

View File

@ -1,5 +1,6 @@
package com.bonus.quartz.task; package com.bonus.quartz.task;
import com.bonus.common.constant.TableConstants;
import com.bonus.common.domain.mainDatabase.po.ErrorInfo; import com.bonus.common.domain.mainDatabase.po.ErrorInfo;
import com.bonus.mainDataBase.service.IMDEnterpriseService; import com.bonus.mainDataBase.service.IMDEnterpriseService;
import com.bonus.mainDataBase.service.IMDErrorInfoService; import com.bonus.mainDataBase.service.IMDErrorInfoService;
@ -9,8 +10,8 @@ import org.apache.commons.collections4.CollectionUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.*;
import java.util.List; import java.util.stream.Collectors;
/** /**
* @className:Scan * @className:Scan
@ -36,17 +37,131 @@ public class ScanCertificateTask {
log.info("开始扫描证件是否过期"); log.info("开始扫描证件是否过期");
List<ErrorInfo> totalList = new ArrayList<>(); List<ErrorInfo> totalList = new ArrayList<>();
// 主体库 // 主体库
List<ErrorInfo> enterpriselist = imdEnterpriseService.queryExpiredCertificate(); List<ErrorInfo> enterpriseErrorInfos = handleDataByType(TableConstants.TB_ENTERPRISE);
if(CollectionUtils.isNotEmpty(enterpriselist)) { if (CollectionUtils.isEmpty(enterpriseErrorInfos)) {
totalList.addAll(enterpriselist); totalList.addAll(enterpriseErrorInfos);
} }
// 人员 // 人员证件
List<ErrorInfo> personnellist = imdPersonnelService.queryExpiredCertificate(); List<ErrorInfo> personnelErrorInfos = handleDataByType(TableConstants.TB_PERSONNEL_CERTIFICATE);
if(CollectionUtils.isNotEmpty(personnellist)) { if (CollectionUtils.isEmpty(personnelErrorInfos)) {
totalList.addAll(personnellist); totalList.addAll(personnelErrorInfos);
} }
if(CollectionUtils.isNotEmpty(totalList)) { if (CollectionUtils.isNotEmpty(totalList)) {
imdErrorInfoService.addErrorInfo(totalList); imdErrorInfoService.addErrorInfo(totalList);
} }
} }
public List<ErrorInfo> handleDataByType(String type) {
List<ErrorInfo> errorInfos = new ArrayList<>();
switch (type) {
case TableConstants.TB_ENTERPRISE: // 主体库
List<ErrorInfo> enterpriseList = handleEnterpriseErrorInfo();
errorInfos.addAll(enterpriseList);
break;
case TableConstants.TB_PERSONNEL_CERTIFICATE: // 人员证件
List<ErrorInfo> personnelCertificateList = handlePersonnelCertificateErrorInfo();
errorInfos.addAll(personnelCertificateList);
break;
default:
break;
}
return errorInfos;
}
/**
* 处理主体库证件过期异常数据
*
* @return List<ErrorInfo>
* @author cwchen
* @date 2025/11/17 14:41
*/
public List<ErrorInfo> handleEnterpriseErrorInfo() {
List<ErrorInfo> expiredList = imdEnterpriseService.queryExpiredCertificate();
return filterNotExistErrorInfo(expiredList, TableConstants.TB_ENTERPRISE);
}
/**
* 处理人员证件过期异常数据
*
* @return List<ErrorInfo>
* @author cwchen
* @date 2025/11/17 14:50
*/
private List<ErrorInfo> handlePersonnelCertificateErrorInfo() {
List<ErrorInfo> expiredList = imdPersonnelService.queryExpiredCertificate();
return filterNotExistErrorInfo(expiredList, TableConstants.TB_PERSONNEL_CERTIFICATE);
}
/**
* 公共方法过滤掉已存在的异常信息
*
* @param expiredList 过期证件列表
* @param sourceTable 来源表
* @return 不存在的异常信息列表
*/
private List<ErrorInfo> filterNotExistErrorInfo(List<ErrorInfo> expiredList, String sourceTable) {
if (CollectionUtils.isEmpty(expiredList)) {
return Collections.emptyList(); // 返回空集合而不是null避免NPE
}
// 提取业务ID并去重
List<Long> businessIds = extractBusinessIds(expiredList);
if (CollectionUtils.isEmpty(businessIds)) {
return expiredList; // 如果没有有效的businessId返回所有记录
}
// 查询已存在的异常信息
List<ErrorInfo> existErrorInfo = imdErrorInfoService.getErrorInfoByBusiness(businessIds, sourceTable);
// 筛选出不存在的记录
return filterNotExistRecords(expiredList, existErrorInfo);
}
/**
* 从错误信息列表中提取业务ID并去重
*/
private List<Long> extractBusinessIds(List<ErrorInfo> errorInfoList) {
return errorInfoList.stream()
.map(ErrorInfo::getBusinessId)
.filter(Objects::nonNull)
.distinct()
.collect(Collectors.toList());
}
/**
* 筛选出不存在的记录
*/
private List<ErrorInfo> filterNotExistRecords(List<ErrorInfo> sourceList, List<ErrorInfo> existList) {
if (CollectionUtils.isEmpty(existList)) {
return new ArrayList<>(sourceList); // 如果没有已存在的记录返回所有源记录
}
// 创建存在的记录的键值集合
Set<String> existKeys = buildExistKeys(existList);
// 筛选出不存在的记录
return sourceList.stream()
.filter(item -> !existKeys.contains(buildKey(item)))
.collect(Collectors.toList());
}
/**
* 构建已存在记录的键集合
*/
private Set<String> buildExistKeys(List<ErrorInfo> 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(), "")
);
}
} }