public async Task <ActionResult> Query(LotPackageSEModulesViewModel model)
        {
            if (ModelState.IsValid)
            {
                using (PackageQueryServiceClient client = new PackageQueryServiceClient())
                {
                    await Task.Run(() =>
                    {
                        PagingConfig cfg = new PagingConfig()
                        {
                            OrderBy = "Key",
                            Where   = GetQueryCondition(model)
                        };
                        MethodReturnResult <IList <Package> > result = client.Get(ref cfg);

                        if (result.Code == 0)
                        {
                            ViewBag.PagingConfig = cfg;
                            ViewBag.List         = result.Data;
                        }
                    });
                }
            }
            if (Request.IsAjaxRequest())
            {
                return(PartialView("_ListPartial", new LotPackageSEModulesViewModel()));
            }
            else
            {
                return(View("Index", model));
            }
        }
Example #2
0
        /// <summary>
        /// 获取装箱信息。
        /// </summary>
        /// <param name="boxNo"></param>
        /// <returns></returns>
        public ActionResult GetBoxInfo(string boxNo)
        {
            double currentQuantity = 0;

            if (!string.IsNullOrEmpty(boxNo))
            {
                //获取当前数量
                using (PackageQueryServiceClient client = new PackageQueryServiceClient())
                {
                    MethodReturnResult <Package> rst2 = client.Get(boxNo);
                    if (rst2.Code == 1000)
                    {
                        return(Json(rst2));
                    }
                    if (rst2.Code <= 0 && rst2.Data != null && rst2.Data.PackageState == EnumPackageState.Packaging)
                    {
                        currentQuantity = rst2.Data.Quantity;
                    }
                }
            }

            return(Json(new{
                CurrentQuantity = currentQuantity
            }, JsonRequestBehavior.AllowGet));
        }
Example #3
0
        public MethodReturnResult GetPackage(string packageNo)
        {
            MethodReturnResult           result = new MethodReturnResult();
            MethodReturnResult <Package> rst    = null;
            Package obj = null;

            using (PackageQueryServiceClient client = new PackageQueryServiceClient())
            {
                rst = client.Get(packageNo);
                if (rst.Code <= 0 && rst.Data != null)
                {
                    obj = rst.Data;
                }
                else
                {
                    result.Code    = rst.Code;
                    result.Message = rst.Message;
                    result.Detail  = rst.Detail;
                    return(result);
                }
            }
            if (obj == null || obj.Quantity <= 0)
            {
                result.Code    = 2001;
                result.Message = string.Format("包装 {0} 不存在。", packageNo);
                return(result);
            }
            return(rst);
        }
Example #4
0
        public ActionResult QueryPackageNo(String packageNo)
        {
            if (!string.IsNullOrEmpty(packageNo))
            {
                using (PackageQueryServiceClient client = new PackageQueryServiceClient())
                {
                    MethodReturnResult <Package> result2 = client.Get(packageNo.Trim().ToUpper());
                    if (result2.Code == 0)
                    {
                        ViewBag.Package = result2.Data;
                    }
                    PagingConfig cfg = new PagingConfig()
                    {
                        IsPaging = false,
                        Where    = string.Format(@"Key.PackageNo='{0}'", packageNo.Trim().ToUpper()),
                        OrderBy  = "ItemNo"
                    };
                    MethodReturnResult <IList <PackageDetail> > result = client.GetDetail(ref cfg);

                    if (result.Code == 0)
                    {
                        ViewBag.PackageDetailList = result.Data;
                    }
                }
            }
            return(PartialView("_ListPackageQuery", new ZPVMLotPackageViewModel()));
        }
Example #5
0
 public Package GetPackage(string packageNo)
 {
     using (PackageQueryServiceClient client = new PackageQueryServiceClient())
     {
         MethodReturnResult <Package> result = client.Get(packageNo);
         return(result.Data);
     }
 }
Example #6
0
        public ActionResult UnPackage(string packageNo, int itemNo, string lotNumber)
        {

            MethodReturnResult result = new MethodReturnResult();
            //进行批次包装作业。
            PackageParameter p = new PackageParameter()
            {
                Creator = User.Identity.Name,             
                LotNumbers = new List<string>(),
                OperateComputer = Request.UserHostAddress,
                Operator = User.Identity.Name,
                PackageNo = packageNo.ToUpper(),
            };
            p.LotNumbers.Add(lotNumber.ToUpper());

            try
            {
                //获取包装记录
                using (PackageQueryServiceClient client = new PackageQueryServiceClient())
                {
                    MethodReturnResult<Package> rst1 = client.Get(packageNo);
                    if (rst1.Code > 0 || rst1.Data == null)
                    {
                        return Json(rst1);
                    }
                    //判断包装记录目前是否处于包装中状态。
                    //if (rst1.Data.PackageState != EnumPackageState.Packaging)
                    //{
                    //    result.Code = 1001;
                    //    result.Message = string.Format("包装{0}为非{1}状态,不能删除。"
                    //                                    , packageNo
                    //                                    , EnumPackageState.Packaging.GetDisplayName());
                    //    return Json(result);
                    //}
                }

                using (LotPackageServiceClient client = new LotPackageServiceClient())
                {
                    result = client.UnPackage(p);

                    if (result.Code == 0 )
                    {
                        result.Message = string.Format("拆包({1})成功。"
                                                       , p.PackageNo);
                    }
                 
                }
                return Json(result);
            }
            catch (Exception ex)
            {
                result.Code = 1000;
                result.Message = ex.Message;
                result.Detail = ex.ToString();
            }
            // 如果我们进行到这一步时某个地方出错,则重新显示表单
            return Json(result);
        }
Example #7
0
        public ActionResult Query(string packageNo)
        {
            //获取需要录入的批次号自定义特性
            IList <BaseAttribute> lstAttribute = new List <BaseAttribute>();

            using (BaseAttributeServiceClient client = new BaseAttributeServiceClient())
            {
                PagingConfig cfg = new PagingConfig()
                {
                    IsPaging = false,
                    Where    = string.Format("Key.CategoryName='{0}'", "LotPackageAttribute")
                };

                MethodReturnResult <IList <BaseAttribute> > result = client.Get(ref cfg);
                if (result.Code <= 0 && result.Data != null && result.Data.Count > 0)
                {
                    lstAttribute = result.Data;
                }
            }
            ViewBag.AttributeList = lstAttribute;

            if (!string.IsNullOrEmpty(packageNo))
            {
                using (PackageQueryServiceClient client = new PackageQueryServiceClient())
                {
                    PagingConfig cfg = new PagingConfig()
                    {
                        IsPaging = false,
                        OrderBy  = "ItemNo",
                        Where    = string.Format(@"Key.PackageNo='{0}' 
                                                AND EXISTS(FROM Package as p
                                                           WHERE p.Key=self.Key.PackageNo
                                                           AND ( PackageState='{1}'  or  PackageState='{2}')
                                                           AND PackageType='{3}')"
                                                 , packageNo.ToUpper()
                                                 , Convert.ToInt32(EnumPackageState.Packaging)
                                                 , Convert.ToInt32(EnumPackageState.Packaged)
                                                 , Convert.ToInt32(EnumPackageType.Packet))
                    };

                    MethodReturnResult <Package> result2 = client.Get(packageNo.ToUpper());
                    if (result2.Code == 0)
                    {
                        ViewBag.Package = result2.Data;
                    }

                    MethodReturnResult <IList <PackageDetail> > result = client.GetDetail(ref cfg);


                    if (result.Code == 0)
                    {
                        ViewBag.PackageDetailList = result.Data;
                    }
                }
            }
            return(PartialView("_ListPartial", new ZPVMLotViewModel()));
        }
