ZHOUTD пре 1 година
родитељ
комит
ccee6b4282

+ 6 - 0
xzl-admin/src/main/java/com/xzl/web/controller/DataGovernanceController.java

@@ -1,6 +1,7 @@
 package com.xzl.web.controller;
 
 import com.xzl.web.model.dataGovernance.dto.CreateTableDTO;
+import com.xzl.web.model.dataGovernance.dto.DataReplicationParam;
 import com.xzl.web.model.dataGovernance.entity.DatabaseInfo;
 import com.xzl.web.model.dataGovernance.entity.TableInfo;
 import com.xzl.web.service.DataGovernanceService;
@@ -63,4 +64,9 @@ public class DataGovernanceController {
         return dataGovernanceService.getTableData(tableName);
     }
 
+    @RequestMapping(value = "/dataReplication", method = RequestMethod.POST)
+    public Map<String, String> dataReplication(@RequestBody DataReplicationParam param){
+        return dataGovernanceService.dataReplication(param);
+    }
+
 }

+ 7 - 1
xzl-admin/src/main/java/com/xzl/web/mapper/DataGovernanceMapper.java

@@ -1,10 +1,11 @@
 package com.xzl.web.mapper;
 
 import com.xzl.web.model.dataGovernance.dto.CreateTableDTO;
+import com.xzl.web.model.dataGovernance.dto.DataReplicationParam;
 import com.xzl.web.model.dataGovernance.entity.DatabaseInfo;
 import com.xzl.web.model.dataGovernance.entity.TableInfo;
+import com.xzl.web.model.dataGovernance.entity.TableStructure;
 import org.apache.ibatis.annotations.Mapper;
-import org.apache.poi.ss.formula.functions.T;
 
 import java.util.List;
 import java.util.Map;
@@ -26,4 +27,9 @@ public interface DataGovernanceMapper {
     List<Map> getTableTitleListByTableName(Map<String,String> param);
 
     List<Map> getTableDataByTableName(String tableName);
+
+    List<TableStructure> getTableStructure(Map<String,String> param);
+
+    void dataReplication(DataReplicationParam param);
+
 }

+ 11 - 0
xzl-admin/src/main/java/com/xzl/web/model/dataGovernance/dto/DataReplicationParam.java

@@ -0,0 +1,11 @@
+package com.xzl.web.model.dataGovernance.dto;
+
+import lombok.Data;
+
+@Data
+public class DataReplicationParam {
+    private String resourceDatabaseName;
+    private String resourceTableName;
+    private String targetDatabaseName;
+    private String targetTableName;
+}

Разлика између датотеке није приказан због своје велике величине
+ 57 - 0
xzl-admin/src/main/java/com/xzl/web/model/dataGovernance/entity/TableStructure.java


+ 3 - 0
xzl-admin/src/main/java/com/xzl/web/service/DataGovernanceService.java

@@ -1,6 +1,7 @@
 package com.xzl.web.service;
 
 import com.xzl.web.model.dataGovernance.dto.CreateTableDTO;
+import com.xzl.web.model.dataGovernance.dto.DataReplicationParam;
 import com.xzl.web.model.dataGovernance.entity.DatabaseInfo;
 import com.xzl.web.model.dataGovernance.entity.TableInfo;
 
@@ -24,4 +25,6 @@ public interface DataGovernanceService {
     List<Map> getTableTitleList(String tableName);
 
     List<Map> getTableData(String tableName);
+
+    Map<String, String> dataReplication(DataReplicationParam param);
 }

+ 36 - 2
xzl-admin/src/main/java/com/xzl/web/service/impl/DataGovernanceServiceImpl.java

@@ -3,9 +3,11 @@ package com.xzl.web.service.impl;
 
 import com.xzl.web.mapper.DataGovernanceMapper;
 import com.xzl.web.model.dataGovernance.dto.CreateTableDTO;
+import com.xzl.web.model.dataGovernance.dto.DataReplicationParam;
 import com.xzl.web.model.dataGovernance.entity.DatabaseInfo;
 import com.xzl.web.model.dataGovernance.entity.TableColumnParam;
 import com.xzl.web.model.dataGovernance.entity.TableInfo;
+import com.xzl.web.model.dataGovernance.entity.TableStructure;
 import com.xzl.web.service.DataGovernanceService;
 import org.mybatis.spring.SqlSessionTemplate;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -113,8 +115,6 @@ public class DataGovernanceServiceImpl implements DataGovernanceService {
             return result;
         }
 
