Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        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));
        }