public void InsertDefectHoldRule(DefectHoldRuleInfo item) { logger.Debug("(DefectHoldRule)InsertDefectHoldRule starts"); try { DefectHoldRuleInfo checkInfo = new DefectHoldRuleInfo(); if (item.Line != "") { checkInfo.Line = item.Line; } if (item.Family != "") { checkInfo.Family = item.Family; } if (item.DefectCode != "") { checkInfo.DefectCode = item.DefectCode; } if (item.CheckInStation != "") { checkInfo.CheckInStation = item.CheckInStation; } checkInfo.EqualSameDefectCount = item.EqualSameDefectCount; //checkInfo.OverDefectCount = item.OverDefectCount; IList<DefectHoldRuleInfo> checkInfoList = iHoldRepository.GetDefectHoldRule(checkInfo); if (checkInfoList != null && checkInfoList.Count != 0) { IList<DefectHoldRuleInfo> checkcount = new List<DefectHoldRuleInfo>(); if (item.OverDefectCount != 0) { checkcount = (from q in checkInfoList where q.OverDefectCount != 0 select q).ToList<DefectHoldRuleInfo>(); if (checkcount != null && checkcount.Count != 0) { throw new Exception("This OverDefectCode is Exists, Please check it."); } } throw new Exception("This Info is Exists"); } iHoldRepository.InsertDefectHoldRule(item); } catch (FisException e) { logger.Error(e.mErrmsg, e); throw new Exception(e.mErrmsg); } catch (Exception e) { logger.Error(e.Message, e); throw new SystemException(e.Message); } finally { logger.Debug("(DefectHoldRule)InsertDefectHoldRule end"); } }
public void UpdateDefectHoldRule(DefectHoldRuleInfo item) { logger.Debug("(DefectHoldRule)UpdateDefectHoldRule starts"); try { iHoldRepository.UpdateDefectHoldRule(item); } catch (FisException e) { logger.Error(e.mErrmsg, e); throw new Exception(e.mErrmsg); } catch (Exception e) { logger.Error(e.Message, e); throw new SystemException(e.Message); } finally { logger.Debug("(DefectHoldRule)UpdateDefectHoldRule end"); } }
/// <summary> /// 檢查DefectHoldRule 及設定DefectHoldRule Action /// </summary> protected internal override ActivityExecutionStatus DoExecute(ActivityExecutionContext executionContext) { IProductRepository prodRep = RepositoryFactory.GetInstance().GetRepository<IProductRepository, IProduct>(); IHoldRepository holdRep = RepositoryFactory.GetInstance().GetRepository<IHoldRepository>(); ILineRepository lineRep = RepositoryFactory.GetInstance().GetRepository<ILineRepository, Line>(); IProduct prod = (Product)CurrentSession.GetValue(Session.SessionKeys.Product); //if (prod.Repairs.Count == 0) //{ // return base.DoExecute(executionContext); //} DefectHoldRuleInfo condition = new DefectHoldRuleInfo() { CheckInStation=this.Station}; IList<DefectHoldRuleInfo> holdRuleList= holdRep.GetDefectHoldRule(condition); if (holdRuleList == null || holdRuleList.Count == 0) { return base.DoExecute(executionContext); } IList<string> defectList = (IList<string>)CurrentSession.GetValue(Session.SessionKeys.DefectList); if (defectList == null ) { //return base.DoExecute(executionContext); defectList = new List<string>(); } string line =""; string pdLine = ""; if (string.IsNullOrEmpty(this.Line)) { pdLine =prod.Status.Line.Substring(0,1); line = prod.Status.Line.Substring(0,1); }else{ line = this.Line.Substring(0,1); pdLine = this.Line; } IList<DefectHoldRuleInfo> defectCodeEqualDefectCountList=null; IList<DefectHoldRuleInfo> defectCodeOverDefectCountList=null; IList<DefectHoldRuleInfo> equalDefectCountList=null; IList<DefectHoldRuleInfo> overDefectCountList=null; getHighPriorityDefectHoldRule(holdRuleList, line, new List<string>() { prod.Model, prod.Family }, out defectCodeEqualDefectCountList, out defectCodeOverDefectCountList, out equalDefectCountList, out overDefectCountList); DefectHoldRuleInfo matchHoldRule = null; #region DefectCode 不為空白且EqualSameDefectCount>0 if (defectCodeEqualDefectCountList.Count > 0 && matchHoldRule==null) { var defectCodeList = defectCodeEqualDefectCountList.Select(x => x.DefectCode).Distinct().OrderByDescending(x=>x); foreach (string defectCode in defectCodeList) { var defectHoldList = defectCodeEqualDefectCountList.Where(x => x.DefectCode == defectCode).ToList(); foreach (DefectHoldRuleInfo rule in defectHoldList) { matchHoldRule = matchDefectCodeEqualRule(prod, rule, defectList); if (matchHoldRule != null) { break; } } if (matchHoldRule != null) { break; } } } #endregion #region DefectCode 不為空白且OverDefectCount>0 if (defectCodeOverDefectCountList.Count > 0 && matchHoldRule==null) { var defectCodeList = defectCodeOverDefectCountList.Select(x => x.DefectCode).Distinct().OrderByDescending(x=>x); foreach (string defectCode in defectCodeList) { var defectHoldList = defectCodeOverDefectCountList.Where(x => x.DefectCode == defectCode).ToList(); matchHoldRule = matchOverRule(prod, defectHoldList, defectList); if (matchHoldRule != null) { break; } } } #endregion #region DefectCode 空白且EqualSameDefectCount>0 if (equalDefectCountList.Count > 0 && defectList.Count>0 && matchHoldRule==null) { foreach(string code in defectList) { foreach (DefectHoldRuleInfo item in equalDefectCountList ) { matchHoldRule=matchEqualRule(prod,item,code); if (matchHoldRule != null) { break; } } if (matchHoldRule != null) { break; } } } #endregion #region DefectCode 空白且OverDefectCount>0 if (overDefectCountList.Count > 0 && matchHoldRule==null) { matchHoldRule= matchOverRule(prod,overDefectCountList,defectList); } #endregion if (matchHoldRule != null) { #region write Hold string preStation = prod.Status.StationId; ActivityCommonImpl.Instance.FutureHold.writeHoldStation(null, prod, pdLine, "DefectHold", matchHoldRule.HoldStation, matchHoldRule.HoldCode, "Descr:" + matchHoldRule.HoldDescr + "~PreStation:" + preStation + "~CurStation:" + matchHoldRule.CheckInStation + "~DefectHold ID:" + matchHoldRule.ID.ToString() , this.Editor); //throw error message int sameDefectCount=matchHoldRule.EqualSameDefectCount??0; int overDefectCount=matchHoldRule.OverDefectCount??0; int defectCount=sameDefectCount==0?overDefectCount: sameDefectCount; string code=string.IsNullOrEmpty( matchHoldRule.DefectCode) ? string.Join(",", defectList.ToArray()):matchHoldRule.DefectCode; throw new FisException("CQCHK0036", new string[] { prod.ProId, prod.CUSTSN, matchHoldRule.ID.ToString(), matchHoldRule.HoldDescr, code, defectCount.ToString()}); #endregion } return base.DoExecute(executionContext); }
public IList<DefectHoldRuleInfo> GetDefectHoldRule(DefectHoldRuleInfo condition) { logger.Debug("(DefectHoldRule)GetDefectHoldRule starts"); try { return iHoldRepository.GetDefectHoldRule(condition); } catch (FisException e) { logger.Error(e.mErrmsg, e); throw new Exception(e.mErrmsg); } catch (Exception e) { logger.Error(e.Message, e); throw new SystemException(e.Message); } finally { logger.Debug("(DefectHoldRule)GetDefectHoldRule end"); } }
private DefectHoldRuleInfo matchEqualRule(IProduct prod, DefectHoldRuleInfo rule, string defectCode) { int qty = getDefectCount(prod, defectCode, string.IsNullOrEmpty(rule.ExceptCause) ? new List<string>() : rule.ExceptCause.Split(new char[] { '~' }).ToList()) + 1; if (qty == (rule.EqualSameDefectCount??0)) { return rule; } return null; }
private DefectHoldRuleInfo matchDefectCodeEqualRule(IProduct prod, DefectHoldRuleInfo rule, IList<string> defectList) { DefectHoldRuleInfo matchHoldRule = null; int qty = getDefectCount(prod, rule.DefectCode, string.IsNullOrEmpty(rule.ExceptCause)? new List<string>() : rule.ExceptCause.Split(new char[] { '~' }).ToList()); if (defectList.Contains(rule.DefectCode)) { qty = qty + 1; } if (qty == (rule.EqualSameDefectCount ?? 0)) { matchHoldRule= rule; } return matchHoldRule; }
private string judgeSequence(DefectHoldRuleInfo item) { if (!string.IsNullOrEmpty(item.DefectCode)) { if (item.EqualSameDefectCount > 0) { return "00"; } else if (item.OverDefectCount > 0) { return "01"; } } else { if (item.EqualSameDefectCount > 0) { return "10"; } else if (item.OverDefectCount > 0) { return "11"; } } return "20"; }
protected void Save_ServerClick(Object sender, EventArgs e) { try { IList<DefectHoldRuleInfo> defectHoldRuleList = null; string line = this.cmbLine.SelectedItem.Value.ToString(); string familyandmodel = this.txtFamilyAndModel.Text.ToString().Trim().ToUpper(); string defect = this.txtDefect.Text.ToString().Trim().ToUpper(); string exceptcause = this.txtExceptCause.Text.ToString().Trim(); string strequalsameDefectcount = this.txtEqualSameDefectCount.Text.ToString().Trim(); string stroverdefectcount = this.txtOverDefectCount.Text.ToString().Trim(); string checkinstation = this.cmbCheckINStation.SelectedItem.Value.ToString(); string holdstation = this.cmbHoldStation.SelectedItem.Value.ToString(); string holdcode = this.cmbHoldCode.SelectedItem.Value.ToString(); string holdDescr = this.txtHoldDescr.Text.ToString().Trim().ToUpper(); string id = this.hidDeleteID.Value; if (!string.IsNullOrEmpty(familyandmodel)) { if (!iDefectHoldRule.CheckFamilyAndModel(familyandmodel)) { throw new FisException("Input Fmaily/Model is not found"); } } int equalsameDefectcount = 0; int overdefectcount = 0; if(strequalsameDefectcount != "") { equalsameDefectcount = int.Parse(strequalsameDefectcount); } if(stroverdefectcount != "") { overdefectcount = int.Parse(stroverdefectcount); } DefectHoldRuleInfo defectHoldInfo = new DefectHoldRuleInfo(); defectHoldInfo.Line = line; defectHoldInfo.Family = familyandmodel; defectHoldInfo.DefectCode = defect; defectHoldInfo.ExceptCause = exceptcause; defectHoldInfo.EqualSameDefectCount = equalsameDefectcount; defectHoldInfo.OverDefectCount = overdefectcount; defectHoldInfo.CheckInStation = checkinstation; defectHoldInfo.HoldStation = holdstation; defectHoldInfo.HoldCode = holdcode; defectHoldInfo.HoldDescr = holdDescr; defectHoldInfo.Editor = UserId; defectHoldInfo.Cdt = DateTime.Now; defectHoldInfo.Udt = DateTime.Now; if (!string.IsNullOrEmpty(id)) { defectHoldInfo.ID = int.Parse(id); iDefectHoldRule.UpdateDefectHoldRule(defectHoldInfo); } else { iDefectHoldRule.InsertDefectHoldRule(defectHoldInfo); } defectHoldRuleList = iDefectHoldRule.GetDefectHoldRule(new DefectHoldRuleInfo{ Line = line, Family = familyandmodel, DefectCode = defect, ExceptCause = exceptcause, EqualSameDefectCount = equalsameDefectcount, OverDefectCount = overdefectcount, CheckInStation = checkinstation}); int ID = defectHoldRuleList[0].ID; bindTable(defectHoldRuleList, DEFAULT_ROWS); initlineTop(); ScriptManager.RegisterStartupScript(this.updatePanel, typeof(System.Object), "saveUpdate", "resetTableHeight();AddUpdateComplete('" + ID + "');", true);// } catch (FisException ex) { showErrorMessage(ex.mErrmsg); } catch (Exception ex) { showErrorMessage(ex.Message); bindTable(null, DEFAULT_ROWS); } finally { hideWait(); } }
protected void Query_ServerClick(Object sender, EventArgs e) { try { string line = this.cmbLineTop.SelectedItem.Value.ToString(); string familyandmodel = this.txtFamilyAndModelTop.Text.Trim(); string defect = this.txtDefectTop.Text.Trim(); string exceptcause = this.txtExceptCause.Text.Trim(); DefectHoldRuleInfo condition = new DefectHoldRuleInfo(); if (line != "") { condition.Line = line; } if (familyandmodel != "") { condition.Family = familyandmodel; } if (defect != "") { condition.DefectCode = defect; } if (exceptcause != "") { condition.ExceptCause = exceptcause; } IList<DefectHoldRuleInfo> defectHoldRuleList = iDefectHoldRule.GetDefectHoldRule(condition); bindTable(defectHoldRuleList, DEFAULT_ROWS); } catch (FisException ex) { showErrorMessage(ex.mErrmsg); bindTable(null, DEFAULT_ROWS); //this.hidRecordCount.Value = "0"; } catch (Exception ex) { showErrorMessage(ex.Message); bindTable(null, DEFAULT_ROWS); //this.hidRecordCount.Value = "0"; } finally { hideWait(); } }