public async Task <PreOrderDetail> Insert(PreOrderDetail toInsert)
        {
            try
            {
                var created = _unitOfWork
                              .PreOrderDetailRepo
                              .Add(toInsert);
                await _unitOfWork.CommitAsync();

                return(created);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// 同步2c订单
        /// </summary>
        public void SyncB2COrder()
        {
            List <NikeCrodOrderLog> logs = new List <NikeCrodOrderLog>();

            //读取配置文件
            XmlSerializerHelper <OrderConfig> config = new XmlSerializerHelper <OrderConfig>();

            config.Load(System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "StoreConfig.xml"));
            if (config != null && config.Value != null && config.Value.customerStores != null && config.Value.customerStores.Any() && config.Value.orderTypes != null && config.Value.orderTypes.Any())
            {
                List <CustomerStore>   storeConfig     = config.Value.customerStores.ToList();
                List <OrderTypeConfig> orderTypeConfig = config.Value.orderTypes.ToList();
                //获取中间表的订单信息
                OrderECModel model = new OrderECManagementService().GetNikeOrderB2C(1);
                if (model != null && model.Order_Headers != null && model.Order_Headers.Any() && model.Order_Details != null && model.Order_Details.Any())
                {
                    //PreOrderRequest request = new PreOrderRequest();
                    IList <PreOrder>       preorders       = new List <PreOrder>();
                    IList <PreOrderDetail> preorderDetails = new List <PreOrderDetail>();
                    foreach (var item in model.Order_Headers)
                    {
                        if (string.IsNullOrEmpty(item.orderCode))
                        {
                            continue;
                        }
                        List <Order_Detail> details = model.Order_Details.Where(m => m.orderCode == item.orderCode).ToList();
                        //没有明细
                        if (details == null || !details.Any())
                        {
                            logs.Add(new NikeCrodOrderLog()
                            {
                                OrderCode = item.orderCode,
                                Type      = "GetB2COrder",
                                Operation = "抓取B2C订单",
                                Remark    = "抓取失败:该订单没有明细信息",
                                Creator   = "sysService",
                                Str1      = "",
                                Str2      = "",
                                Str3      = "",
                                Str4      = "",
                                Str5      = ""
                            });
                            continue;
                        }
                        CustomerStore   _store     = storeConfig.Where(m => m.StoreKey == item.appointStcode).FirstOrDefault();
                        OrderTypeConfig _ordertype = orderTypeConfig.Where(m => m.OrderTypeCode.ToString() == item.platType).FirstOrDefault();
                        //没有找到这家门店 ,log
                        if (_store == null || _ordertype == null)
                        {
                            logs.Add(new NikeCrodOrderLog()
                            {
                                OrderCode = item.orderCode,
                                Type      = "GetB2COrder",
                                Operation = "抓取B2C订单",
                                Remark    = "抓取失败:该订单对应的门店代码或者订单类型未配置",
                                Creator   = "sysService",
                                Str1      = "",
                                Str2      = "",
                                Str3      = "",
                                Str4      = "",
                                Str5      = ""
                            });
                            continue;
                        }


                        #region 头信息
                        PreOrder order = new PreOrder();
                        order.ExternOrderNumber = item.orderCode;
                        order.CustomerID        = _store.CustomerID;
                        order.CustomerName      = _store.CustomerName;
                        order.Warehouse         = _store.WarehouseName;
                        order.OrderType         = _ordertype.OrderType;
                        order.Status            = 1;
                        order.OrderTime         = item.pushTime.ObjectToNullableDateTime();
                        order.Province          = item.province;
                        order.City           = item.city;
                        order.District       = item.district;
                        order.Address        = item.address;
                        order.Consignee      = item.receiver;
                        order.Contact        = item.receiverPhone;
                        order.ExpressCompany = "顺丰快递";//默认顺丰
                        order.DetailCount    = details.Count;
                        order.Creator        = "sysService";
                        order.str4           = item.appointStcode; //门店代码
                        order.str2           = item.platType == "31" ? "3721" : item.appointStcode;
                        order.str13          = "cord";             //订单打个标记,代表cord订单

                        //为了方便知道往哪个库里面插入,打个标记
                        order.str20 = _store.DBType;
                        preorders.Add(order);
                        #endregion

                        #region 明细
                        foreach (var detailitem in details)
                        {
                            PreOrderDetail detail = new PreOrderDetail();
                            detail.ExternOrderNumber = item.orderCode;
                            detail.CustomerID        = _store.CustomerID;
                            detail.CustomerName      = _store.CustomerName;
                            detail.Warehouse         = _store.WarehouseName;
                            detail.WarehouseId       = _store.WarehouseID;
                            detail.LineNumber        = detailitem.lineId;
                            detail.SKU         = detailitem.barCode;
                            detail.GoodsName   = detailitem.skuName;
                            detail.GoodsType   = "A品";
                            detail.OriginalQty = detailitem.quantity;
                            detail.Creator     = order.Creator;
                            detail.str6        = detailitem.style_color + "-" + detailitem.size;

                            detail.str20 = _store.DBType;
                            preorderDetails.Add(detail);
                        }
                        #endregion
                    }
                    if (preorders != null && preorders.Any() && preorderDetails != null && preorderDetails.Any())
                    {
                        List <string> dbs = preorders.Select(m => m.str20).Distinct().ToList();
                        //不同数据库的订单
                        foreach (var dbitem in dbs)
                        {
                            List <PreOrder>       preodertowms   = preorders.Where(m => m.str20 == dbitem).ToList();//得到本库的订单
                            List <PreOrderDetail> predetailtowms = preorderDetails.Where(m => m.str20 == dbitem).ToList();

                            //request.PreOrderList = preorders.Where(m => m.str20 == dbitem).ToList();
                            //request.PreOd = preorderDetails.Where(m => m.str20 == dbitem).ToList();
                            //插入数据库
                            string dbconnStr = "";
                            if (dbitem == "1")//1.上海数据库
                            {
                                dbconnStr = Common.SHWMSSqlConnection;
                            }
                            else if (dbitem == "2")//2.成都武汉西安那个数据库
                            {
                                dbconnStr = Common.CDWMSSSqlConnection;
                            }

                            IEnumerable <PreOrder> wmspreorders = new PreOrderService().GetWMSPreOrdersByExternNumber(preodertowms, dbconnStr);
                            if (wmspreorders != null && wmspreorders.Any())
                            {
                                foreach (var item in wmspreorders)
                                {
                                    preodertowms.Remove(preodertowms.Where(m => m.ExternOrderNumber == item.ExternOrderNumber).FirstOrDefault());
                                    predetailtowms.Remove(predetailtowms.Where(m => m.ExternOrderNumber == item.ExternOrderNumber).FirstOrDefault());
                                }
                            }
                            if (!preodertowms.Any())//本库的没有订单了,下一个库
                            {
                                continue;
                            }

                            preodertowms.Where(m => m.str20 == dbitem).ToList().ForEach(m => m.str20   = null);
                            predetailtowms.Where(m => m.str20 == dbitem).ToList().ForEach(m => m.str20 = null);


                            var response = new PreOrderService().AddPreOrderAndPreOrderDetailDynamicConn(preodertowms, predetailtowms, "sysService", dbconnStr);
                            //成功
                            if (response.IsSuccess && response.Result != null && response.Result.PreOrderList != null && response.Result.PreOrderList.Any())
                            {
                                foreach (var item in preodertowms)
                                {
                                    logs.Add(new NikeCrodOrderLog()
                                    {
                                        OrderCode = item.ExternOrderNumber,
                                        Type      = "GetB2COrder",
                                        Operation = "抓取B2C订单",
                                        Remark    = "抓取成功",
                                        Creator   = "sysService",
                                        Str1      = "",
                                        Str2      = "",
                                        Str3      = "",
                                        Str4      = "",
                                        Str5      = ""
                                    });
                                }
                                //更新中间表状态
                                List <string> Numbers = preodertowms.Select(m => m.ExternOrderNumber).Distinct().ToList();
                                new OrderECManagementService().UpdateNikeOrderStatus(Numbers);
                            }
                            else
                            {
                                foreach (var item in preodertowms)
                                {
                                    logs.Add(new NikeCrodOrderLog()
                                    {
                                        OrderCode = item.ExternOrderNumber,
                                        Type      = "GetB2COrder",
                                        Operation = "抓取B2C订单",
                                        Remark    = "抓取失败:订单数据库插入失败",
                                        Creator   = "sysService",
                                        Str1      = "",
                                        Str2      = "",
                                        Str3      = "",
                                        Str4      = "",
                                        Str5      = ""
                                    });
                                }
                            }
                        }
                    }
                    else
                    {
                        //没有需要插入的订单
                    }
                }
                else
                {
                    //中间表没查到数据
                }
            }
            else
            {
                logs.Add(new NikeCrodOrderLog()
                {
                    OrderCode = "",
                    Type      = "GetB2COrder",
                    Operation = "抓取B2C订单",
                    Remark    = "抓取失败:未读取到门店和客户仓库配置文件",
                    Creator   = "sysService",
                    Str1      = "",
                    Str2      = "",
                    Str3      = "",
                    Str4      = "",
                    Str5      = ""
                });
            }
            //日志
            if (logs != null && logs.Any())
            {
                new LogOperationService().AddNikeCordOrderLog(logs);
            }
        }
Exemplo n.º 3
0
        public override void CustomerDefinedSettledTransData(ref string message)
        {
            try
            {
                if (TransDataType == "PreOrder")
                {
                    DataTable dt = Transdata.Tables["预出库单明细信息$"].Copy();
                    dt.Columns.Add("产品名称");
                    List <ProductSearch>        productListS = new List <ProductSearch>();
                    IEnumerable <ProductSearch> productList;
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        ProductSearch ps = new ProductSearch();
                        ps.SKU = dt.Rows[i]["SKU"].ToString();
                        productListS.Add(ps);
                    }
                    productList = ApplicationConfigHelper.GetSearchProduct(CustomerID, productListS, "SKU");
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        if (productList.Where(c => c.SKU == dt.Rows[i]["SKU"].ToString()).ToArray().Length <= 0)
                        {
                            message = dt.Rows[i]["SKU"].ToString() + "不存在!!";
                            return;
                        }
                        dt.Rows[i]["产品名称"] = productList.Where(c => c.SKU == dt.Rows[i]["SKU"].ToString()).ToArray().Length > 0 ? productList.Where(c => c.SKU == dt.Rows[i]["SKU"].ToString()).ToArray()[0].GoodsName.ToString() : "";
                    }
                    DataTable dtpo = Transdata.Tables["预出库单主信息$"].Copy();
                    DataSet   ds   = new DataSet();

                    //验证一下是否有重复的SKU
                    foreach (DataRow item in dtpo.Rows)
                    {
                        string exterNo = item["外部单号"].ToString().Trim();
                        if (string.IsNullOrEmpty(exterNo))
                        {
                            message = "预出库单主信息中的外部单号不能为空,请检查!";
                            return;
                        }
                        DataRow[] dtrow = dt.Select("外部单号='" + exterNo + "'");//获取明细
                        if (dtrow.Count() <= 0)
                        {
                            message = "<p><font color='#FF0000'>外部单号:" + exterNo + "没有明细信息,请检查!</font></p>";
                            return;
                        }
                        List <PreOrderDetail> predetail = new List <PreOrderDetail>();
                        foreach (DataRow row in dtrow)
                        {
                            PreOrderDetail detail = new PreOrderDetail();
                            detail.SKU = row["SKU"].ToString();
                            predetail.Add(detail);
                        }
                        var validataSKU = predetail.GroupBy(m => new { m.SKU }).Select(m => new { SKU = m.Key.SKU, count = m.Count() }).ToList();
                        var data        = validataSKU.Where(m => m.count > 1);
                        if (data.Count() > 0)
                        {
                            message = "<p><font color='#FF0000'>外部单号:" + exterNo + "中的SKU:" + data.FirstOrDefault().SKU + "存在重复值,请检查!</font></p>";
                            return;
                        }
                    }
                    ds.Tables.Add(dtpo);
                    ds.Tables.Add(dt);
                    this.AfterData = ds;
                }
                else if (TransDataType == "Asn")
                {
                    try
                    {
                        foreach (DataRow item in Transdata.Tables["预入库单主信息$"].Rows)
                        {
                            string    exterNo = item["外部入库单号"].ToString();
                            string    asnType = item["预入库单类型"].ToString();
                            DataRow[] dtrow   = Transdata.Tables["预入库单明细信息$"].Select("外部入库单号='" + exterNo + "'");//获取这一单的明细信息
                            if (dtrow.Count() <= 0)
                            {
                                message = "<p><font color='#FF0000'>外部入库单号:" + exterNo + "没有明细信息,请检查!</font></p>";
                                return;
                            }
                            List <ASNDetail> asnDetail = new List <ASNDetail>();
                            foreach (DataRow row in dtrow)
                            {
                                ASNDetail detail = new ASNDetail();
                                detail.SKU = row["SKU"].ToString();
                                asnDetail.Add(detail);
                            }
                            var validata = asnDetail.GroupBy(m => new { m.SKU }).Select(m => new { SKU = m.Key.SKU, count = m.Count() });
                            var data     = validata.Where(m => m.count > 1);
                            if (data.Count() > 0)
                            {
                                message = "<p><font color='#FF0000'>外部入库单号:" + exterNo + "中的SKU:" + data.FirstOrDefault().SKU + "存在重复值,请检查!</font></p>";
                                return;
                            }
                            this.AfterData = Transdata;
                        }
                    }
                    catch (Exception ex)
                    {
                        this.AfterData = null;
                        message        = ex.Message.ToString();
                    }
                }
                else if (TransDataType == "Receiving")
                {
                    DataTable dt = Transdata.Tables[0].Copy();
                    if (!dt.Columns.Contains("生产日期"))
                    {
                        dt.Columns.Add("生产日期");
                    }
                    if (!dt.Columns.Contains("箱内总数"))
                    {
                        dt.Columns.Add("箱内总数");
                    }
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        try
                        {
                            Convert.ToDateTime(dt.Rows[i]["生产日期"].ToString());
                        }
                        catch
                        {
                            dt.Rows[i]["生产日期"] = System.DateTime.Now.ToString();
                        }
                    }
                    DataSet ds = new DataSet();
                    ds.Tables.Add(dt);
                    this.AfterData = ds;
                }
                else
                {
                    this.AfterData = Transdata;
                }
            }
            catch
            {
                this.AfterData = null;
            }
        }
