public async Task <PreOrderDetail> Insert(PreOrderDetail toInsert) { try { var created = _unitOfWork .PreOrderDetailRepo .Add(toInsert); await _unitOfWork.CommitAsync(); return(created); } catch (Exception ex) { throw ex; } }
/// <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); } }
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; } }
public async Task <IActionResult> Patch([FromRoute] string id, [FromBody] PreOrderDetail viewModel) { var updated = await _preOrderDetailBL.Update(id, viewModel); return(Accepted(updated)); }
public async Task <IActionResult> Post([FromBody] PreOrderDetail viewModel) { var created = await _preOrderDetailBL.Insert(viewModel); return(CreatedAtAction(nameof(GetById), new { id = created.Id }, created)); }
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; } }
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 }
/// <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()); } }