【feat】 优化RecorceType反写,优化数据质量校验增加忽略开始i时间

(cherry picked from commit 46bb968e11)
This commit is contained in:
Kris 2025-10-14 10:15:04 +08:00
parent aca16ebe7b
commit 51dd28b1fc
4 changed files with 33 additions and 11 deletions

View File

@ -204,7 +204,7 @@ public class DataDumpNewJob {
dataImportNewService.getNewIdByField(api,"DeveloperName,Type"); dataImportNewService.getNewIdByField(api,"DeveloperName,Type");
break; break;
case "RecordType": case "RecordType":
dataImportNewService.getNewIdByField(api,"DeveloperName,SObjectType"); dataImportNewService.getNewIdByField(api,"DeveloperName,SobjectType");
break; break;
case "AccountContactRelation": case "AccountContactRelation":
dataImportNewService.getNewIdByField(api,"AccountId,ContactId"); dataImportNewService.getNewIdByField(api,"AccountId,ContactId");

View File

@ -56,4 +56,9 @@ public class DataVerifyParam {
@ApiModelProperty(value = "结束时间", hidden = true) @ApiModelProperty(value = "结束时间", hidden = true)
private Date endDate; private Date endDate;
@ApiModelProperty(value = "忽略开始时间", hidden = true)
private Date ignoreBeginDate;
} }

View File

@ -459,7 +459,7 @@ public class DataImportServiceImpl implements DataImportService {
} catch (InterruptedException interruptedException){ } catch (InterruptedException interruptedException){
return; return;
} catch (Exception e) { } catch (Exception e) {
log.info(JSON.toJSONString(e.getMessage())); log.info(JSON.toJSONString(e.getMessage()),e);
} }
} }

View File