Exemplo n.º 4
0
        public async Task <IActionResult> Patch([FromRoute] string id, [FromBody] PreOrderDetail viewModel)
        {
            var updated = await _preOrderDetailBL.Update(id, viewModel);

            return(Accepted(updated));
        }
Exemplo n.º 5
0
        public async Task <IActionResult> Post([FromBody] PreOrderDetail viewModel)
        {
            var created = await _preOrderDetailBL.Insert(viewModel);

            return(CreatedAtAction(nameof(GetById), new { id = created.Id }, created));
        }
Exemplo n.º 6
0
        public override void CustomerDefinedSettledTransData(ref string message)
        {
            try
            {
                if (TransDataType == "PreOrder")
                {
                    DataTable dt = Transdata.Tables["预出库单明细信息$"].Copy();
                    dt.Columns.Add("产品名称");
                    List <ProductSearch>        productListS = new List <ProductSearch>();
                    IEnumerable <ProductSearch> productList;
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        ProductSearch ps = new ProductSearch();
                        ps.SKU = dt.Rows[i]["SKU"].ToString();
                        productListS.Add(ps);
                    }
                    productList = ApplicationConfigHelper.GetSearchProduct(CustomerID, productListS, "SKU");
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        if (productList.Where(c => c.SKU == dt.Rows[i]["SKU"].ToString()).ToArray().Length <= 0)
                        {
                            message = dt.Rows[i]["SKU"].ToString() + "不存在!!";
                            return;
                        }
                        dt.Rows[i]["产品名称"] = productList.Where(c => c.SKU == dt.Rows[i]["SKU"].ToString()).ToArray().Length > 0 ? productList.Where(c => c.SKU == dt.Rows[i]["SKU"].ToString()).ToArray()[0].GoodsName.ToString() : "";
                    }
                    DataTable dtpo = Transdata.Tables["预出库单主信息$"].Copy();
                    DataSet   ds   = new DataSet();

                    //验证一下快进快出的订单是否填写了其他单号(入库单号)
                    foreach (DataRow item in dtpo.Rows)
                    {
                        string exterNo = item["外部单号"].ToString().Trim();
                        if (string.IsNullOrEmpty(exterNo))
                        {
                            message = "预出库单主信息中的外部单号不能为空,请检查!";
                            return;
                        }
                        string orderType = item["预出库单类型"].ToString().Trim();
                        string otherNo   = item["其它单号"].ToString().Trim();
                        if (orderType == "快进快出")
                        {
                            if (string.IsNullOrEmpty(otherNo))
                            {
                                message = "<p><font color='#FF0000'>外部单号:" + exterNo + "属于快进快出订单,其它单号不能为空!</font></p>";
                                return;
                            }
                            //验证一下快进快出订单的其它单号在系统是否存在
                            var asnexter = new ASNManagementService().ExternKeyCheck(otherNo, "1", CustomerID);
                            if (asnexter <= 0)
                            {
                                message = "外部单号:" + exterNo + "中的其它单号在系统不存在,请检查!";
                                return;
                            }
                        }
                        else
                        {
                            if (!string.IsNullOrEmpty(otherNo))
                            {
                                message = "<p><font color='#FF0000'>外部单号:" + exterNo + "不是快进快出类型,请勿填写其它单号!</font></p>";
                                return;
                            }
                        }
                        //验证一下重复sku
                        DataRow[] dtrow = dt.Select("外部单号='" + exterNo + "'");//获取明细
                        if (dtrow.Count() <= 0)
                        {
                            message = "<p><font color='#FF0000'>外部单号:" + exterNo + "没有明细信息,请检查!</font></p>";
                            return;
                        }
                        List <PreOrderDetail> predetail = new List <PreOrderDetail>();
                        foreach (DataRow row in dtrow)
                        {
                            PreOrderDetail detail = new PreOrderDetail();
                            detail.SKU = row["SKU"].ToString();
                            predetail.Add(detail);
                        }
                        var validataSKU = predetail.GroupBy(m => new { m.SKU }).Select(m => new { SKU = m.Key.SKU, count = m.Count() }).ToList();
                        var data        = validataSKU.Where(m => m.count > 1);
                        if (data.Count() > 0)
                        {
                            message = "<p><font color='#FF0000'>外部单号:" + exterNo + "中的SKU:" + data.FirstOrDefault().SKU + "存在重复值,请检查!</font></p>";
                            return;
                        }
                    }

                    ds.Tables.Add(dtpo);
                    ds.Tables.Add(dt);

                    this.AfterData = ds;
                }
                else if (TransDataType == "Receiving")
                {
                    DataTable dt = Transdata.Tables[0].Copy();
                    if (!dt.Columns.Contains("生产日期"))
                    {
                        dt.Columns.Add("生产日期");
                    }
                    if (!dt.Columns.Contains("箱内总数"))
                    {
                        dt.Columns.Add("箱内总数");
                    }
                    for (int i = 0; i < dt.Rows.Count; i++)
                    {
                        try
                        {
                            Convert.ToDateTime(dt.Rows[i]["生产日期"].ToString());
                        }
                        catch
                        {
                            dt.Rows[i]["生产日期"] = System.DateTime.Now.ToString();
                        }
                    }
                    DataSet ds = new DataSet();
                    ds.Tables.Add(dt);
                    this.AfterData = ds;
                }
                else if (TransDataType == "Asn")
                {
                    try
                    {
                        foreach (DataRow item in Transdata.Tables["预入库单主信息$"].Rows)
                        {
                            string    exterNo = item["外部入库单号"].ToString();
                            string    asnType = item["预入库单类型"].ToString();
                            DataRow[] dtrow   = Transdata.Tables["预入库单明细信息$"].Select("外部入库单号='" + exterNo + "'");//获取这一单的明细信息
                            if (dtrow.Count() <= 0)
                            {
                                message = "<p><font color='#FF0000'>外部入库单号:" + exterNo + "没有明细信息,请检查!</font></p>";
                                return;
                            }
                            if (asnType == "快进快出")
                            {
                                List <ASNDetail> asnDetail = new List <ASNDetail>();
                                foreach (DataRow row in dtrow)
                                {
                                    ASNDetail detail = new ASNDetail();
                                    //detail.ExternReceiptNumber = row["外部入库单号"].ToString();
                                    detail.SKU       = row["SKU"].ToString();
                                    detail.BoxNumber = row["托号"].ToString();
                                    asnDetail.Add(detail);
                                }
                                //验证箱号是不是都有值
                                if (asnDetail.Where(m => m.BoxNumber == "" || m.BoxNumber == null).Count() > 0)
                                {
                                    message = "<p><font color='#FF0000'>外部入库单号:" + exterNo + "类型为快进快出,箱号不能为空,请检查!</font></p>";
                                    return;
                                }

                                var validataBox = asnDetail.GroupBy(m => new { m.SKU, m.BoxNumber }).Select(m => new { SKU = m.Key.SKU, BoxNumber = m.Key.BoxNumber, count = m.Count() });
                                var data        = validataBox.Where(m => m.count > 1);
                                if (data.Count() > 0)
                                {
                                    message = "<p><font color='#FF0000'>外部入库单号:" + exterNo + "中的SKU:" + data.FirstOrDefault().SKU + "和箱号:" + data.FirstOrDefault().BoxNumber + "存在重复值,请检查!</font></p>";
                                    return;
                                }
                            }
                            else
                            {
                                List <ASNDetail> asnDetail = new List <ASNDetail>();
                                foreach (DataRow row in dtrow)
                                {
                                    ASNDetail detail = new ASNDetail();
                                    detail.SKU = row["SKU"].ToString();
                                    asnDetail.Add(detail);
                                }
                                var validataBox = asnDetail.GroupBy(m => new { m.SKU }).Select(m => new { SKU = m.Key.SKU, count = m.Count() });
                                var data        = validataBox.Where(m => m.count > 1);
                                if (data.Count() > 0)
                                {
                                    message = "<p><font color='#FF0000'>外部入库单号:" + exterNo + "中的SKU:" + data.FirstOrDefault().SKU + "存在重复值,请检查!</font></p>";
                                    return;
                                }
                            }
                        }


                        //    //验证快进快出的箱号是否存在
                        //    for (int i = 0; i < Transdata.Tables["预入库单主信息$"].Rows.Count; i++)
                        //    {
                        //        string exterNo = Transdata.Tables["预入库单主信息$"].Rows[i]["外部入库单号"].ToString();
                        //        string orderType = Transdata.Tables["预入库单主信息$"].Rows[i]["预入库单类型"].ToString();
                        //        DataRow[] dtrow = Transdata.Tables["预入库单明细信息$"].Select("外部入库单号='" + exterNo + "'");//获取这一单的明细信息
                        //        if (dtrow.Count() <= 0)
                        //        {
                        //            message = "<p><font color='#FF0000'>外部入库单号:" + exterNo + "没有明细信息,请检查!</font></p>";
                        //            return;
                        //        }
                        //        //带箱号的订单
                        //        if (orderType == "快进快出")
                        //        {
                        //            var distinctBoxSKU = from s in dtrow.AsEnumerable()
                        //                                 group s by new { s1 = Convert.ToString(s.Field<string>("外部入库单号")), s2 = Convert.ToString(s.Field<string>("SKU")), s3 = Convert.ToString(s.Field<string>("托号")) } into m
                        //                                 select new
                        //                                 {
                        //                                     外部单号 = Convert.ToString(m.Key.s1),
                        //                                     SKU = Convert.ToString(m.Key.s2),
                        //                                     托号 = Convert.ToString(m.Key.s3),
                        //                                     count = m.Count()
                        //                                 };
                        //            var errorBoxSKU = distinctBoxSKU.Where(m => m.count > 1);
                        //            if (errorBoxSKU.Count() > 0)
                        //            {
                        //                message = "<p><font color='#FF0000'>外部入库单号:" + errorBoxSKU.FirstOrDefault().外部单号 + "中的SKU:"
                        //                    + errorBoxSKU.FirstOrDefault().SKU + "和箱号:" + distinctBoxSKU.FirstOrDefault().托号 + "存在重复值,请检查!" + "</font></p>";
                        //                return;
                        //            }
                        //        }
                        //        else
                        //        {
                        //            //普通订单验证是否有相同SKU
                        //            var distinctSKU = from s in dtrow.AsEnumerable()
                        //                              group s by new { s1 = Convert.ToString(s.Field<string>("外部入库单号")), s2 = Convert.ToString(s.Field<string>("SKU")) } into m
                        //                              select new
                        //                              {
                        //                                  外部单号 = Convert.ToString(m.Key.s1),
                        //                                  SKU = Convert.ToString(m.Key.s2),
                        //                                  count = m.Count()
                        //                              };

                        //            var errorSKU = distinctSKU.Where(m => m.count > 1);

                        //            if (errorSKU.Count() > 0)
                        //            {
                        //                message = "<p><font color='#FF0000'>外部入库单号:" + errorSKU.FirstOrDefault().外部单号 + "中的SKU:" + errorSKU.FirstOrDefault().SKU + "存在重复值,请检查!" + "</font></p>";
                        //                return;
                        //            }
                        //        }

                        //    }
                        this.AfterData = Transdata;
                    }
                    catch (Exception ex)
                    {
                        this.AfterData = null;
                        message        = ex.Message.ToString();
                    }
                }
                else
                {
                    this.AfterData = Transdata;
                }
            }
            catch
            {
                this.AfterData = null;
            }
        }
