瀏覽代碼

支持模拟匹配表映射关系

AE86 1 年之前
父節點
當前提交
86e924f734

+ 3 - 3
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/tablegroup/TableGroupChecker.java

@@ -15,12 +15,12 @@ import org.dbsyncer.parser.model.FieldMapping;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.TableGroup;
 import org.dbsyncer.parser.util.PickerUtil;
+import org.dbsyncer.sdk.constant.ConfigConstant;
 import org.dbsyncer.sdk.enums.ModelEnum;
 import org.dbsyncer.sdk.model.Field;
 import org.dbsyncer.sdk.model.MetaInfo;
 import org.dbsyncer.sdk.model.Table;
 import org.dbsyncer.sdk.util.PrimaryKeyUtil;
-import org.dbsyncer.sdk.constant.ConfigConstant;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.stereotype.Component;
@@ -80,7 +80,7 @@ public class TableGroupChecker extends AbstractChecker {
         this.modifyConfigModel(tableGroup, params);
 
         // 匹配相似字段映射关系
-        matchSimilarFieldMapping(tableGroup);
+        matchFieldMapping(tableGroup);
 
         // 合并配置
         mergeConfig(mapping, tableGroup);
@@ -177,7 +177,7 @@ public class TableGroupChecker extends AbstractChecker {
         }
     }
 
-    private void matchSimilarFieldMapping(TableGroup tableGroup) {
+    private void matchFieldMapping(TableGroup tableGroup) {
         List<Field> sCol = tableGroup.getSourceTable().getColumn();
         List<Field> tCol = tableGroup.getTargetTable().getColumn();
         if (CollectionUtils.isEmpty(sCol) || CollectionUtils.isEmpty(tCol)) {

+ 25 - 13
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/MappingServiceImpl.java

@@ -27,6 +27,8 @@ import org.dbsyncer.parser.model.TableGroup;
 import org.dbsyncer.sdk.connector.ConnectorInstance;
 import org.dbsyncer.sdk.constant.ConfigConstant;
 import org.dbsyncer.sdk.enums.ModelEnum;
+import org.dbsyncer.sdk.enums.TableTypeEnum;
+import org.dbsyncer.sdk.model.Table;
 import org.dbsyncer.storage.impl.SnowflakeIdWorker;
 import org.springframework.beans.BeanUtils;
 import org.springframework.stereotype.Service;
@@ -277,20 +279,30 @@ public class MappingServiceImpl extends BaseServiceImpl implements MappingServic
             return;
         }
 
-        // 存在交集
-        List<String> sTables = s.getTable().stream().map(table -> table.getName()).collect(Collectors.toList());
-        List<String> tTables = t.getTable().stream().map(table -> table.getName()).collect(Collectors.toList());
-        sTables.retainAll(tTables);
-        if (!CollectionUtils.isEmpty(sTables)) {
-            Map<String, String> params = new HashMap<>();
-            params.put("mappingId", mapping.getId());
-            sTables.forEach(table -> {
-                params.put("sourceTable", table);
-                params.put("targetTable", table);
-                tableGroupService.add(params);
-            });
-            mappingChecker.updateMeta(mapping);
+        // 匹配相似表
+        for (Table sourceTable : s.getTable()) {
+            if (StringUtil.isBlank(sourceTable.getName())) {
+                continue;
+            }
+            for (Table targetTable : t.getTable()) {
+                if (StringUtil.isBlank(targetTable.getName())) {
+                    continue;
+                }
+                // 目标源表不支持视图
+                if (TableTypeEnum.isView(targetTable.getType())) {
+                    continue;
+                }
+                if (StringUtil.equalsIgnoreCase(sourceTable.getName(), targetTable.getName())) {
+                    Map<String, String> params = new HashMap<>();
+                    params.put("mappingId", mapping.getId());
+                    params.put("sourceTable", sourceTable.getName());
+                    params.put("targetTable", targetTable.getName());
+                    tableGroupService.add(params);
+                    break;
+                }
+            }
         }
+        mappingChecker.updateMeta(mapping);
     }
 
     private void clearMetaIfFinished(String metaId) {