Example #8
0
 public ActionResult TrackOutPackage(LotPackageViewModel model)
 {
     MethodReturnResult result = new MethodReturnResult();
     try
     {
         //如果包装号为空。
         if (string.IsNullOrEmpty(model.PackageNo))
         {
             result.Code = 1001;
             result.Message = string.Format("包装号不能为空。");
             return Json(result);
         }
         Package obj = null;
         //如果当前数量为空,获取当前数量
         using (PackageQueryServiceClient client = new PackageQueryServiceClient())
         {
             MethodReturnResult<Package> rst2 = client.Get(model.PackageNo);
             if (rst2.Code > 0)
             {
                 return Json(rst2);
             }
             //检查包装状态
             if (rst2.Data.PackageState != EnumPackageState.Packaged)
             {
                 result.Code = 1001;
                 result.Message = string.Format("包 {0} 非{1}状态,不能操作。"
                                                 , model.PackageNo.ToUpper()
                                                 , EnumPackageState.Packaged.GetDisplayName());
                 return Json(result);
             }
           
         }
      
         //result = Package(model);
         //返回包装结果。
         if (result.Code <= 0)
         {
             MethodReturnResult<LotPackageViewModel> rstFinal = new MethodReturnResult<LotPackageViewModel>()
             {
                 Code = result.Code,
                 Data = model,
                 Detail = result.Detail,
                 HelpLink = result.HelpLink,
                 Message = result.Message
             };
             return Json(rstFinal);
         }
     }
     catch (Exception ex)
     {
         result.Code = 1000;
         result.Message = ex.Message;
         result.Detail = ex.ToString();
     }
     // 如果我们进行到这一步时某个地方出错,则重新显示表单
     return Json(result);
 }
Example #9
0
        /// <summary>
        /// 获取包装信息。
        /// </summary>
        /// <param name="packageNo"></param>
        /// <returns></returns>
        public ActionResult GetPackageInfo(string packageNo)
        {
            double currentQuantity = 0;
            double fullQuantity = 25;
            string orderNumber = string.Empty;
            bool isLastestPackage = false;

            if (!string.IsNullOrEmpty(packageNo))
            {
                //获取当前数量
                using (PackageQueryServiceClient client = new PackageQueryServiceClient())
                {
                    MethodReturnResult<Package> rst2 = client.Get(packageNo);
                    if (rst2.Code == 1000)
                    {
                        return Json(rst2);
                    }
                    if (rst2.Code <= 0 && rst2.Data != null && rst2.Data.PackageState==EnumPackageState.Packaging)
                    {
                        currentQuantity = rst2.Data.Quantity;
                        orderNumber = rst2.Data.OrderNumber;
                        isLastestPackage = rst2.Data.IsLastPackage;
                    }
                }

                if (!string.IsNullOrEmpty(orderNumber))
                {
                    //获取满包数量
                    using (WorkOrderAttributeServiceClient client = new WorkOrderAttributeServiceClient())
                    {
                        MethodReturnResult<WorkOrderAttribute> rst1 = client.Get(new WorkOrderAttributeKey()
                        {
                            OrderNumber = orderNumber,
                            AttributeName = "FullPackageQuantity"
                        });
                        if (rst1.Code == 1000)
                        {
                            return Json(rst1);
                        }

                        if (rst1.Data != null
                            && !string.IsNullOrEmpty(rst1.Data.AttributeValue))
                        {
                            double.TryParse(rst1.Data.AttributeValue, out fullQuantity);
                        }
                    }
                }
            }

            return Json(new{ 
                              CurrentQuantity = currentQuantity,
                              FullQuantity = fullQuantity,
                              IsLastestPackage = isLastestPackage
                            }, JsonRequestBehavior.AllowGet);
            
        }
Example #10
0
        /// <summary>
        /// 获取包装信息。
        /// </summary>
        /// <param name="packageNo"></param>
        /// <returns></returns>
        public ActionResult GetPackageInfo(string packageNo)
        {
            double currentQuantity = 0;
            double fullPackageQty  = 0;
            string orderNumber     = string.Empty;
            string materialCode    = string.Empty;
            bool   isLatestPackage = false;
            int    nPackageState   = 0;

            if (!string.IsNullOrEmpty(packageNo))
            {
                //获取当前数量
                using (PackageQueryServiceClient client = new PackageQueryServiceClient())
                {
                    MethodReturnResult <Package> rst2 = client.Get(packageNo);
                    if (rst2.Code == 1000)
                    {
                        return(Json(rst2));
                    }
                    if (rst2.Code <= 0 && rst2.Data != null && rst2.Data.PackageState == EnumPackageState.Packaging)
                    {
                        currentQuantity = rst2.Data.Quantity;
                        orderNumber     = rst2.Data.OrderNumber;
                        materialCode    = rst2.Data.MaterialCode;
                        isLatestPackage = rst2.Data.IsLastPackage;
                        nPackageState   = Convert.ToInt32(rst2.Data.PackageState);
                    }
                }

                if (!string.IsNullOrEmpty(orderNumber))
                {
                    //获取满包数量
                    using (WorkOrderRuleServiceClient client = new WorkOrderRuleServiceClient())
                    {
                        MethodReturnResult <WorkOrderRule> rst1 = client.Get(new WorkOrderRuleKey()
                        {
                            OrderNumber  = orderNumber,
                            MaterialCode = materialCode
                        });
                        if (rst1.Code == 0 &&
                            rst1.Data != null)
                        {
                            fullPackageQty = rst1.Data.FullPackageQty;
                        }
                    }
                }
            }
            return(Json(new{
                CurrentQuantity = currentQuantity,
                FullPackageQty = fullPackageQty,
                IsLastestPackage = isLatestPackage,
                PackageState = nPackageState
            }, JsonRequestBehavior.AllowGet));
        }
Example #11
0
 //获取托数据
 public Package GetPackage(string PackageNo)
 {
     using (PackageQueryServiceClient client = new PackageQueryServiceClient())
     {
         MethodReturnResult <Package> result = client.Get(PackageNo);
         if (result.Code <= 0 && result.Data != null)
         {
             return(result.Data);
         }
     }
     return(null);
 }
Example #12
0
        public MethodReturnResult GetBox(BoxPrintViewModel model)
        {
            MethodReturnResult result = new MethodReturnResult();
            MethodReturnResult <IList <Package> > rst = null;
            IList <Package> lst = null;

            using (PackageQueryServiceClient client = new PackageQueryServiceClient())
            {
                PagingConfig cfg = new PagingConfig()
                {
                    IsPaging = false,
                    OrderBy  = "Key"
                };


                cfg.Where = string.Format("PackageType='{0}'", Convert.ToInt32(EnumPackageType.Box));

                if (!string.IsNullOrEmpty(model.BoxNo1) && !string.IsNullOrEmpty(model.BoxNo))
                {
                    cfg.Where += string.Format(" AND Key>='{0}' AND Key<='{1}'", model.BoxNo, model.BoxNo1);
                }
                else
                {
                    cfg.Where += string.Format(" AND Key='{0}'", model.BoxNo);
                }


                rst = client.Get(ref cfg);
                if (rst.Code <= 0 && rst.Data != null)
                {
                    lst = rst.Data;
                }
                else
                {
                    result.Code    = rst.Code;
                    result.Message = rst.Message;
                    result.Detail  = rst.Detail;
                    return(result);
                }
            }

            if (lst == null || lst.Count == 0)
            {
                result.Code = 2001;
                string message = string.Format("{0}-{1}", model.BoxNo, model.BoxNo1);
                result.Message = string.Format("电池箱数据 {0} 不存在。", message);
                return(result);
            }
            return(rst);
        }
Example #13
0
        // 获取托号信息
        private MethodReturnResult GetPackage(string packageNo)
        {
            MethodReturnResult           result = new MethodReturnResult();
            MethodReturnResult <Package> rst    = null;
            Package obj = null;

            using (PackageQueryServiceClient client = new PackageQueryServiceClient())
            {
                rst = client.Get(packageNo);
                if (rst.Code <= 0 && rst.Data != null)
                {
                    obj = rst.Data;
                }
                else
                {
                    result.Code    = rst.Code;
                    result.Message = rst.Message;
                    result.Detail  = rst.Detail;
                    return(result);
                }
            }
            if (obj == null)
            {
                result.Code    = 2001;
                result.Message = string.Format(@"包装号[{0}]不存在。", packageNo);
                return(result);
            }
            else if (obj.ContainerNo != null && obj.ContainerNo != "")
            {
                result.Code    = 2002;
                result.Message = string.Format("包装号[{0}]已入柜[{1}]。", packageNo, obj.ContainerNo);
                return(result);
            }
            //else if (obj.PackageState != EnumPackageState.ToWarehouse && obj.PackageState != EnumPackageState.Shipped)
            //{
            //    result.Code = 2003;
            //    result.Message = string.Format("包装号[{0}]未入库。", packageNo);
            //    return result;
            //}
            else if (obj.PackageState == EnumPackageState.Packaging ||
                     obj.PackageState == EnumPackageState.InFabStore ||
                     obj.PackageState == EnumPackageState.Shipped)
            {
                result.Code    = 2003;
                result.Message = string.Format("包装号[{0}]当前状态[{1}],不可入柜!", packageNo, obj.PackageState.GetDisplayName());
                return(result);
            }
            return(rst);
        }
