瀏覽代碼

😎完善库表可视化,根据导航配置增加表之间关联关系

zuohuaijun 2 年之前
父節點
當前提交
d50fd3a93c

+ 31 - 23
Admin.NET/Admin.NET.Core/Service/DataBase/SysDatabaseService.cs

@@ -42,52 +42,60 @@ public class SysDatabaseService : IDynamicApiController, ITransient
     }
 
     /// <summary>
-    /// 获取可视化库表 🔖
+    /// 获取可视化库表结构 🔖
     /// </summary>
     /// <returns></returns>
-    [DisplayName("可视化获取表")]
-    public VisualDbTable GetVisualList()
+    [DisplayName("获取可视化库表结构")]
+    public VisualDbTable GetVisualDbTable()
     {
         var visualTableList = new List<VisualTable>();
         var visualColumnList = new List<VisualColumn>();
         var columnRelationList = new List<ColumnRelation>();
 
-        var dbTableInfos = _db.DbMaintenance.GetTableInfoList(false);
-        foreach (DbTableInfo tableInfo in dbTableInfos)
+        // 遍历所有实体获取所有库表结构
+        var random = new Random();
+        var entityTypes = App.EffectiveTypes.Where(u => !u.IsInterface && !u.IsAbstract && u.IsClass && u.IsDefined(typeof(SugarTable), false)).ToList();
+        foreach (var entityType in entityTypes)
         {
-            var ran = new Random();
+            var entityInfo = _db.EntityMaintenance.GetEntityInfoNoCache(entityType);
+
             var visualTable = new VisualTable
             {
-                TableName = tableInfo.Name,
-                TableComents = tableInfo.Name + tableInfo.Description,
-                X = ran.Next(5000),
-                Y = ran.Next(5000)
+                TableName = entityInfo.DbTableName,
+                TableComents = entityInfo.TableDescription + entityInfo.DbTableName,
+                X = random.Next(5000),
+                Y = random.Next(5000)
             };
             visualTableList.Add(visualTable);
 
-            var dbColumnInfos = _db.DbMaintenance.GetColumnInfosByTableName(tableInfo.Name, false);
-            foreach (DbColumnInfo columnInfo in dbColumnInfos)
+            foreach (EntityColumnInfo columnInfo in entityInfo.Columns)
             {
                 var visualColumn = new VisualColumn
                 {
-                    TableName = columnInfo.TableName,
+                    TableName = columnInfo.DbTableName,
                     ColumnName = columnInfo.DbColumnName,
                     DataType = columnInfo.DataType
                 };
                 visualColumnList.Add(visualColumn);
+
+                // 根据导航配置获取表之间关联关系
+                if (columnInfo.Navigat != null)
+                {
+                    var name1 = columnInfo.Navigat.GetName();
+                    var name2 = columnInfo.Navigat.GetName2();
+                    var relation = new ColumnRelation
+                    {
+                        SourceTableName = columnInfo.DbTableName,
+                        SourceColumnName = name1,
+                        Type = columnInfo.Navigat.GetNavigateType() == NavigateType.OneToOne ? "ONE_TO_ONE" : "ONE_TO_MANY",
+                        TargetTableName = columnInfo.DbColumnName,
+                        TargetColumnName = string.IsNullOrEmpty(name2) ? "Id" : name2
+                    };
+                    columnRelationList.Add(relation);
+                }
             }
         }
 
-        var columnRelation = new ColumnRelation
-        {
-            SourceTableName = "SysDictType",
-            SourceColumnName = "Id",
-            Type = "ONE_TO_ONE",
-            TargetTableName = "SysDictData",
-            TargetColumnName = "Id"
-        };
-        columnRelationList.Add(columnRelation);
-
         return new VisualDbTable { VisualTableList = visualTableList, VisualColumnList = visualColumnList, ColumnRelationList = columnRelationList };
     }
 

+ 12 - 12
Web/src/api-services/apis/sys-database-api.ts

@@ -660,12 +660,12 @@ export const SysDatabaseApiAxiosParamCreator = function (configuration?: Configu
         },
         /**
          * 
-         * @summary 获取可视化库表 🔖
+         * @summary 获取可视化库表结构 🔖
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        apiSysDatabaseVisualListGet: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/sysDatabase/visualList`;
+        apiSysDatabaseVisualDbTableGet: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {
+            const localVarPath = `/api/sysDatabase/visualDbTable`;
             // use dummy base URL string because the URL constructor only accepts absolute URLs.
             const localVarUrlObj = new URL(localVarPath, 'https://example.com');
             let baseOptions;
@@ -893,12 +893,12 @@ export const SysDatabaseApiFp = function(configuration?: Configuration) {
         },
         /**
          * 
-         * @summary 获取可视化库表 🔖
+         * @summary 获取可视化库表结构 🔖
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async apiSysDatabaseVisualListGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultVisualDbTable>>> {
-            const localVarAxiosArgs = await SysDatabaseApiAxiosParamCreator(configuration).apiSysDatabaseVisualListGet(options);
+        async apiSysDatabaseVisualDbTableGet(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<AdminResultVisualDbTable>>> {
+            const localVarAxiosArgs = await SysDatabaseApiAxiosParamCreator(configuration).apiSysDatabaseVisualDbTableGet(options);
             return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
                 const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
                 return axios.request(axiosRequestArgs);
@@ -1044,12 +1044,12 @@ export const SysDatabaseApiFactory = function (configuration?: Configuration, ba
         },
         /**
          * 
-         * @summary 获取可视化库表 🔖
+         * @summary 获取可视化库表结构 🔖
          * @param {*} [options] Override http request option.
          * @throws {RequiredError}
          */
-        async apiSysDatabaseVisualListGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultVisualDbTable>> {
-            return SysDatabaseApiFp(configuration).apiSysDatabaseVisualListGet(options).then((request) => request(axios, basePath));
+        async apiSysDatabaseVisualDbTableGet(options?: AxiosRequestConfig): Promise<AxiosResponse<AdminResultVisualDbTable>> {
+            return SysDatabaseApiFp(configuration).apiSysDatabaseVisualDbTableGet(options).then((request) => request(axios, basePath));
         },
     };
 };
@@ -1205,12 +1205,12 @@ export class SysDatabaseApi extends BaseAPI {
     }
     /**
      * 
-     * @summary 获取可视化库表 🔖
+     * @summary 获取可视化库表结构 🔖
      * @param {*} [options] Override http request option.
      * @throws {RequiredError}
      * @memberof SysDatabaseApi
      */
-    public async apiSysDatabaseVisualListGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultVisualDbTable>> {
-        return SysDatabaseApiFp(this.configuration).apiSysDatabaseVisualListGet(options).then((request) => request(this.axios, this.basePath));
+    public async apiSysDatabaseVisualDbTableGet(options?: AxiosRequestConfig) : Promise<AxiosResponse<AdminResultVisualDbTable>> {
+        return SysDatabaseApiFp(this.configuration).apiSysDatabaseVisualDbTableGet(options).then((request) => request(this.axios, this.basePath));
     }
 }