|
@@ -1,12 +1,18 @@
|
|
|
using System;
|
|
|
using System.Collections.Generic;
|
|
|
using System.Data;
|
|
|
+using System.Linq;
|
|
|
+using Aitex.Core.Common;
|
|
|
using Aitex.Core.RT.DBCore;
|
|
|
using Aitex.Core.RT.Event;
|
|
|
using Aitex.Core.RT.Log;
|
|
|
using Aitex.Core.RT.OperationCenter;
|
|
|
using Aitex.Core.Util;
|
|
|
+using MECF.Framework.Common.CommonData.EnumData;
|
|
|
using MECF.Framework.Common.DBCore;
|
|
|
+using MECF.Framework.Common.Equipment;
|
|
|
+using MECF.Framework.Common.SubstrateTrackings;
|
|
|
+using MECF.Framework.Common.Utilities;
|
|
|
|
|
|
namespace MECF.Framework.Common.DataCenter
|
|
|
{
|
|
@@ -14,9 +20,9 @@ namespace MECF.Framework.Common.DataCenter
|
|
|
{
|
|
|
public ScheduleMaintenanceDataItem DataItem { get; private set; }
|
|
|
|
|
|
- public ScheduleMaintenanceData(string item, string display, string unit, float startValue, float limitValue, string maintenanceProcessing, string path, string additionInformationName = "", string additionInformationDisplay = "")
|
|
|
+ public ScheduleMaintenanceData(string item, string display, string unit, float startValue, float limitValue, string maintenanceProcessing, string path, string additionInformationName = "", string additionInformationDisplay = "", string associationProcessRecipeName = "")
|
|
|
{
|
|
|
- ScheduleMaintenanceDataManager.Instance.Subscribe(item, display, unit, startValue, limitValue, maintenanceProcessing, path, additionInformationName, additionInformationDisplay);
|
|
|
+ ScheduleMaintenanceDataManager.Instance.Subscribe(item, display, unit, startValue, limitValue, maintenanceProcessing, path, additionInformationName, additionInformationDisplay, associationProcessRecipeName);
|
|
|
|
|
|
DataItem = ScheduleMaintenanceDataManager.Instance.GetItem(item);
|
|
|
}
|
|
@@ -33,6 +39,10 @@ namespace MECF.Framework.Common.DataCenter
|
|
|
ScheduleMaintenanceDataManager.Instance.SetValue(DataItem.Item, value);
|
|
|
}
|
|
|
|
|
|
+ public void SetStartValue(float value)
|
|
|
+ {
|
|
|
+ ScheduleMaintenanceDataManager.Instance.SetStartValue(DataItem.Item, value);
|
|
|
+ }
|
|
|
public float GetValue()
|
|
|
{
|
|
|
return ScheduleMaintenanceDataManager.Instance.GetValue(DataItem.Item);
|
|
@@ -52,6 +62,7 @@ namespace MECF.Framework.Common.DataCenter
|
|
|
public float StartValue { get; set; }
|
|
|
public float LimitValue { get; set; }
|
|
|
public string MaintenanceProcessing { get; set; }
|
|
|
+ public string AssociationProcessRecipeName { get; set; }
|
|
|
public string Display { get; set; }
|
|
|
public string Path { get; set; }
|
|
|
public string AdditionInformationName { get; set; }
|
|
@@ -92,6 +103,11 @@ namespace MECF.Framework.Common.DataCenter
|
|
|
SetMaintenanceProcessing((string)args[0], args[1].ToString());
|
|
|
return true;
|
|
|
});
|
|
|
+ OP.Subscribe("System.ScheduleMaintenance.SetAssociationProcessRecipeName", (method, args) =>
|
|
|
+ {
|
|
|
+ SetAssociationProcessRecipeName((string)args[0], args[1].ToString());
|
|
|
+ return true;
|
|
|
+ });
|
|
|
|
|
|
OP.Subscribe("System.ScheduleMaintenance.SetLimitValue", (method, args) =>
|
|
|
{
|
|
@@ -114,7 +130,6 @@ namespace MECF.Framework.Common.DataCenter
|
|
|
return true;
|
|
|
});
|
|
|
|
|
|
-
|
|
|
DataTable dt = DataQuery.Query("select * from \"schedule_maintenance\"");
|
|
|
|
|
|
for (int i = 0; i < dt.Rows.Count; i++)
|
|
@@ -127,6 +142,7 @@ namespace MECF.Framework.Common.DataCenter
|
|
|
item.Path = dt.Rows[i]["path"].ToString();
|
|
|
item.AdditionInformationName = dt.Rows[i]["addition_information_name"].ToString();
|
|
|
item.AdditionInformationDisplay = dt.Rows[i]["addition_information_display"].ToString();
|
|
|
+ item.AssociationProcessRecipeName = dt.Rows[i]["association_process_recipeName"].ToString();
|
|
|
if (float.TryParse(dt.Rows[i]["current_value"].ToString(), out float value))
|
|
|
item.CurrentValue = value;
|
|
|
if (float.TryParse(dt.Rows[i]["scheduling_start_value"].ToString(), out value))
|
|
@@ -136,6 +152,9 @@ namespace MECF.Framework.Common.DataCenter
|
|
|
|
|
|
_items[item.Item] = item;
|
|
|
}
|
|
|
+
|
|
|
+ InitScheduleMaintenance();
|
|
|
+ UpdateSEDWafer();
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
@@ -156,7 +175,7 @@ namespace MECF.Framework.Common.DataCenter
|
|
|
_items[name].Display = display;
|
|
|
|
|
|
string sql = string.Format(
|
|
|
- "UPDATE \"schedule_maintenance\" SET \"maintenance_processing\"='{0}'WHERE \"maintenance_item\"='{1}';", display,
|
|
|
+ "UPDATE \"schedule_maintenance\" SET \"maintenance_display\"='{0}'WHERE \"maintenance_item\"='{1}';", display,
|
|
|
name);
|
|
|
DB.Insert(sql);
|
|
|
|
|
@@ -189,9 +208,30 @@ namespace MECF.Framework.Common.DataCenter
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ public string SetAssociationProcessRecipeName(string name, string associationProcessRecipeName)
|
|
|
+ {
|
|
|
|
|
|
-
|
|
|
+ lock (_locker)
|
|
|
+ {
|
|
|
+ if (!_items.ContainsKey(name))
|
|
|
+ {
|
|
|
+ LOG.Error($"Can not set {name} associationProcessRecipeName value, not defined item");
|
|
|
+ return "";
|
|
|
+ }
|
|
|
+
|
|
|
+ string preValue = _items[name].AssociationProcessRecipeName;
|
|
|
+ _items[name].AssociationProcessRecipeName = associationProcessRecipeName;
|
|
|
+
|
|
|
+ string sql = string.Format(
|
|
|
+ "UPDATE \"schedule_maintenance\" SET \"association_process_recipeName\"='{0}'WHERE \"maintenance_item\"='{1}';", associationProcessRecipeName,
|
|
|
+ name);
|
|
|
+ DB.Insert(sql);
|
|
|
|
|
|
+ EV.PostInfoLog("System", $"{name} schedule maintenance associationProcessRecipeName value changed from {preValue} to {associationProcessRecipeName}");
|
|
|
+
|
|
|
+ return associationProcessRecipeName;
|
|
|
+ }
|
|
|
+ }
|
|
|
public string SetMaintenanceProcessing(string name, string maintenanceProcessing)
|
|
|
{
|
|
|
lock (_locker)
|
|
@@ -243,7 +283,7 @@ namespace MECF.Framework.Common.DataCenter
|
|
|
{
|
|
|
|
|
|
}
|
|
|
- public void Subscribe(string item, string display, string unit, float startValue, float limitValue, string maintenanceProcessing, string path, string additionInformationName, string additionInformationDisplay)
|
|
|
+ public void Subscribe(string item, string display, string unit, float startValue, float limitValue, string maintenanceProcessing, string path, string additionInformationName, string additionInformationDisplay, string associationProcessRecipeName)
|
|
|
{
|
|
|
lock (_locker)
|
|
|
{
|
|
@@ -261,8 +301,9 @@ namespace MECF.Framework.Common.DataCenter
|
|
|
""path"",
|
|
|
""addition_information_name"",
|
|
|
""addition_information_display""
|
|
|
- ) values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}')",
|
|
|
- item, display, startValue, limitValue, maintenanceProcessing, unit, path, additionInformationName, additionInformationDisplay);
|
|
|
+ ""association_process_recipeName""
|
|
|
+ ) values('{0}','{1}','{2}','{3}','{4}','{5}','{6}','{7}','{8}','{9}')",
|
|
|
+ item, display, startValue, limitValue, maintenanceProcessing, unit, path, additionInformationName, additionInformationDisplay, associationProcessRecipeName);
|
|
|
DB.Insert(executeInsert);
|
|
|
}
|
|
|
}
|
|
@@ -287,7 +328,6 @@ namespace MECF.Framework.Common.DataCenter
|
|
|
DB.Insert(sql);
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
public void SetStartValue(string name, float value)
|
|
|
{
|
|
|
lock (_locker)
|
|
@@ -366,6 +406,170 @@ namespace MECF.Framework.Common.DataCenter
|
|
|
return _items[name].CurrentValue;
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ #region
|
|
|
+
|
|
|
+ private Dictionary<string, string> _stepThickness;
|
|
|
+
|
|
|
+ private Dictionary<MaintenanceItemEnum, ScheduleMaintenanceData> _scheduleMaintenanceDataDictionary;
|
|
|
+
|
|
|
+ private void InitScheduleMaintenance()
|
|
|
+ {
|
|
|
+
|
|
|
+ _scheduleMaintenanceDataDictionary = new Dictionary<MaintenanceItemEnum, ScheduleMaintenanceData>
|
|
|
+ {
|
|
|
+ { MaintenanceItemEnum.SDCarrierUseFreq, new ScheduleMaintenanceData(MaintenanceItemEnum.SDCarrierUseFreq.ToString(),"SDCarrierUseFreq", "Times", 0, 0, "None", "CarrierWafer.SieDummy", "Carrier Kind", "Side Dummy") },
|
|
|
+ { MaintenanceItemEnum.SDWaferThickness, new ScheduleMaintenanceData(MaintenanceItemEnum.SDWaferThickness.ToString(), "SDWaferThickness", "Å", 0, 0, "None", "CarrierWafer.SieDummy", "Carrier Kind", "Side Dummy") },
|
|
|
+ { MaintenanceItemEnum.SDUsableDummyWafer, new ScheduleMaintenanceData(MaintenanceItemEnum.SDUsableDummyWafer.ToString(), "SDWaferRemain", "Sheets", 0, 0, "None", "CarrierWafer.SieDummy", "Carrier Kind", "Side Dummy") },
|
|
|
+ { MaintenanceItemEnum.SDBufferRackStayTime, new ScheduleMaintenanceData(MaintenanceItemEnum.SDBufferRackStayTime.ToString(), "SDCarrierStay", "h:m", 0, 0, "None", "CarrierWafer.SieDummy", "Carrier Kind", "Side Dummy") },
|
|
|
+ { MaintenanceItemEnum.SDWaferUserTime, new ScheduleMaintenanceData(MaintenanceItemEnum.SDWaferUserTime.ToString(), "SDWaferUserTime", "h:m", 0, 0, "None", "CarrierWafer.SieDummy", "Carrier Kind", "Side Dummy") },
|
|
|
+
|
|
|
+
|
|
|
+ { MaintenanceItemEnum.FDCarrierUseFreq, new ScheduleMaintenanceData(MaintenanceItemEnum.FDCarrierUseFreq.ToString(),"FDCarrierUseFreq", "Times", 0, 0, "None", "CarrierWafer.FillDummy", "Carrier Kind", "Fill Dummy") },
|
|
|
+ { MaintenanceItemEnum.FDWaferThickness, new ScheduleMaintenanceData(MaintenanceItemEnum.FDWaferThickness.ToString(),"FDWaferThickness", "Å", 0, 0, "None", "CarrierWafer.FillDummy", "Carrier Kind", "Fill Dummy") },
|
|
|
+ { MaintenanceItemEnum.FDUsableDummyWafer, new ScheduleMaintenanceData(MaintenanceItemEnum.FDUsableDummyWafer.ToString(),"FDWaferRemain", "Sheets", 0, 0, "None", "CarrierWafer.FillDummy", "Carrier Kind", "Fill Dummy") },
|
|
|
+ { MaintenanceItemEnum.FDBufferRackStayTime, new ScheduleMaintenanceData(MaintenanceItemEnum.FDBufferRackStayTime.ToString(), "FDCarrierStay", "h:m", 0, 0, "None", "CarrierWafer.FillDummy", "Carrier Kind", "Fill Dummy") },
|
|
|
+ { MaintenanceItemEnum.FDWaferUserTime, new ScheduleMaintenanceData(MaintenanceItemEnum.FDWaferUserTime.ToString(), "FDWaferUserTime", "h:m", 0, 0, "None", "CarrierWafer.FillDummy", "Carrier Kind", "Fill Dummy") },
|
|
|
+
|
|
|
+
|
|
|
+ { MaintenanceItemEnum.OnBoatDummyWaferUse, new ScheduleMaintenanceData(MaintenanceItemEnum.OnBoatDummyWaferUse.ToString(),"OnBoatDummyWaferUse", "Times", 0, 0, "None", "Boat", "", "") },
|
|
|
+ { MaintenanceItemEnum.OnBoatDummyWaferThick, new ScheduleMaintenanceData(MaintenanceItemEnum.OnBoatDummyWaferThick.ToString(), "OnBoatDummyWaferThick", "Å", 0, 0, "None", "Boat", "", "") },
|
|
|
+ { MaintenanceItemEnum.BoatRecipeThickness1, new ScheduleMaintenanceData(MaintenanceItemEnum.BoatRecipeThickness1.ToString(), "BoatRecipeThickness1", "Å", 0, 0, "None", "Boat", "", "") },
|
|
|
+ { MaintenanceItemEnum.BoatRecipeThickness2, new ScheduleMaintenanceData(MaintenanceItemEnum.BoatRecipeThickness2.ToString(), "BoatRecipeThickness2", "Å", 0, 0, "None", "Boat", "", "") },
|
|
|
+ { MaintenanceItemEnum.BoatRecipeThickness3, new ScheduleMaintenanceData(MaintenanceItemEnum.BoatRecipeThickness3.ToString(), "BoatRecipeThickness3", "Å", 0, 0, "None", "Boat", "", "") },
|
|
|
+
|
|
|
+
|
|
|
+ { MaintenanceItemEnum.NonOperationTime1, new ScheduleMaintenanceData(MaintenanceItemEnum.NonOperationTime1.ToString(), "NonOperationTime1", "h:m", 0, 0, "None", "Conditioning", "", "") },
|
|
|
+ { MaintenanceItemEnum.NonOperationTime2, new ScheduleMaintenanceData(MaintenanceItemEnum.NonOperationTime2.ToString(), "NonOperationTime2", "h:m", 0, 0, "None", "Conditioning", "", "") },
|
|
|
+
|
|
|
+ { MaintenanceItemEnum.RecipeExecuteFreq, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeExecuteFreq.ToString(), "Recipe Run Freq", "Times", 0, 0, "None", "Reactor.Recipe", "", "") },
|
|
|
+ { MaintenanceItemEnum.RecipeThickness, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeThickness.ToString(), "Recipe Thickness", "Å", 0, 0, "None", "Reactor.Recipe", "", "") },
|
|
|
+
|
|
|
+
|
|
|
+ { MaintenanceItemEnum.RecipeStepExecuteFreq1, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteFreq1.ToString(), "Recipe StepRunTime1", "Times", 0, 0, "None", "Reactor.StepRunFreq", "Step ID", "") },
|
|
|
+ { MaintenanceItemEnum.RecipeStepExecuteFreq2, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteFreq2.ToString(), "Recipe StepRunTime2", "Times", 0, 0, "None", "Reactor.StepRunFreq", "Step ID", "") },
|
|
|
+ { MaintenanceItemEnum.RecipeStepExecuteFreq3, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteFreq3.ToString(), "Recipe StepRunTime3", "Times", 0, 0, "None", "Reactor.StepRunFreq", "Step ID", "") },
|
|
|
+
|
|
|
+
|
|
|
+ { MaintenanceItemEnum.RecipeStepExecuteTime1, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime1.ToString(), "Recipe StepRunTime1", "h:m", 0, 0, "None", "Reactor.StepRunTime", "Step ID", "") },
|
|
|
+ { MaintenanceItemEnum.RecipeStepExecuteTime2, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime2.ToString(), "Recipe StepRunTime2", "h:m", 0, 0, "None", "Reactor.StepRunTime", "Step ID", "") },
|
|
|
+ { MaintenanceItemEnum.RecipeStepExecuteTime3, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime3.ToString(), "Recipe StepRunTime3", "h:m", 0, 0, "None", "Reactor.StepRunTime", "Step ID", "") },
|
|
|
+ { MaintenanceItemEnum.RecipeStepExecuteTime4, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime4.ToString(), "Recipe StepRunTime4", "h:m", 0, 0, "None", "Reactor.StepRunTime", "Step ID", "") },
|
|
|
+ { MaintenanceItemEnum.RecipeStepExecuteTime5, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime5.ToString(), "Recipe StepRunTime5", "h:m", 0, 0, "None", "Reactor.StepRunTime", "Step ID", "") },
|
|
|
+ { MaintenanceItemEnum.RecipeStepExecuteTime6, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime6.ToString(), "Recipe StepRunTime6", "h:m", 0, 0, "None", "Reactor.StepRunTime", "Step ID", "") },
|
|
|
+ { MaintenanceItemEnum.RecipeStepExecuteTime7, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime7.ToString(), "Recipe StepRunTime7", "h:m", 0, 0, "None", "Reactor.StepRunTime", "Step ID", "") },
|
|
|
+ { MaintenanceItemEnum.RecipeStepExecuteTime8, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeStepExecuteTime8.ToString(), "Recipe StepRunTime8", "h:m", 0, 0, "None", "Reactor.StepRunTime", "Step ID", "") },
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ { MaintenanceItemEnum.RecipeThickness1_Step, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeThickness1_Step.ToString(), "Recipe StepThickness1", "Å", 0, 0, "None", "Reactor.StepThickness", "Step Group", "Group 1") },
|
|
|
+ { MaintenanceItemEnum.RecipeThickness2_Step, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeThickness2_Step.ToString(), "Recipe StepThickness2", "Å", 0, 0, "None", "Reactor.StepThickness", "Step Group", "Group 2") },
|
|
|
+ { MaintenanceItemEnum.RecipeThickness3_Step, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeThickness3_Step.ToString(), "Recipe StepThickness3", "Å", 0, 0, "None", "Reactor.StepThickness", "Step Group", "Group 3") },
|
|
|
+ { MaintenanceItemEnum.RecipeThickness4_Step, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeThickness4_Step.ToString(), "Recipe StepThickness4", "Å", 0, 0, "None", "Reactor.StepThickness", "Step Group", "Group 4") },
|
|
|
+ { MaintenanceItemEnum.RecipeThickness5_Step, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeThickness5_Step.ToString(), "Recipe StepThickness5", "Å", 0, 0, "None", "Reactor.StepThickness", "Step Group", "Group 5") },
|
|
|
+ { MaintenanceItemEnum.RecipeThickness6_Step, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeThickness6_Step.ToString(), "Recipe StepThickness6", "Å", 0, 0, "None", "Reactor.StepThickness", "Step Group", "Group 6") },
|
|
|
+ { MaintenanceItemEnum.RecipeThickness7_Step, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeThickness7_Step.ToString(), "Recipe StepThickness7", "Å", 0, 0, "None", "Reactor.StepThickness", "Step Group", "Group 7") },
|
|
|
+ { MaintenanceItemEnum.RecipeThickness8_Step, new ScheduleMaintenanceData(MaintenanceItemEnum.RecipeThickness8_Step.ToString(), "Recipe StepThickness8", "Å", 0, 0, "None", "Reactor.StepThickness", "Step Group", "Group 8") }
|
|
|
+ };
|
|
|
+ _stepThickness = new Dictionary<string, string>()
|
|
|
+ {
|
|
|
+ {"1","WAIT"},
|
|
|
+ {"2","Name"},
|
|
|
+ };
|
|
|
+ }
|
|
|
+ public void UpdateRecipeTotalThickness(string recipeName, float thickness)
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+ public void UpdateRecipeStepThicknessAndTime(string stepName, float thickness, float timeS)
|
|
|
+ {
|
|
|
+ if (string.IsNullOrEmpty(stepName))
|
|
|
+ return;
|
|
|
+ var checkName = stepName;
|
|
|
+ var nameParas = stepName.Split(':');
|
|
|
+ if (nameParas != null && nameParas.Length > 1)
|
|
|
+ checkName = nameParas[1];
|
|
|
+ }
|
|
|
+ public bool CheckScheduleMaintenanceBeforeJobStart(out string reason)
|
|
|
+ {
|
|
|
+ reason = "";
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ public ScheduleMaintenanceData GetScheduleMaintenanceData(MaintenanceItemEnum MaintenanceItemEnum)
|
|
|
+ {
|
|
|
+ _scheduleMaintenanceDataDictionary.TryGetValue(MaintenanceItemEnum, out var data);
|
|
|
+ return data;
|
|
|
+ }
|
|
|
+ public void MaintenanceProcessingCommandExec(string maintenanceProcessing, Action<string> alarmReportExec, string warningMessage)
|
|
|
+ {
|
|
|
+ if (Enum.TryParse<MaintenanceProcessingCommandEnum>(maintenanceProcessing, out var command))
|
|
|
+ {
|
|
|
+ switch (command)
|
|
|
+ {
|
|
|
+ case MaintenanceProcessingCommandEnum.None:
|
|
|
+ break;
|
|
|
+ case MaintenanceProcessingCommandEnum.AlarmReport:
|
|
|
+ alarmReportExec(warningMessage);
|
|
|
+ break;
|
|
|
+ case MaintenanceProcessingCommandEnum.JobProhibition:
|
|
|
+ break;
|
|
|
+ case MaintenanceProcessingCommandEnum.JobManualStart:
|
|
|
+ break;
|
|
|
+ case MaintenanceProcessingCommandEnum.JobAutoStart:
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public void UpdateSEDWafer()
|
|
|
+ {
|
|
|
+
|
|
|
+ var ccc = BinarySerializer<Dictionary<ModuleName, Dictionary<int, WaferInfo>>>.FromStream("WaferManager");
|
|
|
+ List<WaferInfo> waferInfos = new List<WaferInfo>();
|
|
|
+ if (ccc != null)
|
|
|
+ {
|
|
|
+ foreach (var moduleWafers in ccc)
|
|
|
+ {
|
|
|
+ waferInfos.AddRange(moduleWafers.Value.Select(a => a.Value));
|
|
|
+ }
|
|
|
+ if (waferInfos.Any(a => a.WaferType == WaferType.ED))
|
|
|
+ {
|
|
|
+
|
|
|
+ var maxEDUseCount = waferInfos.Where(a => a.WaferType == WaferType.ED).Max(a => a.UseCount);
|
|
|
+ var maxEDUseThick = waferInfos.Where(a => a.WaferType == WaferType.ED).Max(a => a.UseThick);
|
|
|
+ var maxEDUseTime = waferInfos.Where(a => a.WaferType == WaferType.ED).Max(a => a.UseTime);
|
|
|
+
|
|
|
+ if (_scheduleMaintenanceDataDictionary.TryGetValue(MaintenanceItemEnum.FDCarrierUseFreq, out var FDCarrierUseFreq))
|
|
|
+ FDCarrierUseFreq.SetValue(maxEDUseCount);
|
|
|
+
|
|
|
+ if (_scheduleMaintenanceDataDictionary.TryGetValue(MaintenanceItemEnum.FDWaferThickness, out var FDWaferThickness))
|
|
|
+ FDWaferThickness.SetValue(maxEDUseThick);
|
|
|
+
|
|
|
+ if (_scheduleMaintenanceDataDictionary.TryGetValue(MaintenanceItemEnum.FDWaferUserTime, out var FDWaferUserTime))
|
|
|
+ FDWaferUserTime.SetValue(maxEDUseTime);
|
|
|
+ }
|
|
|
+ if (waferInfos.Any(a => a.WaferType == WaferType.SD))
|
|
|
+ {
|
|
|
+
|
|
|
+ var maxSDUseCount = waferInfos.Where(a => a.WaferType == WaferType.SD).Max(a => a.UseCount);
|
|
|
+ var maxSDUseThick = waferInfos.Where(a => a.WaferType == WaferType.SD).Max(a => a.UseThick);
|
|
|
+ var maxSDUseTime = waferInfos.Where(a => a.WaferType == WaferType.SD).Max(a => a.UseTime);
|
|
|
+ if (_scheduleMaintenanceDataDictionary.TryGetValue(MaintenanceItemEnum.SDCarrierUseFreq, out var SDCarrierUseFreq))
|
|
|
+ SDCarrierUseFreq.SetValue(maxSDUseCount);
|
|
|
+
|
|
|
+ if (_scheduleMaintenanceDataDictionary.TryGetValue(MaintenanceItemEnum.SDWaferThickness, out var SDWaferThickness))
|
|
|
+ SDWaferThickness.SetValue(maxSDUseThick);
|
|
|
+
|
|
|
+ if (_scheduleMaintenanceDataDictionary.TryGetValue(MaintenanceItemEnum.SDWaferUserTime, out var SDWaferUserTime))
|
|
|
+ SDWaferUserTime.SetValue(maxSDUseTime);
|
|
|
+ }
|
|
|
+
|
|
|
+ // var data = ccc.Select(a => a.Value.Select(e=>e.Value)).ToList();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+
|
|
|
}
|
|
|
}
|
|
|
|