Example #14
0
        private MethodReturnResult GetPackage(string packageNo)
        {
            //如果本次请求有成功获取到电池小包对象,直接返回。
            if (ViewBag.Package != null)
            {
                return(ViewBag.Package);
            }

            MethodReturnResult           result = new MethodReturnResult();
            MethodReturnResult <Package> rst    = null;
            Package obj = null;

            using (PackageQueryServiceClient client = new PackageQueryServiceClient())
            {
                rst = client.Get(packageNo);
                if (rst.Code <= 0 && rst.Data != null)
                {
                    obj             = rst.Data;
                    ViewBag.Package = rst;
                }
                else
                {
                    result.Code    = rst.Code;
                    result.Message = rst.Message;
                    result.Detail  = rst.Detail;
                    return(result);
                }
            }
            if (obj == null)
            {
                result.Code    = 2001;
                result.Message = string.Format("电池小包 {0} 不存在。", packageNo);
                return(result);
            }
            else if (obj.PackageState == EnumPackageState.Packaged)
            {
                result.Code    = 2002;
                result.Message = string.Format("电池小包 {0} 已装箱。", packageNo);
                return(result);
            }
            return(rst);
        }
Example #15
0
 public ActionResult SaveModify(PackageNoAddDesViewModel model)
 {
     using (PackageQueryServiceClient client = new PackageQueryServiceClient())
     {
         MethodReturnResult <Package> result = client.Get(model.PackageNo);
         if (result.Code == 0)
         {
             result.Data.Description = model.Description;
             MethodReturnResult rst = client.UpdateAdd(result.Data, model.Action);
             if (rst.Code == 0)
             {
                 rst.Message = string.Format("包装号{0}添加描述成功"
                                             , result.Data.Key);
             }
             return(Json(rst));
         }
         else
         {
             result.Message = string.Format("包装号{0}不存在于当前库,已归档", model.PackageNo);
             return(Json(result));
         }
     }
 }
        public async Task <ActionResult> PagingQuery(string where, string orderBy, int?currentPageNo, int?currentPageSize)
        {
            if (ModelState.IsValid)
            {
                int pageNo   = currentPageNo ?? 0;
                int pageSize = currentPageSize ?? 20;
                if (Request["PageNo"] != null)
                {
                    pageNo = Convert.ToInt32(Request["PageNo"]);
                }
                if (Request["PageSize"] != null)
                {
                    pageSize = Convert.ToInt32(Request["PageSize"]);
                }

                using (PackageQueryServiceClient client = new PackageQueryServiceClient())
                {
                    await Task.Run(() =>
                    {
                        PagingConfig cfg = new PagingConfig()
                        {
                            PageNo   = pageNo,
                            PageSize = pageSize,
                            Where    = where ?? string.Empty,
                            OrderBy  = orderBy ?? string.Empty
                        };
                        MethodReturnResult <IList <Package> > result = client.Get(ref cfg);
                        if (result.Code == 0)
                        {
                            ViewBag.PagingConfig = cfg;
                            ViewBag.List         = result.Data;
                        }
                    });
                }
            }
            return(PartialView("_ListPartial", new LotPackageSEModulesViewModel()));
        }
        public string GetQueryCondition(LotPackageSEModulesViewModel model)
        {
            StringBuilder where = new StringBuilder();
            where.AppendFormat(" Quantity > 0");
            if (model != null)
            {
                if (!string.IsNullOrEmpty(model.PackageNo) && !string.IsNullOrEmpty(model.PackageNo1))
                {
                    where.AppendFormat(" {0} Key >= '{1}' AND Key<='{2}'"
                                       , where.Length > 0 ? "AND" : string.Empty
                                       , model.PackageNo
                                       , model.PackageNo1);
                }
                else if (!string.IsNullOrEmpty(model.PackageNo))
                {
                    char []  splitChars = new char[] { ',', '$' };
                    string[] packageNos = model.PackageNo.TrimEnd(splitChars).Split(splitChars);

                    #region 界面托号包含归档,则归档托号提取
                    if (packageNos.Length >= 1)
                    {
                        //若托号不存在当前库,提取归档托号数据
                        foreach (string item in packageNos)
                        {
                            Package package = null;
                            using (PackageQueryServiceClient clientOfPackage = new PackageQueryServiceClient())
                            {
                                if (clientOfPackage.Get(item.Trim().ToUpper()) != null && clientOfPackage.Get(item.Trim().ToUpper()).Data != null)
                                {
                                    package = clientOfPackage.Get(item.Trim().ToUpper()).Data;
                                }
                            }
                            if (package == null)
                            {
                                MethodReturnResult resultOfRePackage = new MethodReturnResult();
                                //若存在归档,则提取
                                using (PackageInChestServiceClient packageInChestServiceClient = new PackageInChestServiceClient())
                                {
                                    //返回已归档的(WIP_PACKAGE表)数据
                                    REbackdataParameter pre = new REbackdataParameter();
                                    pre.PackageNo     = item;
                                    pre.ErrorMsg      = "";
                                    pre.ReType        = 1;
                                    pre.IsDelete      = 0;
                                    resultOfRePackage = packageInChestServiceClient.GetREbackdata(pre);

                                    if (resultOfRePackage.Code > 0)
                                    {
                                    }
                                    else
                                    {
                                        //提取其他归档表数据到当前库,并删除从归档库
                                        pre               = new REbackdataParameter();
                                        pre.PackageNo     = item;
                                        pre.ReType        = 2;
                                        pre.IsDelete      = 1;
                                        resultOfRePackage = packageInChestServiceClient.GetREbackdata(pre);
                                    }
                                }
                            }
                        }
                    }
                    #endregion

                    if (packageNos.Length <= 1)
                    {
                        where.AppendFormat(" {0} Key = '{1}'"
                                           , where.Length > 0 ? "AND" : string.Empty
                                           , packageNos[0]);
                    }
                    else
                    {
                        where.AppendFormat(" {0} Key IN ("
                                           , where.Length > 0 ? "AND" : string.Empty);

                        foreach (string package in packageNos)
                        {
                            where.AppendFormat("'{0}',", package);
                        }
                        where.Remove(where.Length - 1, 1);
                        where.Append(")");
                    }
                }


                if (!string.IsNullOrEmpty(model.OrderNumber))
                {
                    where.AppendFormat(" {0} OrderNumber LIKE '{1}%'"
                                       , where.Length > 0 ? "AND" : string.Empty
                                       , model.OrderNumber);
                }

                if (model.StartCreateTime != null)
                {
                    where.AppendFormat(" {0} CreateTime >= '{1:yyyy-MM-dd HH:mm:ss}'"
                                       , where.Length > 0 ? "AND" : string.Empty
                                       , model.StartCreateTime);
                }

                if (model.EndCreateTime != null)
                {
                    where.AppendFormat(" {0} CreateTime <= '{1:yyyy-MM-dd HH:mm:ss}'"
                                       , where.Length > 0 ? "AND" : string.Empty
                                       , model.EndCreateTime);
                }
            }
            return(where.ToString());
        }
