From 950fac9fd7b9477fc2bbe3253d217f62ac7608e5 Mon Sep 17 00:00:00 2001 From: wxw <Administrator@DESKTOP-5BIMHQ3> Date: 星期一, 21 七月 2025 17:01:21 +0800 Subject: [PATCH] SAP接口开发 --- Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs | 255 +++++++++++++++++++++++++++++++------------------- 1 files changed, 159 insertions(+), 96 deletions(-) diff --git a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs index 4ef8b56..b83a0fb 100644 --- a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs +++ b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs @@ -305,26 +305,26 @@ /// </summary> /// <param name="model"></param> /// <returns></returns> - public SoResInfo ErpAddExportNotice(SoInfo model) + public SoResInfo ErpAddExportNotice(SendSoVm model) { try { - if (string.IsNullOrEmpty(model.SoType)) + if (string.IsNullOrEmpty(model.orderType)) { throw new Exception("鍗曟嵁绫诲瀷涓嶅彲涓虹┖!"); } - if (string.IsNullOrEmpty(model.OrderCode)) + if (string.IsNullOrEmpty(model.orderNo)) { - throw new Exception("绯荤粺鍗曞彿涓嶅彲涓虹┖!"); + throw new Exception("鍑哄簱鍗曞彿涓嶅彲涓虹┖!"); } - if (model.SoDetails.Count <= 0) + if (model.orderDetailList.Count <= 0) { throw new Exception("鍑哄簱鍗曟槑缁嗕笉鍙负绌�!"); } //杩斿洖淇℃伅 SoResInfo result = new SoResInfo(); - var skuNos = model.SoDetails.Select(a => a.SkuNo).Distinct().ToList(); + var skuNos = model.orderDetailList.Select(a => a.skuNo).Distinct().ToList(); //鏍规嵁鐗╂枡鍙疯幏鍙栫墿鏂欎俊鎭� var skuList = Db.Queryable<SysMaterials>().Where(a => skuNos.Contains(a.SkuNo) && a.IsDel == "0").ToList(); //鑾峰彇搴撳瓨鏄庣粏 @@ -333,10 +333,10 @@ var stockList = Db.Queryable<DataStock>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0).ToList(); string CustomerName = string.Empty; - if (!string.IsNullOrEmpty(model.Customer)) + if (!string.IsNullOrEmpty(model.customerNo)) { //瀹㈡埛淇℃伅 - var customer = Db.Queryable<SysCustomer>().First(m => m.IsDel == "0" && m.CustomerNo == model.Customer); + var customer = Db.Queryable<SysCustomer>().First(m => m.IsDel == "0" && m.CustomerNo == model.customerNo); if (customer == null) { throw new Exception("瀹㈡埛淇℃伅涓嶅瓨鍦�!"); @@ -344,12 +344,12 @@ CustomerName = customer.CustomerName; } //鎵胯繍鍟嗕俊鎭� - var logistics = Db.Queryable<SysLogisticsInfo>().First(m => m.IsDel == "0" && m.CarrierName == model.LogisticsNo); - int? logisticsId = null; - if (logistics != null) - { - logisticsId = logistics.Id; - } + //var logistics = Db.Queryable<SysLogisticsInfo>().First(m => m.IsDel == "0" && m.CarrierName == model.LogisticsNo); + //int? logisticsId = null; + //if (logistics != null) + //{ + // logisticsId = logistics.Id; + //} var billNo = ""; var bl = true; do @@ -367,21 +367,21 @@ { var list = new List<BllExportNoticeDetail>(); //娣诲姞鍑哄簱鍗� - foreach (var d in model.SoDetails) + foreach (var d in model.orderDetailList) { - if (d.Qty < 1) + if (d.skuQty < 1) { throw new Exception("鍑哄簱鏁伴噺蹇呴』澶т簬0"); } - var sku = skuList.FirstOrDefault(a => a.SkuNo == d.SkuNo); + var sku = skuList.FirstOrDefault(a => a.SkuNo == d.skuNo); if (sku == null) { - throw new Exception($"鐗╂枡淇℃伅涓湭鏌ヨ鍒板嚭搴撶墿鏂欎俊鎭�:{d.SkuNo}"); + throw new Exception($"鐗╂枡淇℃伅涓湭鏌ヨ鍒板嚭搴撶墿鏂欎俊鎭�:{d.skuNo}"); } //0:鎴愬搧鍑哄簱銆�1:棰嗘枡鍑哄簱銆�3锛氱墿鏂欏彇鏍峰嚭搴撱��4:涓嶅悎鏍煎搧鍑哄簱銆�6:浠e偍鍑哄簱銆�7:鍏朵粬鍑哄簱銆� ///2:鎶芥鍑哄簱銆�5:涓棿鍝佸嚭搴撱��8:瀵勫瓨鍑哄簱 - if (model.SoType == "0" || model.SoType == "3" || model.SoType == "4" || model.SoType == "7") + if (model.orderType == "0" || model.orderType == "3" || model.orderType == "4" || model.orderType == "7") { - if (string.IsNullOrWhiteSpace(d.LotNo)) + if (string.IsNullOrWhiteSpace(d.lotNo)) { throw new Exception("鎵规涓嶅彲涓虹┖!"); } @@ -389,29 +389,29 @@ //搴撳瓨鏄庣粏 List<DataStockDetail> stockDetails; //鎸囧畾鎵规 - if (!string.IsNullOrWhiteSpace(d.LotNo)) + if (!string.IsNullOrWhiteSpace(d.lotNo)) { - stockDetails = stockDetailList.Where(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo).ToList(); + stockDetails = stockDetailList.Where(s => s.SkuNo == d.skuNo && s.LotNo == d.lotNo).ToList(); if (stockDetails.Count < 1) { - throw new Exception($"搴撳瓨涓湭鏌ヨ鍒板嚭搴撶墿鏂欎俊鎭�:{d.SkuNo}"); + throw new Exception($"搴撳瓨涓湭鏌ヨ鍒板嚭搴撶墿鏂欎俊鎭�:{d.skuNo}"); } //鍒ゆ柇鏁伴噺 var qty = stockDetails.Sum(s => s.Qty - s.FrozenQty - s.LockQty); - if (d.Qty > qty) + if (d.skuQty > qty) { - throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}銆亄d.LotNo} 搴撳瓨鏁伴噺涓嶈冻"); + throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.skuNo}銆亄d.lotNo} 搴撳瓨鏁伴噺涓嶈冻"); } //搴撳瓨淇℃伅 - var stockInfo = stockList.First(w => w.SkuNo == d.SkuNo && w.LotNo == d.LotNo); + var stockInfo = stockList.First(w => w.SkuNo == d.skuNo && w.LotNo == d.lotNo); if (stockInfo == null) { - throw new Exception($"鎬诲簱瀛樹腑鏈煡璇㈠埌鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}"); + throw new Exception($"鎬诲簱瀛樹腑鏈煡璇㈠埌鍑哄簱鐗╂枡淇℃伅:{d.skuNo}"); } //鍒ゆ柇鎬诲簱瀛樻暟閲� - if (d.Qty > stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty) + if (d.skuQty > stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty) { - throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}銆亄d.LotNo} 搴撳瓨鏁伴噺涓嶈冻"); + throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.skuNo}銆亄d.lotNo} 搴撳瓨鏁伴噺涓嶈冻"); } //娣诲姞鍑哄簱鍗曟槑缁� var noticeDetail = new BllExportNoticeDetail() @@ -420,36 +420,36 @@ SkuNo = sku.SkuNo, SkuName = sku.SkuName, Standard = sku.Standard, - LotNo = d.LotNo, + LotNo = d.lotNo, LotText = stockInfo.LotText, - Qty = d.Qty, + Qty = d.skuQty, AllotQty = 0, FactQty = 0, CompleteQty = 0, PackagNo = sku.PackagNo, Price = sku.Price, - Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty, + Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.skuQty, IsBale = "", IsBelt = "", SupplierLot = stockInfo.SupplierLot, IsWave = "0", WaveNo = "", - IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo) ? "0" : "1", - IsMixBox = d.IsMixBox, + IsIssueLotNo = string.IsNullOrWhiteSpace(d.lotNo) ? "0" : "1", + IsMixBox = "0", - OrderDetailCode = d.OrderDetailCode, + OrderDetailCode = d.lineNo, CreateUser = 0, }; list.Add(noticeDetail); //鏇存柊搴撳瓨閿佸畾鏁伴噺 - stockInfo.LockQty += d.Qty; + stockInfo.LockQty += d.skuQty; var i = Db.Updateable(stockInfo).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); SoDetailInfo soDetail = new SoDetailInfo(); - soDetail.OrderDetailCode = d.OrderDetailCode; - soDetail.LockQty = d.Qty; - soDetail.LotNo = d.LotNo; + soDetail.OrderDetailCode = d.lineNo; + soDetail.LockQty = d.skuQty; + soDetail.LotNo = d.lotNo; soDetailList.Add(soDetail); } @@ -458,12 +458,12 @@ Dictionary<int, decimal> dic = new Dictionary<int, decimal>(); decimal q1 = 0; //棣栧厛鏌ヨ褰撳墠杩欑鐗╂枡鎵规鍙蜂负绌虹殑 - stockDetails = stockDetailList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList(); + stockDetails = stockDetailList.Where(s => s.SkuNo == d.skuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList(); if (stockDetails.Count > 0) { q1 = (decimal)stockDetails.Sum(s => s.Qty - s.FrozenQty - s.LockQty); //搴撳瓨淇℃伅 - var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(w.LotNo)); + var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.skuNo && string.IsNullOrWhiteSpace(w.LotNo)); if (stockInfo != null) { var q2 = stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty; @@ -471,29 +471,29 @@ { q1 = q2; } - if (d.Qty > q1) + if (d.skuQty > q1) { dic.Add(stockInfo.Id, q1); } else { - dic.Add(stockInfo.Id, d.Qty); + dic.Add(stockInfo.Id, d.skuQty); } } } //濡傛灉鎵规鍙蜂负绌虹殑鏁伴噺涓嶅锛屾牴鎹壒娆″厛杩涘厛鍑哄師鍒欐煡鎵惧叾瀹冩壒娆$殑 - if (d.Qty > q1) + if (d.skuQty > q1) { - stockDetails = stockDetailList.Where(m => m.SkuNo == d.SkuNo && !string.IsNullOrWhiteSpace(m.LotNo)).OrderBy(s => s.LotNo).ToList(); + stockDetails = stockDetailList.Where(m => m.SkuNo == d.skuNo && !string.IsNullOrWhiteSpace(m.LotNo)).OrderBy(s => s.LotNo).ToList(); foreach (var demo in stockDetails) { - if (q1 >= d.Qty) + if (q1 >= d.skuQty) { break; } var q2 = demo.Qty - demo.FrozenQty - demo.LockQty; //搴撳瓨淇℃伅 - var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.SkuNo && w.LotNo == demo.LotNo); + var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.skuNo && w.LotNo == demo.LotNo); if (stockInfo == null) { continue; @@ -508,18 +508,18 @@ { q2 = q3; } - if (q2 > d.Qty - q1) + if (q2 > d.skuQty - q1) { if (!dic.ContainsKey(stockInfo.Id)) { - dic.Add(stockInfo.Id, d.Qty - q1); + dic.Add(stockInfo.Id, d.skuQty - q1); } else { //鏇存柊鍊� - dic[stockInfo.Id] += d.Qty - q1; + dic[stockInfo.Id] += d.skuQty - q1; } - q1 += d.Qty - q1; + q1 += d.skuQty - q1; } else { @@ -536,9 +536,9 @@ } } } - if (d.Qty > q1) + if (d.skuQty > q1) { - throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo} 搴撳瓨鏁伴噺涓嶈冻"); + throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.skuNo} 搴撳瓨鏁伴噺涓嶈冻"); } foreach (var s in dic) { @@ -546,7 +546,7 @@ var item = new BllExportNoticeDetail() { SONo = billNo, - OrderDetailCode = d.OrderDetailCode, + OrderDetailCode = d.lineNo, SkuNo = sku.SkuNo, SkuName = sku.SkuName, Standard = sku.Standard, @@ -558,14 +558,14 @@ CompleteQty = 0, PackagNo = sku.PackagNo, Price = sku.Price, - Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty, + Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.skuQty, IsBale = "", IsBelt = "", SupplierLot = st.SupplierLot, IsWave = "0", WaveNo = "", - IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo) ? "0" : "1", - IsMixBox = d.IsMixBox, + IsIssueLotNo = string.IsNullOrWhiteSpace(d.lotNo) ? "0" : "1", + IsMixBox = "0", CreateUser = 0, }; @@ -575,7 +575,7 @@ var i = Db.Updateable(st).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); SoDetailInfo soDetail = new SoDetailInfo(); - soDetail.OrderDetailCode = d.OrderDetailCode; + soDetail.OrderDetailCode = d.lineNo; soDetail.LockQty = s.Value; soDetail.LotNo = st.LotNo; @@ -586,13 +586,13 @@ var notice = new BllExportNotice() { SONo = billNo, - OrderCode=model.OrderCode, - Type = model.SoType, + OrderCode=model.orderNo, + Type = model.orderType, Status = "0", Origin = "WMS", - CustomerNo = model.Customer, + CustomerNo = model.customerNo, CustomerName = CustomerName, - LogisticsId = logisticsId, + LogisticsId = null,//logisticsId, IsWave = "0", WaveNo = "", IsDespatch = "0", @@ -630,7 +630,7 @@ } //鍥炰紶鍑哄簱鍗� - public bool FinishSo(int id, string url, int userId) + public bool FinishSo(int id, string url, string url2, int userId) { try { @@ -652,34 +652,83 @@ { throw new Exception("澶嶆牳澶辫触锛屽鏍镐汉鍛樺拰鍏抽棴璁㈠崟浜哄憳涓嶈兘鐩稿悓锛�"); } - var list = new List<SoDetail>(); - foreach (var d in detail) + if (notice.Type == "2")//鎶芥鍑哄簱 { - var item = new SoDetail() + var list = new List<SendSampleSku>(); + foreach (var d in detail) { - SkuNo = d.SkuNo, - LotNo = d.LotNo, - Qty = (decimal)d.CompleteQty - }; - list.Add(item); - } - var soInfo = new SoInfo() - { - OrderCode = notice.OrderCode, - SoDetails = list - }; - #region 閫氳繃鎺ュ彛鍙戦�佽嚦erp - //绯荤粺瀵规帴鍚庢斁寮� - /*var jsonData = JsonConvert.SerializeObject(soInfo); + var item = new SendSampleSku() + { + skuNo = d.SkuNo, + skuName = d.SkuName, + lotNo = d.LotNo, + skuQty = Convert.ToDecimal(d.CompleteQty) + }; + list.Add(item); + } + SendSampleVm sendSampleVm = new SendSampleVm(); + sendSampleVm.pallDataList = list; - var response = HttpHelper.DoPost(url, jsonData, "鍑哄簱鍗曞畬鎴愪笂浼�", "ERP"); - - var obj = JsonConvert.DeserializeObject<ErpModel>(response);//瑙f瀽杩斿洖鏁版嵁 - if (obj.Success != 0) + SapSampleVm sapSampleVm = new SapSampleVm(); + sapSampleVm.data = sendSampleVm; + + #region 閫氳繃鎺ュ彛鍙戦�佽嚦erp + //绯荤粺瀵规帴鍚庢斁寮� + /*var jsonData = JsonConvert.SerializeObject(sapSampleVm); + + var response = HttpHelper.DoPost(url2, jsonData, "鎶芥鍑哄簱瀹屾垚涓婁紶", "ERP"); + + var obj = JsonConvert.DeserializeObject<ErpModel>(response);//瑙f瀽杩斿洖鏁版嵁 + if (obj.Success != 0) + { + throw new Exception("涓婁紶澶辫触" + obj.Message); + }*/ + #endregion + } + else { - throw new Exception("涓婁紶澶辫触" + obj.Message); - }*/ - #endregion + var list = new List<BackSoDetail>(); + foreach (var d in detail) + { + var mater = Db.Queryable<SysMaterials>().First(w => w.IsDel == "0" && w.SkuNo == d.SkuNo); + if (mater == null) + { + throw new Exception($"澶嶆牳澶辫触锛岀墿鏂欑紪鐮�:{d.SkuNo}鐨勭墿鏂欎俊鎭笉瀛樺湪"); + } + var item = new BackSoDetail() + { + POSNR = d.OrderDetailCode, + MATNR = d.SkuNo, + CHARG = d.LotNo, + LFIMG = d.CompleteQty.ToString(), + MEINS = mater.UnitNo, + HSDAT = "", + VFDAT = "" + }; + list.Add(item); + } + var soInfo = new BackSoVm() + { + ZUUID = Guid.NewGuid().ToString(), + VBELN = notice.OrderCode, + WERKS = notice.CustomerNo, + LFART = notice.Type, + WADAT_IST = Convert.ToDateTime(notice.CompleteTime).ToString("yyyy-MM-dd"), + ITEM = list + }; + #region 閫氳繃鎺ュ彛鍙戦�佽嚦erp + //绯荤粺瀵规帴鍚庢斁寮� + /*var jsonData = JsonConvert.SerializeObject(soInfo); + + var response = HttpHelper.DoPost(url, jsonData, "鍑哄簱鍗曞畬鎴愪笂浼�", "ERP"); + + var obj = JsonConvert.DeserializeObject<ErpModel>(response);//瑙f瀽杩斿洖鏁版嵁 + if (obj.Success != 0) + { + throw new Exception("涓婁紶澶辫触" + obj.Message); + }*/ + #endregion + } notice.Status = "6"; notice.CheckTime = DateTime.Now; @@ -1014,7 +1063,7 @@ skuList = skuList.Where(m => m.SkuNo == "100088").ToList(); } skuStrList = skuList.Select(m => m.SkuNo).ToList(); - var areaStr = new List<string>() { "B02", "B05", "B08" }; + var areaStr = new List<string>() { "B06", "B07", "B09" }; var stockRst = new StockServer(); var stockDetailRst = new StockDetailServer(); Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>() @@ -1998,7 +2047,7 @@ .AndIF(!string.IsNullOrWhiteSpace(model.BitPalletMark), m => m.BitPalletMark == model.BitPalletMark) .And(m => !string.IsNullOrWhiteSpace(m.WareHouseNo)) .And(a => a.Status == "0") - .And(a => a.WareHouseNo == "W01") + .And(a => a.WareHouseNo == "W02") .ToExpression(); var data = await Db.Queryable<DataStockDetail>().Where(item).OrderBy(m => m.LocatNo).ToPageListAsync(model.Page, model.Limit, count); //data.Select(m => m.Status == "0" && m.IsDel == "0"); @@ -2038,6 +2087,12 @@ if (detailGroup.Count > 1) { throw new Exception($"鏈湪搴撳唴鏌ヨ鍒拌鎵樼洏淇℃伅"); + } + + var locatStart = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == outMode && w.Status == "0"); + if (locatStart == null) + { + throw new Exception($"鐩爣鍌ㄤ綅涓嶅瓨鍦ㄦ垨闈炵┖闂诧紝璇锋鏌�"); } @@ -2151,14 +2206,16 @@ outDtoList.Add(new OutCommandDto() { + TaskNo = exTask.TaskNo, // 浠诲姟鍙� + TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱) + PalletNo = palletNo,//鎵樼洏鍙� StartLocate = locate.LocatNo, // 璧峰浣嶇疆 StartRoadway = locate.RoadwayNo, EndLocate = outMode, // 鐩爣浣嶇疆 - TaskNo = exTask.TaskNo, // 浠诲姟鍙� - TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱) - OutMode = outMode, //鐩爣鍦板潃 - Order = 1 + + Order = 999, + Type = PLCTypeEnum.AGV }); #endregion @@ -2179,6 +2236,8 @@ Db.Updateable(locate).ExecuteCommand(); + locatStart.Status = "2";//瑕佸叆搴撶殑鍌ㄤ綅鏀瑰彉鐘舵�� 姝e湪鍏ュ簱 + Db.Updateable(locate).ExecuteCommand(); #endregion //娣诲姞鎿嶄綔鏃ュ織璁板綍 @@ -3034,7 +3093,7 @@ foreach (var item in list) { var outModeLocate = ""; - if (outMode == "1") + if (outMode == "17") { if (i < outLocatelist1.Count) { @@ -3043,11 +3102,11 @@ else { var j = i % outLocatelist1.Count; - + outModeLocate = outLocatelist1[j].LocatNo; } } - else if(outMode == "2") + else if (outMode == "18") { if (i < outLocatelist1.Count) { @@ -3060,6 +3119,10 @@ outModeLocate = outLocatelist2[j].LocatNo; } } + else + { + throw new Exception("鍑哄簱鍙e伐浣嶅紓甯�"); + } var taskNoStr = ""; -- Gitblit v1.8.0