/// <summary> /// 批次过站作业。 /// </summary> /// <param name="obj">批次对象。</param> /// <param name="model">过站模型对象。</param> /// <returns>返回结果。</returns> private MethodReturnResult Track(Lot obj, LotTrackViewModel model) { string lotNumber = model.LotNumber.ToUpper(); MethodReturnResult result = new MethodReturnResult(); IDictionary <string, IList <TransactionParameter> > dicParams = new Dictionary <string, IList <TransactionParameter> >(); //获取工序参数列表。 IList <RouteStepParameter> lstRouteStepParameter = GetParameterList(obj.RouteName, obj.RouteStepName, obj.StateFlag); //组织批次附加参数。 if (lstRouteStepParameter != null) { foreach (RouteStepParameter item in lstRouteStepParameter) { string hashcode = string.Format("{0}{1}{2}", item.Key.RouteName, item.Key.RouteStepName, item.Key.ParameterName) .GetHashCode() .ToString() .Replace('-', '_'); string paramName = string.Format("PARAM_{0}", hashcode); string val = Request.Form[paramName]; //记录上一次值。 if (item.IsUsePreValue) { if (Request.Cookies.Get(paramName) != null) { Response.SetCookie(new HttpCookie(paramName, val)); } else if (!string.IsNullOrEmpty(val)) { Response.Cookies.Add(new HttpCookie(paramName, val)); } } if (string.IsNullOrEmpty(val)) { continue; } if (!dicParams.ContainsKey(obj.Key)) { dicParams.Add(obj.Key, new List <TransactionParameter>()); } if (item.DataType == EnumDataType.Boolean) { val = val == "on" ? "true" : "false"; } TransactionParameter tp = new TransactionParameter() { Index = item.ParamIndex, Name = item.Key.ParameterName, Value = val }; dicParams[obj.Key].Add(tp); } } //批次当前状态为等待进站。 if (obj.StateFlag == EnumLotState.WaitTrackIn) { TrackInParameter p = new TrackInParameter() { Creator = User.Identity.Name, EquipmentCode = model.EquipmentCode, LineCode = model.LineCode, LotNumbers = new List <string>(), OperateComputer = Request.UserHostAddress, Operator = User.Identity.Name, Paramters = dicParams, Remark = model.Description, RouteOperationName = model.RouteOperationName }; p.LotNumbers.Add(lotNumber); //进行批次进站。 using (LotTrackInServiceClient client = new LotTrackInServiceClient()) { result = client.TrackIn(p); if (result.Code == 0) { if (!string.IsNullOrEmpty(result.Message)) { if (!result.Message.EndsWith("\n")) { result.Message += "\n"; } result.Message = result.Message.Replace("\n", "<br/>"); } result.Message = string.Format("批次 {0} 进站成功。", lotNumber); } } } //批次当前状态为等待出站。 else if (obj.StateFlag == EnumLotState.WaitTrackOut) { TrackOutParameter p = new TrackOutParameter() { Creator = User.Identity.Name, LineCode = model.LineCode, LotNumbers = new List <string>(), OperateComputer = Request.UserHostAddress, Operator = User.Identity.Name, Paramters = dicParams, Remark = model.Description, RouteOperationName = model.RouteOperationName, EquipmentCode = model.EquipmentCode, Color = model.Color, Grade = model.Grade }; p.LotNumbers.Add(lotNumber); //进行不良数量记录 IList <ReasonCodeCategoryDetail> lstDefectReasonCodes = GetDefectReasonCodes(obj.RouteName, obj.RouteStepName); p.DefectReasonCodes = new Dictionary <string, IList <DefectReasonCodeParameter> >(); if (lstDefectReasonCodes != null && lstDefectReasonCodes.Count > 0) { foreach (ReasonCodeCategoryDetail item in lstDefectReasonCodes) { string hashcode = string.Format("{0}{1}", item.Key.ReasonCodeCategoryName, item.Key.ReasonCodeName) .GetHashCode() .ToString() .Replace('-', '_'); string inputControlName = string.Format("DefectReasonCode_{0}", hashcode); string val = Request.Form[inputControlName]; double dVal = 0; if (string.IsNullOrEmpty(val) || double.TryParse(val, out dVal) == false || dVal == 0) { continue; } if (!p.DefectReasonCodes.ContainsKey(obj.Key)) { p.DefectReasonCodes.Add(obj.Key, new List <DefectReasonCodeParameter>()); } DefectReasonCodeParameter drcp = new DefectReasonCodeParameter() { ReasonCodeCategoryName = item.Key.ReasonCodeCategoryName, ReasonCodeName = item.Key.ReasonCodeName, Quantity = dVal, Description = string.Empty, ResponsiblePerson = string.Empty, RouteOperationName = string.Empty }; p.DefectReasonCodes[obj.Key].Add(drcp); } } //进行报废数量记录 IList <ReasonCodeCategoryDetail> lstScrapReasonCodes = GetScrapReasonCodes(obj.RouteName, obj.RouteStepName); p.ScrapReasonCodes = new Dictionary <string, IList <ScrapReasonCodeParameter> >(); if (lstScrapReasonCodes != null && lstScrapReasonCodes.Count > 0) { foreach (ReasonCodeCategoryDetail item in lstScrapReasonCodes) { string hashcode = string.Format("{0}{1}", item.Key.ReasonCodeCategoryName, item.Key.ReasonCodeName) .GetHashCode() .ToString() .Replace('-', '_'); string inputControlName = string.Format("ScrapReasonCode_{0}", hashcode); string val = Request.Form[inputControlName]; double dVal = 0; if (string.IsNullOrEmpty(val) || double.TryParse(val, out dVal) == false || dVal == 0) { continue; } if (!p.ScrapReasonCodes.ContainsKey(obj.Key)) { p.ScrapReasonCodes.Add(obj.Key, new List <ScrapReasonCodeParameter>()); } ScrapReasonCodeParameter srcp = new ScrapReasonCodeParameter() { ReasonCodeCategoryName = item.Key.ReasonCodeCategoryName, ReasonCodeName = item.Key.ReasonCodeName, Quantity = dVal, Description = string.Empty, ResponsiblePerson = string.Empty, RouteOperationName = string.Empty }; p.ScrapReasonCodes[obj.Key].Add(srcp); } } //进行批次出站。 using (LotTrackOutServiceClient client = new LotTrackOutServiceClient()) { result = client.TrackOut(p); if (result.Code == 0) { if (!string.IsNullOrEmpty(result.Message)) { if (!result.Message.EndsWith("\n")) { result.Message += "\n"; } result.Message = result.Message.Replace("\n", "<br/>"); } result.Message += string.Format("批次 {0} 出站成功。", lotNumber); } } } else { result.Code = 100; result.Message = string.Format("批次 {0} 状态为({1}),不能进行工作站作业。" , lotNumber , obj.StateFlag.GetDisplayName()); } return(result); }
public ActionResult Save(LotDefectViewModel model) { MethodReturnResult result = new MethodReturnResult(); try { DefectParameter p = new DefectParameter() { Grade = model.Grade, Creator = User.Identity.Name, OperateComputer = Request.UserHostAddress, Operator = User.Identity.Name, ReasonCodes = new Dictionary <string, IList <DefectReasonCodeParameter> >(), Remark = model.Description, LotNumbers = new List <string>() }; //获取批值。 string lotNumber = model.LotNumber.ToUpper(); result = GetLot(lotNumber); if (result.Code > 0) { return(Json(result)); } p.LotNumbers.Add(lotNumber); //组织不良原因代码 if (!p.ReasonCodes.ContainsKey(lotNumber)) { p.ReasonCodes.Add(lotNumber, new List <DefectReasonCodeParameter>()); } List <DefectPOSParameter> lstDefectPos = new List <DefectPOSParameter>(); lstDefectPos.Clear(); if (model.Position != null) { for (int i = 0; i < model.Position.Count; i++) { DefectPOSParameter dPOS = new DefectPOSParameter(); dPOS.POS_X = model.Position[i].Split(':')[0]; dPOS.POS_Y = model.Position[i].Split(':')[1]; lstDefectPos.Add(dPOS); } } DefectReasonCodeParameter defectCodeParam = new DefectReasonCodeParameter() { Description = model.ReasonDescription, Quantity = model.DefectQuantity, ReasonCodeCategoryName = model.ReasonCodeCategoryName, ReasonCodeName = model.ReasonCodeName, ResponsiblePerson = model.ResponsiblePerson, RouteOperationName = model.RouteOperationName, ListDefectPOSParameter = lstDefectPos }; p.ReasonCodes[lotNumber].Add(defectCodeParam); //批次不良操作。 using (LotDefectServiceClient client = new LotDefectServiceClient()) { result = client.Defect(p); } if (result.Code == 0) { result.Message = string.Format("批次 {0} 不良操作成功。", model.LotNumber); } } catch (Exception ex) { result.Code = 1000; result.Message = ex.Message; result.Detail = ex.ToString(); } // 如果我们进行到这一步时某个地方出错,则重新显示表单 return(Json(result)); }