From 5408616fd72786b63cfe69a7426c3fb499b6962b Mon Sep 17 00:00:00 2001 From: bklLiudl <673013083@qq.com> Date: 星期四, 17 十月 2024 18:49:04 +0800 Subject: [PATCH] Merge branch 'Liudl' --- Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs | 423 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 398 insertions(+), 25 deletions(-) diff --git a/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs b/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs index 64da155..c8f8338 100644 --- a/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs +++ b/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs @@ -31,6 +31,368 @@ { } + #region 鎺ュ彛鏂规硶 + + //缁戝畾鐗╂枡鎵樼洏 + public void BindPalletStock(BoxPalletBindVm model, int userId) + { + try + { + #region 鍒ゆ柇 + + //鍒ゆ柇鎵樼洏鏄惁鍦ㄥ簱澶� + var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo); + if (stockDetail != null) + { + if (!string.IsNullOrWhiteSpace(stockDetail.LocatNo)) + { + throw new Exception("璇ユ墭鐩樺凡鏈夊簱瀛樹俊鎭紝璇锋牳瀹烇紒"); + } + return; + } + if (model.Type != "0" && model.Type != "1") + { + throw new Exception("鎵樼洏绫诲瀷閿欒"); + } + if (string.IsNullOrEmpty(model.PalletNo)) + { + throw new Exception("鎵樼洏鍙蜂笉鍙负绌�!"); + } + //鎵樼洏鏄惁瀛樺湪 + var pallet = Db.Queryable<SysPallets>().First(m => m.IsDel == "0" && m.PalletNo == model.PalletNo); + if (pallet == null) + { + throw new Exception("鏈煡璇㈠埌鎵樼洏淇℃伅锛岃鏍稿疄锛�"); + } + if (model.Detail.Count == 0) + { + throw new Exception("鎵樼洏缁戝畾鏄庣粏淇℃伅涓虹┖锛岃鏍稿疄"); + } + BllArrivalNotice notice = null; + BllArrivalNoticeDetail detail = null; + if (model.Type == "0") + { + //0锛氭垚鍝佸叆搴� 1锛氶噰璐叆搴� 3锛氶��璐у叆搴� 4锛氳溅闂翠綑鏂欏叆搴� 5锛氬叾瀹冨叆搴� 6锛氫唬鍌ㄥ叆搴� + if (string.IsNullOrEmpty(model.AsnNo)) + { + throw new Exception("鍗曟嵁鍙蜂笉鍙负绌�!"); + } + //if (model.AsnDetailNo == 0) + //{ + // throw new Exception("鍗曟嵁鏄庣粏涓嶅彲涓虹┖!"); + //} + //鏍规嵁鍗曟嵁鍙疯幏鍙栧叆搴撳崟鎬诲崟 + notice = Db.Queryable<BllArrivalNotice>().First(a => a.IsDel == "0" && a.ASNNo == model.AsnNo); + //notice = Db.Queryable<BllArrivalNotice>().First(a => a.IsDel == "0" && a.ASNNo == model.AsnNo && a.OrderCode == model.OrderCode); + if (notice.Status != "0" && notice.Status != "1" && notice.Status != "2") + { + throw new Exception("璇ュ崟鎹凡鍏冲崟!"); + } + if (notice.Type != "0") + { + throw new Exception("褰撳墠鍗曟嵁涓嶈兘鐢熶骇鎴愬搧鍏ュ簱锛岃鏍稿疄"); + } + if (string.IsNullOrEmpty(model.LotNo)) + { + throw new Exception("鎵规涓嶈兘涓虹┖!"); + } + // 楠岃瘉鍏ュ簱鍗曟槑缁嗘槸鍚﹀瓨鍦� + detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.ASNNo == notice.ASNNo && m.LotNo == model.LotNo && m.SkuNo == model.SkuNo); + //detail = Db.Queryable<BllArrivalNoticeDetail>().First(m => m.IsDel == "0" && m.Id == model.AsnDetailNo && m.ASNNo == model.AsnNo && m.LotNo == model.LotNo && m.SkuNo == model.SkuNo); + if (detail == null) + { + throw new Exception("褰撳墠鐗╂枡鍙婃壒娆′笌鍗曟嵁鏃犲叧鑱旓紝璇锋牳瀹�!"); + } + } + + #endregion + + Db.BeginTran(); + + var comTime = DateTime.Now; + + #region 鍖呰 + var package = Db.Queryable<SysPackag>().Where(m => m.IsDel == "0"); + var sku = Db.Queryable<SysMaterials>().First(m => m.IsDel == "0" && m.SkuNo == model.SkuNo); + SysPackag pack = null; + if (model.Type == "0") + { + pack = package.First(m => m.IsDel == "0" && m.PackagNo == detail.PackagNo); + } + else + { + pack = package.First(m => m.IsDel == "0" && m.PackagNo == sku.PackagNo); + } + + var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺 + var bNum = 0;//绠辩爜鐗╁搧鏁伴噺 + + if (pack == null) + { + throw new Exception("鑾峰彇鐗╂枡鍖呰澶辫触锛岃鏍稿疄!"); + } + if (pack.L5Num.HasValue) + { + pNum = (int)pack.L5Num; + bNum = (int)pack.L4Num; + } + else if (pack.L4Num.HasValue) + { + pNum = (int)pack.L4Num; + bNum = (int)pack.L3Num; + } + else if (pack.L3Num.HasValue) + { + pNum = (int)pack.L3Num; + bNum = (int)pack.L2Num; + } + else if (pack.L2Num.HasValue) + { + pNum = (int)pack.L2Num; + bNum = (int)pack.L1Num; + } + else if (pack.L1Num.HasValue) + { + pNum = (int)pack.L1Num; + bNum = (int)pack.L1Num; + } + if (pNum == 0 || bNum == 0) + { + throw new Exception($"缁戝畾澶辫触锛寋detail.SkuNo}鐗╁搧鍖呰鏈壘鍒帮紒"); + } + + #endregion + + #region 楠岃瘉鏄惁鍏佽绔嬪簱鍚屾墭鐩樹笉鍚岀墿鏂欏叆搴撴垨鍚屾墭鐩樺悓鐗╂枡涓嶅悓鎵规鍏ュ簱 + var list = model.Detail.GroupBy(m => new { m.SkuNo, m.LotNo }).ToList(); + + if (list.Count >= 2) + { + var funSetting = Db.Queryable<SysFunSetting>().First(a => a.IsDel == "0" && a.FunSetNo == "Fun045"); + if (funSetting == null || funSetting.IsEnable == "OFF") + { + throw new Exception($"涓嶅厑璁哥珛搴撳悓鎵樼洏涓嶅悓鐗╂枡鍏ュ簱鎴栧悓鎵樼洏涓嶅悓鎵规鍏ュ簱锛�"); + } + } + + #endregion + + //鍒ゆ柇鎵樼洏缁戝畾淇℃伅涓槸鍚︽湁 + var bind = Db.Queryable<BllPalletBind>().First(m => m.IsDel == "0" && m.ASNDetailNo == detail.Id && m.PalletNo == model.PalletNo && m.Status != "2"); + var bindId = 0; + if (bind == null) + { + bind = new BllPalletBind + { + ASNNo = notice.ASNNo, + ASNDetailNo = detail.Id, + PalletNo = model.PalletNo, + PalletNo2 = "", + PalletNo3 = "", + Qty = model.Qty, + FullQty = pNum, + Status = "0",//绛夊緟鎵ц + Type = model.Type, //鎵樼洏绫诲瀷 0鐗╂枡鎵� 1绌烘墭鐩樻墭 + LotNo = model.LotNo, + LotText = model.LotText, + SupplierLot = model.SupplierLot, + InspectMark = "0", //鏄惁鍙栨牱鎵樼洏 + //SamplingQty = 0, //鍙栨牱鏁伴噺 鍚庢湡涓氬姟寮�鍙戞椂 鎺ュ彛浼犲�奸渶娣诲姞瀵瑰簲瀛楁鍒ゆ柇 + BitPalletMark = model.Qty == pNum ? "0" : "1", + IsBale = "0", + IsBelt = "0", + CreateUser = userId, + + }; + if (bind.FullQty < bind.Qty) + { + throw new Exception("鎵樼洏缁戝畾鏁伴噺宸茶秴鍑鸿鐗╂枡鍖呰鏁伴噺"); + } + // 鎻掑叆鎵樼洏缁戝畾琛� + bindId = Db.Insertable(bind).ExecuteReturnIdentity(); + } + else + { + throw new Exception("缁勭洏淇℃伅閲嶅"); + } + + + #region 绠辩爜淇℃伅 + decimal factQty = 0.00m;//鎵樼洏鎬绘暟閲� + + var boxInfoList = new List<BllBoxInfo>(); + if (model.Type == "1")//鎵樼洏鎵� + { + if (model.Detail.Count > 1) + { + throw new Exception("绌烘墭鐩樼粦瀹氫俊鎭腑鏄庣粏閿欒锛岃秴杩囦簡涓ゆ潯鏄庣粏"); + } + //娣诲姞绠辩爜淇℃伅/绌烘墭鐩樻槑缁嗕俊鎭� + foreach (var box in model.Detail) + { + var boxInfo = new BllBoxInfo() + { + ASNNo = notice.ASNNo, + ASNDetailNo = detail.Id, + OrderCode = box.OrderCode, + BindNo = bindId, + BoxNo = box.BoxNo, + BoxNo2 = box.BoxNo2, + BoxNo3 = box.BoxNo3, + PalletNo = model.PalletNo, + Qty = box.Qty, + FullQty = box.FullQty, + Status = "1", + SkuNo = box.SkuNo, + SkuName = box.SkuName, + LotNo = box.LotNo, + LotText = box.LotText, + SupplierLot = model.SupplierLot, + ProductionTime = box.ProductionTime, + ExpirationTime = box.ExpirationTime, + CompleteTime = comTime, + InspectMark = box.InspectMark, + BitBoxMark = box.BitBoxMark, + InspectStatus = box.InspectStatus, + Origin = "WCS", + Standard = box.Standard, + PackageStandard = box.PackageStandard, + StoreTime = box.StoreTime, + CreateUser = userId, + CreateTime = comTime, + }; + + boxInfoList.Add(boxInfo); + factQty += box.Qty; + } + if (factQty > pNum) + { + throw new Exception($"缁戝畾澶辫触锛屾墭鐩樼粦瀹氭暟閲忓ぇ浜庤鐗╁搧鍖呰鏁伴噺锛�"); + } + } + else if (model.Type == "0")//鐗╂枡鎵� + { + //if (model.Detail.Count(m => m.OrderCode != detail.OrderDetailCode) > 0) + //{ + // throw new Exception($"鎵樼洏缁戝畾鏄庣粏涓紝鍚湁绠辩爜鐢熶骇宸ュ崟涓嶄竴鑷�"); + //} + if (model.Detail.Count(m => m.SkuNo != model.SkuNo || m.LotNo != model.LotNo) > 0) + { + throw new Exception($"鎵樼洏缁戝畾鏄庣粏涓紝鍚湁绠辩爜鐗╂枡鎴栨壒娆′笉涓�鑷�"); + } + var boxGroup = model.Detail.GroupBy(m => m.BoxNo).ToList(); + foreach (var g in boxGroup) + { + decimal boxFullQty = 0;//绠卞唴鎬绘暟閲� + foreach (var box in g) + { + factQty += box.Qty; + boxFullQty += box.Qty; + var boxInfo = new BllBoxInfo() + { + ASNNo = detail.ASNNo, + ASNDetailNo = detail.Id, + OrderCode = box.OrderCode, + BindNo = bindId, + BoxNo = box.BoxNo, + BoxNo2 = box.BoxNo2, + BoxNo3 = box.BoxNo3, + PalletNo = model.PalletNo, + Qty = box.Qty, + FullQty = box.FullQty, + Status = "1",//宸茬粍鎵� + SkuNo = box.SkuNo, + SkuName = box.SkuName, + LotNo = box.LotNo, + LotText = box.LotText, + SupplierLot = model.SupplierLot, + ProductionTime = box.ProductionTime, + ExpirationTime = box.ExpirationTime, + CompleteTime = comTime, + InspectMark = box.InspectMark, + BitBoxMark = box.BitBoxMark, + InspectStatus = box.InspectStatus, + Origin = "WCS", + Standard = box.Standard, + PackageStandard = box.PackageStandard, + StoreTime = box.StoreTime, + QtyCount = (int)box.QtyCount, + QtyOrd = (int)box.QtyOrd, + CreateUser = userId, + CreateTime = comTime, + }; + boxInfoList.Add(boxInfo); + + } + if (boxFullQty > bNum) + { + throw new Exception($"缁戝畾澶辫触锛寋g.Key}绠辩爜缁戝畾鏁伴噺澶т簬璇ョ墿鍝佸寘瑁呮暟閲忥紒"); + } + } + } + + Db.Insertable(boxInfoList).ExecuteCommand(); + #endregion + + + if (factQty != bind.Qty) + { + throw new Exception("绠辩爜鏄庣粏鎬绘暟閲忎笉鍚屼簬鎵樼洏鎬绘暟閲忥紝璇锋牳瀹�"); + } + + #region 鍏ュ簱鍗曞強鏄庣粏 + if (model.Type == "0") + { + detail.FactQty += factQty;//宸茬粍鏁伴噺 + //detail.CompleteQty += factQty;//瀹屾垚鏁伴噺 + + detail.Status = "1";//0锛氱瓑寰呮墽琛� 1锛氭鍦ㄦ墽琛� 2锛氭墽琛屽畬鎴� + if (detail.CompleteQty >= detail.Qty) + { + detail.Status = "2"; + detail.CompleteTime = comTime; + } + detail.UpdateUser = userId; + detail.UpdateTime = comTime; + //鏇存柊鍏ュ簱鍗曟槑缁� + Db.Updateable(detail).ExecuteCommand(); + + notice.UpdateUser = userId; + notice.UpdateTime = comTime; + if (notice.Status == "0") + { + notice.Status = "1"; + } + var asnDetailNum = Db.Queryable<BllArrivalNoticeDetail>().Count(m => m.IsDel == "0" && m.ASNNo == detail.ASNNo && m.Status != "2"); + if (asnDetailNum == 0) + { + notice.Status = "2"; + notice.CompleteTime = comTime;//瀹屾垚鏃堕棿 + } + //鏇存柊鍏ュ簱鍗� + Db.Updateable(notice).ExecuteCommand(); + } + + #endregion + + // 鏇存敼鎵樼洏浣跨敤鐘舵�� + var sqlStr = $"update SysPallets set Status = '1' where PalletNo = '{model.PalletNo}';"; + //娣诲姞鎵樼洏璁板綍琛ㄦ暟鎹� + sqlStr += $"insert into LogPalletTrack values('{model.PalletNo}','{notice.ASNNo}','缁勭洏','0',getDate(),{userId},NULL,NULL);"; + Db.Ado.ExecuteCommand(sqlStr); + new OperationASNServer().AddLogOperationAsn("PDA妯″潡", "鎵樼洏缁戝畾", notice.ASNNo, "娣诲姞", $"娣诲姞浜嗘墭鐩樼爜涓猴細{model.PalletNo}鐨勭粍鐩樹俊鎭�", userId); + + Db.CommitTran(); + } + catch (Exception e) + { + Db.RollbackTran(); + throw new Exception(e.Message); + } + } + + #endregion + #region 鎵樼洏缁戝畾 public List<PalletBindDto> GetPalletBindList(PalletBindVm model, out int count) { @@ -973,8 +1335,10 @@ break; } } - var roadList = Db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == houseNo && areaList.Contains(m.AreaNo)) - .GroupBy(m => m.RoadwayNo).OrderBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList(); + + var road = Db.Queryable<SysStorageRoadway>().Where(m => m.IsDel == "0" && m.Status == "0").Select(m => m.RoadwayNo).ToList(); + + var roadList = Db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == houseNo && areaList.Contains(m.AreaNo) && road.Contains(m.RoadwayNo)).GroupBy(m => m.RoadwayNo).OrderBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList(); SysRoadwayUseLog useLog = Db.Queryable<SysRoadwayUseLog>().Where(m => m.IsDel == "0" && roadList.Contains(m.RoadwayNo)).OrderByDescending(l => l.Id).First(); //宸烽亾鏈�鍚庝竴娆′娇鐢ㄨ褰� #endregion @@ -1008,9 +1372,13 @@ } roadList2.AddRange(roadLarge); roadList2.AddRange(roadSmall); + roadList = roadList2; } - - roadList = roadList2; + + if (roadList.Count == 0) + { + throw new Exception("鏈煡璇㈠埌鍙兘浣跨敤鐨勫贩閬�"); + } #endregion @@ -1037,14 +1405,14 @@ roadNo = l; } //褰撳墠宸锋湁浣嶇疆鍒欓��鍑� - if (roadNo != null) + if (!string.IsNullOrWhiteSpace(roadNo)) { break; } } //濡傛灉璺冲贩閬撳苟涓旀湭鎵惧埌鍚堥�傜┖鍌ㄤ綅,鍒欒烦鍒版渶鍚庝竴娆′娇鐢ㄧ殑宸烽亾鏌ヨ - if (roadNo == null) + if (string.IsNullOrWhiteSpace(roadNo)) { if (useLog != null) { @@ -1077,7 +1445,7 @@ roadNo = item; } //褰撳墠宸锋湁浣嶇疆鍒欓��鍑� - if (roadNo != null) + if (!string.IsNullOrWhiteSpace(roadNo)) { break; } @@ -1250,7 +1618,7 @@ - var areaNoStr = "A07"; + var areaNoStr = "A03"; var allotLocate = new AllotLocation(); #region 鏍规嵁sku纭鍖哄煙鍒掑垎 @@ -1309,16 +1677,16 @@ } roadList2.AddRange(roadLarge); roadList2.AddRange(roadSmall); - } - else - { - roadList2 = roadList; + roadList = roadList2; } - roadList = roadList2; + if (roadList.Count == 0) + { + throw new Exception("鏈煡璇㈠埌鍙兘浣跨敤鐨勫贩閬�"); + } #endregion - + var roadNo = ""; if (laneAllot == 0)//璺冲贩閬撳钩鍧囧垎閰� { @@ -1770,10 +2138,11 @@ var oldTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0" && m.TaskNo == oldTaskNo); oldTask.EndLocat = locate.LocatNo; oldTask.EndRoadway = locate.RoadwayNo; + oldTask.Msg += $"{roadwayNo}宸烽亾鍙�=>>{locate.LocatNo}鍌ㄤ綅鍦板潃"; if (oldTask.IsSuccess == 0) { oldTask.IsSuccess = 1; - oldTask.Status = "1"; + oldTask.Status = "1"; } Db.Updateable(oldTask).ExecuteCommand(); @@ -1922,7 +2291,7 @@ SysStorageLocat locate; var areaList = new List<string>(); - areaList.Add("A07"); + areaList.Add("A03"); locate = allotLocate.GetSuiTableLocate(houseNo, areaList, roadwayNo); Db.BeginTran(); @@ -2024,10 +2393,7 @@ var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList(); //褰撳墠浠诲姟涓殑鍌ㄤ綅淇℃伅 var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat); - if (locate == null) - { - throw new Exception($"鏈煡璇㈠埌浠诲姟涓殑鍌ㄤ綅淇℃伅"); - } + //鑾峰彇绠辩爜淇℃伅 var box1 = Db.Queryable<BllBoxInfo>().First(a => a.PalletNo == task.PalletNo && a.IsDel == "0" && a.Status != "2"); @@ -2048,7 +2414,13 @@ { locate.Status = "1"; Db.Updateable(locate).ExecuteCommand(); + Db.CommitTran(); return; + } + // 鍒ゆ柇鍌ㄤ綅鏄惁涓虹┖ + if (locate == null) + { + throw new Exception($"鏈煡璇㈠埌浠诲姟涓殑鍌ㄤ綅淇℃伅"); } //鍒ゆ柇鏄惁鏄洖娴佸叆搴撳畬鎴� if (stockDetail.Any()) @@ -2150,6 +2522,7 @@ SkuName = boxInfo.SkuName, Standard = sku.Standard, ProductionTime = boxInfo.ProductionTime, + ExpirationTime = boxInfo.ExpirationTime, SupplierLot = boxInfo.SupplierLot, InspectStatus = boxInfo.InspectStatus, InspectMark = boxInfo.InspectMark, @@ -2323,6 +2696,7 @@ SkuName = demo.SkuName, Standard = noticeDetail.Standard, ProductionTime = demo.ProductionTime, + ExpirationTime = demo.ExpirationTime, SupplierLot = demo.SupplierLot, InspectStatus = demo.InspectStatus, InspectMark = demo.InspectMark, @@ -2790,13 +3164,11 @@ Db.Updateable(bind).ExecuteCommand(); } var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat); - if (locate == null) + if (locate != null) { - throw new Exception("鏈煡璇㈤亾鍌ㄤ綅淇℃伅"); + locate.Status = "0"; //淇敼鍌ㄤ綅鐘舵�� + Db.Updateable(locate).ExecuteCommand(); } - - locate.Status = "0"; //淇敼鍌ㄤ綅鐘舵�� - Db.Updateable(locate).ExecuteCommand(); //娣诲姞鎿嶄綔鏃ュ織璁板綍 var k = new OperationASNServer().AddLogOperationAsn("鍏ュ簱浣滀笟", "鍏ュ簱鏃ュ織", taskNo, "鍙栨秷", $"鐐瑰嚮鍙栨秷鎸夐挳鍙栨秷浜嗕换鍔″彿涓猴細{taskNo}鐨勪换鍔�", (int)userId); @@ -2804,6 +3176,7 @@ } catch (Exception e) { + Db.RollbackTran(); throw new Exception(e.Message); } } -- Gitblit v1.8.0