Compare commits

...

2 Commits

Author SHA1 Message Date
8ad59527e5 【feat】 问题优化 2025-07-16 19:01:53 +08:00
b22ab35f42 【fix】 调整打印SF交互信息 2025-07-16 14:33:33 +08:00
7 changed files with 116 additions and 55 deletions

View File

@ -299,4 +299,56 @@ public class JobController {
param.setEndCreateDate(param.getEndDate()); param.setEndCreateDate(param.getEndDate());
return dataImportNewService.immigrationUpdateNew(param); return dataImportNewService.immigrationUpdateNew(param);
} }
/**
* 数据更新同步
* @param paramStr
* @author kris
* @return
* @throws Exception
*/
@PostMapping("/dataImportJob")
@ApiOperation("获取new_id")
@LogServiceAnnotation(operateType = OperateTypeConstant.TYPE_UPDATE, remark = "获取new_id")
public ReturnT<String> dataImportJob(String paramStr) throws Exception {
log.info("dataImportJob execute start ..................");
SalesforceParam param = new SalesforceParam();
try {
if (StringUtils.isNotBlank(paramStr)) {
param = JSON.parseObject(paramStr, SalesforceParam.class);
}
} catch (Throwable throwable) {
return new ReturnT<>(500, "参数解析失败!");
}
// 参数转换
param.setBeginCreateDate(param.getBeginDate());
param.setEndCreateDate(param.getEndDate());
return dataImportService.immigration(param);
}
/**
* 数据更新同步
* @param paramStr
* @author kris
* @return
* @throws Exception
*/
@PostMapping("/dataUpdateJob")
@ApiOperation("更新目标org数据")
@LogServiceAnnotation(operateType = OperateTypeConstant.TYPE_UPDATE, remark = "更新目标org数据")
public ReturnT<String> dataUpdateJob(String paramStr) throws Exception {
log.info("dataUpdateJob execute start ..................");
SalesforceParam param = new SalesforceParam();
try {
if (StringUtils.isNotBlank(paramStr)) {
param = JSON.parseObject(paramStr, SalesforceParam.class);
}
} catch (Throwable throwable) {
return new ReturnT<>(500, "参数解析失败!");
}
// 参数转换
param.setBeginCreateDate(param.getBeginDate());
param.setEndCreateDate(param.getEndDate());
return dataImportNewService.immigrationUpdateNew(param);
}
} }

View File

