From cbf4a8f42cd0d7e4ff994ee7f9b9e9c33b9c39c8 Mon Sep 17 00:00:00 2001 From: Demo <Demo@DESKTOP-CPA90BF> Date: 星期三, 13 三月 2024 19:32:29 +0800 Subject: [PATCH] PDA取样出库拣货 --- Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs | 1030 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 1,013 insertions(+), 17 deletions(-) diff --git a/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs b/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs index 049f241..785537c 100644 --- a/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs +++ b/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs @@ -243,7 +243,7 @@ foreach (var demo in list) { var com = comInfo.FirstOrDefault(m => m.IsDel == "0" && m.BoxNo3 == demo.BoxNo); - if (com!=null) + if (com != null) { demo.PickedQty = com.CompleteQty; } @@ -278,10 +278,73 @@ } } + //鑾峰彇搴撳唴鏃犵鐮佺殑鎵樼洏鍒嗛厤淇℃伅 + public List<BoxInfo> GetAllotPlnInfo(string soDetailId, string palletNo) + { + try + { + #region 鍒ゆ柇 + //鏍规嵁id鍙婃墭鐩樿幏鍙栧嚭搴撳崟鍜屾墭鐩樻嫞璐т俊鎭� + if (string.IsNullOrWhiteSpace(palletNo)) + { + throw new Exception("鎵樼洏鍙蜂笉鑳戒负绌�"); + } + //鑾峰彇瀵瑰簲鎵樼洏涓嬫槸鍚﹀瓨鍦ㄧ鐮佷俊鎭� + var boxInfo = Db.Queryable<DataBoxInfo>().First(b => b.IsDel == "0" && b.PalletNo == palletNo); + if (boxInfo != null) + { + throw new Exception($"{palletNo}鎵樼洏涓婂瓨鍦ㄧ鐮佷俊鎭紝鏃犳硶鍦ㄦ暟閲忔嫞璐ц繘琛屾搷浣滐紒"); + } + //鍑哄簱鍗曟槑缁� + var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(a => a.Id == int.Parse(soDetailId) && a.IsDel == "0"); + if (noticeDetail == null) + { + throw new Exception($"鏈煡璇㈠埌瀵瑰簲鍑哄簱鍗曟槑缁嗕俊鎭紝璇锋牳瀹烇紒"); + } + //鍑哄簱鍗曟�诲崟 + var notice = Db.Queryable<BllExportNotice>().First(a => a.IsDel == "0" && a.SONo == noticeDetail.SONo); + if (notice == null) + { + throw new Exception($"鏈煡璇㈠埌瀵瑰簲鍑哄簱鍗曟�诲崟淇℃伅锛岃鏍稿疄锛�"); + } + //鍒嗛厤淇℃伅 + var allot = Db.Queryable<BllExportAllot>().First(a => a.IsDel == "0" && a.SONo == notice.SONo && a.SODetailNo == noticeDetail.Id && a.PalletNo == palletNo && a.Status == "2" || a.Status == "3"); + if (allot == null) + { + throw new Exception($"鏈煡璇㈠埌瀵瑰簲鍒嗛厤淇℃伅锛岃鏍稿疄锛�"); + } + //搴撳瓨鏄庣粏 + var detail = Db.Queryable<DataStockDetail>().First(a => a.IsDel == "0" && a.PalletNo == palletNo); + if (detail == null) + { + throw new Exception($"鏈煡璇㈠埌搴撳瓨鏄庣粏淇℃伅锛岃鏍稿疄锛�"); + } + + #endregion + + List<BoxInfo> pdaInfo = new List<BoxInfo>(); + + BoxInfo info = new BoxInfo() + { + SkuNo = detail.SkuNo, + BoxNo = detail.SkuNo, + Qty = (int)allot.Qty, + PickedQty = (int)allot.CompleteQty, + }; + + pdaInfo.Add(info); + return pdaInfo; + + } + catch (Exception e) + { + throw new Exception(e.Message); + } + } //鍑哄簱pda鎷h揣 - public void SoSetPick(string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, int userId) + public void SoSetPick(string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, string pickQty1, int userId) { Db.BeginTran(); try @@ -300,7 +363,11 @@ { throw new Exception("鎵樼洏鐮佷笉鑳戒负绌�"); } - + if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0) + { + throw new Exception("杩芥函鏉$爜鍜屾嫞璐ф暟閲忎笉鑳藉悓鏃惰緭鍏�"); + } + //鍑哄簱鍗� var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo); if (notice == null) @@ -401,7 +468,7 @@ Db.Insertable(comList).ExecuteCommand(); //淇敼鍑哄簱鍒嗛厤淇℃伅 allot.CompleteQty += pickQty; - allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; + allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; Db.Updateable(allot).ExecuteCommand(); //鍒犻櫎搴撳瓨鏄庣粏 Db.Deleteable(stockDetail).ExecuteCommand(); @@ -439,7 +506,7 @@ } else { - var biaoShi = "0";//0锛氭暣绠辨嫞璐с��1锛氭暎鏀嫞璐� + var biaoShi = "0";//0锛氭暣绠辨嫞璐с��1锛氭暎鏀嫞璐с��2锛氭暟閲忔嫞璐� List<DataBoxInfo> boxInfos; var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo); if (boxInfo.Count() == 0) @@ -472,6 +539,24 @@ biaoShi = "1"; } + else if (!string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0)//鏁伴噺鎷h揣 + { + if (boxInfo.Count() > 1) + { + throw new Exception("璇ョ鐮佸唴瀛樺湪鏀爜涓嶈兘杩涜鏁伴噺鎷h揣"); + } + int boxQty = boxInfo.First().Qty; + if (Convert.ToInt32(pickQty1) > boxQty) + { + throw new Exception("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鏁伴噺"); + } + if (Convert.ToInt32(pickQty1) > needQty) + { + throw new Exception("鎷h揣鏁伴噺涓嶈兘澶т簬鍓╀綑寰呮嫞鏁伴噺"); + } + + biaoShi = "2"; + } else //鏁寸鎷h揣 { if (boxInfo.Count() == 0) @@ -493,7 +578,7 @@ var comList = new List<BllCompleteDetail>(); foreach (var item in boxInfos) { - if (comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) + if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) { throw new Exception($"褰撳墠{item.BoxNo}涓瓄item.BoxNo3}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷h揣"); } @@ -515,14 +600,31 @@ SkuName = allot.SkuName, Standard = allot.Standard, PalletNo = palletNo, - CompleteQty = item.Qty, + CompleteQty = biaoShi == "2" ? int.Parse(pickQty1) : item.Qty, CreateUser = userId }; comList.Add(completeDetail); - //鍒犻櫎搴撳瓨绠辩爜鏄庣粏 - Db.Deleteable(item).ExecuteCommand(); + if (biaoShi != "2") + { + //鍒犻櫎搴撳瓨绠辩爜鏄庣粏 + Db.Deleteable(item).ExecuteCommand(); + } + else//鏁伴噺鎷h揣 + { + if (int.Parse(pickQty1) == item.Qty) + { + //鍒犻櫎搴撳瓨绠辩爜鏄庣粏 + Db.Deleteable(item).ExecuteCommand(); + } + else + { + item.Qty -= int.Parse(pickQty1); + item.BitBoxMark = "1";//闆剁鏍囪瘑 + Db.Updateable(item).ExecuteCommand(); + } + } pickQty += item.Qty; } //鏀瑰彉搴撳唴绠辩爜鏄惁闆剁淇℃伅 @@ -606,6 +708,209 @@ //淇敼鍑哄簱鍗曚俊鎭� Db.Updateable(notice).ExecuteCommand(); } + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "鎷h揣鍑哄簱", soNo, "鎷h揣", $"鍦≒DA涓婂鍑哄簱鍗曞彿涓猴細{soNo}鐨勬墭鐩樼爜涓猴細{palletNo}鐨勬嫞璐ф搷浣�", userId); + Db.CommitTran(); + } + catch (Exception e) + { + Db.RollbackTran(); + throw new Exception(e.Message); + } + } + + //鍑哄簱pda鎷h揣 + public void SoSetQtyPick(string soNo, string soDetailId, string palletNo, string PickQty, int userId) + { + Db.BeginTran(); + try + { + #region 鍒ゆ柇 + + if (string.IsNullOrWhiteSpace(soNo)) + { + throw new Exception("鍑哄簱鍗曟嵁涓嶈兘涓虹┖"); + } + //if (string.IsNullOrWhiteSpace(soDetailId)) + //{ + // throw new Exception("鍑哄簱鐗╂枡-鎵规涓嶈兘涓虹┖"); + //} + if (string.IsNullOrWhiteSpace(palletNo)) + { + throw new Exception("鎵樼洏鐮佷笉鑳戒负绌�"); + } + + //鍑哄簱鍗� + var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo); + if (notice == null) + { + throw new Exception("鏈煡璇㈠埌璇ュ嚭搴撳崟鐨勪俊鎭�"); + } + if (notice.Status != "3") + { + throw new Exception("鍑哄簱鍗曠殑鐘舵�佷笉鏄鍦ㄦ墽琛岋紝涓嶈兘鎷h揣"); + } + //鍑哄簱鍗曟槑缁� + var noticeDetail = Db.Queryable<BllExportNoticeDetail>() + .First(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); + if (noticeDetail == null) + { + throw new Exception("鏈煡璇㈠埌璇ュ嚭搴撳崟鏄庣粏鐨勪俊鎭�"); + } + //鍑哄簱鍒嗛厤淇℃伅 + var allot = Db.Queryable<BllExportAllot>().First(m => + m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.SONo == soNo && + m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo); + if (allot == null) + { + throw new Exception("鏈煡璇㈠埌璇ユ墭鐩樼殑鍒嗛厤淇℃伅"); + } + //鍓╀綑鎷h揣鏁伴噺锛堝緟鎷e噺鍘诲凡鎷o級 + var needQty = allot.Qty - allot.CompleteQty; + if (int.Parse(PickQty) > needQty) + { + throw new Exception("鎷h揣鏁伴噺涓嶈兘澶т簬鎵樺唴鍓╀綑寰呮嫞鏁伴噺"); + } + + //搴撳瓨鏄庣粏 + var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId); + if (stockDetail == null) + { + throw new Exception("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨鏄庣粏淇℃伅锛�"); + } + //搴撳瓨鎬昏〃 + var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); + if (stock == null) + { + throw new Exception("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨淇℃伅锛�"); + } + #endregion + //鑾峰彇褰撳墠鎵樼洏鎷h揣鏄庣粏 + var complete = Db.Queryable<BllCompleteDetail>().First(a => a.IsDel == "0" && a.PalletNo == palletNo && a.SONo == notice.SONo && a.SODetailNo == noticeDetail.Id && a.ExportAllotId == allot.Id && a.StockId == stockDetail.Id); + + //鍒よ鏄惁瀛樺湪鎷h揣鏄庣粏 + int isComplete = 0; + if (complete != null) + { + isComplete = 1; + } + + var comList = new List<BllCompleteDetail>(); + //鍒ゆ柇鏄惁瀛樺湪鎷h揣鏄庣粏 + if (isComplete == 0) + { + //娣诲姞鎷h揣鏄庣粏 + var completeDetail = new BllCompleteDetail() + { + SONo = soNo, + SODetailNo = int.Parse(soDetailId), + ExportAllotId = allot.Id, + StockId = allot.StockId, + BoxNo = "", + BoxNo2 = "", + BoxNo3 = "", + + LotNo = allot.LotNo, + LotText = allot.LotText, + SupplierLot = allot.SupplierLot, + SkuNo = allot.SkuNo, + SkuName = allot.SkuName, + Standard = allot.Standard, + PalletNo = palletNo, + CompleteQty = int.Parse(PickQty), + + CreateUser = userId, + CreateTime = Db.GetDate(), + }; + comList.Add(completeDetail); + + //娣诲姞鎷h揣鏄庣粏 + Db.Insertable(comList).ExecuteCommand(); + } + else if (isComplete == 1) + { + complete.CompleteQty += int.Parse(PickQty); + complete.UpdateUser = userId; + complete.UpdateTime = Db.GetDate(); + + Db.Updateable(complete).ExecuteCommand(); + } + + + + //淇敼鍑哄簱鍒嗛厤淇℃伅 + allot.CompleteQty += int.Parse(PickQty); + allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; + Db.Updateable(allot).ExecuteCommand(); + + int isDel = 0; + + //鍒犻櫎鎴栦慨鏀瑰簱瀛樻槑缁� + stockDetail.BitPalletMark = "1";//淇敼涓洪浂鎵樻爣璇� + stockDetail.Qty -= int.Parse(PickQty); + stockDetail.LockQty -= int.Parse(PickQty); + if (stockDetail.Qty == stockDetail.LockQty) + { + stockDetail.Status = "2"; + } + else if (stockDetail.Qty > stockDetail.LockQty && stockDetail.LockQty > 0) + { + stockDetail.Status = "1"; + } + else + { + stockDetail.Status = "0"; + } + if (stockDetail.Qty <= 0) + { + Db.Deleteable(stockDetail).ExecuteCommand(); + } + else + { + isDel = 1; + Db.Updateable(stockDetail).ExecuteCommand(); + } + //鍒犻櫎鎴栦慨鏀瑰簱瀛� + stock.Qty -= int.Parse(PickQty); + stock.LockQty -= int.Parse(PickQty); + if (stock.Qty <= 0) + { + Db.Deleteable(stock).ExecuteCommand(); + } + else + { + Db.Updateable(stock).ExecuteCommand(); + } + + //鏀瑰彉鎵樼洏鐘舵�佷负锛氭湭浣跨敤 + var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); + if (pallet == null) + { + throw new Exception("鏈湪鎵樼洏琛ㄤ腑鏌ヨ鍒版墭鐩樹俊鎭�"); + } + + //鍒ゆ柇鎵樼洏涓婄墿鏂欐槸鍚︽嫞璐у畬姣� + if (isDel == 0) + { + pallet.Status = "0"; + Db.Updateable(pallet).ExecuteCommand(); + } + + //淇敼鍑哄簱鍗曟槑缁嗘嫞璐ф暟閲� + noticeDetail.CompleteQty += int.Parse(PickQty); + Db.Updateable(noticeDetail).ExecuteCommand(); + + var num = Db.Queryable<BllExportNoticeDetail>() + .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); + if (num <= 0) + { + notice.Status = "4"; //鏇存敼涓烘墽琛屽畬鎴� + } + //淇敼鍑哄簱鍗曚俊鎭� + Db.Updateable(notice).ExecuteCommand(); + + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "鎷h揣鍑哄簱", soNo, "鎷h揣", $"鍦≒DA涓婂鍑哄簱鍗曞彿涓猴細{soNo}鐨勬墭鐩樼爜涓猴細{palletNo}鐨勬嫞璐ф搷浣�", userId); Db.CommitTran(); } catch (Exception e) @@ -623,7 +928,7 @@ /// <param name="url"> </param> /// <returns></returns> /// <exception cref="Exception"></exception> - public string IssuePlnOutHouse(OutModePalletVm model, int userId,string url) + public string IssuePlnOutHouse(OutModePalletVm model, int userId, string url) { try { @@ -637,7 +942,7 @@ if (stockDetail.Count > 0) { //鍒ゆ柇鏄惁澶т簬闇�瑕佸灈鏁� - if (stockDetail.Count< int.Parse(model.Num)) + if (stockDetail.Count < int.Parse(model.Num)) { strMsg = "闇�瑕佸灈鏁板ぇ浜庡簱瀛樺灈鏁帮紝璇烽噸鏂拌緭鍏�!"; return strMsg; @@ -692,7 +997,7 @@ s.Status = "2"; //2 宸插垎閰� //淇敼搴撳瓨鏄庣粏淇℃伅 Db.Updateable(s).ExecuteCommand(); - + #region 鍒嗛厤 //娣诲姞鍒嗛厤琛ㄤ俊鎭� @@ -726,7 +1031,7 @@ Db.Insertable(allot).ExecuteCommand(); #endregion - + #region 娣诲姞鍑哄簱浠诲姟淇℃伅 var taskNo = new Common().GetMaxNo("TK"); @@ -792,7 +1097,7 @@ { //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�// new TaskServer().EditTaskIssueOk(list2, time1, time2); - str += "涓嬪彂鎴愬姛"; + str += "涓嬪彂鎴愬姛"; } if (wcsModel.StatusCode == -1) { @@ -808,7 +1113,7 @@ } //娣诲姞鎿嶄綔鏃ュ織璁板綍 - var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "绌烘墭鍑哄簱", i+"", "涓嬪彂", $"鐢≒DA涓嬪彂浜� {i} 涓┖鎵樺灈", userId); + var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "绌烘墭鍑哄簱", i + "", "涓嬪彂", $"鐢≒DA涓嬪彂浜� {i} 涓┖鎵樺灈", userId); Db.CommitTran(); return ""; @@ -881,7 +1186,7 @@ throw new Exception("搴撳瓨淇℃伅涓笉瀛樺湪璇ユ墭鐩樹俊鎭紝璇锋鏌�!"); } - if (result.WareHouseNo!="W02")//W02锛氶浂绠卞簱 + if (result.WareHouseNo != "W02")//W02锛氶浂绠卞簱 { throw new Exception("璇ユ墭鐩樻湭鍦ㄩ浂绠卞簱锛岃妫�鏌�!"); } @@ -889,7 +1194,7 @@ #endregion //鑾峰彇搴撳瓨鏄庣粏淇℃伅 - var stockDetail = Db.Queryable<DataStockDetail>().Where(s => s.IsDel == "0" && s.PalletNo == palletNo).ToList(); + var stockDetail = Db.Queryable<DataStockDetail>().Where(s => s.IsDel == "0" && s.PalletNo == palletNo).ToList(); //楠岃瘉搴撳瓨鏄庣粏淇℃伅鏄惁瀛樺湪 if (stockDetail == null) { @@ -977,5 +1282,696 @@ throw new Exception(e.Message); } } + + //鏍规嵁鎵樼洏鍙疯幏鍙栧彇鏍风被鍨� + public string GetSampleType(string palletNo) + { + try + { + var type = ""; + var detail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNo); + if (detail== null) + { + throw new Exception("褰撳墠鎵樼洏鏈湪搴撳瓨涓�"); + } + //鎬庝箞鍒ゆ柇褰撳墠鎵樼洏鏄簱澶栬鍙栨牱鐨勬墭鐩橈紝姝e父鍑哄簱鍓╀綑鎵樼洏鐩墠杩欑鎯呭喌涔熻兘鎷h揣鍟婏紝涔熸病鏈夊垎閰嶄俊鎭� + var allot = Db.Queryable<BllExportAllot>().First(m => + m.IsDel == "0" && m.PalletNo == palletNo && m.Status != "5" && m.Status != "6"); + if (allot!=null) + { + var soNo = Db.Queryable<BllExportNotice>() + .First(m => m.IsDel == "0" && m.SONo == allot.SONo); + if (soNo == null) + { + throw new Exception("鏈壘鍒版墭鐩樹笂鍑哄簱鍗曟嵁淇℃伅"); + } + if (soNo.Type != "3") + { + throw new Exception("璇ユ墭鐩樹笉鏄彇鏍锋墭鐩�"); + } + type = "0";//搴撳唴鍙栨牱 + } + else + { + //鍒ゆ柇褰撳墠鎵樼洏鏄惁鏄湪骞冲簱鎴栧簱澶� + type = "1";//搴撳墠鍙栨牱 + } + return type; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + } + + //鏍规嵁鎵樼洏鍙疯幏鍙栧叆搴撳崟鎹� + public List<string> GetAsnNoByPallet(string palletNo) + { + try + { + var type = ""; + var detail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNo); + if (detail == null) + { + throw new Exception("褰撳墠鎵樼洏鏈湪搴撳瓨涓�"); + } + + var list = new List<string>(); + if (string.IsNullOrWhiteSpace(detail.ASNNo)) + { + throw new Exception("鏈煡璇㈠埌璇ユ墭鐩樼殑鍏ュ簱鍗曚俊鎭�"); + } + list.Add(detail.ASNNo); + return list; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + } + + //鍙栨牱鍑哄簱鎷h揣(鏍囩) + public void SampleSoSetPick(string soType,string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, string pickQty1, string asnNo, int userId) + { + Db.BeginTran(); + try + { + if (string.IsNullOrWhiteSpace(soType)) + { + throw new Exception("鍙栨牱鏍囪瘑涓嶈兘涓虹┖"); + } + + //soType: 0搴撳唴鍙栨牱锛屾湁鍑哄簱鍗曞強鍒嗛厤淇℃伅锛� 1搴撳墠鍙栨牱锛屽弽鍚戞坊鍔犲嚭搴撳崟鍙婂垎閰嶄俊鎭� + if (soType == "1") + { + + #region 鍒ゆ柇 + + if (string.IsNullOrWhiteSpace(asnNo)) + { + throw new Exception("鍏ュ簱鍗曚笉鑳戒负绌�"); + } + if (string.IsNullOrWhiteSpace(palletNo)) + { + throw new Exception("鎵樼洏鐮佷笉鑳戒负绌�"); + } + if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0) + { + throw new Exception("杩芥函鏉$爜鍜屾嫞璐ф暟閲忎笉鑳藉悓鏃惰緭鍏�"); + } + //鍏堝垽鏂槸鍚︽槸搴撳鍙栨牱鎵樼洏 + var allot = Db.Queryable<BllExportAllot>().First(m => + m.IsDel == "0" && m.PalletNo == palletNo && m.Status != "5" && m.Status != "6"); + if (allot != null) + { + throw new Exception("褰撳墠鎵樼洏涓嶅睘浜庡簱鍓嶅彇鏍�"); + } + + + //搴撳瓨鏄庣粏 + var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.ASNNo == asnNo && m.PalletNo == palletNo); + if (stockDetail == null) + { + throw new Exception("鏈煡璇㈠埌璇ユ墭鐩樼殑搴撳瓨鏄庣粏淇℃伅锛�"); + } + + var sku = Db.Queryable<SysMaterials>().First(m=>m.IsDel == "0" && m.SkuNo == stockDetail.SkuNo); + if (sku == null) + { + throw new Exception("鏈煡璇㈠埌褰撳墠鎵樼洏涓婄殑鐗╂枡淇℃伅"); + } + //搴撳瓨鎬昏〃 + var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); + if (stock == null) + { + throw new Exception("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨淇℃伅锛�"); + } + + //鍑哄簱鍗� + var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.AsnSampleNo == asnNo); + //鍒涘缓鍑哄簱鍗� + if (notice == null || (notice != null && notice.Status != "6")) + { + var billNo = ""; + var bl = true; + do + { + //鑾峰彇鑷鍗曟嵁鍙� + billNo = new Common().GetMaxNo("SO"); + var no = billNo; + bl = Db.Queryable<BllExportNotice>().Any(m => m.SONo == no); + } while (bl); + + + var addNotice = new BllExportNotice() + { + SONo = billNo, + Type = "3", + Status = "4", + Origin = "WMS", + + IsWave = "0", + WaveNo = "", + IsDespatch = "0", + CompleteTime = DateTime.Now, + CreateUser = 0, + }; + + var n = Db.Insertable(addNotice).ExecuteCommand(); + notice = addNotice; + } + + //鍒涘缓鍑哄簱鍗曟槑缁� + var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.SONo == notice.SONo && m.SkuNo == stockDetail.SkuNo && m.LotNo.Contains(stockDetail.LotNo)); + if (noticeDetail == null) + { + var addNoticeDetail = new BllExportNoticeDetail() + { + SONo = notice.SONo, + SkuNo = sku.SkuNo, + SkuName = sku.SkuName, + Standard = sku.Standard, + LotNo = stockDetail.LotNo, + LotText = "", + Qty = 0, + AllotQty = 0, + FactQty = 0, + CompleteQty = 0, + PackagNo = sku.PackagNo, + Price = sku.Price, + //Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * pickQty, + IsBale = "", + IsBelt = "", + SupplierLot = stock.SupplierLot, + IsWave = "0", + WaveNo = "", + IsIssueLotNo = "0", + Status = "3", + CreateUser = 0, + }; + var m = Db.Insertable(addNoticeDetail).ExecuteCommand(); + noticeDetail = addNoticeDetail; + } + //鍑哄簱鍒嗛厤淇℃伅 + var allot2 = Db.Queryable<BllExportAllot>().First(m => m.IsDel == "0" && m.Status == "5" && m.SONo == notice.SONo && m.PalletNo == palletNo); + if (allot2 == null) + { + //娣诲姞鍒嗛厤琛ㄤ俊鎭� + var addAllot = new BllExportAllot + { + SONo = notice.SONo, + WaveNo = "", + SODetailNo = noticeDetail.Id, + StockId = stockDetail.Id, + LotNo = stockDetail.LotNo, + LotText = stockDetail.LotText, + SupplierLot = stockDetail.SupplierLot, + SkuNo = sku.SkuNo, + SkuName = sku.SkuName, + Standard = sku.Standard, + PalletNo = palletNo, + IsBale = "0" , //鏄惁瑁瑰寘 + IsBelt = "0" , //鏄惁鎵撳甫 + + Qty = 0, + CompleteQty = 0, + + Status = "5", + LogisticsId = notice.LogisticsId, + IsAdvance = "0", + OutMode = "",//鍑哄簱鍙� + + CreateUser = userId, + CreateTime = DateTime.Now + }; + + var fp = Db.Insertable(addAllot).ExecuteCommand(); + allot2 = addAllot; + } + + + #endregion + + + //鍒ゆ柇鏄暎鏀嫞璐ц繕鏄暟閲忔嫞璐� + var biaoShi = "0";//0锛氭暣绠辨嫞璐с��1锛氭暎鏀嫞璐с��2锛氭暟閲忔嫞璐� + List<DataBoxInfo> boxInfos; + var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo); + if (boxInfo.Count() == 0) + { + throw new Exception("鏈煡璇㈠埌璇ョ鐮佸強杩芥函鐮佺殑淇℃伅"); + } + boxInfos = boxInfo.ToList(); + + if (!string.IsNullOrWhiteSpace(boxNo3)) //鏁f敮鎷h揣 + { + boxInfos = boxInfos.Where(m => m.BoxNo3 == boxNo3).ToList(); + + if (boxInfos.Count() == 0) + { + throw new Exception("鏈煡璇㈠埌璇ョ鐮佸強杩芥函鐮佺殑淇℃伅"); + } + if (boxInfos.Count() > 1) + { + throw new Exception("璇ヨ拷婧敮鐮佺殑淇℃伅澶т簬1鏉★紝淇℃伅閿欒锛岃鏍稿疄锛�"); + } + + if (boxInfos.Any(m => m.PalletNo != palletNo)) + { + throw new Exception("璇ユ墭鐩樹笌绠辩爜娌℃湁缁戝畾鍏崇郴"); + } + + biaoShi = "1"; + } + else if (!string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0)//鏁伴噺鎷h揣 + { + if (boxInfo.Count() > 1) + { + throw new Exception("璇ョ鐮佸唴瀛樺湪鏀爜涓嶈兘杩涜鏁伴噺鎷h揣"); + } + int boxQty = boxInfo.First().Qty; + if (Convert.ToInt32(pickQty1) > boxQty) + { + throw new Exception("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鏁伴噺"); + } + + biaoShi = "2"; + } + else //鏁寸鎷h揣 + { + if (boxInfo.Count() == 0) + { + throw new Exception("鏈煡璇㈠埌璇ョ鐮佺殑淇℃伅"); + } + if (boxInfo.Any(m => m.PalletNo != palletNo)) + { + throw new Exception("璇ユ墭鐩樹笌绠辩爜娌℃湁缁戝畾鍏崇郴"); + } + + } + var pickQty = 0;//鎷h揣鐨勬暟閲� + var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToList(); + var comList = new List<BllCompleteDetail>(); + foreach (var item in boxInfos) + { + if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) + { + throw new Exception($"褰撳墠{item.BoxNo}涓瓄item.BoxNo3}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷h揣"); + } + //娣诲姞鎷h揣鏄庣粏 + var completeDetail = new BllCompleteDetail() + { + SONo = soNo, + SODetailNo = int.Parse(soDetailId), + ExportAllotId = allot.Id, + StockId = allot.StockId, + BoxNo = item.BoxNo, + BoxNo2 = item.BoxNo2, + BoxNo3 = item.BoxNo3, + + LotNo = allot.LotNo, + LotText = allot.LotText, + SupplierLot = allot.SupplierLot, + SkuNo = allot.SkuNo, + SkuName = allot.SkuName, + Standard = allot.Standard, + PalletNo = palletNo, + CompleteQty = biaoShi == "2" ? int.Parse(pickQty1) : item.Qty, + InspectMark = "1", + + CreateUser = userId + }; + comList.Add(completeDetail); + + if (biaoShi != "2") + { + //鍒犻櫎搴撳瓨绠辩爜鏄庣粏 + Db.Deleteable(item).ExecuteCommand(); + } + else//鏁伴噺鎷h揣 + { + if (int.Parse(pickQty1) == item.Qty) + { + //鍒犻櫎搴撳瓨绠辩爜鏄庣粏 + Db.Deleteable(item).ExecuteCommand(); + } + else + { + item.Qty -= int.Parse(pickQty1); + item.BitBoxMark = "1";//闆剁鏍囪瘑 + item.InspectMark = "1";//鎶芥绠辨爣璇� + Db.Updateable(item).ExecuteCommand(); + } + } + pickQty += item.Qty; + } + + + //鏀瑰彉搴撳唴绠辩爜鏄惁闆剁淇℃伅 + if (biaoShi == "1") + { + var boxSurplusList = boxInfo.Where(m => m.BoxNo3 != boxNo3).ToList(); + foreach (var item in boxSurplusList) + { + item.BitBoxMark = "1"; + item.InspectMark = "1"; + Db.Updateable(item).ExecuteCommand(); + } + } + + Db.Insertable(comList).ExecuteCommand(); + //淇敼鍑哄簱鍒嗛厤淇℃伅 + allot2.Qty += pickQty; + allot2.CompleteQty += pickQty; + Db.Updateable(allot).ExecuteCommand(); + + //鍒犻櫎鎴栦慨鏀瑰簱瀛樻槑缁� + stockDetail.BitPalletMark = "1";//淇敼涓洪浂鎵樻爣璇� + stockDetail.Qty -= pickQty; + + if (stockDetail.Qty <= 0) + { + Db.Deleteable(stockDetail).ExecuteCommand(); + } + else + { + Db.Updateable(stockDetail).ExecuteCommand(); + } + stock.Qty -= pickQty; + if (stock.Qty <= 0) + { + Db.Deleteable(stock).ExecuteCommand(); + } + else + { + Db.Updateable(stock).ExecuteCommand(); + } + var num2 = Db.Queryable<DataStockDetail>().Count(m => m.IsDel == "0" && m.PalletNo == palletNo); + if (num2 <= 0) + { + //鏀瑰彉鎵樼洏鐘舵�� + var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); + if (pallet == null) + { + throw new Exception("鏈湪鎵樼洏琛ㄤ腑鏌ヨ鍒版墭鐩樹俊鎭�"); + } + pallet.Status = "0"; + Db.Updateable(pallet).ExecuteCommand(); + } + //淇敼鍑哄簱鍗曟槑缁嗘嫞璐ф暟閲� + noticeDetail.Qty += pickQty; + noticeDetail.AllotQty += pickQty; + noticeDetail.FactQty += pickQty; + noticeDetail.CompleteQty += pickQty; + Db.Updateable(noticeDetail).ExecuteCommand(); + + var num = Db.Queryable<BllExportNoticeDetail>() + .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); + if (num <= 0) + { + notice.Status = "4"; //鏇存敼涓烘墽琛屽畬鎴� + } + //淇敼鍑哄簱鍗曚俊鎭� + Db.Updateable(notice).ExecuteCommand(); + + } + else if(soType == "0") + { + #region 鍒ゆ柇 + + if (string.IsNullOrWhiteSpace(soNo)) + { + throw new Exception("鍑哄簱鍗曟嵁涓嶈兘涓虹┖"); + } + if (string.IsNullOrWhiteSpace(soDetailId)) + { + throw new Exception("鍑哄簱鐗╂枡-鎵规涓嶈兘涓虹┖"); + } + if (string.IsNullOrWhiteSpace(palletNo)) + { + throw new Exception("鎵樼洏鐮佷笉鑳戒负绌�"); + } + if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0) + { + throw new Exception("杩芥函鏉$爜鍜屾嫞璐ф暟閲忎笉鑳藉悓鏃惰緭鍏�"); + } + + //鍑哄簱鍗� + var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo); + if (notice == null) + { + throw new Exception("鏈煡璇㈠埌璇ュ嚭搴撳崟鐨勪俊鎭�"); + } + if (notice.Status != "3") + { + throw new Exception("鍑哄簱鍗曠殑鐘舵�佷笉鏄鍦ㄦ墽琛岋紝涓嶈兘鎷h揣"); + } + //鍑哄簱鍗曟槑缁� + var noticeDetail = Db.Queryable<BllExportNoticeDetail>() + .First(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); + if (noticeDetail == null) + { + throw new Exception("鏈煡璇㈠埌璇ュ嚭搴撳崟鏄庣粏鐨勪俊鎭�"); + } + //鍑哄簱鍒嗛厤淇℃伅 + var allot = Db.Queryable<BllExportAllot>().First(m => + m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.SONo == soNo && + m.SODetailNo == int.Parse(soDetailId) && m.PalletNo == palletNo); + if (allot == null) + { + throw new Exception("鏈煡璇㈠埌璇ユ墭鐩樼殑鍒嗛厤淇℃伅"); + } + //鍓╀綑鎷h揣鏁伴噺锛堝緟鎷e噺鍘诲凡鎷o級 + var needQty = allot.Qty - allot.CompleteQty; + + //搴撳瓨鏄庣粏 + var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId); + if (stockDetail == null) + { + throw new Exception("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨鏄庣粏淇℃伅锛�"); + } + //搴撳瓨鎬昏〃 + var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); + if (stock == null) + { + throw new Exception("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨淇℃伅锛�"); + } + + #endregion + + var biaoShi = "0";//0锛氭暣绠辨嫞璐с��1锛氭暎鏀嫞璐с��2锛氭暟閲忔嫞璐� + List<DataBoxInfo> boxInfos; + var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo); + if (boxInfo.Count() == 0) + { + throw new Exception("鏈煡璇㈠埌璇ョ鐮佸強杩芥函鐮佺殑淇℃伅"); + } + boxInfos = boxInfo.ToList(); + if (!string.IsNullOrWhiteSpace(boxNo3)) //鏁f敮鎷h揣 + { + boxInfos = boxInfos.Where(m => m.BoxNo3 == boxNo3).ToList(); + + if (boxInfos.Count() == 0) + { + throw new Exception("鏈煡璇㈠埌璇ョ鐮佸強杩芥函鐮佺殑淇℃伅"); + } + if (boxInfos.Count() > 1) + { + throw new Exception("璇ヨ拷婧敮鐮佺殑淇℃伅澶т簬1鏉★紝淇℃伅閿欒锛岃鏍稿疄锛�"); + } + + if (boxInfos.Any(m => m.PalletNo != palletNo)) + { + throw new Exception("璇ユ墭鐩樹笌绠辩爜娌℃湁缁戝畾鍏崇郴"); + } + var boxQty = boxInfos.First().Qty; + if (boxQty > needQty) + { + throw new Exception("鎷h揣鏁伴噺涓嶈兘澶т簬鍓╀綑寰呮嫞鏁伴噺"); + } + + biaoShi = "1"; + } + else if (!string.IsNullOrEmpty(pickQty1) && int.Parse(pickQty1) > 0)//鏁伴噺鎷h揣 + { + if (boxInfo.Count() > 1) + { + throw new Exception("璇ョ鐮佸唴瀛樺湪鏀爜涓嶈兘杩涜鏁伴噺鎷h揣"); + } + int boxQty = boxInfo.First().Qty; + if (Convert.ToInt32(pickQty1) > boxQty) + { + throw new Exception("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鏁伴噺"); + } + if (Convert.ToInt32(pickQty1) > needQty) + { + throw new Exception("鎷h揣鏁伴噺涓嶈兘澶т簬鍓╀綑寰呮嫞鏁伴噺"); + } + + biaoShi = "2"; + } + else //鏁寸鎷h揣 + { + if (boxInfo.Count() == 0) + { + throw new Exception("鏈煡璇㈠埌璇ョ鐮佺殑淇℃伅"); + } + if (boxInfo.Any(m => m.PalletNo != palletNo)) + { + throw new Exception("璇ユ墭鐩樹笌绠辩爜娌℃湁缁戝畾鍏崇郴"); + } + var boxQty = boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToList(); + if (boxQty[0] > needQty) + { + throw new Exception("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鍓╀綑寰呮嫞鏁伴噺"); + } + } + var pickQty = 0;//鎷h揣鐨勬暟閲� + var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToList(); + var comList = new List<BllCompleteDetail>(); + foreach (var item in boxInfos) + { + if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) + { + throw new Exception($"褰撳墠{item.BoxNo}涓瓄item.BoxNo3}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷h揣"); + } + //娣诲姞鎷h揣鏄庣粏 + var completeDetail = new BllCompleteDetail() + { + SONo = soNo, + SODetailNo = int.Parse(soDetailId), + ExportAllotId = allot.Id, + StockId = allot.StockId, + BoxNo = item.BoxNo, + BoxNo2 = item.BoxNo2, + BoxNo3 = item.BoxNo3, + + LotNo = allot.LotNo, + LotText = allot.LotText, + SupplierLot = allot.SupplierLot, + SkuNo = allot.SkuNo, + SkuName = allot.SkuName, + Standard = allot.Standard, + PalletNo = palletNo, + CompleteQty = biaoShi == "2" ? int.Parse(pickQty1) : item.Qty, + + CreateUser = userId + }; + comList.Add(completeDetail); + + if (biaoShi != "2") + { + //鍒犻櫎搴撳瓨绠辩爜鏄庣粏 + Db.Deleteable(item).ExecuteCommand(); + } + else//鏁伴噺鎷h揣 + { + if (int.Parse(pickQty1) == item.Qty) + { + //鍒犻櫎搴撳瓨绠辩爜鏄庣粏 + Db.Deleteable(item).ExecuteCommand(); + } + else + { + item.Qty -= int.Parse(pickQty1); + item.BitBoxMark = "1";//闆剁鏍囪瘑 + Db.Updateable(item).ExecuteCommand(); + } + } + pickQty += item.Qty; + } + //鏀瑰彉搴撳唴绠辩爜鏄惁闆剁淇℃伅 + if (biaoShi == "1") + { + var boxSurplusList = boxInfo.Where(m => m.BoxNo3 != boxNo3).ToList(); + foreach (var item in boxSurplusList) + { + item.BitBoxMark = "1"; + Db.Updateable(item).ExecuteCommand(); + } + } + + Db.Insertable(comList).ExecuteCommand(); + //淇敼鍑哄簱鍒嗛厤淇℃伅 + allot.CompleteQty += pickQty; + allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; + if (allot.Status == "5") + { + //鍒ゆ柇璇ユ墭鐩樻槸鍚﹁繕瀛樺湪鐗╂枡 瀛樺湪鏀逛负寰呭洖搴� 寰呭洖搴撳畬鎴愬悗鏀逛负宸插畬鎴� + } + Db.Updateable(allot).ExecuteCommand(); + + //鍒犻櫎鎴栦慨鏀瑰簱瀛樻槑缁� + stockDetail.BitPalletMark = "1";//淇敼涓洪浂鎵樻爣璇� + stockDetail.Qty -= pickQty; + stockDetail.LockQty -= pickQty; + if (stockDetail.Qty == stockDetail.LockQty) + { + stockDetail.Status = "2"; + } + else if (stockDetail.Qty > stockDetail.LockQty && stockDetail.LockQty > 0) + { + stockDetail.Status = "1"; + } + else + { + stockDetail.Status = "0"; + } + + if (stockDetail.Qty <= 0) + { + Db.Deleteable(stockDetail).ExecuteCommand(); + } + else + { + Db.Updateable(stockDetail).ExecuteCommand(); + } + stock.Qty -= pickQty; + stock.LockQty -= pickQty; + if (stock.Qty <= 0) + { + Db.Deleteable(stock).ExecuteCommand(); + } + else + { + Db.Updateable(stock).ExecuteCommand(); + } + var num2 = Db.Queryable<DataStockDetail>().Count(m => m.IsDel == "0" && m.PalletNo == palletNo); + if (num2 <= 0) + { + //鏀瑰彉鎵樼洏鐘舵�� + var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == palletNo && m.IsDel == "0"); + if (pallet == null) + { + throw new Exception("鏈湪鎵樼洏琛ㄤ腑鏌ヨ鍒版墭鐩樹俊鎭�"); + } + pallet.Status = "0"; + Db.Updateable(pallet).ExecuteCommand(); + } + //淇敼鍑哄簱鍗曟槑缁嗘嫞璐ф暟閲� + noticeDetail.CompleteQty += pickQty; + Db.Updateable(noticeDetail).ExecuteCommand(); + + var num = Db.Queryable<BllExportNoticeDetail>() + .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); + if (num <= 0) + { + notice.Status = "4"; //鏇存敼涓烘墽琛屽畬鎴� + } + //淇敼鍑哄簱鍗曚俊鎭� + Db.Updateable(notice).ExecuteCommand(); + } + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "鎷h揣鍑哄簱", soNo, "鎷h揣", $"鍦≒DA涓婂鍑哄簱鍗曞彿涓猴細{soNo}鐨勬墭鐩樼爜涓猴細{palletNo}鐨勬嫞璐ф搷浣�", userId); + Db.CommitTran(); + } + catch (Exception e) + { + Db.RollbackTran(); + throw new Exception(e.Message); + } + } + + } } -- Gitblit v1.8.0