private static void AddItem(this EqpArrangeSet setInfo, EqpArrangeInfo item) { if (item == null) { return; } //All Items LcdHelper.AddSort(setInfo.Items, item, EqpArrangeInfoComparer.Default); //Group Items //SubEqp는 defaultArrange 미지정, 모두 Default로 처리(2019.09.07) bool isDefault = setInfo.IsSubEqp ? true : LcdHelper.Equals(item.LimitType, setInfo.DefaultArrange); var groups = isDefault ? setInfo.DefaultGroups : setInfo.EtcGroups; string groupKey = item.GetGroupKey(); List <EqpArrangeInfo> list; if (groups.TryGetValue(groupKey, out list) == false) { groups.Add(groupKey, list = new List <EqpArrangeInfo>()); } LcdHelper.AddSort(list, item, EqpArrangeInfoComparer.Default); }
private static bool IsLoadable(this EqpArrangeSet setInfo) { List <EqpArrangeInfo> loadableList = new List <EqpArrangeInfo>(); //M수량 제약 체크 X int qty = 0; return(setInfo.IsLoadable(ref loadableList, qty)); }
private static EqpArrangeSet ImportEqpArrangeSet(string key, string eqpID, FabEqp targetEqp, string stepID, string productID, string productVer, FabStdStep stdStep, bool isFixedProductVer, bool isSubEqp) { //SubEqp의 경우는 defaultArrange 미지정 string defaultArrange = isSubEqp ? null : stdStep.DefaultArrange; EqpArrangeSet setInfo = new EqpArrangeSet { Key = key, EqpID = eqpID, TargetEqp = targetEqp, StepID = stepID, ProductID = productID, ProductVer = productVer, StdStep = stdStep, DefaultArrange = defaultArrange, DefaultLimitTypeList = LcdHelper.ParseLimitType(defaultArrange), IsFixedProductVer = isFixedProductVer, IsSubEqp = isSubEqp }; var list = GetEqpArrangeInfo(eqpID); if (list == null || list.Count() == 0) { return(setInfo); } foreach (var arr in list) { if (arr.ActivateType == ActivateType.NONE) { continue; } //MainRunStep이 등록된 설비의 경우, 타 Step의 M은 무시(2019.06.16 - by.liujian(유건)) if (arr.ActivateType == ActivateType.M) { var mainRunStep = targetEqp.MainRunSteps; if (mainRunStep != null && mainRunStep.Count > 0) { if (mainRunStep.Find(t => t.StepID == stepID) == null) { continue; } } } if (arr.IsMatched(stepID, productID, productVer, isFixedProductVer)) { setInfo.AddItem(arr); } } return(setInfo); }
private static bool HasEtcGroups(this EqpArrangeSet setInfo) { var group = setInfo.EtcGroups; if (group != null && group.Count > 0) { return(true); } return(false); }
private static bool HasItems(this EqpArrangeSet setInfo) { var items = setInfo.Items; if (items != null && items.Count > 0) { return(true); } return(false); }
private static bool IsLoadable(this EqpArrangeSet setInfo, FabLot lot, bool checkQty, bool isLastPlan, out List <EqpArrangeInfo> loadableList) { loadableList = new List <EqpArrangeInfo>(); int lotSize = SeeplanConfiguration.Instance.LotUnitSize; int unitQty = lot.IsDummy ? lotSize : lot.UnitQty; int qty = checkQty ? Math.Max(unitQty, 1) : 0; //연속 투입인 경우에만 소량 투입 허용(2019.09.06 - by.liujian(유건)) if (checkQty && isLastPlan == false) { qty = Math.Max(qty, lotSize); } return(setInfo.IsLoadable(ref loadableList, qty)); }
private static void MoveQty(this EqpArrangeSet setInfo, FabAoEquipment eqp, FabLot lot) { if (setInfo.HasItems() == false) { return; } int qty = lot.UnitQty; if (qty <= 0) { return; } string productVersion = lot.CurrentProductVersion; var mask = lot.CurrentMask; var list = setInfo.Items; foreach (var item in list) { if (item.ActivateType != ActivateType.M) { continue; } if (item.IsMatchedByProductVersion(productVersion) == false) { continue; } if (item.IsMatchedByMask(mask) == false) { continue; } item.MoveQty += qty; item.Seq++; OutCollector.WriteLimitMLog(item, eqp, lot, eqp.NowDT); } }
private static bool IsLoadable(this EqpArrangeSet setInfo, ref List <EqpArrangeInfo> loadableList, int qty = 0) { //Default Group은 반드시 존재해야 함. if (setInfo.HasDefaultGroups() == false) { return(false); } List <EqpArrangeInfo> list = new List <EqpArrangeInfo>(); //Default Group var dgroup = setInfo.DefaultGroups; bool isLoadable = IsLoadable(dgroup, ref list, qty); if (isLoadable == false) { return(false); } //Etc Group (추가 비가용 체크, 일치하는 비가용 정보 존재시 비가용 처리) if (setInfo.HasEtcGroups()) { var egroup = setInfo.EtcGroups; list.RemoveAll(t => IsLoadable_Etc(t, egroup, qty) == false); } if (list.Count == 0) { return(false); } if (loadableList != null) { loadableList.AddRange(list); } return(isLoadable); }