From 1c2541b283ce6ba855e67c476412dffe2c693480 Mon Sep 17 00:00:00 2001 From: chengsc <11752@DESKTOP-DS49RCP> Date: 星期三, 11 六月 2025 13:56:23 +0800 Subject: [PATCH] Merge branch 'csc' --- Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs | 2370 ++++++++++++++++++++++++++++++++++++++++++----------------- 1 files changed, 1,681 insertions(+), 689 deletions(-) diff --git a/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs b/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs index 2c65e4c..bdd23ce 100644 --- a/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs +++ b/Wms/WMS.BLL/BllPdaServer/PdaSoServer.cs @@ -22,12 +22,1606 @@ using WMS.Entity.BllAsnEntity; using System.Threading.Tasks; using Utility; +using WMS.BLL.Logic; namespace WMS.BLL.BllPdaServer { public class PdaSoServer : IPdaSoServer { private static readonly SqlSugarScope Db = DataContext.Db; + + #region JC34 + + /// <summary> + /// 鎷兼墭鍑哄簱pda鎷h揣-鏍囩 + /// </summary> + /// <param name="soNo"></param> + /// <param name="soDetailId"></param> + /// <param name="palletNo"></param> + /// <param name="boxNo"></param> + /// <param name="palletNoNew"></param> + /// <param name="userId"></param> + public async Task SoSetPinPick34(string soNo, string soDetailId, string palletNo, string boxNo , string palletNoNew, int userId) + { + Db.BeginTran(); + try + { + var nowDate = DateTime.Now;//褰撳墠鏃堕棿 + #region 鍒ゆ柇 + + if (string.IsNullOrWhiteSpace(soNo)) + { + throw Oops.Bah("鍑哄簱鍗曟嵁涓嶈兘涓虹┖"); + } + if (string.IsNullOrWhiteSpace(soDetailId)) + { + throw Oops.Bah("鍑哄簱鐗╂枡-鎵规涓嶈兘涓虹┖"); + } + if (string.IsNullOrWhiteSpace(palletNo)) + { + throw Oops.Bah("鎵樼洏鐮佷笉鑳戒负绌�"); + } + if (string.IsNullOrWhiteSpace(palletNoNew)) + { + throw Oops.Bah("鏂版墭鐩樼爜涓嶈兘涓虹┖"); + } + if (palletNo == palletNoNew)//鍘熸墭鐩樹笌鏂版墭鐩樹竴鑷� + { + if (!string.IsNullOrEmpty(boxNo)) + { + throw Oops.Bah("鍘熸墭鐩樹笌鏂版墭鐩樹竴鑷达紝璇烽�夋嫨鏁存墭鍑哄簱"); + } + } + + //鍑哄簱鍗� + var notice = await Db.Queryable<BllExportNotice>().FirstAsync(m => m.IsDel == "0" && m.SONo == soNo); + if (notice == null) + { + throw Oops.Bah("鏈煡璇㈠埌璇ュ嚭搴撳崟鐨勪俊鎭�"); + } + if (notice.Status != "3") + { + throw Oops.Bah("鍑哄簱鍗曠殑鐘舵�佷笉鏄鍦ㄦ墽琛岋紝涓嶈兘鎷h揣"); + } + //鍑哄簱鍗曟槑缁� + var noticeDetail = await Db.Queryable<BllExportNoticeDetail>() + .FirstAsync(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); + if (noticeDetail == null) + { + throw Oops.Bah("鏈煡璇㈠埌璇ュ嚭搴撳崟鏄庣粏鐨勪俊鎭�"); + } + //鍑哄簱鍒嗛厤淇℃伅 + var allot = await Db.Queryable<BllExportAllot>().FirstAsync(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 Oops.Bah("鏈煡璇㈠埌璇ユ墭鐩樼殑鍒嗛厤淇℃伅"); + } + //鍓╀綑鎷h揣鏁伴噺锛堝緟鎷e噺鍘诲凡鎷o級 + var needQty = allot.Qty - allot.CompleteQty; + + //搴撳瓨鏄庣粏 + var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.Id == allot.StockId); + if (stockDetail == null) + { + throw Oops.Bah("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨鏄庣粏淇℃伅锛�"); + } + //搴撳瓨鎬昏〃 + var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); + if (stock == null) + { + throw Oops.Bah("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨淇℃伅锛�"); + } + + #endregion + + #region 鎷兼墭淇℃伅 + var sdId = 0; + bool isNew = false; + + var pinStockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.SkuNo == stockDetail.SkuNo && m.LotNo == stockDetail.LotNo); + + if (pinStockDetail != null) + { + if (palletNo != palletNoNew)//闈炴暣鎵樻嫞璐� + { + var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Id!= pinStockDetail.Id).ToList(); + if (pinStockDetails.Count(m=>m.SONo != notice.SONo) > 0) + { + throw Oops.Bah("鎷兼墭鎵樼洏涓婂彧鑳芥斁鍚屼竴涓嚭搴撳崟涓嬬殑鐗╂枡锛�"); + } + } + + sdId = pinStockDetail.Id; + } + else + { + isNew = true; + + var newPalletInfo = await Db.Queryable<SysPallets>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0"); + if (newPalletInfo == null) + { + var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew &&(m.SkuNo != stockDetail.SkuNo || m.LotNo != stockDetail.LotNo)).ToList(); + if (pinStockDetails.Count(m => m.SONo != notice.SONo) > 0) + { + throw Oops.Bah("鏂版墭鐩樹俊鎭笉瀛樺湪鎴栧凡琚娇鐢紒"); + } + } + else + { + //淇敼鏂版墭鐩樼姸鎬� + newPalletInfo.Status = "1"; + await Db.Updateable(newPalletInfo).ExecuteCommandAsync(); + } + + } + + 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 = ""; + + 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; + sd.UDF5 = "1"; + //鏂板鎷兼墭搴撳瓨鏄庣粏淇℃伅 + sdId = await Db.Insertable(sd).ExecuteReturnIdentityAsync(); + } + #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 = await boxInfo.ToListAsync(); + if (boxInfo.Count() <= 0) + { + throw Oops.Bah("璇ユ墭鐩樹笂娌℃湁鍙嫞璐х殑绠卞瓙"); + } + var boxQty = await boxInfo.GroupBy(m => m.PalletNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync(); + if (boxQty[0] > needQty) + { + throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鍓╀綑寰呮嫞鏁伴噺"); + } + + var comDetailList = await Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToListAsync(); + var comList = new List<BllCompleteDetail>(); + foreach (var item in boxInfos) + { + if (comDetailList.Any(m => m.BoxNo == item.BoxNo)) + { + throw Oops.Bah($"褰撳墠{item.BoxNo}宸叉嫞璐у畬鎴愶紝璇峰嬁閲嶅鎷h揣"); + } + if (item.SkuNo != allot.SkuNo || item.LotNo != allot.LotNo) + { + throw Oops.Bah("褰撳墠鎵樼洏涓婃湁鍏朵粬涓嶅悓鐗╂枡鎵规锛屾嫞璐уけ璐�"); + } + //娣诲姞鎷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揣 + //淇敼搴撳瓨绠辩爜鏄庣粏 + await Db.Updateable(item).ExecuteCommandAsync(); + + pickQty += item.Qty; + } + //娣诲姞鎷h揣鏄庣粏 + await Db.Insertable(comList).ExecuteCommandAsync(); + //淇敼鍑哄簱鍒嗛厤淇℃伅 + allot.CompleteQty += pickQty; + allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; + allot.UpdateTime = DateTime.Now; + await Db.Updateable(allot).ExecuteCommandAsync(); + + if (palletNo != palletNoNew) + { + var locateStr = stockDetail.LocatNo; + //鍒犻櫎鍘熸墭鐩樺簱瀛樻槑缁� + await Db.Deleteable(stockDetail).ExecuteCommandAsync(); + + //鏀瑰彉鍘熸墭鐩樼姸鎬佷负锛氭湭浣跨敤 + var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0"); + if (pallet == null) + { + throw Oops.Bah("鏈湪鎵樼洏琛ㄤ腑鏌ヨ鍒版墭鐩樹俊鎭�"); + } + pallet.Status = "0"; + await Db.Updateable(pallet).ExecuteCommandAsync(); + + //鏇存敼鍌ㄤ綅鐘舵�佷负绌哄偍浣� + var locate = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.LocatNo == locateStr); + if (locate != null) + { + locate.Status = "0"; + Db.Updateable(locate).ExecuteCommand(); + } + } + else + { + stockDetail.SONo = soNo; + stockDetail.UDF5 = "1"; + await Db.Updateable(stockDetail).ExecuteCommandAsync(); + } + + //淇敼鍑哄簱鍗曟槑缁嗘嫞璐ф暟閲� + noticeDetail.CompleteQty += pickQty; + await Db.Updateable(noticeDetail).ExecuteCommandAsync(); + + var num = Db.Queryable<BllExportNoticeDetail>().Count(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); + if (num <= 0) + { + notice.Status = "4"; //鏇存敼涓烘墽琛屽畬鎴� + } + //淇敼鍑哄簱鍗曚俊鎭� + await Db.Updateable(notice).ExecuteCommandAsync(); + } + else + { + List<DataBoxInfo> boxInfos; + var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo); + if (await boxInfo.CountAsync() == 0) + { + throw Oops.Bah("鏈煡璇㈠埌璇ョ鐮佺殑淇℃伅"); + } + boxInfos = boxInfo.ToList(); + var comDetailList = await Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == palletNo).ToListAsync(); + + //鏁寸鎷h揣 + + if (boxInfo.Any(m => m.PalletNo != palletNo)) + { + throw Oops.Bah("璇ユ墭鐩樹笌绠辩爜娌℃湁缁戝畾鍏崇郴"); + } + var boxQty = await boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToListAsync(); + if (boxQty[0] > needQty) + { + throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鍓╀綑寰呮嫞鏁伴噺"); + } + + foreach (var item in boxInfos) + { + if (comDetailList.Any(m => m.BoxNo == item.BoxNo)) + { + throw Oops.Bah($"褰撳墠{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 = 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揣 + await Db.Updateable(item).ExecuteCommandAsync(); + + pickQty += item.Qty; + + } + + await Db.Insertable(comList).ExecuteCommandAsync(); + //淇敼鍑哄簱鍒嗛厤淇℃伅 + allot.CompleteQty += pickQty; + allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; + allot.UpdateTime = DateTime.Now; + + await Db.Updateable(allot).ExecuteCommandAsync(); + + //鍒犻櫎鎴栦慨鏀瑰簱瀛樻槑缁� + stockDetail.BitPalletMark = "1";//淇敼涓洪浂鎵樻爣璇� + stockDetail.Qty -= pickQty; + stockDetail.LockQty -= pickQty; + stockDetail.UDF5 = "1"; + 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) + { + var locateStr = stockDetail.LocatNo; + await Db.Deleteable(stockDetail).ExecuteCommandAsync(); + + //鏀瑰彉鎵樼洏鐘舵�� + var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0"); + if (pallet == null) + { + throw Oops.Bah("鏈湪鎵樼洏琛ㄤ腑鏌ヨ鍒版墭鐩樹俊鎭�"); + } + pallet.Status = "0"; + await Db.Updateable(pallet).ExecuteCommandAsync(); + + //鏇存敼鍌ㄤ綅鐘舵�佷负绌哄偍浣� + var locate = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.LocatNo == locateStr); + if (locate != null) + { + locate.Status = "0"; + Db.Updateable(locate).ExecuteCommand(); + } + } + else + { + await Db.Updateable(stockDetail).ExecuteCommandAsync(); + } + + //淇敼鍑哄簱鍗曟槑缁嗘嫞璐ф暟閲� + noticeDetail.CompleteQty += pickQty; + await Db.Updateable(noticeDetail).ExecuteCommandAsync(); + + var num = await Db.Queryable<BllExportNoticeDetail>() + .CountAsync(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); + if (num <= 0) + { + notice.Status = "4"; //鏇存敼涓烘墽琛屽畬鎴� + } + //淇敼鍑哄簱鍗曚俊鎭� + await Db.Updateable(notice).ExecuteCommandAsync(); + } + + if (isNew) + { + var sdnew = Db.Queryable<DataStockDetail>().First(m => m.Id == sdId); + sdnew.Qty = pickQty; + sdnew.LockQty = pickQty; + await Db.Updateable(sdnew).ExecuteCommandAsync(); + } + else + { + if (palletNo != palletNoNew) + { + //淇敼鎷兼墭鎵樼洏搴撳瓨鏄庣粏 + pinStockDetail.Qty += pickQty; + pinStockDetail.LockQty += pickQty; + await Db.Updateable(pinStockDetail).ExecuteCommandAsync(); + } + } + + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "鎷h揣鎷兼墭", soNo, "鎷h揣", $"鍦≒DA涓婂鍑哄簱鍗曞彿涓猴細{soNo}鐨勫師鎵樼洏鐮佷负锛歿palletNo}锛屾柊鎵樼洏鐮佷负锛歿palletNoNew}鐨勬嫞璐ф嫾鎵樻搷浣�", userId); + Db.CommitTran(); + } + catch (Exception e) + { + Db.RollbackTran(); + throw e; + } + } + + /// <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 async Task SoSetQtyPinPick34(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 Oops.Bah("鍑哄簱鍗曟嵁涓嶈兘涓虹┖"); + } + if (string.IsNullOrWhiteSpace(palletNo)) + { + throw Oops.Bah("鎵樼洏鐮佷笉鑳戒负绌�"); + } + if (string.IsNullOrWhiteSpace(palletNoNew)) + { + throw Oops.Bah("鏂版墭鐩樼爜涓嶈兘涓虹┖"); + } + + //鍑哄簱鍗� + var notice = await Db.Queryable<BllExportNotice>().FirstAsync(m => m.IsDel == "0" && m.SONo == soNo); + if (notice == null) + { + throw Oops.Bah("鏈煡璇㈠埌璇ュ嚭搴撳崟鐨勪俊鎭�"); + } + if (notice.Status != "3") + { + throw Oops.Bah("鍑哄簱鍗曠殑鐘舵�佷笉鏄鍦ㄦ墽琛岋紝涓嶈兘鎷h揣"); + } + //鍑哄簱鍗曟槑缁� + var noticeDetail = await Db.Queryable<BllExportNoticeDetail>() + .FirstAsync(m => m.IsDel == "0" && m.Id == int.Parse(soDetailId)); + if (noticeDetail == null) + { + throw Oops.Bah("鏈煡璇㈠埌璇ュ嚭搴撳崟鏄庣粏鐨勪俊鎭�"); + } + //鍑哄簱鍒嗛厤淇℃伅 + var allot = await Db.Queryable<BllExportAllot>().FirstAsync(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 Oops.Bah("鏈煡璇㈠埌璇ユ墭鐩樼殑鍒嗛厤淇℃伅"); + } + //鍓╀綑鎷h揣鏁伴噺锛堝緟鎷e噺鍘诲凡鎷o級 + var needQty = allot.Qty - allot.CompleteQty; + if (int.Parse(PickQty) > needQty) + { + throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘澶т簬鎵樺唴鍓╀綑寰呮嫞鏁伴噺"); + } + + //搴撳瓨鏄庣粏 + var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.Id == allot.StockId); + if (stockDetail == null) + { + throw Oops.Bah("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨鏄庣粏淇℃伅锛�"); + } + //搴撳瓨鎬昏〃 + var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); + if (stock == null) + { + throw Oops.Bah("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨淇℃伅锛�"); + } + if (palletNo == palletNoNew)//鍘熸墭鐩樹笌鏂版墭鐩樹竴鑷� + { + if (int.Parse(PickQty) != stockDetail.Qty) + { + throw Oops.Bah("鍘熸墭鐩樹笌鏂版墭鐩樹竴鑷达紝闇�瑕佹妸鎵樼洏涓婃墍鏈夋暟閲忔嫞璐�"); + } + } + #endregion + + #region 鎷兼墭淇℃伅 + bool isNew = false; + var pinStockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.SkuNo== stockDetail.SkuNo && m.LotNo == stockDetail.LotNo); + if (pinStockDetail != null) + { + if (palletNo != palletNoNew)//闈炴暣鎵樻嫞璐� + { + var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Id != pinStockDetail.Id).ToList(); + if (pinStockDetails.Count(m => m.SONo != notice.SONo) > 0) + { + throw Oops.Bah("鎷兼墭鎵樼洏涓婂彧鑳芥斁鍚屼竴涓嚭搴撳崟涓嬬殑鐗╂枡锛�"); + } + } + } + else + { + isNew = true; + + var newPalletInfo = await Db.Queryable<SysPallets>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNoNew && m.Status == "0"); + if (newPalletInfo == null) + { + var pinStockDetails = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == palletNoNew && (m.SkuNo != stockDetail.SkuNo && m.LotNo != stockDetail.LotNo)).ToList(); + if (pinStockDetails.Count(m => m.SONo != notice.SONo) > 0) + { + throw Oops.Bah("鏂版墭鐩樹俊鎭笉瀛樺湪鎴栧凡琚娇鐢紒"); + } + } + else + { + //淇敼鏂版墭鐩樼姸鎬� + newPalletInfo.Status = "1"; + await Db.Updateable(newPalletInfo).ExecuteCommandAsync(); + } + } + + 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 = int.Parse(PickQty); + sd.LockQty = int.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; + sd.UDF5 = "1"; + + //鏂板鎷兼墭搴撳瓨鏄庣粏淇℃伅 + await Db.Insertable(sd).ExecuteReturnIdentityAsync(); + } + else + { + if (palletNo != palletNoNew) + { + //淇敼鎷兼墭鎵樼洏搴撳瓨鏄庣粏 + pinStockDetail.Qty += int.Parse(PickQty); + pinStockDetail.LockQty += int.Parse(PickQty); + pinStockDetail.UDF5 = "1"; + await Db.Updateable(pinStockDetail).ExecuteCommandAsync(); + } + else + { + pinStockDetail.SONo = soNo; + pinStockDetail.UDF5 = "1"; + await Db.Updateable(pinStockDetail).ExecuteCommandAsync(); + } + } + #endregion + + //鑾峰彇褰撳墠鎵樼洏鎷h揣鏄庣粏 + var complete = await Db.Queryable<BllCompleteDetail>().FirstAsync(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揣鏄庣粏 + await Db.Insertable(comList).ExecuteCommandAsync(); + } + else if (isComplete == 1) + { + complete.CompleteQty += int.Parse(PickQty); + complete.UpdateUser = userId; + complete.UpdateTime = Db.GetDate(); + + await Db.Updateable(complete).ExecuteCommandAsync(); + } + + //淇敼鍑哄簱鍒嗛厤淇℃伅 + allot.CompleteQty += int.Parse(PickQty); + allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; + allot.UpdateTime = DateTime.Now; + await Db.Updateable(allot).ExecuteCommandAsync(); + + int isDel = 0; + var locateStr = stockDetail.LocatNo; + if (palletNo != palletNoNew) + { + //鍒犻櫎鎴栦慨鏀瑰簱瀛樻槑缁� + stockDetail.BitPalletMark = "1";//淇敼涓洪浂鎵樻爣璇� + stockDetail.Qty -= int.Parse(PickQty); + stockDetail.LockQty -= int.Parse(PickQty); + if (stockDetail.Qty == stockDetail.LockQty) + { + stockDetail.Status = "2"; + } + else if (stockDetail.Qty > stockDetail.LockQty && stockDetail.LockQty > 0) + { + stockDetail.Status = "1"; + } + else + { + stockDetail.Status = "0"; + } + if (stockDetail.Qty <= 0) + { + await Db.Deleteable(stockDetail).ExecuteCommandAsync(); + } + else + { + isDel = 1; + await Db.Updateable(stockDetail).ExecuteCommandAsync(); + } + } + else + { + isDel = 1; + } + //鍒ゆ柇鎵樼洏涓婄墿鏂欐槸鍚︽嫞璐у畬姣� + if (isDel == 0) + { + //鏀瑰彉鎵樼洏鐘舵�佷负锛氭湭浣跨敤 + var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0"); + if (pallet == null) + { + throw Oops.Bah("鏈湪鎵樼洏琛ㄤ腑鏌ヨ鍒版墭鐩樹俊鎭�"); + } + + pallet.Status = "0"; + await Db.Updateable(pallet).ExecuteCommandAsync(); + + //鏇存敼鍌ㄤ綅鐘舵�佷负绌哄偍浣� + var locate = Db.Queryable<SysStorageLocat>().First(m=>m.IsDel == "0" && m.LocatNo == locateStr); + if (locate!=null) + { + locate.Status = "0"; + Db.Updateable(locate).ExecuteCommand(); + } + + } + + //淇敼鍑哄簱鍗曟槑缁嗘嫞璐ф暟閲� + noticeDetail.CompleteQty += int.Parse(PickQty); + await Db.Updateable(noticeDetail).ExecuteCommandAsync(); + + var num = await Db.Queryable<BllExportNoticeDetail>() + .CountAsync(m => m.IsDel == "0" && m.SONo == soNo && m.CompleteQty < m.Qty); + if (num <= 0) + { + notice.Status = "4"; //鏇存敼涓烘墽琛屽畬鎴� + } + //淇敼鍑哄簱鍗曚俊鎭� + await Db.Updateable(notice).ExecuteCommandAsync(); + + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "鎷h揣鎷兼墭", soNo, "鎷h揣", $"鍦≒DA涓婂鍑哄簱鍗曞彿涓猴細{soNo}鐨勬墭鐩樼爜涓猴細{palletNo}锛屾柊鎵樼洏鐮佷负锛歿palletNoNew}鐨勬嫞璐ф搷浣�", userId); + Db.CommitTran(); + } + catch (Exception e) + { + Db.RollbackTran(); + throw e; + } + } + + //鍙栨牱鍑哄簱鎷h揣(鏍囩) + public async Task SampleSetPick(string qcNo, string palletNo, string boxNo, string boxNo3, string pickQty, int userId) + { + try + { + #region 鍒ゆ柇 + + if (string.IsNullOrWhiteSpace(qcNo)) + { + throw Oops.Bah("璇烽獙鍗曟嵁涓嶈兘涓虹┖"); + } + if (string.IsNullOrWhiteSpace(palletNo)) + { + throw Oops.Bah("鎵樼洏鍙蜂笉鑳戒负绌�"); + } + var type = await GetSampleType2(palletNo); + if (type != "0") + { + throw Oops.Bah("褰撳墠鎵樼洏璇峰湪鏁伴噺椤电鍙栨牱"); + } + if (string.IsNullOrEmpty(boxNo)) + { + throw Oops.Bah("澶栫鏉$爜涓嶈兘涓虹┖"); + } + //if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty) && int.Parse(pickQty) > 0) + //{ + // throw new Exception("杩芥函鏉$爜鍜屾嫞璐ф暟閲忎笉鑳藉悓鏃惰緭鍏�"); + //} + + //璇烽獙鍗� + var inspecd = await Db.Queryable<BllQualityInspectionRequest>().FirstAsync(m => m.IsDel == "0" && m.QcNo == qcNo); + if (inspecd == null) + { + throw Oops.Bah("鏈煡璇㈠埌璇烽獙鍗曚俊鎭�"); + } + if (inspecd.Status == "0" || inspecd.Status == "3") + { + throw Oops.Bah("璇烽獙鍗曠姸鎬侀敊璇紝璇锋牳瀹�"); + } + //搴撳瓨鏄庣粏淇℃伅 + var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); + if (stockDetail == null) + { + throw Oops.Bah("鏈湪搴撳瓨涓煡璇㈠嚭褰撳墠鎵樼洏淇℃伅"); + } + // 鍒ゆ柇鎵樼洏鏄惁鍦ㄥ簱鍐� + if (!string.IsNullOrWhiteSpace(stockDetail.LocatNo)) + { + var wareHouseData = await Db.Queryable<SysWareHouse>().FirstAsync(m => m.IsDel == "0" && m.WareHouseNo == stockDetail.WareHouseNo); + if (wareHouseData.Type != "2") + { + throw Oops.Bah("褰撳墠鎵樼洏涓嶆槸搴撳鎵樼洏锛岃鏍稿疄"); + } + } + //绠辨敮淇℃伅 + var boxInfoList = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo).ToListAsync(); + //搴撳瓨鎬昏〃 + var stock = await Db.Queryable<DataStock>().FirstAsync(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); + if (stock == null) + { + throw Oops.Bah("鏈煡璇㈠嚭搴撳瓨鎬讳俊鎭�"); + } + //鍏ュ簱鍗� + var notice = await Db.Queryable<BllArrivalNotice>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo); + if (notice == null) + { + throw Oops.Bah("鏈煡璇㈠埌鍏ュ簱鍗曚俊鎭�"); + } + + #endregion + + //鍙栨牱鏄庣粏璁板綍琛� + var sampld = await Db.Queryable<BllSamplingDetails>().Where(m => m.IsDel == "0" && m.QcNo == qcNo).ToListAsync(); + + var isAddSampld = false; + var PickType = ""; //0鏁伴噺鎷h揣 1 绠辨敮鎷h揣 + var EditboxInfo = new DataBoxInfo(); + var EditboxInfoList = new List<DataBoxInfo>(); + + #region 鍒ゆ柇鎷h揣鏂瑰紡 鏁f敮 鏁伴噺 + + if (!string.IsNullOrEmpty(pickQty) && decimal.Parse(pickQty) > 0) //鏁伴噺鎷h揣 + { + PickType = "0"; + + if (!string.IsNullOrWhiteSpace(boxNo3)) //鏀腑鎷f暟閲� + { + if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) == 0) + { + throw Oops.Bah("鏈煡璇㈠埌鏀爜淇℃伅"); + } + if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) > 1) + { + throw Oops.Bah("鏀爜淇℃伅鏁版嵁淇℃伅閿欒锛岃鏍稿疄"); + } + EditboxInfo = await Db.Queryable<DataBoxInfo>().FirstAsync(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo && m.BoxNo3 == boxNo3); + if (EditboxInfo.Qty < decimal.Parse(pickQty)) + { + throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鏁伴噺"); + } + isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo && m.BoxNo3 == EditboxInfo.BoxNo3) == 0; + } + else //绠变腑鎷f暟閲� + { + + if (boxInfoList.Count == 0) + { + throw Oops.Bah("鏈湪鎵樼洏涓婃煡璇㈠埌绠辩爜淇℃伅锛岃鏍稿疄"); + } + if (boxInfoList.Count > 1) + { + throw Oops.Bah("绠辩爜鏁版嵁淇℃伅閿欒锛岃鏍稿疄"); + } + if (boxInfoList.Count(m => !string.IsNullOrWhiteSpace(m.BoxNo3)) > 0) + { + throw Oops.Bah("褰撳墠绠辩爜涓惈鏈夋敮鐮侊紝璇疯緭鍏ユ敮鐮佷俊鎭彇鏍�"); + } + EditboxInfo = await Db.Queryable<DataBoxInfo>().FirstAsync(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo); + + if (EditboxInfo.Qty < decimal.Parse(pickQty)) + { + throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鏁伴噺"); + } + isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo) == 0; + + } + if (sampld.Sum(m => m.CompleteQty) + decimal.Parse(pickQty) > inspecd.SamplingQty) + { + throw Oops.Bah("鍙栨牱鎬绘嫞璐ф暟閲忓ぇ浜庤楠屽崟鍙栨牱鏁伴噺"); + } + //鍒ゆ柇绠变腑鏄惁鍚湁鏀爜锛屾湁锛氫笉璁╂嫞鏁伴噺 + if (stockDetail.Qty - stockDetail.LockQty - stockDetail.FrozenQty < decimal.Parse(pickQty)) + { + throw Oops.Bah("鎵樼洏涓婂彲鐢ㄦ暟閲忓皬浜庡彇鏍锋暟閲忥紝璇锋牳瀹為攣瀹氥�佸喕缁撴暟閲�"); + } + } + else //绠辨敮鎷h揣 + { + PickType = "1"; + var qty = 0m; + + if (!string.IsNullOrWhiteSpace(boxNo3)) //鎷f敮 + { + + if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) == 0) + { + throw Oops.Bah("鏈煡璇㈠埌鏀爜淇℃伅"); + } + if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) > 1) + { + throw Oops.Bah("鏀爜鏁版嵁淇℃伅閿欒锛岃鏍稿疄"); + } + EditboxInfoList = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo && m.BoxNo3 == boxNo3).ToListAsync(); + if (EditboxInfoList.Sum(m => m.Qty) + sampld.Sum(m => m.CompleteQty) > inspecd.SamplingQty) + { + throw Oops.Bah("鍙栨牱鎬绘嫞璐ф暟閲忓ぇ浜庤楠屽崟鍙栨牱鏁伴噺"); + } + qty = EditboxInfoList.Sum(m => m.Qty); + //isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo && m.BoxNo3 == EditboxInfo.BoxNo3) == 0; + } + else //鎷g + { + + if (boxInfoList.Count == 0) + { + throw Oops.Bah("鏈湪鎵樼洏涓婃煡璇㈠埌绠辩爜淇℃伅锛岃鏍稿疄"); + } + if (boxInfoList.Count > 1) + { + throw Oops.Bah("绠辩爜鏁版嵁淇℃伅閿欒锛岃鏍稿疄"); + } + if (boxInfoList.Count(m => !string.IsNullOrWhiteSpace(m.BoxNo3)) > 0) + { + throw Oops.Bah("褰撳墠绠辩爜涓惈鏈夋敮鐮侊紝璇疯緭鍏ユ敮鐮佷俊鎭彇鏍�"); + } + EditboxInfoList = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo).ToListAsync(); + + if (EditboxInfo.Qty < decimal.Parse(pickQty)) + { + throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鏁伴噺"); + } + qty = EditboxInfoList.Sum(m => m.Qty); + //isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo) == 0; + } + if (sampld.Sum(m => m.CompleteQty) + qty > inspecd.SamplingQty) + { + throw Oops.Bah("鍙栨牱鎬绘嫞璐ф暟閲忓ぇ浜庤楠屽崟鍙栨牱鏁伴噺"); + } + if (stockDetail.Qty - stockDetail.LockQty - stockDetail.FrozenQty < qty) + { + throw Oops.Bah("鎵樼洏涓婂彲鐢ㄦ暟閲忓皬浜庡彇鏍锋暟閲忥紝璇锋牳瀹為攣瀹氥�佸喕缁撴暟閲�"); + } + } + #endregion + + Db.BeginTran(); + #region + + + if (PickType == "0") + { + + #region 娣诲姞鎴栦慨鏀瑰彇鏍锋槑缁� + + var boxInfo = EditboxInfo; + + //if (isAddSampld) //娣诲姞鍙栨牱鏄庣粏 + //{ + var sampleDetail = new BllSamplingDetails() + { + QcNo = qcNo, + ASNNo = inspecd.ASNNo, + PalletNo = palletNo, + BoxNo = boxInfo.BoxNo, + BoxNo2 = boxInfo.BoxNo2, + BoxNo3 = boxInfo.BoxNo3, + SkuNo = boxInfo.SkuNo, + SkuName = boxInfo.SkuName, + Standard = boxInfo.Standard, + LotNo = boxInfo.LotNo, + SupplierLot = boxInfo.SupplierLot, + CompleteQty = decimal.Parse(pickQty), + CreateTime = DateTime.Now, + CreateUser = userId + }; + Db.Insertable(sampleDetail).ExecuteCommand(); + //} + //else + //{ + // var sampldFirst = sampld.First(m => m.PalletNo == palletNo && m.BoxNo == boxInfo.BoxNo); + // if (!string.IsNullOrWhiteSpace(boxNo3)) + // { + // sampldFirst = sampld.First(m => m.PalletNo == palletNo && m.BoxNo == boxInfo.BoxNo && m.BoxNo3 == boxInfo.BoxNo3); + // } + // sampldFirst.CompleteQty += decimal.Parse(pickQty); + // sampldFirst.UpdateTime = DateTime.Now; + // sampldFirst.UpdateUser = userId; + // Db.Updateable(sampldFirst).ExecuteCommand(); + //} + + #endregion + + #region 淇敼搴撳瓨涓夎〃 + + //鎷嗗寘鏈夋晥鏈熸洿鏀� + var unpackWarranty = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo).UnpackWarranty; + foreach (var item in boxInfoList) + { + item.BitBoxMark = "1"; + item.InspectMark = "1"; + + if (unpackWarranty > 0 && boxInfoList.Count(m => m.ProductionTime != null) > 0) + { + if (item.ProductionTime != null) + { + var time = DateTime.Parse(item.ProductionTime.ToString()).AddDays((double)unpackWarranty); + if (time < item.ExpirationTime) + { + item.ExpirationTime = time; + } + } + } + + } + Db.Updateable(boxInfoList).ExecuteCommand(); + + //搴撳瓨绠辩爜 + boxInfo.Qty -= decimal.Parse(pickQty); + if (boxInfo.Qty == 0) + { + Db.Deleteable(boxInfo).ExecuteCommand(); + } + else + { + Db.Updateable(boxInfo).ExecuteCommand(); + } + //搴撳瓨鏄庣粏 + stockDetail.Qty -= decimal.Parse(pickQty); + if (stockDetail.Qty == 0) + { + Db.Deleteable(stockDetail).ExecuteCommand(); + } + else + { + Db.Updateable(stockDetail).ExecuteCommand(); + } + //搴撳瓨鎬昏〃 + stock.Qty -= decimal.Parse(pickQty); + if (stock.Qty == 0) + { + Db.Deleteable(stock).ExecuteCommand(); + } + else + { + Db.Updateable(stock).ExecuteCommand(); + } + + #endregion + + #region 淇敼鍏ュ簱鍗� + + //涓嶆槸涓婁紶瀹屾瘯鐨勪慨鏀瑰彇鏍风姸鎬� + if (notice.Status != "4") + { + var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); + if (noticeDetail.IsSampling == "0") + { + noticeDetail.IsSampling = "1"; + + Db.Updateable(noticeDetail).ExecuteCommand(); + } + + } + + + #endregion + + #region 淇敼璇烽獙鍗� + + inspecd.Status = "2"; + inspecd.UpdateTime = DateTime.Now; + if (sampld.Sum(m => m.CompleteQty) + decimal.Parse(pickQty) >= inspecd.SamplingQty) + { + inspecd.Status = "3"; + } + Db.Updateable(inspecd).ExecuteCommand(); + #endregion + + } + else + { + var sumQty = 0m; + foreach (var boxInfo in EditboxInfoList) + { + #region 娣诲姞鎴栦慨鏀瑰彇鏍锋槑缁� + + //if (isAddSampld) //娣诲姞鍙栨牱鏄庣粏 + //{ + var sampleDetail = new BllSamplingDetails() + { + QcNo = qcNo, + ASNNo = inspecd.ASNNo, + PalletNo = palletNo, + BoxNo = boxInfo.BoxNo, + BoxNo2 = boxInfo.BoxNo2, + BoxNo3 = boxInfo.BoxNo3, + SkuNo = boxInfo.SkuNo, + SkuName = boxInfo.SkuName, + Standard = boxInfo.Standard, + LotNo = boxInfo.LotNo, + SupplierLot = boxInfo.SupplierLot, + CompleteQty = boxInfo.Qty, + CreateTime = DateTime.Now, + CreateUser = userId + }; + await Db.Insertable(sampleDetail).ExecuteCommandAsync(); + //} + //else + //{ + // var sampldFirst = sampld.First(m => m.PalletNo == palletNo && m.BoxNo == boxInfo.BoxNo); + // if (!string.IsNullOrWhiteSpace(boxNo3)) + // { + // sampldFirst = sampld.First(m => m.PalletNo == palletNo && m.BoxNo == boxInfo.BoxNo && m.BoxNo3 == boxInfo.BoxNo3); + // } + // sampldFirst.CompleteQty += boxInfo.Qty; + // sampldFirst.UpdateTime = DateTime.Now; + // sampldFirst.UpdateUser = userId; + // Db.Updateable(sampldFirst).ExecuteCommand(); + //} + #endregion + + #region 淇敼搴撳瓨涓夎〃 + + //鎷嗗寘鏈夋晥鏈熸洿鏀� + var unpackWarranty = (await Db.Queryable<SysMaterials>().FirstAsync(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo)).UnpackWarranty; + + foreach (var item in boxInfoList) + { + item.BitBoxMark = "1"; + item.InspectMark = "1"; + if (unpackWarranty > 0 && boxInfoList.Count(m => m.ProductionTime != null) > 0) + { + if (item.ProductionTime != null) + { + var time = DateTime.Parse(item.ProductionTime.ToString()).AddDays((double)unpackWarranty); + if (time < item.ExpirationTime) + { + item.ExpirationTime = time; + } + } + } + } + await Db.Updateable(boxInfoList).ExecuteCommandAsync(); + + //搴撳瓨绠辩爜 + + await Db.Deleteable(boxInfo).ExecuteCommandAsync(); + + //搴撳瓨鏄庣粏 + stockDetail.Qty -= boxInfo.Qty; + if (stockDetail.Qty == 0) + { + await Db.Deleteable(stockDetail).ExecuteCommandAsync(); + } + else + { + await Db.Updateable(stockDetail).ExecuteCommandAsync(); + } + //搴撳瓨鎬昏〃 + stock.Qty -= boxInfo.Qty; + if (stock.Qty == 0) + { + await Db.Deleteable(stock).ExecuteCommandAsync(); + } + else + { + await Db.Updateable(stock).ExecuteCommandAsync(); + } + + #endregion + + #region 淇敼鍏ュ簱鍗� + + //涓嶆槸涓婁紶瀹屾瘯鐨勪慨鏀瑰彇鏍风姸鎬� + if (notice.Status != "4") + { + var noticeDetail = await Db.Queryable<BllArrivalNoticeDetail>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); + if (noticeDetail.IsSampling == "0") + { + noticeDetail.IsSampling = "1"; + + await Db.Updateable(noticeDetail).ExecuteCommandAsync(); + } + + } + + #endregion + + sumQty += boxInfo.Qty; + } + + #region 淇敼璇烽獙鍗� + inspecd.Status = "2"; + inspecd.UpdateTime = DateTime.Now; + if (sampld.Sum(m => m.CompleteQty) + sumQty >= inspecd.SamplingQty) + { + inspecd.Status = "3"; + } + + await Db.Updateable(inspecd).ExecuteCommandAsync(); + #endregion + } + + #endregion + + + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "鍙栨牱鎷h揣", qcNo, "鎷h揣", $"鍦≒DA涓婂璇烽獙鍗曞彿涓猴細{qcNo}鐨勬墭鐩樼爜涓猴細{palletNo}鐨勬嫞璐ф搷浣�", userId); + Db.CommitTran(); + } + catch (Exception e) + { + Db.RollbackTran(); + throw e; + } + } + + + //鍙栨牱鍑哄簱鎷h揣(鏁伴噺) + public async Task SampleSetQtyPick(string qcNo, string palletNo, string pickQty, int userId) + { + try + { + #region 鍒ゆ柇 + + if (string.IsNullOrWhiteSpace(qcNo)) + { + throw Oops.Bah("璇烽獙鍗曟嵁涓嶈兘涓虹┖"); + } + if (string.IsNullOrWhiteSpace(palletNo)) + { + throw Oops.Bah("鎵樼洏鍙蜂笉鑳戒负绌�"); + } + var type = await GetSampleType2(palletNo); + if (type != "1") + { + throw Oops.Bah("褰撳墠鎵樼洏璇峰湪鏍囩椤电鍙栨牱"); + } + if (string.IsNullOrWhiteSpace(pickQty)) + { + throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘涓虹┖"); + } + if (decimal.Parse(pickQty) <= 0) + { + throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘灏忎簬绛変簬0"); + } + + //璇烽獙鍗� + var inspecd = await Db.Queryable<BllQualityInspectionRequest>().FirstAsync(m => m.IsDel == "0" && m.QcNo == qcNo); + if (inspecd == null) + { + throw Oops.Bah("鏈煡璇㈠埌璇烽獙鍗曚俊鎭�"); + } + if (inspecd.Status == "0" || inspecd.Status == "3") + { + throw Oops.Bah("璇烽獙鍗曠姸鎬侀敊璇紝璇锋牳瀹�"); + } + //搴撳瓨鏄庣粏淇℃伅 + var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo + && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); + if (stockDetail == null) + { + throw Oops.Bah("鏈湪搴撳瓨涓煡璇㈠嚭褰撳墠鎵樼洏淇℃伅"); + } + // 鍒ゆ柇鎵樼洏鏄惁鍦ㄥ簱鍐� + if (!string.IsNullOrWhiteSpace(stockDetail.LocatNo)) + { + var wareHouseData = await Db.Queryable<SysWareHouse>().FirstAsync(m => m.IsDel == "0" && m.WareHouseNo == stockDetail.WareHouseNo); + if (wareHouseData.Type != "2") + { + throw Oops.Bah("褰撳墠鎵樼洏涓嶆槸搴撳鎵樼洏锛岃鏍稿疄"); + } + } + //搴撳瓨鎬昏〃 + var stock = await Db.Queryable<DataStock>().FirstAsync(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); + if (stock == null) + { + throw Oops.Bah("鏈煡璇㈠嚭搴撳瓨鎬讳俊鎭�"); + } + //鍏ュ簱鍗� + var notice = await Db.Queryable<BllArrivalNotice>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo); + if (notice == null) + { + throw Oops.Bah("鏈煡璇㈠埌鍏ュ簱鍗曚俊鎭�"); + } + + #endregion + + //鍙栨牱鏄庣粏璁板綍琛� + var sampld = await Db.Queryable<BllSamplingDetails>().Where(m => m.IsDel == "0" && m.QcNo == qcNo).ToListAsync(); + var qty = decimal.Parse(pickQty); + //var isAddSampld = sampld.Count(m => m.PalletNo == palletNo) == 0; + + + #region 鍒ゆ柇鏁伴噺 + + if (sampld.Sum(m => m.CompleteQty) + qty > inspecd.SamplingQty) + { + throw Oops.Bah("鍙栨牱鎬绘嫞璐ф暟閲忓ぇ浜庤楠屽崟鍙栨牱鏁伴噺"); + } + //鍒ゆ柇绠变腑鏄惁鍚湁鏀爜锛屾湁锛氫笉璁╂嫞鏁伴噺 + if (stockDetail.Qty - stockDetail.LockQty - stockDetail.FrozenQty < qty) + { + throw Oops.Bah("鎵樼洏涓婂彲鐢ㄦ暟閲忓皬浜庡彇鏍锋暟閲忥紝璇锋牳瀹為攣瀹氥�佸喕缁撴暟閲�"); + } + + + #endregion + + #region 娣诲姞鎴栦慨鏀瑰彇鏍锋槑缁� + + Db.BeginTran(); + + //if (isAddSampld) //娣诲姞鍙栨牱鏄庣粏 + //{ + var sampleDetail = new BllSamplingDetails() + { + QcNo = qcNo, + ASNNo = inspecd.ASNNo, + PalletNo = palletNo, + SkuNo = stockDetail.SkuNo, + SkuName = stockDetail.SkuName, + Standard = stockDetail.Standard, + LotNo = stockDetail.LotNo, + SupplierLot = stockDetail.SupplierLot, + CompleteQty = qty, + CreateTime = DateTime.Now, + CreateUser = userId + }; + await Db.Insertable(sampleDetail).ExecuteCommandAsync(); + //} + //else + //{ + // var sampldFirst = sampld.First(m => m.PalletNo == palletNo); + // sampldFirst.CompleteQty += qty; + // sampldFirst.UpdateTime = DateTime.Now; + // sampldFirst.UpdateUser = userId; + // Db.Updateable(sampldFirst).ExecuteCommand(); + //} + + #endregion + + #region 淇敼搴撳瓨涓夎〃 + + //搴撳瓨鏄庣粏 + stockDetail.Qty -= qty; + if (stockDetail.Qty == 0) + { + await Db.Deleteable(stockDetail).ExecuteCommandAsync(); + } + else + { + stockDetail.BitPalletMark = "1"; + stockDetail.InspectMark = "1"; + + await Db.Updateable(stockDetail).ExecuteCommandAsync(); + } + //搴撳瓨鎬昏〃 + stock.Qty -= qty; + if (stock.Qty == 0) + { + await Db.Deleteable(stock).ExecuteCommandAsync(); + } + else + { + await Db.Updateable(stock).ExecuteCommandAsync(); + } + + #endregion + + #region 淇敼鍏ュ簱鍗� + + //涓嶆槸涓婁紶瀹屾瘯鐨勪慨鏀瑰彇鏍风姸鎬� + if (notice.Status != "4") + { + var noticeDetail = await Db.Queryable<BllArrivalNoticeDetail>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); + if (noticeDetail.IsSampling == "0") + { + noticeDetail.IsSampling = "1"; + + await Db.Updateable(noticeDetail).ExecuteCommandAsync(); + } + + } + + + #endregion + + #region 淇敼璇烽獙鍗� + inspecd.Status = "2"; + inspecd.UpdateTime = DateTime.Now; + if (sampld.Sum(m => m.CompleteQty) + qty >= inspecd.SamplingQty) + { + inspecd.Status = "3"; + } + await Db.Updateable(inspecd).ExecuteCommandAsync(); + #endregion + + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "鍙栨牱鎷h揣", qcNo, "鎷h揣", $"鍦≒DA涓婂璇烽獙鍗曞彿涓猴細{qcNo}鐨勬墭鐩樼爜涓猴細{palletNo}鐨勬嫞璐ф搷浣�", userId); + Db.CommitTran(); + } + catch (Exception e) + { + Db.RollbackTran(); + throw e; + } + } + + //杞﹂棿pda鎷h揣 + public async Task ChejianPick(string palletNo, string boxNo, int userId) + { + Db.BeginTran(); + try + { + #region 鍒ゆ柇 + + if (string.IsNullOrWhiteSpace(palletNo)) + { + throw Oops.Bah("鎵樼洏鐮佷笉鑳戒负绌�"); + } + if (string.IsNullOrEmpty(boxNo)) + { + throw Oops.Bah("杩芥函鏉$爜鍜屾嫞璐ф暟閲忎笉鑳藉悓鏃惰緭鍏�"); + } + + //绠辩爜鏄庣粏 + List<DataBoxInfo> boxInfos; + var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxNo); + if (await boxInfo.CountAsync() == 0) + { + throw Oops.Bah("鏈煡璇㈠埌璇ョ鐮佸強杩芥函鐮佺殑淇℃伅"); + } + boxInfos = await boxInfo.ToListAsync(); + + //搴撳瓨鏄庣粏 + var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo && m.SkuNo == boxInfos.First().SkuNo && m.LotNo == boxInfos.First().LotNo); + if (stockDetail == null) + { + throw Oops.Bah("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨鏄庣粏淇℃伅锛�"); + } + var areaList = new List<string>() { "B06", "B07", "B09" }; + if (!areaList.Contains(stockDetail.AreaNo)) + { + throw Oops.Bah("鎵樼洏涓嶆槸杞﹂棿鎵樼洏锛�"); + } + //搴撳瓨鎬昏〃 + var stock = await Db.Queryable<DataStock>().FirstAsync(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); + if (stock == null) + { + throw Oops.Bah("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨淇℃伅锛�"); + } + #endregion + + + var pickQty = boxInfos.Sum(m => m.Qty); + + + //鍒犻櫎鎴栦慨鏀瑰簱瀛樻槑缁� + stockDetail.BitPalletMark = "1";//淇敼涓洪浂鎵樻爣璇� + stockDetail.Qty -= 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) + { + await Db.Deleteable(stockDetail).ExecuteCommandAsync(); + } + else + { + await Db.Updateable(stockDetail).ExecuteCommandAsync(); + } + stock.Qty -= pickQty; + //stock.LockQty -= pickQty; + if (stock.Qty <= 0) + { + await Db.Deleteable(stock).ExecuteCommandAsync(); + } + else + { + await Db.Updateable(stock).ExecuteCommandAsync(); + } + var num2 = await Db.Queryable<DataStockDetail>().CountAsync(m => m.IsDel == "0" && m.PalletNo == palletNo); + if (num2 <= 0) + { + //鏀瑰彉鎵樼洏鐘舵�� + var pallet = await Db.Queryable<SysPallets>().FirstAsync(m => m.PalletNo == palletNo && m.IsDel == "0"); + if (pallet == null) + { + throw Oops.Bah("鏈湪鎵樼洏琛ㄤ腑鏌ヨ鍒版墭鐩樹俊鎭�"); + } + pallet.Status = "0"; + await Db.Updateable(pallet).ExecuteCommandAsync(); + } + + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "杞﹂棿鍑哄簱", boxNo, "鎷h揣", $"鍦≒DA涓婂绠卞彿涓猴細{boxNo}鐨勬墭鐩樼爜涓猴細{palletNo}鐨勬嫞璐ф搷浣�", userId); + Db.CommitTran(); + } + catch (AppFriendlyException e) + { + Db.RollbackTran(); + } + catch (Exception e) + { + Db.RollbackTran(); + throw new Exception(e.Message); + } + } + + /// <summary> + /// 鏍规嵁绠辩爜鑾峰彇鏍囩绠辩爜淇℃伅锛堣溅闂村叆搴�-鑾峰彇WMS鐢熸垚鐨勭淇℃伅锛� + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + public List<BoxInfoDto> GetWmsBoxInfos(string boxNo) + { + try + { + if (string.IsNullOrEmpty(boxNo)) + { + throw new Exception("璇锋壂鎻忓绠辨潯鐮�!"); + } + + string sqlString = $@"SELECT BoxNo, SkuNo, SkuName, LotNo FROM DataBoxInfo + WHERE IsDel = '0' and BoxNo = '{boxNo}' + GROUP BY BoxNo,SkuNo,SkuName,LotNo; "; + var models = Db.Ado.SqlQuery<BoxInfoDto>(sqlString); + + if (models.Count != 0) + { + return models; + } + else + { + throw new Exception("娌℃湁鏌ヨ鍒扮鐮佷俊鎭�"); + } + + } + catch (Exception ex) + { + throw ex; + } + } + + #endregion //楠岃瘉鎵樼洏鏄惁瀛樺湪骞舵槸鍚﹀彲鍑哄簱 public async Task<string> IsEnableOkPalletNo(string palletNo) @@ -62,10 +1656,10 @@ throw Oops.Bah("鎵樼洏鐮佷负绌猴紝璇疯緭鍏ユ墭鐩樼爜"); } var palletInfo = await Db.Queryable<DataStockDetail>().FirstAsync(w => w.IsDel == "0" && w.PalletNo == palletNo); - if (!string.IsNullOrEmpty(palletInfo.WareHouseNo) && type != "1") - { - throw Oops.Bah("璇ユ墭鐩樿繕鏈嚭搴�"); - } + //if (!string.IsNullOrEmpty(palletInfo.WareHouseNo) && type != "1") + //{ + // throw Oops.Bah("璇ユ墭鐩樿繕鏈嚭搴�"); + //} if (type == "1")//骞冲簱鍑哄簱鑾峰彇鍗曟嵁 { var allotList = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.Status == "1" && m.PalletNo == palletNo).Select(m => m.SONo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync(); @@ -80,6 +1674,27 @@ return allotList2; } + + + //鑾峰彇鎵樼洏涓惈鏈夌殑鎵ц涓殑鍗曟嵁 + public async Task<List<string>> GetPalletListBySo(string soNo, string soDetailId) + { + if (string.IsNullOrWhiteSpace(soNo))//鍒ゆ柇鎵樼洏鏄惁涓虹┖ + { + throw Oops.Bah("鍑哄簱鍗曚负绌猴紝璇烽�夋嫨鍑哄簱鍗�"); + } + if (string.IsNullOrWhiteSpace(soDetailId)) + { + throw Oops.Bah("鍑哄簱鏄庣粏涓虹┖锛岃閫夋嫨鐗╂枡-鎵规"); + } + + var allotList = await Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.Status == "0" && m.SONo == soNo && m.SODetailNo == int.Parse(soDetailId)).Select(m => m.PalletNo).Distinct().Where(m => !string.IsNullOrWhiteSpace(m)).ToListAsync(); + return allotList; + + + } + + //鑾峰彇鎵樼洏涓惈鏈夌殑鎵ц涓殑鍗曟嵁 public async Task<List<string>> GetRunNoticeList(string type) @@ -99,6 +1714,25 @@ return allotList2; } + + public async Task<List<DetailIdSkuLotNo>> GetSoSkuLotNoListBySo(string soNo) + { + if (string.IsNullOrWhiteSpace(soNo))//鍒ゆ柇鎵樼洏鏄惁涓虹┖ + { + throw Oops.Bah("鍗曟嵁涓虹┖锛岃閫夋嫨鍗曟嵁"); + } + //鑾峰彇鐘舵�佷负寰呮嫞璐ф垨鑰呴儴鍒嗘嫞璐х殑鍑哄簱鍗� + var allotList = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SONo == soNo && (m.Status == "0" || m.Status == "1")); + + var list = await allotList.GroupBy(m => new { m.SODetailNo, m.SkuNo, m.SkuName, m.LotNo }).Select(m => new DetailIdSkuLotNo() + { + SoDetailId = m.SODetailNo, + SkuName = m.SkuName, + LotNo = m.LotNo, + }).ToListAsync(); + + return list; + } //鑾峰彇鍑哄簱鎵樼洏涓婄殑鐗╂枡鎵规(鏍规嵁鎵樼洏鐮�) public async Task<List<DetailIdSkuLotNo>> GetSoSkuLotNoListByPallet(string palletNo, string soNo) { @@ -998,9 +2632,8 @@ //鑾峰彇褰撳墠鏃堕棿 DateTime serverTime = Db.GetDate(); //鑾峰彇搴撳瓨鏄庣粏鏄惁灏忎簬绛変簬璇ュ灈鏁� - //string str = "select * from DataStockDetail where IsDel = '0' and SkuNo = '100099' and Status = '0' "; - //var stockDetail = Db.Ado.SqlQuery<DataStockDetail>(str); - var stockDetail = await Db.Queryable<DataStockDetail>().Where(s => s.IsDel == "0" && s.SkuNo == "100099" && s.Status == "0").ToListAsync(); + + var stockDetail = await Db.Queryable<DataStockDetail>().Where(s => s.IsDel == "0" && s.SkuNo == "100099" && s.Status == "0" && !string.IsNullOrWhiteSpace(s.WareHouseNo)).ToListAsync(); if (stockDetail.Count > 0) { //鍒ゆ柇鏄惁澶т簬闇�瑕佸灈鏁� @@ -1009,6 +2642,7 @@ throw Oops.Bah("闇�瑕佸灈鏁板ぇ浜庡簱瀛樺灈鏁帮紝璇烽噸鏂拌緭鍏�!"); } } + stockDetail = new AllotSku().GetDataListOrder(stockDetail); //鑾峰彇搴撳瓨鎬昏〃淇℃伅 var stock = await Db.Queryable<DataStock>().FirstAsync(s => s.IsDel == "0" && s.SkuNo == "100099"); //楠岃瘉搴撳瓨鎬昏〃鏄惁涓虹┖ @@ -1025,21 +2659,22 @@ foreach (var s in stockDetail) { //鑾峰彇鍌ㄤ綅淇℃伅 - var locat = await Db.Queryable<SysStorageLocat>().FirstAsync(l => l.LocatNo == s.LocatNo && l.IsDel == "0" && l.WareHouseNo == "W01"); + var locat = await Db.Queryable<SysStorageLocat>().FirstAsync(l => l.LocatNo == s.LocatNo && l.IsDel == "0" && (l.WareHouseNo == "W01"||l.WareHouseNo == "W02")); - if (locat != null) + if (locat == null) { - if (locat.Status != "1") - { - continue; - } - //鏇存敼鍌ㄤ綅鐘舵�佷负鍑哄簱涓� - locat.Status = "3"; //3 鍑哄簱涓� - locat.UpdateTime = serverTime; //淇敼鏃堕棿 - locat.UpdateUser = userId; //淇敼浜� - //淇敼鍌ㄤ綅淇℃伅 - await Db.Updateable(locat).ExecuteCommandAsync(); + throw new Exception("鍌ㄤ綅涓婃病鏈夌┖鎵樼洏璺�"); } + if (locat.Status != "1") + { + continue; + } + //鏇存敼鍌ㄤ綅鐘舵�佷负鍑哄簱涓� + locat.Status = "3"; //3 鍑哄簱涓� + locat.UpdateTime = serverTime; //淇敼鏃堕棿 + locat.UpdateUser = userId; //淇敼浜� + //淇敼鍌ㄤ綅淇℃伅 + await Db.Updateable(locat).ExecuteCommandAsync(); //澧炲姞搴撳瓨閿佸畾鏁伴噺 //stock.AllotQty += @@ -1099,10 +2734,10 @@ { TaskNo = taskNo, Sender = "WMS", - Receiver = "PDA", + Receiver = "WCS", IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 - StartLocat = locat == null ? "闆剁搴�" : s.LocatNo,//璧峰浣嶇疆 + StartLocat = s.LocatNo,//璧峰浣嶇疆 EndLocat = model.OutMode,//鐩爣浣嶇疆 PalletNo = s.PalletNo,//鎵樼洏鐮� IsSend = 1,//鏄惁鍙啀娆′笅鍙� @@ -1111,21 +2746,30 @@ Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� - CreateTime = serverTime, //鍒涘缓鏃堕棿 + CreateTime = Db.GetDate(), //鍒涘缓鏃堕棿 CreateUser = userId, //鍒涘缓浜� - Msg = "Pda绌烘墭浠�" + locat == null ? "闆剁搴�" : s.LocatNo + "鍒�" + model.OutMode + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 + Msg = "Pda绌烘墭浠�" + s.LocatNo + "鍒�" + model.OutMode + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 //FinishDate = serverTime, //瀹屾垚鏃堕棿 }; + var endroad = ""; + if (locat.WareHouseNo == "W01") + { + endroad = new AllotLocation().RoadwayToStationNum(locat.RoadwayNo, model.OutMode); + } + outDtoList.Add(new OutCommandDto() { - PalletNo = exTask.PalletNo,//鎵樼洏鍙� - StartLocate = exTask.StartLocat, // 璧峰浣嶇疆 - StartRoadway = locat.RoadwayNo, //鎵�灞炲贩閬� - EndLocate = "", // 鐩爣浣嶇疆 TaskNo = exTask.TaskNo, // 浠诲姟鍙� TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱) - OutMode = model.OutMode, //鐩爣鍦板潃 - Order = 1 + PalletNo = exTask.PalletNo,//鎵樼洏鍙� + + StartLocate = exTask.StartLocat, // 璧峰浣嶇疆 + StartRoadway = locat.RoadwayNo, //鎵�灞炲贩閬� + EndLocate = model.OutMode, // 鐩爣浣嶇疆 + EndRoadway = endroad, + + Order = 999, + Type = locat.WareHouseNo == "W01"?PLCTypeEnum.ShuttleCar : PLCTypeEnum.AGV }); await Db.Insertable(exTask).ExecuteCommandAsync(); @@ -1152,17 +2796,17 @@ var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss") ////瑙f瀽杩斿洖鏁版嵁 - var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); - if (wcsModel.StatusCode == 0) + var wcsModel = JsonConvert.DeserializeObject<WcsModel2>(response); + if (wcsModel.code == 200) { //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�// new TaskServer().EditTaskIssueOk(list2, time1, time2); //str += "涓嬪彂鎴愬姛"; } - if (wcsModel.StatusCode == -1) + else { - new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg); - throw Oops.Bah(wcsModel.Msg); + new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.message); + throw Oops.Bah(wcsModel.message); } } catch (AppFriendlyException e) @@ -1180,13 +2824,13 @@ var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "绌烘墭鍑哄簱", i + "", "涓嬪彂", $"鐢≒DA涓嬪彂浜� {i} 涓┖鎵樺灈", userId); Db.CommitTran(); - return ""; + return "鎴愬姛"; } catch (Exception e) { Db.RollbackTran(); - return ""; + throw new Exception(e.Message); } } @@ -3468,659 +5112,7 @@ return data; } - //鍙栨牱鍑哄簱鎷h揣(鏍囩) - public async Task SampleSetPick(string qcNo, string palletNo, string boxNo, string boxNo3, string pickQty, int userId) - { - try - { - #region 鍒ゆ柇 - - if (string.IsNullOrWhiteSpace(qcNo)) - { - throw Oops.Bah("璇烽獙鍗曟嵁涓嶈兘涓虹┖"); - } - if (string.IsNullOrWhiteSpace(palletNo)) - { - throw Oops.Bah("鎵樼洏鍙蜂笉鑳戒负绌�"); - } - var type = await GetSampleType2(palletNo); - if (type != "0") - { - throw Oops.Bah("褰撳墠鎵樼洏璇峰湪鏁伴噺椤电鍙栨牱"); - } - if (string.IsNullOrEmpty(boxNo)) - { - throw Oops.Bah("澶栫鏉$爜涓嶈兘涓虹┖"); - } - //if (!string.IsNullOrEmpty(boxNo3) && !string.IsNullOrEmpty(pickQty) && int.Parse(pickQty) > 0) - //{ - // throw new Exception("杩芥函鏉$爜鍜屾嫞璐ф暟閲忎笉鑳藉悓鏃惰緭鍏�"); - //} - - //璇烽獙鍗� - var inspecd = await Db.Queryable<BllQualityInspectionRequest>().FirstAsync(m => m.IsDel == "0" && m.QcNo == qcNo); - if (inspecd == null) - { - throw Oops.Bah("鏈煡璇㈠埌璇烽獙鍗曚俊鎭�"); - } - if (inspecd.Status == "0" || inspecd.Status == "3") - { - throw Oops.Bah("璇烽獙鍗曠姸鎬侀敊璇紝璇锋牳瀹�"); - } - //搴撳瓨鏄庣粏淇℃伅 - var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); - if (stockDetail == null) - { - throw Oops.Bah("鏈湪搴撳瓨涓煡璇㈠嚭褰撳墠鎵樼洏淇℃伅"); - } - if (!string.IsNullOrWhiteSpace(stockDetail.LocatNo)) - { - throw Oops.Bah("褰撳墠鎵樼洏涓嶆槸搴撳鎵樼洏锛岃鏍稿疄"); - } - //绠辨敮淇℃伅 - var boxInfoList = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo).ToListAsync(); - //搴撳瓨鎬昏〃 - var stock = await Db.Queryable<DataStock>().FirstAsync(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); - if (stock == null) - { - throw Oops.Bah("鏈煡璇㈠嚭搴撳瓨鎬讳俊鎭�"); - } - //鍏ュ簱鍗� - var notice = await Db.Queryable<BllArrivalNotice>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo); - if (notice == null) - { - throw Oops.Bah("鏈煡璇㈠埌鍏ュ簱鍗曚俊鎭�"); - } - - #endregion - - //鍙栨牱鏄庣粏璁板綍琛� - var sampld = await Db.Queryable<BllSamplingDetails>().Where(m => m.IsDel == "0" && m.QcNo == qcNo).ToListAsync(); - - var isAddSampld = false; - var PickType = ""; //0鏁伴噺鎷h揣 1 绠辨敮鎷h揣 - var EditboxInfo = new DataBoxInfo(); - var EditboxInfoList = new List<DataBoxInfo>(); - - #region 鍒ゆ柇鎷h揣鏂瑰紡 鏁f敮 鏁伴噺 - - if (!string.IsNullOrEmpty(pickQty) && decimal.Parse(pickQty) > 0) //鏁伴噺鎷h揣 - { - PickType = "0"; - - if (!string.IsNullOrWhiteSpace(boxNo3)) //鏀腑鎷f暟閲� - { - if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) == 0) - { - throw Oops.Bah("鏈煡璇㈠埌鏀爜淇℃伅"); - } - if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) > 1) - { - throw Oops.Bah("鏀爜淇℃伅鏁版嵁淇℃伅閿欒锛岃鏍稿疄"); - } - EditboxInfo = await Db.Queryable<DataBoxInfo>().FirstAsync(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo && m.BoxNo3 == boxNo3); - if (EditboxInfo.Qty < decimal.Parse(pickQty)) - { - throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鏁伴噺"); - } - isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo && m.BoxNo3 == EditboxInfo.BoxNo3) == 0; - } - else //绠变腑鎷f暟閲� - { - - if (boxInfoList.Count == 0) - { - throw Oops.Bah("鏈湪鎵樼洏涓婃煡璇㈠埌绠辩爜淇℃伅锛岃鏍稿疄"); - } - if (boxInfoList.Count > 1) - { - throw Oops.Bah("绠辩爜鏁版嵁淇℃伅閿欒锛岃鏍稿疄"); - } - if (boxInfoList.Count(m => !string.IsNullOrWhiteSpace(m.BoxNo3)) > 0) - { - throw Oops.Bah("褰撳墠绠辩爜涓惈鏈夋敮鐮侊紝璇疯緭鍏ユ敮鐮佷俊鎭彇鏍�"); - } - EditboxInfo = await Db.Queryable<DataBoxInfo>().FirstAsync(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo); - - if (EditboxInfo.Qty < decimal.Parse(pickQty)) - { - throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鏁伴噺"); - } - isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo) == 0; - - } - if (sampld.Sum(m => m.CompleteQty) + decimal.Parse(pickQty) > inspecd.SamplingQty) - { - throw Oops.Bah("鍙栨牱鎬绘嫞璐ф暟閲忓ぇ浜庤楠屽崟鍙栨牱鏁伴噺"); - } - //鍒ゆ柇绠变腑鏄惁鍚湁鏀爜锛屾湁锛氫笉璁╂嫞鏁伴噺 - if (stockDetail.Qty - stockDetail.LockQty - stockDetail.FrozenQty < decimal.Parse(pickQty)) - { - throw Oops.Bah("鎵樼洏涓婂彲鐢ㄦ暟閲忓皬浜庡彇鏍锋暟閲忥紝璇锋牳瀹為攣瀹氥�佸喕缁撴暟閲�"); - } - } - else //绠辨敮鎷h揣 - { - PickType = "1"; - var qty = 0m; - - if (!string.IsNullOrWhiteSpace(boxNo3)) //鎷f敮 - { - - if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) == 0) - { - throw Oops.Bah("鏈煡璇㈠埌鏀爜淇℃伅"); - } - if (boxInfoList.Count(m => m.BoxNo3 == boxNo3) > 1) - { - throw Oops.Bah("鏀爜鏁版嵁淇℃伅閿欒锛岃鏍稿疄"); - } - EditboxInfoList = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo && m.BoxNo3 == boxNo3).ToListAsync(); - if (EditboxInfoList.Sum(m => m.Qty) + sampld.Sum(m => m.CompleteQty) > inspecd.SamplingQty) - { - throw Oops.Bah("鍙栨牱鎬绘嫞璐ф暟閲忓ぇ浜庤楠屽崟鍙栨牱鏁伴噺"); - } - qty = EditboxInfoList.Sum(m => m.Qty); - //isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo && m.BoxNo3 == EditboxInfo.BoxNo3) == 0; - } - else //鎷g - { - - if (boxInfoList.Count == 0) - { - throw Oops.Bah("鏈湪鎵樼洏涓婃煡璇㈠埌绠辩爜淇℃伅锛岃鏍稿疄"); - } - if (boxInfoList.Count > 1) - { - throw Oops.Bah("绠辩爜鏁版嵁淇℃伅閿欒锛岃鏍稿疄"); - } - if (boxInfoList.Count(m => !string.IsNullOrWhiteSpace(m.BoxNo3)) > 0) - { - throw Oops.Bah("褰撳墠绠辩爜涓惈鏈夋敮鐮侊紝璇疯緭鍏ユ敮鐮佷俊鎭彇鏍�"); - } - EditboxInfoList = await Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.StockDetailId == stockDetail.Id && m.BoxNo == boxNo).ToListAsync(); - - if (EditboxInfo.Qty < decimal.Parse(pickQty)) - { - throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鏁伴噺"); - } - qty = EditboxInfoList.Sum(m => m.Qty); - //isAddSampld = sampld.Count(m => m.PalletNo == palletNo && m.BoxNo == EditboxInfo.BoxNo) == 0; - } - if (sampld.Sum(m => m.CompleteQty) + qty > inspecd.SamplingQty) - { - throw Oops.Bah("鍙栨牱鎬绘嫞璐ф暟閲忓ぇ浜庤楠屽崟鍙栨牱鏁伴噺"); - } - if (stockDetail.Qty - stockDetail.LockQty - stockDetail.FrozenQty < qty) - { - throw Oops.Bah("鎵樼洏涓婂彲鐢ㄦ暟閲忓皬浜庡彇鏍锋暟閲忥紝璇锋牳瀹為攣瀹氥�佸喕缁撴暟閲�"); - } - } - #endregion - - Db.BeginTran(); - #region - - - if (PickType == "0") - { - - #region 娣诲姞鎴栦慨鏀瑰彇鏍锋槑缁� - - var boxInfo = EditboxInfo; - - //if (isAddSampld) //娣诲姞鍙栨牱鏄庣粏 - //{ - var sampleDetail = new BllSamplingDetails() - { - QcNo = qcNo, - ASNNo = inspecd.ASNNo, - PalletNo = palletNo, - BoxNo = boxInfo.BoxNo, - BoxNo2 = boxInfo.BoxNo2, - BoxNo3 = boxInfo.BoxNo3, - SkuNo = boxInfo.SkuNo, - SkuName = boxInfo.SkuName, - Standard = boxInfo.Standard, - LotNo = boxInfo.LotNo, - SupplierLot = boxInfo.SupplierLot, - CompleteQty = decimal.Parse(pickQty), - CreateTime = DateTime.Now, - CreateUser = userId - }; - Db.Insertable(sampleDetail).ExecuteCommand(); - //} - //else - //{ - // var sampldFirst = sampld.First(m => m.PalletNo == palletNo && m.BoxNo == boxInfo.BoxNo); - // if (!string.IsNullOrWhiteSpace(boxNo3)) - // { - // sampldFirst = sampld.First(m => m.PalletNo == palletNo && m.BoxNo == boxInfo.BoxNo && m.BoxNo3 == boxInfo.BoxNo3); - // } - // sampldFirst.CompleteQty += decimal.Parse(pickQty); - // sampldFirst.UpdateTime = DateTime.Now; - // sampldFirst.UpdateUser = userId; - // Db.Updateable(sampldFirst).ExecuteCommand(); - //} - - #endregion - - #region 淇敼搴撳瓨涓夎〃 - - //鎷嗗寘鏈夋晥鏈熸洿鏀� - var unpackWarranty = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo).UnpackWarranty; - foreach (var item in boxInfoList) - { - item.BitBoxMark = "1"; - item.InspectMark = "1"; - - if (unpackWarranty > 0 && boxInfoList.Count(m => m.ProductionTime != null) > 0) - { - if (item.ProductionTime != null) - { - var time = DateTime.Parse(item.ProductionTime.ToString()).AddDays((double)unpackWarranty); - if (time < item.ExpirationTime) - { - item.ExpirationTime = time; - } - } - } - - } - Db.Updateable(boxInfoList).ExecuteCommand(); - - //搴撳瓨绠辩爜 - boxInfo.Qty -= decimal.Parse(pickQty); - if (boxInfo.Qty == 0) - { - Db.Deleteable(boxInfo).ExecuteCommand(); - } - else - { - Db.Updateable(boxInfo).ExecuteCommand(); - } - //搴撳瓨鏄庣粏 - stockDetail.Qty -= decimal.Parse(pickQty); - if (stockDetail.Qty == 0) - { - Db.Deleteable(stockDetail).ExecuteCommand(); - } - else - { - Db.Updateable(stockDetail).ExecuteCommand(); - } - //搴撳瓨鎬昏〃 - stock.Qty -= decimal.Parse(pickQty); - if (stock.Qty == 0) - { - Db.Deleteable(stock).ExecuteCommand(); - } - else - { - Db.Updateable(stock).ExecuteCommand(); - } - - #endregion - - #region 淇敼鍏ュ簱鍗� - - //涓嶆槸涓婁紶瀹屾瘯鐨勪慨鏀瑰彇鏍风姸鎬� - if (notice.Status != "4") - { - var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); - if (noticeDetail.IsSampling == "0") - { - noticeDetail.IsSampling = "1"; - - Db.Updateable(noticeDetail).ExecuteCommand(); - } - - } - - - #endregion - - #region 淇敼璇烽獙鍗� - - inspecd.Status = "2"; - inspecd.UpdateTime = DateTime.Now; - if (sampld.Sum(m => m.CompleteQty) + decimal.Parse(pickQty) >= inspecd.SamplingQty) - { - inspecd.Status = "3"; - } - Db.Updateable(inspecd).ExecuteCommand(); - #endregion - - } - else - { - var sumQty = 0m; - foreach (var boxInfo in EditboxInfoList) - { - #region 娣诲姞鎴栦慨鏀瑰彇鏍锋槑缁� - - //if (isAddSampld) //娣诲姞鍙栨牱鏄庣粏 - //{ - var sampleDetail = new BllSamplingDetails() - { - QcNo = qcNo, - ASNNo = inspecd.ASNNo, - PalletNo = palletNo, - BoxNo = boxInfo.BoxNo, - BoxNo2 = boxInfo.BoxNo2, - BoxNo3 = boxInfo.BoxNo3, - SkuNo = boxInfo.SkuNo, - SkuName = boxInfo.SkuName, - Standard = boxInfo.Standard, - LotNo = boxInfo.LotNo, - SupplierLot = boxInfo.SupplierLot, - CompleteQty = boxInfo.Qty, - CreateTime = DateTime.Now, - CreateUser = userId - }; - await Db.Insertable(sampleDetail).ExecuteCommandAsync(); - //} - //else - //{ - // var sampldFirst = sampld.First(m => m.PalletNo == palletNo && m.BoxNo == boxInfo.BoxNo); - // if (!string.IsNullOrWhiteSpace(boxNo3)) - // { - // sampldFirst = sampld.First(m => m.PalletNo == palletNo && m.BoxNo == boxInfo.BoxNo && m.BoxNo3 == boxInfo.BoxNo3); - // } - // sampldFirst.CompleteQty += boxInfo.Qty; - // sampldFirst.UpdateTime = DateTime.Now; - // sampldFirst.UpdateUser = userId; - // Db.Updateable(sampldFirst).ExecuteCommand(); - //} - #endregion - - #region 淇敼搴撳瓨涓夎〃 - - //鎷嗗寘鏈夋晥鏈熸洿鏀� - var unpackWarranty = (await Db.Queryable<SysMaterials>().FirstAsync(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo)).UnpackWarranty; - - foreach (var item in boxInfoList) - { - item.BitBoxMark = "1"; - item.InspectMark = "1"; - if (unpackWarranty > 0 && boxInfoList.Count(m => m.ProductionTime != null) > 0) - { - if (item.ProductionTime != null) - { - var time = DateTime.Parse(item.ProductionTime.ToString()).AddDays((double)unpackWarranty); - if (time < item.ExpirationTime) - { - item.ExpirationTime = time; - } - } - } - } - await Db.Updateable(boxInfoList).ExecuteCommandAsync(); - - //搴撳瓨绠辩爜 - - await Db.Deleteable(boxInfo).ExecuteCommandAsync(); - - //搴撳瓨鏄庣粏 - stockDetail.Qty -= boxInfo.Qty; - if (stockDetail.Qty == 0) - { - await Db.Deleteable(stockDetail).ExecuteCommandAsync(); - } - else - { - await Db.Updateable(stockDetail).ExecuteCommandAsync(); - } - //搴撳瓨鎬昏〃 - stock.Qty -= boxInfo.Qty; - if (stock.Qty == 0) - { - await Db.Deleteable(stock).ExecuteCommandAsync(); - } - else - { - await Db.Updateable(stock).ExecuteCommandAsync(); - } - - #endregion - - #region 淇敼鍏ュ簱鍗� - - //涓嶆槸涓婁紶瀹屾瘯鐨勪慨鏀瑰彇鏍风姸鎬� - if (notice.Status != "4") - { - var noticeDetail = await Db.Queryable<BllArrivalNoticeDetail>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); - if (noticeDetail.IsSampling == "0") - { - noticeDetail.IsSampling = "1"; - - await Db.Updateable(noticeDetail).ExecuteCommandAsync(); - } - - } - - #endregion - - sumQty += boxInfo.Qty; - } - - #region 淇敼璇烽獙鍗� - inspecd.Status = "2"; - inspecd.UpdateTime = DateTime.Now; - if (sampld.Sum(m => m.CompleteQty) + sumQty >= inspecd.SamplingQty) - { - inspecd.Status = "3"; - } - - await Db.Updateable(inspecd).ExecuteCommandAsync(); - #endregion - } - - #endregion - - - //娣诲姞鎿嶄綔鏃ュ織璁板綍 - var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "鍙栨牱鎷h揣", qcNo, "鎷h揣", $"鍦≒DA涓婂璇烽獙鍗曞彿涓猴細{qcNo}鐨勬墭鐩樼爜涓猴細{palletNo}鐨勬嫞璐ф搷浣�", userId); - Db.CommitTran(); - } - catch (Exception e) - { - Db.RollbackTran(); - throw e; - } - } - - - //鍙栨牱鍑哄簱鎷h揣(鏁伴噺) - public async Task SampleSetQtyPick(string qcNo, string palletNo, string pickQty, int userId) - { - try - { - #region 鍒ゆ柇 - - if (string.IsNullOrWhiteSpace(qcNo)) - { - throw Oops.Bah("璇烽獙鍗曟嵁涓嶈兘涓虹┖"); - } - if (string.IsNullOrWhiteSpace(palletNo)) - { - throw Oops.Bah("鎵樼洏鍙蜂笉鑳戒负绌�"); - } - var type = await GetSampleType2(palletNo); - if (type != "1") - { - throw Oops.Bah("褰撳墠鎵樼洏璇峰湪鏍囩椤电鍙栨牱"); - } - if (string.IsNullOrWhiteSpace(pickQty)) - { - throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘涓虹┖"); - } - if (decimal.Parse(pickQty) <= 0) - { - throw Oops.Bah("鎷h揣鏁伴噺涓嶈兘灏忎簬绛変簬0"); - } - - //璇烽獙鍗� - var inspecd = await Db.Queryable<BllQualityInspectionRequest>().FirstAsync(m => m.IsDel == "0" && m.QcNo == qcNo); - if (inspecd == null) - { - throw Oops.Bah("鏈煡璇㈠埌璇烽獙鍗曚俊鎭�"); - } - if (inspecd.Status == "0" || inspecd.Status == "3") - { - throw Oops.Bah("璇烽獙鍗曠姸鎬侀敊璇紝璇锋牳瀹�"); - } - //搴撳瓨鏄庣粏淇℃伅 - var stockDetail = await Db.Queryable<DataStockDetail>().FirstAsync(m => m.IsDel == "0" && m.PalletNo == palletNo - && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); - if (stockDetail == null) - { - throw Oops.Bah("鏈湪搴撳瓨涓煡璇㈠嚭褰撳墠鎵樼洏淇℃伅"); - } - // 鍒ゆ柇鎵樼洏鏄惁鍦ㄥ簱鍐� - if (!string.IsNullOrWhiteSpace(stockDetail.LocatNo)) - { - var wareHouseData = await Db.Queryable<SysWareHouse>().FirstAsync(m => m.IsDel == "0" && m.WareHouseNo == stockDetail.WareHouseNo); - if (wareHouseData.Type != "2") - { - throw Oops.Bah("褰撳墠鎵樼洏涓嶆槸搴撳鎵樼洏锛岃鏍稿疄"); - } - } - //搴撳瓨鎬昏〃 - var stock = await Db.Queryable<DataStock>().FirstAsync(m => m.IsDel == "0" && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); - if (stock == null) - { - throw Oops.Bah("鏈煡璇㈠嚭搴撳瓨鎬讳俊鎭�"); - } - //鍏ュ簱鍗� - var notice = await Db.Queryable<BllArrivalNotice>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo); - if (notice == null) - { - throw Oops.Bah("鏈煡璇㈠埌鍏ュ簱鍗曚俊鎭�"); - } - - #endregion - - //鍙栨牱鏄庣粏璁板綍琛� - var sampld = await Db.Queryable<BllSamplingDetails>().Where(m => m.IsDel == "0" && m.QcNo == qcNo).ToListAsync(); - var qty = decimal.Parse(pickQty); - //var isAddSampld = sampld.Count(m => m.PalletNo == palletNo) == 0; - - - #region 鍒ゆ柇鏁伴噺 - - if (sampld.Sum(m => m.CompleteQty) + qty > inspecd.SamplingQty) - { - throw Oops.Bah("鍙栨牱鎬绘嫞璐ф暟閲忓ぇ浜庤楠屽崟鍙栨牱鏁伴噺"); - } - //鍒ゆ柇绠变腑鏄惁鍚湁鏀爜锛屾湁锛氫笉璁╂嫞鏁伴噺 - if (stockDetail.Qty - stockDetail.LockQty - stockDetail.FrozenQty < qty) - { - throw Oops.Bah("鎵樼洏涓婂彲鐢ㄦ暟閲忓皬浜庡彇鏍锋暟閲忥紝璇锋牳瀹為攣瀹氥�佸喕缁撴暟閲�"); - } - - - #endregion - - #region 娣诲姞鎴栦慨鏀瑰彇鏍锋槑缁� - - Db.BeginTran(); - - //if (isAddSampld) //娣诲姞鍙栨牱鏄庣粏 - //{ - var sampleDetail = new BllSamplingDetails() - { - QcNo = qcNo, - ASNNo = inspecd.ASNNo, - PalletNo = palletNo, - SkuNo = stockDetail.SkuNo, - SkuName = stockDetail.SkuName, - Standard = stockDetail.Standard, - LotNo = stockDetail.LotNo, - SupplierLot = stockDetail.SupplierLot, - CompleteQty = qty, - CreateTime = DateTime.Now, - CreateUser = userId - }; - await Db.Insertable(sampleDetail).ExecuteCommandAsync(); - //} - //else - //{ - // var sampldFirst = sampld.First(m => m.PalletNo == palletNo); - // sampldFirst.CompleteQty += qty; - // sampldFirst.UpdateTime = DateTime.Now; - // sampldFirst.UpdateUser = userId; - // Db.Updateable(sampldFirst).ExecuteCommand(); - //} - - #endregion - - #region 淇敼搴撳瓨涓夎〃 - - //搴撳瓨鏄庣粏 - stockDetail.Qty -= qty; - if (stockDetail.Qty == 0) - { - await Db.Deleteable(stockDetail).ExecuteCommandAsync(); - } - else - { - stockDetail.BitPalletMark = "1"; - stockDetail.InspectMark = "1"; - - await Db.Updateable(stockDetail).ExecuteCommandAsync(); - } - //搴撳瓨鎬昏〃 - stock.Qty -= qty; - if (stock.Qty == 0) - { - await Db.Deleteable(stock).ExecuteCommandAsync(); - } - else - { - await Db.Updateable(stock).ExecuteCommandAsync(); - } - - #endregion - - #region 淇敼鍏ュ簱鍗� - - //涓嶆槸涓婁紶瀹屾瘯鐨勪慨鏀瑰彇鏍风姸鎬� - if (notice.Status != "4") - { - var noticeDetail = await Db.Queryable<BllArrivalNoticeDetail>().FirstAsync(m => m.IsDel == "0" && m.ASNNo == inspecd.ASNNo && m.SkuNo == inspecd.SkuNo && m.LotNo == inspecd.LotNo); - if (noticeDetail.IsSampling == "0") - { - noticeDetail.IsSampling = "1"; - - await Db.Updateable(noticeDetail).ExecuteCommandAsync(); - } - - } - - - #endregion - - #region 淇敼璇烽獙鍗� - inspecd.Status = "2"; - inspecd.UpdateTime = DateTime.Now; - if (sampld.Sum(m => m.CompleteQty) + qty >= inspecd.SamplingQty) - { - inspecd.Status = "3"; - } - await Db.Updateable(inspecd).ExecuteCommandAsync(); - #endregion - - //娣诲姞鎿嶄綔鏃ュ織璁板綍 - var k = new OperationSOServer().AddLogOperationSo("PDA妯″潡", "鍙栨牱鎷h揣", qcNo, "鎷h揣", $"鍦≒DA涓婂璇烽獙鍗曞彿涓猴細{qcNo}鐨勬墭鐩樼爜涓猴細{palletNo}鐨勬嫞璐ф搷浣�", userId); - Db.CommitTran(); - } - catch (Exception e) - { - Db.RollbackTran(); - throw e; - } - } + #endregion -- Gitblit v1.8.0