1
0
Эх сурвалжийг харах

优化表映射选择器,减少大批量表干扰,支持过滤已使用的表,取消表名强一致性校验

AE86 9 сар өмнө
parent
commit
ea8c121186

+ 8 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/MappingService.java

@@ -52,6 +52,14 @@ public interface MappingService {
      */
     MappingVo getMapping(String id);
 
+    /**
+     * 获取驱动(过滤已匹配的表)
+     *
+     * @param id
+     * @return
+     */
+    MappingVo getMappingWithoutMatchedTables(String id);
+
     /**
      * 获取所有驱动
      *

+ 23 - 0
dbsyncer-biz/src/main/java/org/dbsyncer/biz/impl/MappingServiceImpl.java

@@ -38,8 +38,10 @@ import javax.annotation.Resource;
 import java.time.Instant;
 import java.util.Comparator;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.stream.Collectors;
 
 /**
@@ -169,6 +171,27 @@ public class MappingServiceImpl extends BaseServiceImpl implements MappingServic
         return convertMapping2Vo(mapping);
     }
 
+    @Override
+    public MappingVo getMappingWithoutMatchedTables(String id) {
+        Mapping mapping = profileComponent.getMapping(id);
+        MappingVo vo = convertMapping2Vo(mapping);
+        List<TableGroup> tableGroupAll = tableGroupService.getTableGroupAll(id);
+        // 过滤已映射的表
+        if(!CollectionUtils.isEmpty(tableGroupAll)){
+            final Set<String> sTables = new HashSet<>();
+            final Set<String> tTables = new HashSet<>();
+            tableGroupAll.forEach(tableGroup -> {
+                sTables.add(tableGroup.getSourceTable().getName());
+                tTables.add(tableGroup.getTargetTable().getName());
+            });
+            vo.getSourceConnector().setTable(vo.getSourceConnector().getTable().stream().filter(t -> !sTables.contains(t.getName())).collect(Collectors.toList()));
+            vo.getTargetConnector().setTable(vo.getTargetConnector().getTable().stream().filter(t -> !tTables.contains(t.getName())).collect(Collectors.toList()));
+            sTables.clear();
+            tTables.clear();
+        }
+        return vo;
+    }
+
     @Override
     public List<MappingVo> getMappingAll() {
         List<MappingVo> list = profileComponent.getMappingAll()

+ 0 - 22
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/index/ConnectorController.java

@@ -90,26 +90,4 @@ public class ConnectorController extends BaseController {
         }
     }
 
-    @GetMapping("/get")
-    @ResponseBody
-    public RestResult get(HttpServletRequest request, @RequestParam(value = "id") String id) {
-        try {
-            return RestResult.restSuccess(connectorService.getConnector(id));
-        } catch (Exception e) {
-            logger.error(e.getLocalizedMessage(), e.getClass());
-            return RestResult.restFail(e.getMessage());
-        }
-    }
-
-    @GetMapping("/getAll")
-    @ResponseBody
-    public RestResult getAll(HttpServletRequest request) {
-        try {
-            return RestResult.restSuccess(connectorService.getConnectorAll());
-        } catch (Exception e) {
-            logger.error(e.getLocalizedMessage(), e.getClass());
-            return RestResult.restFail(e.getMessage());
-        }
-    }
-
 }

+ 1 - 23
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/index/MappingController.java

@@ -43,7 +43,7 @@ public class MappingController extends BaseController {
 
     @GetMapping("/page/{page}")
     public String page(ModelMap model, @PathVariable("page") String page, @RequestParam(value = "id") String id) {
-        model.put("mapping", mappingService.getMapping(id));
+        model.put("mapping", mappingService.getMappingWithoutMatchedTables(id));
         model.put("tableGroups", tableGroupService.getTableGroupAll(id));
         initConfig(model);
         return "mapping/" + page;
@@ -117,28 +117,6 @@ public class MappingController extends BaseController {
         }
     }
 
-    @GetMapping("/get")
-    @ResponseBody
-    public RestResult get(@RequestParam(value = "id") String id) {
-        try {
-            return RestResult.restSuccess(mappingService.getMapping(id));
-        } catch (Exception e) {
-            logger.error(e.getLocalizedMessage(), e);
-            return RestResult.restFail(e.getMessage());
-        }
-    }
-
-    @GetMapping("/getAll")
-    @ResponseBody
-    public RestResult getAll() {
-        try {
-            return RestResult.restSuccess(mappingService.getMappingAll());
-        } catch (Exception e) {
-            logger.error(e.getLocalizedMessage(), e);
-            return RestResult.restFail(e.getMessage());
-        }
-    }
-
     @PostMapping(value = "/refreshTables")
     @ResponseBody
     public RestResult refreshTables(@RequestParam(value = "id") String id) {

+ 0 - 34
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/index/MetaController.java

@@ -1,34 +0,0 @@
-package org.dbsyncer.web.controller.index;
-
-import org.dbsyncer.biz.MonitorService;
-import org.dbsyncer.biz.vo.RestResult;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.ResponseBody;
-
-import javax.annotation.Resource;
-
-@Controller
-@RequestMapping("/meta")
-public class MetaController {
-
-    private final Logger logger = LoggerFactory.getLogger(getClass());
-
-    @Resource
-    private MonitorService monitorService;
-
-    @GetMapping("/getAll")
-    @ResponseBody
-    public RestResult getAll() {
-        try {
-            return RestResult.restSuccess(monitorService.getMetaAll());
-        } catch (Exception e) {
-            logger.error(e.getLocalizedMessage(), e.getClass());
-            return RestResult.restFail(e.getMessage());
-        }
-    }
-
-}

+ 0 - 11
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/index/ProjectGroupController.java

@@ -113,15 +113,4 @@ public class ProjectGroupController extends BaseController {
         }
     }
 
-    @GetMapping("/getAll")
-    @ResponseBody
-    public RestResult getAll() {
-        try {
-            return RestResult.restSuccess(projectGroupService.getProjectGroupAll());
-        } catch (Exception e) {
-            logger.error(e.getLocalizedMessage(), e.getClass());
-            return RestResult.restFail(e.getMessage());
-        }
-    }
-
 }

+ 4 - 22
dbsyncer-web/src/main/java/org/dbsyncer/web/controller/index/TableGroupController.java

@@ -4,6 +4,7 @@ import org.dbsyncer.biz.MappingService;
 import org.dbsyncer.biz.TableGroupService;
 import org.dbsyncer.biz.vo.RestResult;
 import org.dbsyncer.parser.model.TableGroup;
+import org.dbsyncer.sdk.SdkException;
 import org.dbsyncer.web.controller.BaseController;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -48,6 +49,9 @@ public class TableGroupController extends BaseController {
         try {
             Map<String, String> params = getParams(request);
             return RestResult.restSuccess(tableGroupService.add(params));
+        } catch (SdkException e) {
+            logger.error(e.getLocalizedMessage(), e);
+            return RestResult.restFail(e.getMessage(), 400);
         } catch (Exception e) {
             logger.error(e.getLocalizedMessage(), e);
             return RestResult.restFail(e.getMessage());
@@ -88,26 +92,4 @@ public class TableGroupController extends BaseController {
         }
     }
 
-    @GetMapping("/get")
-    @ResponseBody
-    public RestResult get(@RequestParam(value = "id") String id) {
-        try {
-            return RestResult.restSuccess(tableGroupService.getTableGroup(id));
-        } catch (Exception e) {
-            logger.error(e.getLocalizedMessage(), e.getClass());
-            return RestResult.restFail(e.getMessage());
-        }
-    }
-
-    @GetMapping("/getAll")
-    @ResponseBody
-    public RestResult getAll(@RequestParam(value = "mappingId") String mappingId) {
-        try {
-            return RestResult.restSuccess(tableGroupService.getTableGroupAll(mappingId));
-        } catch (Exception e) {
-            logger.error(e.getLocalizedMessage(), e.getClass());
-            return RestResult.restFail(e.getMessage());
-        }
-    }
-
 }

+ 21 - 16
dbsyncer-web/src/main/resources/static/js/mapping/edit.js

@@ -122,35 +122,37 @@ function bindTableSelect(){
 
 // 绑定新增表关系点击事件
 function bindMappingTableGroupAddClick($sourceSelect, $targetSelect) {
-    var $addBtn = $("#tableGroupAddBtn");
+    let $addBtn = $("#tableGroupAddBtn");
     $addBtn.unbind("click");
     $addBtn.bind('click', function () {
-        var m = {};
+        let m = {};
         m.mappingId = $(this).attr("mappingId");
         m.sourceTable = $sourceSelect.selectpicker('val');
         m.targetTable = $targetSelect.selectpicker('val');
-        if(undefined == m.sourceTable){
+        if (undefined == m.sourceTable) {
             bootGrowl("请选择数据源表", "danger");
             return;
         }
-        if(undefined == m.targetTable){
+        if (undefined == m.targetTable) {
             bootGrowl("请选择目标源表", "danger");
             return;
         }
 
-        // 如果存在多个选择,只筛选相似表
-        var sLen = m.sourceTable.length;
-        var tLen = m.targetTable.length;
-        if (1 < sLen || 1 < tLen) {
-            var mark = [];
-            for (j = 0; j < sLen; j++) {
-                if (-1 != m.targetTable.indexOf(m.sourceTable[j])) {
-                    mark.push(m.sourceTable[j]);
-                }
-            }
-            m.sourceTable = mark;
-            m.targetTable = mark;
+        let sLen = m.sourceTable.length;
+        let tLen = m.targetTable.length;
+        if (sLen < 1) {
+            bootGrowl("请选择数据源表", "danger");
+            return;
         }
+        if (tLen < 1) {
+            bootGrowl("请选择目标源表", "danger");
+            return;
+        }
+        if (sLen != tLen) {
+            bootGrowl("表映射关系数量不一致,请检查源表和目标表关系", "danger");
+            return;
+        }
+
         m.sourceTable = m.sourceTable.join('|');
         m.targetTable = m.targetTable.join('|');
         m.sourceTablePK = $("#sourceTablePK").val();
@@ -162,6 +164,9 @@ function bindMappingTableGroupAddClick($sourceSelect, $targetSelect) {
                 refresh(m.mappingId);
             } else {
                 bootGrowl(data.resultValue, "danger");
+                if (data.status == 400) {
+                    refresh(m.mappingId);
+                }
             }
         });
     });