xuezizhuo 2 роки тому
батько
коміт
4091383fd6

+ 10 - 2
src/main/java/com/customer/controller/TableInfoController.java

@@ -88,11 +88,19 @@ public class TableInfoController {
     /**
      * 获取表字段
      */
-    @GetMapping("/mysqlTableFieldInfo")
-    public AjaxResult mysqlTableFieldInfo(@RequestParam("tableName") String tableName){
+    @GetMapping("/tableFieldInfo")
+    public AjaxResult tableFieldInfo(@RequestParam("tableName") String tableName){
         return AjaxResult.success(tableInfoService.tableFieldInfo(tableName));
     }
 
+    /**
+     * 修改数据表
+     */
+    @PostMapping("/editTable")
+    public AjaxResult editTable(@RequestBody Map<String, Object> map){
+        return tableInfoService.updateTable(map);
+    }
+
     //---------------------------------------通用接口-----------------------------------------------------
 
 

+ 14 - 4
src/main/java/com/customer/mapper/TableInfoMapper.java

@@ -53,7 +53,7 @@ public interface TableInfoMapper {
     void updateMysqlTable(@Param("dataBaseName") String dataBaseName,@Param("tableName") String tableName,@Param("tableComment") String tableComment,@Param("filedList") List<String> filedList);
 
     /**
-     * 获取表字段信息
+     * 获取表结构
      */
     List<TableInfo> mysqlTableFieldInfo(@Param("dataBaseName") String dataBaseName,@Param("tableName") String tableName);
 
@@ -97,7 +97,12 @@ public interface TableInfoMapper {
     /**
      * 修改sqlserver数据表
      */
-    void updateSqlserverTable(@Param("tableName") String tableName,@Param("filedList") List<String> filedList,@Param("descriptionList") List<String> descriptionList);
+    void updateSqlserverTable(@Param("tableName") String tableName,@Param("filedList") List<String> filedList,@Param("descriptionList") List<String> descriptionList,@Param("tableComment") String tableComment);
+
+    /**
+     * 查询表结构
+     */
+    List<TableInfo> sqlserverTableFieldInfo(@Param("tableName") String tableName);
 
     //---------------------------------DM------------------------------------------
 
@@ -131,7 +136,7 @@ public interface TableInfoMapper {
      */
     void addDmTableComment(@Param("databaseName") String databaseName,@Param("tableName") String tableName,@Param("tableComment") String tableComment);
 
-    /**List<TableInfoVO> dmTableInfoList(@Param("databaseName") String databaseName,@Param("map") Map<String,Object> map, RowBounds rowBounds);
+    /**
      * 库中所有表信息
      */
     List<TableInfoVO> dmTableInfoList(@Param("databaseName") String databaseName,@Param("map") Map<String,Object> map);
@@ -144,13 +149,18 @@ public interface TableInfoMapper {
     /**
      * 删除数据表
      */
-    void dropDmTable(String tableName);
+    void dropDmTable(@Param("dataBaseName") String dataBaseName,@Param("tableName") String tableName);
 
     /**
      * 查询数据库中表数量
      */
     int queryDmTableCount(@Param("databaseName") String databaseName,@Param("map") Map<String,Object> map);
 
+    /**
+     * 查询表结构
+     */
+    List<TableInfo> dmTableFieldInfo(@Param("dataBaseName") String dataBaseName,@Param("tableName") String tableName);
+
 
     //---------------------------------oracle------------------------------------------
 

+ 9 - 0
src/main/java/com/customer/service/ITableInfoService.java

@@ -50,6 +50,10 @@ public interface ITableInfoService {
      */
     AjaxResult createTable(Map<String,Object> map);
 
+    /**
+     * 修改表
+     */
+    AjaxResult updateTable(Map<String,Object> map);
     /**
      * 查询表中有没有数据
      */
@@ -109,6 +113,11 @@ public interface ITableInfoService {
      */
     void createDmDataBase(Map<String,Object> map);
 
+    /**
+     * 修改sqlserver数据表
+     */
+    void updateDmTable(Map<String, Object> map);
+
     /**
      * 查询数据库中表数量
      */

+ 82 - 21
src/main/java/com/customer/service/impl/TableInfoServiceImpl.java

@@ -190,7 +190,7 @@ public class TableInfoServiceImpl implements ITableInfoService {
                 if(tableInfoMapper.selectDmDataCount(tableName)>0){
                     return AjaxResult.warn("表中有数据,不能删除!");
                 }
-                tableInfoMapper.dropDmTable(tableName);
+                tableInfoMapper.dropDmTable(dataSource.getDatabaseName(),tableName);
                 return AjaxResult.success();
             }
 
@@ -235,6 +235,40 @@ public class TableInfoServiceImpl implements ITableInfoService {
         return AjaxResult.success();
     }
 
+    @Override
+    public AjaxResult updateTable(Map<String, Object> map) {
+        String dataBaseName = url.substring(url.lastIndexOf("/") + 1);
+        String tableName = (String) map.get("tableName");
+        if(redisTemplate.hasKey("DataSource")){
+            DataSource dataSource = JSON.parseObject(redisTemplate.opsForValue().get("DataSource").toString(),DataSource.class);
+            if(dataSource.getDatabaseType().equals(DataSourceType.MYSQL.getDataSourceName())){
+                if(tableInfoMapper.selectDataCount(tableName)>0){
+                    return AjaxResult.warn("表中有数据,不能删除!");
+                }
+                updateMysqlTable(map);
+                return AjaxResult.success();
+            }else if(dataSource.getDatabaseType().equals(DataSourceType.SQLSERVER.getDataSourceName())){
+                if(tableInfoMapper.selectSqlServerDataCount(tableName)>0){
+                    return AjaxResult.warn("表中有数据,不能删除!");
+                }
+                updateSqlserverTable(map);
+                return AjaxResult.success();
+            }else if(dataSource.getDatabaseType().equals(DataSourceType.DM.getDataSourceName())){
+                if(tableInfoMapper.selectDmDataCount(tableName)>0){
+                    return AjaxResult.warn("表中有数据,不能删除!");
+                }
+                map.put("dataBaseName",dataSource.getDatabaseName());
+                updateDmTable(map);
+                return AjaxResult.success();
+            }
+        }
+        if(tableInfoMapper.selectDataCount(tableName)>0){
+            return AjaxResult.warn("表中有数据,不能删除!");
+        }
+        updateMysqlTable(map);
+        return AjaxResult.success();
+    }
+
     @Override
     public List<TableInfo> tableFieldInfo(String tableName) {
         String dataBaseName = url.substring(url.lastIndexOf("/") + 1);
@@ -243,7 +277,9 @@ public class TableInfoServiceImpl implements ITableInfoService {
             if(dataSource.getDatabaseType().equals(DataSourceType.MYSQL.getDataSourceName())){
                 return tableInfoMapper.mysqlTableFieldInfo(dataSource.getDatabaseName(),tableName);
             }else if(dataSource.getDatabaseType().equals(DataSourceType.SQLSERVER.getDataSourceName())){
-
+                return tableInfoMapper.sqlserverTableFieldInfo(tableName);
+            }else if(dataSource.getDatabaseType().equals(DataSourceType.DM.getDataSourceName())){
+                return tableInfoMapper.dmTableFieldInfo(dataSource.getDatabaseName(),tableName);
             }
         }
         return tableInfoMapper.mysqlTableFieldInfo(dataBaseName,tableName);
@@ -303,6 +339,7 @@ public class TableInfoServiceImpl implements ITableInfoService {
     @Override
     public void updateSqlserverTable(Map<String, Object> map) {
         String tableName = (String) map.get("tableName");
+        String tableComment = (String) map.get("tableComment");
         List<TableInfo> filedList = JSON.parseArray(JSON.toJSONString(map.get("field")), TableInfo.class);
         List<String> list= filedList.stream().map(filed->{
             StringBuilder stringBuilder = new StringBuilder();
@@ -333,7 +370,7 @@ public class TableInfoServiceImpl implements ITableInfoService {
             return stringBuilder.toString();
         }).collect(Collectors.toList());
         tableInfoMapper.dropSqlserverTable(tableName);
-        tableInfoMapper.updateSqlserverTable(tableName,list,descriptionList);
+        tableInfoMapper.updateSqlserverTable(tableName,list,descriptionList,tableComment);
     }
 
     @Override
@@ -388,24 +425,48 @@ public class TableInfoServiceImpl implements ITableInfoService {
         }
     }
 
-//    @Override
-//    public int queryDmTableCount(Map<String,Object> map) {
-//        String dataBaseName = (String) map.get("dataBaseName");
-//        if(redisTemplate.hasKey("DataSource")){
-//            DataSource dataSource =JSON.parseObject(redisTemplate.opsForValue().get("DataSource").toString(),DataSource.class);
-//            if(dataSource.getDatabaseType().equals(DataSourceType.MYSQL.getDataSourceName())){
-//                return 0;
-//
-//            }else if(dataSource.getDatabaseType().equals(DataSourceType.SQLSERVER.getDataSourceName())){
-//                return 0;
-//
-//            }else if(dataSource.getDatabaseType().equals(DataSourceType.DM.getDataSourceName())){
-//                return tableInfoMapper.queryDmTableCount(dataSource.getDatabaseName(),map);
-//            }
-//        }
-//        return 0;
-//
-//    }
+    @Override
+    public void updateDmTable(Map<String, Object> map) {
+        String dataBaseName = (String) map.get("dataBaseName");
+        String tableName = (String) map.get("tableName");
+        String tableComment = (String) map.get("tableComment");
+        List<TableInfo> filedList = JSON.parseArray(JSON.toJSONString(map.get("field")), TableInfo.class);
+        List<String> descriptionList = new ArrayList<>();
+        List<String> list= filedList.stream().map(filed->{
+            StringBuilder stringBuilder = new StringBuilder();
+            stringBuilder.append(filed.getFieldName()+" ")
+                    .append(filed.getFieldType()+" ");
+            if(filed.getIsPrimary()){
+                if(filed.getIsAuto()){
+                    stringBuilder.append("IDENTITY(1,1) ");
+                }
+                stringBuilder.append("PRIMARY KEY ");
+            }
+            if(filed.getIsNull()){
+                stringBuilder.append("NOT NULL ");
+            }
+
+            if(StringUtils.hasLength(filed.getFieldDescription())){
+                StringBuilder builder = new StringBuilder();
+                builder.append("COMMENT ON COLUMN \"")
+                        .append(dataBaseName)
+                        .append("\".\"")
+                        .append(tableName)
+                        .append("\".\"")
+                        .append(filed.getFieldName()+"\" IS ")
+                        .append("'"+filed.getFieldDescription()+"'");
+                descriptionList.add(builder.toString());
+            }
+
+            return stringBuilder.toString();
+        }).collect(Collectors.toList());
+        System.err.println(dataBaseName);
+            tableInfoMapper.dropDmTable(dataBaseName,tableName);
+            tableInfoMapper.createDmTable(dataBaseName,tableName,list);
+            descriptionList.stream().forEach(f->tableInfoMapper.addTableDescription(f));
+            tableInfoMapper.addDmTableComment(dataBaseName,tableName,tableComment);
+
+    }
 
     @Override
     public int oracleTableExist(String tableName) {

+ 67 - 1
src/main/resources/mapper/TableInfoMapper.xml

@@ -143,8 +143,49 @@
         <foreach collection="descriptionList" item="description" separator=";">
             ${description}
         </foreach>
+        ;EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'${tableComment}' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'${tableName}'
     </update>
 
+    <select id="sqlserverTableFieldInfo" resultMap="mysqlTableInfoResult">
+        SELECT
+
+        fieldName     = a.name,
+        isAuto       = case when COLUMNPROPERTY( a.id,a.name,'IsIdentity')=1 then 1 else 0 end,
+        isPrimary       = case when exists(SELECT 1 FROM sysobjects where xtype='PK' and parent_obj=a.id and name in (
+        SELECT name FROM sysindexes WHERE indid in( SELECT indid FROM sysindexkeys WHERE id = a.id AND colid=a.colid))) then 1 else 0 end,
+        fieldType       = b.name,
+        fieldLength       = COLUMNPROPERTY(a.id,a.name,'PRECISION'),
+        isNull     = case when a.isnullable=1 then 0 else 1 end,
+
+        fieldDescription   = isnull(g.[value],'')
+        FROM
+        syscolumns a
+        left join
+        systypes b
+        on
+        a.xusertype=b.xusertype
+        inner join
+        sysobjects d
+        on
+        a.id=d.id  and d.xtype='U' and  d.name<![CDATA[<>]]>'dtproperties'
+        left join
+        syscomments e
+        on
+        a.cdefault=e.id
+        left join
+        sys.extended_properties   g
+        on
+        a.id=G.major_id and a.colid=g.minor_id
+        left join
+        sys.extended_properties f
+        on
+        d.id=f.major_id and f.minor_id=0
+        where
+        d.name=#{tableName}
+        order by
+        a.id,a.colorder
+    </select>
+
 
     <select id="dmTableExist" resultType="int">
         select count(1) from dba_segments where dba_segments.OWNER=#{dataBaseName} and SEGMENT_NAME=#{tableName}
@@ -195,7 +236,7 @@
     </select>
 
     <delete id="dropDmTable">
-        drop table ${tableName}
+        drop table ${dataBaseName}.${tableName}
     </delete>
 
     <select id="queryDmTableCount" resultType="int">
@@ -207,6 +248,31 @@
         <if test="map.tableComment != null and map.tableComment !=''">and b.comment$ like concat('%', #{map.tableComment}, '%')</if>
     </select>
 
+    <select id="dmTableFieldInfo" resultMap="mysqlTableInfoResult">
+        SELECT a.table_name As tableName
+             , c.comments As tableComment
+             , a.column_name As fieldName
+             , b.comments As fieldDescription
+             , a.data_type As fieldType
+             , a.data_length As fieldLength
+             ,(case when d.column_position = 1 then 1 else 0 end) As isPrimary
+             ,(case when (e.nullable = 'N') then 1 else 0 end) as isNull
+             ,(case when f.info2 = 1 then 1 else 0 end) as  isAuto
+        FROM all_tab_cols a
+                 LEFT JOIN all_col_comments b ON b.table_name = a.table_name AND b.column_name = a.column_name AND a.owner = b.schema_name
+                 LEFT JOIN all_tab_comments c ON c.table_name = b.table_name AND c.owner      = b.owner
+                 LEFT JOIN ( SELECT dcc.table_name,dcc.column_name,dcc.column_position,dcc.index_owner,dc.constraint_name
+                             FROM all_ind_columns dcc
+                                      JOIN all_constraints dc ON dcc.index_name = dc.index_name AND dc.constraint_type = UPPER('p') AND dcc.index_owner = dc.owner) d
+                           ON d.table_name  = a.table_name AND d.column_name = a.column_name AND d.index_owner = a.owner
+                 LEFT JOIN all_tab_columns e ON a.table_name = e.table_name AND a.owner = e.owner and a.column_name = e.column_name
+                 LEFT JOIN (SELECT f1.owner,f1.object_name As table_name,f0.name,f0.info2 FROM syscolumns f0
+                                                                                                   INNER JOIN dba_objects f1 ON f1.object_type = 'TABLE' AND info2 =1 AND f1.object_id = f0.id
+        ) f ON f.name = a.column_name AND f.table_name = a.table_name AND f.owner = a.owner
+        WHERE a.owner = UPPER(#{dataBaseName}) and a.table_name = #{tableName}
+        ORDER BY a.table_name ASC, a.column_id ASC;
+    </select>
+
     <update id="createOracleUser">
         CREATE USER ${username} IDENTIFIED BY ${password} DEFAULT TABLESPACE users QUOTA unlimited ON users
     </update>