From f990f95a0b5aa099212116fa7d57b7ee2abcf863 Mon Sep 17 00:00:00 2001 From: Administrator <Administrator@DESKTOP-JIE70N9> Date: 星期五, 23 五月 2025 14:22:46 +0800 Subject: [PATCH] 拣货拼托问题修复 --- Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs | 202 +++++++++++++++++++++++++++++++++---------------- 1 files changed, 135 insertions(+), 67 deletions(-) diff --git a/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs b/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs index 5a9d722..93bbf2b 100644 --- a/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs +++ b/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs @@ -22,6 +22,7 @@ using WMS.Entity.BllAsnEntity; using System.Threading.Tasks; using Utility; +using WMS.BLL.Logic; namespace WMS.BLL.BllPdaServer { @@ -118,20 +119,20 @@ #region 鎷兼墭淇℃伅 var sdId = 0; bool isNew = false; - var pinStockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew); - if (pinStockDetail != null) + + var pinStockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.SkuNo == stockDetail.SkuNo && m.LotNo == stockDetail.LotNo); + + if (pinStockDetail != null) { - if (palletNo != palletNoNew)//闈炴暣鎵樻嫞璐� + if (palletNo != palletNoNew)//闈炴暣鎵樻嫞璐� { - if (pinStockDetail.SONo != notice.SONo) + var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Id!= pinStockDetail.Id).ToList(); + if (pinStockDetails.Count(m=>m.SONo != notice.SONo) > 0) { throw Oops.Bah("鎷兼墭鎵樼洏涓婂彧鑳芥斁鍚屼竴涓嚭搴撳崟涓嬬殑鐗╂枡锛�"); } - if (pinStockDetail.SkuName != stockDetail.SkuName || pinStockDetail.LotNo != stockDetail.LotNo) - { - isNew = true; - } } + sdId = pinStockDetail.Id; } else @@ -141,12 +142,17 @@ var newPalletInfo = await Db.Queryable<SysPallets>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0"); if (newPalletInfo == null) { - throw Oops.Bah("鏂版墭鐩樹俊鎭笉瀛樺湪鎴栧凡琚娇鐢紒"); + var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Id != pinStockDetail.Id).ToList(); + if (pinStockDetails.Count(m => m.SONo != notice.SONo) > 0) + { + throw Oops.Bah("鏂版墭鐩樹俊鎭笉瀛樺湪鎴栧凡琚娇鐢紒"); + } } //淇敼鏂版墭鐩樼姸鎬� newPalletInfo.Status = "1"; await Db.Updateable(newPalletInfo).ExecuteCommandAsync(); } + var sd = new DataStockDetail(); if (isNew) { @@ -189,7 +195,7 @@ sd.IsDel = "0"; sd.CreateUser = userId; sd.CreateTime = nowDate; - + sd.UDF5 = "1"; //鏂板鎷兼墭搴撳瓨鏄庣粏淇℃伅 sdId = await Db.Insertable(sd).ExecuteReturnIdentityAsync(); } @@ -269,6 +275,7 @@ if (palletNo != palletNoNew) { + var locateStr = stockDetail.LocatNo; //鍒犻櫎鍘熸墭鐩樺簱瀛樻槑缁� await Db.Deleteable(stockDetail).ExecuteCommandAsync(); @@ -280,10 +287,19 @@ } pallet.Status = "0"; await Db.Updateable(pallet).ExecuteCommandAsync(); + + //鏇存敼鍌ㄤ綅鐘舵�佷负绌哄偍浣� + var locate = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.LocatNo == locateStr); + if (locate != null) + { + locate.Status = "0"; + Db.Updateable(locate).ExecuteCommand(); + } } else { stockDetail.SONo = soNo; + stockDetail.UDF5 = "1"; await Db.Updateable(stockDetail).ExecuteCommandAsync(); } @@ -301,14 +317,13 @@ } else { - var biaoShi = "0";//0锛氭暣绠辨嫞璐с��1锛氭暎鏀嫞璐с��2锛氭暟閲忔嫞璐� List<DataBoxInfo> boxInfos; var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo); if (await boxInfo.CountAsync() == 0) { throw Oops.Bah("鏈煡璇㈠埌璇ョ鐮佺殑淇℃伅"); } - + boxInfos = boxInfo.ToList(); var comDetailList = await Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToListAsync(); //鏁寸鎷h揣 @@ -322,7 +337,7 @@ { throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鍓╀綑寰呮嫞鏁伴噺"); } - boxInfos = await boxInfo.ToListAsync(); + foreach (var item in boxInfos) { if (comDetailList.Any(m => m.BoxNo == item.BoxNo)) @@ -360,9 +375,13 @@ comList.Add(completeDetail); //淇敼搴撳瓨绠辩爜鏄庣粏 - item.StockDetailId = sdId; - item.BindNo = null;//鎵樼洏缁戝畾鍙� - item.PalletNo = palletNoNew; + if (palletNo != palletNoNew) + { + item.StockDetailId = sdId; + item.BindNo = null;//鎵樼洏缁戝畾鍙� + item.PalletNo = palletNoNew; + } + item.Status = "5";//绠辨敮鐘舵�侊紝0锛氭湭缁勬墭 1锛氬凡缁勬墭 2锛氬凡鍏ュ簱 3锛氬凡鍑哄簱 4:宸插垎閰� 5锛氬凡鎷h揣 await Db.Updateable(item).ExecuteCommandAsync(); @@ -382,6 +401,7 @@ stockDetail.BitPalletMark = "1";//淇敼涓洪浂鎵樻爣璇� stockDetail.Qty -= pickQty; stockDetail.LockQty -= pickQty; + stockDetail.UDF5 = "1"; if (stockDetail.Qty == stockDetail.LockQty) { stockDetail.Status = "2"; @@ -397,15 +417,9 @@ if (stockDetail.Qty <= 0) { + var locateStr = stockDetail.LocatNo; await Db.Deleteable(stockDetail).ExecuteCommandAsync(); - } - else - { - await Db.Updateable(stockDetail).ExecuteCommandAsync(); - } - var num2 = await Db.Queryable<DataStockDetail>().CountAsync(m => m.IsDel == "0" && m.PalletNo == palletNo); - if (num2 <= 0) - { + //鏀瑰彉鎵樼洏鐘舵�� var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0"); if (pallet == null) @@ -414,7 +428,20 @@ } pallet.Status = "0"; await Db.Updateable(pallet).ExecuteCommandAsync(); + + //鏇存敼鍌ㄤ綅鐘舵�佷负绌哄偍浣� + var locate = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.LocatNo == locateStr); + if (locate != null) + { + locate.Status = "0"; + Db.Updateable(locate).ExecuteCommand(); + } } + else + { + await Db.Updateable(stockDetail).ExecuteCommandAsync(); + } + //淇敼鍑哄簱鍗曟槑缁嗘嫞璐ф暟閲� noticeDetail.CompleteQty += pickQty; await Db.Updateable(noticeDetail).ExecuteCommandAsync(); @@ -542,18 +569,15 @@ #region 鎷兼墭淇℃伅 bool isNew = false; - var pinStockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew); + var pinStockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.SkuNo== stockDetail.SkuNo && m.LotNo == stockDetail.LotNo); if (pinStockDetail != null) { if (palletNo != palletNoNew)//闈炴暣鎵樻嫞璐� { - if (pinStockDetail.SONo != notice.SONo) + var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Id != pinStockDetail.Id).ToList(); + if (pinStockDetails.Count(m => m.SONo != notice.SONo) > 0) { throw Oops.Bah("鎷兼墭鎵樼洏涓婂彧鑳芥斁鍚屼竴涓嚭搴撳崟涓嬬殑鐗╂枡锛�"); - } - if (pinStockDetail.SkuName != stockDetail.SkuName || pinStockDetail.LotNo != stockDetail.LotNo) - { - isNew = true; } } } @@ -564,7 +588,11 @@ var newPalletInfo = await Db.Queryable<SysPallets>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0"); if (newPalletInfo == null) { - throw Oops.Bah("鏂版墭鐩樹俊鎭笉瀛樺湪鎴栧凡琚娇鐢紒"); + var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Id != pinStockDetail.Id).ToList(); + if (pinStockDetails.Count(m => m.SONo != notice.SONo) > 0) + { + throw Oops.Bah("鏂版墭鐩樹俊鎭笉瀛樺湪鎴栧凡琚娇鐢紒"); + } } //淇敼鏂版墭鐩樼姸鎬� newPalletInfo.Status = "1"; @@ -617,6 +645,7 @@ sd.IsDel = "0"; sd.CreateUser = userId; sd.CreateTime = nowDate; + sd.UDF5 = "1"; //鏂板鎷兼墭搴撳瓨鏄庣粏淇℃伅 await Db.Insertable(sd).ExecuteReturnIdentityAsync(); @@ -628,11 +657,13 @@ //淇敼鎷兼墭鎵樼洏搴撳瓨鏄庣粏 pinStockDetail.Qty += int.Parse(PickQty); pinStockDetail.LockQty += int.Parse(PickQty); + pinStockDetail.UDF5 = "1"; await Db.Updateable(pinStockDetail).ExecuteCommandAsync(); } else { pinStockDetail.SONo = soNo; + pinStockDetail.UDF5 = "1"; await Db.Updateable(pinStockDetail).ExecuteCommandAsync(); } } @@ -697,7 +728,7 @@ await Db.Updateable(allot).ExecuteCommandAsync(); int isDel = 0; - + var locateStr = stockDetail.LocatNo; if (palletNo != palletNoNew) { //鍒犻櫎鎴栦慨鏀瑰簱瀛樻槑缁� @@ -742,6 +773,15 @@ pallet.Status = "0"; await Db.Updateable(pallet).ExecuteCommandAsync(); + + //鏇存敼鍌ㄤ綅鐘舵�佷负绌哄偍浣� + var locate = Db.Queryable<SysStorageLocat>().First(m=>m.IsDel == "0" && m.LocatNo == locateStr); + if (locate!=null) + { + locate.Status = "0"; + Db.Updateable(locate).ExecuteCommand(); + } + } //淇敼鍑哄簱鍗曟槑缁嗘嫞璐ф暟閲� @@ -803,10 +843,10 @@ throw Oops.Bah("鎵樼洏鐮佷负绌猴紝璇疯緭鍏ユ墭鐩樼爜"); } var palletInfo = await Db.Queryable<DataStockDetail>().FirstAsync(w => w.IsDel == "0" && w.PalletNo == palletNo); - if (!string.IsNullOrEmpty(palletInfo.WareHouseNo) && type != "1") - { - throw Oops.Bah("璇ユ墭鐩樿繕鏈嚭搴�"); - } + //if (!string.IsNullOrEmpty(palletInfo.WareHouseNo) && type != "1") + //{ + // throw Oops.Bah("璇ユ墭鐩樿繕鏈嚭搴�"); + //} if (type == "1")//骞冲簱鍑哄簱鑾峰彇鍗曟嵁 { var allotList = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.Status == "1" && m.PalletNo == palletNo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync(); @@ -840,6 +880,25 @@ return allotList2; } + + public async Task<List<DetailIdSkuLotNo>> GetSoSkuLotNoListBySo(string soNo) + { + if (string.IsNullOrWhiteSpace(soNo))//鍒ゆ柇鎵樼洏鏄惁涓虹┖ + { + throw Oops.Bah("鍗曟嵁涓虹┖锛岃閫夋嫨鍗曟嵁"); + } + //鑾峰彇鐘舵�佷负寰呮嫞璐ф垨鑰呴儴鍒嗘嫞璐х殑鍑哄簱鍗� + var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SONo == soNo && (m.Status == "0" || m.Status == "1")); + + var list = await allotList.GroupBy(m => new { m.SODetailNo, m.SkuNo, m.SkuName, m.LotNo }).Select(m => new DetailIdSkuLotNo() + { + SoDetailId = m.SODetailNo, + SkuName = m.SkuName, + LotNo = m.LotNo, + }).ToListAsync(); + + return list; + } //鑾峰彇鍑哄簱鎵樼洏涓婄殑鐗╂枡鎵规(鏍规嵁鎵樼洏鐮�) public async Task<List<DetailIdSkuLotNo>> GetSoSkuLotNoListByPallet(string palletNo, string soNo) { @@ -1739,9 +1798,8 @@ //鑾峰彇褰撳墠鏃堕棿 DateTime serverTime = Db.GetDate(); //鑾峰彇搴撳瓨鏄庣粏鏄惁灏忎簬绛変簬璇ュ灈鏁� - //string str = "select * from DataStockDetail where IsDel = '0' and SkuNo = '100099' and Status = '0' "; - //var stockDetail = Db.Ado.SqlQuery<DataStockDetail>(str); - var stockDetail = await Db.Queryable<DataStockDetail>().Where(s => s.IsDel == "0" && s.SkuNo == "100099" && s.Status == "0").ToListAsync(); + + var stockDetail = await Db.Queryable<DataStockDetail>().Where(s => s.IsDel == "0" && s.SkuNo == "100099" && s.Status == "0" && !string.IsNullOrWhiteSpace(s.WareHouseNo)).ToListAsync(); if (stockDetail.Count > 0) { //鍒ゆ柇鏄惁澶т簬闇�瑕佸灈鏁� @@ -1766,21 +1824,22 @@ foreach (var s in stockDetail) { //鑾峰彇鍌ㄤ綅淇℃伅 - var locat = await Db.Queryable<SysStorageLocat>().FirstAsync(l => l.LocatNo == s.LocatNo && l.IsDel == "0" && l.WareHouseNo == "W01"); + var locat = await Db.Queryable<SysStorageLocat>().FirstAsync(l => l.LocatNo == s.LocatNo && l.IsDel == "0" && (l.WareHouseNo == "W01"||l.WareHouseNo == "W02")); - if (locat != null) + if (locat == null) { - if (locat.Status != "1") - { - continue; - } - //鏇存敼鍌ㄤ綅鐘舵�佷负鍑哄簱涓� - locat.Status = "3"; //3 鍑哄簱涓� - locat.UpdateTime = serverTime; //淇敼鏃堕棿 - locat.UpdateUser = userId; //淇敼浜� - //淇敼鍌ㄤ綅淇℃伅 - await Db.Updateable(locat).ExecuteCommandAsync(); + throw new Exception("鍌ㄤ綅涓婃病鏈夌┖鎵樼洏璺�"); } + if (locat.Status != "1") + { + continue; + } + //鏇存敼鍌ㄤ綅鐘舵�佷负鍑哄簱涓� + locat.Status = "3"; //3 鍑哄簱涓� + locat.UpdateTime = serverTime; //淇敼鏃堕棿 + locat.UpdateUser = userId; //淇敼浜� + //淇敼鍌ㄤ綅淇℃伅 + await Db.Updateable(locat).ExecuteCommandAsync(); //澧炲姞搴撳瓨閿佸畾鏁伴噺 //stock.AllotQty += @@ -1840,10 +1899,10 @@ { TaskNo = taskNo, Sender = "WMS", - Receiver = "PDA", + Receiver = "WCS", IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 - StartLocat = locat == null ? "闆剁搴�" : s.LocatNo,//璧峰浣嶇疆 + StartLocat = s.LocatNo,//璧峰浣嶇疆 EndLocat = model.OutMode,//鐩爣浣嶇疆 PalletNo = s.PalletNo,//鎵樼洏鐮� IsSend = 1,//鏄惁鍙啀娆′笅鍙� @@ -1854,19 +1913,28 @@ OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� CreateTime = serverTime, //鍒涘缓鏃堕棿 CreateUser = userId, //鍒涘缓浜� - Msg = "Pda绌烘墭浠�" + locat == null ? "闆剁搴�" : s.LocatNo + "鍒�" + model.OutMode + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 + Msg = "Pda绌烘墭浠�" + s.LocatNo + "鍒�" + model.OutMode + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 //FinishDate = serverTime, //瀹屾垚鏃堕棿 }; + var endroad = ""; + if (locat.WareHouseNo == "W01") + { + endroad = new AllotLocation().RoadwayToStationNum(locat.RoadwayNo, model.OutMode); + } + outDtoList.Add(new OutCommandDto() { - PalletNo = exTask.PalletNo,//鎵樼洏鍙� - StartLocate = exTask.StartLocat, // 璧峰浣嶇疆 - StartRoadway = locat.RoadwayNo, //鎵�灞炲贩閬� - EndLocate = "", // 鐩爣浣嶇疆 TaskNo = exTask.TaskNo, // 浠诲姟鍙� TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱) - OutMode = model.OutMode, //鐩爣鍦板潃 - Order = 1 + PalletNo = exTask.PalletNo,//鎵樼洏鍙� + + StartLocate = exTask.StartLocat, // 璧峰浣嶇疆 + StartRoadway = locat.RoadwayNo, //鎵�灞炲贩閬� + EndLocate = model.OutMode, // 鐩爣浣嶇疆 + EndRoadway = endroad, + + Order = 999, + Type = locat.WareHouseNo == "W01"?PLCTypeEnum.ShuttleCar : PLCTypeEnum.AGV }); await Db.Insertable(exTask).ExecuteCommandAsync(); @@ -1893,17 +1961,17 @@ var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss") ////瑙f瀽杩斿洖鏁版嵁 - var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); - if (wcsModel.StatusCode == 0) + var wcsModel = JsonConvert.DeserializeObject<WcsModel2>(response); + if (wcsModel.code == 200) { //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�// new TaskServer().EditTaskIssueOk(list2, time1, time2); //str += "涓嬪彂鎴愬姛"; } - if (wcsModel.StatusCode == -1) + else { - new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg); - throw Oops.Bah(wcsModel.Msg); + new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.message); + throw Oops.Bah(wcsModel.message); } } catch (AppFriendlyException e) @@ -1921,13 +1989,13 @@ var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "绌烘墭鍑哄簱", i + "", "涓嬪彂", $"鐢≒DA涓嬪彂浜� {i} 涓┖鎵樺灈", userId); Db.CommitTran(); - return ""; + return "鎴愬姛"; } catch (Exception e) { Db.RollbackTran(); - return ""; + throw new Exception(e.Message); } } -- Gitblit v1.8.0