1
0
AE86 5 жил өмнө
parent
commit
453ee21884

+ 3 - 3
dbsyncer-biz/src/main/java/org/dbsyncer/biz/checker/impl/mapping/MappingChecker.java

@@ -49,9 +49,9 @@ public class MappingChecker extends AbstractChecker implements ApplicationContex
         String name = params.get(ConfigConstant.CONFIG_MODEL_NAME);
         String name = params.get(ConfigConstant.CONFIG_MODEL_NAME);
         String sourceConnectorId = params.get("sourceConnectorId");
         String sourceConnectorId = params.get("sourceConnectorId");
         String targetConnectorId = params.get("targetConnectorId");
         String targetConnectorId = params.get("targetConnectorId");
-        Assert.hasText(name, "mapping name is empty.");
-        Assert.hasText(sourceConnectorId, "mapping sourceConnectorId is empty.");
-        Assert.hasText(targetConnectorId, "mapping targetConnectorId is empty.");
+        Assert.hasText(name, "驱动名称不能为空");
+        Assert.hasText(sourceConnectorId, "数据源不能为空.");
+        Assert.hasText(targetConnectorId, "目标源不能为空.");
 
 
         Mapping mapping = new Mapping();
         Mapping mapping = new Mapping();
         mapping.setName(name);
         mapping.setName(name);

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

@@ -102,7 +102,7 @@ public class TableGroupChecker extends AbstractChecker {
                 // 数据源表和目标表都存在
                 // 数据源表和目标表都存在
                 if (StringUtils.equals(sourceTable, g.getSourceTable().getName()) && StringUtils.equals(targetTable,
                 if (StringUtils.equals(sourceTable, g.getSourceTable().getName()) && StringUtils.equals(targetTable,
                         g.getTargetTable().getName())) {
                         g.getTargetTable().getName())) {
-                    final String error = String.format("映射关系[%s]>>[%s]已存在.", sourceTable, targetTable);
+                    final String error = String.format("映射关系已存在.", sourceTable, targetTable);
                     logger.error(error);
                     logger.error(error);
                     throw new BizException(error);
                     throw new BizException(error);
                 }
                 }

+ 41 - 5
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/TableGroupServiceImpl.java

@@ -6,6 +6,7 @@ import org.dbsyncer.common.util.CollectionUtils;
 import org.dbsyncer.connector.config.Field;
 import org.dbsyncer.connector.config.Field;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.manager.Manager;
 import org.dbsyncer.parser.model.ConfigModel;
 import org.dbsyncer.parser.model.ConfigModel;
+import org.dbsyncer.parser.model.FieldMapping;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.Mapping;
 import org.dbsyncer.parser.model.TableGroup;
 import org.dbsyncer.parser.model.TableGroup;
 import org.slf4j.Logger;
 import org.slf4j.Logger;
@@ -34,12 +35,14 @@ public class TableGroupServiceImpl implements TableGroupService {
 
 
     @Override
     @Override
     public String add(Map<String, String> params) {
     public String add(Map<String, String> params) {
-        ConfigModel model = tableGroupChecker.checkAddConfigModel(params);
+        TableGroup model = (TableGroup) tableGroupChecker.checkAddConfigModel(params);
+        // 匹配相似字段
+        mergeTableGroupColumn(model);
+
         String id = manager.addTableGroup(model);
         String id = manager.addTableGroup(model);
 
 
-        String mappingId = params.get("mappingId");
-        Assert.hasText(mappingId, "tableGroup mappingId is empty.");
-        mergeMappingColumn(mappingId);
+        // 合并驱动公共字段
+        mergeMappingColumn(model.getMappingId());
         return id;
         return id;
     }
     }
 
 
@@ -94,7 +97,7 @@ public class TableGroupServiceImpl implements TableGroupService {
             return target;
             return target;
         }
         }
         List<Field> list = new ArrayList<>();
         List<Field> list = new ArrayList<>();
-        Set<String> keys = new HashSet<>(column.size());
+        Set<String> keys = new HashSet<>();
         column.forEach(f -> keys.add(f.getName()));
         column.forEach(f -> keys.add(f.getName()));
         target.forEach(f -> {
         target.forEach(f -> {
             if (keys.contains(f.getName())) {
             if (keys.contains(f.getName())) {
@@ -104,4 +107,37 @@ public class TableGroupServiceImpl implements TableGroupService {
         return list;
         return list;
     }
     }
 
 
+    private void mergeTableGroupColumn(TableGroup tableGroup) {
+        List<Field> sCol = tableGroup.getSourceTable().getColumn();
+        List<Field> tCol = tableGroup.getTargetTable().getColumn();
+        if (CollectionUtils.isEmpty(sCol) || CollectionUtils.isEmpty(tCol)) {
+            return;
+        }
+
+        // Set集合去重
+        Map<String, Field> m1 = new HashMap<>();
+        Map<String, Field> m2 = new HashMap<>();
+        List<String> k1 = new LinkedList<>();
+        List<String> k2 = new LinkedList<>();
+        shuffleColumn(sCol, k1, m1);
+        shuffleColumn(tCol, k2, m2);
+        k1.retainAll(k2);
+
+        // 有相似字段
+        if (!CollectionUtils.isEmpty(k1)) {
+            List<FieldMapping> fields = new ArrayList<>();
+            k1.forEach(k -> fields.add(new FieldMapping(m1.get(k), m2.get(k))));
+            tableGroup.setFieldMapping(fields);
+        }
+    }
+
+    private void shuffleColumn(List<Field> col, List<String> key, Map<String, Field> map) {
+        col.forEach(f -> {
+            if (!key.contains(f.getName())) {
+                key.add(f.getName());
+                map.put(f.getName(), f);
+            }
+        });
+    }
+
 }
 }

+ 3 - 3
dbsyncer-web/src/main/resources/templates/index/index.html

@@ -16,7 +16,7 @@
                     </div>
                     </div>
                 </div>
                 </div>
                 <!-- 显示连接器列表 -->
                 <!-- 显示连接器列表 -->
-                <div class="row">
+                <div class="row" th:if="${connectors?.size() gt 0}">
                     <div class="col-md-12">
                     <div class="col-md-12">
                         <div class="panel panel-default">
                         <div class="panel panel-default">
                             <!-- 连接器 -->
                             <!-- 连接器 -->
@@ -51,7 +51,7 @@
                 <!-- 连接器开结束位置 -->
                 <!-- 连接器开结束位置 -->
 
 
                 <!-- 驱动开始位置 -->
                 <!-- 驱动开始位置 -->
-                <div class="form-group">
+                <div class="form-group" th:if="${connectors?.size() gt 0}">
                     <div class="col-md-12">
                     <div class="col-md-12">
                         <button type="button" class="btn btn-primary" id="indexAddMappingBtn">
                         <button type="button" class="btn btn-primary" id="indexAddMappingBtn">
                             <span class="fa fa-plus"></span>添加驱动([[${mappings?.size()} ?: 0]])
                             <span class="fa fa-plus"></span>添加驱动([[${mappings?.size()} ?: 0]])
@@ -60,7 +60,7 @@
                 </div>
                 </div>
 
 
                 <!-- 显示驱动列表 -->
                 <!-- 显示驱动列表 -->
-                <div class="row">
+                <div class="row" th:if="${mappings?.size() gt 0}">
                     <div class="col-md-12">
                     <div class="col-md-12">
                         <div class="panel panel-default">
                         <div class="panel panel-default">
                             <div class="panel-body">
                             <div class="panel-body">