【feat】 富文本图片替换_v1

This commit is contained in:
Kris 2025-10-10 15:44:51 +08:00
parent 2457665b14
commit 3402971c49
2 changed files with 89 additions and 51 deletions

View File

@ -1017,9 +1017,9 @@ public class CommonServiceImpl implements CommonService {
log.info("检测到富文本字段: {}API: {}", field.getName(), apiName);
dataField.setIsHtmlFormatted(true);
Map<String, Object> htmlMap = Maps.newHashMap();
htmlMap.put("type", "text");
htmlMap.put("comment", field.getLabel()+ "备份字段");
htmlMap.put("name", field.getName()+ "_back");
htmlMap.put("type", "varchar(255)");
htmlMap.put("comment", field.getName()+ "_back");
htmlMap.put("name", "new_id");
list.add(htmlMap);
}
if (field.getReferenceTo().length > 1){
@ -1343,7 +1343,6 @@ public class CommonServiceImpl implements CommonService {
String blobField = null;
List<DataPicklist> dataPicklists = Lists.newArrayList();
for (Field field : dsr.getFields()) {
// 过滤字段
if (Const.TABLE_FILTERS.contains(field.getName())) {
continue;
@ -1363,47 +1362,48 @@ public class CommonServiceImpl implements CommonService {
list.add(map);
DataField dataField = new DataField();
dataField.setApi(apiName);
dataField.setSfType(sfType);
dataField.setField(field.getName());
dataField.setName(field.getLabel());
dataField.setReferenceTo(field.getReferenceTo() != null && field.getReferenceTo().length > 0 ? field.getReferenceTo()[0] : null);
dataField.setLeftIndex(field.getLeftSideReferenceTo() != null && field.getLeftSideReferenceTo().length > 0 ? field.getLeftSideReferenceTo()[0] : null);
dataField.setRightIndex(field.getRightSideReferenceTo() != null && field.getRightSideReferenceTo().length > 0 ? field.getRightSideReferenceTo()[0] : null);
dataField.setOnList(field.isListVisible());
dataField.setSfType(sfType);
dataField.setCreateable(field.isCreateable());
dataField.setUpdateable(field.isUpdateable());
dataField.setHtmlFormatted(field.isHtmlFormatted());
dataField.setNillable(field.isNillable());
dataField.setDefaultedOnCreate(field.isDefaultedOnCreate());
dataField.setIsCreateable(field.getCreateable());
dataField.setIsUpdateable(field.getUpdateable());
dataField.setIsNillable(field.getNillable());
dataField.setIsDefaultedOnCreate(field.getDefaultedOnCreate());
String join = null;
// 会有非常多映射关系的字段在 这里置空不管
if (field.getReferenceTo().length <= 3) {
join = StringUtils.join(field.getReferenceTo(), ",");
} else {
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);
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字段
String extraField = "";

View File

@ -2663,6 +2663,8 @@ public class DataImportNewServiceImpl implements DataImportNewService {
qw.eq("data_work", true);
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) {
String api = dataObject.getName();
QueryWrapper<DataField> qw1 = new QueryWrapper<>();
@ -2692,11 +2694,15 @@ public class DataImportNewServiceImpl implements DataImportNewService {
int totalPages = (count + pageSize - 1) / pageSize;
for (int page = 0; page < totalPages; page++) {
List<Map<String, Object>> records = customMapper.list("Id, new_id, " + field, api,
sqlCondition + " order by Id limit " + (page * pageSize) + "," + pageSize);
log.info("处理对象 {} 字段 {} 第 {}/{} 页,本页记录数: {}", api, field, (page + 1), totalPages, records.size());
SObject[] accounts = new SObject[records.size()];
int index = 0;
for (Map<String, Object> record : records) {
try {
String sourceId = (String) record.get("Id");
@ -2712,27 +2718,59 @@ public class DataImportNewServiceImpl implements DataImportNewService {
// 如果内容有变化则更新目标组织中的记录
if (!richTextContent.equals(updatedContent)) {
// 更新目标组织中的记录
SObject sObject = new SObject();
sObject.setType(api);
sObject.setId(targetId);
sObject.setField(field, updatedContent);
// 同时更新备份字段
sObject.setField(field + "_back", richTextContent);
accounts[index] = sObject;
index ++;
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) {
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());
}
}
}
}
}