From 05c2e8aadb518a6323ff9fe23051fdbd56097221 Mon Sep 17 00:00:00 2001
From: huanghongfeng <huanghongfeng@hnkhzn.com>
Date: 星期日, 08 十二月 2024 19:46:43 +0800
Subject: [PATCH] 文本日志查看

---
 代码管理/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_LogService.cs |  226 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 225 insertions(+), 1 deletions(-)

diff --git "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_LogService.cs" "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_LogService.cs"
index 166d420..516fce3 100644
--- "a/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_LogService.cs"
+++ "b/\344\273\243\347\240\201\347\256\241\347\220\206/WCS/WIDESEAWCS_Server/WIDESEAWCS_ISystemServices/ISys_LogService.cs"
@@ -1,14 +1,238 @@
-锘縰sing System;
+锘縰sing Microsoft.AspNetCore.Mvc;
+using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Threading.Tasks;
+using WIDESEAWCS_Core;
 using WIDESEAWCS_Core.BaseServices;
 using WIDESEAWCS_Model.Models;
 
 namespace WIDESEAWCS_ISystemServices
 {
+    #region 瀹炰綋绫�
+    public class DirInfo
+    {
+        /// <summary>
+        /// 褰撳墠璺緞
+        /// </summary>
+        public string dirPath { get; set; }
+
+        /// <summary>
+        /// 褰撳墠鍚嶇О
+        /// </summary>
+        public string dirName { get; set; }
+
+        /// <summary>
+        /// 瀛愭枃浠�
+        /// </summary>
+        public List<FileDataInfo> files { get; set; }
+
+        /// <summary>
+        /// 瀛愭枃浠跺す
+        /// </summary>
+        public List<DirInfo> dirs { get; set; }
+    }
+
+    public class FileDataInfo
+    {
+        public string filePath { get; set; }
+
+        public string fileName { get; set; }
+
+        public long fileSize { get; set; }
+    }
+
+    public class GetLogParm
+    {
+        /// <summary>
+        /// 鏂囦欢鍦板潃
+        /// </summary>
+        public string path;
+
+        /// <summary>
+        /// 璇诲彇杩涘害
+        /// </summary>
+        public float percent;
+
+        /// <summary>
+        /// 鏈�澶ц鍙栧ぇ灏�
+        /// </summary>
+        public double maxsize_KB = 20;
+
+        /// <summary>
+        /// 褰撳墠璧峰浣嶇疆
+        /// </summary>
+        public long topStartPos = 0;
+    }
+    #endregion
     public interface ISys_LogService : IService<Sys_Log>
     {
+        /// <summary>
+        /// 閫掑綊鑾峰彇鏂囦欢淇℃伅
+        /// </summary>
+        /// <param name="dirPath"></param>
+        /// <returns></returns>
+        private DirInfo GetDirInfo(string dirPath)
+        {
+            //褰撳墠鏂囦欢澶�
+            var dirInfo = new DirInfo();
+            dirInfo.dirName = Path.GetFileName(dirPath);
+
+            //瀛愭枃浠�
+            List<FileDataInfo> files = new List<FileDataInfo>();
+            foreach (var file in Directory.GetFiles(dirPath))
+            {
+                files.Add(new FileDataInfo()
+                {
+                    filePath = file,
+                    fileName = Path.GetFileName(file)
+                });
+            }
+
+            //瀛愭枃浠跺す
+            var dirs = Directory.GetDirectories(dirPath);
+            dirInfo.dirs = new List<DirInfo>();
+            foreach (var dir in dirs)
+            {
+                dirInfo.dirs.Add(GetDirInfo(dir));
+            }
+
+            //瀛愭枃浠跺す锛屼笌瀛愮洰褰曞悎骞�
+            foreach (var file in files)
+            {
+                dirInfo.dirs.Add(new DirInfo() { dirPath = file.filePath, dirName = file.fileName });
+            }
+            return dirInfo;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏃ュ織鏂囦欢鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        public WebResponseContent GetLogList()
+        {
+            WebResponseContent content = new WebResponseContent();
+            string path = System.Environment.CurrentDirectory + "/log";
+            if (!System.IO.Directory.Exists(path))
+            {
+                return content.Error("鏆傛棤鏃ュ織鏂囦欢");
+            }
+
+            content.Data = GetDirInfo(path);
+            content.OK();
+            return content;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鏂囦欢鍐呭
+        /// </summary>
+        /// <param name="parm"></param>
+        /// <returns></returns>
+        public WebResponseContent GetLogData(GetLogParm parm)
+        {
+            WebResponseContent content = new WebResponseContent();
+            string res = "";
+            //鏄惁璇诲彇鍒版渶鍚�
+            bool isEnd = false;
+            long startIndex = 0;
+            //鏂囦欢澶у皬
+            long len = 0;
+            try
+            {
+                if (!System.IO.File.Exists(parm.path))
+                {
+                    throw new Exception($"鏂囦欢{parm.path}涓嶅瓨鍦紒");
+                }
+                using (FileStream fs = new FileStream(parm.path, FileMode.Open, FileAccess.Read, FileShare.Read))
+                {
+                    //鏈�澶ц鍙栧ぇ灏�
+                    int maxsize = (int)(1024 * parm.maxsize_KB);
+                    len = fs.Length;
+                    long startPos = (long)(len * (parm.percent / 100));//璧峰浣嶇疆
+                    long readLen = len - startPos;//璇诲彇闀垮害
+
+                    //鍚戝墠鍔犺浇
+                    if (parm.topStartPos != 0)
+                    {
+                        startPos = parm.topStartPos - maxsize;
+                        if (startPos < 0)
+                        {
+                            //宸茶鍒拌捣濮嬩綅
+                            startPos = 0;
+                            readLen = parm.topStartPos;
+                        }
+                        else
+                        {
+                            readLen = maxsize;
+                        }
+                    }
+                    else
+                    {
+                        //璇诲彇澶у皬鏄惁瓒呭嚭鏈�澶ч暱搴�
+                        if (readLen > maxsize)
+                        {
+                            readLen = maxsize;
+                        }
+                        else
+                        {
+                            isEnd = true;
+                        }
+                    }
+
+                    //鍔犺浇100%锛屾寜鏈�澶у唴瀹硅鍙�
+                    if (parm.percent == 100)
+                    {
+                        if (len < maxsize)
+                        {
+                            startPos = 0;
+                            readLen = len;
+                        }
+                        else
+                        {
+                            startPos = len - maxsize;
+                            readLen = maxsize;
+                        }
+                    }
+
+                    fs.Seek(startPos, SeekOrigin.Begin);
+                    var buffer = new byte[readLen];
+                    fs.Read(buffer, 0, (int)readLen);
+
+                    startIndex = startPos;
+                    if (startPos != 0 && (parm.percent != 0 || parm.topStartPos != 0))
+                    {
+                        //涓嶆槸浠庡ご鍔犺浇锛屽垹闄ゅ彲鑳戒笉瀹屾暣鐨勭涓�琛�
+                        int skipCount = 0;
+                        for (int i = 0; i < buffer.Length; i++)
+                        {
+                            if (buffer[i] == 10)
+                            {
+                                skipCount = i;
+                                break;
+                            }
+                        }
+                        if (skipCount != 0)
+                        {
+                            //鍘绘帀鎹㈣
+                            skipCount++;
+                            //涓嬫璇诲彇鍓嶅欢
+                            startIndex += skipCount;
+                        }
+                        res = Encoding.UTF8.GetString(buffer.Skip(skipCount).ToArray());
+                    }
+                    else
+                    {
+                        res = Encoding.UTF8.GetString(buffer);
+                    }
+                }
+            }
+            catch (Exception ex)
+            {
+                return content.Error(ex.Message);
+            }
+            return content.OK(data: new { content = res, isEnd, startIndex, len });
+        }
+
     }
 }

--
Gitblit v1.9.3