1
HuBingJie
8 天以前 5da3a276b7847187a7c155ee069d3cd4c9e58074
´úÂë¹ÜÀí/WCS/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/LogJob.cs
@@ -1,24 +1,8 @@
using HslCommunication;
using HslCommunication.Core;
using Microsoft.AspNetCore.Http;
using Microsoft.VisualBasic.FileIO;
using Newtonsoft.Json;
using Quartz;
using SixLabors.ImageSharp.PixelFormats;
using Quartz;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Reflection.Metadata.Ecma335;
using System.Text;
using System.IO;
using System.Threading.Tasks;
using WIDESEA_Common.Log;
using WIDESEAWCS_Communicator;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_QuartzJob.DeviceBase;
using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
namespace WIDESEAWCS_Tasks
{
@@ -29,19 +13,25 @@
        {
            try
            {
                Task.Run(() =>
                {
                    try
                    {
                        WriteLog.GetLog("LogJob").Write($"日志记录:{DateTime.Now}", "LogJob");
                        Run(10);
                        Run2(10);
                        // è®¾ç½®ä¿ç•™å¤©æ•°ä¸º30天
                        int saveDays = 30;
                        // æ¸…理Log目录下的所有过期文件夹
                        CleanLogDirectory(saveDays);
                        Thread.Sleep(1000 * 10);
                    }
                    catch { }
                    catch (Exception ex)
                    {
                        WriteLog.GetLog("LogJob").Write($"日志清理出错:{ex.Message}", "LogJob");
                    }
                });
            }
            catch (Exception ex)
            {
@@ -50,74 +40,91 @@
            return Task.CompletedTask;
        }
        private static void Run(int saveDays)
        /// <summary>
        /// æ¸…理Log目录下的所有过期日志文件夹
        /// </summary>
        /// <param name="saveDays">保留天数</param>
        private static void CleanLogDirectory(int saveDays)
        {
            var logPath = System.Environment.CurrentDirectory + "/log";
            if (Directory.Exists(logPath))
            // èŽ·å–Log目录路径
            var logBasePath = Path.Combine(Environment.CurrentDirectory, "Log");
            if (!Directory.Exists(logBasePath))
            {
                WriteLog.GetLog("LogJob").Write($"Log目录不存在:{logBasePath}", "LogJob");
                return;
            }
                var nowTime = DateTime.Now;
                var dayDir = Directory.GetDirectories(logPath, "20*", System.IO.SearchOption.AllDirectories);
            var cutoffDate = nowTime.AddDays(-saveDays);
                foreach (var dirpath in dayDir)
            WriteLog.GetLog("LogJob").Write($"开始清理日志,保留天数:{saveDays},截止日期:{cutoffDate:yyyy-MM-dd}", "LogJob");
            // èŽ·å–Log目录下的所有子目录
            var allSubDirs = Directory.GetDirectories(logBasePath, "*", SearchOption.AllDirectories);
            foreach (var dirPath in allSubDirs)
                {
                    //文件夹名
                    var dirName = Path.GetFileName(dirpath).Replace("_", "-");
                    DateTime targetDate = DateTime.ParseExact(dirName, "yyyyMMdd", null);
                    if ((nowTime - targetDate).TotalDays >= saveDays)
                    {
                        //删除文件和文件夹
                        try
                        {
                            var flies = Directory.GetFiles(dirpath);
                    // èŽ·å–æ–‡ä»¶å¤¹å
                    var dirName = Path.GetFileName(dirPath);
                            foreach (var item in flies)
                    // å°è¯•解析为日期(支持多种格式)
                    if (TryParseDateFolder(dirName, out DateTime folderDate))
                            {
                                File.Delete(item);
                            }
                            Directory.Delete(dirpath);
                        }
                        catch { }
                    }
                }
            }
        }
        private static void Run2(int saveDays)
                        // åˆ¤æ–­æ˜¯å¦è¿‡æœŸ
                        if (folderDate < cutoffDate)
        {
            var logPath = System.Environment.CurrentDirectory + "/txt";
            if (Directory.Exists(logPath))
                            WriteLog.GetLog("LogJob").Write($"删除过期日志文件夹:{dirPath},日期:{folderDate:yyyy-MM-dd}", "LogJob");
                            // é€’归删除文件夹及其内容
                            Directory.Delete(dirPath, true);
                        }
                        else
            {
                var nowTime = DateTime.Now;
                var dayDir = Directory.GetDirectories(logPath, "20*", System.IO.SearchOption.AllDirectories);
                foreach (var dirpath in dayDir)
                            WriteLog.GetLog("LogJob").Write($"保留日志文件夹:{dirPath},日期:{folderDate:yyyy-MM-dd}", "LogJob");
                        }
                    }
                }
                catch (Exception ex)
                {
                    //文件夹名
                    var dirName = Path.GetFileName(dirpath).Replace("_", "-");
                    WriteLog.GetLog("LogJob").Write($"处理文件夹 {dirPath} æ—¶å‡ºé”™ï¼š{ex.Message}", "LogJob");
                }
            }
                    DateTime targetDate = DateTime.ParseExact(dirName, "yyyyMMdd", null);
                    if ((nowTime - targetDate).TotalDays >= saveDays)
            WriteLog.GetLog("LogJob").Write($"日志清理完成", "LogJob");
        }
        /// <summary>
        /// å°è¯•解析日期文件夹名称
        /// </summary>
        /// <param name="folderName">文件夹名称</param>
        /// <param name="date">解析出的日期</param>
        /// <returns>是否成功解析</returns>
        private static bool TryParseDateFolder(string folderName, out DateTime date)
                    {
                        //删除文件和文件夹
                        try
            // æ”¯æŒçš„æ—¥æœŸæ ¼å¼
            string[] dateFormats =
                        {
                            var flies = Directory.GetFiles(dirpath);
                "yyyy-MM-dd",   // 2025-12-07
                "yyyyMMdd",     // 20251207
                "yyyy_MM_dd",   // 2025_12_07
                "yyyy.MM.dd",   // 2025.12.07
                "yyyyå¹´MM月dd日" // 2025å¹´12月07日
            };
                            foreach (var item in flies)
                            {
                                File.Delete(item);
                            }
                            Directory.Delete(dirpath);
                        }
                        catch { }
                    }
                }
            }
        }
    }
            // å°è¯•解析日期
            bool success = DateTime.TryParseExact(
                folderName,
                dateFormats,
                System.Globalization.CultureInfo.InvariantCulture,
                System.Globalization.DateTimeStyles.None,
                out date
            );
            return success;
        }
    }
}