261 lines
8.9 KiB
C#
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
|
|
}
|
|
}
|