From f2bc08e28dda7022202f07217f6a3c150f818af7 Mon Sep 17 00:00:00 2001 From: zhaowc <526854230@qq.com> Date: 星期一, 20 一月 2025 08:32:16 +0800 Subject: [PATCH] Merge branch 'master' of https://gitee.com/liudongl/jc24-wms --- Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs | 4368 +++++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 files changed, 4,066 insertions(+), 302 deletions(-) diff --git a/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs b/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs index 3b6a538..52a0b07 100644 --- a/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs +++ b/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs @@ -18,6 +18,8 @@ using WMS.BLL.LogServer; using WMS.DAL; using WMS.Entity.LogEntity; +using Model.ModelDto.SysDto; +using Model.ModelDto.BllSoDto; namespace WMS.BLL.BllPdaServer { @@ -66,6 +68,11 @@ if (string.IsNullOrWhiteSpace(palletNo))//鍒ゆ柇鎵樼洏鏄惁涓虹┖ { throw new Exception("鎵樼洏鐮佷负绌猴紝璇疯緭鍏ユ墭鐩樼爜"); + } + var palletInfo = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo); + if (!string.IsNullOrEmpty(palletInfo.WareHouseNo) && type != "1") + { + throw new Exception("璇ユ墭鐩樿繕鏈嚭搴�"); } if (type == "1")//骞冲簱鍑哄簱鑾峰彇鍗曟嵁 { @@ -242,8 +249,20 @@ { foreach (var demo in list) { - var com = comInfo.FirstOrDefault(m => m.IsDel == "0" && m.BoxNo3 == demo.BoxNo); - if (com!=null) + //if (!string.IsNullOrWhiteSpace(boxNo3)) + //{ + // var com = comInfo.FirstOrDefault(m => m.IsDel == "0" && m.BoxNo3 == demo.BoxNo); + //} + //else if (!string.IsNullOrWhiteSpace(boxNo)) + //{ + // if (expr) + // { + + // } + + //} + var com = comInfo.FirstOrDefault(m => m.IsDel == "0" && m.BoxNo3 != null && m.BoxNo3 == demo.BoxNo); + if (com != null) { demo.PickedQty = com.CompleteQty; } @@ -279,21 +298,78 @@ } //鑾峰彇搴撳唴鏃犵鐮佺殑鎵樼洏鍒嗛厤淇℃伅 - public List<OutPdaInfo> GetAllotPlnInfo(string soDetailId, string palletNo) + 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}鎵樼洏涓婂瓨鍦ㄧ鐮佷俊鎭紝鏃犳硶鍦ㄦ暟閲忔嫞璐ц繘琛屾搷浣滐紒"); + } + + BllExportAllot allot = null; + if (!string.IsNullOrWhiteSpace(soDetailId)) + { + //鍑哄簱鍗曟槑缁� + 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($"鏈煡璇㈠埌瀵瑰簲鍑哄簱鍗曟�诲崟淇℃伅锛岃鏍稿疄锛�"); + } + //鍒嗛厤淇℃伅 + 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 = allot == null ? (int)(detail.Qty - detail.LockQty) : (int)allot.Qty, + PickedQty = allot == null ? 0 : (int)allot.CompleteQty, + }; + + pdaInfo.Add(info); + return pdaInfo; } catch (Exception e) { throw new Exception(e.Message); } - throw new NotImplementedException(); } //鍑哄簱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 @@ -312,16 +388,32 @@ { throw new Exception("鎵樼洏鐮佷笉鑳戒负绌�"); } - + if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && decimal.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") + var type1 = new List<string>() { "0", "4" }; //鎷h揣涓嶅彲澶氬嚭 鎴愬搧鍑哄簱銆佷笉鍚堟牸鍝佸嚭搴� + var type2 = new List<string>() { "1", "2", "3", "5", "6", "7", "8" };//鎷h揣鍙鍑� 棰嗘枡鍑哄簱銆佹娊妫�鍑哄簱銆佺墿鏂欏彇鏍峰嚭搴撱�佷腑闂村搧鍑哄簱銆佷唬鍌ㄥ嚭搴撱�佸叾浠栧嚭搴撱�佸瘎瀛樺嚭搴� + if (type1.Contains(notice.Type)) { - throw new Exception("鍑哄簱鍗曠殑鐘舵�佷笉鏄鍦ㄦ墽琛岋紝涓嶈兘鎷h揣"); + if (notice.Status != "3") + { + throw new Exception("鍑哄簱鍗曠殑鐘舵�佷笉鏄鍦ㄦ墽琛岋紝涓嶈兘鎷h揣"); + } + } + if (type2.Contains(notice.Type)) + { + if (notice.Status != "3" && notice.Status != "4") + { + throw new Exception("鍑哄簱鍗曠殑鐘舵�佷笉鏄鍦ㄦ墽琛屾垨鎵ц瀹屾垚锛屼笉鑳芥嫞璐�"); + } } //鍑哄簱鍗曟槑缁� var noticeDetail = Db.Queryable<BllExportNoticeDetail>() @@ -354,6 +446,7 @@ throw new Exception("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨淇℃伅锛�"); } #endregion + if (string.IsNullOrWhiteSpace(boxNo))//鏁存墭鎷h揣 { List<DataBoxInfo> boxInfos; @@ -368,12 +461,12 @@ { throw new Exception("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鍓╀綑寰呮嫞鏁伴噺"); } - var pickQty = 0;//鎷h揣鐨勬暟閲� + decimal 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 (comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) + if (comDetailList.Any(m => m.BoxNo3 == item.BoxNo3) && item.BoxNo3 != null) { throw new Exception($"褰撳墠{item.BoxNo}涓瓄item.BoxNo3}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷h揣"); } @@ -413,7 +506,8 @@ Db.Insertable(comList).ExecuteCommand(); //淇敼鍑哄簱鍒嗛厤淇℃伅 allot.CompleteQty += pickQty; - allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; + allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; + allot.UpdateTime = DateTime.Now; Db.Updateable(allot).ExecuteCommand(); //鍒犻櫎搴撳瓨鏄庣粏 Db.Deleteable(stockDetail).ExecuteCommand(); @@ -438,6 +532,7 @@ Db.Updateable(pallet).ExecuteCommand(); //淇敼鍑哄簱鍗曟槑缁嗘嫞璐ф暟閲� noticeDetail.CompleteQty += pickQty; + noticeDetail.Status = "2"; Db.Updateable(noticeDetail).ExecuteCommand(); var num = Db.Queryable<BllExportNoticeDetail>() @@ -445,20 +540,25 @@ if (num <= 0) { notice.Status = "4"; //鏇存敼涓烘墽琛屽畬鎴� + noticeDetail.Status = "3"; + Db.Updateable(noticeDetail).ExecuteCommand(); } + //淇敼鍑哄簱鍗曚俊鎭� Db.Updateable(notice).ExecuteCommand(); } 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); + var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo && m.StockDetailId == stockDetail.Id); if (boxInfo.Count() == 0) { throw new Exception("鏈煡璇㈠埌璇ョ鐮佸強杩芥函鐮佺殑淇℃伅"); } boxInfos = boxInfo.ToList(); + + var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToList(); if (!string.IsNullOrWhiteSpace(boxNo3)) //鏁f敮鎷h揣 { boxInfos = boxInfos.Where(m => m.BoxNo3 == boxNo3).ToList(); @@ -482,7 +582,33 @@ throw new Exception("鎷h揣鏁伴噺涓嶈兘澶т簬鍓╀綑寰呮嫞鏁伴噺"); } + foreach (var item in boxInfos) + { + if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) + { + throw new Exception($"褰撳墠{item.BoxNo}涓瓄item.BoxNo3}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷h揣"); + } + } + biaoShi = "1"; + } + else if (!string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0)//鏁伴噺鎷h揣 + { + if (boxInfo.Count() > 1) + { + throw new Exception("璇ョ鐮佸唴瀛樺湪鏀爜涓嶈兘杩涜鏁伴噺鎷h揣"); + } + decimal boxQty = boxInfo.First().Qty; + if (Convert.ToDecimal(pickQty1) > boxQty) + { + throw new Exception("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鏁伴噺"); + } + if (Convert.ToDecimal(pickQty1) > needQty) + { + throw new Exception("鎷h揣鏁伴噺涓嶈兘澶т簬鍓╀綑寰呮嫞鏁伴噺"); + } + + biaoShi = "2"; } else //鏁寸鎷h揣 { @@ -499,16 +625,20 @@ { throw new Exception("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鍓╀綑寰呮嫞鏁伴噺"); } + + foreach (var item in boxInfos) + { + if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo == item.BoxNo)) + { + throw new Exception($"褰撳墠{item.BoxNo}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷h揣"); + } + } } - var pickQty = 0;//鎷h揣鐨勬暟閲� - var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToList(); + decimal pickQty = 0;//鎷h揣鐨勬暟閲� + var comList = new List<BllCompleteDetail>(); foreach (var item in boxInfos) { - if (comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) - { - throw new Exception($"褰撳墠{item.BoxNo}涓瓄item.BoxNo3}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷h揣"); - } //娣诲姞鎷h揣鏄庣粏 var completeDetail = new BllCompleteDetail() { @@ -527,15 +657,36 @@ SkuName = allot.SkuName, Standard = allot.Standard, PalletNo = palletNo, - CompleteQty = item.Qty, + CompleteQty = biaoShi == "2" ? decimal.Parse(pickQty1) : item.Qty, CreateUser = userId }; comList.Add(completeDetail); - //鍒犻櫎搴撳瓨绠辩爜鏄庣粏 - Db.Deleteable(item).ExecuteCommand(); - pickQty += item.Qty; + if (biaoShi != "2") + { + pickQty += item.Qty; + //鍒犻櫎搴撳瓨绠辩爜鏄庣粏 + Db.Deleteable(item).ExecuteCommand(); + } + else//鏁伴噺鎷h揣 + { + if (decimal.Parse(pickQty1) == item.Qty) + { + pickQty += item.Qty; + //鍒犻櫎搴撳瓨绠辩爜鏄庣粏 + Db.Deleteable(item).ExecuteCommand(); + + } + else + { + pickQty += decimal.Parse(pickQty1); + item.Qty -= decimal.Parse(pickQty1); + item.BitBoxMark = "1";//闆剁鏍囪瘑 + Db.Updateable(item).ExecuteCommand(); + } + } + } //鏀瑰彉搴撳唴绠辩爜鏄惁闆剁淇℃伅 if (biaoShi == "1") @@ -552,6 +703,2596 @@ //淇敼鍑哄簱鍒嗛厤淇℃伅 allot.CompleteQty += pickQty; allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; + allot.UpdateTime = DateTime.Now; + 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; + noticeDetail.Status = "2"; + 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"; //鏇存敼涓烘墽琛屽畬鎴� + + noticeDetail.Status = "3"; + Db.Updateable(noticeDetail).ExecuteCommand(); + } + //淇敼鍑哄簱鍗曚俊鎭� + 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 (decimal.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揣鏄庣粏 + isComplete = 0;// 鎵�鏈夋棤绠辩爜鎴栦竴绾х鐮佹嫞璐ф椂锛屾嫞璐ф槑缁嗗簲閲嶆柊鎻掑叆鏁版嵁(浣撶幇澶氭鎷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 += decimal.Parse(PickQty); + complete.UpdateUser = userId; + complete.UpdateTime = Db.GetDate(); + + Db.Updateable(complete).ExecuteCommand(); + } + + //淇敼鍑哄簱鍒嗛厤淇℃伅 + allot.CompleteQty += decimal.Parse(PickQty); + allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; + allot.UpdateTime = DateTime.Now; + Db.Updateable(allot).ExecuteCommand(); + + int isDel = 0; + + //鍒犻櫎鎴栦慨鏀瑰簱瀛樻槑缁� + stockDetail.BitPalletMark = "1";//淇敼涓洪浂鎵樻爣璇� + stockDetail.Qty -= decimal.Parse(PickQty); + stockDetail.LockQty -= decimal.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 -= decimal.Parse(PickQty); + stock.LockQty -= decimal.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); + noticeDetail.Status = "2"; + 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"; //鏇存敼涓烘墽琛屽畬鎴� + noticeDetail.Status = "3"; + Db.Updateable(noticeDetail).ExecuteCommand(); + } + //淇敼鍑哄簱鍗曚俊鎭� + 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); + } + } + + /// <summary> + /// 涓嬪彂绌烘墭鍑哄簱 + /// </summary> + /// <param name="model"> </param> + /// <param name="userId"> </param> + /// <param name="url"> </param> + /// <returns></returns> + /// <exception cref="Exception"></exception> + public string IssuePlnOutHouse(OutModePalletVm model, int userId, string url) + { + try + { + string strMsg = ""; + var outDto1 = new List<OutCommandDto>(); //鍏堝嚭搴撴暟鎹殑闆嗗悎锛堟繁搴︿负1鐨勫偍浣嶏級 + var outDto2 = new List<OutCommandDto>(); //鍚庡嚭搴撴暟鎹殑闆嗗悎锛堟繁搴︿负2鐨勫偍浣嶏級 + var moveDto = new List<OutCommandDto>(); //瑕佺Щ搴撴暟鎹殑闆嗗悎 + //鑾峰彇褰撳墠鏃堕棿 + 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); + if (stockDetail.Count > 0) + { + //鍒ゆ柇鏄惁澶т簬闇�瑕佸灈鏁� + if (stockDetail.Count < int.Parse(model.Num)) + { + strMsg = "闇�瑕佸灈鏁板ぇ浜庡簱瀛樺灈鏁帮紝璇烽噸鏂拌緭鍏�!"; + return strMsg; + } + } + //鑾峰彇搴撳瓨鎬昏〃淇℃伅 + var stock = Db.Queryable<DataStock>().First(s => s.IsDel == "0" && s.SkuNo == "100099"); + //楠岃瘉搴撳瓨鎬昏〃鏄惁涓虹┖ + if (stock == null) + { + strMsg = "搴撳瓨淇℃伅涓嶅瓨鍦紝璇锋牳鏌�!"; + return strMsg; + } + + var com = new Common(); + Db.BeginTran(); + + //閬嶅巻搴撳瓨淇℃伅 + foreach (var s in stockDetail) + { + //if (outDto1.Contains(m=>m.PalletNo == s.PalletNo) >0) + //{ + // continue; + //} + //鑾峰彇鍌ㄤ綅淇℃伅 + var locat = Db.Queryable<SysStorageLocat>().First(l => l.LocatNo == s.LocatNo && l.IsDel == "0" && l.WareHouseNo == "W01"); + if(locat == null) + { + continue; + } + + ////鏇存敼鍌ㄤ綅鐘舵�佷负鍑哄簱涓� + //locat.Status = "3"; //3 鍑哄簱涓� + //locat.UpdateTime = serverTime; //淇敼鏃堕棿 + //locat.UpdateUser = userId; //淇敼浜� + ////淇敼鍌ㄤ綅淇℃伅 + //Db.Updateable(locat).ExecuteCommand(); + + if (locat.Status == "1") + { + if (locat.Depth == "01") //娣卞害涓�1 + { + #region 鏀瑰彉搴撳瓨 + + //澧炲姞搴撳瓨閿佸畾鏁伴噺 + stock.LockQty += (int)s.Qty; //閿佸畾鏁伴噺 + stock.UpdateTime = serverTime; //淇敼鏃堕棿 + stock.UpdateUser = userId; //淇敼浜� + Db.Updateable(stock).ExecuteCommand();//淇敼搴撳瓨鎬昏〃淇℃伅 + + //澧炲姞搴撳瓨鏄庣粏閿佸畾鏁伴噺 + s.LockQty += (int)s.Qty; //閿佸畾鏁伴噺 + s.UpdateTime = serverTime; //淇敼鏃堕棿 + s.UpdateUser = userId; //淇敼浜� + s.Status = "2"; //2 宸插垎閰� + Db.Updateable(s).ExecuteCommand();//淇敼搴撳瓨鏄庣粏淇℃伅 + + #endregion + + #region 鍒嗛厤 + + //娣诲姞鍒嗛厤琛ㄤ俊鎭� + var allot = new BllExportAllot + { + SONo = "", + WaveNo = "", + SODetailNo = 0, + StockId = s.Id, + LotNo = "", + LotText = "", + SupplierLot = "", + SkuNo = s.SkuNo, + SkuName = s.SkuName, + Standard = s.Standard, + PalletNo = s.PalletNo, + IsBale = "0", //鏄惁瑁瑰寘 + IsBelt = "0", //鏄惁鎵撳甫 + + //BoxexQty = s.Qty, + Qty = (int)s.Qty, + CompleteQty = 0, + Status = "1", + LogisticsId = 0, + IsAdvance = "0", + OutMode = model.OutMode,//鍑哄簱鍙� + + CreateUser = userId, + CreateTime = DateTime.Now + }; + Db.Insertable(allot).ExecuteCommand(); + + #endregion + + #region 娣诲姞鍑哄簱浠诲姟淇℃伅 + + var taskNo = new Common().GetMaxNo("TK"); + var exTask = new LogTask //鍑哄簱浠诲姟 + { + TaskNo = taskNo, + Sender = "WMS", + Receiver = "PDA", + IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + + StartLocat = locat == null ? "" : s.LocatNo,//璧峰浣嶇疆 + EndLocat = model.OutMode,//鐩爣浣嶇疆 + PalletNo = s.PalletNo,//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� + CreateTime = serverTime, //鍒涘缓鏃堕棿 + CreateUser = userId, //鍒涘缓浜� + Msg = "Pda绌烘墭浠�" + locat == null ? "" : s.LocatNo + "鍒�" + model.OutMode + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 + //FinishDate = serverTime, //瀹屾垚鏃堕棿 + }; + outDto1.Add(new OutCommandDto() + { + PalletNo = exTask.PalletNo,//鎵樼洏鍙� + StartLocate = exTask.StartLocat, // 璧峰浣嶇疆 + StartRoadway = locat.RoadwayNo, //鎵�灞炲贩閬� + EndLocate = model.OutMode, // 鐩爣浣嶇疆 + TaskNo = exTask.TaskNo, // 浠诲姟鍙� + TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱) + OutMode = model.OutMode, //鐩爣鍦板潃 + Order = 1 + }); + Db.Insertable(exTask).ExecuteCommand(); + + #endregion + + #region 鍌ㄤ綅鐘舵�佸彉鏇� + //鏇存敼鍌ㄤ綅鐘舵�佷负鍑哄簱涓� + locat.Status = "3"; //3 鍑哄簱涓� + Db.Updateable(locat).ExecuteCommand();//淇敼鍌ㄤ綅淇℃伅 + #endregion + } + else if (locat.Depth == "02") //娣卞害涓�2 + { + //鑾峰彇鍑哄簱娣卞害涓�2鍌ㄤ綅鍓嶉潰鐨勫偍浣嶄俊鎭� + var sql2 = $@"select * from SysStorageLocat where WareHouseNo = '{locat.WareHouseNo}' and row = {locat.Row} and [Column] = {locat.Column} and Layer = {locat.Layer} and Depth = '01'; "; + var slotBefore = Db.Ado.SqlQuery<SysStorageLocat>(sql2).First(); + if (slotBefore == null) + { + #region 鏀瑰彉搴撳瓨 + + //澧炲姞搴撳瓨閿佸畾鏁伴噺 + stock.LockQty += (int)s.Qty; //閿佸畾鏁伴噺 + stock.UpdateTime = serverTime; //淇敼鏃堕棿 + stock.UpdateUser = userId; //淇敼浜� + Db.Updateable(stock).ExecuteCommand();//淇敼搴撳瓨鎬昏〃淇℃伅 + + //澧炲姞搴撳瓨鏄庣粏閿佸畾鏁伴噺 + s.LockQty += (int)s.Qty; //閿佸畾鏁伴噺 + s.UpdateTime = serverTime; //淇敼鏃堕棿 + s.UpdateUser = userId; //淇敼浜� + s.Status = "2"; //2 宸插垎閰� + Db.Updateable(s).ExecuteCommand();//淇敼搴撳瓨鏄庣粏淇℃伅 + + #endregion + + #region 鍒嗛厤 + + //娣诲姞鍒嗛厤琛ㄤ俊鎭� + var allot = new BllExportAllot + { + SONo = "", + WaveNo = "", + SODetailNo = 0, + StockId = s.Id, + LotNo = "", + LotText = "", + SupplierLot = "", + SkuNo = s.SkuNo, + SkuName = s.SkuName, + Standard = s.Standard, + PalletNo = s.PalletNo, + IsBale = "0", //鏄惁瑁瑰寘 + IsBelt = "0", //鏄惁鎵撳甫 + + //BoxexQty = s.Qty, + Qty = (int)s.Qty, + CompleteQty = 0, + Status = "1", + LogisticsId = 0, + IsAdvance = "0", + OutMode = model.OutMode,//鍑哄簱鍙� + + CreateUser = userId, + CreateTime = DateTime.Now + }; + Db.Insertable(allot).ExecuteCommand(); + + #endregion + + #region 娣诲姞鍑哄簱浠诲姟淇℃伅 + + var taskNo = new Common().GetMaxNo("TK"); + var exTask = new LogTask //鍑哄簱浠诲姟 + { + TaskNo = taskNo, + Sender = "WMS", + Receiver = "PDA", + IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + + StartLocat = locat == null ? "" : s.LocatNo,//璧峰浣嶇疆 + EndLocat = model.OutMode,//鐩爣浣嶇疆 + PalletNo = s.PalletNo,//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� + CreateTime = serverTime, //鍒涘缓鏃堕棿 + CreateUser = userId, //鍒涘缓浜� + Msg = "Pda绌烘墭浠�" + locat == null ? "" : s.LocatNo + "鍒�" + model.OutMode + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 + //FinishDate = serverTime, //瀹屾垚鏃堕棿 + }; + outDto1.Add(new OutCommandDto() + { + PalletNo = exTask.PalletNo,//鎵樼洏鍙� + StartLocate = exTask.StartLocat, // 璧峰浣嶇疆 + StartRoadway = locat.RoadwayNo, //鎵�灞炲贩閬� + EndLocate = model.OutMode, // 鐩爣浣嶇疆 + TaskNo = exTask.TaskNo, // 浠诲姟鍙� + TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱) + OutMode = model.OutMode, //鐩爣鍦板潃 + Order = 1 + }); + Db.Insertable(exTask).ExecuteCommand(); + + #endregion + + #region 鍌ㄤ綅鐘舵�佸彉鏇� + //鏇存敼鍌ㄤ綅鐘舵�佷负鍑哄簱涓� + locat.Status = "3"; //3 鍑哄簱涓� + Db.Updateable(locat).ExecuteCommand();//淇敼鍌ㄤ綅淇℃伅 + #endregion + } + else + { + //鍒ゆ柇鍌ㄤ綅鐘舵�� + if (slotBefore.Status == "0") + { + #region 鏀瑰彉搴撳瓨 + + //澧炲姞搴撳瓨閿佸畾鏁伴噺 + stock.LockQty += (int)s.Qty; //閿佸畾鏁伴噺 + stock.UpdateTime = serverTime; //淇敼鏃堕棿 + stock.UpdateUser = userId; //淇敼浜� + Db.Updateable(stock).ExecuteCommand();//淇敼搴撳瓨鎬昏〃淇℃伅 + + //澧炲姞搴撳瓨鏄庣粏閿佸畾鏁伴噺 + s.LockQty += (int)s.Qty; //閿佸畾鏁伴噺 + s.UpdateTime = serverTime; //淇敼鏃堕棿 + s.UpdateUser = userId; //淇敼浜� + s.Status = "2"; //2 宸插垎閰� + Db.Updateable(s).ExecuteCommand();//淇敼搴撳瓨鏄庣粏淇℃伅 + + #endregion + + #region 鍒嗛厤 + + //娣诲姞鍒嗛厤琛ㄤ俊鎭� + var allot = new BllExportAllot + { + SONo = "", + WaveNo = "", + SODetailNo = 0, + StockId = s.Id, + LotNo = "", + LotText = "", + SupplierLot = "", + SkuNo = s.SkuNo, + SkuName = s.SkuName, + Standard = s.Standard, + PalletNo = s.PalletNo, + IsBale = "0", //鏄惁瑁瑰寘 + IsBelt = "0", //鏄惁鎵撳甫 + + //BoxexQty = s.Qty, + Qty = (int)s.Qty, + CompleteQty = 0, + Status = "1", + LogisticsId = 0, + IsAdvance = "0", + OutMode = model.OutMode,//鍑哄簱鍙� + + CreateUser = userId, + CreateTime = DateTime.Now + }; + Db.Insertable(allot).ExecuteCommand(); + + #endregion + + #region 娣诲姞鍑哄簱浠诲姟淇℃伅 + + var taskNo = new Common().GetMaxNo("TK"); + var exTask = new LogTask //鍑哄簱浠诲姟 + { + TaskNo = taskNo, + Sender = "WMS", + Receiver = "PDA", + IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + + StartLocat = locat == null ? "" : s.LocatNo,//璧峰浣嶇疆 + EndLocat = model.OutMode,//鐩爣浣嶇疆 + PalletNo = s.PalletNo,//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� + CreateTime = serverTime, //鍒涘缓鏃堕棿 + CreateUser = userId, //鍒涘缓浜� + Msg = "Pda绌烘墭浠�" + locat == null ? "" : s.LocatNo + "鍒�" + model.OutMode + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 + //FinishDate = serverTime, //瀹屾垚鏃堕棿 + }; + outDto1.Add(new OutCommandDto() + { + PalletNo = exTask.PalletNo,//鎵樼洏鍙� + StartLocate = exTask.StartLocat, // 璧峰浣嶇疆 + StartRoadway = locat.RoadwayNo, //鎵�灞炲贩閬� + EndLocate = model.OutMode, // 鐩爣浣嶇疆 + TaskNo = exTask.TaskNo, // 浠诲姟鍙� + TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱) + OutMode = model.OutMode, //鐩爣鍦板潃 + Order = 1 + }); + Db.Insertable(exTask).ExecuteCommand(); + + #endregion + + #region 鍌ㄤ綅鐘舵�佸彉鏇� + //鏇存敼鍌ㄤ綅鐘舵�佷负鍑哄簱涓� + locat.Status = "3"; //3 鍑哄簱涓� + Db.Updateable(locat).ExecuteCommand();//淇敼鍌ㄤ綅淇℃伅 + #endregion + } + else if(slotBefore.Status == "1") + { + //鍒ゆ柇鎵樼洏涓婄墿鏂� + var pallSku = Db.Queryable<DataStockDetail>().First(m=>m.SkuNo == "100099" && m.LocatNo == slotBefore.LocatNo); + if (pallSku == null) //绉诲簱 + { + #region 鍒嗛厤 + + ////娣诲姞鍒嗛厤琛ㄤ俊鎭� + //var allot = new BllExportAllot + //{ + // SONo = "", + // WaveNo = "", + // SODetailNo = 0, + // StockId = s.Id, + // LotNo = "", + // LotText = "", + // SupplierLot = "", + // SkuNo = s.SkuNo, + // SkuName = s.SkuName, + // Standard = s.Standard, + // PalletNo = s.PalletNo, + // IsBale = "0", //鏄惁瑁瑰寘 + // IsBelt = "0", //鏄惁鎵撳甫 + + // //BoxexQty = s.Qty, + // Qty = (int)s.Qty, + // CompleteQty = 0, + // Status = "1", + // LogisticsId = 0, + // IsAdvance = "0", + // OutMode = model.OutMode,//鍑哄簱鍙� + + // CreateUser = userId, + // CreateTime = DateTime.Now + //}; + //Db.Insertable(allot).ExecuteCommand(); + + #endregion + + #region 娣诲姞绉诲簱浠诲姟淇℃伅 + var stkModel = Db.Queryable<DataStockDetail>().First(m => m.LocatNo == slotBefore.LocatNo); + string PalletNo = "LN000000"; // 榛樿婕旂ず鎵樼洏 + string SkuNo = ""; + if (stkModel != null) + { + PalletNo = stkModel.PalletNo; + SkuNo = stkModel.SkuNo; + } + //鑾峰彇绉诲簱鐨勫簱浣� + var newSlot = MoveAddress(slotBefore.LocatNo, slotBefore.RoadwayNo, SkuNo, slotBefore.AreaNo); + if (string.IsNullOrWhiteSpace(newSlot)) + { + continue; + } + var taskNo = new Common().GetMaxNo("TK"); + var exTask = new LogTask //鍑哄簱浠诲姟 + { + TaskNo = taskNo, + Sender = "WMS", + Receiver = "PDA", + IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + + StartLocat = slotBefore.LocatNo,//璧峰浣嶇疆 + EndLocat = newSlot,//鐩爣浣嶇疆 + PalletNo = PalletNo,//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Type = "2",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� + CreateTime = serverTime, //鍒涘缓鏃堕棿 + CreateUser = userId, //鍒涘缓浜� + Msg = "Pda绌烘墭浠�" + locat == null ? "" : slotBefore.LocatNo + "鍒�" + newSlot + "鐨勭Щ搴撲换鍔�", //鍏抽敭淇℃伅 + //FinishDate = serverTime, //瀹屾垚鏃堕棿 + }; + moveDto.Add(new OutCommandDto() + { + PalletNo = exTask.PalletNo,//鎵樼洏鍙� + StartLocate = exTask.StartLocat, // 璧峰浣嶇疆 + StartRoadway = locat.RoadwayNo, //鎵�灞炲贩閬� + EndLocate = exTask.EndLocat, // 鐩爣浣嶇疆 + TaskNo = exTask.TaskNo, // 浠诲姟鍙� + TaskType = "2",// 浠诲姟绫诲瀷 (绉诲簱) + OutMode = "", //鐩爣鍦板潃 + Order = 1 + }); + Db.Insertable(exTask).ExecuteCommand(); + + #endregion + + #region 鍌ㄤ綅鐘舵�佸彉鏇� + //鏇存敼鍌ㄤ綅鐘舵�佷负绉诲嚭涓� + slotBefore.Status = "5"; //5 绉诲嚭涓� + Db.Updateable(slotBefore).ExecuteCommand();//淇敼鍌ㄤ綅淇℃伅 + var newSlot2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == newSlot && m.IsDel == "0"); + if (newSlot2!= null) + { + newSlot2.Status = "4";//绉诲叆涓� + Db.Updateable(newSlot2).ExecuteCommand();//淇敼鍌ㄤ綅淇℃伅 + } + #endregion + } + else //鍑哄簱 + { + #region 鏀瑰彉搴撳瓨 + + //澧炲姞搴撳瓨閿佸畾鏁伴噺 + stock.LockQty += (int)pallSku.Qty; //閿佸畾鏁伴噺 + stock.UpdateTime = serverTime; //淇敼鏃堕棿 + stock.UpdateUser = userId; //淇敼浜� + Db.Updateable(stock).ExecuteCommand();//淇敼搴撳瓨鎬昏〃淇℃伅 + + //澧炲姞搴撳瓨鏄庣粏閿佸畾鏁伴噺 + pallSku.LockQty += (int)pallSku.Qty; //閿佸畾鏁伴噺 + pallSku.UpdateTime = serverTime; //淇敼鏃堕棿 + pallSku.UpdateUser = userId; //淇敼浜� + pallSku.Status = "2"; //2 宸插垎閰� + Db.Updateable(pallSku).ExecuteCommand();//淇敼搴撳瓨鏄庣粏淇℃伅 + + #endregion + + #region 鍒嗛厤 + + //娣诲姞鍒嗛厤琛ㄤ俊鎭� + var allot = new BllExportAllot + { + SONo = "", + WaveNo = "", + SODetailNo = 0, + StockId = pallSku.Id, + LotNo = "", + LotText = "", + SupplierLot = "", + SkuNo = pallSku.SkuNo, + SkuName = pallSku.SkuName, + Standard = pallSku.Standard, + PalletNo = pallSku.PalletNo, + IsBale = "0", //鏄惁瑁瑰寘 + IsBelt = "0", //鏄惁鎵撳甫 + + //BoxexQty = s.Qty, + Qty = (int)pallSku.Qty, + CompleteQty = 0, + Status = "1", + LogisticsId = 0, + IsAdvance = "0", + OutMode = model.OutMode,//鍑哄簱鍙� + + CreateUser = userId, + CreateTime = DateTime.Now + }; + Db.Insertable(allot).ExecuteCommand(); + + #endregion + + #region 娣诲姞鍑哄簱浠诲姟淇℃伅 + + var taskNo = new Common().GetMaxNo("TK"); + var exTask = new LogTask //鍑哄簱浠诲姟 + { + TaskNo = taskNo, + Sender = "WMS", + Receiver = "PDA", + IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + + StartLocat = locat == null ? "" : pallSku.LocatNo,//璧峰浣嶇疆 + EndLocat = model.OutMode,//鐩爣浣嶇疆 + PalletNo = pallSku.PalletNo,//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� + CreateTime = serverTime, //鍒涘缓鏃堕棿 + CreateUser = userId, //鍒涘缓浜� + Msg = "Pda绌烘墭浠�" + locat == null ? "" : pallSku.LocatNo + "鍒�" + model.OutMode + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 + //FinishDate = serverTime, //瀹屾垚鏃堕棿 + }; + outDto2.Add(new OutCommandDto() + { + PalletNo = exTask.PalletNo,//鎵樼洏鍙� + StartLocate = exTask.StartLocat, // 璧峰浣嶇疆 + StartRoadway = locat.RoadwayNo, //鎵�灞炲贩閬� + EndLocate = model.OutMode, // 鐩爣浣嶇疆 + TaskNo = exTask.TaskNo, // 浠诲姟鍙� + TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱) + OutMode = model.OutMode, //鐩爣鍦板潃 + Order = 1 + }); + Db.Insertable(exTask).ExecuteCommand(); + + #endregion + #region 鍌ㄤ綅鐘舵�佸彉鏇� + //鏇存敼鍌ㄤ綅鐘舵�佷负鍑哄簱涓� + slotBefore.Status = "3"; //3 鍑哄簱涓� + Db.Updateable(slotBefore).ExecuteCommand();//淇敼鍌ㄤ綅淇℃伅 + #endregion + } + if (int.Parse(model.Num) == outDto1.Count + outDto2.Count) + { + break;//闇�姹傚灈鏁板凡杈惧埌 鍙互鍑哄簱浜� + } + else + { + #region 鏀瑰彉搴撳瓨 + + //澧炲姞搴撳瓨閿佸畾鏁伴噺 + stock.LockQty += (int)s.Qty; //閿佸畾鏁伴噺 + stock.UpdateTime = serverTime; //淇敼鏃堕棿 + stock.UpdateUser = userId; //淇敼浜� + Db.Updateable(stock).ExecuteCommand();//淇敼搴撳瓨鎬昏〃淇℃伅 + + //澧炲姞搴撳瓨鏄庣粏閿佸畾鏁伴噺 + s.LockQty += (int)s.Qty; //閿佸畾鏁伴噺 + s.UpdateTime = serverTime; //淇敼鏃堕棿 + s.UpdateUser = userId; //淇敼浜� + s.Status = "2"; //2 宸插垎閰� + Db.Updateable(s).ExecuteCommand();//淇敼搴撳瓨鏄庣粏淇℃伅 + + #endregion + + #region 鍒嗛厤 + + //娣诲姞鍒嗛厤琛ㄤ俊鎭� + var allot = new BllExportAllot + { + SONo = "", + WaveNo = "", + SODetailNo = 0, + StockId = s.Id, + LotNo = "", + LotText = "", + SupplierLot = "", + SkuNo = s.SkuNo, + SkuName = s.SkuName, + Standard = s.Standard, + PalletNo = s.PalletNo, + IsBale = "0", //鏄惁瑁瑰寘 + IsBelt = "0", //鏄惁鎵撳甫 + + //BoxexQty = s.Qty, + Qty = (int)s.Qty, + CompleteQty = 0, + Status = "1", + LogisticsId = 0, + IsAdvance = "0", + OutMode = model.OutMode,//鍑哄簱鍙� + + CreateUser = userId, + CreateTime = DateTime.Now + }; + Db.Insertable(allot).ExecuteCommand(); + + #endregion + + #region 娣诲姞鍑哄簱浠诲姟淇℃伅 + + var taskNo = new Common().GetMaxNo("TK"); + var exTask = new LogTask //鍑哄簱浠诲姟 + { + TaskNo = taskNo, + Sender = "WMS", + Receiver = "PDA", + IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + + StartLocat = locat == null ? "" : s.LocatNo,//璧峰浣嶇疆 + EndLocat = model.OutMode,//鐩爣浣嶇疆 + PalletNo = s.PalletNo,//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� + CreateTime = serverTime, //鍒涘缓鏃堕棿 + CreateUser = userId, //鍒涘缓浜� + Msg = "Pda绌烘墭浠�" + locat == null ? "" : s.LocatNo + "鍒�" + model.OutMode + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 + //FinishDate = serverTime, //瀹屾垚鏃堕棿 + }; + outDto2.Add(new OutCommandDto() + { + PalletNo = exTask.PalletNo,//鎵樼洏鍙� + StartLocate = exTask.StartLocat, // 璧峰浣嶇疆 + StartRoadway = locat.RoadwayNo, //鎵�灞炲贩閬� + EndLocate = model.OutMode, // 鐩爣浣嶇疆 + TaskNo = exTask.TaskNo, // 浠诲姟鍙� + TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱) + OutMode = model.OutMode, //鐩爣鍦板潃 + Order = 1 + }); + Db.Insertable(exTask).ExecuteCommand(); + + #endregion + #region 鍌ㄤ綅鐘舵�佸彉鏇� + + //鏇存敼鍌ㄤ綅鐘舵�佷负鍑哄簱涓� + locat.Status = "3"; //3 鍑哄簱涓� + Db.Updateable(locat).ExecuteCommand();//淇敼鍌ㄤ綅淇℃伅 + #endregion + } + } + } + + } + + } + + if (int.Parse(model.Num) == outDto1.Count+ outDto2.Count) + { + break;//闇�姹傚灈鏁板凡杈惧埌 鍙互鍑哄簱浜� + } + } + outDto1.AddRange(moveDto); + outDto1.AddRange(outDto2); + if (outDto1.Count > 0) + { + // 姝e紡杩愯绋嬪簭鏀惧紑 + var list2 = outDto1.Select(m => m.TaskNo).ToList(); + var jsonData = JsonConvert.SerializeObject(outDto1); + string response = ""; + + try + { + var time1 = DateTime.Now;//鍙戦�佹椂闂� .ToString("yyyy-MM-dd HH:mm:ss") + response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橶CS鍑哄簱鍛戒护", "WCS"); + var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss") + + ////瑙f瀽杩斿洖鏁版嵁 + var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); + if (wcsModel.StatusCode == 0) + { + //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�// + new TaskServer().EditTaskIssueOk(list2, time1, time2); + str += "涓嬪彂鎴愬姛"; + } + if (wcsModel.StatusCode == -1) + { + new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg); + throw new Exception(wcsModel.Msg); + } + } + catch (Exception ex) + { + throw new Exception(ex.Message); + } + + } + + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "绌烘墭鍑哄簱", int.Parse(model.Num) + "", "涓嬪彂", $"鐢≒DA涓嬪彂浜� {int.Parse(model.Num)} 涓┖鎵樺灈", userId); + Db.CommitTran(); + + return ""; + + } + catch (Exception e) + { + Db.RollbackTran(); + throw new Exception(e.Message); + } + + } + + /// <summary> + /// WCS鐢宠绌烘墭鍑哄簱 + /// </summary> + /// <param name="model"> </param> + /// <param name="userId"> </param> + /// <param name="url"> </param> + /// <returns></returns> + /// <exception cref="Exception"></exception> + public List<OutCommandDto> IssuePlnOutHouseWcs(OutModePalletVm model, int userId) + { + try + { + string strMsg = ""; + var outDto1 = new List<OutCommandDto>(); //鍏堝嚭搴撴暟鎹殑闆嗗悎锛堟繁搴︿负1鐨勫偍浣嶏級 + var outDto2 = new List<OutCommandDto>(); //鍚庡嚭搴撴暟鎹殑闆嗗悎锛堟繁搴︿负2鐨勫偍浣嶏級 + var moveDto = new List<OutCommandDto>(); //瑕佺Щ搴撴暟鎹殑闆嗗悎 + //鑾峰彇褰撳墠鏃堕棿 + 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); + if (stockDetail.Count > 0) + { + //鍒ゆ柇鏄惁澶т簬闇�瑕佸灈鏁� + if (stockDetail.Count < int.Parse(model.Num)) + { + throw new Exception("闇�瑕佸灈鏁板ぇ浜庡簱瀛樺灈鏁帮紝璇烽噸鏂拌緭鍏�!"); + } + } + //鑾峰彇搴撳瓨鎬昏〃淇℃伅 + var stock = Db.Queryable<DataStock>().First(s => s.IsDel == "0" && s.SkuNo == "100099"); + //楠岃瘉搴撳瓨鎬昏〃鏄惁涓虹┖ + if (stock == null) + { + throw new Exception("搴撳瓨淇℃伅涓嶅瓨鍦紝璇锋牳鏌�!"); + } + + var com = new Common(); + Db.BeginTran(); + + //閬嶅巻搴撳瓨淇℃伅 + foreach (var s in stockDetail) + { + //if (outDto1.Contains(m=>m.PalletNo == s.PalletNo) >0) + //{ + // continue; + //} + //鑾峰彇鍌ㄤ綅淇℃伅 + var locat = Db.Queryable<SysStorageLocat>().First(l => l.LocatNo == s.LocatNo && l.IsDel == "0" && l.WareHouseNo == "W01"); + if (locat == null) + { + continue; + } + + ////鏇存敼鍌ㄤ綅鐘舵�佷负鍑哄簱涓� + //locat.Status = "3"; // 1 鏈夌墿鍝� + //locat.UpdateTime = serverTime; //淇敼鏃堕棿 + //locat.UpdateUser = userId; //淇敼浜� + ////淇敼鍌ㄤ綅淇℃伅 + //Db.Updateable(locat).ExecuteCommand(); + + if (locat.Status == "1") + { + if (locat.Depth == "01") //娣卞害涓�1 + { + #region 鏀瑰彉搴撳瓨 + + //澧炲姞搴撳瓨閿佸畾鏁伴噺 + stock.LockQty += (int)s.Qty; //閿佸畾鏁伴噺 + stock.UpdateTime = serverTime; //淇敼鏃堕棿 + stock.UpdateUser = 0; //淇敼浜� + Db.Updateable(stock).ExecuteCommand();//淇敼搴撳瓨鎬昏〃淇℃伅 + + //澧炲姞搴撳瓨鏄庣粏閿佸畾鏁伴噺 + s.LockQty += (int)s.Qty; //閿佸畾鏁伴噺 + s.UpdateTime = serverTime; //淇敼鏃堕棿 + s.UpdateUser = userId; //淇敼浜� + s.Status = "2"; //2 宸插垎閰� + Db.Updateable(s).ExecuteCommand();//淇敼搴撳瓨鏄庣粏淇℃伅 + + #endregion + + #region 鍒嗛厤 + + //娣诲姞鍒嗛厤琛ㄤ俊鎭� + var allot = new BllExportAllot + { + SONo = "", + WaveNo = "", + SODetailNo = 0, + StockId = s.Id, + LotNo = "", + LotText = "", + SupplierLot = "", + SkuNo = s.SkuNo, + SkuName = s.SkuName, + Standard = s.Standard, + PalletNo = s.PalletNo, + IsBale = "0", //鏄惁瑁瑰寘 + IsBelt = "0", //鏄惁鎵撳甫 + + //BoxexQty = s.Qty, + Qty = (int)s.Qty, + CompleteQty = 0, + Status = "1", + LogisticsId = 0, + IsAdvance = "0", + OutMode = model.OutMode,//鍑哄簱鍙� + + CreateUser = userId, + CreateTime = DateTime.Now + }; + Db.Insertable(allot).ExecuteCommand(); + + #endregion + + #region 娣诲姞鍑哄簱浠诲姟淇℃伅 + + var taskNo = new Common().GetMaxNo("TK"); + var exTask = new LogTask //鍑哄簱浠诲姟 + { + TaskNo = taskNo, + Sender = "WMS", + Receiver = "WCS", + IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + + StartLocat = locat == null ? "" : s.LocatNo,//璧峰浣嶇疆 + EndLocat = model.OutMode,//鐩爣浣嶇疆 + PalletNo = s.PalletNo,//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� + CreateTime = serverTime, //鍒涘缓鏃堕棿 + CreateUser = userId, //鍒涘缓浜� + Msg = "WCS绌烘墭浠�" + locat == null ? "" : s.LocatNo + "鍒�" + model.OutMode + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 + //FinishDate = serverTime, //瀹屾垚鏃堕棿 + }; + outDto1.Add(new OutCommandDto() + { + PalletNo = exTask.PalletNo,//鎵樼洏鍙� + StartLocate = exTask.StartLocat, // 璧峰浣嶇疆 + StartRoadway = locat.RoadwayNo, //鎵�灞炲贩閬� + EndLocate = model.OutMode, // 鐩爣浣嶇疆 + TaskNo = exTask.TaskNo, // 浠诲姟鍙� + TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱) + OutMode = model.OutMode, //鐩爣鍦板潃 + Order = 1 + }); + Db.Insertable(exTask).ExecuteCommand(); + + #endregion + + #region 鍌ㄤ綅鐘舵�佸彉鏇� + //鏇存敼鍌ㄤ綅鐘舵�佷负鍑哄簱涓� + locat.Status = "3"; //3 鍑哄簱涓� + Db.Updateable(locat).ExecuteCommand();//淇敼鍌ㄤ綅淇℃伅 + #endregion + } + else if (locat.Depth == "02") //娣卞害涓�2 + { + //鑾峰彇鍑哄簱娣卞害涓�2鍌ㄤ綅鍓嶉潰鐨勫偍浣嶄俊鎭� + var sql2 = $@"select * from SysStorageLocat where WareHouseNo = '{locat.WareHouseNo}' and row = {locat.Row} and [Column] = {locat.Column} and Layer = {locat.Layer} and Depth = '01'; "; + var slotBefore = Db.Ado.SqlQuery<SysStorageLocat>(sql2).First(); + if (slotBefore == null) + { + #region 鏀瑰彉搴撳瓨 + + //澧炲姞搴撳瓨閿佸畾鏁伴噺 + stock.LockQty += (int)s.Qty; //閿佸畾鏁伴噺 + stock.UpdateTime = serverTime; //淇敼鏃堕棿 + //stock.UpdateUser = userId; //淇敼浜� + Db.Updateable(stock).ExecuteCommand();//淇敼搴撳瓨鎬昏〃淇℃伅 + + //澧炲姞搴撳瓨鏄庣粏閿佸畾鏁伴噺 + s.LockQty += (int)s.Qty; //閿佸畾鏁伴噺 + s.UpdateTime = serverTime; //淇敼鏃堕棿 + s.UpdateUser = userId; //淇敼浜� + s.Status = "2"; //2 宸插垎閰� + Db.Updateable(s).ExecuteCommand();//淇敼搴撳瓨鏄庣粏淇℃伅 + + #endregion + + #region 鍒嗛厤 + + //娣诲姞鍒嗛厤琛ㄤ俊鎭� + var allot = new BllExportAllot + { + SONo = "", + WaveNo = "", + SODetailNo = 0, + StockId = s.Id, + LotNo = "", + LotText = "", + SupplierLot = "", + SkuNo = s.SkuNo, + SkuName = s.SkuName, + Standard = s.Standard, + PalletNo = s.PalletNo, + IsBale = "0", //鏄惁瑁瑰寘 + IsBelt = "0", //鏄惁鎵撳甫 + + //BoxexQty = s.Qty, + Qty = (int)s.Qty, + CompleteQty = 0, + Status = "1", + LogisticsId = 0, + IsAdvance = "0", + OutMode = model.OutMode,//鍑哄簱鍙� + + CreateUser = userId, + CreateTime = DateTime.Now + }; + Db.Insertable(allot).ExecuteCommand(); + + #endregion + + #region 娣诲姞鍑哄簱浠诲姟淇℃伅 + + var taskNo = new Common().GetMaxNo("TK"); + var exTask = new LogTask //鍑哄簱浠诲姟 + { + TaskNo = taskNo, + Sender = "WMS", + Receiver = "WCS", + IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + + StartLocat = locat == null ? "" : s.LocatNo,//璧峰浣嶇疆 + EndLocat = model.OutMode,//鐩爣浣嶇疆 + PalletNo = s.PalletNo,//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� + CreateTime = serverTime, //鍒涘缓鏃堕棿 + CreateUser = userId, //鍒涘缓浜� + Msg = "WCS绌烘墭浠�" + locat == null ? "" : s.LocatNo + "鍒�" + model.OutMode + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 + //FinishDate = serverTime, //瀹屾垚鏃堕棿 + }; + outDto1.Add(new OutCommandDto() + { + PalletNo = exTask.PalletNo,//鎵樼洏鍙� + StartLocate = exTask.StartLocat, // 璧峰浣嶇疆 + StartRoadway = locat.RoadwayNo, //鎵�灞炲贩閬� + EndLocate = model.OutMode, // 鐩爣浣嶇疆 + TaskNo = exTask.TaskNo, // 浠诲姟鍙� + TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱) + OutMode = model.OutMode, //鐩爣鍦板潃 + Order = 1 + }); + Db.Insertable(exTask).ExecuteCommand(); + + #endregion + + #region 鍌ㄤ綅鐘舵�佸彉鏇� + //鏇存敼鍌ㄤ綅鐘舵�佷负鍑哄簱涓� + locat.Status = "3"; //3 鍑哄簱涓� + Db.Updateable(locat).ExecuteCommand();//淇敼鍌ㄤ綅淇℃伅 + #endregion + } + else + { + //鍒ゆ柇鍌ㄤ綅鐘舵�� + if (slotBefore.Status == "0") + { + #region 鏀瑰彉搴撳瓨 + + //澧炲姞搴撳瓨閿佸畾鏁伴噺 + stock.LockQty += (int)s.Qty; //閿佸畾鏁伴噺 + stock.UpdateTime = serverTime; //淇敼鏃堕棿 + //stock.UpdateUser = userId; //淇敼浜� + Db.Updateable(stock).ExecuteCommand();//淇敼搴撳瓨鎬昏〃淇℃伅 + + //澧炲姞搴撳瓨鏄庣粏閿佸畾鏁伴噺 + s.LockQty += (int)s.Qty; //閿佸畾鏁伴噺 + s.UpdateTime = serverTime; //淇敼鏃堕棿 + s.UpdateUser = userId; //淇敼浜� + s.Status = "2"; //2 宸插垎閰� + Db.Updateable(s).ExecuteCommand();//淇敼搴撳瓨鏄庣粏淇℃伅 + + #endregion + + #region 鍒嗛厤 + + //娣诲姞鍒嗛厤琛ㄤ俊鎭� + var allot = new BllExportAllot + { + SONo = "", + WaveNo = "", + SODetailNo = 0, + StockId = s.Id, + LotNo = "", + LotText = "", + SupplierLot = "", + SkuNo = s.SkuNo, + SkuName = s.SkuName, + Standard = s.Standard, + PalletNo = s.PalletNo, + IsBale = "0", //鏄惁瑁瑰寘 + IsBelt = "0", //鏄惁鎵撳甫 + + //BoxexQty = s.Qty, + Qty = (int)s.Qty, + CompleteQty = 0, + Status = "1", + LogisticsId = 0, + IsAdvance = "0", + OutMode = model.OutMode,//鍑哄簱鍙� + + CreateUser = userId, + CreateTime = DateTime.Now + }; + Db.Insertable(allot).ExecuteCommand(); + + #endregion + + #region 娣诲姞鍑哄簱浠诲姟淇℃伅 + + var taskNo = new Common().GetMaxNo("TK"); + var exTask = new LogTask //鍑哄簱浠诲姟 + { + TaskNo = taskNo, + Sender = "WMS", + Receiver = "WCS", + IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + + StartLocat = locat == null ? "" : s.LocatNo,//璧峰浣嶇疆 + EndLocat = model.OutMode,//鐩爣浣嶇疆 + PalletNo = s.PalletNo,//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� + CreateTime = serverTime, //鍒涘缓鏃堕棿 + CreateUser = userId, //鍒涘缓浜� + Msg = "WCS绌烘墭浠�" + locat == null ? "" : s.LocatNo + "鍒�" + model.OutMode + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 + //FinishDate = serverTime, //瀹屾垚鏃堕棿 + }; + outDto1.Add(new OutCommandDto() + { + PalletNo = exTask.PalletNo,//鎵樼洏鍙� + StartLocate = exTask.StartLocat, // 璧峰浣嶇疆 + StartRoadway = locat.RoadwayNo, //鎵�灞炲贩閬� + EndLocate = model.OutMode, // 鐩爣浣嶇疆 + TaskNo = exTask.TaskNo, // 浠诲姟鍙� + TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱) + OutMode = model.OutMode, //鐩爣鍦板潃 + Order = 1 + }); + Db.Insertable(exTask).ExecuteCommand(); + + #endregion + + #region 鍌ㄤ綅鐘舵�佸彉鏇� + //鏇存敼鍌ㄤ綅鐘舵�佷负鍑哄簱涓� + locat.Status = "3"; //3 鍑哄簱涓� + Db.Updateable(locat).ExecuteCommand();//淇敼鍌ㄤ綅淇℃伅 + #endregion + } + else if (slotBefore.Status == "1") + { + //鍒ゆ柇鎵樼洏涓婄墿鏂� + var pallSku = Db.Queryable<DataStockDetail>().First(m => m.SkuNo == "100099" && m.LocatNo == slotBefore.LocatNo); + if (pallSku == null) //绉诲簱 + { + #region 鍒嗛厤 + + //娣诲姞鍒嗛厤琛ㄤ俊鎭� + var allot = new BllExportAllot + { + SONo = "", + WaveNo = "", + SODetailNo = 0, + StockId = s.Id, + LotNo = "", + LotText = "", + SupplierLot = "", + SkuNo = s.SkuNo, + SkuName = s.SkuName, + Standard = s.Standard, + PalletNo = s.PalletNo, + IsBale = "0", //鏄惁瑁瑰寘 + IsBelt = "0", //鏄惁鎵撳甫 + + //BoxexQty = s.Qty, + Qty = (int)s.Qty, + CompleteQty = 0, + Status = "1", + LogisticsId = 0, + IsAdvance = "0", + OutMode = model.OutMode,//鍑哄簱鍙� + + CreateUser = userId, + CreateTime = DateTime.Now + }; + Db.Insertable(allot).ExecuteCommand(); + + #endregion + + #region 娣诲姞绉诲簱浠诲姟淇℃伅 + var stkModel = Db.Queryable<DataStockDetail>().First(m=>m.LocatNo == slotBefore.LocatNo); + string PalletNo = "LN000000"; // 榛樿婕旂ず鎵樼洏 + string SkuNo = ""; + if (stkModel != null) + { + PalletNo = stkModel.PalletNo; + SkuNo= stkModel.SkuNo; + } + //鑾峰彇绉诲簱鐨勫簱浣� + var newSlot = MoveAddress(slotBefore.LocatNo, slotBefore.RoadwayNo, SkuNo, slotBefore.AreaNo); + + var taskNo = new Common().GetMaxNo("TK"); + var exTask = new LogTask // 绉诲簱浠诲姟 + { + TaskNo = taskNo, + Sender = "WMS", + Receiver = "WCS", + IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + + StartLocat = slotBefore.LocatNo,//璧峰浣嶇疆 + EndLocat = newSlot,//鐩爣浣嶇疆 + PalletNo = PalletNo,//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Type = "2",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� + CreateTime = serverTime, //鍒涘缓鏃堕棿 + CreateUser = userId, //鍒涘缓浜� + Msg = "WCS绌烘墭浠�" + locat == null ? "" : s.LocatNo + "鍒�" + newSlot + "鐨勭Щ搴撲换鍔�", //鍏抽敭淇℃伅 + //FinishDate = serverTime, //瀹屾垚鏃堕棿 + }; + moveDto.Add(new OutCommandDto() + { + PalletNo = exTask.PalletNo,//鎵樼洏鍙� + StartLocate = exTask.StartLocat, // 璧峰浣嶇疆 + StartRoadway = locat.RoadwayNo, //鎵�灞炲贩閬� + EndLocate = exTask.EndLocat, // 鐩爣浣嶇疆 + TaskNo = exTask.TaskNo, // 浠诲姟鍙� + TaskType = "2",// 浠诲姟绫诲瀷 (鍑哄簱) + OutMode = "", //鐩爣鍦板潃 + Order = 1 + }); + Db.Insertable(exTask).ExecuteCommand(); + + #endregion + + #region 鍌ㄤ綅鐘舵�佸彉鏇� + //鏇存敼鍌ㄤ綅鐘舵�佷负绉诲嚭涓� + slotBefore.Status = "5"; //5 绉诲嚭涓� + Db.Updateable(slotBefore).ExecuteCommand();//淇敼鍌ㄤ綅淇℃伅 + #endregion + } + else //鍑哄簱 + { + #region 鏀瑰彉搴撳瓨 + + //澧炲姞搴撳瓨閿佸畾鏁伴噺 + stock.LockQty += (int)s.Qty; //閿佸畾鏁伴噺 + stock.UpdateTime = serverTime; //淇敼鏃堕棿 + //stock.UpdateUser = userId; //淇敼浜� + Db.Updateable(stock).ExecuteCommand();//淇敼搴撳瓨鎬昏〃淇℃伅 + + //澧炲姞搴撳瓨鏄庣粏閿佸畾鏁伴噺 + s.LockQty += (int)s.Qty; //閿佸畾鏁伴噺 + s.UpdateTime = serverTime; //淇敼鏃堕棿 + s.UpdateUser = userId; //淇敼浜� + s.Status = "2"; //2 宸插垎閰� + Db.Updateable(s).ExecuteCommand();//淇敼搴撳瓨鏄庣粏淇℃伅 + + #endregion + + #region 鍒嗛厤 + + //娣诲姞鍒嗛厤琛ㄤ俊鎭� + var allot = new BllExportAllot + { + SONo = "", + WaveNo = "", + SODetailNo = 0, + StockId = s.Id, + LotNo = "", + LotText = "", + SupplierLot = "", + SkuNo = s.SkuNo, + SkuName = s.SkuName, + Standard = s.Standard, + PalletNo = s.PalletNo, + IsBale = "0", //鏄惁瑁瑰寘 + IsBelt = "0", //鏄惁鎵撳甫 + + //BoxexQty = s.Qty, + Qty = (int)s.Qty, + CompleteQty = 0, + Status = "1", + LogisticsId = 0, + IsAdvance = "0", + OutMode = model.OutMode,//鍑哄簱鍙� + + CreateUser = userId, + CreateTime = DateTime.Now + }; + Db.Insertable(allot).ExecuteCommand(); + + #endregion + + #region 娣诲姞鍑哄簱浠诲姟淇℃伅 + + var taskNo = new Common().GetMaxNo("TK"); + var exTask = new LogTask //鍑哄簱浠诲姟 + { + TaskNo = taskNo, + Sender = "WMS", + Receiver = "WCS", + IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + + StartLocat = locat == null ? "" : s.LocatNo,//璧峰浣嶇疆 + EndLocat = model.OutMode,//鐩爣浣嶇疆 + PalletNo = s.PalletNo,//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� + CreateTime = serverTime, //鍒涘缓鏃堕棿 + CreateUser = userId, //鍒涘缓浜� + Msg = "WCS绌烘墭浠�" + locat == null ? "" : s.LocatNo + "鍒�" + model.OutMode + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 + //FinishDate = serverTime, //瀹屾垚鏃堕棿 + }; + outDto2.Add(new OutCommandDto() + { + PalletNo = exTask.PalletNo,//鎵樼洏鍙� + StartLocate = exTask.StartLocat, // 璧峰浣嶇疆 + StartRoadway = locat.RoadwayNo, //鎵�灞炲贩閬� + EndLocate = model.OutMode, // 鐩爣浣嶇疆 + TaskNo = exTask.TaskNo, // 浠诲姟鍙� + TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱) + OutMode = model.OutMode, //鐩爣鍦板潃 + Order = 1 + }); + Db.Insertable(exTask).ExecuteCommand(); + + #endregion + #region 鍌ㄤ綅鐘舵�佸彉鏇� + //鏇存敼鍌ㄤ綅鐘舵�佷负鍑哄簱涓� + slotBefore.Status = "3"; //3 鍑哄簱涓� + Db.Updateable(slotBefore).ExecuteCommand();//淇敼鍌ㄤ綅淇℃伅 + #endregion + } + if (int.Parse(model.Num) == outDto1.Count + outDto2.Count) + { + break;//闇�姹傚灈鏁板凡杈惧埌 鍙互鍑哄簱浜� + } + else + { + #region 鏀瑰彉搴撳瓨 + + //澧炲姞搴撳瓨閿佸畾鏁伴噺 + stock.LockQty += (int)s.Qty; //閿佸畾鏁伴噺 + stock.UpdateTime = serverTime; //淇敼鏃堕棿 + //stock.UpdateUser = userId; //淇敼浜� + Db.Updateable(stock).ExecuteCommand();//淇敼搴撳瓨鎬昏〃淇℃伅 + + //澧炲姞搴撳瓨鏄庣粏閿佸畾鏁伴噺 + s.LockQty += (int)s.Qty; //閿佸畾鏁伴噺 + s.UpdateTime = serverTime; //淇敼鏃堕棿 + s.UpdateUser = userId; //淇敼浜� + s.Status = "2"; //2 宸插垎閰� + Db.Updateable(s).ExecuteCommand();//淇敼搴撳瓨鏄庣粏淇℃伅 + + #endregion + + #region 鍒嗛厤 + + //娣诲姞鍒嗛厤琛ㄤ俊鎭� + var allot = new BllExportAllot + { + SONo = "", + WaveNo = "", + SODetailNo = 0, + StockId = s.Id, + LotNo = "", + LotText = "", + SupplierLot = "", + SkuNo = s.SkuNo, + SkuName = s.SkuName, + Standard = s.Standard, + PalletNo = s.PalletNo, + IsBale = "0", //鏄惁瑁瑰寘 + IsBelt = "0", //鏄惁鎵撳甫 + + //BoxexQty = s.Qty, + Qty = (int)s.Qty, + CompleteQty = 0, + Status = "1", + LogisticsId = 0, + IsAdvance = "0", + OutMode = model.OutMode,//鍑哄簱鍙� + + CreateUser = userId, + CreateTime = DateTime.Now + }; + Db.Insertable(allot).ExecuteCommand(); + + #endregion + + #region 娣诲姞鍑哄簱浠诲姟淇℃伅 + + var taskNo = new Common().GetMaxNo("TK"); + var exTask = new LogTask //鍑哄簱浠诲姟 + { + TaskNo = taskNo, + Sender = "WMS", + Receiver = "WCS", + IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + + StartLocat = locat == null ? "" : s.LocatNo,//璧峰浣嶇疆 + EndLocat = model.OutMode,//鐩爣浣嶇疆 + PalletNo = s.PalletNo,//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� + CreateTime = serverTime, //鍒涘缓鏃堕棿 + CreateUser = userId, //鍒涘缓浜� + Msg = "WCS绌烘墭浠�" + locat == null ? "" : s.LocatNo + "鍒�" + model.OutMode + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 + //FinishDate = serverTime, //瀹屾垚鏃堕棿 + }; + outDto2.Add(new OutCommandDto() + { + PalletNo = exTask.PalletNo,//鎵樼洏鍙� + StartLocate = exTask.StartLocat, // 璧峰浣嶇疆 + StartRoadway = locat.RoadwayNo, //鎵�灞炲贩閬� + EndLocate = model.OutMode, // 鐩爣浣嶇疆 + TaskNo = exTask.TaskNo, // 浠诲姟鍙� + TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱) + OutMode = model.OutMode, //鐩爣鍦板潃 + Order = 1 + }); + Db.Insertable(exTask).ExecuteCommand(); + + #endregion + #region 鍌ㄤ綅鐘舵�佸彉鏇� + + //鏇存敼鍌ㄤ綅鐘舵�佷负鍑哄簱涓� + locat.Status = "3"; //3 鍑哄簱涓� + Db.Updateable(locat).ExecuteCommand();//淇敼鍌ㄤ綅淇℃伅 + #endregion + } + } + } + } + } + if (int.Parse(model.Num) == outDto1.Count + outDto2.Count) + { + break;//闇�姹傚灈鏁板凡杈惧埌 鍙互鍑哄簱浜� + } + } + outDto1.AddRange(moveDto); + outDto1.AddRange(outDto2); + if (outDto1.Count <= 0) + { + throw new Exception("鏆傛棤鍑哄簱浠诲姟锛岃鏍告煡!"); + } + + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "绌烘墭鍑哄簱", int.Parse(model.Num) + "", "涓嬪彂", $"WCS涓嬪彂浜� {int.Parse(model.Num)} 涓┖鎵樺灈", userId); + Db.CommitTran(); + + return outDto1; + } + catch (Exception e) + { + Db.RollbackTran(); + throw new Exception(e.Message); + } + } + + + public string MoveAddress(string oldAddress, string roadWay, string skuNo,string areaNo="")//01020201 鎺�-鍒�-灞�-娣卞害 + { + string nowAddress = ""; + + var category = new SysMaterialCategory(); + if (!string.IsNullOrEmpty(skuNo)) + { + //鏍规嵁鐗╂枡缂栫爜鑾峰彇瀵瑰簲鍖哄煙 + var skuCategoryNo = Db.Queryable<SysMaterials>().Where(a => a.IsDel == "0" && a.SkuNo == skuNo).Select(a => a.CategoryNo).First(); + category = Db.Queryable<SysMaterialCategory>().First(a => a.IsDel == "0" && a.CategoryNo == skuCategoryNo); + + areaNo = category.AreaNo; + } + else + { + //todo 寰呴獙璇� + category = Db.Queryable<SysMaterialCategory>().First(a => a.IsDel == "0" && a.AreaNo == areaNo); + } + + // 鑾峰彇绉诲簱鐩爣鍌ㄤ綅 + var row = int.Parse(oldAddress.Substring(0, 2)); + var lie = int.Parse(oldAddress.Substring(2, 2)); + var ceng = int.Parse(oldAddress.Substring(4, 2)); + + var sqlString = $@"select LocatNo,[Row],[Column],Layer, (ABS(Row-{row}) + ABS([Column]-{lie}) + ABS(Layer-{ceng})) as distNum from SysStorageLocat where Flag = '0' and Status = '0' and Depth = '02' and RoadwayNo = '{roadWay}' and AreaNo in ('{areaNo}') order by distNum;"; + + var addressModels = Db.Ado.SqlQuery<AddressCls>(sqlString).ToList(); + if (addressModels.Count > 0) // 鍒ゆ柇鍚屽贩閬撳唴鎺掔┖搴撲綅 + { + var listLocaete = new List<string>(); + foreach (var item in addressModels) + { + // 鐩爣鍐呭簱浣嶅搴旂殑澶栧簱浣� + string addressee = item.LocatNo.Substring(0, 6) + "01"; + + // 鍒ゆ柇鐩爣搴撲綅鐨勫搴撲綅鏄惁瀛樺湪璐х墿 (姝e父鎯呭喌涓嬫鍦ㄧЩ鍏ユ儏鍐典笉瀛樺湪锛屽洜涓虹Щ搴撳厛绉诲叆閲岄潰锛屽悗绉诲叆澶栭潰) + //SlotStatus 0: 绌哄偍浣� 1锛氭湁璐� 2锛氭鍦ㄥ叆搴� 3锛氭鍦ㄥ嚭搴� 4锛氭鍦ㄧЩ鍏� 5锛氭鍦ㄧЩ鍑� + sqlString = $"select count(*) from SysStorageLocat where LocatNo = '{addressee}' and Status = '0' and Flag in ('0','1') ; "; + var rowNum = Db.Ado.SqlQuery<int>(sqlString).First(); + if (rowNum == 0) + { + continue; + } + else + { + nowAddress = item.LocatNo; + break; + } + } + } + if (nowAddress == "") + { + // 鍒ゆ柇鍚屽贩閬撳鎺掔┖搴撲綅 + sqlString = $@"select LocatNo,[Row],[Column],Layer, (ABS(Row-{row}) + ABS([Column]-{lie}) + ABS(Layer-{ceng})) as distNum + from SysStorageLocat + where Flag = '0' and Status = '0' and Depth = '01' and RoadwayNo = '{roadWay}' and AreaNo in '{category}' + order by distNum;"; + var adderModeling = Db.Ado.SqlQuery<AddressCls>(sqlString).ToList(); + if (adderModeling.Count > 0) + { + nowAddress = adderModeling[0].LocatNo; + } + else + { + // 搴撳唴涓嶅瓨鍦ㄧ┖鍌ㄤ綅 + nowAddress = ""; + } + } + + + return nowAddress; + } + + //鑾峰彇骞冲簱鎵樼洏淇℃伅 + public List<BoxInfo> GetPingKuInfoByPallet(string soNo, string palletNo) + { + try + { + var info = Db.Queryable<BllExportAllot>().Where(m => m.SONo == soNo && m.PalletNo == palletNo && m.IsDel == "0"); + if (info.Count() == 0) + { + throw new Exception("鏈煡璇㈠埌鎵樼洏鍒嗛厤涓嬪彂鐨勪俊鎭�"); + } + + var data = info.GroupBy(m => new { m.SkuNo, m.SkuName, m.LotNo }).Select(m => new BoxInfo() + { + SkuNo = m.SkuNo, + SkuName = m.SkuName, + LotNo = m.LotNo + }).ToList(); + + return data; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + } + + /// <summary> + /// 骞冲簱鍑哄簱瀹屾垚 + /// </summary> + /// <param name="soNo">鍗曟嵁鍙�</param> + /// <param name="palletNo">鎵樼洏鐮�</param> + /// <param name="userId">鎿嶄綔浜�</param> + public void PlaneExportSuccess(string soNo, string palletNo, int userId) + { + try + { + #region 鎵樼洏淇℃伅 + + //鑾峰彇鎵樼洏淇℃伅 + var pallet = Db.Queryable<SysPallets>().First(p => p.IsDel == "0" && p.PalletNo == palletNo); + //楠岃瘉鎵樼洏淇℃伅鏄惁涓虹┖ + if (pallet == null) + { + throw new Exception("鎵樼洏淇℃伅涓嶅瓨鍦紝璇锋鏌�!"); + } + if (pallet.Status == "0") + { + throw new Exception("鎵樼洏鏈娇鐢紝璇锋鏌�!"); + } + #endregion + + #region 鎵樼洏鏄惁鍦ㄥ钩搴撻獙璇� + + var result = Db.Queryable<DataStockDetail>().First(m => m.PalletNo == palletNo); + if (result == null) + { + throw new Exception("搴撳瓨淇℃伅涓笉瀛樺湪璇ユ墭鐩樹俊鎭紝璇锋鏌�!"); + } + + if (result.WareHouseNo != "W02")//W02锛氶浂绠卞簱 + { + throw new Exception("璇ユ墭鐩樻湭鍦ㄥ钩搴撳唴锛岃妫�鏌�!"); + } + + #endregion + + #region 楠岃瘉鍌ㄤ綅鐘舵�佹槸鍚︽甯� + + var locat = Db.Queryable<SysStorageLocat>().First(a=>a.IsDel == "0" && a.LocatNo == result.LocatNo); + if (locat == null) + { + throw new Exception("鏈幏鍙栧埌瀵瑰簲鍌ㄤ綅淇℃伅锛岃妫�鏌�!"); + } + if (locat.Status != "3") + { + throw new Exception("褰撳墠鍌ㄤ綅涓嶆槸鍑哄簱涓紝璇锋鏌�!"); + } + + #endregion + + //鑾峰彇搴撳瓨鏄庣粏淇℃伅 + var stockDetail = Db.Queryable<DataStockDetail>().Where(s => s.IsDel == "0" && s.PalletNo == palletNo).ToList(); + //楠岃瘉搴撳瓨鏄庣粏淇℃伅鏄惁瀛樺湪 + if (stockDetail == null) + { + throw new Exception("搴撳瓨鏄庣粏涓嶅瓨鍦紝璇锋鏌ュ簱瀛樹俊鎭�!"); + } + + Db.BeginTran(); + + try + { + foreach (var item in stockDetail) + { + if (item.SkuNo == "100099")//鍒ゆ柇鏄惁鏄┖鎵樺嚭搴� + { + //鍒ゆ柇鎬诲簱瀛樻槸鍚︿负0锛屽鏋滀负0鍒犻櫎 鍚﹀垯鍑忓幓鏁伴噺 + var stock = Db.Queryable<DataStock>().First(m => m.SkuNo == "100099"); + + if (stock != null) + { + if (item.LockQty != null) + { + stock.Qty -= item.LockQty.Value; + stock.LockQty -= item.LockQty.Value; + Db.Updateable(stock).ExecuteCommand(); + } + + if (stock.Qty == 0) + { + Db.Deleteable(stock).ExecuteCommand(); + } + } + + //鎵樼洏鐘舵�佹敼涓烘湭浣跨敤 + var sCode = Db.Queryable<SysPallets>().First(m => m.PalletNo == item.PalletNo); + if (sCode != null) + { + sCode.Status = "0"; + Db.Updateable(sCode).ExecuteCommand(); + } + Db.Deleteable(item).ExecuteCommand(); + + continue; + } + item.LocatNo = "";//鍌ㄤ綅鏇存敼锛堟敼涓虹┖锛� + item.WareHouseNo = "";//鎵�灞炰粨搴撴洿鏀癸紙鏀逛负绌猴級 + item.RoadwayNo = "";//鎵�灞炲贩閬撴洿鏀癸紙鏀逛负绌猴級 + item.AreaNo = "";//鎵�灞炲尯鍩熸洿鏀癸紙鏀逛负绌猴級 + Db.Updateable(item).ExecuteCommand(); + } + //鍙樻洿鍌ㄤ綅鐘舵�� + locat.Status = "0";//鍌ㄤ綅鏇存敼锛堟敼涓虹┖鍌ㄤ綅锛� + Db.Updateable(locat).ExecuteCommand(); + + //鍑哄簱娴佹按锛堟洿鏀圭姸鎬侊級 + var allot = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.Status == "1" && m.PalletNo == palletNo && m.SONo == soNo).ToList(); + + foreach (var item in allot) + { + if (item.SkuNo == "100099") + { + item.Status = "5"; + item.CompleteQty += stockDetail[0].Qty; + } + else + { + item.Status = "2"; + } + + } + Db.Updateable(allot).ExecuteCommand(); + + #region 娣诲姞鍑哄簱鎿嶄綔鏃ュ織璁板綍淇℃伅 + + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鎷h揣鏄庣粏", soNo, "瀹屾垚", $"鐢≒DA瀹屾垚浜嗗崟鎹彿涓簕soNo}鐨勫钩搴撳嚭搴�", userId); + + #endregion + + Db.CommitTran(); + } + catch (Exception e) + { + Db.RollbackTran(); + throw new Exception(e.Message); + } + } + catch (Exception e) + { + 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) && decimal.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.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", + AsnSampleNo = asnNo, + IsWave = "0", + WaveNo = "", + IsDespatch = "0", + CompleteTime = DateTime.Now, + CreateUser = userId, + }; + + var n = Db.Insertable(addNotice).ExecuteReturnEntity(); + notice = n; + } + + //鍒涘缓鍑哄簱鍗曟槑缁� + 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 = userId, + + }; + var m = Db.Insertable(addNoticeDetail).ExecuteReturnEntity(); + noticeDetail = m; + } + //鍑哄簱鍒嗛厤淇℃伅 + 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, + UpdateTime = DateTime.Now + }; + + var fp = Db.Insertable(addAllot).ExecuteReturnEntity(); + allot2 = fp; + } + + + #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(); + var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot2.Id && m.PalletNo == palletNo).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("璇ユ墭鐩樹笌绠辩爜娌℃湁缁戝畾鍏崇郴"); + } + foreach (var item in boxInfos) + { + if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) + { + throw new Exception($"褰撳墠{item.BoxNo}涓瓄item.BoxNo3}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷h揣"); + } + } + biaoShi = "1"; + } + else if (!string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0)//鏁伴噺鎷h揣 + { + if (boxInfo.Count() > 1) + { + throw new Exception("璇ョ鐮佸唴瀛樺湪鏀爜涓嶈兘杩涜鏁伴噺鎷h揣"); + } + decimal 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("璇ユ墭鐩樹笌绠辩爜娌℃湁缁戝畾鍏崇郴"); + } + foreach (var item in boxInfos) + { + if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo == item.BoxNo)) + { + throw new Exception($"褰撳墠{item.BoxNo}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷h揣"); + } + } + } + decimal pickQty = 0;//鎷h揣鐨勬暟閲� + + 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 = notice.SONo, + SODetailNo = noticeDetail.Id, + ExportAllotId = allot2.Id, + StockId = allot2.StockId, + BoxNo = item.BoxNo, + BoxNo2 = item.BoxNo2, + BoxNo3 = item.BoxNo3, + + LotNo = allot2.LotNo, + LotText = allot2.LotText, + SupplierLot = allot2.SupplierLot, + SkuNo = allot2.SkuNo, + SkuName = allot2.SkuName, + Standard = allot2.Standard, + PalletNo = palletNo, + CompleteQty = biaoShi == "2" ? decimal.Parse(pickQty1) : item.Qty, + InspectMark = "1", + + CreateUser = userId + }; + comList.Add(completeDetail); + + if (biaoShi != "2") + { + //鍒犻櫎搴撳瓨绠辩爜鏄庣粏 + Db.Deleteable(item).ExecuteCommand(); + } + else//鏁伴噺鎷h揣 + { + if (decimal.Parse(pickQty1) == item.Qty) + { + //鍒犻櫎搴撳瓨绠辩爜鏄庣粏 + Db.Deleteable(item).ExecuteCommand(); + } + else + { + item.Qty -= decimal.Parse(pickQty1); + item.BitBoxMark = "1";//闆剁鏍囪瘑 + item.InspectMark = "1";//鎶芥绠辨爣璇� + Db.Updateable(item).ExecuteCommand(); + } + } + pickQty += biaoShi == "2" ? decimal.Parse(pickQty1) : 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(allot2).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; + noticeDetail.Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * noticeDetail.Qty; + Db.Updateable(noticeDetail).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) && decimal.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(); + var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).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揣鏁伴噺涓嶈兘澶т簬鍓╀綑寰呮嫞鏁伴噺"); + } + foreach (var item in boxInfos) + { + if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) + { + throw new Exception($"褰撳墠{item.BoxNo}涓瓄item.BoxNo3}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷h揣"); + } + } + biaoShi = "1"; + } + else if (!string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0)//鏁伴噺鎷h揣 + { + if (boxInfo.Count() > 1) + { + throw new Exception("璇ョ鐮佸唴瀛樺湪鏀爜涓嶈兘杩涜鏁伴噺鎷h揣"); + } + decimal boxQty = boxInfo.First().Qty; + if (Convert.ToDecimal(pickQty1) > boxQty) + { + throw new Exception("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鏁伴噺"); + } + if (Convert.ToDecimal(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揣鏁伴噺涓嶈兘澶т簬绠卞唴鍓╀綑寰呮嫞鏁伴噺"); + } + foreach (var item in boxInfos) + { + if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo == item.BoxNo)) + { + throw new Exception($"褰撳墠{item.BoxNo}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷h揣"); + } + } + } + decimal pickQty = 0;//鎷h揣鐨勬暟閲� + + 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" ? decimal.Parse(pickQty1) : item.Qty, + + CreateUser = userId + }; + comList.Add(completeDetail); + + if (biaoShi != "2") + { + pickQty += item.Qty; + //鍒犻櫎搴撳瓨绠辩爜鏄庣粏 + Db.Deleteable(item).ExecuteCommand(); + } + else//鏁伴噺鎷h揣 + { + if (decimal.Parse(pickQty1) == item.Qty) + { + pickQty += item.Qty; + //鍒犻櫎搴撳瓨绠辩爜鏄庣粏 + Db.Deleteable(item).ExecuteCommand(); + } + else + { + pickQty += decimal.Parse(pickQty1); + item.Qty -= decimal.Parse(pickQty1); + item.BitBoxMark = "1";//闆剁鏍囪瘑 + Db.Updateable(item).ExecuteCommand(); + } + } + + } + //鏀瑰彉搴撳唴绠辩爜鏄惁闆剁淇℃伅 + 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"; + allot.UpdateTime = DateTime.Now; if (allot.Status == "5") { //鍒ゆ柇璇ユ墭鐩樻槸鍚﹁繕瀛樺湪鐗╂枡 瀛樺湪鏀逛负寰呭洖搴� 寰呭洖搴撳畬鎴愬悗鏀逛负宸插畬鎴� @@ -618,6 +3359,8 @@ //淇敼鍑哄簱鍗曚俊鎭� Db.Updateable(notice).ExecuteCommand(); } + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "鎷h揣鍑哄簱", soNo, "鎷h揣", $"鍦≒DA涓婂鍑哄簱鍗曞彿涓猴細{soNo}鐨勬墭鐩樼爜涓猴細{palletNo}鐨勬嫞璐ф搷浣�", userId); Db.CommitTran(); } catch (Exception e) @@ -627,369 +3370,1390 @@ } } - /// <summary> - /// 涓嬪彂绌烘墭鍑哄簱 - /// </summary> - /// <param name="model"> </param> - /// <param name="userId"> </param> - /// <param name="url"> </param> - /// <returns></returns> - /// <exception cref="Exception"></exception> - public string IssuePlnOutHouse(OutModePalletVm model, int userId,string url) + + //鍙栨牱鍑哄簱鎷h揣(鏃犳爣绛�) + public void SampleSoSetQtyPick(string soType, string soNo, string soDetailId, string palletNo, string PickQty, string asnNo, int userId) { + Db.BeginTran(); try { - string strMsg = ""; - var outDtoList = new List<OutCommandDto>(); //鍑哄簱鏁版嵁鐨勯泦鍚� - //鑾峰彇褰撳墠鏃堕棿 - 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); - if (stockDetail.Count > 0) + if (string.IsNullOrWhiteSpace(soType)) { - //鍒ゆ柇鏄惁澶т簬闇�瑕佸灈鏁� - if (stockDetail.Count< int.Parse(model.Num)) + throw new Exception("鍙栨牱鏍囪瘑涓嶈兘涓虹┖"); + } + + if (soType == "1") + { + if (string.IsNullOrWhiteSpace(asnNo)) { - strMsg = "闇�瑕佸灈鏁板ぇ浜庡簱瀛樺灈鏁帮紝璇烽噸鏂拌緭鍏�!"; - return strMsg; + throw new Exception("鍏ュ簱鍗曟嵁涓嶈兘涓虹┖"); } - } - //鑾峰彇搴撳瓨鎬昏〃淇℃伅 - var stock = Db.Queryable<DataStock>().First(s => s.IsDel == "0" && s.SkuNo == "100099"); - //楠岃瘉搴撳瓨鎬昏〃鏄惁涓虹┖ - if (stock == null) - { - strMsg = "搴撳瓨淇℃伅涓嶅瓨鍦紝璇锋牳鏌�!"; - return strMsg; - } - - int i = 0; - - Db.BeginTran(); - - //閬嶅巻搴撳瓨淇℃伅 - foreach (var s in stockDetail) - { - //鑾峰彇鍌ㄤ綅淇℃伅 - var locat = Db.Queryable<SysStorageLocat>().First(l => l.LocatNo == s.LocatNo && l.IsDel == "0" && l.WareHouseNo == "W01"); - - if (locat != null) + if (string.IsNullOrWhiteSpace(palletNo)) { - if (locat.Status != "1") + 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.Status == "6") + { + var billNo = ""; + var bl = true; + do { - continue; - } - //鏇存敼鍌ㄤ綅鐘舵�佷负鍑哄簱涓� - locat.Status = "3"; //3 鍑哄簱涓� - locat.UpdateTime = serverTime; //淇敼鏃堕棿 - locat.UpdateUser = userId; //淇敼浜� - //淇敼鍌ㄤ綅淇℃伅 - Db.Updateable(locat).ExecuteCommand(); + //鑾峰彇鑷鍗曟嵁鍙� + 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", + AsnSampleNo = asnNo, + IsWave = "0", + WaveNo = "", + IsDespatch = "0", + CompleteTime = DateTime.Now, + CreateUser = userId, + }; + + var n = Db.Insertable(addNotice).ExecuteReturnEntity(); + notice = n; } - //澧炲姞搴撳瓨閿佸畾鏁伴噺 - //stock.AllotQty += - stock.LockQty += (int)s.Qty; //閿佸畾鏁伴噺 - stock.UpdateTime = serverTime; //淇敼鏃堕棿 - stock.UpdateUser = userId; //淇敼浜� - //淇敼搴撳瓨鎬昏〃淇℃伅 - Db.Updateable(stock).ExecuteCommand(); - - //澧炲姞搴撳瓨鏄庣粏閿佸畾鏁伴噺 - //s.AllotQty += - s.LockQty += (int)s.Qty; //閿佸畾鏁伴噺 - s.UpdateTime = serverTime; //淇敼鏃堕棿 - s.UpdateUser = userId; //淇敼浜� - s.Status = "2"; //2 宸插垎閰� - //淇敼搴撳瓨鏄庣粏淇℃伅 - Db.Updateable(s).ExecuteCommand(); - - #region 鍒嗛厤 - - //娣诲姞鍒嗛厤琛ㄤ俊鎭� - var allot = new BllExportAllot + //鍒涘缓鍑哄簱鍗曟槑缁� + 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) { - SONo = "", - WaveNo = "", - SODetailNo = 0, - StockId = s.Id, - LotNo = "", - LotText = "", - SupplierLot = "", - SkuNo = s.SkuNo, - SkuName = s.SkuName, - Standard = s.Standard, - PalletNo = s.PalletNo, - IsBale = "0", //鏄惁瑁瑰寘 - IsBelt = "0", //鏄惁鎵撳甫 + 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 = userId, - //BoxexQty = s.Qty, - Qty = (int)s.Qty, - CompleteQty = 0, - Status = "1", - LogisticsId = 0, - IsAdvance = "0", - OutMode = model.OutMode,//鍑哄簱鍙� + }; + var m = Db.Insertable(addNoticeDetail).ExecuteReturnEntity(); + noticeDetail = m; + } + //鍑哄簱鍒嗛厤淇℃伅 + 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", //鏄惁鎵撳甫 - CreateUser = userId, - CreateTime = DateTime.Now - }; - Db.Insertable(allot).ExecuteCommand(); + Qty = 0, + CompleteQty = 0, + Status = "5", + LogisticsId = notice.LogisticsId, + IsAdvance = "0", + OutMode = "",//鍑哄簱鍙� + + CreateUser = userId, + UpdateTime = DateTime.Now + }; + + var fp = Db.Insertable(addAllot).ExecuteReturnEntity(); + allot2 = fp; + } + + //鑾峰彇褰撳墠鎵樼洏鎷h揣鏄庣粏 + var complete = Db.Queryable<BllCompleteDetail>().First(a => a.IsDel == "0" && a.PalletNo == palletNo && a.SONo == notice.SONo && a.ExportAllotId == allot2.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 = notice.SONo, + SODetailNo = noticeDetail.Id, + ExportAllotId = allot2.Id, + StockId = allot2.StockId, + BoxNo = "", + BoxNo2 = "", + BoxNo3 = "", + + LotNo = allot2.LotNo, + LotText = allot2.LotText, + SupplierLot = allot2.SupplierLot, + SkuNo = allot2.SkuNo, + SkuName = allot2.SkuName, + Standard = allot2.Standard, + PalletNo = palletNo, + CompleteQty = decimal.Parse(PickQty), + InspectMark = "1", + + CreateUser = userId + }; + comList.Add(completeDetail); + + //娣诲姞鎷h揣鏄庣粏 + Db.Insertable(comList).ExecuteCommand(); + } + else if (isComplete == 1) + { + complete.CompleteQty += decimal.Parse(PickQty); + complete.UpdateUser = userId; + complete.UpdateTime = Db.GetDate(); + + Db.Updateable(complete).ExecuteCommand(); + } + + + + //淇敼鍑哄簱鍒嗛厤淇℃伅 + allot2.Qty += decimal.Parse(PickQty); + allot2.CompleteQty += decimal.Parse(PickQty); + Db.Updateable(allot2).ExecuteCommand(); + + int isDel = 0; + + //鍒犻櫎鎴栦慨鏀瑰簱瀛樻槑缁� + stockDetail.BitPalletMark = "1";//淇敼涓洪浂鎵樻爣璇� + stockDetail.InspectMark = "1";//淇敼涓烘娊妫�鎵樻爣璇� + stockDetail.Qty -= decimal.Parse(PickQty); + if (stockDetail.Qty == stockDetail.LockQty && stockDetail.Qty != 0) + { + 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); + 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.Qty += decimal.Parse(PickQty); + noticeDetail.AllotQty += decimal.Parse(PickQty); + noticeDetail.FactQty += decimal.Parse(PickQty); + noticeDetail.CompleteQty += decimal.Parse(PickQty); + noticeDetail.Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * noticeDetail.Qty; + Db.Updateable(noticeDetail).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("鎵樼洏鐮佷笉鑳戒负绌�"); + } + + //鍑哄簱鍗� + 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 (decimal.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 - - #region 娣诲姞鍑哄簱浠诲姟淇℃伅 + //鑾峰彇褰撳墠鎵樼洏鎷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); - var taskNo = new Common().GetMaxNo("TK"); - var exTask = new LogTask //鍑哄簱浠诲姟 + //鍒よ鏄惁瀛樺湪鎷h揣鏄庣粏 + int isComplete = 0; + if (complete != null) { - TaskNo = taskNo, - Sender = "WMS", - Receiver = "PDA", - IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 - - StartLocat = locat == null ? "闆剁搴�" : s.LocatNo,//璧峰浣嶇疆 - EndLocat = model.OutMode,//鐩爣浣嶇疆 - PalletNo = s.PalletNo,//鎵樼洏鐮� - IsSend = 1,//鏄惁鍙啀娆′笅鍙� - IsCancel = 1,//鏄惁鍙彇娑� - IsFinish = 1,//鏄惁鍙畬鎴� - Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 - Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 - OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� - CreateTime = serverTime, //鍒涘缓鏃堕棿 - CreateUser = userId, //鍒涘缓浜� - Msg = "Pda绌烘墭浠�" + locat == null ? "闆剁搴�" : s.LocatNo + "鍒�" + model.OutMode + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 - //FinishDate = serverTime, //瀹屾垚鏃堕棿 - }; - outDtoList.Add(new OutCommandDto() - { - PalletNo = exTask.PalletNo,//鎵樼洏鍙� - StartLocate = exTask.StartLocat, // 璧峰浣嶇疆 - StartRoadway = locat.RoadwayNo, //鎵�灞炲贩閬� - EndLocate = "", // 鐩爣浣嶇疆 - TaskNo = exTask.TaskNo, // 浠诲姟鍙� - TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱) - OutMode = model.OutMode, //鐩爣鍦板潃 - Order = 1 - }); - Db.Insertable(exTask).ExecuteCommand(); - - #endregion - i += 1; - if (i == int.Parse(model.Num)) - { - //闇�姹傚灈鏁板凡杈惧埌 鍙互鍑哄簱浜� - break; + isComplete = 1; } - } - if (outDtoList.Count > 0) - { - // 姝e紡杩愯绋嬪簭鏀惧紑 - var list2 = outDtoList.Select(m => m.TaskNo).ToList(); - var jsonData = JsonConvert.SerializeObject(outDtoList); - string response = ""; - - try + var comList = new List<BllCompleteDetail>(); + //鍒ゆ柇鏄惁瀛樺湪鎷h揣鏄庣粏 + if (isComplete == 0) { - var time1 = DateTime.Now;//鍙戦�佹椂闂� .ToString("yyyy-MM-dd HH:mm:ss") - response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橶CS鍑哄簱鍛戒护", "WCS"); - var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss") - - ////瑙f瀽杩斿洖鏁版嵁 - var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); - if (wcsModel.StatusCode == 0) + //娣诲姞鎷h揣鏄庣粏 + var completeDetail = new BllCompleteDetail() { - //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�// - new TaskServer().EditTaskIssueOk(list2, time1, time2); - str += "涓嬪彂鎴愬姛"; - } - if (wcsModel.StatusCode == -1) - { - new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg); - throw new Exception(wcsModel.Msg); - } + 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 = decimal.Parse(PickQty), + + CreateUser = userId, + CreateTime = Db.GetDate(), + }; + comList.Add(completeDetail); + + //娣诲姞鎷h揣鏄庣粏 + Db.Insertable(comList).ExecuteCommand(); } - catch (Exception ex) + else if (isComplete == 1) { - throw new Exception(ex.Message); + complete.CompleteQty += decimal.Parse(PickQty); + complete.UpdateUser = userId; + complete.UpdateTime = Db.GetDate(); + + Db.Updateable(complete).ExecuteCommand(); } + + + + //淇敼鍑哄簱鍒嗛厤淇℃伅 + allot.CompleteQty += decimal.Parse(PickQty); + allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; + + allot.UpdateTime = DateTime.Now; + Db.Updateable(allot).ExecuteCommand(); + + int isDel = 0; + + //鍒犻櫎鎴栦慨鏀瑰簱瀛樻槑缁� + stockDetail.BitPalletMark = "1";//淇敼涓洪浂鎵樻爣璇� + stockDetail.Qty -= decimal.Parse(PickQty); + stockDetail.LockQty -= decimal.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 -= decimal.Parse(PickQty); + stock.LockQty -= decimal.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 += decimal.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妯″潡", "绌烘墭鍑哄簱", i+"", "涓嬪彂", $"鐢≒DA涓嬪彂浜� {i} 涓┖鎵樺灈", userId); + var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "鎷h揣鍑哄簱", soNo, "鎷h揣", $"鍦≒DA涓婂鍑哄簱鍗曞彿涓猴細{soNo}鐨勬墭鐩樼爜涓猴細{palletNo}鐨勬嫞璐ф搷浣�", userId); Db.CommitTran(); - - return ""; - } catch (Exception e) { Db.RollbackTran(); throw new Exception(e.Message); } - } - //鑾峰彇骞冲簱鎵樼洏淇℃伅 - public List<BoxInfo> GetPingKuInfoByPallet(string soNo, string palletNo) - { - try - { - var info = Db.Queryable<BllExportAllot>().Where(m => m.SONo == soNo && m.PalletNo == palletNo && m.IsDel == "0"); - if (info.Count() == 0) - { - throw new Exception("鏈煡璇㈠埌鎵樼洏鍒嗛厤涓嬪彂鐨勪俊鎭�"); - } - - var data = info.GroupBy(m => new { m.SkuNo, m.SkuName, m.LotNo }).Select(m => new BoxInfo() - { - SkuNo = m.SkuNo, - SkuName = m.SkuName, - LotNo = m.LotNo - }).ToList(); - - return data; - } - catch (Exception e) - { - throw new Exception(e.Message); - } - } - + #region 鎷h揣鎷兼墭 /// <summary> - /// 骞冲簱鍑哄簱瀹屾垚 + /// 鎷兼墭鍑哄簱pda鎷h揣-鏍囩 /// </summary> - /// <param name="soNo">鍗曟嵁鍙�</param> - /// <param name="palletNo">鎵樼洏鐮�</param> - /// <param name="userId">鎿嶄綔浜�</param> - public void PlaneExportSuccess(string soNo, string palletNo, int userId) + /// <param name="soNo"></param> + /// <param name="soDetailId"></param> + /// <param name="palletNo"></param> + /// <param name="boxNo"></param> + /// <param name="boxNo3"></param> + /// <param name="pickQty1"></param> + /// <param name="palletNoNew"></param> + /// <param name="userId"></param> + public void SoSetPinPick(string soNo, string soDetailId, string palletNo, string boxNo, string boxNo3, string pickQty1, string palletNoNew, int userId) { + Db.BeginTran(); try { - #region 鎵樼洏淇℃伅 + var nowDate = DateTime.Now;//褰撳墠鏃堕棿 + #region 鍒ゆ柇 - //鑾峰彇鎵樼洏淇℃伅 - var pallet = Db.Queryable<SysPallets>().First(p => p.IsDel == "0" && p.PalletNo == palletNo); - //楠岃瘉鎵樼洏淇℃伅鏄惁涓虹┖ - if (pallet == null) + if (string.IsNullOrWhiteSpace(soNo)) { - throw new Exception("鎵樼洏淇℃伅涓嶅瓨鍦紝璇锋鏌�!"); + throw new Exception("鍑哄簱鍗曟嵁涓嶈兘涓虹┖"); } - if (pallet.Status == "0") + if (string.IsNullOrWhiteSpace(soDetailId)) { - throw new Exception("鎵樼洏鏈娇鐢紝璇锋鏌�!"); + throw new Exception("鍑哄簱鐗╂枡-鎵规涓嶈兘涓虹┖"); } - #endregion - - #region 鎵樼洏鏄惁鍦ㄥ钩搴撻獙璇� - - var result = Db.Queryable<DataStockDetail>().First(m => m.PalletNo == palletNo); - if (result == null) + if (string.IsNullOrWhiteSpace(palletNo)) { - throw new Exception("搴撳瓨淇℃伅涓笉瀛樺湪璇ユ墭鐩樹俊鎭紝璇锋鏌�!"); + throw new Exception("鎵樼洏鐮佷笉鑳戒负绌�"); + } + if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0) + { + throw new Exception("杩芥函鏉$爜鍜屾嫞璐ф暟閲忎笉鑳藉悓鏃惰緭鍏�"); + } + if (string.IsNullOrWhiteSpace(palletNoNew)) + { + throw new Exception("鏂版墭鐩樼爜涓嶈兘涓虹┖"); + } + if (palletNo == palletNoNew)//鍘熸墭鐩樹笌鏂版墭鐩樹竴鑷� + { + if (!string.IsNullOrEmpty(boxNo)) + { + throw new Exception("鍘熸墭鐩樹笌鏂版墭鐩樹竴鑷达紝璇烽�夋嫨鏁存墭鍑哄簱"); + } } - if (result.WareHouseNo!="W02")//W02锛氶浂绠卞簱 + //鍑哄簱鍗� + var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == soNo); + if (notice == null) { - throw new Exception("璇ユ墭鐩樻湭鍦ㄩ浂绠卞簱锛岃妫�鏌�!"); + throw new Exception("鏈煡璇㈠埌璇ュ嚭搴撳崟鐨勪俊鎭�"); } + if (notice.Type != "1" && notice.Type != "2" && notice.Type != "3") + { + 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; - #endregion - - //鑾峰彇搴撳瓨鏄庣粏淇℃伅 - var stockDetail = Db.Queryable<DataStockDetail>().Where(s => s.IsDel == "0" && s.PalletNo == palletNo).ToList(); - //楠岃瘉搴撳瓨鏄庣粏淇℃伅鏄惁瀛樺湪 + //搴撳瓨鏄庣粏 + var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId); if (stockDetail == null) { - throw new Exception("搴撳瓨鏄庣粏涓嶅瓨鍦紝璇锋鏌ュ簱瀛樹俊鎭�!"); + 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("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨淇℃伅锛�"); } - Db.BeginTran(); + #endregion - try + #region 鎷兼墭淇℃伅 + var sdId = 0; + bool isNew = false; + var pinStockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew); + if (pinStockDetail != null) { - foreach (var item in stockDetail) + if (palletNo != palletNoNew)//闈炴暣鎵樻嫞璐� { - if (item.SkuNo == "100099")//鍒ゆ柇鏄惁鏄┖鎵樺嚭搴� + if (pinStockDetail.SONo != notice.SONo) { - //鍒ゆ柇鎬诲簱瀛樻槸鍚︿负0锛屽鏋滀负0鍒犻櫎 鍚﹀垯鍑忓幓鏁伴噺 - var stock = Db.Queryable<DataStock>().First(m => m.SkuNo == "100099"); - - if (stock != null) - { - if (item.LockQty != null) - { - stock.Qty -= item.LockQty.Value; - stock.LockQty -= item.LockQty.Value; - Db.Updateable(stock).ExecuteCommand(); - } - - if (stock.Qty == 0) - { - Db.Deleteable(stock).ExecuteCommand(); - } - } - - //鎵樼洏鐘舵�佹敼涓烘湭浣跨敤 - var sCode = Db.Queryable<SysPallets>().First(m => m.PalletNo == item.PalletNo); - if (sCode != null) - { - sCode.Status = "0"; - Db.Updateable(sCode).ExecuteCommand(); - } - Db.Deleteable(item).ExecuteCommand(); - - continue; + throw new Exception("鎷兼墭鎵樼洏涓婂彧鑳芥斁鍚屼竴涓嚭搴撳崟涓嬬殑鐗╂枡锛�"); } - item.LocatNo = "";//鍌ㄤ綅鏇存敼锛堟敼涓虹┖锛� - item.WareHouseNo = "";//鎵�灞炰粨搴撴洿鏀癸紙鏀逛负绌猴級 - item.RoadwayNo = "";//鎵�灞炲贩閬撴洿鏀癸紙鏀逛负绌猴級 - item.AreaNo = "";//鎵�灞炲尯鍩熸洿鏀癸紙鏀逛负绌猴級 - Db.Updateable(item).ExecuteCommand(); + if (pinStockDetail.SkuName != stockDetail.SkuName || pinStockDetail.LotNo != stockDetail.LotNo) + { + isNew = true; + } } - //鍑哄簱娴佹按锛堟洿鏀圭姸鎬侊級 - var allot = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.Status == "1" && m.PalletNo == palletNo && m.SONo == soNo).ToList(); + sdId = pinStockDetail.Id; + } + else + { + isNew = true; - foreach (var item in allot) + var newPalletInfo = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0"); + if (newPalletInfo == null) { - if (item.SkuNo == "100099") + throw new Exception("鏂版墭鐩樹俊鎭笉瀛樺湪鎴栧凡琚娇鐢紒"); + } + //淇敼鏂版墭鐩樼姸鎬� + newPalletInfo.Status = "1"; + Db.Updateable(newPalletInfo).ExecuteCommand(); + } + var sd = new DataStockDetail(); + if (isNew) + { + sd.LotNo = stockDetail.LotNo; + sd.LotText = stockDetail.LotText; + sd.SupplierLot = stockDetail.SupplierLot; + sd.SkuNo = stockDetail.SkuNo; + sd.SkuName = stockDetail.SkuName; + sd.Standard = stockDetail.Standard; + + sd.FrozenQty = 0; + sd.InspectQty = 0; + sd.ASNNo = ""; + sd.ASNDetailNo = null; + sd.SONo = soNo;//鍑哄簱鍗曞彿 + sd.WareHouseNo = ""; + sd.RoadwayNo = ""; + sd.AreaNo = ""; + sd.LocatNo = ""; + sd.PalletNo = palletNoNew; + sd.PalletNo2 = ""; + sd.PalletNo3 = ""; + //PalletType = item.PalletType, + sd.CompleteTime = nowDate; + sd.ProductionTime = stockDetail.ProductionTime; + sd.ExpirationTime = stockDetail.ExpirationTime; + sd.Status = "2";//鐘舵�侊紝宸插垎閰� + sd.InspectMark = stockDetail.InspectMark; + sd.InspectStatus = stockDetail.InspectStatus; + sd.BitPalletMark = "0"; + sd.PackagNo = noticeDetail.PackagNo; + sd.IsBale = stockDetail.IsBale; + sd.IsBelt = stockDetail.IsBelt; + sd.Demo = stockDetail.Demo; + sd.OwnerName = stockDetail.OwnerName; + sd.OwnerNo = stockDetail.OwnerNo; + sd.SupplierName = stockDetail.SupplierName; + sd.SupplierNo = stockDetail.SupplierNo; + + sd.IsDel = "0"; + sd.CreateUser = userId; + sd.CreateTime = nowDate; + + //鏂板鎷兼墭搴撳瓨鏄庣粏淇℃伅 + sdId = Db.Insertable(sd).ExecuteReturnIdentity(); + } + #endregion + + decimal pickQty = 0;//鎷h揣鐨勬暟閲� + if (string.IsNullOrWhiteSpace(boxNo))//鏁存墭鎷h揣 + { + List<DataBoxInfo> boxInfos; + var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo);//鎵惧埌鎵樼洏涓婃墍鏈夌鐮� + boxInfos = boxInfo.ToList(); + if (boxInfo.Count() <= 0) + { + throw new Exception("璇ユ墭鐩樹笂娌℃湁鍙嫞璐х殑绠卞瓙"); + } + var boxQty = boxInfo.GroupBy(m => m.PalletNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToList(); + if (boxQty[0] > needQty) + { + throw new Exception("鎷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 (comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) { - item.Status = "5"; - item.CompleteQty += stockDetail[0].Qty; + throw new Exception($"褰撳墠{item.BoxNo}涓瓄item.BoxNo3}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷h揣"); } - else + if (item.SkuNo != allot.SkuNo || item.LotNo != allot.LotNo) { - item.Status = "2"; + throw new Exception("褰撳墠鎵樼洏涓婃湁鍏朵粬涓嶅悓鐗╂枡鎵规锛屾嫞璐уけ璐�"); + } + //娣诲姞鎷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 = item.Qty, + + CreateUser = userId + }; + comList.Add(completeDetail); + + if (palletNo != palletNoNew) + { + item.StockDetailId = sdId; + item.BindNo = null;//鎵樼洏缁戝畾鍙� + item.PalletNo = palletNoNew; + } + item.Status = "5";//绠辨敮鐘舵�侊紝0锛氭湭缁勬墭 1锛氬凡缁勬墭 2锛氬凡鍏ュ簱 3锛氬凡鍑哄簱 4:宸插垎閰� 5锛氬凡鎷h揣 + //淇敼搴撳瓨绠辩爜鏄庣粏 + Db.Updateable(item).ExecuteCommand(); + + pickQty += item.Qty; + } + //娣诲姞鎷h揣鏄庣粏 + Db.Insertable(comList).ExecuteCommand(); + //淇敼鍑哄簱鍒嗛厤淇℃伅 + allot.CompleteQty += pickQty; + allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; + allot.UpdateTime = DateTime.Now; + Db.Updateable(allot).ExecuteCommand(); + + if (palletNo != palletNoNew) + { + //鍒犻櫎鍘熸墭鐩樺簱瀛樻槑缁� + Db.Deleteable(stockDetail).ExecuteCommand(); + + //鏀瑰彉鍘熸墭鐩樼姸鎬佷负锛氭湭浣跨敤 + 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(); + } + else + { + stockDetail.SONo = soNo; + Db.Updateable(stockDetail).ExecuteCommand(); + } + + //淇敼鍑哄簱鍗曟槑缁嗘嫞璐ф暟閲� + noticeDetail.CompleteQty += pickQty; + noticeDetail.Status = "2"; + 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"; //鏇存敼涓烘墽琛屽畬鎴� + noticeDetail.Status = "3"; + Db.Updateable(noticeDetail).ExecuteCommand(); + } + //淇敼鍑哄簱鍗曚俊鎭� + Db.Updateable(notice).ExecuteCommand(); + } + else + { + var biaoShi = "0";//0锛氭暣绠辨嫞璐с��1锛氭暎鏀嫞璐с��2锛氭暟閲忔嫞璐� + List<DataBoxInfo> boxInfos; + var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo && m.StockDetailId == stockDetail.Id); + if (boxInfo.Count() == 0) + { + throw new Exception("鏈煡璇㈠埌璇ョ鐮佸強杩芥函鐮佺殑淇℃伅"); + } + boxInfos = boxInfo.ToList(); + + var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).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揣鏁伴噺涓嶈兘澶т簬鍓╀綑寰呮嫞鏁伴噺"); + } + + foreach (var item in boxInfos) + { + if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo3 == item.BoxNo3)) + { + throw new Exception($"褰撳墠{item.BoxNo}涓瓄item.BoxNo3}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷h揣"); + } + } + + biaoShi = "1"; + } + else if (!string.IsNullOrEmpty(pickQty1) && decimal.Parse(pickQty1) > 0)//鏁伴噺鎷h揣 + { + if (boxInfo.Count() > 1) + { + throw new Exception("璇ョ鐮佸唴瀛樺湪鏀爜涓嶈兘杩涜鏁伴噺鎷h揣"); + } + decimal boxQty = boxInfo.First().Qty; + if (decimal.Parse(pickQty1) > boxQty) + { + throw new Exception("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鏁伴噺"); + } + if (decimal.Parse(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揣鏁伴噺涓嶈兘澶т簬绠卞唴鍓╀綑寰呮嫞鏁伴噺"); + } + + foreach (var item in boxInfos) + { + if (biaoShi != "2" && comDetailList.Any(m => m.BoxNo == item.BoxNo)) + { + throw new Exception($"褰撳墠{item.BoxNo}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷h揣"); + } + } + } + + var comList = new List<BllCompleteDetail>(); + foreach (var item in boxInfos) + { + //娣诲姞鎷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" ? decimal.Parse(pickQty1) : item.Qty, + + CreateUser = userId + }; + comList.Add(completeDetail); + + if (biaoShi == "0")//鏁寸鎷h揣 + { + //淇敼搴撳瓨绠辩爜鏄庣粏 + item.StockDetailId = sdId; + item.BindNo = null;//鎵樼洏缁戝畾鍙� + item.PalletNo = palletNoNew; + item.Status = "5";//绠辨敮鐘舵�侊紝0锛氭湭缁勬墭 1锛氬凡缁勬墭 2锛氬凡鍏ュ簱 3锛氬凡鍑哄簱 4:宸插垎閰� 5锛氬凡鎷h揣 + Db.Updateable(item).ExecuteCommand(); + + pickQty += item.Qty; + } + else if (biaoShi == "1")//鏁f敮鎷h揣 + { + //淇敼搴撳瓨绠辩爜鏄庣粏 + item.StockDetailId = sdId; + item.BindNo = null;//鎵樼洏缁戝畾鍙� + item.PalletNo = palletNoNew; + item.BoxNo = item.BoxNo3;//灏嗘敮鐮佽祴缁欑鐮� + item.BitBoxMark = "1";//闆剁鏍囪 + item.Status = "5";//绠辨敮鐘舵�侊紝0锛氭湭缁勬墭 1锛氬凡缁勬墭 2锛氬凡鍏ュ簱 3锛氬凡鍑哄簱 4:宸插垎閰� 5锛氬凡鎷h揣 + Db.Updateable(item).ExecuteCommand(); + + pickQty += item.Qty; + } + else//鏁伴噺鎷h揣 + { + var boxInfo2 = Db.Queryable<DataBoxInfo>().First(m => m.IsDel == "0" && m.BoxNo == boxNo && m.StockDetailId == sdId); + + if (decimal.Parse(pickQty1) == item.Qty) + { + //淇敼搴撳瓨绠辩爜鏄庣粏 + item.StockDetailId = sdId; + item.BindNo = null;//鎵樼洏缁戝畾鍙� + item.PalletNo = palletNoNew; + item.Status = "5";//绠辨敮鐘舵�侊紝0锛氭湭缁勬墭 1锛氬凡缁勬墭 2锛氬凡鍏ュ簱 3锛氬凡鍑哄簱 4:宸插垎閰� 5锛氬凡鎷h揣 + Db.Updateable(item).ExecuteCommand(); + } + else + { + if (boxInfo2 == null) + { + var dataBoxInfo = new DataBoxInfo() + { + StockDetailId = sdId, + BindNo = item.BindNo, + BoxNo = item.BoxNo, + BoxNo2 = item.BoxNo2, + BoxNo3 = item.BoxNo3, + PalletNo = item.PalletNo, + PalletNo2 = item.PalletNo2, + PalletNo3 = item.PalletNo3, + Qty = decimal.Parse(pickQty1), + FullQty = item.FullQty, + Status = "5", + LotNo = item.LotNo, + LotText = item.LotText, + SkuNo = item.SkuNo, + SkuName = item.SkuName, + Standard = item.Standard, + ProductionTime = item.ProductionTime, + SupplierLot = item.SupplierLot, + InspectMark = item.InspectMark, + BitBoxMark = "1", + InspectStatus = item.InspectStatus, + InspectTime = item.InspectTime, + }; + + Db.Insertable(dataBoxInfo).ExecuteCommand(); + } + else + { + boxInfo2.Qty += decimal.Parse(pickQty1); + item.BitBoxMark = boxInfo2.Qty>= boxInfo2.FullQty? "0":"1" ;//闆剁鏍囪瘑 + Db.Updateable(boxInfo2).ExecuteCommand(); + } + item.Qty -= decimal.Parse(pickQty1); + item.BitBoxMark = "1";//闆剁鏍囪瘑 + if (item.Qty<=0) + { + Db.Deleteable(item).ExecuteCommand(); + } + else + { + Db.Updateable(item).ExecuteCommand(); + } + + } + + pickQty += decimal.Parse(pickQty1); + } + } + //鏀瑰彉搴撳唴绠辩爜鏄惁闆剁淇℃伅 + 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"; + allot.UpdateTime = DateTime.Now; + if (allot.Status == "5") + { + //鍒ゆ柇璇ユ墭鐩樻槸鍚﹁繕瀛樺湪鐗╂枡 瀛樺湪鏀逛负寰呭洖搴� 寰呭洖搴撳畬鎴愬悗鏀逛负宸插畬鎴� } Db.Updateable(allot).ExecuteCommand(); - #region 娣诲姞鍑哄簱鎿嶄綔鏃ュ織璁板綍淇℃伅 + //鍒犻櫎鎴栦慨鏀瑰簱瀛樻槑缁� + 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"; + } - //娣诲姞鎿嶄綔鏃ュ織璁板綍 - var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鎷h揣鏄庣粏", soNo, "瀹屾垚", $"鐢≒DA瀹屾垚浜嗗崟鎹彿涓簕soNo}鐨勫钩搴撳嚭搴�", userId); + if (stockDetail.Qty <= 0) + { + Db.Deleteable(stockDetail).ExecuteCommand(); + } + else + { + Db.Updateable(stockDetail).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; + noticeDetail.Status = "2"; + Db.Updateable(noticeDetail).ExecuteCommand(); - #endregion - - Db.CommitTran(); + var num = Db.Queryable<BllExportNoticeDetail>() + .Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); + if (num <= 0) + { + notice.Status = "4"; //鏇存敼涓烘墽琛屽畬鎴� + noticeDetail.Status = "3"; + Db.Updateable(noticeDetail).ExecuteCommand(); + } + + //淇敼鍑哄簱鍗曚俊鎭� + Db.Updateable(notice).ExecuteCommand(); } - catch (Exception e) + + if (isNew) { - Db.RollbackTran(); - throw new Exception(e.Message); + var sd2 = Db.Queryable<DataStockDetail>().First(m=>m.Id == sdId); + sd2.Qty = pickQty; + sd2.LockQty = pickQty; + + Db.Updateable(sd2).ExecuteCommand(); } + else + { + if (palletNo != palletNoNew) + { + //淇敼鎷兼墭鎵樼洏搴撳瓨鏄庣粏 + pinStockDetail.Qty += pickQty; + pinStockDetail.LockQty += pickQty; + Db.Updateable(pinStockDetail).ExecuteCommand(); + } + } + + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "鎷h揣鎷兼墭", soNo, "鎷h揣", $"鍦≒DA涓婂鍑哄簱鍗曞彿涓猴細{soNo}鐨勫師鎵樼洏鐮佷负锛歿palletNo}锛屾柊鎵樼洏鐮佷负锛歿palletNoNew}鐨勬嫞璐ф嫾鎵樻搷浣�", userId); + Db.CommitTran(); } catch (Exception e) { + Db.RollbackTran(); throw new Exception(e.Message); } } + /// <summary> + /// 鎷兼墭鍑哄簱pda鎷h揣-鏁伴噺 + /// </summary> + /// <param name="soNo"></param> + /// <param name="soDetailId"></param> + /// <param name="palletNo"></param> + /// <param name="PickQty"></param> + /// <param name="palletNoNew"></param> + /// <param name="userId"></param> + public void SoSetQtyPinPick(string soNo, string soDetailId, string palletNo, string PickQty, string palletNoNew, int userId) + { + Db.BeginTran(); + try + { + var nowDate = DateTime.Now;//褰撳墠鏃堕棿 + #region 鍒ゆ柇 - + if (string.IsNullOrWhiteSpace(soNo)) + { + throw new Exception("鍑哄簱鍗曟嵁涓嶈兘涓虹┖"); + } + //if (string.IsNullOrWhiteSpace(soDetailId)) + //{ + // throw new Exception("鍑哄簱鐗╂枡-鎵规涓嶈兘涓虹┖"); + //} + if (string.IsNullOrWhiteSpace(palletNo)) + { + throw new Exception("鎵樼洏鐮佷笉鑳戒负绌�"); + } + if (string.IsNullOrWhiteSpace(palletNoNew)) + { + 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 (decimal.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("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨淇℃伅锛�"); + } + if (palletNo == palletNoNew)//鍘熸墭鐩樹笌鏂版墭鐩樹竴鑷� + { + if (decimal.Parse(PickQty) != stockDetail.Qty) + { + throw new Exception("鍘熸墭鐩樹笌鏂版墭鐩樹竴鑷达紝闇�瑕佹妸鎵樼洏涓婃墍鏈夋暟閲忔嫞璐�"); + } + } + #endregion + + #region 鎷兼墭淇℃伅 + bool isNew = false; + var pinStockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew); + if (pinStockDetail != null) + { + if (palletNo != palletNoNew)//闈炴暣鎵樻嫞璐� + { + if (pinStockDetail.SONo != notice.SONo) + { + throw new Exception("鎷兼墭鎵樼洏涓婂彧鑳芥斁鍚屼竴涓嚭搴撳崟涓嬬殑鐗╂枡锛�"); + } + if (pinStockDetail.SkuName != stockDetail.SkuName || pinStockDetail.LotNo != stockDetail.LotNo) + { + isNew = true; + } + } + } + else + { + isNew = true; + + var newPalletInfo = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0"); + if (newPalletInfo == null) + { + throw new Exception("鏂版墭鐩樹俊鎭笉瀛樺湪鎴栧凡琚娇鐢紒"); + } + //淇敼鏂版墭鐩樼姸鎬� + newPalletInfo.Status = "1"; + Db.Updateable(newPalletInfo).ExecuteCommand(); + } + + if (isNew) + { + var sd = new DataStockDetail(); + + sd.LotNo = stockDetail.LotNo; + sd.LotText = stockDetail.LotText; + sd.SupplierLot = stockDetail.SupplierLot; + sd.SkuNo = stockDetail.SkuNo; + sd.SkuName = stockDetail.SkuName; + sd.Standard = stockDetail.Standard; + + sd.Qty = decimal.Parse(PickQty); + sd.LockQty = decimal.Parse(PickQty); + + sd.FrozenQty = 0; + sd.InspectQty = 0; + sd.ASNNo = ""; + sd.ASNDetailNo = null; + sd.SONo = soNo;//鍑哄簱鍗曞彿 + sd.WareHouseNo = ""; + sd.RoadwayNo = ""; + sd.AreaNo = ""; + sd.LocatNo = ""; + sd.PalletNo = palletNoNew; + sd.PalletNo2 = ""; + sd.PalletNo3 = ""; + //PalletType = item.PalletType, + sd.CompleteTime = nowDate; + sd.ProductionTime = stockDetail.ProductionTime; + sd.ExpirationTime = stockDetail.ExpirationTime; + sd.Status = "2";//鐘舵�侊紝宸插垎閰� + sd.InspectMark = stockDetail.InspectMark; + sd.InspectStatus = stockDetail.InspectStatus; + sd.BitPalletMark = "0"; + sd.PackagNo = noticeDetail.PackagNo; + sd.IsBale = stockDetail.IsBale; + sd.IsBelt = stockDetail.IsBelt; + sd.Demo = stockDetail.Demo; + sd.OwnerName = stockDetail.OwnerName; + sd.OwnerNo = stockDetail.OwnerNo; + sd.SupplierName = stockDetail.SupplierName; + sd.SupplierNo = stockDetail.SupplierNo; + + sd.IsDel = "0"; + sd.CreateUser = userId; + sd.CreateTime = nowDate; + + //鏂板鎷兼墭搴撳瓨鏄庣粏淇℃伅 + Db.Insertable(sd).ExecuteReturnIdentity(); + } + else + { + if (palletNo != palletNoNew) + { + //淇敼鎷兼墭鎵樼洏搴撳瓨鏄庣粏 + pinStockDetail.Qty += decimal.Parse(PickQty); + pinStockDetail.LockQty += decimal.Parse(PickQty); + Db.Updateable(pinStockDetail).ExecuteCommand(); + } + else + { + pinStockDetail.SONo = soNo; + Db.Updateable(pinStockDetail).ExecuteCommand(); + } + } + #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揣鏄庣粏 + isComplete = 0;//鎵�鏈夋棤绠辩爜鎴栦竴绾х鐮佹嫞璐ф椂锛屾嫞璐ф槑缁嗗簲閲嶆柊鎻掑叆鏁版嵁(浣撶幇澶氭鎷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 = decimal.Parse(PickQty), + + CreateUser = userId, + CreateTime = Db.GetDate(), + }; + comList.Add(completeDetail); + + //娣诲姞鎷h揣鏄庣粏 + Db.Insertable(comList).ExecuteCommand(); + } + else if (isComplete == 1) + { + complete.CompleteQty += decimal.Parse(PickQty); + complete.UpdateUser = userId; + complete.UpdateTime = Db.GetDate(); + + Db.Updateable(complete).ExecuteCommand(); + } + + //淇敼鍑哄簱鍒嗛厤淇℃伅 + allot.CompleteQty += decimal.Parse(PickQty); + allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; + allot.UpdateTime = DateTime.Now; + Db.Updateable(allot).ExecuteCommand(); + + int isDel = 0; + + if (palletNo != palletNoNew) + { + //鍒犻櫎鎴栦慨鏀瑰簱瀛樻槑缁� + stockDetail.BitPalletMark = "1";//淇敼涓洪浂鎵樻爣璇� + stockDetail.Qty -= decimal.Parse(PickQty); + stockDetail.LockQty -= decimal.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(); + } + } + else + { + isDel = 1; + } + //鍒ゆ柇鎵樼洏涓婄墿鏂欐槸鍚︽嫞璐у畬姣� + if (isDel == 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 += decimal.Parse(PickQty); + noticeDetail.Status = "2"; + 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"; //鏇存敼涓烘墽琛屽畬鎴� + noticeDetail.Status = "3"; + Db.Updateable(noticeDetail).ExecuteCommand(); + } + //淇敼鍑哄簱鍗曚俊鎭� + Db.Updateable(notice).ExecuteCommand(); + + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "鎷h揣鎷兼墭", soNo, "鎷h揣", $"鍦≒DA涓婂鍑哄簱鍗曞彿涓猴細{soNo}鐨勬墭鐩樼爜涓猴細{palletNo}锛屾柊鎵樼洏鐮佷负锛歿palletNoNew}鐨勬嫞璐ф搷浣�", userId); + Db.CommitTran(); + } + catch (Exception e) + { + Db.RollbackTran(); + throw new Exception(e.Message); + } + } + #endregion } } -- Gitblit v1.8.0