| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 | 
							- using System;
 
- using System.Collections.Generic;
 
- using System.Linq;
 
- using System.Text;
 
- using System.Threading.Tasks;
 
- using Aitex.Core.Common;
 
- using Aitex.Core.RT.SCCore;
 
- using MECF.Framework.Common.DBCore;
 
- using MECF.Framework.Common.Equipment;
 
- using MECF.Framework.Common.Jobs;
 
- using MECF.Framework.Common.SubstrateTrackings;
 
- using FurnaceRT.Equipments.PMs.RecipeExecutions;
 
- using Aitex.Core.RT.Log;
 
- namespace FurnaceRT.Equipments.Schedulers
 
- {
 
-     class SchedulerDBCallback : ISchedulerDBCallback
 
-     {
 
-         private ProcessJobInfo _processJobInfo;
 
-         public void LotCreated(ControlJobInfo cj)
 
-         {
 
-             if (string.IsNullOrEmpty(cj.Module))
 
-                 return;
 
-             ModuleName module = ModuleHelper.Converter(cj.Module);
 
-             Guid carrierGuid = CarrierManager.Instance.GetCarrier(cj.Module).InnerId;
 
-             LotDataRecorder.StartLot(cj.LotInnerId.ToString(), carrierGuid.ToString(), "", cj.LotName, cj.Module, cj.Module, cj.LotWafers.Count);
 
-             foreach (var waferInfo in cj.LotWafers)
 
-             {
 
-                 LotDataRecorder.InsertLotWafer(cj.LotInnerId.ToString(), waferInfo.InnerId.ToString());
 
-                 WaferDataRecorder.SetWaferSequence(waferInfo.InnerId.ToString(), waferInfo.PPID);
 
-             }
 
-         }
 
-         public void LotFinished(ControlJobInfo cj)
 
-         {
 
-             int unprocessed = 0;
 
-             int aborted = 0;
 
-             foreach (var waferInfo in cj.LotWafers)
 
-             {
 
-                 if (waferInfo.ProcessState == EnumWaferProcessStatus.Failed)
 
-                 {
 
-                     aborted++;
 
-                     continue;
 
-                 }
 
-                 if (waferInfo.ProcessState != EnumWaferProcessStatus.Completed)
 
-                 {
 
-                     unprocessed++;
 
-                     continue;
 
-                 }
 
-             }
 
-             LotDataRecorder.EndLot(cj.LotInnerId.ToString(), aborted, unprocessed);
 
-         }
 
-         public void PjCreated(params object[] objs)
 
-         {
 
-             var param = (Dictionary<string, object>)objs[0];
 
-             string jobName = (string)param["JobRecipe"];
 
-             string recipeName = (string)param["ProcessRecipe"];
 
-             string layoutName = (string)param["LayoutRecipe"];
 
-             string form = (string)param["Form"];
 
-             string batchId = "";
 
-             if (param.ContainsKey("Batch"))
 
-             {
 
-                 batchId = $"Batch{(string)param["Batch"]}{DateTime.Now.ToString("yyyyMMddHHmmssffff")}";
 
-             }
 
-             else
 
-             {
 
-                 batchId = DateTime.Now.ToString("yyyyMMddHHmmssffff");
 
-             }
 
-             _processJobInfo = new ProcessJobInfo();
 
-             _processJobInfo.Name = jobName;
 
-             _processJobInfo.LotName = jobName;
 
-             _processJobInfo.InnerId = Guid.NewGuid();
 
-             RecipeParser.LayoutRecipeParse(layoutName, ModuleName.PM1.ToString(), out RecipeLayoutEntityNormal layoutRecipeDataNormal, out RecipeLayoutEntityExpert layoutRecipeDataExpert, out string reason);
 
-             string layoutData = String.Join(",", layoutRecipeDataExpert.Items);
 
-             JobDataRecorder.CreatePJ(_processJobInfo.InnerId.ToString(), batchId, jobName, recipeName, layoutName, layoutData, form);
 
-         }
 
-         public void PjCreated(string batch, string jobRecipe, string processRecipe, string layoutRecipe)
 
-         {
 
-             string batchId = "";
 
-             if (!string.IsNullOrEmpty(batch))
 
-             {
 
-                 batchId = $"Batch{batch}{DateTime.Now.ToString("yyyyMMddHHmmssffff")}";
 
-             }
 
-             else
 
-             {
 
-                 batchId = DateTime.Now.ToString("yyyyMMddHHmmssffff");
 
-             }
 
-             _processJobInfo = new ProcessJobInfo();
 
-             _processJobInfo.Name = jobRecipe;
 
-             _processJobInfo.LotName = jobRecipe;
 
-             _processJobInfo.InnerId = Guid.NewGuid();
 
-             RecipeParser.LayoutRecipeParse(layoutRecipe, ModuleName.PM1.ToString(), out RecipeLayoutEntityNormal layoutRecipeDataNormal, out RecipeLayoutEntityExpert layoutRecipeDataExpert, out string reason);
 
-             string layoutData = String.Join(",", layoutRecipeDataExpert.Items);
 
-             JobDataRecorder.CreatePJ(_processJobInfo.InnerId.ToString(), batchId, jobRecipe, processRecipe, layoutRecipe, layoutData, "Normal");
 
-         }
 
-         public void PjCreated(ProcessJobInfo pj)
 
-         {
 
-             _processJobInfo = new ProcessJobInfo();
 
-             _processJobInfo.Name = pj.Name;
 
-             _processJobInfo.LotName = pj.LotName;
 
-             _processJobInfo.InnerId = pj.InnerId;
 
-             _processJobInfo.JobRecipe = pj.JobRecipe;
 
-             _processJobInfo.ProcessRecipe = pj.ProcessRecipe;
 
-             _processJobInfo.LayoutRecipe = pj.LayoutRecipe;
 
-             var batchId = DateTime.Now.ToString("yyyyMMddHHmmssffff");
 
-             RecipeParser.LayoutRecipeParse(_processJobInfo.LayoutRecipe, ModuleName.PM1.ToString(),
 
-                 out RecipeLayoutEntityNormal layoutRecipeDataNormal, out RecipeLayoutEntityExpert layoutRecipeDataExpert, out string reason);
 
-             string layoutData = String.Join(",", layoutRecipeDataExpert.Items);
 
-             JobDataRecorder.CreatePJ(_processJobInfo.InnerId.ToString(), batchId,
 
-                 _processJobInfo.JobRecipe, _processJobInfo.ProcessRecipe, _processJobInfo.LayoutRecipe, layoutData, "Normal");
 
-         }
 
-         public void PjCreated(string processName)
 
-         {
 
-             string form = "process";
 
-             string batchId = $"process{DateTime.Now.ToString("yyyyMMddHHmmssffff")}";
 
-             _processJobInfo = new ProcessJobInfo();
 
-             _processJobInfo.Name = processName;
 
-             _processJobInfo.LotName = processName;
 
-             _processJobInfo.InnerId = Guid.NewGuid();
 
-             JobDataRecorder.CreatePJ(_processJobInfo.InnerId.ToString(), batchId, "", processName, "", "", form);
 
-         }
 
-         public void PjStart()
 
-         {
 
-             JobDataRecorder.StartPJ(_processJobInfo.InnerId.ToString());
 
-         }
 
-         public void PjUpdated()
 
-         {
 
-             var wafers = WaferManager.Instance.GetWafers(ModuleName.PM1);
 
-             List<string> layoutDatas = new List<string>();
 
-             List<string> waferDatas = new List<string>();
 
-             //StringBuilder waferData = new StringBuilder();
 
-             int waferCount = 0;
 
-             for (int i = 0; i < wafers.Length; i++)
 
-             {
 
-                 if (wafers[i].IsEmpty)
 
-                 {
 
-                     layoutDatas.Add("");
 
-                     continue;
 
-                 }
 
-                 switch (wafers[i].WaferType)
 
-                 {
 
-                     case WaferType.P:
 
-                     case WaferType.M:
 
-                     case WaferType.M1:
 
-                     case WaferType.M2:
 
-                     case WaferType.SD:
 
-                     case WaferType.ED:
 
-                         layoutDatas.Add($"{wafers[i].WaferType}-{wafers[i].LotId}-{wafers[i].WaferOrigin.Replace("Stocker", "")}");
 
-                         //layoutDatas.Add($"{wafers[i].WaferType}-{wafers[i].WaferOrigin}");
 
-                         break;
 
-                     default:
 
-                         layoutDatas.Add("");
 
-                         break;
 
-                 }
 
-                 waferDatas.Add($"{wafers[i].WaferType}:{wafers[i].WaferOrigin}:{wafers[i].LotId}");
 
-                 //waferData.Append(wafers[i].WaferType.ToString() + ":");
 
-                 //waferData.Append(wafers[i].WaferOrigin + ",");
 
-                 waferCount++;
 
-             }
 
-             string layoutData = String.Join(",", layoutDatas);
 
-             string waferData = String.Join(",", waferDatas);
 
-             if(_processJobInfo != null)
 
-                 JobDataRecorder.UpdatePJ(_processJobInfo.InnerId.ToString(), layoutData, waferData, waferCount);
 
-         }
 
-         public string GetFirstPJId()
 
-         {
 
-             if (_processJobInfo != null) return _processJobInfo.InnerId.ToString();
 
-             return "";
 
-         }
 
-         public void PjFinished(string endStatus = "Normal")
 
-         {
 
-             if (_processJobInfo != null)
 
-                 JobDataRecorder.EndPJ(_processJobInfo.InnerId.ToString(), endStatus);
 
-         }
 
-         public void JobCreated(ControlJobInfo cj, ProcessJobInfo pj)
 
-         {
 
-             List<string> carrierInnerIdLst = new List<string>();
 
-             List<string> stockerModuleLst = new List<string>();
 
-             List<int> stockerWaferCountLst = new List<int>();
 
-             foreach (var s in pj.Stockers)
 
-             {
 
-                 var type = SC.GetStringValue($"System.Stocker.{s.Item1}WaferType");
 
-                 if (!string.IsNullOrEmpty(type) && (type.Contains("P") || type.Contains("M")))
 
-                 {
 
-                     ModuleName module = ModuleHelper.Converter(s.Item1);
 
-                     var carrier = CarrierManager.Instance.GetCarrier(s.Item1, 0);
 
-                     if (carrier != null && !carrier.IsEmpty)
 
-                     {
 
-                         var waferCount = WaferManager.Instance.GetWafers(module).ToList().Where(x => !x.IsEmpty).Count();
 
-                         carrierInnerIdLst.Add(carrier.InnerId.ToString());
 
-                         stockerModuleLst.Add(s.Item1);
 
-                         stockerWaferCountLst.Add(waferCount);
 
-                     }
 
-                 }
 
-             }
 
-             JobDataRecorder.StartPJ(pj.InnerId.ToString(), string.Join(";", carrierInnerIdLst), cj.InnerId.ToString(), cj.LotName, pj.Name, string.Join(";", stockerModuleLst), string.Join(";", stockerModuleLst), stockerWaferCountLst.Sum(), pj.JobRecipe);
 
-         }
 
-     }
 
- }
 
 
  |