Example #18
0
        public ActionResult Save(LotPackageViewModel model)
        {
            MethodReturnResult result = new MethodReturnResult();

            try
            {
                //获取批次数据。
                string lotNumber = model.LotNumber.ToUpper();
                result = GetLot(lotNumber);
                if (result.Code > 0)
                {
                    return(Json(result));
                }
                MethodReturnResult <Lot> rst = result as MethodReturnResult <Lot>;
                Lot obj = rst.Data;

                //如果包装号为空。生成包装号。
                if (string.IsNullOrEmpty(model.PackageNo))
                {
                    using (LotPackageServiceClient client = new LotPackageServiceClient())
                    {
                        MethodReturnResult <string> rst1 = client.Generate(model.LotNumber, model.IsLastestPackage);
                        if (rst1.Code > 0)
                        {
                            return(Json(rst1));
                        }
                        else
                        {
                            model.PackageNo = rst1.Data;
                        }
                    }
                }
                //重新获取当前数量。
                using (PackageQueryServiceClient client = new PackageQueryServiceClient())
                {
                    MethodReturnResult <Package> rst2 = client.Get(model.PackageNo);
                    if (rst2.Code == 1000)
                    {
                        return(Json(rst2));
                    }
                    //检查包装状态
                    if (rst2.Data != null && rst2.Data.PackageState != EnumPackageState.Packaging)
                    {
                        result.Code    = 1001;
                        result.Message = string.Format("包 {0} 非 [{1}] 状态,不能包装。"
                                                       , model.PackageNo.ToUpper()
                                                       , EnumPackageState.Packaging.GetDisplayName());
                        return(Json(result));
                    }
                    //设置当前数量。
                    if (rst2.Code <= 0 && rst2.Data != null)
                    {
                        model.CurrentQuantity = rst2.Data.Quantity;
                    }
                }
                //如果满包数量为空,获取满包数量
                if (model.FullQuantity == 0)
                {
                    using (WorkOrderAttributeServiceClient client = new WorkOrderAttributeServiceClient())
                    {
                        MethodReturnResult <WorkOrderAttribute> rst1 = client.Get(new WorkOrderAttributeKey()
                        {
                            OrderNumber   = obj.OrderNumber,
                            AttributeName = "FullPackageQuantity"
                        });
                        double fullQuantity = 25;
                        if (rst1.Code == 1000)
                        {
                            return(Json(rst1));
                        }

                        if (rst1.Data != null &&
                            !string.IsNullOrEmpty(rst1.Data.AttributeValue))
                        {
                            double.TryParse(rst1.Data.AttributeValue, out fullQuantity);
                        }
                        model.FullQuantity = fullQuantity;
                    }
                }


                double newCurrentQuantity = model.CurrentQuantity + obj.Quantity;
                //当前数量超过满包数量,不能继续包装。
                if (newCurrentQuantity > model.FullQuantity)
                {
                    result.Code    = 1;
                    result.Message = string.Format("包({0}) 当前数量({1})加上批次({2})数量({3}),超过满包数量。"
                                                   , model.PackageNo.ToUpper()
                                                   , model.CurrentQuantity
                                                   , obj.Key
                                                   , obj.Quantity);
                    return(Json(result));
                }
                model.CurrentQuantity = newCurrentQuantity;

                //判断批次工序是否在当前工序。
                if (obj.RouteStepName != model.RouteOperationName)
                {
                    result.Code    = 2;
                    result.Message = string.Format("批次({0})当前所在工序({1}),不能在({2})工序上操作。"
                                                   , obj.Key
                                                   , obj.RouteStepName
                                                   , model.RouteOperationName);
                    return(Json(result));
                }
                //判断批次所在车间和当前线所在车间是否匹配。
                //获取线别车间。
                string locationName = string.Empty;
                using (ProductionLineServiceClient client = new ProductionLineServiceClient())
                {
                    MethodReturnResult <ProductionLine> r = client.Get(model.LineCode);
                    if (r.Code <= 0)
                    {
                        locationName = r.Data.LocationName;
                    }
                }
                if (!string.IsNullOrEmpty(locationName))
                {
                    using (LocationServiceClient client = new LocationServiceClient())
                    {
                        MethodReturnResult <Location> r = client.Get(locationName);
                        if (r.Code <= 0)
                        {
                            locationName = r.Data.ParentLocationName;
                        }
                    }
                }
                //检查批次车间和线别车间是否匹配。
                if (obj.LocationName != locationName)
                {
                    result.Code    = 3;
                    result.Message = string.Format("批次({0})属于({1})车间,不能在({2})车间线别上操作。"
                                                   , lotNumber.ToUpper()
                                                   , obj.LocationName
                                                   , locationName);
                    return(Json(result));
                }
                result = Package(model);
                //返回包装结果。
                if (result.Code <= 0)
                {
                    MethodReturnResult <LotPackageViewModel> rstFinal = new MethodReturnResult <LotPackageViewModel>()
                    {
                        Code     = result.Code,
                        Data     = model,
                        Detail   = result.Detail,
                        HelpLink = result.HelpLink,
                        Message  = result.Message
                    };
                    return(Json(rstFinal));
                }
            }
            catch (Exception ex)
            {
                result.Code    = 1000;
                result.Message = ex.Message;
                result.Detail  = ex.ToString();
            }
            // 如果我们进行到这一步时某个地方出错,则重新显示表单
            return(Json(result));
        }