@ -421,7 +421,7 @@ public class DataVerifyServiceImpl implements DataVerifyService {
log.info("开始时间: {}", new Date(startTime)); log.info("开始时间: {}", new Date(startTime));
try { try {
performQualityCheckAndWriteToExcel(dataObjects, sourceConnect, targetConnect, filePath, param.getSendEmail(),param.getType()); performQualityCheckAndWriteToExcel(dataObjects, sourceConnect, targetConnect, filePath, param.getSendEmail(),param.getType(),param.getIgnoreBeginDate());
long endTime = System.currentTimeMillis(); long endTime = System.currentTimeMillis();
log.info("数据质量校验执行完成,耗时: {} ms", endTime - startTime); log.info("数据质量校验执行完成,耗时: {} ms", endTime - startTime);
} catch (Exception e) { } catch (Exception e) {
@ -500,7 +500,7 @@ public class DataVerifyServiceImpl implements DataVerifyService {
private void performQualityCheckAndWriteToExcel(List<DataObject> dataObjects, private void performQualityCheckAndWriteToExcel(List<DataObject> dataObjects,
PartnerConnection sourceConn, PartnerConnection sourceConn,
PartnerConnection targetConn, PartnerConnection targetConn,
String filePath, boolean sendEmail ,Integer type) throws Exception { String filePath, boolean sendEmail ,Integer type, Date ignoreBeginDate) throws Exception {
try (ExcelWriter excelWriter = EasyExcel.write(filePath).build()) { try (ExcelWriter excelWriter = EasyExcel.write(filePath).build()) {
// 1. 创建汇总 Sheet // 1. 创建汇总 Sheet
WriteSheet summarySheet = createSummarySheet(excelWriter); WriteSheet summarySheet = createSummarySheet(excelWriter);
@ -510,7 +510,7 @@ public class DataVerifyServiceImpl implements DataVerifyService {
List<Future<?>> futures = Lists.newArrayList(); List<Future<?>> futures = Lists.newArrayList();
dataObjects.forEach(dataObject -> { dataObjects.forEach(dataObject -> {
Future<?> future = salesforceExecutor.execute(() -> { Future<?> future = salesforceExecutor.execute(() -> {
processDataObject(dataObject, excelWriter, summarySheet, fieldTypeSheet, sourceConn, targetConn, sendEmail, type); processDataObject(dataObject, excelWriter, summarySheet, fieldTypeSheet, sourceConn, targetConn, sendEmail, type, ignoreBeginDate);
}, 1, 1); }, 1, 1);
futures.add(future); futures.add(future);
}); });
@ -560,7 +560,7 @@ public class DataVerifyServiceImpl implements DataVerifyService {
*/ */
private void processDataObject(DataObject dataObject, ExcelWriter excelWriter, WriteSheet summarySheet, private void processDataObject(DataObject dataObject, ExcelWriter excelWriter, WriteSheet summarySheet,
WriteSheet fieldTypeSheet, PartnerConnection sourceConn, WriteSheet fieldTypeSheet, PartnerConnection sourceConn,
PartnerConnection targetConn, boolean sendEmail, Integer type) { PartnerConnection targetConn, boolean sendEmail, Integer type, Date ignoreBeginDate) {
// 1. 准备对象相关信息 // 1. 准备对象相关信息
String objectApi = dataObject.getName(); String objectApi = dataObject.getName();
List<DataField> fields = getVerifiableFields(objectApi); List<DataField> fields = getVerifiableFields(objectApi);
@ -574,7 +574,6 @@ public class DataVerifyServiceImpl implements DataVerifyService {
String qualityCheckFilePath = generateObjectQualityCheckFilePath(objectApi); String qualityCheckFilePath = generateObjectQualityCheckFilePath(objectApi);
// 3. 处理每个批次 // 3. 处理每个批次
List<DataBatch> batches = getDataBatches(objectApi); List<DataBatch> batches = getDataBatches(objectApi);
log.info("对象: {} 待同步的批次数量: {}", objectApi, batches.size()); log.info("对象: {} 待同步的批次数量: {}", objectApi, batches.size());
@ -587,7 +586,7 @@ public class DataVerifyServiceImpl implements DataVerifyService {
String batchQualityCheckFilePath = generateObjectQualityCheckFilePath(objectApi + "_" + batch.getId()); String batchQualityCheckFilePath = generateObjectQualityCheckFilePath(objectApi + "_" + batch.getId());
try (ExcelWriter objectWriter = EasyExcel.write(batchQualityCheckFilePath).build()) { try (ExcelWriter objectWriter = EasyExcel.write(batchQualityCheckFilePath).build()) {
WriteSheet detailSheet = createDetailSheet(excelWriter, dataObject); WriteSheet detailSheet = createDetailSheet(excelWriter, dataObject);
batchHasError = processDataBatch(batch, objectApi, fields, excelWriter, objectWriter, summarySheet, detailSheet, sourceConn, targetConn, fieldMap) || batchHasError; batchHasError = processDataBatch(batch, objectApi, fields, excelWriter, objectWriter, summarySheet, detailSheet, sourceConn, targetConn, fieldMap, ignoreBeginDate) || batchHasError;
}catch (Exception e){ }catch (Exception e){
log.error("API={},批次ID={}处理异常:{}",objectApi,batch.getId(), e.getMessage(),e); log.error("API={},批次ID={}处理异常:{}",objectApi,batch.getId(), e.getMessage(),e);
} }
@ -609,7 +608,7 @@ public class DataVerifyServiceImpl implements DataVerifyService {
WriteSheet detailSheet = createDetailSheet(excelWriter, dataObject); WriteSheet detailSheet = createDetailSheet(excelWriter, dataObject);
for (DataBatch batch : batches) { for (DataBatch batch : batches) {
hasError = processDataBatch(batch, objectApi, fields, excelWriter, objectWriter, summarySheet, detailSheet, sourceConn, targetConn, fieldMap) || hasError; hasError = processDataBatch(batch, objectApi, fields, excelWriter, objectWriter, summarySheet, detailSheet, sourceConn, targetConn, fieldMap, ignoreBeginDate) || hasError;
} }
}catch (Exception e){ }catch (Exception e){
log.error("API={},处理异常:{}",objectApi, e.getMessage(),e); log.error("API={},处理异常:{}",objectApi, e.getMessage(),e);
@ -722,10 +721,11 @@ public class DataVerifyServiceImpl implements DataVerifyService {
*/ */
private boolean processDataBatch(DataBatch batch, String objectApi, List<DataField> fields, private boolean processDataBatch(DataBatch batch, String objectApi, List<DataField> fields,
ExcelWriter excelWriter,ExcelWriter objectWriter, WriteSheet summarySheet, WriteSheet detailSheet, ExcelWriter excelWriter,ExcelWriter objectWriter, WriteSheet summarySheet, WriteSheet detailSheet,
PartnerConnection sourceConn, PartnerConnection targetConn,Map<String, Map<String, Field>> fieldMap) { PartnerConnection sourceConn, PartnerConnection targetConn,Map<String, Map<String, Field>> fieldMap, Date ignoreBeginDate) {
String startDate = DateFormatUtils.format(batch.getSyncStartDate(), "yyyy-MM-dd HH:mm:ss"); String startDate = DateFormatUtils.format(batch.getSyncStartDate(), "yyyy-MM-dd HH:mm:ss");
String endDate = DateFormatUtils.format(batch.getSyncEndDate(), "yyyy-MM-dd HH:mm:ss"); String endDate = DateFormatUtils.format(batch.getSyncEndDate(), "yyyy-MM-dd HH:mm:ss");
log.info("开始处理数据批次: 批次ID={} 批次总量(大于十万只校验十万)={} 批次开始时间={} 批次结束时间={} 对象API={}", batch.getId(),batch.getFirstSfNum(),startDate,endDate, objectApi);
log.info("开始处理数据批次: 批次ID={} 批次总量(大于十万只校验十万)={} 批次开始时间={} 批次结束时间={} 对象API={} 忽略开始时间={}", batch.getId(),batch.getFirstSfNum(),startDate,endDate, objectApi, ignoreBeginDate);
// 分页处理记录 // 分页处理记录
int page = 0; int page = 0;
@ -832,6 +832,23 @@ public class DataVerifyServiceImpl implements DataVerifyService {
continue; continue;
} }
if (ignoreBeginDate != null) {
Object lastModifiedObj = sourceRecord.getField("LastModifiedDate");
if (lastModifiedObj != null) {
try {
// 解析Salesforce返回的日期格式 2025-10-12T03:27:54.000Z
String lastModifiedStr = lastModifiedObj.toString();
Date lastModifiedDate = org.apache.commons.lang3.time.DateUtils.parseDate(lastModifiedStr, "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
if (lastModifiedDate.before(ignoreBeginDate)) {
continue;
}
} catch (Exception e) {
log.warn("解析LastModifiedDate失败: {}", lastModifiedObj, e);
}
}
}
// 比对字段值 // 比对字段值
for (DataField field : fields) { for (DataField field : fields) {
String fieldName = field.getField(); String fieldName = field.getField();