Browse Source

生成数据库sql脚本功能

lichunlei 10 hours ago
parent
commit
49ae0bc077

+ 39 - 6
Controllers/Admin/DatabaseInfoController.cs

@@ -6,6 +6,8 @@ using Model.Base;
 using Vo.Admin;
 using Vo.Admin;
 using Mapster;
 using Mapster;
 using Infrastructure;
 using Infrastructure;
+using Dto.Admin;
+using Util;
 
 
 
 
 namespace Controllers.Admin
 namespace Controllers.Admin
@@ -16,19 +18,19 @@ namespace Controllers.Admin
     // [ApiExplorerSettings(GroupName = "DatabaseInfo")]
     // [ApiExplorerSettings(GroupName = "DatabaseInfo")]
     public class DatabaseInfoController : BaseController
     public class DatabaseInfoController : BaseController
     {
     {
-        /// <summary>
-        /// api分组接口
-        /// </summary>
         private readonly IDatabaseInfoService _DatabaseInfoService;
         private readonly IDatabaseInfoService _DatabaseInfoService;
+        private readonly IDatabaseTableService _DatabaseTableService;
+        private readonly IDatabaseFieldService _DatabaseFieldService;
 
 
 
 
-        public DatabaseInfoController(IDatabaseInfoService DatabaseInfoService)
+        public DatabaseInfoController(IDatabaseInfoService DatabaseInfoService, IDatabaseTableService DatabaseTableService, IDatabaseFieldService DatabaseFieldService)
         {
         {
             _DatabaseInfoService = DatabaseInfoService;
             _DatabaseInfoService = DatabaseInfoService;
-
+            _DatabaseTableService = DatabaseTableService;
+            _DatabaseFieldService = DatabaseFieldService;
         }
         }
 
 
-          /// <param name="page">分页参数</param>
+        /// <param name="page">分页参数</param>
         /// <summary>
         /// <summary>
         /// 列表
         /// 列表
         /// </summary>
         /// </summary>
@@ -102,6 +104,37 @@ namespace Controllers.Admin
         }
         }
 
 
 
 
+        /// <summary>
+        /// 生成
+        /// </summary>
+        /// <param name="param">参数请求体</param>
+        /// <returns>生成</returns>
+        [HttpPut]
+        [Route("/v1/omega_source/DatabaseInfo/makeDatabaseInfo")]
+        public IActionResult makeDatabaseInfo([FromBody] MakeDatabaseInfoDto param)
+        {
+            TokenModel loginUser = JwtUtil.GetLoginUser(HttpContext);
+            var tables = _DatabaseTableService.GetList(m => m.databaseId == param.id);
+            var fields = _DatabaseFieldService.GetList(m => m.databaseId == param.id);
+            _DatabaseInfoService.makeDatabaseInfo(param, tables, fields, loginUser);
+            return SUCCESS("ok");
+        }
+
+
+        /// <summary>
+        /// 克隆已有库
+        /// </summary>
+        /// <param name="param">参数请求体</param>
+        /// <returns>克隆已有库</returns>
+        [HttpPost]
+        [Route("/v1/omega_source/DatabaseInfo/copyDatabaseInfo")]
+        public IActionResult copyDatabaseInfo([FromBody] CopyDatabaseInfoDto param)
+        {
+            
+            return SUCCESS("ok");
+        }
+
+
 
 
 
 
     }
     }

+ 33 - 0
Model/Custom/MakeData.cs

@@ -0,0 +1,33 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using Model.Base;
+
+namespace Custom
+{
+    public class MakeData
+    {
+        /// <summary>
+        /// 流水号
+        /// </summary>
+        public string requestId { get; set; }
+
+
+        /// <summary>
+        /// 模板路径
+        /// </summary>
+        public string modePath { get; set; }
+
+
+        /// <summary>
+        /// 附加数据,原样返回
+        /// </summary>
+        public string attach { get; set; }
+
+
+        /// <summary>
+        /// 数据
+        /// </summary>
+        public Dictionary<string, object> data { get; set; }
+
+    }
+}

+ 4 - 0
Model/Database/DatabaseTable.cs

@@ -115,6 +115,10 @@ namespace Model
         public int splitKind { get; set; }
         public int splitKind { get; set; }
 
 
 
 
+        [SugarColumn(IsIgnore = true)]
+        public List<DatabaseField> fields { get; set; }
+
+
 
 
     }
     }
 }
 }

+ 17 - 0
Model/Dto/Admin/MakeDatabaseInfoDto.cs

@@ -0,0 +1,17 @@
+using System;
+using System.ComponentModel.DataAnnotations;
+using Model.Base;
+
+namespace Dto.Admin
+{
+    public class MakeDatabaseInfoDto
+    {
+        /// <summary>
+        /// 字段ID
+        /// </summary>
+        public int id { get; set; }
+
+
+
+    }
+}

+ 3 - 0
Program.cs

@@ -12,6 +12,7 @@ using Nacos.AspNetCore.V2;
 using Util;
 using Util;
 using System.Net;
 using System.Net;
 using System.Net.Sockets;
 using System.Net.Sockets;
+using Task;
 
 
 var builder = WebApplication.CreateBuilder(args);
 var builder = WebApplication.CreateBuilder(args);
 
 
@@ -126,5 +127,7 @@ app.MapControllers();
 
 
 app.Urls.Add("http://*:8005");
 app.Urls.Add("http://*:8005");
 
 
+RabbitMQClient.Instance.Conn("MakeSqlQueue");
+MakeHelper.Instance.Start("MakeSqlCallBackQueue");
 
 
 app.Run();
 app.Run();

+ 33 - 0
Services/DatabaseInfoService.cs

@@ -5,6 +5,9 @@ using Repository;
 using Service;
 using Service;
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.AspNetCore.Mvc;
 using Vo.Admin;
 using Vo.Admin;
+using Dto.Admin;
+using Custom;
+using Common;
 
 
 
 
 namespace Services
 namespace Services
@@ -36,5 +39,35 @@ namespace Services
 
 
 
 
 
 
+        /// <summary>
+        /// 生成SQL脚本
+        /// </summary>
+        /// <param name="param">参数请求体</param>
+        /// <returns>生成</returns>
+        public void makeDatabaseInfo([FromBody] MakeDatabaseInfoDto param, List<DatabaseTable> tables, List<DatabaseField> fields, TokenModel loginUser)
+        {
+            DatabaseInfo databaseInfo = GetById(param.id) ?? new DatabaseInfo();
+            foreach(DatabaseTable table in tables)
+            {
+                table.fields = fields.Where(m => m.tableId == table.id).ToList();
+            }
+
+            MakeData makeData = new();
+            string requestId = DateTime.Now.ToString("yyyyMMddHHmmssfff") + Function.get_Random(8);
+            makeData.requestId = requestId;
+            makeData.modePath = "Sql/db.sql";
+            Dictionary<string, string> attach = new();
+            attach.Add("id", param.id.ToString());
+            attach.Add("kind", "db");
+            attach.Add("operator", loginUser.username);
+            makeData.attach = Newtonsoft.Json.JsonConvert.SerializeObject(attach);
+            makeData.data = new Dictionary<string, object>();
+            makeData.data.Add("databaseInfo", databaseInfo);
+            makeData.data.Add("databaseTable", tables);
+            RabbitMQClient.Instance.Push("MakeSqlQueue", Newtonsoft.Json.JsonConvert.SerializeObject(makeData));
+        }
+
+
+
     }
     }
 }
 }

+ 9 - 0
Services/IService/IDatabaseInfoService.cs

@@ -2,6 +2,7 @@ using Model;
 using Model.Base;
 using Model.Base;
 using Microsoft.AspNetCore.Mvc;
 using Microsoft.AspNetCore.Mvc;
 using Vo.Admin;
 using Vo.Admin;
+using Dto.Admin;
 
 
 
 
 namespace Services
 namespace Services
@@ -17,6 +18,14 @@ namespace Services
         PagedInfo<GetDatabaseInfoListVo> getDatabaseInfoList([FromQuery] PagerInfo page, [FromQuery] DatabaseInfo param);
         PagedInfo<GetDatabaseInfoListVo> getDatabaseInfoList([FromQuery] PagerInfo page, [FromQuery] DatabaseInfo param);
 
 
 
 
+        /// <summary>
+        /// 生成SQL脚本
+        /// </summary>
+        /// <param name="param">参数请求体</param>
+        /// <returns>生成</returns>
+        void makeDatabaseInfo([FromBody] MakeDatabaseInfoDto param, List<DatabaseTable> tables, List<DatabaseField> fields, TokenModel loginUser);
+
+
 
 
     }
     }
 }
 }

+ 67 - 0
Task/MakeHelper.cs

@@ -0,0 +1,67 @@
+using System.Collections;
+using System.Text.RegularExpressions;
+using Common;
+using Custom;
+using Infrastructure;
+using LitJson;
+using Microsoft.CodeAnalysis.CSharp.Scripting;
+using Model;
+using Services;
+
+namespace Task
+{
+    public class MakeHelper
+    {
+        public readonly static MakeHelper Instance = new MakeHelper();
+        private MakeHelper()
+        { }
+
+        public void Start(string QueueName)
+        {
+            RabbitMQClient.Instance.StartReceive(QueueName, content => DoWorks(content));
+        }
+
+        public void DoWorks(string content)
+        {
+            try
+            {
+                if (!string.IsNullOrEmpty(content))
+                {
+                    DoQueue(content);
+                }
+            }
+            catch (Exception ex)
+            {
+                Utils.WriteLog(DateTime.Now.ToString() + "\n" + ex, "接收生成SQL回调异常");
+            }
+        }
+
+        public void DoQueue(string content)
+        {
+            string[] array = content.Split(new string[] { "#cut#" }, StringSplitOptions.None);
+            string requestId = array[0];
+            string attach = array[1];
+            string data = array[2];
+            var attachObj = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(attach);
+            if(attachObj["kind"] == "db")
+            {
+                int databaseId = int.Parse(attachObj["id"]);
+                var dbService = App.GetService<IDatabaseInfoService>();
+                var databaseInfo = dbService.GetFirst(m => m.id == databaseId) ?? new DatabaseInfo();
+                var logService = App.GetService<IDatabaseMakeLogService>();
+                logService.Add(new DatabaseMakeLog()
+                {
+                    createTime = DateTime.Now,
+                    updateTime = DateTime.Now,
+                    createBy = attachObj["operator"],
+                    updateBy = attachObj["operator"],
+                    makeObject = 1,
+                    makeObjectId = databaseId,
+                    makeObjectName = databaseInfo.dbName,
+                    makeContent = data,
+                });
+            }
+        }
+
+    }
+}

+ 14 - 0
Util/Utils.cs

@@ -0,0 +1,14 @@
+public class Utils
+{
+    
+    #region 打控制台日志
+
+    public static void WriteLog(string msg, string filename = "message")
+    {
+        Console.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff") + "--" + filename + "--" + msg);
+    }
+
+    #endregion
+
+
+}