using Aitex.Core.RT.Fsm; using Aitex.Core.RT.Log; using MECF.Framework.Common.Equipment; using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CyberX8_RT.Schedulers { public class SchedulerModulePartTime { #region 内部变量 private ConcurrentDictionary> _moduleScheduleTimeDic = new ConcurrentDictionary>(); #endregion /// /// 增加 /// /// /// /// /// public void AddScheduler(string metal, string waferHolderId, int schedulerIndex, DateTime schedulerStartTime, int processTimeLength) { if (!_moduleScheduleTimeDic.ContainsKey(metal)) { SchedulerTime metalTime = new SchedulerTime(); metalTime.WaferHolderId = waferHolderId; metalTime.ScheduleStartTime = schedulerStartTime; metalTime.ProcessTimeLength = processTimeLength; metalTime.SchedulerIndex = schedulerIndex; List schedulerMetalTimes = new List(); schedulerMetalTimes.Add(metalTime); _moduleScheduleTimeDic.TryAdd(metal, schedulerMetalTimes); } else { List schedulerMetalTimes = _moduleScheduleTimeDic[metal]; if (schedulerMetalTimes.Find(O => O.WaferHolderId == waferHolderId && O.SchedulerIndex == schedulerIndex) == null) { SchedulerTime metalTime = new SchedulerTime(); metalTime.WaferHolderId = waferHolderId; metalTime.ScheduleStartTime = schedulerStartTime; metalTime.ProcessTimeLength = processTimeLength; metalTime.SchedulerIndex = schedulerIndex; schedulerMetalTimes.Add(metalTime); } } }/// /// 获取最后的时间轴对象 /// /// /// public DateTime GetLastSchedulerTime(string module) { if (_moduleScheduleTimeDic.ContainsKey(module)) { List schedulerTimes = _moduleScheduleTimeDic[module].OrderBy(O => O.ScheduleStartTime).ToList(); if (schedulerTimes.Count != 0) { SchedulerTime schedulerTime = schedulerTimes.Last(); return schedulerTime.ScheduleStartTime.AddSeconds(schedulerTime.ProcessTimeLength); } else { return DateTime.MinValue; } } else { return DateTime.MinValue; } } /// /// 获取使用次数 /// /// /// public int GetModuleUsedCount(string module) { if (_moduleScheduleTimeDic.ContainsKey(module)) { return _moduleScheduleTimeDic[module].Count; } else { return 0; } } /// /// 释放资源 /// public void Dispose() { List keys = _moduleScheduleTimeDic.Keys.ToList(); foreach (var key in keys) { _moduleScheduleTimeDic[key].Clear(); } _moduleScheduleTimeDic.Clear(); } } }