Example #19
0
        public ActionResult Delete(string packageNo, int itemNo, string lotNumber)
        {
            MethodReturnResult result = new MethodReturnResult();

            try
            {
                //获取包装记录
                using (PackageQueryServiceClient client = new PackageQueryServiceClient())
                {
                    MethodReturnResult <Package> rst1 = client.Get(packageNo);
                    if (rst1.Code > 0 || rst1.Data == null)
                    {
                        return(Json(rst1));
                    }
                    //判断包装记录目前是否处于包装中状态。
                    if (rst1.Data.PackageState != EnumPackageState.Packaging)
                    {
                        result.Code    = 1001;
                        result.Message = string.Format("包装{0}为非{1}状态,不能删除。"
                                                       , packageNo
                                                       , EnumPackageState.Packaging.GetDisplayName());
                        return(Json(result));
                    }
                }
                //获取最后一笔包装记录。
                IList <string> lstTransactionKey = new List <string>();
                using (LotQueryServiceClient client = new LotQueryServiceClient())
                {
                    PagingConfig cfg = new PagingConfig()
                    {
                        IsPaging = false,
                        Where    = string.Format("LotNumber='{0}' AND UndoFlag=0"
                                                 , lotNumber)
                    };

                    MethodReturnResult <IList <LotTransaction> > rst1 = client.GetTransaction(ref cfg);
                    if (rst1.Code <= 0 && rst1.Data != null)
                    {
                        var lnq = from item in rst1.Data
                                  orderby item.CreateTime descending
                                  select item;
                        foreach (LotTransaction item in lnq)
                        {
                            lstTransactionKey.Add(item.Key);
                            if (item.Activity == EnumLotActivity.Package)
                            {
                                break;
                            }
                        }
                    }
                    else
                    {
                        return(Json(rst1));
                    }
                }
                //可撤销操作主键不为空。
                if (lstTransactionKey.Count > 0)
                {
                    UndoParameter p = new UndoParameter()
                    {
                        Creator             = User.Identity.Name,
                        LotNumbers          = new List <string>(),
                        OperateComputer     = Request.UserHostAddress,
                        Operator            = User.Identity.Name,
                        UndoTransactionKeys = new Dictionary <string, IList <string> >()
                    };

                    p.LotNumbers.Add(lotNumber);
                    p.UndoTransactionKeys.Add(lotNumber, lstTransactionKey);

                    using (LotUndoServiceClient client = new LotUndoServiceClient())
                    {
                        result = client.Undo(p);
                        if (result.Code == 0)
                        {
                            result.Message = string.Format("删除 ({0}:{1}:{2}) 成功。"
                                                           , packageNo, itemNo, lotNumber);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                result.Code    = 1000;
                result.Message = ex.Message;
                result.Detail  = ex.ToString();
            }
            // 如果我们进行到这一步时某个地方出错,则重新显示表单
            return(Json(result));
        }
Example #20
0
        public ActionResult Finish(LotPackageViewModel model)
        {
            MethodReturnResult result = new MethodReturnResult();

            try
            {
                //如果包装号为空。
                if (string.IsNullOrEmpty(model.PackageNo))
                {
                    result.Code    = 1001;
                    result.Message = string.Format("包装号不能为空。");
                    return(Json(result));
                }
                Package obj = null;
                //如果当前数量为空,获取当前数量
                using (PackageQueryServiceClient client = new PackageQueryServiceClient())
                {
                    MethodReturnResult <Package> rst2 = client.Get(model.PackageNo);
                    if (rst2.Code > 0)
                    {
                        return(Json(rst2));
                    }
                    //检查包装状态
                    if (rst2.Data.PackageState != EnumPackageState.Packaging)
                    {
                        result.Code    = 1001;
                        result.Message = string.Format("包 {0} 非{1}状态,不能操作。"
                                                       , model.PackageNo.ToUpper()
                                                       , EnumPackageState.Packaging.GetDisplayName());
                        return(Json(result));
                    }
                    //设置当前数量。
                    if (rst2.Code <= 0 && rst2.Data != null)
                    {
                        obj = rst2.Data;
                        model.CurrentQuantity = rst2.Data.Quantity;
                    }
                }
                //如果满包数量为空,获取满包数量
                if (model.FullQuantity == 0)
                {
                    using (WorkOrderAttributeServiceClient client = new WorkOrderAttributeServiceClient())
                    {
                        MethodReturnResult <WorkOrderAttribute> rst1 = client.Get(new WorkOrderAttributeKey()
                        {
                            OrderNumber   = obj.OrderNumber,
                            AttributeName = "FullPackageQuantity"
                        });
                        double fullQuantity = 25;
                        if (rst1.Code == 1000)
                        {
                            return(Json(rst1));
                        }

                        if (rst1.Data != null &&
                            !string.IsNullOrEmpty(rst1.Data.AttributeValue))
                        {
                            double.TryParse(rst1.Data.AttributeValue, out fullQuantity);
                        }
                        model.FullQuantity = fullQuantity;
                    }
                }
                //非尾包,不能完成包装并过站
                if (model.IsFinishPackage == true &&
                    model.IsLastestPackage == false &&
                    model.CurrentQuantity != model.FullQuantity)
                {
                    result.Code    = 1;
                    result.Message = string.Format("包({0})非尾包,包装数量未达到满包数量,不能完成包装。"
                                                   , model.PackageNo);
                    return(Json(result));
                }
                //判断批次所在车间和当前线所在车间是否匹配。
                //获取线别车间。
                string locationName = string.Empty;
                using (ProductionLineServiceClient client = new ProductionLineServiceClient())
                {
                    MethodReturnResult <ProductionLine> r = client.Get(model.LineCode);
                    if (r.Code <= 0)
                    {
                        locationName = r.Data.LocationName;
                    }
                }
                if (!string.IsNullOrEmpty(locationName))
                {
                    using (LocationServiceClient client = new LocationServiceClient())
                    {
                        MethodReturnResult <Location> r = client.Get(locationName);
                        if (r.Code <= 0)
                        {
                            locationName = r.Data.ParentLocationName;
                        }
                    }
                }
                //获取包装号所在车间。
                string currentLocationName = string.Empty;
                using (WorkOrderServiceClient client = new WorkOrderServiceClient())
                {
                    MethodReturnResult <WorkOrder> rst1 = client.Get(obj.OrderNumber);
                    if (rst1.Code <= 0 && rst1.Data != null)
                    {
                        currentLocationName = rst1.Data.LocationName;
                    }
                }
                //检查包所在车间和线别车间是否匹配。
                if (currentLocationName != locationName)
                {
                    result.Code    = 3;
                    result.Message = string.Format("包({0})属于({1})车间,不能在({2})车间线别上操作。"
                                                   , obj.Key
                                                   , currentLocationName
                                                   , locationName);
                    return(Json(result));
                }
                result = Package(model);
                //返回包装结果。
                if (result.Code <= 0)
                {
                    MethodReturnResult <LotPackageViewModel> rstFinal = new MethodReturnResult <LotPackageViewModel>()
                    {
                        Code     = result.Code,
                        Data     = model,
                        Detail   = result.Detail,
                        HelpLink = result.HelpLink,
                        Message  = result.Message
                    };
                    return(Json(rstFinal));
                }
            }
            catch (Exception ex)
            {
                result.Code    = 1000;
                result.Message = ex.Message;
                result.Detail  = ex.ToString();
            }
            // 如果我们进行到这一步时某个地方出错,则重新显示表单
            return(Json(result));
        }
Example #21
0
        public ActionResult UnCheck(string chestNo, string packageNo)
        {
            MethodReturnResult result = new MethodReturnResult();

            try
            {
                using (PackageQueryServiceClient client = new PackageQueryServiceClient())
                {
                    //判断托号是否已检验
                    MethodReturnResult <Package> rst1 = client.Get(packageNo);
                    if (rst1.Code > 0)
                    {
                        return(Json(rst1));
                    }
                    else
                    {
                        if (rst1.Data.PackageState != EnumPackageState.Checked)
                        {
                            result.Code    = 2000;
                            result.Message = string.Format(@"托号{0}未检验", packageNo);
                        }
                        else
                        {
                            using (PackageInChestServiceClient clientOfChest = new PackageInChestServiceClient())
                            {
                                result = clientOfChest.UnCheckPackageInChest(packageNo, chestNo, User.Identity.Name);
                                if (result.Code > 0)
                                {
                                    return(Json(result));
                                }
                            }
                        }
                    }
                }
                ChestViewModel model = new ChestViewModel()
                {
                    PackageNo = packageNo,
                    ChestNo   = chestNo
                };

                //返回包装结果。
                if (result.Code <= 0)
                {
                    MethodReturnResult <ChestViewModel> rstFinal = new MethodReturnResult <ChestViewModel>()
                    {
                        Code     = result.Code,
                        Data     = model,
                        Detail   = result.Detail,
                        HelpLink = result.HelpLink,
                        Message  = result.Message,
                        ObjectNo = ((EnumChestState)Convert.ToInt32(result.ObjectNo)).GetDisplayName()
                    };
                    return(Json(rstFinal));
                }
            }
            catch (Exception ex)
            {
                result.Code    = 1000;
                result.Message = ex.Message;
                result.Detail  = ex.ToString();
            }
            // 如果我们进行到这一步时某个地方出错,则重新显示表单
            return(Json(result));
        }
Example #22
0
        public ActionResult Check(ChestViewModel model)
        {
            MethodReturnResult result = new MethodReturnResult();

            if (model.PackageNo == null || model.PackageNo == "")
            {
                result.Code    = 1001;
                result.Message = string.Format("托号不可为空。");
                return(Json(result));
            }
            else
            {
                model.PackageNo = model.PackageNo.ToUpper().Trim();
            }
            try
            {
                using (PackageQueryServiceClient client = new PackageQueryServiceClient())
                {
                    //判断托号是否已检验
                    MethodReturnResult <Package> rst1 = client.Get(model.PackageNo);
                    if (rst1.Code > 0)
                    {
                        rst1.Message += string.Format(@"或托号{0}已归档", model.PackageNo);
                        return(Json(rst1));
                    }
                    else
                    {
                        if (rst1.Data != null)
                        {
                            #region 明细检验
                            if (rst1.Data.PackageState != EnumPackageState.Checked)
                            {
                                using (PackageInChestServiceClient clientOfChest = new PackageInChestServiceClient())
                                {
                                    result = clientOfChest.CheckPackageInChest(model.PackageNo, model.ChestNo, User.Identity.Name);
                                    if (result.Code <= 0)
                                    {
                                        result.Message = string.Format(@"托号{0}检验成功", model.PackageNo);
                                        model.ChestNo  = result.Detail;
                                    }
                                }
                            }
                            else
                            {
                                using (PackageInChestServiceClient clientOfChest = new PackageInChestServiceClient())
                                {
                                    MethodReturnResult <Chest> rst2 = clientOfChest.Get(rst1.Data.ContainerNo);
                                    if (rst2.Code > 0)
                                    {
                                        return(Json(rst2));
                                    }
                                    if (rst2.Code <= 0 && rst2.Data != null)
                                    {
                                        model.ChestNo   = rst2.Data.Key;
                                        result.Message  = string.Format(@"托号{0}已检验过,并检验成功", model.PackageNo);
                                        result.Detail   = rst2.Data.Key;
                                        result.ObjectNo = Convert.ToInt32(rst2.Data.ChestState).ToString();
                                    }
                                }
                            }
                            #endregion
                        }
                    }
                }
                //返回包装结果。
                if (result.Code <= 0)
                {
                    MethodReturnResult <ChestViewModel> rstFinal = new MethodReturnResult <ChestViewModel>()
                    {
                        Code     = result.Code,
                        Data     = model,
                        Detail   = result.Detail,
                        HelpLink = result.HelpLink,
                        Message  = result.Message,
                        ObjectNo = ((EnumChestState)Convert.ToInt32(result.ObjectNo)).GetDisplayName()
                    };
                    return(Json(rstFinal));
                }
            }
            catch (Exception ex)
            {
                result.Code    = 1000;
                result.Message = ex.Message;
                result.Detail  = ex.ToString();
            }
            // 如果我们进行到这一步时某个地方出错,则重新显示表单
            return(Json(result));
        }
Example #23
0
        public ActionResult Save(ChestViewModel model)
        {
            MethodReturnResult result = new MethodReturnResult();

            //Package obj = null;
            if (model.PackageNo == null || model.PackageNo == "")
            {
                result.Code    = 1001;
                result.Message = string.Format("托号不可为空。");
                return(Json(result));
            }
            else
            {
                model.PackageNo = model.PackageNo.ToUpper().Trim();
            }
            try
            {
                using (PackageInChestServiceClient client = new PackageInChestServiceClient())
                {
                    //取得最佳柜号
                    MethodReturnResult <string> rst1 = client.GetChestNo(model.PackageNo.ToUpper().Trim(), model.ChestNo, model.IsLastestPackageInChest, model.IsManual);
                    if (rst1.Code > 0)
                    {
                        return(Json(rst1));
                    }
                    else
                    {
                        model.ChestNo = rst1.Data;
                    }
                }
                MethodReturnResult <Chest> rst2 = null;
                //重新获取当前数量。
                using (PackageInChestServiceClient client = new PackageInChestServiceClient())
                {
                    rst2 = client.Get(model.ChestNo);
                    if (rst2.Code == 1000)
                    {
                        return(Json(rst2));
                    }
                    //检查柜状态
                    if (rst2.Data != null && rst2.Data.ChestState != EnumChestState.Packaging && rst2.Data.ChestState != EnumChestState.InFabStore)
                    {
                        result.Code    = 1001;
                        result.Message = string.Format("柜 {0} 非 [{1}或{2}] 状态,不能入柜。"
                                                       , model.ChestNo.ToUpper()
                                                       , EnumChestState.Packaging.GetDisplayName()
                                                       , EnumChestState.InFabStore.GetDisplayName());
                        return(Json(result));
                    }
                    //设置满柜数量。
                    if (rst2.Code <= 0 && rst2.Data != null)
                    {
                        model.CurrentQuantity = rst2.Data.Quantity;
                    }
                    MethodReturnResult <Package> rstOfPackage = null;

                    using (PackageQueryServiceClient clientOfPackage = new PackageQueryServiceClient())
                    {
                        rstOfPackage = clientOfPackage.Get(model.PackageNo.ToUpper().Trim());
                    }
                    using (MaterialChestParameterServiceClient client1 = new MaterialChestParameterServiceClient())
                    {
                        MethodReturnResult <MaterialChestParameter> rst3 = client1.Get(rstOfPackage.Data.MaterialCode);
                        if (rst3.Data != null)
                        {
                            model.FullQuantity = rst3.Data.FullChestQty;
                        }
                        else
                        {
                            return(Json(rst3));
                        }
                    }
                }

                //如果满柜数量为空,提示
                if (model.FullQuantity == 0)
                {
                    result.Code    = 1001;
                    result.Message = string.Format("托号内产品编码【{0}】设置的满柜数量为0,请联系成柜规则设定人员修改。", rst2.Data.MaterialCode);
                    return(Json(result));
                }

                double newCurrentQuantity = model.CurrentQuantity + 1;
                //当前数量超过满柜数量,不能继续入柜。
                if (newCurrentQuantity > model.FullQuantity)
                {
                    result.Code    = 1;
                    result.Message = string.Format("柜({0}) 当前数量({1})加上该托号({2})数量({3}),超过满柜数量。"
                                                   , model.ChestNo.ToUpper()
                                                   , model.CurrentQuantity
                                                   , model.PackageNo.ToUpper().Trim()
                                                   , 1);
                    return(Json(result));
                }
                model.CurrentQuantity = newCurrentQuantity;
                result = Chest(model);
                //返回成柜结果。
                if (result.Code <= 0)
                {
                    model.StoreLocation = result.Detail.Split('-')[1];
                    MethodReturnResult <ChestViewModel> rstFinal = new MethodReturnResult <ChestViewModel>()
                    {
                        Code     = result.Code,
                        Data     = model,
                        Detail   = result.Detail,
                        HelpLink = result.HelpLink,
                        Message  = result.Message
                    };
                    return(Json(rstFinal));
                }
            }
            catch (Exception ex)
            {
                result.Code    = 1000;
                result.Message = ex.Message;
                result.Detail  = ex.ToString();
            }
            // 如果我们进行到这一步时某个地方出错,则重新显示表单
            return(Json(result));
        }
Example #24
0
        private MethodReturnResult PrintPrivate(BoxViewModel model)
        {
            MethodReturnResult result = new MethodReturnResult();

            //不需要进行标签打印。
            if (model.PrintQty <= 0 ||
                string.IsNullOrEmpty(model.PrinterName) ||
                string.IsNullOrEmpty(model.PrintLabelCode))
            {
                return(result);
            }
            //获取打印机名称
            ClientConfig printer = null;

            using (ClientConfigServiceClient client = new ClientConfigServiceClient())
            {
                MethodReturnResult <ClientConfig> rst = client.Get(model.PrinterName);
                if (rst.Code > 0)
                {
                    return(rst);
                }
                printer = rst.Data;
            }
            //获取打印条码内容
            PrintLabel label = null;

            using (PrintLabelServiceClient client = new PrintLabelServiceClient())
            {
                MethodReturnResult <PrintLabel> rst = client.Get(model.PrintLabelCode);
                if (rst.Code > 0)
                {
                    return(rst);
                }
                label = rst.Data;
            }
            //获取箱数据
            Package box = new Package();

            using (PackageQueryServiceClient client = new PackageQueryServiceClient())
            {
                MethodReturnResult <Package> rst = client.Get(model.BoxNo);
                if (rst.Code <= 0 && rst.Data != null)
                {
                    box = rst.Data;
                }
                else
                {
                    result = rst;
                    if (result.Code == 1002)
                    {
                        result.Message = string.Format("箱 {0} 数据不存在。", model.BoxNo);
                    }
                    return(result);
                }
            }
            if (box.Quantity <= 0)
            {
                result.Code    = 2001;
                result.Message = string.Format("箱 {0} 中数量为零,请确认。", model.BoxNo);
                return(result);
            }
            //获取箱第一包的数据
            string      packageNo = string.Empty;
            PackageInfo obj       = new PackageInfo();

            using (PackageQueryServiceClient client = new PackageQueryServiceClient())
            {
                PagingConfig cfg = new PagingConfig()
                {
                    PageNo   = 0,
                    PageSize = 1,
                    Where    = string.Format("Key.PackageNo='{0}' AND Key.ObjectType='{1}'"
                                             , model.BoxNo
                                             , Convert.ToInt32(EnumPackageObjectType.Packet)),
                    OrderBy = "ItemNo"
                };
                MethodReturnResult <IList <PackageDetail> > rst = client.GetDetail(ref cfg);
                if (rst.Code <= 0 && rst.Data != null && rst.Data.Count > 0)
                {
                    packageNo = rst.Data[0].Key.ObjectNumber;
                }
            }
            if (!string.IsNullOrEmpty(packageNo))
            {
                using (PackageInfoServiceClient client = new PackageInfoServiceClient())
                {
                    MethodReturnResult <PackageInfo> rst = client.Get(packageNo);
                    if (rst.Code <= 0 && rst.Data != null)
                    {
                        obj = rst.Data;
                    }
                    else
                    {
                        result = rst;
                        return(result);
                    }
                }
            }
            //根据打印数量设置打印机模板。
            using (IPrintHelper helper = PrintHelperFactory.CreatePrintHelper(label.Content))
            {
                //打印动态内容。
                dynamic d = new ExpandoObject();
                d.CartonNo = model.BoxNo.ToUpper();
                d.Color    = obj.Color;
                d.Date     = box.CreateTime.Value.ToString("yyyy.MM.dd");
                d.Eff      = obj.EfficiencyName;
                d.Grade    = obj.Grade;
                d.PartNo   = obj.ConfigCode;
                d.PNType   = obj.PNType;
                d.ProdID   = obj.ProductId;
                d.Qty      = string.Format("{0}PCS", box.Quantity);
                d.PrintQty = model.PrintQty;
                bool bSuccess = false;
                //根据打印机类型,调用不同的打印方法。
                if (printer.ClientType == EnumClientType.NetworkPrinter)
                {
                    string[] vals = printer.IPAddress.Split(':');
                    string   port = "9100";
                    if (vals.Length > 1)
                    {
                        port = vals[1];
                    }
                    bSuccess = helper.NetworkPrint(vals[0], port, label.Content, d);
                }
                else if (printer.ClientType == EnumClientType.RawPrinter)
                {
                    bSuccess = helper.RAWPrint(printer.IPAddress, label.Content, d);
                }
                else
                {
                    result.Code    = 1001;
                    result.Message = "打印失败,打印机类型不正确。";
                    return(result);
                }
                //返回打印结果。
                if (bSuccess == false)
                {
                    result.Code    = 1001;
                    result.Message = "箱标签打印失败。";
                    return(result);
                }
            }
            return(result);
        }
Example #25
0
        public ActionResult Save(BoxViewModel model)
        {
            MethodReturnResult result = new MethodReturnResult();

            try
            {
                if (!string.IsNullOrEmpty(model.PackageNo))
                {
                    model.PackageNo = model.PackageNo.Trim().ToUpper();
                }
                if (!string.IsNullOrEmpty(model.BoxNo))
                {
                    model.BoxNo = model.BoxNo.Trim().ToUpper();
                }
                //获取电池小包数据。
                string packageNo = model.PackageNo.ToUpper();
                result = GetPackage(packageNo);
                if (result.Code > 0)
                {
                    if (result.Code == 1002)
                    {
                        result.Message = string.Format("电池小包 {0} 数据不存在。", packageNo);
                    }
                    return(Json(result));
                }
                MethodReturnResult <Package> rst = result as MethodReturnResult <Package>;
                Package obj = rst.Data;

                //如果装箱号为空。生成装箱号。
                if (string.IsNullOrEmpty(model.BoxNo))
                {
                    string prefix = string.Format("JNC{0:yyMMdd}", DateTime.Now);
                    int    itemNo = 0;
                    using (PackageQueryServiceClient client = new PackageQueryServiceClient())
                    {
                        PagingConfig cfg = new PagingConfig()
                        {
                            PageNo   = 0,
                            PageSize = 1,
                            Where    = string.Format("Key LIKE '{0}%' AND PackageType='{1}'"
                                                     , prefix
                                                     , Convert.ToInt32(EnumPackageType.Box)),
                            OrderBy = "Key Desc"
                        };
                        MethodReturnResult <IList <Package> > rst1 = client.Get(ref cfg);
                        if (rst1.Code <= 0 && rst1.Data.Count > 0)
                        {
                            string maxBoxNo = rst1.Data[0].Key.Replace(prefix, "");
                            int.TryParse(maxBoxNo, out itemNo);
                        }
                        itemNo++;
                    }
                    model.BoxNo = prefix + itemNo.ToString("000");
                }
                model.BoxNo = model.BoxNo.ToUpper();
                //重新获取当前数量。
                using (PackageQueryServiceClient client = new PackageQueryServiceClient())
                {
                    MethodReturnResult <Package> rst2 = client.Get(model.BoxNo);
                    if (rst2.Code == 1000)
                    {
                        return(Json(rst2));
                    }
                    //检查装箱状态
                    if (rst2.Data != null && rst2.Data.PackageState != EnumPackageState.Packaging)
                    {
                        result.Code    = 1001;
                        result.Message = string.Format("箱 {0} 非 [{1}] 状态,不能装箱。"
                                                       , model.BoxNo.ToUpper()
                                                       , EnumPackageState.Packaging.GetDisplayName());
                        return(Json(result));
                    }
                    //设置当前数量。
                    if (rst2.Code <= 0 && rst2.Data != null)
                    {
                        model.CurrentQuantity = rst2.Data.Quantity;
                    }
                }

                double newCurrentQuantity = model.CurrentQuantity + obj.Quantity;
                //当前数量超过满箱数量,不能继续装箱。
                if (newCurrentQuantity > model.FullQuantity)
                {
                    result.Code    = 1;
                    result.Message = string.Format("箱({0}) 当前数量({1})加上小包({2})数量({3}),超过满箱数量。"
                                                   , model.BoxNo.ToUpper()
                                                   , model.CurrentQuantity
                                                   , obj.Key
                                                   , obj.Quantity);
                    return(Json(result));
                }
                model.CurrentQuantity = newCurrentQuantity;

                result = Box(model);
                //返回装箱结果。
                if (result.Code <= 0)
                {
                    if (model.CurrentQuantity == model.FullQuantity)
                    {
                        MethodReturnResult result1 = PrintPrivate(model);
                        result.Message += result1.Message;
                        result.Code     = result1.Code;
                    }

                    MethodReturnResult <BoxViewModel> rstFinal = new MethodReturnResult <BoxViewModel>()
                    {
                        Code     = result.Code,
                        Data     = model,
                        Detail   = result.Detail,
                        HelpLink = result.HelpLink,
                        Message  = result.Message
                    };

                    return(Json(rstFinal));
                }
            }
            catch (Exception ex)
            {
                result.Code    = 1000;
                result.Message = ex.Message;
                result.Detail  = ex.ToString();
            }
            // 如果我们进行到这一步时某个地方出错,则重新显示表单
            return(Json(result));
        }
        public async Task <ActionResult> ExportToXML(LotPackageSEModulesViewModel model)
        {
            IList <Package> lstLotPackage = new List <Package>();
            string          ftpServerIP   = System.Configuration.ConfigurationManager.AppSettings["ftpServerIP"];
            string          ftpUserID     = System.Configuration.ConfigurationManager.AppSettings["ftpUserID"];
            string          ftpPassword   = System.Configuration.ConfigurationManager.AppSettings["ftpPassword"];
            string          fileDate      = DateTime.Now.ToString("yyyyMMdd");

            if (!GetFile(ftpServerIP, ftpUserID, ftpPassword, fileDate))//
            {
                MakeDir(ftpServerIP, ftpUserID, ftpPassword, fileDate);
            }
            LotPackageSEModulesViewModel SEModulesModel = new LotPackageSEModulesViewModel();

            try
            {
                using (PackageQueryServiceClient client = new PackageQueryServiceClient())
                {
                    await Task.Run(() =>
                    {
                        PagingConfig cfg = new PagingConfig()
                        {
                            IsPaging = false,
                            OrderBy  = "Key",
                            Where    = GetQueryCondition(model)
                        };
                        MethodReturnResult <IList <Package> > resultPackage = client.Get(ref cfg);
                        if (resultPackage.Code == 0)
                        {
                            lstLotPackage = resultPackage.Data;
                        }
                    });
                }

                string successMessage = string.Empty;  //记录导出成功批次
                string failMessage    = string.Empty;; //记录导出失败批次
                for (int i = 0; i < lstLotPackage.Count; i++)
                {
                    string packageNo = lstLotPackage[i].Key;//包装号
                    MethodReturnResult <IList <Lot> > lotDetail = null;

                    using (LotQueryServiceClient client = new LotQueryServiceClient())//取得包装号对应的批次信息
                    {
                        PagingConfig cfg = new PagingConfig()
                        {
                            Where    = string.Format("PackageNo='{0}'", packageNo),
                            IsPaging = false
                        };
                        lotDetail = client.Get(ref cfg);
                    }
                    //string productType = SEModulesModel.GetProductType();
                    //创建XML文件
                    #region 1.创建类型声明节点
                    XmlDocument xmlDoc = new XmlDocument();     //XML对象
                    XmlNode     node   = xmlDoc.CreateXmlDeclaration("1.0", "ISO-8859-1", "no");
                    xmlDoc.AppendChild(node);
                    #endregion

                    #region 2.创建根节点
                    XmlElement root = xmlDoc.CreateElement("Parts");
                    root.SetAttribute("xmlns:xsi", @"http://www.w3.org/2001/XMLSchema-instance");
                    xmlDoc.AppendChild(root);
                    #endregion

                    #region 3批次数据节点
                    for (int j = 0; j < lotDetail.Data.Count; j++)
                    {
                        string lotNumber = lotDetail.Data[j].Key;//批次号
                        //string packageNo = lotDetail.Data[j].PackageNo;//托号
                        string seModulesNo = string.Empty;
                        //if (lotDetail.Data[j].Attr3 != "" && lotDetail.Data[j].Attr3.Split('-').Length > 1)
                        //{
                        //    seModulesNo = lotDetail.Data[j].Attr3.Split('-')[1];
                        //}
                        //else
                        //{
                        //    seModulesNo = lotDetail.Data[j].Attr3;
                        //}
                        seModulesNo = lotDetail.Data[j].Attr3;

                        string orderNumber  = lotDetail.Data[j].OrderNumber;
                        string materialCode = lotDetail.Data[j].MaterialCode;

                        string pmp     = "";
                        string isc     = "";
                        string imp     = "";
                        string voc     = "";
                        string vmp     = "";
                        string ff      = "";
                        string pnom    = "";
                        string current = "";
                        string colour  = "";

                        if (lotDetail.Data[j].Color == "深蓝")
                        {
                            colour = "Dark Blue";
                        }
                        if (lotDetail.Data[j].Color == "浅蓝")
                        {
                            colour = "Light Blue";
                        }
                        if (lotDetail.Data[j].Color == "正蓝")
                        {
                            colour = "Blue";
                        }

                        IVTestData ivtest             = SEModulesModel.GetIVTestData(lotNumber);
                        RPTpackagelistParameter param = new RPTpackagelistParameter();
                        param.PackageNo = packageNo;
                        param.LotNumber = lotNumber;
                        param.PageSize  = 20;
                        using (PackageQueryServiceClient client = new PackageQueryServiceClient())
                        {
                            MethodReturnResult <DataSet> ds = client.GetRPTpackagelistQueryDb(ref param);
                            if (ds.Code > 0)
                            {
                                //return Content("批次{0}五大参数异常", lotNumber);
                            }
                            else
                            {
                                DataTable dtOfIV = ds.Data.Tables[0];
                                pmp = Convert.ToDecimal(dtOfIV.Rows[0]["COEF_PMAX"]).ToString("F3");
                                isc = Convert.ToDecimal(dtOfIV.Rows[0]["COEF_ISC"]).ToString("F3");
                                imp = Convert.ToDecimal(dtOfIV.Rows[0]["COEF_IMAX"]).ToString("F3");
                                voc = Convert.ToDecimal(dtOfIV.Rows[0]["COEF_VOC"]).ToString("F3");
                                vmp = Convert.ToDecimal(dtOfIV.Rows[0]["COEF_VMAX"]).ToString("F3");
                                if (Convert.ToDecimal(dtOfIV.Rows[0]["COEF_FF"]) < 1)
                                {
                                    ff = (Convert.ToDecimal(dtOfIV.Rows[0]["COEF_FF"]) * 100).ToString("F3");
                                }
                                else
                                {
                                    ff = Convert.ToDecimal(dtOfIV.Rows[0]["COEF_FF"]).ToString("F3");
                                }
                                pnom    = dtOfIV.Rows[0]["PM_NAME"].ToString();
                                current = dtOfIV.Rows[0]["PS_SUBCODE"].ToString();
                                if (current == "α")
                                {
                                    current = "A";
                                }
                                if (current == "β")
                                {
                                    current = "B";
                                }
                                if (current == "γ")
                                {
                                    current = "C";
                                }
                            }
                        }
                        string productType  = SEModulesModel.GetProductType(materialCode, orderNumber, ivtest.PowersetCode, ivtest.PowersetItemNo.Value, lotDetail.Data[j]);  //对应主铭牌上的产品型号
                        string productTypes = SEModulesModel.GetProductTypes(materialCode, orderNumber, ivtest.PowersetCode, ivtest.PowersetItemNo.Value, lotDetail.Data[j]); //对应副标签上的产品型号
                        if (productType == "" || productTypes == "")
                        {
                            return(Content("产片编码:{0}未设置产品对应属性", materialCode));
                        }
                        XmlNode PartDataNode = xmlDoc.CreateNode(XmlNodeType.Element, "PartData", null);
                        root.AppendChild(PartDataNode);
                        CreateNode(xmlDoc, PartDataNode, "ModuleSerialNumber", "JN" + lotNumber);
                        CreateNode(xmlDoc, PartDataNode, "SESerialNumber", seModulesNo);
                        CreateNode(xmlDoc, PartDataNode, "PartNumber", productTypes);
                        CreateNode(xmlDoc, PartDataNode, "PalletNumber", packageNo);

                        //CreateNode(xmlDoc, PartDataNode, "Pmp-W", pmp);
                        //CreateNode(xmlDoc, PartDataNode, "Isc-A", isc);
                        //CreateNode(xmlDoc, PartDataNode, "Imp-A", imp);
                        //CreateNode(xmlDoc, PartDataNode, "Voc-V", voc);
                        //CreateNode(xmlDoc, PartDataNode, "Vmp-V", vmp);
                        //CreateNode(xmlDoc, PartDataNode, "FF-%", ff);
                        //CreateNode(xmlDoc, PartDataNode, "Pnom-W", pnom);
                        //CreateNode(xmlDoc, PartDataNode, "Current-A", current);

                        CreateNode(xmlDoc, PartDataNode, "Pmp", pmp + "W");
                        CreateNode(xmlDoc, PartDataNode, "Isc", isc + "A");
                        CreateNode(xmlDoc, PartDataNode, "Imp", imp + "A");
                        CreateNode(xmlDoc, PartDataNode, "Voc", voc + "V");
                        CreateNode(xmlDoc, PartDataNode, "Vmp", vmp + "V");
                        CreateNode(xmlDoc, PartDataNode, "FF", ff + "%");
                        CreateNode(xmlDoc, PartDataNode, "Pnom", pnom);
                        CreateNode(xmlDoc, PartDataNode, "Current", current);
                        CreateNode(xmlDoc, PartDataNode, "Colour", colour);
                        CreateNode(xmlDoc, PartDataNode, "LabelPN", productType);
                    }
                    #endregion

                    //XML路径
                    string path = Server.MapPath("~/SEModules/");
                    if (Directory.Exists(path) == false)
                    {
                        Directory.CreateDirectory(path);
                    }
                    string fileName = "SEModules" + DateTime.Now.ToString("yyyyMMddHHmm") + packageNo + ".xml";
                    string pathFile = path + fileName;
                    xmlDoc.Save(pathFile);

                    //string ftpServerIP = "seftp.solaredge.com";
                    //string ftpUserID = "jinergy";
                    //string ftpPassword = "******";
                    if (UploadFtp(path, fileDate, fileName, ftpServerIP, ftpUserID, ftpPassword))
                    {
                        successMessage = successMessage + packageNo + ";";
                    }
                    else
                    {
                        failMessage = failMessage + packageNo + ";";
                    }
                }
                if (successMessage.Length > 0)
                {
                    successMessage = successMessage + "导出成功";
                }
                if (failMessage.Length > 0)
                {
                    failMessage = failMessage + "导出失败";
                }
                return(Content("批次号:" + successMessage + failMessage));
            }
            catch (Exception err)
            {
                return(Content(string.Format("导出XML报错:{0}", err.Message)));
            }
        }