using Furion.JsonSerialization;
using Newtonsoft.Json;
using OfficeOpenXml.FormulaParsing.Excel.Functions.Text;
using Quartz;
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Serialization.Json;
using System.Security.Policy;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using WIDESEA_Entity.DomainModels.Equipment;
using WIDESEA_Services.Services;
using WIDESEA_WCS.Jobs;
using WIDESEA_WCS.JobsPart.AGV;
using WIDESEA_WCS.SchedulerExecute.AGV;
using WIDESEA_WCS.WCSClient;
using static FreeSql.Internal.GlobalFilter;
namespace WIDESEA_WCS
{
///
/// AGV调度
///
[DisallowConcurrentExecution]
public class AGVJob : JobBase, IJob
{
private static object lockObj1 = 0;
public Task Execute(IJobExecutionContext context)
{
try
{
ExecuteJob(context, DoAction);
}
catch { }
return Task.FromResult(string.Empty);
}
private void DoAction(IJobExecutionContext context)
{
lock (lockObj1)
{
if (lockObj1.ToString() == "0")
{
try
{
lockObj1 = 1;
Task task = Task.Run(() =>
{
List AGVS = new List { "组装AGV调度", "正极AGV调度", "负极AGV调度" };
while (true)
{
foreach (var item in AGVS)
{
PLCClient pLCClient = WCSService.Clients.Find(v => v.PLCName == item);
if (pLCClient == null)
{
continue;
}
AGVSchedulerExecute.SendAGVTask1(pLCClient);
}
Thread.Sleep(200);
}
});
Task.Run(() =>
{
while (true)
{
try
{
string date = DateTime.Now.ToString("yyyy-MM-dd");
string json = File.ReadAllText(AppContext.BaseDirectory + "modified_data.json", Encoding.UTF8);
var logstime = JsonConvert.DeserializeObject(json);
if (date != logstime.logtime)
{
logstime.logtime = date;
string modifiedJson = JsonConvert.SerializeObject(logstime);
File.WriteAllText("modified_data.json", modifiedJson);
string folderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs");
DateTime tenDaysAgo = DateTime.Now.AddDays(-7); // 获取当前时间的七天之前的日期
DeleteFilesAndFolders(folderPath, tenDaysAgo);
}
Thread.Sleep(1000 * 60 * 60 * 24);
}
catch
{
Thread.Sleep(1000 * 60 * 60);
}
}
});
}
catch (Exception ex)
{
lockObj1 = 0;
throw new Exception(ex.Message);
}
}
}
// 清楚7日以上的Logs日志记录
//try
//{
// List AGVS = new List { "组装AGV调度", "正极AGV调度", "负极AGV调度", "组装AGV调度" };
// //foreach (var item in AGVS)
// {
// //PLCClient pLCClient = WCSService.Clients.Find(v => v.PLCName == item);
// //if (pLCClient == null)
// //{
// // continue;
// //}
// PLCClient pLCClient = context.JobDetail.JobDataMap["JobParams"] as PLCClient;
// AGVSchedulerExecute.SendAGVTask1(pLCClient);
// }
// //string date = DateTime.Now.ToString("yyyy-MM-dd");
// //string json = File.ReadAllText(AppContext.BaseDirectory + "modified_data.json", Encoding.UTF8);
// //var logstime = JsonConvert.DeserializeObject(json);
// //if (date != logstime.logtime)
// //{
// // logstime.logtime = date;
// // string modifiedJson = JsonConvert.SerializeObject(logstime);
// // File.WriteAllText("modified_data.json", modifiedJson);
// // string folderPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs");
// // DateTime tenDaysAgo = DateTime.Now.AddDays(-7); // 获取当前时间的七天之前的日期
// // DeleteFilesAndFolders(folderPath, tenDaysAgo);
// //}
//}
//catch (Exception ex)
//{
// throw new Exception(ex.Message);
//}
}
static void DeleteFilesAndFolders(string path, DateTime dateTime)
{
DirectoryInfo directory = new DirectoryInfo(path);
foreach (FileSystemInfo fileOrFolder in directory.GetFileSystemInfos())
{
if ((fileOrFolder is FileInfo && ((DateTime)((FileInfo)fileOrFolder).LastWriteTime < dateTime)) ||
(fileOrFolder is DirectoryInfo && ((DirectoryInfo)fileOrFolder).CreationTime < dateTime))
{
try
{
if (fileOrFolder is FileInfo)
{
((FileInfo)fileOrFolder).Delete();
}
else if (fileOrFolder is DirectoryInfo)
{
DeleteFilesAndFolders(fileOrFolder.FullName, dateTime);
((DirectoryInfo)fileOrFolder).Delete(true);
}
}
catch (Exception ex)
{
Console.WriteLine("无法删除文件或文件夹: " + fileOrFolder.FullName + "\n错误信息: " + ex.Message);
}
}
}
}
}
public class timelist {
public string MM { get; set; }
//日志删除过滤时间
public string logtime { get; set; }
}
}