From 3402971c49f37b26d472f0049879f99d7709676d Mon Sep 17 00:00:00 2001 From: Kris <2893855659@qq.com> Date: Fri, 10 Oct 2025 15:44:51 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90feat=E3=80=91=20=E5=AF=8C=E6=96=87?= =?UTF-8?q?=E6=9C=AC=E5=9B=BE=E7=89=87=E6=9B=BF=E6=8D=A2=5Fv1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/CommonServiceImpl.java | 82 +++++++++---------- .../impl/DataImportNewServiceImpl.java | 58 ++++++++++--- 2 files changed, 89 insertions(+), 51 deletions(-) diff --git a/src/main/java/com/celnet/datadump/service/impl/CommonServiceImpl.java b/src/main/java/com/celnet/datadump/service/impl/CommonServiceImpl.java index 5b47add..1e44427 100644 --- a/src/main/java/com/celnet/datadump/service/impl/CommonServiceImpl.java +++ b/src/main/java/com/celnet/datadump/service/impl/CommonServiceImpl.java @@ -1017,9 +1017,9 @@ public class CommonServiceImpl implements CommonService { log.info("检测到富文本字段: {},API: {}", field.getName(), apiName); dataField.setIsHtmlFormatted(true); Map 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 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 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 = ""; diff --git a/src/main/java/com/celnet/datadump/service/impl/DataImportNewServiceImpl.java b/src/main/java/com/celnet/datadump/service/impl/DataImportNewServiceImpl.java index 7c973e6..0a95bea 100644 --- a/src/main/java/com/celnet/datadump/service/impl/DataImportNewServiceImpl.java +++ b/src/main/java/com/celnet/datadump/service/impl/DataImportNewServiceImpl.java @@ -2663,6 +2663,8 @@ public class DataImportNewServiceImpl implements DataImportNewService { qw.eq("data_work", true); List objectList = dataObjectService.list(qw); + Map infoFlag = customMapper.list("code,value","system_config","code ='"+SystemConfigCode.INFO_FLAG+"'").get(0); + for (DataObject dataObject : objectList) { String api = dataObject.getName(); QueryWrapper 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> 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 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> maps = new ArrayList<>(); + Map 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> maps = new ArrayList<>(); + Map linkMap = new HashMap<>(); + linkMap.put("key", "is_update"); + linkMap.put("value", 2); + maps.add(linkMap); + Map 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> maps = new ArrayList<>(); + Map linkMap = new HashMap<>(); + linkMap.put("key", "is_update"); + linkMap.put("value", 1); + maps.add(linkMap); + Map linkMap1 = new HashMap<>(); + linkMap1.put("key", "error_message"); + linkMap1.put("value", null); + maps.add(linkMap1); + customMapper.updateByNewId(maps,api, saveResult.getId()); + } + } } } }