123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- 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<string, List<SchedulerTime>> _moduleScheduleTimeDic = new ConcurrentDictionary<string, List<SchedulerTime>>();
- #endregion
- /// <summary>
- /// 增加
- /// </summary>
- /// <param name="metal"></param>
- /// <param name="waferHolderId"></param>
- /// <param name="schedulerStartTime"></param>
- /// <param name="processTimeLength"></param>
- 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<SchedulerTime> schedulerMetalTimes = new List<SchedulerTime>();
- schedulerMetalTimes.Add(metalTime);
- _moduleScheduleTimeDic.TryAdd(metal, schedulerMetalTimes);
- }
- else
- {
- List<SchedulerTime> 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);
- }
- }
- }/// <summary>
- /// 获取最后的时间轴对象
- /// </summary>
- /// <param name="module"></param>
- /// <returns></returns>
- public DateTime GetLastSchedulerTime(string module)
- {
- if (_moduleScheduleTimeDic.ContainsKey(module))
- {
- List<SchedulerTime> 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;
- }
- }
- /// <summary>
- /// 获取使用次数
- /// </summary>
- /// <param name="module"></param>
- /// <returns></returns>
- public int GetModuleUsedCount(string module)
- {
- if (_moduleScheduleTimeDic.ContainsKey(module))
- {
- return _moduleScheduleTimeDic[module].Count;
- }
- else
- {
- return 0;
- }
- }
- /// <summary>
- /// 释放资源
- /// </summary>
- public void Dispose()
- {
- List<string> keys = _moduleScheduleTimeDic.Keys.ToList();
- foreach (var key in keys)
- {
- _moduleScheduleTimeDic[key].Clear();
- }
- _moduleScheduleTimeDic.Clear();
- }
- }
- }
|