@ -366,10 +366,7 @@ public class CommonServiceImpl implements CommonService {
} }
// 等待当前所有线程执行完成 // 等待当前所有线程执行完成
salesforceExecutor.waitForFutures(futures.toArray(new Future<?>[]{})); salesforceExecutor.waitForFutures(futures.toArray(new Future<?>[]{}));
// 附件表 跑一遍dumpFile
if (StringUtils.isNotBlank(dataObject.getBlobField())) {
fileService.dumpFile(dataObject.getName(), dataObject.getBlobField(), true);
}
update.setDataWork(0); update.setDataWork(0);
} catch (Throwable e) { } catch (Throwable e) {
String message = e.getMessage(); String message = e.getMessage();
@ -377,10 +374,8 @@ public class CommonServiceImpl implements CommonService {
EmailUtil.send("DataDump ERROR", format); EmailUtil.send("DataDump ERROR", format);
throw new RuntimeException(e); throw new RuntimeException(e);
} finally { } finally {
if (dataObject != null) { update.setDataLock(0);
update.setDataLock(0); dataObjectService.updateById(update);
dataObjectService.updateById(update);
}
} }
} }
// 等待当前所有线程执行完成 // 等待当前所有线程执行完成
@ -462,11 +457,7 @@ public class CommonServiceImpl implements CommonService {
// 等待当前所有线程执行完成 // 等待当前所有线程执行完成
salesforceExecutor.waitForFutures(futures.toArray(new Future<?>[]{})); salesforceExecutor.waitForFutures(futures.toArray(new Future<?>[]{}));
// 附件表 跑一遍dumpFile
DataObject one = dataObjectService.getById(api);
if (StringUtils.isNotBlank(one.getBlobField())) {
fileService.dumpFile(one.getName(), one.getBlobField(), true);
}
update.setDataWork(0); update.setDataWork(0);
} catch (Throwable e) { } catch (Throwable e) {
log.error("manualDump error", e); log.error("manualDump error", e);

View File

@ -361,7 +361,7 @@ public class DataImportBatchServiceImpl implements DataImportBatchService {
//引用类型 //引用类型
String reference = dataField.getReferenceTo(); String reference = dataField.getReferenceTo();
//引用类型字段 //引用类型字段
String linkfield = fieldMap.get(dataField.getApi()); String linkfield = fieldMap.get(dataField.getField());
if (StringUtils.isNotBlank(linkfield)){ if (StringUtils.isNotBlank(linkfield)){
reference = data.get(j-1).get(linkfield)!=null?data.get(j-1).get(linkfield).toString():null; reference = data.get(j-1).get(linkfield)!=null?data.get(j-1).get(linkfield).toString():null;
@ -395,7 +395,7 @@ public class DataImportBatchServiceImpl implements DataImportBatchService {
account.put(dataField.getField(), pickList.get(0).get("value")); account.put(dataField.getField(), pickList.get(0).get("value"));
continue; continue;
} }
account.put(dataField.getField(), DataUtil.fieldTypeToSf(dataField)); account.put(dataField.getField(), DataUtil.fieldTypeBulkToSf(dataField));
} }
} }
@ -748,7 +748,7 @@ public class DataImportBatchServiceImpl implements DataImportBatchService {
if (!"null".equals(value) && StringUtils.isNotEmpty(value)) { if (!"null".equals(value) && StringUtils.isNotEmpty(value)) {
//引用类型字段 //引用类型字段
String linkfield = fieldMap.get(dataField.getApi()); String linkfield = fieldMap.get(dataField.getField());
if (StringUtils.isNotBlank(linkfield)){ if (StringUtils.isNotBlank(linkfield)){
reference_to = map.get(linkfield)!=null?map.get(linkfield).toString():null; reference_to = map.get(linkfield)!=null?map.get(linkfield).toString():null;
} }
@ -1122,7 +1122,7 @@ public class DataImportBatchServiceImpl implements DataImportBatchService {
//引用类型 //引用类型
String reference_to = dataField.getReferenceTo(); String reference_to = dataField.getReferenceTo();
//引用类型字段 //引用类型字段
String linkfield = fieldMap.get(dataField.getApi()); String linkfield = fieldMap.get(dataField.getField());
if (StringUtils.isNotBlank(linkfield)){ if (StringUtils.isNotBlank(linkfield)){
reference_to = data.get(j-1).get(linkfield)!=null?data.get(j-1).get(linkfield).toString():null; reference_to = data.get(j-1).get(linkfield)!=null?data.get(j-1).get(linkfield).toString():null;

View File

@ -758,7 +758,8 @@ public class DataImportNewServiceImpl implements DataImportNewService {
List<Map<String, Object>> mapList = customMapper.list("*", api, sql2+ i * 200 + ",200"); List<Map<String, Object>> mapList = customMapper.list("*", api, sql2+ i * 200 + ",200");
SObject[] accounts = new SObject[mapList.size()]; SObject[] accounts = new SObject[mapList.size()];
int j = 0; int j = 0;
for (Map<String, Object> map : mapList) { try {
for (Map<String, Object> map : mapList) {
SObject account = new SObject(); SObject account = new SObject();
account.setType(api); account.setType(api);
//给对象赋值 //给对象赋值
@ -776,7 +777,7 @@ public class DataImportNewServiceImpl implements DataImportNewService {
if (!"null".equals(value) && StringUtils.isNotEmpty(value)) { if (!"null".equals(value) && StringUtils.isNotEmpty(value)) {
//引用类型字段 //引用类型字段
String linkfield = fieldMap.get(dataField.getApi()); String linkfield = fieldMap.get(dataField.getField());
if (StringUtils.isNotBlank(linkfield)){ if (StringUtils.isNotBlank(linkfield)){
reference_to = map.get(linkfield)!=null?map.get(linkfield).toString():null; reference_to = map.get(linkfield)!=null?map.get(linkfield).toString():null;
} }
@ -813,7 +814,6 @@ public class DataImportNewServiceImpl implements DataImportNewService {
accounts[j++] = account; accounts[j++] = account;
} }
try {
if (infoFlag != null && "1".equals(infoFlag.get("value"))){ if (infoFlag != null && "1".equals(infoFlag.get("value"))){
printlnAccountsDetails(accounts,list); printlnAccountsDetails(accounts,list);
} }
@ -856,6 +856,9 @@ public class DataImportNewServiceImpl implements DataImportNewService {
for (int i = 0; i < accounts.length; i++) { for (int i = 0; i < accounts.length; i++) {
SObject account = accounts[i]; SObject account = accounts[i];
System.out.println("--- 对象数据[" + i + "] ---"); System.out.println("--- 对象数据[" + i + "] ---");
if (account == null){
continue;
}
// 获取对象所有字段名 // 获取对象所有字段名
for (DataField dataField : list) { for (DataField dataField : list) {
try { try {
@ -865,8 +868,8 @@ public class DataImportNewServiceImpl implements DataImportNewService {
System.out.println(dataField.getField() + ": [权限不足或字段不存在]"); System.out.println(dataField.getField() + ": [权限不足或字段不存在]");
} }
} }
System.out.println("old_owner_id__c: " + (account.getField("old_owner_id__c") != null ? account.getField("old_owner_id__c").toString() : "null")); System.out.println("old_owner_id__c: " + account.getField("old_owner_id__c"));
System.out.println("old_sfdc_id__c: " + (account.getField("old_sfdc_id__c") != null ? account.getField("old_sfdc_id__c").toString() : "null")); System.out.println("old_sfdc_id__c: " + account.getField("old_sfdc_id__c"));
} }
} }
@ -878,12 +881,15 @@ public class DataImportNewServiceImpl implements DataImportNewService {
HashMap<String, String> map = new HashMap<>(); HashMap<String, String> map = new HashMap<>();
for (int i = 0; i < accounts.length; i++) { for (int i = 0; i < accounts.length; i++) {
SObject account = accounts[i]; SObject account = accounts[i];
if (account == null){
continue;
}
if (errorId != null && (errorId.equals(account.getId()) || errorId.equals(account.getField("Id")))){ if (errorId != null && (errorId.equals(account.getId()) || errorId.equals(account.getField("Id")))){
for (DataField dataField : list) { for (DataField dataField : list) {
try { try {
Object value = account.getField(dataField.getField()); Object value = account.getField(dataField.getField());
map.put(dataField.getField(),String.valueOf(value)); map.put(dataField.getField(),String.valueOf(value));
System.out.println(dataField.getField() + ": " + (value != null ? value.toString() : "null")); System.out.println(dataField.getField() + ": " + value);
} catch (Exception e) { } catch (Exception e) {
System.out.println(dataField.getField() + ": [权限不足或字段不存在]"); System.out.println(dataField.getField() + ": [权限不足或字段不存在]");
} }

View File

@ -335,7 +335,7 @@ public class DataImportServiceImpl implements DataImportService {
//引用类型 //引用类型
String reference = dataField.getReferenceTo(); String reference = dataField.getReferenceTo();
//引用类型字段 //引用类型字段
String linkfield = fieldMap.get(dataField.getApi()); String linkfield = fieldMap.get(dataField.getField());
if (StringUtils.isNotBlank(linkfield)){ if (StringUtils.isNotBlank(linkfield)){
reference = data.get(j-1).get(linkfield)!=null?data.get(j-1).get(linkfield).toString():null; reference = data.get(j-1).get(linkfield)!=null?data.get(j-1).get(linkfield).toString():null;
@ -370,14 +370,6 @@ public class DataImportServiceImpl implements DataImportService {
} }
} }
if (api.equals("vlink__Wechat_User__c")){
List<Map<String, Object>> maps = customMapper.list("new_id", "vlink__Wechat_Account__c", "new_id is not null and id = '" + data.get(j - 1).get("vlink__Wechat_Account__c") + "' limit 1");
if (!maps.isEmpty()){
Map<String, Object> referenceMap = maps.get(0);
account.setField("vlink__Wechat_Account__c", referenceMap.get("new_id"));
}
}
ids[j-1] = data.get(j-1).get("Id").toString(); ids[j-1] = data.get(j-1).get("Id").toString();
accounts[j-1] = account; accounts[j-1] = account;
if (i*200+j == count){ if (i*200+j == count){
@ -406,8 +398,7 @@ public class DataImportServiceImpl implements DataImportService {
} }
TimeUnit.MILLISECONDS.sleep(1); TimeUnit.MILLISECONDS.sleep(1);
} catch (Exception e) { } catch (Exception e) {
log.error("manualCreatedNewId error api:{}", api, e); log.error("manualCreatedNewId error api:{},错误信息:{}", api, e.getMessage());
throw e;
} }
} }
SalesforceParam countParam = new SalesforceParam(); SalesforceParam countParam = new SalesforceParam();
@ -740,18 +731,19 @@ public class DataImportServiceImpl implements DataImportService {
for (int i = 0; i < accounts.length; i++) { for (int i = 0; i < accounts.length; i++) {
SObject account = accounts[i]; SObject account = accounts[i];
System.out.println("--- Account[" + i + "] ---"); System.out.println("--- Account[" + i + "] ---");
if (account == null){
return;
}
// 获取对象所有字段名 // 获取对象所有字段名
for (DataField dataField : list) { for (DataField dataField : list) {
try { try {
Object value = account.getField(dataField.getField()); System.out.println(dataField.getField() + ": " + account.getField(dataField.getField()));
System.out.println(dataField.getField() + ": " + (value != null ? value.toString() : "null"));
} catch (Exception e) { } catch (Exception e) {
System.out.println(dataField.getField() + ": [权限不足或字段不存在]"); System.out.println(dataField.getField() + ": [权限不足或字段不存在]");
} }
} }
System.out.println("old_owner_id__c: " + (account.getField("old_owner_id__c") != null ? account.getField("old_owner_id__c").toString() : "null")); System.out.println("old_owner_id__c: " + account.getField("old_owner_id__c"));
System.out.println("old_sfdc_id__c: " + (account.getField("old_sfdc_id__c") != null ? account.getField("old_sfdc_id__c").toString() : "null")); System.out.println("old_sfdc_id__c: " + account.getField("old_sfdc_id__c"));
} }
} }
@ -762,18 +754,21 @@ public class DataImportServiceImpl implements DataImportService {
HashMap<String, String> map = new HashMap<>(); HashMap<String, String> map = new HashMap<>();
SObject account = accounts[i]; SObject account = accounts[i];
System.out.println("--- Account[" + i + "] ---"); System.out.println("--- Account[" + i + "] ---");
if (account == null){
return null;
}
// 获取对象所有字段名 // 获取对象所有字段名
for (DataField dataField : list) { for (DataField dataField : list) {
try { try {
Object value = account.getField(dataField.getField()); Object value = account.getField(dataField.getField());
map.put(dataField.getField(),String.valueOf(value)); map.put(dataField.getField(),String.valueOf(value));
System.out.println(dataField.getField() + ": " + (value != null ? value.toString() : "null")); System.out.println(dataField.getField() + ": " + value);
} catch (Exception e) { } catch (Exception e) {
System.out.println(dataField.getField() + ": [权限不足或字段不存在]"); System.out.println(dataField.getField() + ": [权限不足或字段不存在]");
} }
} }
System.out.println("old_owner_id__c: " + (account.getField("old_owner_id__c") != null ? account.getField("old_owner_id__c").toString() : "null")); System.out.println("old_owner_id__c: " + account.getField("old_owner_id__c"));
System.out.println("old_sfdc_id__c: " + (account.getField("old_sfdc_id__c") != null ? account.getField("old_sfdc_id__c").toString() : "null")); System.out.println("old_sfdc_id__c: " + account.getField("old_sfdc_id__c"));
map.put("old_owner_id__c",String.valueOf(account.getField("old_owner_id__c"))); map.put("old_owner_id__c",String.valueOf(account.getField("old_owner_id__c")));
map.put("old_sfdc_id__c",String.valueOf(account.getField("old_sfdc_id__c"))); map.put("old_sfdc_id__c",String.valueOf(account.getField("old_sfdc_id__c")));
arrayList.add(map); arrayList.add(map);

View File

@ -171,6 +171,7 @@ public class FileServiceImpl implements FileService {
// 获取未存储的附件id // 获取未存储的附件id
List<Map<String, Object>> list = customMapper.list("Id, " + name, api, extraSql + " AND is_dump = false limit 1000"); List<Map<String, Object>> list = customMapper.list("Id, " + name, api, extraSql + " AND is_dump = false limit 1000");
if (CollectionUtils.isEmpty(list)) { if (CollectionUtils.isEmpty(list)) {
log.info("无需要下载文件数据!!!");
break; break;
} }
String finalName = name; String finalName = name;

View File

@ -31,6 +31,10 @@ import javax.annotation.PostConstruct;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*; import java.util.*;
@ -393,12 +397,29 @@ public class DataUtil {
} }
} }
public static Object fieldTypeBulkToSf(DataField dataField) throws ParseException {
switch (dataField.getSfType()) {
case "int":
return 1;
case "double":
case "currency":
case "percent":
return new BigDecimal("1");
case "boolean":
return true;
case "email":
return "kris.dong@163.com";
case "date":
case "datetime":
return "2020-01-01T00:00:00+00:00";
default:
return "初始"+ UUID.randomUUID();
}
}
public static Object localBulkDataToSfData(String fieldType, String data) throws ParseException { public static Object localBulkDataToSfData(String fieldType, String data) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date date;
//date转Calendar类型
Calendar calendar = Calendar.getInstance();
switch (fieldType) { switch (fieldType) {
case "int": case "int":
return Integer.parseInt(data); return Integer.parseInt(data);
@ -411,14 +432,9 @@ public class DataUtil {
case "date": case "date":
return data+"T08:00:00Z"; return data+"T08:00:00Z";
case "datetime": case "datetime":
try { LocalDateTime localDateTime = LocalDateTime.parse(data, DateTimeFormatter.ISO_LOCAL_DATE_TIME);
date = sd.parse(data); ZonedDateTime zonedDateTime = localDateTime.atZone(ZoneId.systemDefault());
}catch (ParseException e){ return zonedDateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
//解决当时间秒为0时转换秒精度丢失问题
date = sd.parse(data+":00");
}
calendar.setTime(date);
return calendar;
case "time": case "time":
return adjustHour(data); return adjustHour(data);
default: default: