Просмотр исходного кода

完善app页面和静态资源文件的管理

lichunlei 7 месяцев назад
Родитель
Сommit
1536a5ede9

+ 58 - 0
Common/File/FileHelper.cs

@@ -0,0 +1,58 @@
+using System.IO.Compression;
+
+namespace Common
+{
+    public class FileHelper
+    {
+        /// <summary>
+        /// 解压zip文件
+        /// </summary>
+        /// <param name="zipPath">zip文件路径</param>
+        /// <param name="extractPath">解压到的目标路径</param>
+        /// <param name="overwrite">是否覆盖已存在的文件,默认覆盖</param>
+        public static bool ExtractZip(string zipPath, string extractPath, bool overwrite = true)
+        {
+            try
+            {
+                zipPath = Function.getPath(zipPath);
+                extractPath = Function.getPath(extractPath);
+                ZipFile.ExtractToDirectory(zipPath, extractPath, overwrite);
+                return true;
+            }
+            catch(Exception ex)
+            {
+                Utils.WriteLog(ex.ToString(), "FileHelper-ExtractZip");
+                return false;
+            }
+        }
+
+
+        public static List<string> GetSystemFiles(string directoryInfo)
+        {
+            List<string> SystemFiles = new List<string>();
+            directoryInfo = Function.getPath(directoryInfo);
+            System.IO.FileSystemInfo info = new System.IO.DirectoryInfo(directoryInfo);
+            scan(SystemFiles, info);
+            return SystemFiles;
+        }
+        private static void scan(List<string> SystemFiles, System.IO.FileSystemInfo info)
+        {
+            if (!info.Exists) return;
+            System.IO.DirectoryInfo dir = info as System.IO.DirectoryInfo;
+            //不是目录
+            if (dir == null) return;
+            System.IO.FileSystemInfo[] files = dir.GetFileSystemInfos();
+            for (int i = 0; i < files.Length; i++)
+            {
+                System.IO.FileInfo file = files[i] as System.IO.FileInfo;
+                //是文件
+                if (file != null)
+                {
+                    SystemFiles.Add(file.FullName);
+                }
+                else scan(SystemFiles, files[i]);
+            }
+        }
+    }
+}
+

+ 0 - 5
Controllers/Admin/AppProjectController.cs

@@ -17,19 +17,14 @@ namespace Controllers.Admin
     // [ApiExplorerSettings(GroupName = "AppProject")]
     public class AppProjectController : BaseController
     {
-        /// <summary>
-        /// api分组接口
-        /// </summary>
         private readonly IAppProjectService _AppProjectService;
 
 
         public AppProjectController(IAppProjectService AppProjectService)
         {
             _AppProjectService = AppProjectService;
-
         }
 
-          /// <param name="page">分页参数</param>
         /// <summary>
         /// 列表
         /// </summary>

+ 2 - 2
Controllers/Admin/AppProjectPageStyleController.cs

@@ -38,7 +38,7 @@ namespace Controllers.Admin
         [Route("/v1/omega_source/AppProjectPageStyle/getAppProjectPageStyleQuery")]
         public IActionResult getAppProjectPageStyleQuery([FromQuery] AppProjectPageStyle param)
         {
-            var response = _AppProjectPageStyleService.GetFirst(m => m.appId == param.appId).Adapt<GetAppProjectPageStyleQueryVo>();
+            var response = _AppProjectPageStyleService.GetFirst(m => m.appId == param.appId && m.versionId == param.versionId).Adapt<GetAppProjectPageStyleQueryVo>();
             return SUCCESS(response);
         }
 
@@ -53,7 +53,7 @@ namespace Controllers.Admin
         public IActionResult updateAppProjectPageStyle([FromBody] AppProjectPageStyle param)
         {
             var modal = param.Adapt<AppProjectPageStyle>().ToCreate(HttpContext);
-            var item = _AppProjectPageStyleService.GetFirst(m => m.appId == param.appId);
+            var item = _AppProjectPageStyleService.GetFirst(m => m.appId == param.appId && m.versionId == param.versionId);
             if(item == null)
             {
                 _AppProjectPageStyleService.Add(modal);

+ 14 - 6
Controllers/Admin/AppProjectVersionController.cs

@@ -6,6 +6,7 @@ using Model.Base;
 using Vo.Admin;
 using Mapster;
 using Infrastructure;
+using Common;
 
 
 namespace Controllers.Admin
@@ -17,16 +18,15 @@ namespace Controllers.Admin
     // [ApiExplorerSettings(GroupName = "AppProjectVersion")]
     public class AppProjectVersionController : BaseController
     {
-        /// <summary>
-        /// api分组接口
-        /// </summary>
         private readonly IAppProjectVersionService _AppProjectVersionService;
+        private readonly IAppProjectPageService _AppProjectPageService;
+        private readonly IAppProjectStaticService _AppProjectStaticService;
 
-
-        public AppProjectVersionController(IAppProjectVersionService AppProjectVersionService)
+        public AppProjectVersionController(IAppProjectVersionService AppProjectVersionService, IAppProjectPageService AppProjectPageService, IAppProjectStaticService AppProjectStaticService)
         {
             _AppProjectVersionService = AppProjectVersionService;
-
+            _AppProjectPageService = AppProjectPageService;
+            _AppProjectStaticService = AppProjectStaticService;
         }
 
           /// <param name="page">分页参数</param>
@@ -70,6 +70,10 @@ namespace Controllers.Admin
         {
             var modal = param.Adapt<AppProjectVersion>().ToCreate(HttpContext);
             var response = _AppProjectVersionService.InsertReturnIdentity(modal);
+            string extractPath = "/AppProject/" + param.appId + "/" + param.id + "/";
+            FileHelper.ExtractZip(param.staticFile, extractPath, true);
+            _AppProjectPageService.getPageList(extractPath, param.appId, response);
+            _AppProjectStaticService.getStaticFileList(extractPath, param.appId, response);
             return SUCCESS(response);
         }
 
@@ -85,6 +89,10 @@ namespace Controllers.Admin
         {
             var modal = param.Adapt<AppProjectVersion>().ToCreate(HttpContext);
             var response = _AppProjectVersionService.Update(modal, true);
+            string extractPath = "/AppProject/" + param.appId + "/" + param.id + "/";
+            FileHelper.ExtractZip(param.staticFile, extractPath, true);
+            _AppProjectPageService.getPageList(extractPath, param.appId, param.id);
+            _AppProjectStaticService.getStaticFileList(extractPath, param.appId, param.id);
             return SUCCESS(response);
         }
 

+ 3 - 1
Controllers/Base/HomeController.cs

@@ -1,7 +1,7 @@
 using System;
+using Common;
 using Microsoft.AspNetCore.Mvc;
 using Model;
-using Nacos.V2.Remote;
 
 namespace Controllers
 {
@@ -21,6 +21,8 @@ namespace Controllers
         [Route("/noauth/pub/test")]
         public string test()
         {
+            string zipPath = "/path/zipfile.zip";
+            FileHelper.ExtractZip(zipPath, "/path/extract/", true);
             return "ok";
         }
     }

+ 7 - 0
Model/Database/AppProjectPageStyle.cs

@@ -17,6 +17,13 @@ namespace Model
         public int appId { get; set; }
 
 
+        /// <summary>
+        /// 版本ID
+        /// </summary>
+        [SugarColumn(ColumnDescription = "版本ID", ColumnName = "version_id")]
+        public int versionId { get; set; }
+
+
         /// <summary>
         /// 背景色
         /// </summary>

+ 7 - 0
Model/Database/AppProjectVersion.cs

@@ -87,6 +87,13 @@ namespace Model
         public string? frontendVersion { get; set; }
 
 
+        /// <summary>
+        /// 静态文件
+        /// </summary>
+        [SugarColumn(ColumnDescription = "静态文件", Length = 200, ColumnName = "static_file")]
+        public string? staticFile { get; set; }
+
+
 
     }
 }

+ 6 - 0
Model/Vo/Admin/GetAppProjectVersionQueryVo.cs

@@ -55,6 +55,12 @@ namespace Vo.Admin
         public string frontendVersion { get; set; }
 
 
+        /// <summary>
+        /// 静态文件
+        /// </summary>
+        public string staticFile { get; set; }
+
+
 
     }
 }

