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 { #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(""); _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("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 GetAllMaintainerList() { return _editor.GetAllMaintainerList(); } public List 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 } }