| 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 PunkHPX8_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();        }    }}
 |