+ 24 - 2
Services/AppProjectPageService.cs

@@ -5,6 +5,7 @@ using Repository;
 using Service;
 using Microsoft.AspNetCore.Mvc;
 using Vo.Admin;
+using Common;
 
 
 namespace Services
@@ -34,7 +35,28 @@ namespace Services
             return response;
         }
 
-
-
+        /// <summary>
+        /// 获取目录下所有文件
+        /// </summary>
+        /// <param name="directoryPath">目录路径</param>
+        public void getPageList(string directoryPath, int appId, int versionId)
+        {
+            var files = FileHelper.GetSystemFiles(directoryPath);
+            foreach (var file in files)
+            {
+                var exists = GetFirst(m => m.moduleFile == file && m.appId == appId && m.versionId == versionId);
+                if (exists == null) 
+                {
+                    Add(new AppProjectPage
+                    {
+                        moduleFile = file,
+                        appId = appId,
+                        versionId = versionId,
+                        createTime = DateTime.Now,
+                        updateTime = DateTime.Now
+                    });
+                }
+            }
+        }
     }
 }

+ 24 - 1
Services/AppProjectStaticService.cs

@@ -5,6 +5,7 @@ using Repository;
 using Service;
 using Microsoft.AspNetCore.Mvc;
 using Vo.Admin;
+using Common;
 
 
 namespace Services
@@ -36,6 +37,28 @@ namespace Services
         }
 
 
-
+        /// <summary>
+        /// 获取目录下所有文件
+        /// </summary>
+        /// <param name="directoryPath">目录路径</param>
+        public void getStaticFileList(string directoryPath, int appId, int versionId)
+        {
+            var files = FileHelper.GetSystemFiles(directoryPath);
+            foreach (var file in files)
+            {
+                var exists = GetFirst(m => m.fileName == file && m.appId == appId && m.versionId == versionId);
+                if (exists == null) 
+                {
+                    Add(new AppProjectStatic
+                    {
+                        fileName = file,
+                        appId = appId,
+                        versionId = versionId,
+                        createTime = DateTime.Now,
+                        updateTime = DateTime.Now
+                    });
+                }
+            }
+        }
     }
 }

+ 5 - 2
Services/IService/IAppProjectPageService.cs

@@ -3,7 +3,6 @@ using Model.Base;
 using Microsoft.AspNetCore.Mvc;
 using Vo.Admin;
 
-
 namespace Services
 {
     public interface IAppProjectPageService : IBaseService<AppProjectPage>
@@ -17,6 +16,10 @@ namespace Services
         PagedInfo<GetAppProjectPageListVo> getAppProjectPageList([FromQuery] PagerInfo page, [FromQuery] AppProjectPage param);
 
 
-
+        /// <summary>
+        /// 获取目录下所有文件
+        /// </summary>
+        /// <param name="directoryPath">目录路径</param>
+        void getPageList(string directoryPath, int appId, int versionId);
     }
 }

+ 5 - 1
Services/IService/IAppProjectStaticService.cs

@@ -17,6 +17,10 @@ namespace Services
         PagedInfo<GetAppProjectStaticListVo> getAppProjectStaticList([FromQuery] PagerInfo page, [FromQuery] AppProjectStatic param);
 
 
-
+        /// <summary>
+        /// 获取目录下所有文件
+        /// </summary>
+        /// <param name="directoryPath">目录路径</param>
+        void getStaticFileList(string directoryPath, int appId, int versionId);
     }
 }

+ 1 - 1
appsettings.Development.json

@@ -16,7 +16,7 @@
     ],
     "Namespace": "3844cb7b-89e8-40d8-b9b0-082da19c0806",
     "ServerAddresses": [ "http://nacos-csharp.kexiaoshuang.com/" ],
-    "ServiceName": "omega_source",
+    "ServiceName": "omega_source11",
     "GroupName": "DEFAULT",
     "Ip": "",
     "Port": "8005",