【feat】 富文本图片替换_v1
This commit is contained in:
parent
2457665b14
commit
3402971c49
@ -1017,9 +1017,9 @@ public class CommonServiceImpl implements CommonService {
|
|||||||
log.info("检测到富文本字段: {},API: {}", field.getName(), apiName);
|
log.info("检测到富文本字段: {},API: {}", field.getName(), apiName);
|
||||||
dataField.setIsHtmlFormatted(true);
|
dataField.setIsHtmlFormatted(true);
|
||||||
Map<String, Object> htmlMap = Maps.newHashMap();
|
Map<String, Object> htmlMap = Maps.newHashMap();
|
||||||
htmlMap.put("type", "text");
|
htmlMap.put("type", "varchar(255)");
|
||||||
htmlMap.put("comment", field.getLabel()+ "备份字段");
|
htmlMap.put("comment", field.getName()+ "_back");
|
||||||
htmlMap.put("name", field.getName()+ "_back");
|
htmlMap.put("name", "new_id");
|
||||||
list.add(htmlMap);
|
list.add(htmlMap);
|
||||||
}
|
}
|
||||||
if (field.getReferenceTo().length > 1){
|
if (field.getReferenceTo().length > 1){
|
||||||
@ -1343,7 +1343,6 @@ public class CommonServiceImpl implements CommonService {
|
|||||||
String blobField = null;
|
String blobField = null;
|
||||||
List<DataPicklist> dataPicklists = Lists.newArrayList();
|
List<DataPicklist> dataPicklists = Lists.newArrayList();
|
||||||
for (Field field : dsr.getFields()) {
|
for (Field field : dsr.getFields()) {
|
||||||
|
|
||||||
// 过滤字段
|
// 过滤字段
|
||||||
if (Const.TABLE_FILTERS.contains(field.getName())) {
|
if (Const.TABLE_FILTERS.contains(field.getName())) {
|
||||||
continue;
|
continue;
|
||||||
@ -1363,47 +1362,48 @@ public class CommonServiceImpl implements CommonService {
|
|||||||
list.add(map);
|
list.add(map);
|
||||||
DataField dataField = new DataField();
|
DataField dataField = new DataField();
|
||||||
dataField.setApi(apiName);
|
dataField.setApi(apiName);
|
||||||
|
dataField.setSfType(sfType);
|
||||||
dataField.setField(field.getName());
|
dataField.setField(field.getName());
|
||||||
dataField.setName(field.getLabel());
|
dataField.setName(field.getLabel());
|
||||||
dataField.setReferenceTo(field.getReferenceTo() != null && field.getReferenceTo().length > 0 ? field.getReferenceTo()[0] : null);
|
dataField.setIsCreateable(field.getCreateable());
|
||||||
dataField.setLeftIndex(field.getLeftSideReferenceTo() != null && field.getLeftSideReferenceTo().length > 0 ? field.getLeftSideReferenceTo()[0] : null);
|
dataField.setIsUpdateable(field.getUpdateable());
|
||||||
dataField.setRightIndex(field.getRightSideReferenceTo() != null && field.getRightSideReferenceTo().length > 0 ? field.getRightSideReferenceTo()[0] : null);
|
dataField.setIsNillable(field.getNillable());
|
||||||
dataField.setOnList(field.isListVisible());
|
dataField.setIsDefaultedOnCreate(field.getDefaultedOnCreate());
|
||||||
dataField.setSfType(sfType);
|
String join = null;
|
||||||
dataField.setCreateable(field.isCreateable());
|
// 会有非常多映射关系的字段在 这里置空不管
|
||||||
dataField.setUpdateable(field.isUpdateable());
|
if (field.getReferenceTo().length <= 3) {
|
||||||
dataField.setHtmlFormatted(field.isHtmlFormatted());
|
join = StringUtils.join(field.getReferenceTo(), ",");
|
||||||
dataField.setNillable(field.isNillable());
|
} else {
|
||||||
dataField.setDefaultedOnCreate(field.isDefaultedOnCreate());
|
log.info("referenceTo too long set null, api:{}, field:{}, reference to:{}", apiName, field.getName(), StringUtils.join(field.getReferenceTo(), ","));
|
||||||
|
}
|
||||||
|
if (field.getReferenceTo().length > 1){
|
||||||
|
if (field.getName().contains("Id") && !"OwnerId".equals(field.getName()) && !"UserOrGroupId".equals(field.getName())){
|
||||||
|
LinkConfig linkConfig = new LinkConfig();
|
||||||
|
linkConfig.setApi(apiName);
|
||||||
|
linkConfig.setLabel(label);
|
||||||
|
linkConfig.setField(field.getName());
|
||||||
|
linkConfig.setLinkField(StringUtils.replace(field.getName(), "Id", "_Type"));
|
||||||
|
linkConfigService.save(linkConfig);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// picklist保存到picklist表
|
||||||
|
if ("picklist".equalsIgnoreCase(sfType)) {
|
||||||
|
join = "data_picklist";
|
||||||
|
PicklistEntry[] picklistValues = field.getPicklistValues();
|
||||||
|
if (ArrayUtils.isNotEmpty(picklistValues)) {
|
||||||
|
for (PicklistEntry picklistValue : picklistValues) {
|
||||||
|
DataPicklist dataPicklist = new DataPicklist();
|
||||||
|
dataPicklist.setApi(apiName);
|
||||||
|
dataPicklist.setField(field.getName());
|
||||||
|
dataPicklist.setLabel(picklistValue.getLabel());
|
||||||
|
dataPicklist.setValue(picklistValue.getValue());
|
||||||
|
dataPicklists.add(dataPicklist);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
dataField.setReferenceTo(join);
|
||||||
fieldList.add(dataField);
|
fieldList.add(dataField);
|
||||||
fields.add(field.getName());
|
fields.add(field.getName());
|
||||||
|
|
||||||
// 如果是富文本字段,添加备份字段
|
|
||||||
if (field.isHtmlFormatted()) {
|
|
||||||
String backupFieldName = field.getName() + "_back";
|
|
||||||
Map<String, Object> backupMap = Maps.newHashMap();
|
|
||||||
backupMap.put("type", DataUtil.fieldTypeToMysql(field));
|
|
||||||
backupMap.put("comment", field.getLabel() + " 备份");
|
|
||||||
backupMap.put("name", backupFieldName);
|
|
||||||
list.add(backupMap);
|
|
||||||
|
|
||||||
DataField backupDataField = new DataField();
|
|
||||||
backupDataField.setApi(apiName);
|
|
||||||
backupDataField.setField(backupFieldName);
|
|
||||||
backupDataField.setName(field.getLabel() + " 备份");
|
|
||||||
backupDataField.setReferenceTo(field.getReferenceTo() != null && field.getReferenceTo().length > 0 ? field.getReferenceTo()[0] : null);
|
|
||||||
backupDataField.setLeftIndex(field.getLeftSideReferenceTo() != null && field.getLeftSideReferenceTo().length > 0 ? field.getLeftSideReferenceTo()[0] : null);
|
|
||||||
backupDataField.setRightIndex(field.getRightSideReferenceTo() != null && field.getRightSideReferenceTo().length > 0 ? field.getRightSideReferenceTo()[0] : null);
|
|
||||||
backupDataField.setOnList(field.isListVisible());
|
|
||||||
backupDataField.setSfType(sfType);
|
|
||||||
backupDataField.setCreateable(field.isCreateable());
|
|
||||||
backupDataField.setUpdateable(field.isUpdateable());
|
|
||||||
backupDataField.setHtmlFormatted(field.isHtmlFormatted());
|
|
||||||
backupDataField.setNillable(field.isNillable());
|
|
||||||
backupDataField.setDefaultedOnCreate(field.isDefaultedOnCreate());
|
|
||||||
fieldList.add(backupDataField);
|
|
||||||
fields.add(backupFieldName);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
// 存在ownerId字段
|
// 存在ownerId字段
|
||||||
String extraField = "";
|
String extraField = "";
|
||||||
|
|||||||
@ -2663,6 +2663,8 @@ public class DataImportNewServiceImpl implements DataImportNewService {
|
|||||||
qw.eq("data_work", true);
|
qw.eq("data_work", true);
|
||||||
List<DataObject> objectList = dataObjectService.list(qw);
|
List<DataObject> objectList = dataObjectService.list(qw);
|
||||||
|
|
||||||
|
Map<String, Object> infoFlag = customMapper.list("code,value","system_config","code ='"+SystemConfigCode.INFO_FLAG+"'").get(0);
|
||||||
|
|
||||||
for (DataObject dataObject : objectList) {
|
for (DataObject dataObject : objectList) {
|
||||||
String api = dataObject.getName();
|
String api = dataObject.getName();
|
||||||
QueryWrapper<DataField> qw1 = new QueryWrapper<>();
|
QueryWrapper<DataField> qw1 = new QueryWrapper<>();
|
||||||
@ -2692,11 +2694,15 @@ public class DataImportNewServiceImpl implements DataImportNewService {
|
|||||||
int totalPages = (count + pageSize - 1) / pageSize;
|
int totalPages = (count + pageSize - 1) / pageSize;
|
||||||
|
|
||||||
for (int page = 0; page < totalPages; page++) {
|
for (int page = 0; page < totalPages; page++) {
|
||||||
|
|
||||||
List<Map<String, Object>> records = customMapper.list("Id, new_id, " + field, api,
|
List<Map<String, Object>> records = customMapper.list("Id, new_id, " + field, api,
|
||||||
sqlCondition + " order by Id limit " + (page * pageSize) + "," + pageSize);
|
sqlCondition + " order by Id limit " + (page * pageSize) + "," + pageSize);
|
||||||
|
|
||||||
log.info("处理对象 {} 字段 {} 第 {}/{} 页,本页记录数: {}", api, field, (page + 1), totalPages, records.size());
|
log.info("处理对象 {} 字段 {} 第 {}/{} 页,本页记录数: {}", api, field, (page + 1), totalPages, records.size());
|
||||||
|
|
||||||
|
SObject[] accounts = new SObject[records.size()];
|
||||||
|
int index = 0;
|
||||||
|
|
||||||
for (Map<String, Object> record : records) {
|
for (Map<String, Object> record : records) {
|
||||||
try {
|
try {
|
||||||
String sourceId = (String) record.get("Id");
|
String sourceId = (String) record.get("Id");
|
||||||
@ -2712,27 +2718,59 @@ public class DataImportNewServiceImpl implements DataImportNewService {
|
|||||||
|
|
||||||
// 如果内容有变化,则更新目标组织中的记录
|
// 如果内容有变化,则更新目标组织中的记录
|
||||||
if (!richTextContent.equals(updatedContent)) {
|
if (!richTextContent.equals(updatedContent)) {
|
||||||
|
|
||||||
// 更新目标组织中的记录
|
// 更新目标组织中的记录
|
||||||
SObject sObject = new SObject();
|
SObject sObject = new SObject();
|
||||||
sObject.setType(api);
|
sObject.setType(api);
|
||||||
sObject.setId(targetId);
|
sObject.setId(targetId);
|
||||||
sObject.setField(field, updatedContent);
|
sObject.setField(field, updatedContent);
|
||||||
|
accounts[index] = sObject;
|
||||||
// 同时更新备份字段
|
index ++;
|
||||||
sObject.setField(field + "_back", richTextContent);
|
|
||||||
|
List<Map<String, Object>> maps = new ArrayList<>();
|
||||||
|
Map<String, Object> linkMap = new HashMap<>();
|
||||||
|
linkMap.put("key", field + "_back");
|
||||||
|
linkMap.put("value", richTextContent);
|
||||||
|
maps.add(linkMap);
|
||||||
|
customMapper.updateByNewId(maps,api, targetId);
|
||||||
|
|
||||||
SaveResult[] results = targetConnection.update(new SObject[]{sObject});
|
|
||||||
if (results != null && results.length > 0 && results[0].getSuccess()) {
|
|
||||||
log.info("成功更新记录 {} 的富文本内容", targetId);
|
|
||||||
} else {
|
|
||||||
log.error("更新记录 {} 的富文本内容失败: {}", targetId,
|
|
||||||
results != null && results.length > 0 ? JSON.toJSONString(results[0].getErrors()) : "未知错误");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("处理记录 {} 的富文本内容时发生错误: {}", record.get("Id"), e.getMessage(), e);
|
log.error("处理记录 {} 的富文本内容时发生错误: {}", record.get("Id"), e.getMessage(), e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (infoFlag != null && "1".equals(infoFlag.get("value"))){
|
||||||
|
printlnAccountsDetails(accounts,fields);
|
||||||
|
}
|
||||||
|
SaveResult[] saveResults = targetConnection.update(accounts);
|
||||||
|
for (SaveResult saveResult : saveResults) {
|
||||||
|
if (!saveResult.getSuccess()) {
|
||||||
|
List<Map<String, Object>> maps = new ArrayList<>();
|
||||||
|
Map<String, Object> linkMap = new HashMap<>();
|
||||||
|
linkMap.put("key", "is_update");
|
||||||
|
linkMap.put("value", 2);
|
||||||
|
maps.add(linkMap);
|
||||||
|
Map<String, Object> linkMap1 = new HashMap<>();
|
||||||
|
linkMap1.put("key", "error_message");
|
||||||
|
linkMap1.put("value", JSON.toJSONString(saveResult.getErrors()));
|
||||||
|
maps.add(linkMap1);
|
||||||
|
customMapper.updateByNewId(maps,api, saveResult.getId());
|
||||||
|
String format = String.format("数据更新 error, api name: %s, \ncause:\n%s", api, JSON.toJSONString(saveResult));
|
||||||
|
log.info(format);
|
||||||
|
}else {
|
||||||
|
List<Map<String, Object>> maps = new ArrayList<>();
|
||||||
|
Map<String, Object> linkMap = new HashMap<>();
|
||||||
|
linkMap.put("key", "is_update");
|
||||||
|
linkMap.put("value", 1);
|
||||||
|
maps.add(linkMap);
|
||||||
|
Map<String, Object> linkMap1 = new HashMap<>();
|
||||||
|
linkMap1.put("key", "error_message");
|
||||||
|
linkMap1.put("value", null);
|
||||||
|
maps.add(linkMap1);
|
||||||
|
customMapper.updateByNewId(maps,api, saveResult.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user