Exemplo n.º 7
0
        public WMSPreOrderDetailInfoToDb(PreOrderDetail preInfo)
            : base(s_metadata)
        {
            SetSqlInt64(0, preInfo.ID);
            SetSqlInt64(1, preInfo.POID);
            SetSqlString(2, preInfo.PreOrderNumber);
            SetSqlString(3, preInfo.ExternOrderNumber);
            SetSqlInt64(4, preInfo.CustomerID);
            SetSqlString(5, preInfo.CustomerName);
            SetSqlString(6, preInfo.LineNumber);
            SetSqlInt64(7, preInfo.WarehouseId);
            SetSqlString(8, preInfo.Warehouse);

            SetSqlString(9, preInfo.Area);
            SetSqlString(10, preInfo.Location);

            SetSqlString(11, preInfo.SKU);
            SetSqlString(12, preInfo.UPC);
            SetSqlString(13, preInfo.GoodsName);
            SetSqlString(14, preInfo.GoodsType);
            SetSqlDouble(15, preInfo.OriginalQty);
            SetSqlDouble(16, preInfo.AllocatedQty);
            SetSqlString(17, preInfo.BatchNumber == "" ? null : preInfo.BatchNumber);
            SetSqlString(18, preInfo.Creator);
            SetSqlDateTime(19, preInfo.CreateTime ?? SqlTypes.SqlDateTime.Null);
            SetSqlString(20, preInfo.Updator);
            SetSqlDateTime(21, preInfo.UpdateTime ?? SqlTypes.SqlDateTime.Null);
            SetSqlString(22, preInfo.Remark);
            #region 备用字段
            SetSqlString(23, preInfo.str1);
            SetSqlString(24, preInfo.str2);
            SetSqlString(25, preInfo.str3);
            SetSqlString(26, preInfo.str4);
            SetSqlString(27, preInfo.str5);
            SetSqlString(28, preInfo.str6);
            SetSqlString(29, preInfo.str7);
            SetSqlString(30, preInfo.str8);
            SetSqlString(31, preInfo.str9);
            SetSqlString(32, preInfo.str10);
            SetSqlString(33, preInfo.str11);
            SetSqlString(34, preInfo.str12);
            SetSqlString(35, preInfo.str13);
            SetSqlString(36, preInfo.str14);
            SetSqlString(37, preInfo.str15);
            SetSqlString(38, preInfo.str16);
            SetSqlString(39, preInfo.str17);
            SetSqlString(40, preInfo.str18);
            SetSqlString(41, preInfo.str19);
            SetSqlString(42, preInfo.str20);
            SetSqlDateTime(43, preInfo.DateTime1 ?? SqlTypes.SqlDateTime.Null);
            SetSqlDateTime(44, preInfo.DateTime2 ?? SqlTypes.SqlDateTime.Null);
            SetSqlDateTime(45, preInfo.DateTime3 ?? SqlTypes.SqlDateTime.Null);
            SetSqlDateTime(46, preInfo.DateTime4 ?? SqlTypes.SqlDateTime.Null);
            SetSqlDateTime(47, preInfo.DateTime5 ?? SqlTypes.SqlDateTime.Null);
            SetSqlInt32(48, preInfo.Int1 ?? SqlTypes.SqlInt32.Null);
            SetSqlInt32(49, preInfo.Int2 ?? SqlTypes.SqlInt32.Null);
            SetSqlInt32(50, preInfo.Int3 ?? SqlTypes.SqlInt32.Null);
            SetSqlInt32(51, preInfo.Int4 ?? SqlTypes.SqlInt32.Null);
            SetSqlInt32(52, preInfo.Int5 ?? SqlTypes.SqlInt32.Null);
            SetSqlString(53, preInfo.BoxNumber == "" ? null : preInfo.BoxNumber);
            SetSqlInt64(54, preInfo.IID);
            SetSqlString(55, preInfo.Unit == "" ? null : preInfo.Unit);
            SetSqlString(56, preInfo.Specifications == "" ? null : preInfo.Specifications);
            #endregion
        }
