From e105c505e75286144119ad34f5fcbed6a6571c7e Mon Sep 17 00:00:00 2001 From: zhaowc <526854230@qq.com> Date: 星期四, 20 六月 2024 16:53:32 +0800 Subject: [PATCH] Merge branch 'master' of http://47.95.120.53:8083/r/JC23WMS-2 --- Wms/WMS.BLL/BllTransServer/NoticeServer.cs | 494 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ Wms/WMS.Entity/LogEntity/LogTask.cs | 5 2 files changed, 497 insertions(+), 2 deletions(-) diff --git a/Wms/WMS.BLL/BllTransServer/NoticeServer.cs b/Wms/WMS.BLL/BllTransServer/NoticeServer.cs index 28ead5b..fee3032 100644 --- a/Wms/WMS.BLL/BllTransServer/NoticeServer.cs +++ b/Wms/WMS.BLL/BllTransServer/NoticeServer.cs @@ -6,6 +6,9 @@ using WMS.DAL; using WMS.Entity.BllAsnEntity; using WMS.Entity.Context; +using WMS.Entity.DataEntity; +using WMS.Entity.LogEntity; +using WMS.Entity.SysEntity; using WMS.IBLL.IBllTransServer; namespace WMS.BLL.BllTransServer @@ -16,7 +19,11 @@ public NoticeServer() : base(Db) { } - + /// <summary> + /// 涓嬪彂鍏ュ簱鍗� + /// </summary> + /// <param name="model"></param> + /// <returns></returns> public ErpModel CreateAsn(AsnInfo model) { try @@ -78,7 +85,7 @@ SkuName = asnDetailModel.SkuName, LotNo = asnDetailModel.LotNo, LotText = "", - Qty = (decimal)asnDetailModel.Qty, + Qty = (decimal)asnDetailModel.Qty,//杩欓噷鏄《鏁伴噺 FactQty = 0, CompleteQty = 0, SupplierLot = asnDetailModel.SupplierLot, @@ -108,5 +115,488 @@ throw ex; } } + /// <summary> + /// 浠诲姟瀹屾垚 + /// </summary> + /// <param name="TaskNo"></param> + /// <param name="Status"></param> + /// <returns></returns> + public ErpModel FinishTask(string TaskNo,string Status) + { + try + { + #region 鏉′欢鍒ゆ柇 + var resultModel = new ErpModel() { Success = -1, Message = "" }; + if (string.IsNullOrEmpty(TaskNo)) + { + resultModel.Message = "浠诲姟鍙蜂笉鍙负绌�!"; + return resultModel; + } + //浠诲姟淇℃伅 + var taskInfo = Db.Queryable<LogTask>().First(w => w.TaskNo == TaskNo); + if (taskInfo == null) + { + resultModel.Message = $"浠诲姟鍙蜂负:{TaskNo}鐨勪换鍔′笉瀛樺湪!"; + return resultModel; + } + if (taskInfo.Status != "1") + { + resultModel.Message = $"浠诲姟鍙蜂负:{TaskNo}鐨勪换鍔$姸鎬佸紓甯�!"; + return resultModel; + } + #endregion + //寮�鍚簨鍔� + Db.BeginTran(); + var comTime = DateTime.Now; + + if (Status == "0") + { + taskInfo.Status = "3";//寮傚父缁撴潫 + //淇敼浠诲姟鐘舵�� + Db.Updateable(taskInfo).ExecuteCommand(); + + resultModel.Success = 0; + resultModel.Message = "鎴愬姛"; + return resultModel; + } + switch (taskInfo.OrderType) + { + //鍏ュ簱瀹屾垚 + case "0": + //鍏ュ簱鍗曟槑缁嗕俊鎭� + var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(w => w.Id == taskInfo.ASNDetailNo); + if (noticeDetail == null) + { + resultModel.Message = "璇ヤ换鍔″搴旂殑鍏ュ簱鍗曟槑缁嗕笉瀛樺湪!"; + return resultModel; + } + //鍏ュ簱鍗曚俊鎭� + var notice = Db.Queryable<BllArrivalNotice>().First(w => w.ASNNo == noticeDetail.ASNNo); + if (notice == null) + { + resultModel.Message = "璇ヤ换鍔″搴旂殑鍏ュ簱鍗曚笉瀛樺湪!"; + return resultModel; + } + if (notice.Status == "3" || notice.Status == "4") + { + resultModel.Message = "璇ヤ换鍔″搴旂殑鍏ュ簱鍗曞凡鎵ц瀹屾垚!"; + return resultModel; + } + //鐩爣鍌ㄤ綅淇℃伅 + var locatInfo = Db.Queryable<SysStorageLocat>().First(w => w.LocatNo == taskInfo.EndLocat && w.IsDel == "0"); + if (locatInfo == null) + { + resultModel.Message = "鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦�!"; + return resultModel; + } + //搴撳瓨鏄庣粏 + var 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(); + + noticeDetail.CompleteQty += 1;//瀹屾垚鏁伴噺 + noticeDetail.Status = "1";//0锛氱瓑寰呮墽琛� 1锛氭鍦ㄦ墽琛� 2锛氭墽琛屽畬鎴� + if (noticeDetail.CompleteQty >= noticeDetail.Qty) + { + noticeDetail.Status = "2"; + noticeDetail.CompleteTime = comTime; + } + noticeDetail.UpdateUser = 0; + noticeDetail.UpdateTime = comTime; + //鏇存柊鍏ュ簱鍗曟槑缁� + Db.Updateable(noticeDetail).ExecuteCommand(); + + notice.UpdateUser = 0; + notice.UpdateTime = comTime; + if (notice.Status == "0") + { + notice.Status = "1"; + } + var asnDetailNum = Db.Queryable<BllArrivalNoticeDetail>().Count(m => m.IsDel == "0" && m.ASNNo == noticeDetail.ASNNo && m.Status != "2"); + if (asnDetailNum == 0) + { + notice.Status = "2"; + notice.CompleteTime = comTime;//瀹屾垚鏃堕棿 + } + //鏇存柊鍏ュ簱鍗� + Db.Updateable(notice).ExecuteCommand(); + + locatInfo.Status = "1";//鏈夌墿鍝� + //鏇存柊鍌ㄤ綅鐘舵�� + Db.Updateable(locatInfo).ExecuteCommand(); + break; + } + taskInfo.Status = "2";//鎵ц瀹屾垚 + //淇敼浠诲姟鐘舵�� + Db.Updateable(taskInfo).ExecuteCommand(); + + //鎻愪氦浜嬪姟 + Db.CommitTran(); + + resultModel.Success = 0; + resultModel.Message = "鎴愬姛"; + return resultModel; + } + catch (Exception ex) + { + //鍥炴粴浜嬪姟 + Db.RollbackTran(); + throw ex; + } + } + /*public SoResInfo ErpAddExportNotice(SoInfo model) + { + try + { + if (string.IsNullOrEmpty(model.SoType)) + { + throw new Exception("鍗曟嵁绫诲瀷涓嶅彲涓虹┖!"); + } + if (string.IsNullOrEmpty(model.OrderCode)) + { + throw new Exception("绯荤粺鍗曞彿涓嶅彲涓虹┖!"); + } + if (model.SoDetails.Count <= 0) + { + throw new Exception("鍑哄簱鍗曟槑缁嗕笉鍙负绌�!"); + } + //杩斿洖淇℃伅 + SoResInfo result = new SoResInfo(); + + //鑾峰彇搴撳瓨鏄庣粏 + 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 + { + //鑾峰彇鑷鍗曟嵁鍙� + billNo = new Common().GetMaxNo("SO"); + var no = billNo; + bl = Db.Queryable<BllExportNotice>().Any(m => m.SONo == no); + } while (bl); + + List<SoDetailInfo> soDetailList = new List<SoDetailInfo>(); + //寮�鍚簨鍔� + Db.BeginTran(); + try + { + var list = new List<BllExportNoticeDetail>(); + //娣诲姞鍑哄簱鍗� + foreach (var d in model.SoDetails) + { + 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); + } + } + } + var notice = new BllExportNotice() + { + SONo = billNo, + OrderCode = model.OrderCode, + Type = model.SoType, + Status = "0", + Origin = "WMS", + CustomerNo = model.Customer, + CustomerName = CustomerName, + LogisticsId = logisticsId, + 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("鎿嶄綔澶辫触"); + } + Db.CommitTran(); + //鍥炰紶涓婃父绯荤粺閿佸畾鏁伴噺淇℃伅 + result.Success = "0"; + result.Message = "鎿嶄綔鎴愬姛"; + result.SoDetails = soDetailList; + return result; + + } + catch (Exception ex) + { + Db.RollbackTran(); + throw new Exception(ex.Message); + } + } + catch (Exception ex) + { + Db.RollbackTran(); + throw new Exception(ex.Message); + } + }*/ } } diff --git a/Wms/WMS.Entity/LogEntity/LogTask.cs b/Wms/WMS.Entity/LogEntity/LogTask.cs index 53d440d..d3a679b 100644 --- a/Wms/WMS.Entity/LogEntity/LogTask.cs +++ b/Wms/WMS.Entity/LogEntity/LogTask.cs @@ -20,6 +20,11 @@ public string TaskNo {get;set;} /// <summary> + /// 鍏ュ簱鏄庣粏鍙� + /// </summary> + public int ASNDetailNo { get; set; } + + /// <summary> /// Desc:鍙戦�佹柟 /// Default: /// Nullable:True -- Gitblit v1.8.0