From 6a2492cea79e07a844ec059f44e5ec7a6952761f Mon Sep 17 00:00:00 2001 From: Kris <2893855659@qq.com> Date: Sun, 28 Sep 2025 14:49:57 +0800 Subject: [PATCH] =?UTF-8?q?[feat]=20=E6=8F=90=E4=BA=A4=E5=88=9D=E7=89=88Bi?= =?UTF-8?q?gObject=E6=95=B0=E6=8D=AE=E5=90=8C=E6=AD=A5=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/CommonBatchServiceImpl.java | 193 +++++++++++++++--- .../service/impl/DataVerifyServiceImpl.java | 3 +- .../com/celnet/datadump/util/BulkUtil.java | 2 +- 3 files changed, 161 insertions(+), 37 deletions(-) diff --git a/src/main/java/com/celnet/datadump/service/impl/CommonBatchServiceImpl.java b/src/main/java/com/celnet/datadump/service/impl/CommonBatchServiceImpl.java index 4098224..709774e 100644 --- a/src/main/java/com/celnet/datadump/service/impl/CommonBatchServiceImpl.java +++ b/src/main/java/com/celnet/datadump/service/impl/CommonBatchServiceImpl.java @@ -158,18 +158,9 @@ public class CommonBatchServiceImpl implements CommonBatchService { @Override public ReturnT importBigObject(SalesforceParam param) throws Exception { - List> futures = Lists.newArrayList(); try { - if (StringUtils.isNotBlank(param.getApi())) { - // 手动任务 - ReturnT result = manualBigObjectImport(param, futures); - if (result != null) { - return result; - } - } - return ReturnT.SUCCESS; + return manualBigObjectImport(param); } catch (Throwable throwable) { - salesforceExecutor.remove(futures.toArray(new Future[]{})); log.error("import error", throwable); throw throwable; } @@ -186,9 +177,11 @@ public class CommonBatchServiceImpl implements CommonBatchService { log.info("开始导出BigObject数据, API: {}", api); + List fieldList = dataFieldService.list(new QueryWrapper().eq("api", param.getApi())); String fieldStr = fieldList.stream() .map(DataField::getField) + .filter(field -> !"SystemModstamp".equals(field) && !"LastModifiedDate".equals(field)) .collect(Collectors.joining(", ")); String sql = "select " + fieldStr + " from " + param.getApi() ; @@ -242,6 +235,8 @@ public class CommonBatchServiceImpl implements CommonBatchService { long currentFileSize = 0; int resultIndex = 0; + + String headerLine = null; for (final String resultId : queryResultList.getResult()) { log.info("处理结果ID: {}, 进度: {}/{}", resultId, ++resultIndex, queryResultList.getResult().length); @@ -251,6 +246,13 @@ public class CommonBatchServiceImpl implements CommonBatchService { String line; int lineCount = 0; while ((line = bufferedReader.readLine()) != null) { + // 保存第一行作为标题行,并替换CreatedDate和CreatedById为Original_Created_Date__c和Original_Created_By__c + // 但要确保不替换CreatedDate__c和CreatedById__c这样的自定义字段 + line = line.replaceAll("(? manualBigObjectImport(SalesforceParam param, List> futures) throws Exception { + private ReturnT manualBigObjectImport(SalesforceParam param) throws Exception { String api = param.getApi(); // 创建目标ORG连接 BulkConnection targetBulkConnect = salesforceTargetConnect.createBulkConnect(); - File directory = new File(api); + // 修改目录路径,使用与导出相同的路径规范 + File directory = new File(Const.SERVER_FILE_PATH + "/" + api); if (!directory.exists() || !directory.isDirectory()) { throw new FileNotFoundException(api + "目录不存在: " + directory.getAbsolutePath()); } @@ -327,26 +336,61 @@ private ReturnT manualBigObjectImport(SalesforceParam param, List manualBigObjectImport(SalesforceParam param, List manualBigObjectImport(SalesforceParam param, List manualBatchDump(SalesforceParam param, List> futures) throws InterruptedException { List apis; apis = DataUtil.toIdList(param.getApi()); diff --git a/src/main/java/com/celnet/datadump/service/impl/DataVerifyServiceImpl.java b/src/main/java/com/celnet/datadump/service/impl/DataVerifyServiceImpl.java index 3aaa99d..e0deb3e 100644 --- a/src/main/java/com/celnet/datadump/service/impl/DataVerifyServiceImpl.java +++ b/src/main/java/com/celnet/datadump/service/impl/DataVerifyServiceImpl.java @@ -652,7 +652,7 @@ public class DataVerifyServiceImpl implements DataVerifyService { targetRow.add(targetField.isNillable()); targetRow.add(targetField.isUnique()); targetRow.add(targetField.isPolymorphicForeignKey() ? "是" : "否"); - targetRow.add((targetField.getReferenceTo()!=null && targetField.getReferenceTo().length> 2 )? "多态字段" : String.join(",", sourceField.getReferenceTo())); + targetRow.add((targetField.getReferenceTo()!=null && targetField.getReferenceTo().length> 2 )? "多态字段" : String.join(",", targetField.getReferenceTo())); // 写入Excel excelWriter.write(Collections.singletonList(targetRow), fieldTypeSheet); @@ -866,7 +866,6 @@ public class DataVerifyServiceImpl implements DataVerifyService { row.add(String.valueOf(totalRecordNum)); row.add(String.valueOf(sorceOnlyNum)); row.add(String.valueOf(targetOnlyNum)); - row.add(String.valueOf(totalRecordNum * fields.size())); row.add(isError?"不通过":"通过"); // 写入Excel的summarySheet diff --git a/src/main/java/com/celnet/datadump/util/BulkUtil.java b/src/main/java/com/celnet/datadump/util/BulkUtil.java index 5a9541b..4f50f40 100644 --- a/src/main/java/com/celnet/datadump/util/BulkUtil.java +++ b/src/main/java/com/celnet/datadump/util/BulkUtil.java @@ -214,7 +214,7 @@ public class BulkUtil { */ public static void waitForBulkV2JobCompletion(String url, String jobId, BulkConnection connection) throws Exception { CloseableHttpClient httpClient = HttpClients.createDefault(); - String jobStatusUrl = url + "services/data/v56.0/jobs/query/" + jobId; + String jobStatusUrl = url + "services/data/v56.0/jobs/ingest/" + jobId; boolean jobCompleted = false; while (!jobCompleted) {