Exemplo n.º 8
0
        /// <summary>
        /// 解析出库单,一个文件一单 根据loadkey区分
        /// </summary>
        /// <param name="txtlists"></param>
        /// <param name="externumber"></param>
        /// <returns></returns>
        public string LFOrderImportByLoadKey(List <string> txtlists, out string externumber)
        {
            externumber = "";
            try
            {
                PreOrderRequest       requestPo            = new PreOrderRequest();
                List <PreOrder>       _preorderLists       = new List <PreOrder>();
                List <PreOrderDetail> _preorderDetailLists = new List <PreOrderDetail>();

                if (txtlists[0].TxtSubstring(0, 10) == "WMSSHP" && txtlists[0].TxtSubstring(10, 2) == "O")//LF出库单
                {
                    int linenumber = 1;
                    for (int i = 0; i < txtlists.Count; i++)
                    {
                        if (txtlists[i].TxtSubstring(0, 10) == "WMSSHP")//文档头
                        {
                            continue;
                        }
                        if (txtlists[i].TxtSubstring(0, 5) == "SHPHD" && txtlists[i].TxtSubstring(5, 1) == "A")//订单头
                        {
                            string loadkey = txtlists[i].TxtSubstring(4166, 10);
                            if (string.IsNullOrEmpty(loadkey))
                            {
                                return(ReturnTxtError("文档中存在LoadKey为空的订单"));
                            }

                            if (_preorderLists.Count() <= 0)//订单头只有一行
                            {
                                #region 订单头
                                PreOrder preorder = new PreOrder();
                                preorder.str9 = loadkey;
                                externumber   = loadkey;
                                string plantime = string.IsNullOrEmpty(txtlists[i].TxtSubstring(65, 14)) ? "" :
                                                  DateTime.ParseExact(txtlists[i].TxtSubstring(65, 14), "yyyyMMddHHmmss", System.Globalization.CultureInfo.CurrentCulture).ToString("yyyy-MM-dd"); //计划发货时间
                                string shiptype = txtlists[i].TxtSubstring(209, 30);                                                                                                               //运输方式

                                if (string.IsNullOrEmpty(plantime))
                                {
                                    return(ReturnTxtError("文档中计划发货时间为空,无法生成外部单号"));
                                }

                                preorder.str7 = plantime; //计划发货时间
                                preorder.str3 = shiptype; //运输方式

                                //外部单号
                                preorder.ExternOrderNumber = "LF" + preorder.str7.Replace("-", "") + "-" + preorder.str9;
                                if (!string.IsNullOrEmpty(shiptype))//加上运输方式
                                {
                                    preorder.ExternOrderNumber += "-" + preorder.str3;
                                }

                                preorder.str17 = txtlists[i].TxtSubstring(2093, 10); //LF出库单号,这个在数据库是存在明细str8里面的,插入时清空这个值
                                //preorder.str16 = txtlists[i].TxtSubstring(21, 20);//NIKE单据编码,这个在数据库是存在明细里面的,插入时清空这个值
                                preorder.str20 = txtlists[i].TxtSubstring(21, 20);   //NIKE单据编码,这个在数据库是存在明细里面的,插入时清空这个值

                                preorder.OrderTime = DateTime.Now;
                                preorder.str4      = txtlists[i].TxtSubstring(79, 15);   //NFS店铺编码
                                string DivisionCode = txtlists[i].TxtSubstring(349, 10); //Division Code
                                if (DivisionCode == "10")
                                {
                                    preorder.str13 = "APP";
                                }
                                else if (DivisionCode == "20" || DivisionCode == "40")
                                {
                                    preorder.str13 = "FTW";
                                }
                                else
                                {
                                    preorder.str13 = "EQP";
                                }
                                preorder.str10    = txtlists[i].TxtSubstring(703, 20);                                                                                                                                   //NIKE PO
                                preorder.str2     = txtlists[i].TxtSubstring(724, 20);                                                                                                                                   //运输时效
                                preorder.str8     = txtlists[i].TxtSubstring(804, 20);                                                                                                                                   //VAS CODE
                                preorder.str11    = txtlists[i].TxtSubstring(907, 30);                                                                                                                                   //PACK SLIP NO
                                preorder.str5     = txtlists[i].TxtSubstring(1705, 45);                                                                                                                                  //公司名
                                preorder.Address  = txtlists[i].TxtSubstring(1750, 45) + "&" + txtlists[i].TxtSubstring(1795, 45) + "&" + txtlists[i].TxtSubstring(1840, 45) + "&" + txtlists[i].TxtSubstring(1885, 45); //地址1,2,3,4
                                preorder.City     = txtlists[i].TxtSubstring(1930, 45);                                                                                                                                  //城市
                                preorder.Province = txtlists[i].TxtSubstring(1975, 2);                                                                                                                                   //省
                                preorder.str12    = "否";                                                                                                                                                                 //是否单仓LoadKey

                                preorder.str6  = "";                                                                                                                                                                     //好像是男女童鞋服配之类的
                                preorder.str14 = "";                                                                                                                                                                     //RP LI,先判断NIKE PO的第九位,是L时,值为LI,是S时,值为RP,否则取VAS Code
                                if (preorder.str10.Length >= 9)
                                {
                                    if (preorder.str10.Substring(8, 1) == "L")
                                    {
                                        preorder.str14 = "LI";
                                    }
                                    else if (preorder.str10.Substring(8, 1) == "S")
                                    {
                                        preorder.str14 = "RP";
                                    }
                                    else
                                    {
                                        if (preorder.str8.Equals("NIKECN"))//VAS Code
                                        {
                                            preorder.str14 = "";
                                        }
                                        else
                                        {
                                            preorder.str14 = preorder.str8;
                                        }
                                    }
                                }
                                else
                                {
                                    if (preorder.str8.Equals("NIKECN"))//VAS Code
                                    {
                                        preorder.str14 = "";
                                    }
                                    else
                                    {
                                        preorder.str14 = preorder.str8;
                                    }
                                }

                                //CRD逻辑 计划发货时间+运输时效
                                preorder.str15 = (DateTime.Parse(preorder.str7).AddDays(int.Parse(preorder.str2))).ToString("yyyy-MM-dd");
                                try
                                {
                                    if (DateTime.Parse(preorder.str7).AddDays(int.Parse(preorder.str2)) > DateTime.ParseExact(preorder.str10.Substring(0, 8), "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture))
                                    {
                                        preorder.str15 = "";//CRD
                                    }
                                    else
                                    {
                                        preorder.str15 = DateTime.ParseExact(preorder.str10.Substring(0, 8), "yyyyMMdd", System.Globalization.CultureInfo.CurrentCulture).ToString("yyyy-MM-dd");
                                    }
                                }
                                catch (Exception ea)
                                {
                                }

                                //预计卸货时间
                                preorder.str16 = (DateTime.Parse(preorder.str7).AddDays(int.Parse(preorder.str2))).ToString("yyyy-MM-dd");

                                try
                                {
                                    DateTime time = DateTime.Parse(preorder.str10.Substring(0, 8).Insert(4, "-").Insert(7, "-"));
                                    preorder.str16 = preorder.str10.Substring(0, 8).Insert(4, "-").Insert(7, "-");
                                }
                                catch (Exception)
                                { }

                                preorder.str18        = "LF";//标识利丰订单
                                preorder.CustomerID   = 103;
                                preorder.CustomerName = "NIKE-Return";
                                preorder.Warehouse    = "NIKE-退货仓";
                                preorder.OrderType    = "正常出库";
                                preorder.Status       = 1;
                                preorder.Creator      = "SFTPUser";
                                _preorderLists.Add(preorder);

                                #endregion
                            }
                            else
                            {
                                if (_preorderLists.Where(m => m.str9 == loadkey).Count() <= 0)
                                {
                                    return(ReturnTxtError("文档中存在多个LoadKey的情况"));
                                }
                                continue;
                            }
                        }
                        else if (txtlists[i].TxtSubstring(0, 5) == "SHPDT" && txtlists[i].TxtSubstring(5, 1) == "A") //订单明细SKU
                        {
                            string ArticleColorSize = txtlists[i].TxtSubstring(36, 20);                              //lf传过来的sku,里面包含款色码
                            if (string.IsNullOrEmpty(ArticleColorSize))
                            {
                                return(ReturnTxtError("文档信息中SKU(articlesize)为空"));
                            }
                            //相同SKU
                            if (_preorderDetailLists.Where(m => m.str16 == ArticleColorSize).Count() > 0)
                            {
                                //同SKU数量累加
                                _preorderDetailLists.Where(m => m.str16 == ArticleColorSize).FirstOrDefault().OriginalQty += txtlists[i].TxtSubstring(538, 10).ObjectToInt32();//数量
                                continue;
                            }
                            else
                            {
                                #region 订单明细

                                PreOrderDetail predetail = new PreOrderDetail();
                                predetail.str16 = ArticleColorSize;                                                                        //先存着和vas行去比较
                                predetail.str17 = ArticleColorSize.Substring(0, 6).Trim() + '-' + ArticleColorSize.Substring(6, 3).Trim(); //article
                                predetail.str18 = ArticleColorSize.Substring(9).Trim();                                                    //size
                                predetail.str6  = predetail.str17 + '-' + predetail.str18;                                                 //Article+size

                                predetail.str7        = "";                                                                                //取主表的Division Code
                                predetail.str8        = txtlists[i].TxtSubstring(460, 10);                                                 //LF出库单号
                                predetail.str9        = "";                                                                                //NIKE单据编码
                                predetail.OriginalQty = txtlists[i].TxtSubstring(538, 10).ObjectToInt32();                                 //数量
                                //predetail.LineNumber = txtlists[i].TxtSubstring(548, 5);//LF出库单行号
                                predetail.LineNumber = linenumber.ToString().TxtPadLeftstring(5, '0');


                                predetail.CustomerID   = 103;
                                predetail.CustomerName = "NIKE-Return";
                                predetail.Warehouse    = "NIKE-退货仓";
                                predetail.WarehouseId  = 58;
                                predetail.GoodsType    = "A品";
                                _preorderDetailLists.Add(predetail);
                                linenumber++;
                                #endregion
                            }
                        }
                        else if (txtlists[i].TxtSubstring(0, 5) == "ORDRF" && txtlists[i].TxtSubstring(5, 1) == "A")//SKU的VAS信息
                        {
                            continue;
                        }
                    }

                    if (!_preorderLists.Any() || !_preorderDetailLists.Any())
                    {
                        return(ReturnTxtError("文档中不存在订单信息"));
                    }
                    //验证loadkey在系统是否存在
                    IEnumerable <PreOrder> getpreorders = new PreOrderService().GetWMSPreOrderlistByLoadKey(_preorderLists);
                    if (getpreorders != null && getpreorders.Any())
                    {
                        return(ReturnTxtError("文档中的LoadKey在系统中已经存在"));
                    }

                    //验证SKU是否存在
                    List <ProductSearch> searprolistfs = new List <ProductSearch>();
                    foreach (var item in _preorderDetailLists)
                    {
                        ProductSearch psfs = new ProductSearch();
                        psfs.Str10 = item.str17;
                        psfs.Str9  = item.str18;
                        psfs.Str8  = "01";
                        searprolistfs.Add(psfs);
                    }
                    IEnumerable <ProductSearch> productListfs = new ProductService().GetSearchProduct(103, searprolistfs, "Acticle");

                    foreach (var item in _preorderDetailLists)
                    {
                        //判断如果通过article+size是否存在信息
                        ProductSearch search = productListfs.Where(m => m.Str10 == item.str17 && m.Str9 == item.str18).FirstOrDefault();
                        if (search == null)
                        {
                            return(ReturnTxtError("文档中的article:" + item.str17 + "Size:" + item.str18 + "在系统不存在"));
                        }
                        item.SKU       = search.SKU;
                        item.GoodsName = search.GoodsName;
                        item.str2      = search.Price;
                        item.str3      = search.SafeLock;
                        item.str4      = search.Hanger;
                        item.str10     = search.GenderAge;

                        item.ExternOrderNumber = _preorderLists.FirstOrDefault().ExternOrderNumber;
                        item.str7 = _preorderLists.FirstOrDefault().str13; //Division Code
                        //item.str9 = _preorderLists.FirstOrDefault().str16;//NIKE单据编码
                        item.str9 = _preorderLists.FirstOrDefault().str20; //NIKE单据编码
                        _preorderLists.FirstOrDefault().str6 = item.str10; ////GenderAge
                    }

                    //foreach (var detailitem in _preorderDetailLists)
                    //{
                    //    detailitem.ExternOrderNumber = _preorderLists.FirstOrDefault().ExternOrderNumber;
                    //    detailitem.str7 = _preorderLists.FirstOrDefault().str13; //Division Code
                    //    detailitem.str9 = _preorderLists.FirstOrDefault().str16;//NIKE单据编码
                    //    _preorderLists.FirstOrDefault().str6 = detailitem.str10;////GenderAge

                    //}
                    //把主表不需要的清空,明细不需要的清空
                    _preorderLists.ForEach((item) =>
                    {
                        item.str20 = null;// item.str16 = null;
                        item.str17 = null;
                    });
                    _preorderDetailLists.ForEach((item) =>
                    {
                        item.str10 = null;
                        item.str16 = null;
                        item.str17 = null;
                        item.str18 = null;
                    });
                    requestPo.PreOrderList = _preorderLists;
                    requestPo.PreOd        = _preorderDetailLists;
                    var response = new PreOrderService().AddPreOrderAndPreOrderDetail(requestPo, "SFTPService");
                    if (response.IsSuccess)
                    {
                        if (response.Result == null || response.Result.PreOrderList == null || response.Result.PreOrderList.Count() <= 0)
                        {
                            return("订单数据库插入失败,不移动文件!");
                        }
                        else
                        {
                            return("");
                        }
                    }
                    else
                    {
                        return("数据库层报错:" + response.ErrorCode.ToString());
                    }
                }
                else
                {
                    return(ReturnTxtError());
                }
            }
            catch (Exception ex)
            {
                return(ex.Message.ToString());
            }
        }