SchedulerModulePartTime.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using Aitex.Core.RT.Fsm;
  2. using Aitex.Core.RT.Log;
  3. using MECF.Framework.Common.Equipment;
  4. using System;
  5. using System.Collections.Concurrent;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. namespace CyberX8_RT.Schedulers
  11. {
  12. public class SchedulerModulePartTime
  13. {
  14. #region 内部变量
  15. private ConcurrentDictionary<string, List<SchedulerTime>> _moduleScheduleTimeDic = new ConcurrentDictionary<string, List<SchedulerTime>>();
  16. #endregion
  17. /// <summary>
  18. /// 增加
  19. /// </summary>
  20. /// <param name="metal"></param>
  21. /// <param name="waferHolderId"></param>
  22. /// <param name="schedulerStartTime"></param>
  23. /// <param name="processTimeLength"></param>
  24. public void AddScheduler(string metal, string waferHolderId, int schedulerIndex, DateTime schedulerStartTime, int processTimeLength)
  25. {
  26. if (!_moduleScheduleTimeDic.ContainsKey(metal))
  27. {
  28. SchedulerTime metalTime = new SchedulerTime();
  29. metalTime.WaferHolderId = waferHolderId;
  30. metalTime.ScheduleStartTime = schedulerStartTime;
  31. metalTime.ProcessTimeLength = processTimeLength;
  32. metalTime.SchedulerIndex = schedulerIndex;
  33. List<SchedulerTime> schedulerMetalTimes = new List<SchedulerTime>();
  34. schedulerMetalTimes.Add(metalTime);
  35. _moduleScheduleTimeDic.TryAdd(metal, schedulerMetalTimes);
  36. }
  37. else
  38. {
  39. List<SchedulerTime> schedulerMetalTimes = _moduleScheduleTimeDic[metal];
  40. if (schedulerMetalTimes.Find(O => O.WaferHolderId == waferHolderId && O.SchedulerIndex == schedulerIndex) == null)
  41. {
  42. SchedulerTime metalTime = new SchedulerTime();
  43. metalTime.WaferHolderId = waferHolderId;
  44. metalTime.ScheduleStartTime = schedulerStartTime;
  45. metalTime.ProcessTimeLength = processTimeLength;
  46. metalTime.SchedulerIndex = schedulerIndex;
  47. schedulerMetalTimes.Add(metalTime);
  48. }
  49. }
  50. }/// <summary>
  51. /// 获取最后的时间轴对象
  52. /// </summary>
  53. /// <param name="module"></param>
  54. /// <returns></returns>
  55. public DateTime GetLastSchedulerTime(string module)
  56. {
  57. if (_moduleScheduleTimeDic.ContainsKey(module))
  58. {
  59. List<SchedulerTime> schedulerTimes = _moduleScheduleTimeDic[module].OrderBy(O => O.ScheduleStartTime).ToList();
  60. if (schedulerTimes.Count != 0)
  61. {
  62. SchedulerTime schedulerTime = schedulerTimes.Last();
  63. return schedulerTime.ScheduleStartTime.AddSeconds(schedulerTime.ProcessTimeLength);
  64. }
  65. else
  66. {
  67. return DateTime.MinValue;
  68. }
  69. }
  70. else
  71. {
  72. return DateTime.MinValue;
  73. }
  74. }
  75. /// <summary>
  76. /// 获取使用次数
  77. /// </summary>
  78. /// <param name="module"></param>
  79. /// <returns></returns>
  80. public int GetModuleUsedCount(string module)
  81. {
  82. if (_moduleScheduleTimeDic.ContainsKey(module))
  83. {
  84. return _moduleScheduleTimeDic[module].Count;
  85. }
  86. else
  87. {
  88. return 0;
  89. }
  90. }
  91. /// <summary>
  92. /// 释放资源
  93. /// </summary>
  94. public void Dispose()
  95. {
  96. List<string> keys = _moduleScheduleTimeDic.Keys.ToList();
  97. foreach (var key in keys)
  98. {
  99. _moduleScheduleTimeDic[key].Clear();
  100. }
  101. _moduleScheduleTimeDic.Clear();
  102. }
  103. }
  104. }