From 842c9a82b6a9d8d80d370cbf6dedbd2302ba5fab Mon Sep 17 00:00:00 2001 From: Administrator <Administrator@DESKTOP-5BIMHQ3> Date: 星期一, 24 六月 2024 16:58:34 +0800 Subject: [PATCH] 统计报表-托盘明细增加添加托盘库存明细功能;修改问题 --- Wms/WMS.BLL/BllTransServer/NoticeServer.cs | 724 +++++++++++++++++++++++++++++++----------------------- 1 files changed, 415 insertions(+), 309 deletions(-) diff --git a/Wms/WMS.BLL/BllTransServer/NoticeServer.cs b/Wms/WMS.BLL/BllTransServer/NoticeServer.cs index fee3032..53992db 100644 --- a/Wms/WMS.BLL/BllTransServer/NoticeServer.cs +++ b/Wms/WMS.BLL/BllTransServer/NoticeServer.cs @@ -1,10 +1,15 @@ 锘縰sing Model.InterFaceModel; +using Newtonsoft.Json; using SqlSugar; using System; using System.Collections.Generic; +using System.Linq; using System.Text; +using WMS.BLL.LogServer; using WMS.DAL; using WMS.Entity.BllAsnEntity; +using WMS.Entity.BllQualityEntity; +using WMS.Entity.BllSoEntity; using WMS.Entity.Context; using WMS.Entity.DataEntity; using WMS.Entity.LogEntity; @@ -24,7 +29,7 @@ /// </summary> /// <param name="model"></param> /// <returns></returns> - public ErpModel CreateAsn(AsnInfo model) + public ErpModel CreateAsnWork(AsnInfo model) { try { @@ -50,7 +55,7 @@ Origin = string.IsNullOrEmpty(model.Origin) ? "MES" : model.Origin, CustomerNo = model.Customer, CustomerName = "", - OrderCode = model.OrderCode, + OrderCode = model.OrderCode }; // 鍏ュ簱鏄庣粏琛ㄤ俊鎭� @@ -115,13 +120,14 @@ throw ex; } } + /// <summary> /// 浠诲姟瀹屾垚 /// </summary> /// <param name="TaskNo"></param> /// <param name="Status"></param> /// <returns></returns> - public ErpModel FinishTask(string TaskNo,string Status) + public ErpModel RCSFinishTask(string TaskNo,string Status) { try { @@ -161,10 +167,10 @@ } switch (taskInfo.OrderType) { - //鍏ュ簱瀹屾垚 + #region 鍏ュ簱瀹屾垚 case "0": //鍏ュ簱鍗曟槑缁嗕俊鎭� - var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(w => w.Id == taskInfo.ASNDetailNo); + var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(w => w.Id == taskInfo.NoticeDetailNo); if (noticeDetail == null) { resultModel.Message = "璇ヤ换鍔″搴旂殑鍏ュ簱鍗曟槑缁嗕笉瀛樺湪!"; @@ -190,45 +196,70 @@ return resultModel; } //搴撳瓨鏄庣粏 - var sd1 = new DataStockDetail() + var sd1 = Db.Queryable<DataStockDetail>().First(w => w.PalletNo == taskInfo.PalletNo); + if (sd1 == null) { - LotNo = noticeDetail.LotNo, - LotText = noticeDetail.LotText, - SupplierLot = noticeDetail.SupplierLot, - SkuNo = noticeDetail.SkuNo, - SkuName = noticeDetail.SkuName, - Standard = noticeDetail.Standard, - Qty = 1, - LockQty = 0, - FrozenQty = 0, - InspectQty = 0, - ASNNo = noticeDetail.ASNNo, - ASNDetailNo = noticeDetail.Id, - WareHouseNo = locatInfo.WareHouseNo,//鎵�灞炰粨搴� - RoadwayNo = locatInfo.RoadwayNo,//鎵�灞炲贩閬� - AreaNo = locatInfo.AreaNo,//鎵�灞炲尯鍩� - LocatNo = locatInfo.LocatNo,//鍌ㄤ綅鍦板潃 - PalletNo = taskInfo.PalletNo, - PalletNo2 = "", - PalletNo3 = "", - PalletTags = "0", - CompleteTime = comTime, - ProductionTime = null, - ExpirationTime = null, - Status = "0", - InspectMark = "0", - InspectStatus = "0",//寰呮楠� - BitPalletMark = "0", - PackagNo = "", - IsBale = "0", - IsBelt = "0", + sd1 = new DataStockDetail() + { + LotNo = noticeDetail.LotNo, + LotText = noticeDetail.LotText, + SupplierLot = noticeDetail.SupplierLot, + SkuNo = noticeDetail.SkuNo, + SkuName = noticeDetail.SkuName, + Standard = noticeDetail.Standard, + Qty = 1, + LockQty = 0, + FrozenQty = 0, + InspectQty = 0, + ASNNo = noticeDetail.ASNNo, + ASNDetailNo = noticeDetail.Id, + WareHouseNo = locatInfo.WareHouseNo,//鎵�灞炰粨搴� + RoadwayNo = locatInfo.RoadwayNo,//鎵�灞炲贩閬� + AreaNo = locatInfo.AreaNo,//鎵�灞炲尯鍩� + LocatNo = locatInfo.LocatNo,//鍌ㄤ綅鍦板潃 + PalletNo = taskInfo.PalletNo, + PalletNo2 = "", + PalletNo3 = "", + PalletTags = "0", + CompleteTime = comTime, + ProductionTime = null, + ExpirationTime = null, + Status = "0", + InspectMark = "0", + InspectStatus = "0",//寰呮楠� + BitPalletMark = "0", + PackagNo = "", + IsBale = "0", + IsBelt = "0", - IsDel = "0", - CreateUser = 0, - CreateTime = comTime - }; - //鎻掑叆搴撳瓨鏄庣粏 - Db.Insertable(sd1).ExecuteCommand(); + PalletStatus = "1", + + IsDel = "0", + CreateUser = 0, + CreateTime = comTime + }; + //鎻掑叆搴撳瓨鏄庣粏 + Db.Insertable(sd1).ExecuteCommand(); + } + else + { + sd1.Qty = 1; + sd1.LockQty = 0; + sd1.FrozenQty = 0; + sd1.InspectQty = 0; + sd1.ASNNo = noticeDetail.ASNNo; + sd1.ASNDetailNo = noticeDetail.Id; + sd1.WareHouseNo = locatInfo.WareHouseNo;//鎵�灞炰粨搴� + sd1.RoadwayNo = locatInfo.RoadwayNo;//鎵�灞炲贩閬� + sd1.AreaNo = locatInfo.AreaNo;//鎵�灞炲尯鍩� + sd1.LocatNo = locatInfo.LocatNo;//鍌ㄤ綅鍦板潃 + sd1.CompleteTime = comTime; + sd1.InspectStatus = "0";//寰呮楠� + sd1.PalletStatus = "1";//棰勬贩 + + //淇敼搴撳瓨鏄庣粏 + Db.Updateable(sd1).ExecuteCommand(); + } noticeDetail.CompleteQty += 1;//瀹屾垚鏁伴噺 noticeDetail.Status = "1";//0锛氱瓑寰呮墽琛� 1锛氭鍦ㄦ墽琛� 2锛氭墽琛屽畬鎴� @@ -260,7 +291,242 @@ locatInfo.Status = "1";//鏈夌墿鍝� //鏇存柊鍌ㄤ綅鐘舵�� Db.Updateable(locatInfo).ExecuteCommand(); + + #region 璐ㄦ璇烽獙 + var qualityRequest = Db.Queryable<BllQualityInspectionRequest>().First(m => m.IsDel == "0" && m.SkuNo == noticeDetail.SkuNo && m.LotNo == noticeDetail.LotNo && m.SupplierLot == noticeDetail.SupplierLot); + if (qualityRequest == null) + { + //璐ㄦ璇烽獙鍗曚俊鎭� + string qcNo = new Common().GetMaxNo("QC"); + qualityRequest = new BllQualityInspectionRequest(); + qualityRequest.QcNo = qcNo; + qualityRequest.Status = "0"; + qualityRequest.SkuNo = noticeDetail.SkuNo; + qualityRequest.SkuName = noticeDetail.SkuName; + qualityRequest.LotNo = noticeDetail.LotNo; + qualityRequest.SupplierLot = noticeDetail.SupplierLot; + qualityRequest.Qty = noticeDetail.Qty; + qualityRequest.SamplingQty = 0; + qualityRequest.ASNNo = noticeDetail.ASNNo; + qualityRequest.CreateUser = 0; + qualityRequest.CreateTime = comTime; + + // 璁板綍浠诲姟鏃ュ織 + var taskNo = new Common().GetMaxNo("TK"); + var exTask = new LogTask() + { + TaskNo = taskNo, + Sender = "WMS", + Receiver = "Limes", + IsSuccess = 0,//鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + StartLocat = "",//璧峰浣嶇疆 + PalletNo = "",//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "5",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� 4 鍙栨牱鍑哄簱鍗� 5 鍏朵粬 + EndLocat = "",//鐩爣浣嶇疆 + Type = "3",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Msg = "璇烽獙浠诲姟" + }; + // 鎻掑叆浠诲姟鏃ュ織 + Db.Insertable(exTask).ExecuteCommand(); + + // 璋冪敤Limes鎺ュ彛鍙戣捣璇烽獙 + var sendModel = new SendLimesModel() + { + QcNo = qualityRequest.QcNo, + SkuNo = qualityRequest.SkuNo, + Qty = qualityRequest.Qty.ToString(), + LotNo = qualityRequest.LotNo, + SupplierLot = qualityRequest.SupplierLot, + RequestUser = "", // 璇烽獙浜� + }; + var jsonData = JsonConvert.SerializeObject(sendModel); + string response = ""; + try + { + var time1 = DateTime.Now;//鍙戦�佹椂闂� .ToString("yyyy-MM-dd HH:mm:ss") + //response = HttpHelper.DoPost(url, jsonData, "涓婁紶Limes绯荤粺鍙戣捣璇烽獙", "Limes"); + var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss") + + ////瑙f瀽杩斿洖鏁版嵁 + //var limesModel = JsonConvert.DeserializeObject<LimesModel>(response); + List<string> list1 = new List<string>(); + list1.Add(taskNo); + //if (limesModel.Success == 0) + //{ + //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�// + new TaskServer().EditTaskIssueOk(list1, time1, time2); + + // 鏇存柊璇烽獙鍗曚俊鎭� + qualityRequest.Status = "1"; + qualityRequest.SamplingQty = 10;//decimal.Parse(limesModel.SamplingQty); + qualityRequest.RequestUser = 0; + qualityRequest.RequestTime = DateTime.Now; + qualityRequest.UpdateTime = DateTime.Now; + qualityRequest.UpdateUser = 0; + //娣诲姞璐ㄦ璇烽獙鍗� + Db.Insertable(qualityRequest).ExecuteCommand(); + //} + //if (limesModel.Success == -1) + //{ + // new TaskServer().EditTaskIssueNo(list1, time1, time2,limesModel.Message); + // throw new Exception(limesModel.Message); + //} + } + catch (Exception ex) + { + throw new Exception(ex.Message); + } + } + #endregion + break; + #endregion + + #region 鍑哄簱瀹屾垚 + case "1": + //鍑哄簱鍗曟槑缁嗕俊鎭� + var exNoticeDetail = Db.Queryable<BllExportNoticeDetail>().First(w => w.Id == taskInfo.NoticeDetailNo); + if (exNoticeDetail == null) + { + resultModel.Message = "璇ヤ换鍔″搴旂殑鍑哄簱鍗曟槑缁嗕笉瀛樺湪!"; + return resultModel; + } + //鍑哄簱鍗曚俊鎭� + var exNotice = Db.Queryable<BllExportNotice>().First(w => w.SONo == exNoticeDetail.SONo); + if (exNotice == null) + { + resultModel.Message = "璇ヤ换鍔″搴旂殑鍑哄簱鍗曚笉瀛樺湪!"; + return resultModel; + } + if (exNotice.Status == "4" || exNotice.Status == "5") + { + resultModel.Message = "璇ヤ换鍔″搴旂殑鍑哄簱鍗曞凡鎵ц瀹屾垚!"; + return resultModel; + } + //璧峰鍌ㄤ綅淇℃伅 + var startLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == taskInfo.StartLocat && w.IsDel == "0"); + if (startLocatInfo == null) + { + resultModel.Message = "璧峰鍌ㄤ綅淇℃伅涓嶅瓨鍦�!"; + return resultModel; + } + //鐩爣鍌ㄤ綅淇℃伅 + var endLocatInfo = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == taskInfo.EndLocat && w.IsDel == "0"); + if (endLocatInfo == null) + { + resultModel.Message = "鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦�!"; + return resultModel; + } + //搴撳瓨鏄庣粏 + var sd2 = Db.Queryable<DataStockDetail>().First(w => w.PalletNo == taskInfo.PalletNo); + if (sd2 == null) + { + resultModel.Message = "搴撳瓨淇℃伅涓嶅瓨鍦�!"; + return resultModel; + } + //淇敼鍑哄簱鍗曟槑缁嗘嫞璐ф暟閲� + exNoticeDetail.CompleteQty += sd2.Qty; + Db.Updateable(exNoticeDetail).ExecuteCommand(); + + exNotice.UpdateUser = 0; + exNotice.UpdateTime = comTime; + if (exNotice.Status == "0" || exNotice.Status == "1" || exNotice.Status == "2") + { + exNotice.Status = "3";//鏇存敼涓烘鍦ㄦ墽琛� + } + var num = Db.Queryable<BllExportNoticeDetail>().Count(m => m.IsDel == "0" && m.SONo == exNoticeDetail.SONo && m.CompleteQty < m.Qty); + if (num <= 0) + { + exNotice.Status = "4"; //鏇存敼涓烘墽琛屽畬鎴� + } + //淇敼鍑哄簱鍗曚俊鎭� + Db.Updateable(exNotice).ExecuteCommand(); + + sd2.Qty = 0; + sd2.LockQty = 0; + sd2.FrozenQty = 0; + sd2.InspectQty = 0; + sd2.ASNNo = ""; + sd2.ASNDetailNo = null; + sd2.WareHouseNo = endLocatInfo.WareHouseNo;//鎵�灞炰粨搴� + sd2.RoadwayNo = endLocatInfo.RoadwayNo;//鎵�灞炲贩閬� + sd2.AreaNo = endLocatInfo.AreaNo;//鎵�灞炲尯鍩� + sd2.LocatNo = endLocatInfo.LocatNo;//鍌ㄤ綅鍦板潃 + sd2.CompleteTime = comTime; + //淇敼搴撳瓨鏄庣粏 + Db.Updateable(sd2).ExecuteCommand(); + + startLocatInfo.Status = "0";//绌哄偍浣� + //淇敼璧峰鍌ㄤ綅鐘舵�� + Db.Updateable(startLocatInfo).ExecuteCommand(); + + endLocatInfo.Status = "1";//鏈夌墿鍝� + //淇敼鐩爣鍌ㄤ綅鐘舵�� + Db.Updateable(endLocatInfo).ExecuteCommand(); + + break; + #endregion + + #region 浠诲姟瀹屾垚 + case "2": + //璧峰鍌ㄤ綅淇℃伅 + var startLocatInfo2 = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == taskInfo.StartLocat && w.IsDel == "0"); + if (startLocatInfo2 == null) + { + resultModel.Message = "璧峰鍌ㄤ綅淇℃伅涓嶅瓨鍦�!"; + return resultModel; + } + //鐩爣鍌ㄤ綅淇℃伅 + var endLocatInfo2 = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == taskInfo.EndLocat && w.IsDel == "0"); + if (endLocatInfo2 == null) + { + resultModel.Message = "鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦�!"; + return resultModel; + } + //搴撳瓨鏄庣粏 + var sd3 = Db.Queryable<DataStockDetail>().First(w => w.PalletNo == taskInfo.PalletNo); + if (sd3 == null) + { + resultModel.Message = "搴撳瓨淇℃伅涓嶅瓨鍦�!"; + return resultModel; + } + sd3.WareHouseNo = endLocatInfo2.WareHouseNo;//鎵�灞炰粨搴� + sd3.RoadwayNo = endLocatInfo2.RoadwayNo;//鎵�灞炲贩閬� + sd3.AreaNo = endLocatInfo2.AreaNo;//鎵�灞炲尯鍩� + sd3.LocatNo = endLocatInfo2.LocatNo;//鍌ㄤ綅鍦板潃 + if (endLocatInfo2.AreaNo == "A01")//娲佸噣鍖� + { + sd3.PalletStatus = "0"; + } + else if (endLocatInfo2.AreaNo == "A02")//棰勬贩鍖� + { + sd3.PalletStatus = "1"; + } + else if (endLocatInfo2.AreaNo == "A03")//鍗婃垚鍝佸尯 + { + sd3.PalletStatus = "2"; + } + else if (endLocatInfo2.AreaNo == "A04")//鑴忔《鍖� + { + sd3.PalletStatus = "3"; + } + + //淇敼搴撳瓨鏄庣粏 + Db.Updateable(sd3).ExecuteCommand(); + + startLocatInfo2.Status = "0";//绌哄偍浣� + //淇敼璧峰鍌ㄤ綅鐘舵�� + Db.Updateable(startLocatInfo2).ExecuteCommand(); + + endLocatInfo2.Status = "1";//鏈夌墿鍝� + //淇敼鐩爣鍌ㄤ綅鐘舵�� + Db.Updateable(endLocatInfo2).ExecuteCommand(); + break; + #endregion } taskInfo.Status = "2";//鎵ц瀹屾垚 //淇敼浠诲姟鐘舵�� @@ -280,17 +546,19 @@ throw ex; } } - /*public SoResInfo ErpAddExportNotice(SoInfo model) + + /// <summary> + /// 涓嬪彂鍑哄簱鍗� + /// </summary> + /// <param name="model"></param> + /// <returns></returns> + public SoResInfo CreateSoWork(SoInfo model) { try { - if (string.IsNullOrEmpty(model.SoType)) - { - throw new Exception("鍗曟嵁绫诲瀷涓嶅彲涓虹┖!"); - } if (string.IsNullOrEmpty(model.OrderCode)) { - throw new Exception("绯荤粺鍗曞彿涓嶅彲涓虹┖!"); + throw new Exception("涓婃父绯荤粺鍗曞彿涓嶅彲涓虹┖!"); } if (model.SoDetails.Count <= 0) { @@ -299,29 +567,9 @@ //杩斿洖淇℃伅 SoResInfo result = new SoResInfo(); + var skuNos = model.SoDetails.Select(a => a.SkuNo).Distinct().ToList(); //鑾峰彇搴撳瓨鏄庣粏 var stockDetailList = Db.Queryable<DataStockDetail>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0 && s.InspectStatus == "1").ToList(); - //鑾峰彇搴撳瓨 - var stockList = Db.Queryable<DataStock>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0).ToList(); - - string CustomerName = string.Empty; - if (!string.IsNullOrEmpty(model.Customer)) - { - //瀹㈡埛淇℃伅 - var customer = Db.Queryable<SysCustomer>().First(m => m.IsDel == "0" && m.CustomerNo == model.Customer); - if (customer == null) - { - throw new Exception("瀹㈡埛淇℃伅涓嶅瓨鍦�!"); - } - CustomerName = customer.CustomerName; - } - //鎵胯繍鍟嗕俊鎭� - var logistics = Db.Queryable<SysLogisticsInfo>().First(m => m.IsDel == "0" && m.CarrierName == model.LogisticsNo); - int? logisticsId = null; - if (logistics != null) - { - logisticsId = logistics.Id; - } var billNo = ""; var bl = true; do @@ -335,268 +583,126 @@ List<SoDetailInfo> soDetailList = new List<SoDetailInfo>(); //寮�鍚簨鍔� Db.BeginTran(); - try + + var list = new List<BllExportNoticeDetail>(); + //娣诲姞鍑哄簱鍗� + foreach (var d in model.SoDetails) { - var list = new List<BllExportNoticeDetail>(); - //娣诲姞鍑哄簱鍗� - foreach (var d in model.SoDetails) + if (d.Qty < 1) { - if (d.Qty < 1) - { - throw new Exception("鍑哄簱鏁伴噺蹇呴』澶т簬0"); - } - var sku = skuList.FirstOrDefault(a => a.SkuNo == d.SkuNo); - if (sku == null) - { - throw new Exception($"鐗╂枡淇℃伅涓湭鏌ヨ鍒板嚭搴撶墿鏂欎俊鎭�:{d.SkuNo}"); - } - //0:鎴愬搧鍑哄簱銆�1:棰嗘枡鍑哄簱銆�3锛氱墿鏂欏彇鏍峰嚭搴撱��4:涓嶅悎鏍煎搧鍑哄簱銆�6:浠e偍鍑哄簱銆�7:鍏朵粬鍑哄簱銆� ///2:鎶芥鍑哄簱銆�5:涓棿鍝佸嚭搴撱��8:瀵勫瓨鍑哄簱 - if (model.SoType == "0" || model.SoType == "3" || model.SoType == "4" || model.SoType == "7") - { - if (string.IsNullOrWhiteSpace(d.LotNo)) - { - throw new Exception("鎵规涓嶅彲涓虹┖!"); - } - } - //搴撳瓨鏄庣粏 - List<DataStockDetail> stockDetails; - //鎸囧畾鎵规 - if (!string.IsNullOrWhiteSpace(d.LotNo)) - { - stockDetails = stockDetailList.Where(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo).ToList(); - if (stockDetails.Count < 1) - { - throw new Exception($"搴撳瓨涓湭鏌ヨ鍒板嚭搴撶墿鏂欎俊鎭�:{d.SkuNo}"); - } - //鍒ゆ柇鏁伴噺 - var qty = stockDetails.Sum(s => s.Qty - s.FrozenQty - s.LockQty); - if (d.Qty > qty) - { - throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}銆亄d.LotNo} 搴撳瓨鏁伴噺涓嶈冻"); - } - //搴撳瓨淇℃伅 - var stockInfo = stockList.First(w => w.SkuNo == d.SkuNo && w.LotNo == d.LotNo); - if (stockInfo == null) - { - throw new Exception($"鎬诲簱瀛樹腑鏈煡璇㈠埌鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}"); - } - //鍒ゆ柇鎬诲簱瀛樻暟閲� - if (d.Qty > stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty) - { - throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}銆亄d.LotNo} 搴撳瓨鏁伴噺涓嶈冻"); - } - //娣诲姞鍑哄簱鍗曟槑缁� - var noticeDetail = new BllExportNoticeDetail() - { - SONo = billNo, - SkuNo = sku.SkuNo, - SkuName = sku.SkuName, - Standard = sku.Standard, - LotNo = d.LotNo, - LotText = stockInfo.LotText, - Qty = d.Qty, - AllotQty = 0, - FactQty = 0, - CompleteQty = 0, - PackagNo = sku.PackagNo, - Price = sku.Price, - Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty, - IsBale = "", - IsBelt = "", - SupplierLot = stockInfo.SupplierLot, - IsWave = "0", - WaveNo = "", - IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo) ? "0" : "1", - - OrderDetailCode = d.OrderDetailCode, - - CreateUser = 0, - }; - list.Add(noticeDetail); - //鏇存柊搴撳瓨閿佸畾鏁伴噺 - stockInfo.LockQty += d.Qty; - var i = Db.Updateable(stockInfo).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); - - SoDetailInfo soDetail = new SoDetailInfo(); - soDetail.OrderDetailCode = d.OrderDetailCode; - soDetail.LockQty = d.Qty; - soDetail.LotNo = d.LotNo; - - soDetailList.Add(soDetail); - } - else//鏈寚瀹氭壒娆� - { - Dictionary<int, decimal> dic = new Dictionary<int, decimal>(); - decimal q1 = 0; - //棣栧厛鏌ヨ褰撳墠杩欑鐗╂枡鎵规鍙蜂负绌虹殑 - stockDetails = stockDetailList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList(); - if (stockDetails.Count > 0) - { - q1 = (decimal)stockDetails.Sum(s => s.Qty - s.FrozenQty - s.LockQty); - //搴撳瓨淇℃伅 - var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(w.LotNo)); - if (stockInfo != null) - { - var q2 = stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty; - if (q2 < q1) - { - q1 = q2; - } - if (d.Qty > q1) - { - dic.Add(stockInfo.Id, q1); - } - else - { - dic.Add(stockInfo.Id, d.Qty); - } - } - } - //濡傛灉鎵规鍙蜂负绌虹殑鏁伴噺涓嶅锛屾牴鎹壒娆″厛杩涘厛鍑哄師鍒欐煡鎵惧叾瀹冩壒娆$殑 - if (d.Qty > q1) - { - stockDetails = stockDetailList.Where(m => m.SkuNo == d.SkuNo && !string.IsNullOrWhiteSpace(m.LotNo)).OrderBy(s => s.LotNo).ToList(); - foreach (var demo in stockDetails) - { - if (q1 >= d.Qty) - { - break; - } - var q2 = demo.Qty - demo.FrozenQty - demo.LockQty; - //搴撳瓨淇℃伅 - var stockInfo = stockList.FirstOrDefault(w => w.SkuNo == d.SkuNo && w.LotNo == demo.LotNo); - if (stockInfo == null) - { - continue; - } - decimal q4 = 0; - if (dic.ContainsKey(stockInfo.Id)) - { - q4 = dic[stockInfo.Id]; - } - var q3 = stockInfo.Qty - stockInfo.FrozenQty - stockInfo.LockQty - q4; - if (q3 < q2) - { - q2 = q3; - } - if (q2 > d.Qty - q1) - { - if (!dic.ContainsKey(stockInfo.Id)) - { - dic.Add(stockInfo.Id, d.Qty - q1); - } - else - { - //鏇存柊鍊� - dic[stockInfo.Id] += d.Qty - q1; - } - q1 += d.Qty - q1; - } - else - { - if (!dic.ContainsKey(stockInfo.Id)) - { - dic.Add(stockInfo.Id, (decimal)q2); - } - else - { - //鏇存柊鍊� - dic[stockInfo.Id] = dic[stockInfo.Id] + (decimal)q2; - } - q1 += (decimal)q2; - } - } - } - if (d.Qty > q1) - { - throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo} 搴撳瓨鏁伴噺涓嶈冻"); - } - foreach (var s in dic) - { - var st = stockList.First(a => a.Id == s.Key); - var item = new BllExportNoticeDetail() - { - SONo = billNo, - OrderDetailCode = d.OrderDetailCode, - SkuNo = sku.SkuNo, - SkuName = sku.SkuName, - Standard = sku.Standard, - LotNo = st.LotNo, - LotText = st.LotText, - Qty = s.Value, - AllotQty = 0, - FactQty = 0, - CompleteQty = 0, - PackagNo = sku.PackagNo, - Price = sku.Price, - Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty, - IsBale = "", - IsBelt = "", - SupplierLot = st.SupplierLot, - IsWave = "0", - WaveNo = "", - IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo) ? "0" : "1", - - CreateUser = 0, - }; - list.Add(item); - - st.LockQty += s.Value;//閿佸畾鏁伴噺 - var i = Db.Updateable(st).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); - - SoDetailInfo soDetail = new SoDetailInfo(); - soDetail.OrderDetailCode = d.OrderDetailCode; - soDetail.LockQty = s.Value; - soDetail.LotNo = st.LotNo; - - soDetailList.Add(soDetail); - } - } + throw new Exception("鍑哄簱鏁伴噺蹇呴』澶т簬0"); } - var notice = new BllExportNotice() + if (string.IsNullOrWhiteSpace(d.LotNo)) + { + throw new Exception("鎵规涓嶅彲涓虹┖!"); + } + //搴撳瓨鏄庣粏 + List<DataStockDetail> stockDetails = stockDetailList.Where(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo).OrderByDescending(o => o.CompleteTime).ToList(); + if (stockDetails.Count < 1) + { + throw new Exception($"搴撳瓨涓湭鏌ヨ鍒板嚭搴撶墿鏂欎俊鎭�:{d.SkuNo}"); + } + //鍒ゆ柇鏁伴噺 + var qty = stockDetails.Sum(s => s.Qty - s.FrozenQty - s.LockQty); + if (d.Qty > qty) + { + throw new Exception($"搴撳瓨涓嚭搴撶墿鏂欎俊鎭�:{d.SkuNo}銆亄d.LotNo} 搴撳瓨鏁伴噺涓嶈冻"); + } + //娣诲姞鍑哄簱鍗曟槑缁� + var noticeDetail = new BllExportNoticeDetail() { SONo = billNo, - OrderCode = model.OrderCode, - Type = model.SoType, - Status = "0", - Origin = "WMS", - CustomerNo = model.Customer, - CustomerName = CustomerName, - LogisticsId = logisticsId, + SkuNo = d.SkuNo, + SkuName = d.SkuName, + Standard = "", + LotNo = d.LotNo, + LotText = "", + Qty = d.Qty, + AllotQty = 0, + FactQty = 0, + CompleteQty = 0, + PackagNo = "", + Price = 0, + Money = 0, + IsBale = "", + IsBelt = "", + SupplierLot = "", IsWave = "0", WaveNo = "", - IsDespatch = "0", + IsIssueLotNo = "1", + + OrderDetailCode = d.OrderDetailCode, CreateUser = 0, }; - - var n = Db.Insertable<BllExportNotice>(notice).ExecuteCommand(); - var m = Db.Insertable<BllExportNoticeDetail>(list).ExecuteCommand(); - - if (n <= 0 || m <= 0) + list.Add(noticeDetail); + //閿佸畾搴撳瓨鏁伴噺 + decimal lockQty = 0; + foreach (var item in stockDetails) { - Db.RollbackTran(); - throw new Exception("鎿嶄綔澶辫触"); + if (lockQty >= d.Qty) + { + break; + } + if (item.Qty - item.LockQty - item.FrozenQty <= d.Qty - lockQty) + { + item.LockQty += item.Qty - item.LockQty - item.FrozenQty; + lockQty += (decimal)(item.Qty - item.LockQty - item.FrozenQty); + } + else + { + item.LockQty += d.Qty - lockQty; + lockQty += d.Qty - lockQty; + } + Db.Updateable(item).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); } - Db.CommitTran(); - //鍥炰紶涓婃父绯荤粺閿佸畾鏁伴噺淇℃伅 - result.Success = "0"; - result.Message = "鎿嶄綔鎴愬姛"; - result.SoDetails = soDetailList; - return result; + SoDetailInfo soDetail = new SoDetailInfo(); + soDetail.OrderDetailCode = d.OrderDetailCode; + soDetail.LockQty = d.Qty; + soDetail.LotNo = d.LotNo; + + soDetailList.Add(soDetail); } - catch (Exception ex) + //鍑哄簱鍗曚俊鎭� + var notice = new BllExportNotice() + { + SONo = billNo, + OrderCode = model.OrderCode, + Type = model.SoType, + Status = "0", + Origin = "WMS", + CustomerNo = model.Customer, + CustomerName = "", + LogisticsId = null, + IsWave = "0", + WaveNo = "", + IsDespatch = "0", + + CreateUser = 0, + }; + + var n = Db.Insertable<BllExportNotice>(notice).ExecuteCommand(); + var m = Db.Insertable<BllExportNoticeDetail>(list).ExecuteCommand(); + + if (n <= 0 || m <= 0) { Db.RollbackTran(); - throw new Exception(ex.Message); + throw new Exception("鎿嶄綔澶辫触"); } + //鎻愪氦浜嬪姟 + Db.CommitTran(); + //鍥炰紶涓婃父绯荤粺閿佸畾鏁伴噺淇℃伅 + result.Success = "0"; + result.Message = "鎿嶄綔鎴愬姛"; + result.SoDetails = soDetailList; + return result; } catch (Exception ex) { Db.RollbackTran(); throw new Exception(ex.Message); } - }*/ + } } } -- Gitblit v1.8.0