-
-
         try {
             dataGovernanceMapper.createTable(createTableDTO);
         } catch (Exception e) {
@@ -161,6 +161,40 @@ public class DataGovernanceServiceImpl implements DataGovernanceService {
         return dataGovernanceMapper.getTableDataByTableName(tableName);
     }
 
+    @Override
+    public Map<String, String> dataReplication(DataReplicationParam param) {
+        Map<String,String> result = new HashMap<>();
+        if(verifySQLName(param.getResourceDatabaseName()) && verifySQLName(param.getResourceTableName()) && verifySQLName(param.getTargetDatabaseName()) && verifySQLName(param.getTargetTableName())){
+            result.put("message","传入参数不符合规则!");
+            result.put("type","error");
+            return result;
+        }
+        Map<String,String> resource = new HashMap<>();
+        Map<String,String> target = new HashMap<>();
+        resource.put("databaseName",param.getResourceDatabaseName());
+        resource.put("tableName",param.getResourceTableName());
+        target.put("databaseName",param.getTargetDatabaseName());
+        target.put("tableName",param.getTargetTableName());
+        List<TableStructure> resourceTableStructure = dataGovernanceMapper.getTableStructure(resource);
+        List<TableStructure> targetTableStructure = dataGovernanceMapper.getTableStructure(target);
+        if(resourceTableStructure.size()!=targetTableStructure.size()){
+            result.put("message","复制失败!选择的表结构不同");
+            result.put("type","error");
+            return result;
+        }
+        for(int i=0;i<resourceTableStructure.size();i++){
+            if(resourceTableStructure.get(0)!=targetTableStructure.get(0)){
+                result.put("message","复制失败!选择的表结构不同");
+                result.put("type","error");
+                return result;
+            }
+        }
+        dataGovernanceMapper.dataReplication(param);
+        result.put("message","复制完成!");
+        result.put("type","success");
+        return result;
+    }
+
 
     private Boolean verifySQLName(String text){
         return text.isEmpty() || !text.matches("^[a-zA-Z_][a-zA-Z0-9_]{0,63}$");

+ 25 - 0
xzl-admin/src/main/resources/mapper/DataGovernanceMapper.xml

@@ -31,6 +31,27 @@
         select * from ${tableName}
     </select>
 
+    <select id="getTableStructure" resultType="com.xzl.web.model.dataGovernance.entity.TableStructure" parameterType="map">
+        SELECT
+            TABLE_SCHEMA AS "tableSchema",
+            TABLE_NAME AS "tableName",
+            COLUMN_NAME AS "columnName",
+            IS_NULLABLE AS "isNullable",
+            DATA_TYPE AS "dataType",
+            CHARACTER_MAXIMUM_LENGTH AS "characterMaximumLength",
+            CHARACTER_OCTET_LENGTH AS "characterOctetLength",
+            NUMERIC_PRECISION AS "numericPrecision",
+            NUMERIC_SCALE AS "numericScale",
+            DATETIME_PRECISION AS "datetimePrecision",
+            CHARACTER_SET_NAME AS "characterSetName",
+            COLLATION_NAME AS "collationName",
+            COLUMN_TYPE AS "columnType",
+            COLUMN_KEY AS "columnKey"
+        FROM information_schema.`COLUMNS`
+        WHERE TABLE_SCHEMA=#{databaseName} AND TABLE_NAME=#{tableName}
+        ORDER BY ORDINAL_POSITION
+    </select>
+
     <update id="createDatabase" parameterType="string">
         CREATE DATABASE IF NOT EXISTS ${databaseName}
         DEFAULT CHARACTER SET utf8mb4
@@ -53,4 +74,8 @@
         DROP TABLE ${tableName}
     </update>
 
+    <insert id="dataReplication" parameterType="com.xzl.web.model.dataGovernance.dto.DataReplicationParam">
+        INSERT INTO ${targetDatabaseName}.${targetTableName}
+        SELECT * FROM ${resourceDatabaseName}.${resourceTableName}
+    </insert>
 </mapper>

+ 25 - 3
xzl-ui/src/views/dataGovernance/tableData.vue

@@ -2,14 +2,26 @@
   <div>
     <el-table
       :data="tableData"
+      :height="height"
       border
       stripe
       size="medium"
+      v-loading="loading"
+      element-loading-text="拼命加载中"
+      element-loading-spinner="el-icon-loading"
+      element-loading-background="rgba(0, 0, 0, 0.8)"
     >
       <el-table-column v-for="(item,index) in  titleData" :key="index" :prop="item.name" :label="item.name" show-overflow-tooltip></el-table-column>
     </el-table>
-
-
+    <el-pagination
+      @size-change="handleSizeChange"
+      @current-change="handleCurrentChange"
+      :current-page="currentPage"
+      :page-sizes="[10, 20, 50, 100]"
+      :page-size="10"
+      layout="total, sizes, prev, pager, next, jumper"
+      :total="400">
+    </el-pagination>
   </div>
 </template>
 <script>
@@ -19,7 +31,10 @@ export default {
   data() {
     return {
       titleData:[],
-      tableData: []
+      tableData: [],
+      loading:true,
+      height:window.outerHeight*0.7,
+      currentPage:1
     }
   },
   mounted() {
@@ -43,7 +58,14 @@ export default {
         method: "get"
       }).then(rs => {
         t.tableData = rs;
+        t.loading=false;
       })
+    },
+    handleSizeChange(val){
+      console.log(val)
+    },
+    handleCurrentChange(val){
+      console.log(val)
     }
   }
 }