Sic.Framework-Nanjing-Baishi/MECF.Framework.Common/Aitex/Core/RT/EMS/MaintainManager2.cs

261 lines
8.9 KiB
C#

using Aitex.Common.Util;
using Aitex.Core.RT.DataCenter;
using Aitex.Core.RT.Event;
using Aitex.Core.RT.OperationCenter;
using Aitex.Core.RT.SCCore;
using Aitex.Core.Util;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
namespace MECF.Framework.Common.Aitex.Core.RT.EMS
{
public class MaintainManager2 : Singleton<MaintainManager2>
{
#region Variables
private readonly string _MaintainFilePath;
private PeriodicJob _threadMonitor;
private MaintainerEditor2 _editor;
#endregion
#region Constructors
public MaintainManager2()
{
_MaintainFilePath = Path.Combine(PathManager.GetMaintainFilePath(), "Maintain.xml");
var fileInfo = new FileInfo(_MaintainFilePath);
if (!fileInfo.Directory.Exists)
{
fileInfo.Directory.Create();
}
if (!fileInfo.Exists)
{
XmlDocument _MaintainXML = new XmlDocument();
_MaintainXML.LoadXml("<?xml version=\"1.0\" encoding=\"utf-8\"?><root><MaintainanceGroup></MaintainanceGroup><AllMaintainItemConfigs></AllMaintainItemConfigs></root>");
_MaintainXML.Save(_MaintainFilePath);
}
}
#endregion
#region Properties
#endregion
#region Methods
public void Initialize()
{
_editor = new MaintainerEditor2(_MaintainFilePath);
_editor.Load();
#region OP_Subscribe
OP.Subscribe("MaintainerManager.SetMaintain", delegate (string cmd, object[] args)
{
_editor.SetMaintain((string)args[0],
(string)args[1],
(string)args[2],
(string)args[3],
(string)args[4],
(int)args[5],
(DateTime)args[6],
(string)args[7],
(string)args[8]);
RestartMonitor();
return true;
});
OP.Subscribe("MaintainerManager.OpenFile", delegate (string cmd, object[] args)
{
OpenFile((string)args[0]);
return true;
});
#region
OP.Subscribe("MaintainerManager.SetMaintainItemUp", delegate (string cmd, object[] args)
{
_editor.SetMaintainItemUp((string)args[0], (string)args[1], (int)args[2]);
RestartMonitor();
return true;
});
OP.Subscribe("MaintainerManager.SetMaintainItemDown", delegate (string cmd, object[] args)
{
_editor.SetMaintainItemDown((string)args[0], (string)args[1], (int)args[2]);
RestartMonitor();
return true;
});
OP.Subscribe("MaintainerManager.SetMaintainItemEnable", delegate (string cmd, object[] args)
{
_editor.SetMaintainItemEnable((string)args[0], (string)args[1], (string)args[2], (string)args[3], (string)args[4], (int)args[5], (bool)args[6]);
RestartMonitor();
return true;
});
OP.Subscribe("MaintainerManager.SetMaintainItemName", delegate (string cmd, object[] args)
{
_editor.SetMaintainItemName((string)args[0], (string)args[1], (int)args[2], (string)args[3], (int)args[4]);
RestartMonitor();
return true;
});
OP.Subscribe("MaintainerManager.SetMaintainItemParas", delegate (string cmd, object[] args)
{
_editor.SetMaintainItemParas((string)args[0], (string)args[1], (int)args[2], (string)args[3], (string)args[4], (string)args[5]);
RestartMonitor();
return true;
});
OP.Subscribe("MaintainerManager.AddMaintainItem", delegate (string cmd, object[] args)
{
_editor.AddMaintainItem((string)args[0],
(int)args[1],
(string)args[2],
(int)args[3],
(int)args[4],
(string)args[5],
(string)args[6],
(string)args[7]);
RestartMonitor();
return true;
});
OP.Subscribe("MaintainerManager.DeleteMaintainItem", delegate (string cmd, object[] args)
{
_editor.DeleteMaintainItem((string)args[0], (string)args[1], (int)args[2]);
RestartMonitor();
return true;
});
#endregion
#region Plan增删改
OP.Subscribe("MaintainerManager.SetMaintainerModule", delegate (string cmd, object[] args)
{
_editor.SetMaintainerModule((string)args[0], (string)args[1], (string)args[2], (string)args[3]);
RestartMonitor();
return true;
});
OP.Subscribe("MaintainerManager.SetMaintainerParas", delegate (string cmd, object[] args)
{
_editor.SetMaintainerParas((string)args[0], (string)args[1], (string)args[2], (int)args[3], (bool)args[4], (string)args[5],
(DateTime)args[6], (double)args[7], (TimeUnit)args[8]);
RestartMonitor();
return true;
});
OP.Subscribe("MaintainerManager.AddMaintainer", delegate (string cmd, object[] args)
{
_editor.AddMaintainer((string)args[0], (string)args[1], (string)args[2], (bool)args[3], (string)args[4],
(DateTime)args[5], (double)args[6], (TimeUnit)args[7]);
RestartMonitor();
return true;
});
OP.Subscribe("MaintainerManager.DeleteMaintainer", delegate (string cmd, object[] args)
{
_editor.DeleteMaintainer((string)args[0], (string)args[1], (string)args[2]);
RestartMonitor();
return true;
});
#endregion
#endregion
DataSubscribe();
//第一次执行监控
OnTimer();
_threadMonitor = new(10000, OnTimer, "MaintainMonitorThread", true, true);
MAINTAIN.maintainManager = this;
}
string MaintainanceCheck()
{
string info = "";
foreach (var p in _editor.GetAllMaintainerList())
{
if (p.IsTrigger)
{
info += "[" + p.Name + (p.Module == "" ? "" : ("." + p.Module)) + "]\r\n";
}
}
if (info != "")
{
bool iswarning = true;
if (SC.ContainsItem("System.IgnoreMaintainTimeOutWarning"))
{
iswarning = !SC.GetValue<bool>("System.IgnoreMaintainTimeOutWarning");
}
if (iswarning)
EV.PostWarningLog("Maintainance", "There are UnMaintainItems in Plan\r\n" + info
+ "please check as soon as possible.");
else
{
EV.PostInfoLog("Maintainance", "There are UnMaintainItems in Plan\r\n" + info
+ "please check as soon as possible.");
return "";
}
}
return info;
}
private void DataSubscribe()
{
DATA.Subscribe("MaintainManager.MaintainanceCheck", MaintainanceCheck, SubscriptionAttribute.FLAG.IgnoreSaveDB);
_editor.DataSubscribe();
}
private bool OnTimer()
{
var maintainers = _editor.GetAllMaintainerList();
maintainers.ForEach(x => { x.Monitor(); });
return true;
}
private void RestartMonitor()
{
_threadMonitor.Stop();
_threadMonitor = new(10000, OnTimer, "MaintainMonitorThread", true, true);
}
public List<IObserver> GetAllMaintainerList()
{
return _editor.GetAllMaintainerList();
}
public List<MaintainanceItem> GetMaintainanceConfigList()
{
return _editor.GetMaintainanceItemConfigList();
}
private void OpenFile(string name)
{
string filepath = Path.Combine(PathManager.GetMaintainFilePath(), name);
if (!File.Exists(filepath))
{
EV.PostWarningLog("Maintainance", $"Not file in Path:" + filepath);
return;
}
try
{
System.Diagnostics.Process.Start(filepath);
}
catch (Exception ex)
{
EV.PostWarningLog("Maintainance", $"Can not Open file in Path:{filepath},Reason:{ex}");
return;
}
}
#endregion
}
}