193 lines
5.5 KiB
C#
193 lines
5.5 KiB
C#
using Aitex.Core.RT.Event;
|
|
using Aitex.Core.Util;
|
|
using DocumentFormat.OpenXml.Wordprocessing;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Runtime.Serialization;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace MECF.Framework.Common.Aitex.Core.RT.EMS
|
|
{
|
|
[DataContract]
|
|
public class PlanMaintainer: TimeObserver
|
|
{
|
|
#region Variables
|
|
|
|
protected double _timeElapsed = 0;
|
|
|
|
[DataMember]
|
|
MaintainerItemCollection _itemcollection;
|
|
|
|
[Subscription("UnMaintainedCount")]
|
|
public int UnMaintainedCount => _itemcollection.UnMaintainCount;
|
|
|
|
public delegate bool Save();
|
|
|
|
public event Save OnSave;
|
|
|
|
[Subscription("TimeElapsed")]
|
|
public double TimeElapsed => _timeElapsed;
|
|
|
|
#endregion
|
|
|
|
#region Constructors
|
|
public PlanMaintainer()
|
|
{
|
|
|
|
}
|
|
|
|
public PlanMaintainer(MaintainerItemCollection item,
|
|
string name,
|
|
string module,
|
|
int index,
|
|
string description,
|
|
bool enabled,
|
|
DateTime startdate,
|
|
double threshold,
|
|
TimeUnit timeexceedunit) : base(name, module,index ,description, enabled, startdate, threshold, timeexceedunit)
|
|
{
|
|
_itemcollection = item;
|
|
CalculateEndDate();
|
|
}
|
|
#endregion
|
|
|
|
#region Methods
|
|
|
|
public override void Monitor()
|
|
{
|
|
////①确认未使能;没有维护项也不进行计算
|
|
if (!Enable || _itemcollection.Count == 0)
|
|
{
|
|
_isTimeOut = false;
|
|
_timeExceeded = 0;
|
|
_timeElapsed = 0;
|
|
_value = 0;
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
////②计算时间
|
|
DateTime now = DateTime.Now;
|
|
_itemcollection.CheckAllItemMaintained(StartDate);
|
|
if (now.CompareTo((DateTime)TrigDate) > 0)
|
|
{
|
|
if (UnMaintainedCount != 0)
|
|
{
|
|
_isTimeOut = true;
|
|
_timeExceeded = DateTimeHelper.DateTimeSubtraction((DateTime)TrigDate, now, TimeDisplayUnit);
|
|
_timeElapsed = 0;
|
|
}
|
|
else
|
|
{
|
|
Reset(); //所有项都维护,翻转沙漏
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (UnMaintainedCount != 0)
|
|
{
|
|
_isTimeOut = false;
|
|
_timeExceeded = 0;
|
|
_timeElapsed = DateTimeHelper.DateTimeSubtraction(now, (DateTime)TrigDate, TimeDisplayUnit);
|
|
}
|
|
else
|
|
{
|
|
Reset(); //所有项都维护,翻转沙漏
|
|
}
|
|
}
|
|
_value = DateTimeHelper.DateTimeSubtraction(StartDate, now, TimeUnit.Seconds);
|
|
}
|
|
////④确认超时上升沿
|
|
base.Monitor();
|
|
}
|
|
|
|
public override bool Reset()
|
|
{
|
|
if (!base.Reset())
|
|
{
|
|
return false;
|
|
}
|
|
if (!CanReset())
|
|
{
|
|
return false;
|
|
}
|
|
_isTimeOut = false;
|
|
DateTime now = DateTime.Now;
|
|
_startDate = now;
|
|
CalculateEndDate();
|
|
|
|
OnSave?.Invoke();
|
|
|
|
_timeExceeded = 0;
|
|
_timeElapsed = DateTimeHelper.DateTimeSubtraction(now, (DateTime)TrigDate, TimeDisplayUnit);
|
|
_itemcollection.CheckAllItemMaintained(StartDate);
|
|
|
|
return true;
|
|
}
|
|
|
|
public override bool CanReset()
|
|
{
|
|
return UnMaintainedCount == 0;
|
|
}
|
|
|
|
protected void CalculateEndDate()
|
|
{
|
|
_trigDate = StartDate.AddSeconds(Threshold);
|
|
}
|
|
|
|
/// <summary>
|
|
/// 阈值设置
|
|
/// </summary>
|
|
/// <param name="threshold">必须大于0</param>
|
|
/// <returns></returns>
|
|
public override bool SetThreshold(double threshold)
|
|
{
|
|
if (!base.SetThreshold(threshold))
|
|
{
|
|
return false;
|
|
}
|
|
_threshold = threshold;
|
|
CalculateEndDate();
|
|
return true;
|
|
}
|
|
|
|
public override bool SetStartDate(DateTime t)
|
|
{
|
|
if (!base.SetStartDate(t))
|
|
{
|
|
return false;
|
|
}
|
|
_startDate = t;
|
|
CalculateEndDate();
|
|
return true;
|
|
}
|
|
|
|
public override Dictionary<string, List<MaintainerItem>> GetAllMaintainerItemsDic()
|
|
{
|
|
return _itemcollection.GetAllItemsDic();
|
|
}
|
|
|
|
public override bool SetMaintain(string parentname, string name, int itemid, DateTime date)
|
|
{
|
|
return _itemcollection.SetMaintain(parentname,name,itemid,date);
|
|
}
|
|
|
|
public override bool SetMaintainerItemEnable(string parentname, string name, int itemid, bool enable)
|
|
{
|
|
return _itemcollection.SetMaintainerItemEnable(parentname,name,itemid,enable);
|
|
}
|
|
|
|
public override void AddMaintainerItem(string parentname, MaintainerItem item)
|
|
{
|
|
_itemcollection.AddMaintainerItem(parentname,item);
|
|
}
|
|
public override void RemoveMaintainerItem(string parentname, string itemname, int id)
|
|
{
|
|
_itemcollection.RemoveMaintainerItem(parentname,itemname,id);
|
|
}
|
|
#endregion
|
|
}
|
|
}
|