【feat】 优化RecorceType反写,优化数据质量校验增加忽略开始i时间
(cherry picked from commit 46bb968e11)
This commit is contained in:
parent
aca16ebe7b
commit
51dd28b1fc
@ -204,7 +204,7 @@ public class DataDumpNewJob {
|
||||
dataImportNewService.getNewIdByField(api,"DeveloperName,Type");
|
||||
break;
|
||||
case "RecordType":
|
||||
dataImportNewService.getNewIdByField(api,"DeveloperName,SObjectType");
|
||||
dataImportNewService.getNewIdByField(api,"DeveloperName,SobjectType");
|
||||
break;
|
||||
case "AccountContactRelation":
|
||||
dataImportNewService.getNewIdByField(api,"AccountId,ContactId");
|
||||
|
||||
@ -56,4 +56,9 @@ public class DataVerifyParam {
|
||||
@ApiModelProperty(value = "结束时间", hidden = true)
|
||||
private Date endDate;
|
||||
|
||||
@ApiModelProperty(value = "忽略开始时间", hidden = true)
|
||||
private Date ignoreBeginDate;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -459,7 +459,7 @@ public class DataImportServiceImpl implements DataImportService {
|
||||
} catch (InterruptedException interruptedException){
|
||||
return;
|
||||
} catch (Exception e) {
|
||||
log.info(JSON.toJSONString(e.getMessage()));
|
||||
log.info(JSON.toJSONString(e.getMessage()),e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -421,7 +421,7 @@ public class DataVerifyServiceImpl implements DataVerifyService {
|
||||
log.info("开始时间: {}", new Date(startTime));
|
||||
|
||||
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();
|
||||
log.info("数据质量校验执行完成,耗时: {} ms", endTime - startTime);
|
||||
} catch (Exception e) {
|
||||
@ -500,7 +500,7 @@ public class DataVerifyServiceImpl implements DataVerifyService {
|
||||
private void performQualityCheckAndWriteToExcel(List<DataObject> dataObjects,
|
||||
PartnerConnection sourceConn,
|
||||
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()) {
|
||||
// 1. 创建汇总 Sheet
|
||||
WriteSheet summarySheet = createSummarySheet(excelWriter);
|
||||
@ -510,7 +510,7 @@ public class DataVerifyServiceImpl implements DataVerifyService {
|
||||
List<Future<?>> futures = Lists.newArrayList();
|
||||
dataObjects.forEach(dataObject -> {
|
||||
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);
|
||||
futures.add(future);
|
||||
});
|
||||
@ -560,7 +560,7 @@ public class DataVerifyServiceImpl implements DataVerifyService {
|
||||
*/
|
||||
private void processDataObject(DataObject dataObject, ExcelWriter excelWriter, WriteSheet summarySheet,
|
||||
WriteSheet fieldTypeSheet, PartnerConnection sourceConn,
|
||||
PartnerConnection targetConn, boolean sendEmail, Integer type) {
|
||||
PartnerConnection targetConn, boolean sendEmail, Integer type, Date ignoreBeginDate) {
|
||||
// 1. 准备对象相关信息
|
||||
String objectApi = dataObject.getName();
|
||||
List<DataField> fields = getVerifiableFields(objectApi);
|
||||
@ -574,7 +574,6 @@ public class DataVerifyServiceImpl implements DataVerifyService {
|
||||
|
||||
String qualityCheckFilePath = generateObjectQualityCheckFilePath(objectApi);
|
||||
|
||||
|
||||
// 3. 处理每个批次
|
||||
List<DataBatch> batches = getDataBatches(objectApi);
|
||||
log.info("对象: {} 待同步的批次数量: {}", objectApi, batches.size());
|
||||
@ -587,7 +586,7 @@ public class DataVerifyServiceImpl implements DataVerifyService {
|
||||
String batchQualityCheckFilePath = generateObjectQualityCheckFilePath(objectApi + "_" + batch.getId());
|
||||
try (ExcelWriter objectWriter = EasyExcel.write(batchQualityCheckFilePath).build()) {
|
||||
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){
|
||||
log.error("API={},批次ID={}处理异常:{}",objectApi,batch.getId(), e.getMessage(),e);
|
||||
}
|
||||
@ -609,7 +608,7 @@ public class DataVerifyServiceImpl implements DataVerifyService {
|
||||
WriteSheet detailSheet = createDetailSheet(excelWriter, dataObject);
|
||||
|
||||
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){
|
||||
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,
|
||||
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 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;
|
||||
@ -832,6 +832,23 @@ public class DataVerifyServiceImpl implements DataVerifyService {
|
||||
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) {
|
||||
String fieldName = field.getField();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user