From 157abc191c34e57c1b958ae74fc3de6518ca8a30 Mon Sep 17 00:00:00 2001 From: zhaowc <526854230@qq.com> Date: 星期五, 28 二月 2025 11:06:36 +0800 Subject: [PATCH] 修改客户需求 --- Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs | 2260 +++++++++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 1,746 insertions(+), 514 deletions(-) diff --git a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs index 3624c4d..68367c9 100644 --- a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs +++ b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs @@ -24,6 +24,12 @@ using WMS.IBLL.IBllSoServer; using Model.ModelVm; using System.Runtime.Intrinsics.X86; +using WMS.Entity.BllAsnEntity; +using Model.ModelDto; +using WMS.BLL.BllPdaServer; +using WMS.IBLL.IPdaServer; +using System.DirectoryServices.Protocols; +using Model.ModelDto.SysDto; namespace WMS.BLL.BllSoServer { @@ -41,7 +47,7 @@ /// </summary> /// <param name="model"></param> /// <returns></returns> - public bool ErpAddExportNotice(SoInfo model) + public void HttpAddExportNotice(SoInfo model) { try { @@ -49,11 +55,11 @@ { throw new Exception("鍗曟嵁绫诲瀷涓嶅彲涓虹┖!"); } - if (string.IsNullOrEmpty(model.Customer)) - { - throw new Exception("瀹㈡埛涓嶅彲涓虹┖!"); - } - if (string.IsNullOrEmpty(model.OrderCode)) + //if (string.IsNullOrEmpty(model.Customer)) + //{ + // throw new Exception("瀹㈡埛涓嶅彲涓虹┖!"); + //} + if (string.IsNullOrEmpty(model.OrderNo)) { throw new Exception("绯荤粺鍗曞彿涓嶅彲涓虹┖!"); } @@ -68,10 +74,10 @@ //瀹㈡埛淇℃伅 var customer = Db.Queryable<SysCustomer>().First(m => m.IsDel == "0" && m.CustomerNo == model.Customer); - if (customer == null) - { - throw new Exception("瀹㈡埛涓嶅彲涓虹┖!"); - } + //if (customer == null) + //{ + // throw new Exception("瀹㈡埛涓嶅彲涓虹┖!"); + //} var logistics = Db.Queryable<SysLogisticsInfo>().First(m => m.IsDel == "0" && m.CarrierName == model.LogisticsNo); int? logisticsId = null; if (logistics != null) @@ -108,47 +114,120 @@ } //搴撳瓨 List<DataStock> stocks; + + decimal q1 = 0; + Dictionary<int, decimal> dic = new Dictionary<int, decimal>(); + if (!string.IsNullOrWhiteSpace(d.LotNo)) { stocks = stockList.Where(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo).ToList(); + if (stocks.Count < 1) + { + throw new Exception($"鎬诲簱瀛樹腑鏈煡璇㈠埌鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}"); + } + //鍒ゆ柇鏁伴噺 + var qty = stocks.First().Qty - stocks.First().LockQty - stocks.First().FrozenQty; + if (d.Qty > qty) + { + throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}銆亄d.LotNo} 搴撳瓨鏁伴噺涓嶈冻"); + } + if (qty > d.Qty - q1) + { + dic.Add(stocks.First().Id, d.Qty - q1); + + q1 += d.Qty - q1; + } + else + { + q1 += qty; + dic.Add(stocks.First().Id, qty); + } + } else { - stocks = stockList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList(); - } - if (stocks.Count < 1) - { - throw new Exception($"鎬诲簱瀛樹腑鏈煡璇㈠埌鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}"); + stocks = stockList.Where(m => m.SkuNo == d.SkuNo && !string.IsNullOrWhiteSpace(m.LotNo)).OrderBy(s => s.LotNo).ToList(); + + foreach (var demo in stocks) + { + if (q1 >= d.Qty) + { + continue; + } + var q2 = demo.Qty - demo.LockQty - demo.FrozenQty; + + if (q2 >= d.Qty - q1) + { + dic.Add(demo.Id, d.Qty - q1); + + q1 += d.Qty - q1; + } + else + { + q1 += q2; + dic.Add(demo.Id, q2); + } + + } + if (d.Qty > q1) + { + stocks = stockList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList(); + if (stocks.Count == 0) + { + throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}搴撳瓨鏁伴噺涓嶈冻"); + } + var q2 = stocks.First().Qty - stocks.First().LockQty - stocks.First().FrozenQty; + if (q2 >= d.Qty - q1) + { + dic.Add(stocks.First().Id, d.Qty - q1); + + q1 += d.Qty - q1; + } + else + { + q1 += q2; + dic.Add(stocks.First().Id, q2); + } + } + if (d.Qty > q1) + { + throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo} 搴撳瓨鏁伴噺涓嶈冻"); + } } - var item = new BllExportNoticeDetail() + foreach (var s in dic) { - SONo = billNo, - SkuNo = sku.SkuNo, - SkuName = sku.SkuName, - Standard = sku.Standard, - LotNo = d.LotNo, - 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 = stocks.First().SupplierLot, - IsWave = "0", - WaveNo = "", + var st = stockList.First(a => a.Id == s.Key); + var item = new BllExportNoticeDetail() + { + SONo = billNo, + 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 = stocks.First().SupplierLot, + IsWave = "0", + WaveNo = "", + IsIssueLotNo = string.IsNullOrWhiteSpace(d.LotNo) ? "0" : "1", - CreateUser = 0, - }; - list.Add(item); - stocks.First().LockQty += d.Qty;//閿佸畾鏁伴噺 + CreateUser = 0, + }; + list.Add(item); - var i = Db.Updateable(stocks.First()).UpdateColumns(it => new { it.LockQty }) - .ExecuteCommand(); + st.LockQty += s.Value;//閿佸畾鏁伴噺 + var i = Db.Updateable(st).UpdateColumns(it => new { it.LockQty }) + .ExecuteCommand(); + } } var notice = new BllExportNotice() @@ -156,9 +235,10 @@ SONo = billNo, Type = model.SoType, Status = "0", - Origin = "WMS", - CustomerNo = model.Customer, - CustomerName = customer.CustomerName, + Origin = model.Origin, + OrderCode = model.OrderNo, + //CustomerNo = model.Customer, + //CustomerName = customer.CustomerName, LogisticsId = logisticsId, IsWave = "0", WaveNo = "", @@ -172,12 +252,10 @@ if (n <= 0 || m <= 0) { - Db.RollbackTran(); - return false; + throw new Exception("鍏ュ簱鍗曟垨鏄庣粏娣诲姞淇濆瓨澶辫触"); } Db.CommitTran(); - return true; - + } catch (Exception ex) { @@ -189,17 +267,28 @@ } catch (Exception ex) { - Db.RollbackTran(); throw new Exception(ex.Message); } } //鍥炰紶鍑哄簱鍗� - public bool FinishSo(int id, string url, int userId) + public bool FinishSo(int id, string url, string userNo, string pwd, int userId) { try { - var notice = Db.Queryable<BllExportNotice>().First(m => m.Id == id&& m.IsDel == "0"); + var loginPwd = Md5Tools.CalcMd5(pwd); + var date = Db.Queryable<SysUserInfor>().First(m => m.IsDel == "0" && m.UserName == userNo && m.PassWord == loginPwd); + + if (date == null) //璐﹀彿瀵嗙爜鏄惁姝g‘ + { + throw new Exception("璐﹀彿瀵嗙爜涓嶆纭垨娌℃湁姝よ处鍙�"); + } + if (date.Status != "0") //褰撳墠璐﹀彿鏄惁姝e父鍚敤 + { + throw new Exception("褰撳墠璐﹀彿闈炲惎鐢ㄧ姸鎬�"); + } + + var notice = Db.Queryable<BllExportNotice>().First(m => m.Id == id && m.IsDel == "0"); if (notice == null) { throw new Exception("鏈煡璇㈠埌鍗曟嵁淇℃伅"); @@ -213,7 +302,7 @@ { throw new Exception("鏈煡璇㈠埌鍗曟嵁鏄庣粏淇℃伅"); } - if (userId == notice.UpdateUser) + if (date.Id == notice.UpdateUser) { throw new Exception("澶嶆牳澶辫触锛屽鏍镐汉鍛樺拰鍏抽棴璁㈠崟浜哄憳涓嶈兘鐩稿悓锛�"); } @@ -224,13 +313,13 @@ { SkuNo = d.SkuNo, LotNo = d.LotNo, - Qty = int.Parse(d.CompleteQty.ToString()) + Qty = (decimal)d.CompleteQty }; list.Add(item); } var soInfo = new SoInfo() { - OrderCode = notice.OrderCode, + OrderNo = notice.OrderCode, SoDetails = list }; #region 閫氳繃鎺ュ彛鍙戦�佽嚦erp @@ -247,11 +336,11 @@ #endregion notice.Status = "6"; - notice.UpdateTime = DateTime.Now; - notice.UpdateUser = userId; + notice.CheckTime = DateTime.Now; + notice.CheckUser = date.Id; Db.Updateable(notice).ExecuteCommand(); - new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "澶嶆牳", $"澶嶆牳浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId); + new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "澶嶆牳", $"{date.RealName}澶嶆牳浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId); return true; } catch (Exception e) @@ -290,34 +379,34 @@ .LeftJoin<SysLogisticsInfo>((a, b) => a.LogisticsId == b.Id) .LeftJoin<SysUserInfor>((a, b, c) => a.CreateUser == c.Id) .LeftJoin<SysUserInfor>((a, b, c, d) => a.CreateUser == d.Id) - .LeftJoin<SysUserInfor>((a, b, c, d,e) => a.CheckUser == e.Id) - .Select((a, b, c, d,e) => new ExportNoticeDto() + .LeftJoin<SysUserInfor>((a, b, c, d, e) => a.CheckUser == e.Id) + .Select((a, b, c, d, e) => new ExportNoticeDto() { - Id = a.Id, - SONo = a.SONo, - Type = a.Type, - Status = a.Status, - Origin = a.Origin, - CustomerNo = a.CustomerNo, - CustomerName = a.CustomerName, - LotNo = a.LotNo, - LotText = a.LotText, - SupplierLot = a.SupplierLot, - LogisticsId = a.LogisticsId, + //Id = a.Id, + //SONo = a.SONo, + //Type = a.Type, + //Status = a.Status, + //Origin = a.Origin, + //CustomerNo = a.CustomerNo, + //CustomerName = a.CustomerName, + //LotNo = a.LotNo, + //LotText = a.LotText, + //SupplierLot = a.SupplierLot, + //LogisticsId = a.LogisticsId, LogisticsName = b.CarrierName, - IsWave = a.IsWave, - WaveNo = a.WaveNo, - IsDespatch = a.IsDespatch, - Demo=a.Demo, + //IsWave = a.IsWave, + //WaveNo = a.WaveNo, + //IsDespatch = a.IsDespatch, + //Demo = a.Demo, CreateUserName = c.RealName, UpdateUserName = c.RealName, - CreateTime = a.CreateTime, - UpdateTime = a.UpdateTime, + //CreateTime = a.CreateTime, + //UpdateTime = a.UpdateTime, - CheckUserName=e.RealName, - CheckTime=a.CheckTime - }) + CheckUserName = e.RealName, + //CheckTime = a.CheckTime + },true) .OrderByDescending(a => a.CreateTime) .ToOffsetPage(page, limit, ref total); count = total; @@ -330,39 +419,60 @@ } } - public List<ExStockInfoDto> GetStockGroupList(string type, string msg) + public List<ExStockInfoDto> GetStockGroupList(string type, string ownerNo, string msg) { try { + if (string.IsNullOrEmpty(type)) + { + throw new Exception("璇烽�夋嫨鍑哄簱鍗曠被鍨�"); + } + if (type == "6" && string.IsNullOrEmpty(ownerNo)) + { + throw new Exception("浠e偍鍗曟嵁璇烽�夋嫨璐т富"); + } var plnList = new List<string>() { "100099" }; var skuList = new List<string>(); var sku = Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0" && !plnList.Contains(m.SkuNo)); //鎺掗櫎绌烘墭鐩樼殑鐗╂枡闆嗗悎 string skuType = string.Empty; + string inspectStatus = string.Empty; switch (type)//0锛氬師鏂� 1锛氬寘鏉� 2锛氭垚鍝� 3锛氳�楁潗 4锛氬崐鎴愬搧 { - case "0"://鎴愬搧鍏ュ簱 + case "0"://鎴愬搧鍑哄簱 skuType = "(2)"; + inspectStatus = "1"; break; case "1"://棰嗘枡鍑哄簱 skuType = "(0,1,3)"; + inspectStatus = "1"; break; case "2"://鎶芥鍑哄簱 - skuType = "(2)"; + skuType = "(0,1,2,3)"; + inspectStatus = "0,1,2"; break; case "3"://鐗╂枡鍙栨牱鍑哄簱 - skuType = "(0)"; + skuType = "(0,1,2,3)"; + inspectStatus = "0"; break; case "4"://涓嶅悎鏍煎搧鍑哄簱 - skuType = "(2)"; + skuType = "(0,1,2,3,4)"; + inspectStatus = "2"; break; case "5"://涓棿鍝佸嚭搴� skuType = "(4)"; + inspectStatus = "0,1"; break; case "6"://浠e偍鍑哄簱 - skuType = "(2)"; + skuType = "(0,1,2,3,4)"; + inspectStatus = "0,1,2"; + break; + case "8"://瀵勫瓨鍑哄簱 + skuType = "(0,1,2,3)"; + inspectStatus = "0,1"; break; default: //鍏跺畠鍑哄簱 skuType = "(0,1,2,3,4)"; + inspectStatus = "0,1"; break; } skuList = sku.Where(m => skuType.Contains(m.Type)).Select(m => m.SkuNo).ToList(); @@ -370,13 +480,24 @@ { throw new Exception("鏈煡鍒板搴斿嚭搴撶被鍨嬬殑鐗╂枡"); } + + if (type != "8") + { + skuList = skuList.Where(m => m != "100088").ToList(); + } + else + { + skuList = skuList.Where(m => m == "100088").ToList(); + } //skuList = sku.Select(m => m.SkuNo).ToList(); var stockRst = new StockServer(); var stockDetailRst = new StockDetailServer(); Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>() //.And(it => it.WareHouseNo == wareHouseNo) - .And(it => it.InspectStatus == "1") + .AndIF(!string.IsNullOrWhiteSpace(inspectStatus), it => inspectStatus.Contains(it.InspectStatus)) .And(m => skuList.Contains(m.SkuNo)) + .AndIF(type == "6", m => m.OwnerNo == ownerNo)//浠e偍鍑哄簱闇�瑕佸叧鑱旇揣涓� + .AndIF(type != "6", m=> string.IsNullOrWhiteSpace(m.OwnerNo)) .AndIF(!string.IsNullOrWhiteSpace(msg), it => (it.SkuNo.Contains(msg) || it.SkuName.Contains(msg) || it.LotNo.Contains(msg))) .And(it => (it.Qty - it.LockQty - it.FrozenQty) > 0) .And(it => (it.Status == "0" || it.Status == "1")) @@ -405,7 +526,8 @@ SkuName = it.SkuName, LotNo = it.LotNo, Standard = it.Standard, - Qty = type == "4" ? it.Qty : it.Qty - it.LockQty - it.FrozenQty + //Qty = type == "4" ? it.Qty : it.Qty - it.LockQty - it.FrozenQty, + Qty = it.Qty - it.LockQty - it.FrozenQty, }).ToList(); @@ -456,7 +578,7 @@ var skuNos = model.Detail.Select(a => a.SkuNo).Distinct().ToList(); //鏍规嵁鐗╂枡鍙疯幏鍙栫墿鏂欎俊鎭�佸簱瀛樻槑缁嗕腑鑾峰彇鎵规鎻忚堪渚涜揣鎵规绛� var skuList = Db.Queryable<SysMaterials>().Where(a => skuNos.Contains(a.SkuNo) && a.IsDel == "0").ToList(); - var stockList = Db.Queryable<DataStock>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty-s.FrozenQty-s.LockQty) > 0).ToList(); + var stockList = Db.Queryable<DataStock>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0).ToList(); //var palletList = contextDb.Queryable<DataStockDetail>().Where(s => skuNos.Contains(s.SkuNo) && (s.Qty - s.FrozenQty - s.LockQty) > 0).ToList(); //瀹㈡埛淇℃伅 var customer = Db.Queryable<SysCustomer>().Where(m => m.IsDel == "0" && m.CustomerNo == model.CustomerNo).ToList(); @@ -479,7 +601,7 @@ //娣诲姞鍑哄簱鍗� foreach (var d in model.Detail) { - if (d.Qty < 1) + if (d.Qty <=0) { throw new Exception("鍑哄簱鏁伴噺蹇呴』澶т簬0"); } @@ -490,27 +612,80 @@ } //搴撳瓨 List<DataStock> stocks; - //List<DataStockDetail> pallets; + + decimal q1 = 0; + Dictionary<int, decimal> dic = new Dictionary<int, decimal>(); if (!string.IsNullOrWhiteSpace(d.LotNo)) { stocks = stockList.Where(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo).ToList(); - //pallets = palletList.Where(p => p.SkuNo == d.SkuNo && p.LotNo == d.LotNo).ToList(); + //if (stocks.Count < 1) + //{ + // throw new Exception($"鎬诲簱瀛樹腑鏈煡璇㈠埌鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}"); + //} + ////鍒ゆ柇鏁伴噺 + //var qty = stocks.First().Qty - stocks.First().LockQty - stocks.First().FrozenQty; + //if (d.Qty > qty) + //{ + // throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}銆亄d.LotNo} 搴撳瓨鏁伴噺涓嶈冻"); + //} + //if (qty > d.Qty - q1) + //{ + // q1 += d.Qty - q1; + // dic.Add(stocks.First().Id, d.Qty - q1); + //} + //else + //{ + // q1 += qty; + // dic.Add(stocks.First().Id, qty); + //} } else { - stocks = stockList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList(); - //pallets = palletList.Where(p => p.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(p.LotNo)).ToList(); - } - if (stocks.Count < 1) - { - throw new Exception($"鎬诲簱瀛樹腑鏈煡璇㈠埌鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}"); - } + //stocks = stockList.Where(m => m.SkuNo == d.SkuNo && !string.IsNullOrWhiteSpace(m.LotNo)).OrderBy(s => s.LotNo).ToList(); - //鍒ゆ柇鏁伴噺 - var qty = stocks.First().Qty - stocks.First().LockQty - stocks.First().FrozenQty; - if (d.Qty > qty) - { - throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}銆亄d.LotNo} 搴撳瓨鏁伴噺涓嶈冻"); + //foreach (var demo in stocks) + //{ + // if (q1 >= d.Qty) + // { + // continue; + // } + // var q2 = demo.Qty - demo.LockQty - demo.FrozenQty; + + // if (q2 > d.Qty - q1) + // { + // q1 += d.Qty - q1; + // dic.Add(demo.Id, d.Qty - q1); + // } + // else + // { + // q1 += q2; + // dic.Add(demo.Id, q2); + // } + + //} + //if (d.Qty >= q1) + //{ + stocks = stockList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList(); + // if (stocks.Count == 0) + // { + // throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}搴撳瓨鏁伴噺涓嶈冻"); + // } + // var q2 = stocks.First().Qty - stocks.First().LockQty - stocks.First().FrozenQty; + // if (q2 > d.Qty - q1) + // { + // q1 += d.Qty - q1; + // dic.Add(stocks.First().Id, d.Qty - q1); + // } + // else + // { + // q1 += q2; + // dic.Add(stocks.First().Id, q2); + // } + //} + //if (d.Qty > q1) + //{ + // throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo} 搴撳瓨鏁伴噺涓嶈冻"); + //} } var item = new BllExportNoticeDetail() @@ -528,20 +703,29 @@ CompleteQty = 0, PackagNo = sku.PackagNo, Price = sku.Price, - Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price*d.Qty, + Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * d.Qty, IsBale = d.IsBale, IsBelt = d.IsBelt, SupplierLot = stocks.First().SupplierLot, IsWave = "0", - WaveNo= "", + WaveNo = "", CreateUser = userId, }; list.Add(item); - stocks.First().LockQty += d.Qty;//閿佸畾鏁伴噺 + + stocks.First().LockQty += d.Qty;//閿佸畾鏁伴噺 var i = Db.Updateable(stocks.First()).UpdateColumns(it => new { it.LockQty }) .ExecuteCommand(); + + //foreach (var s in dic) + //{ + // var st = stockList.First(m => m.Id == s.Key); + // st.LockQty += s.Value;//閿佸畾鏁伴噺 + // var i = Db.Updateable(st).UpdateColumns(it => new { it.LockQty }) + // .ExecuteCommand(); + //} } var notice = new BllExportNotice() @@ -555,7 +739,7 @@ LogisticsId = model.LogisticsId, IsWave = "0", WaveNo = "", - IsDespatch="0", + IsDespatch = "0", CreateUser = userId, }; @@ -627,7 +811,7 @@ var stockCount = 0.00m; //st.StockQuantity.Value if (s != null) { - stockCount = s.Qty-s.FrozenQty-s.LockQty+d.Qty; + stockCount = s.Qty - s.FrozenQty - s.LockQty + d.Qty; } var dm = new SelectStockSkuDto() @@ -684,161 +868,285 @@ try { - //鍒犻櫎鏃� - foreach (var d in noticeDetail) + if (notice.Origin == "WMS") { - var mq = model.Detail.Where(o => o.SkuNo == d.SkuNo).ToList(); - if (!string.IsNullOrWhiteSpace(d.LotNo)) + //鍒犻櫎鏃� + foreach (var d in noticeDetail) { - mq = mq.Where(o => o.LotNo == d.LotNo).ToList(); - } - if (mq.Any()) //濡傛灉鏈夎繖涓墿鏂欏強鎵规鍒欒烦杩� - { - continue; - } - // - var fl = stockList.Where(s => s.SkuNo == d.SkuNo).ToList(); - DataStock fls; - if (!string.IsNullOrWhiteSpace(d.LotNo)) - { - fls = fl.FirstOrDefault(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo); - } - else - { - fls = fl.FirstOrDefault(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)); - } - if (fls == null) - { - throw new Exception($"鏈壘鍒扮墿鏂檣d.SkuNo}銆佹壒娆d.LotNo} 鐨勫簱瀛樹俊鎭�"); - } - fls.LockQty -= d.Qty; - d.IsDel = "1"; - d.UpdateUser = userId; - d.UpdateTime = DateTime.Now; - Db.Updateable(d).ExecuteCommand(); - Db.Updateable(fls).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); - } - - //鏇存柊鍑哄簱鍗� - foreach (var d in model.Detail) - { - if (d.Qty < 1) - { - throw new Exception("鍑哄簱鏁版嵁蹇呴』澶т簬0"); - } - var sku = skuList.FirstOrDefault(a => a.SkuNo == d.SkuNo); - if (sku == null) - { - throw new Exception("鍑哄簱鐗╁搧涓虹┖"); - } - //搴撳瓨 - List<DataStock> stocks; - List<DataStockDetail> pallet; - if (!string.IsNullOrWhiteSpace(d.LotNo)) - { - stocks = stockList.Where(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo).ToList(); - pallet = palletList.Where(p => p.SkuNo == d.SkuNo && p.LotNo == d.LotNo).ToList(); - } - else - { - stocks = stockList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList(); - pallet = palletList.Where(p => p.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(p.LotNo)).ToList(); - } - - if (stocks.Count < 1) - { - throw new Exception("鍑哄簱鐗╁搧搴撳瓨涓嶈冻"); - } - var stock = stocks.First();//鎬诲簱瀛� - // - BllExportNoticeDetail old; - if (string.IsNullOrWhiteSpace(d.LotNo)) - { - old = noticeDetail.FirstOrDefault(o => o.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(o.LotNo)); - } - else - { - old = noticeDetail.FirstOrDefault(o => o.SkuNo == d.SkuNo && o.LotNo == d.LotNo); - } - - //鏂板姞椤� - if (old == null) - { - //鍒ゆ柇鏁伴噺 - var qty = stock.Qty - stock.LockQty - stock.FrozenQty; - if (d.Qty > qty) + var mq = model.Detail.Where(o => o.SkuNo == d.SkuNo).ToList(); + if (!string.IsNullOrWhiteSpace(d.LotNo)) { - throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}銆亄d.LotNo} 搴撳瓨鏁伴噺涓嶈冻"); + mq = mq.Where(o => o.LotNo == d.LotNo).ToList(); } - - var item = new BllExportNoticeDetail() + if (mq.Any()) //濡傛灉鏈夎繖涓墿鏂欏強鎵规鍒欒烦杩� { - SONo = notice.SONo, - SkuNo = sku.SkuNo, - SkuName = sku.SkuName, - Standard = sku.Standard, - LotNo = d.LotNo, - LotText = "", - Status = "0", - Qty = d.Qty, - AllotQty = 0, - FactQty = 0, - CompleteQty = 0, - PackagNo = sku.PackagNo, - Price = sku.Price, - Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * qty, - IsBale = d.IsBale, - IsBelt = d.IsBelt, - SupplierLot = stocks.First().SupplierLot, - IsWave = "0", - WaveNo = "", - - CreateUser = userId, - }; - - stock.LockQty += d.Qty;//閿佸畾鏁伴噺 - var m = Db.Insertable<BllExportNoticeDetail>(item).ExecuteCommand(); - var i = Db.Updateable(stock).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); - } - else if (old.Qty != d.Qty || old.IsBale != d.IsBale || old.IsBelt != d.IsBelt) - { - if (d.Qty > (stock.Qty-stock.FrozenQty-stock.LockQty) + old.Qty) - { - throw new Exception("鐗╁搧搴撳瓨鏁伴噺涓嶈冻"); + continue; } - //澧炲姞 - if (d.Qty > old.Qty) + // + var fl = stockList.Where(s => s.SkuNo == d.SkuNo).ToList(); + DataStock fls; + if (!string.IsNullOrWhiteSpace(d.LotNo)) { - stock.LockQty += d.Qty - old.Qty; + fls = fl.FirstOrDefault(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo); } else { - stock.LockQty -= old.Qty - d.Qty; + fls = fl.FirstOrDefault(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)); } - old.IsBale = d.IsBale; - old.IsBelt = d.IsBelt; - old.Qty = d.Qty; - old.UpdateUser = userId; - old.UpdateTime = DateTime.Now; - var m = Db.Updateable(old).UpdateColumns(it => new { it.IsBale, it.IsBelt, it.Qty, it.UpdateUser, it.UpdateTime }).ExecuteCommand(); - var i = Db.Updateable(stock).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); + if (fls == null) + { + throw new Exception($"鏈壘鍒扮墿鏂檣d.SkuNo}銆佹壒娆d.LotNo} 鐨勫簱瀛樹俊鎭�"); + } + fls.LockQty -= d.Qty; + d.IsDel = "1"; + d.UpdateUser = userId; + d.UpdateTime = DateTime.Now; + Db.Updateable(d).ExecuteCommand(); + Db.Updateable(fls).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); + } + + //鏇存柊鍑哄簱鍗� + foreach (var d in model.Detail) + { + if (d.Qty < 1) + { + throw new Exception("鍑哄簱鏁版嵁蹇呴』澶т簬0"); + } + var sku = skuList.FirstOrDefault(a => a.SkuNo == d.SkuNo); + if (sku == null) + { + throw new Exception("鍑哄簱鐗╁搧涓虹┖"); + } + //搴撳瓨 + List<DataStock> stocks; + List<DataStockDetail> pallet; + if (!string.IsNullOrWhiteSpace(d.LotNo)) + { + stocks = stockList.Where(s => s.SkuNo == d.SkuNo && s.LotNo == d.LotNo).ToList(); + pallet = palletList.Where(p => p.SkuNo == d.SkuNo && p.LotNo == d.LotNo).ToList(); + } + else + { + stocks = stockList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList(); + pallet = palletList.Where(p => p.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(p.LotNo)).ToList(); + } + + if (stocks.Count < 1) + { + throw new Exception("鍑哄簱鐗╁搧搴撳瓨涓嶈冻"); + } + var stock = stocks.First();//鎬诲簱瀛� + // + BllExportNoticeDetail old; + if (string.IsNullOrWhiteSpace(d.LotNo)) + { + old = noticeDetail.FirstOrDefault(o => o.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(o.LotNo)); + } + else + { + old = noticeDetail.FirstOrDefault(o => o.SkuNo == d.SkuNo && o.LotNo == d.LotNo); + } + + //鏂板姞椤� + if (old == null) + { + //鍒ゆ柇鏁伴噺 + var qty = stock.Qty - stock.LockQty - stock.FrozenQty; + if (d.Qty > qty) + { + throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}銆亄d.LotNo} 搴撳瓨鏁伴噺涓嶈冻"); + } + + var item = new BllExportNoticeDetail() + { + SONo = notice.SONo, + SkuNo = sku.SkuNo, + SkuName = sku.SkuName, + Standard = sku.Standard, + LotNo = d.LotNo, + LotText = "", + Status = "0", + Qty = d.Qty, + AllotQty = 0, + FactQty = 0, + CompleteQty = 0, + PackagNo = sku.PackagNo, + Price = sku.Price, + Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * qty, + IsBale = d.IsBale, + IsBelt = d.IsBelt, + SupplierLot = stocks.First().SupplierLot, + IsWave = "0", + WaveNo = "", + + CreateUser = userId, + }; + + stock.LockQty += d.Qty;//閿佸畾鏁伴噺 + var m = Db.Insertable<BllExportNoticeDetail>(item).ExecuteCommand(); + var i = Db.Updateable(stock).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); + } + else if (old.Qty != d.Qty || old.IsBale != d.IsBale || old.IsBelt != d.IsBelt) + { + if (d.Qty > (stock.Qty - stock.FrozenQty - stock.LockQty) + old.Qty) + { + throw new Exception("鐗╁搧搴撳瓨鏁伴噺涓嶈冻"); + } + //澧炲姞 + if (d.Qty > old.Qty) + { + stock.LockQty += d.Qty - old.Qty; + } + else + { + stock.LockQty -= old.Qty - d.Qty; + } + old.IsBale = d.IsBale; + old.IsBelt = d.IsBelt; + old.Qty = d.Qty; + old.UpdateUser = userId; + old.UpdateTime = DateTime.Now; + var m = Db.Updateable(old).UpdateColumns(it => new { it.IsBale, it.IsBelt, it.Qty, it.UpdateUser, it.UpdateTime }).ExecuteCommand(); + var i = Db.Updateable(stock).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); + } + } + + //瀹㈡埛淇℃伅 + var customer = Db.Queryable<SysCustomer>().Where(m => m.IsDel == "0" && m.CustomerNo == model.CustomerNo).ToList().FirstOrDefault(); + notice.Type = model.Type; + notice.CustomerNo = model.CustomerNo; + notice.CustomerName = customer == null ? "" : customer.CustomerName; + notice.LogisticsId = model.LogisticsId; + notice.UpdateUser = userId; + notice.UpdateTime = DateTime.Now; + + var n = Db.Updateable(notice).ExecuteCommand(); + if (n <= 0) + { + Db.RollbackTran(); + return false; } } - - //瀹㈡埛淇℃伅 - var customer = Db.Queryable<SysCustomer>().Where(m => m.IsDel == "0" && m.CustomerNo == model.CustomerNo).ToList().FirstOrDefault(); - notice.Type = model.Type; - notice.CustomerNo = model.CustomerNo; - notice.CustomerName = customer == null ? "" : customer.CustomerName; - notice.LogisticsId = model.LogisticsId; - notice.UpdateUser = userId; - notice.UpdateTime = DateTime.Now; - - var n = Db.Updateable(notice).ExecuteCommand(); - if (n <= 0) + else //erp/mes { - Db.RollbackTran(); - return false; + //鏇存柊鍑哄簱鍗� + foreach (var d in model.Detail) + { + if (d.Qty < 1) + { + throw new Exception("鍑哄簱鏁版嵁蹇呴』澶т簬0"); + } + var sku = skuList.FirstOrDefault(a => a.SkuNo == d.SkuNo); + if (sku == null) + { + throw new Exception("鍑哄簱鐗╁搧涓虹┖"); + } + //搴撳瓨 + List<DataStock> stocks; + if (!string.IsNullOrWhiteSpace(d.LotNo)) + { + stocks = stockList.Where(s => s.SkuNo == d.SkuNo && d.LotNo.Contains(s.LotNo)).ToList(); + } + else + { + stocks = stockList.Where(s => s.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(s.LotNo)).ToList(); + } + + if (stocks.Count < 1) + { + throw new Exception("鍑哄簱鐗╁搧搴撳瓨涓嶈冻"); + } + var stock = stocks.First();//鎬诲簱瀛� + // + BllExportNoticeDetail old; + if (string.IsNullOrWhiteSpace(d.LotNo)) + { + old = noticeDetail.FirstOrDefault(o => o.SkuNo == d.SkuNo && string.IsNullOrWhiteSpace(o.LotNo)); + } + else + { + old = noticeDetail.FirstOrDefault(o => o.SkuNo == d.SkuNo && o.LotNo == d.LotNo); + } + + //鏂板姞椤� + if (old == null) + { + //鍒ゆ柇鏁伴噺 + var qty = stock.Qty - stock.LockQty - stock.FrozenQty; + if (d.Qty > qty) + { + throw new Exception($"鎬诲簱瀛樹腑鍑哄簱鐗╂枡淇℃伅:{d.SkuNo}銆亄d.LotNo} 搴撳瓨鏁伴噺涓嶈冻"); + } + + var item = new BllExportNoticeDetail() + { + SONo = notice.SONo, + SkuNo = sku.SkuNo, + SkuName = sku.SkuName, + Standard = sku.Standard, + LotNo = d.LotNo, + LotText = "", + Status = "0", + Qty = d.Qty, + AllotQty = 0, + FactQty = 0, + CompleteQty = 0, + PackagNo = sku.PackagNo, + Price = sku.Price, + Money = string.IsNullOrWhiteSpace(sku.Price.ToString()) ? null : sku.Price * qty, + IsBale = d.IsBale, + IsBelt = d.IsBelt, + SupplierLot = stocks.First().SupplierLot, + IsWave = "0", + WaveNo = "", + + CreateUser = userId, + }; + + stock.LockQty += d.Qty;//閿佸畾鏁伴噺 + var m = Db.Insertable<BllExportNoticeDetail>(item).ExecuteCommand(); + var i = Db.Updateable(stock).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); + } + else if (old.Qty != d.Qty || old.IsBale != d.IsBale || old.IsBelt != d.IsBelt) + { + if (d.Qty > (stock.Qty - stock.FrozenQty - stock.LockQty) + old.Qty) + { + throw new Exception("鐗╁搧搴撳瓨鏁伴噺涓嶈冻"); + } + //澧炲姞 + if (d.Qty > old.Qty) + { + stock.LockQty += d.Qty - old.Qty; + } + else + { + stock.LockQty -= old.Qty - d.Qty; + } + old.IsBale = d.IsBale; + old.IsBelt = d.IsBelt; + old.Qty = d.Qty; + old.UpdateUser = userId; + old.UpdateTime = DateTime.Now; + var m = Db.Updateable(old).UpdateColumns(it => new { it.IsBale, it.IsBelt, it.Qty, it.UpdateUser, it.UpdateTime }).ExecuteCommand(); + var i = Db.Updateable(stock).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); + } + } + + //瀹㈡埛淇℃伅 + var customer = Db.Queryable<SysCustomer>().Where(m => m.IsDel == "0" && m.CustomerNo == model.CustomerNo).ToList().FirstOrDefault(); + notice.Type = model.Type; + notice.CustomerNo = model.CustomerNo; + notice.CustomerName = customer == null ? "" : customer.CustomerName; + notice.LogisticsId = model.LogisticsId; + notice.UpdateUser = userId; + notice.UpdateTime = DateTime.Now; + + var n = Db.Updateable(notice).ExecuteCommand(); + if (n <= 0) + { + Db.RollbackTran(); + return false; + } } //娣诲姞鎿嶄綔鏃ュ織璁板綍 var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "缂栬緫", $"缂栬緫浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId); @@ -945,9 +1253,9 @@ { throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅"); } - if (notice.Status != "4") + if (notice.Status != "4" && notice.Status != "3") { - throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负鎵ц瀹屾垚鎴栬鍗曞叧闂�"); + throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负姝e湪鎵ц鎴栨墽琛屽畬鎴�"); } //鎬诲簱瀛樹俊鎭� var stockList = Db.Queryable<DataStock>().ToList(); @@ -968,64 +1276,67 @@ foreach (var d in noticeDetail) { - //鏇存敼搴撳瓨鏄庣粏閿佸畾鏁伴噺 - //var orders = dataContext.WmsExportOrder.Where(o => o.ExportDetailId == d.Id - // && o.ExportExecuteFlag != "4" && o.ExportExecuteFlag == "3" && o.pickingType == 0).ToList(); - //foreach (var o in orders) - //{ - // if (o.ExportQuantity > o.PickedNum) //鍒ゆ柇鎷h揣鏄惁宸叉嫞瀹� - // { - // var pq = dataContext.WmsStockTray.Where(t => t.StockGoodId == o.ExportGoodsCode && t.StockStockCode == o.ExportStockCode); - - // if (string.IsNullOrWhiteSpace(o.ExportLotNo)) - // { - // pq = pq.Where(t => t.StockLotNo == null || t.StockLotNo == ""); - // } - // else - // { - // pq = pq.Where(t => t.StockLotNo == o.ExportLotNo); - // } - // var pallet = pq.FirstOrDefault(); - // //搴撳瓨鎵樼洏淇℃伅閿佸畾鏁伴噺杩樺師涓烘湭閿佸畾 - // if (pq != null) - // { - // pallet.LockQuantity -= o.ExportQuantity.Value - o.PickedNum; - // pallet.StockQuantity += o.ExportQuantity.Value - o.PickedNum; - // } - // } - //} - - if (d.Qty != d.CompleteQty) + if (notice.Type == "0")//鎴愬搧鍑哄簱 { - throw new Exception("褰撳墠鍗曟嵁鏄庣粏涓鍒掓暟閲忎笌鎷h揣鏁伴噺涓嶇锛岃鏍稿疄"); - } - #region 搴撳瓨琛ㄥ噺鍘婚攣瀹氭暟閲忎笌鎬绘暟閲�(PDA鎷h揣鐨勬椂鍊欏凡缁忓噺鍘绘暟閲忎簡) - /*var sq = stocks.Where(s => s.SkuNo == d.SkuNo); - if (!string.IsNullOrWhiteSpace(d.LotNo)) - { - sq = sq.Where(s => s.LotNo == d.LotNo); - } - else - { - sq = sq.Where(s => string.IsNullOrWhiteSpace(s.LotNo)); - } - var st = sq.FirstOrDefault(); - if (st != null) - { - if (d.CompleteQty <= d.Qty) + if (d.Qty != d.CompleteQty) { - st.Qty += d.Qty - d.CompleteQty.Value; + throw new Exception("褰撳墠鍗曟嵁鏄庣粏涓鍒掓暟閲忎笌鎷h揣鏁伴噺涓嶇锛岃鏍稿疄"); + } + } + if (d.Qty < d.CompleteQty) + { + //鏇存敼搴撳瓨鏄庣粏閿佸畾鏁伴噺 + var allotList = Db.Queryable<BllExportAllot>().Where(o => o.SODetailNo == d.Id && o.Status == "3" && o.IsDel == "0").ToList(); + foreach (var o in allotList) + { + if (o.Qty > o.CompleteQty) //鍒ゆ柇鎷h揣鏄惁宸叉嫞瀹� + { + var pq = Db.Queryable<DataStockDetail>().Where(t => t.IsDel == "0" && t.Id == o.StockId && t.SkuNo == o.SkuNo); + + if (string.IsNullOrWhiteSpace(o.LotNo)) + { + pq = pq.Where(t => string.IsNullOrWhiteSpace(t.LotNo)); + } + else + { + pq = pq.Where(t => t.LotNo == o.LotNo); + } + var pallet = pq.First(); + //搴撳瓨鎵樼洏淇℃伅閿佸畾鏁伴噺杩樺師涓烘湭閿佸畾 + if (pq != null) + { + //pallet.Qty -= o.CompleteQty.Value - o.Qty; + pallet.LockQty -= o.Qty - o.CompleteQty.Value; + Db.Updateable(pallet).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); + } + } + } + + + #region 搴撳瓨琛ㄥ噺鍘婚攣瀹氭暟閲忎笌鎬绘暟閲�(PDA鎷h揣鐨勬椂鍊欏凡缁忓噺鍘绘暟閲忎簡) + var sq = stocks.Where(s => s.SkuNo == d.SkuNo); + if (!string.IsNullOrWhiteSpace(d.LotNo)) + { + sq = sq.Where(s => s.LotNo == d.LotNo); } else { - st.Qty -= d.CompleteQty.Value - d.Qty; + sq = sq.Where(s => string.IsNullOrWhiteSpace(s.LotNo)); } - st.LockQty -= d.Qty; - st.Qty -= d.Qty; - //淇敼鎬诲簱瀛樿〃 - Db.Updateable(st).UpdateColumns(it => new { it.Qty, it.LockQty }).ExecuteCommand(); - }*/ - #endregion + if (notice.Type == "6")//浠e偍 + { + sq = sq.Where(s => s.OwnerNo == notice.CustomerNo); + } + var st = sq.FirstOrDefault(); + if (st != null) + { + st.LockQty -= d.Qty - d.CompleteQty.Value; + //淇敼鎬诲簱瀛樿〃 + Db.Updateable(st).UpdateColumns(it => new { it.LockQty }).ExecuteCommand(); + } + #endregion + } + } //娣诲姞鎿嶄綔鏃ュ織璁板綍 var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "鍏冲崟", $"鍏抽棴浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId); @@ -1118,8 +1429,8 @@ .AndIF(!string.IsNullOrWhiteSpace(skuName), m => m.SkuName.Contains(skuName.Trim())) .AndIF(!string.IsNullOrWhiteSpace(palletNo), m => m.PalletNo.Contains(palletNo.Trim())) .AndIF(!string.IsNullOrWhiteSpace(lotNo), m => m.LotNo.Contains(lotNo.Trim())) - .AndIF(!string.IsNullOrWhiteSpace(inspectMark), m => m.InspectMark==inspectMark) - .AndIF(!string.IsNullOrWhiteSpace(bitPalletMark), m => m.BitPalletMark== bitPalletMark) + .AndIF(!string.IsNullOrWhiteSpace(inspectMark), m => m.InspectMark == inspectMark) + .AndIF(!string.IsNullOrWhiteSpace(bitPalletMark), m => m.BitPalletMark == bitPalletMark) .And(m => !string.IsNullOrWhiteSpace(m.WareHouseNo)) .And(a => a.Status == "0") .And(a => a.WareHouseNo == "W01") @@ -1151,7 +1462,7 @@ var outDtoList = new List<OutCommandDto>(); //鍑哄簱鏁版嵁鐨勯泦鍚� str = ""; var stockDetailList = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == palletNo && m.IsDel == "0").ToList(); - + if (stockDetailList.Count == 0) { throw new Exception($"鏈湪搴撳唴鏌ヨ鍒拌鎵樼洏淇℃伅"); @@ -1166,7 +1477,7 @@ } //鍒ゆ柇鎵樼洏搴撳瓨淇℃伅鍒嗙粍鍚庢槸鍚﹀ぇ浜�1鏉� var detailGroup = stockDetailList.GroupBy(m => new { m.SkuNo, m.PalletNo, m.WareHouseNo, m.LocatNo }).ToList(); - if (detailGroup.Count>1) + if (detailGroup.Count > 1) { throw new Exception($"鏈湪搴撳唴鏌ヨ鍒拌鎵樼洏淇℃伅"); } @@ -1249,7 +1560,7 @@ throw new Exception($"褰撳墠鎵樼洏鎵�鍦ㄧ殑鍌ㄤ綅宸叉崯鍧忥紝涓嶈兘鍑哄簱锛岃鏍稿疄"); } - if (locate.Status !="1") + if (locate.Status != "1") { throw new Exception($"褰撳墠鎵樼洏鎵�鍦ㄧ殑鍌ㄤ綅鐘舵�佷笉鏄湁鐗╁搧锛屼笉鑳藉嚭搴擄紝璇锋牳瀹�"); } @@ -1305,10 +1616,10 @@ Db.Updateable(de).ExecuteCommand(); Db.Updateable(stocka).ExecuteCommand(); } - + locate.Status = "3"; //瑕佸嚭搴撶殑鍌ㄤ綅鏀瑰彉鐘舵�� 姝e湪鍑哄簱 Db.Updateable(locate).ExecuteCommand(); - + #endregion @@ -1382,7 +1693,9 @@ { #region 闆嗗悎 - var outDtoList = new List<OutCommandDto>(); //鍑哄簱鏁版嵁鐨勯泦鍚� + var outDto1 = new List<OutCommandDto>(); //鍏堝嚭搴撴暟鎹殑闆嗗悎锛堟繁搴︿负1鐨勫偍浣嶏級 + var outDto2 = new List<OutCommandDto>(); //鍚庡嚭搴撴暟鎹殑闆嗗悎锛堟繁搴︿负2鐨勫偍浣嶏級 + var moveDto = new List<OutCommandDto>(); //瑕佺Щ搴撴暟鎹殑闆嗗悎 //璁板綍閿欒淇℃伅鐨勯泦鍚� var flagList = new List<int>();//1:褰撳墠瑕佸嚭搴撶殑鍌ㄤ綅姝e湪绉诲嚭銆�2 鍑哄簱鐨勬墭鐩樺偍浣嶄俊鎭敊璇�(鍦ㄥ偍浣嶈〃涓湭鏌ヨ鍒�)銆�3鍌ㄤ綅鎹熷潖涓嶈兘鍑哄簱銆�4 瑕佸嚭搴撶殑鎵樼洏姝e湪鍏ュ簱 @@ -1417,35 +1730,56 @@ //寰幆鍒嗛厤鐨勪俊鎭敓鎴愬嚭搴撲换鍔� foreach (var item in list) { + var taskNoStr = ""; string toLocation = string.Empty;//鐩爣浣嶇疆 string unstackingMode2 = unstackingMode;//鎷嗗灈鏂瑰紡锛�0:鏈哄櫒浜烘媶鍨� 1:PDA鎷嗗灈 #region 鍒ゆ柇鏄惁闇�瑕佹媶绠� - var skuInfo = skuList.First(w => w.SkuNo == item.SkuNo); - if (skuInfo == null) + if (notice.Type == "0")//鎴愬搧鍑哄簱 { - throw new Exception("鐗╂枡淇℃伅涓嶅瓨鍦紒"); - } - var packagInfo = packagList.First(w => w.PackagNo == skuInfo.PackagNo); - if (packagInfo == null) - { - throw new Exception("鍖呰淇℃伅涓嶅瓨鍦紒"); - } - if (packagInfo.L2Name == "绠�") - { - if (item.Qty % (decimal)packagInfo.L2Num != 0)//鑳芥暣闄よ鏄庝笉鐢ㄦ媶绠憋紝涓嶈兘鏁撮櫎璇存槑闇�瑕佹媶绠� + string isChai = "0";//鏄惁闇�瑕佹媶绠憋紝0:鍚� 1:鏄� + var skuInfo = skuList.First(w => w.SkuNo == item.SkuNo); + if (skuInfo == null) { - unstackingMode2 = "1";//闇�瑕佹媶绠遍渶璧癙DA鎷嗗灈 + throw new Exception("鐗╂枡淇℃伅涓嶅瓨鍦紒"); + } + var packagInfo = packagList.First(w => w.PackagNo == skuInfo.PackagNo); + if (packagInfo == null) + { + throw new Exception("鍖呰淇℃伅涓嶅瓨鍦紒"); + } + if (packagInfo.L2Name == "绠�") + { + if (item.Qty % (decimal)packagInfo.L2Num != 0)//鑳芥暣闄よ鏄庝笉鐢ㄦ媶绠憋紝涓嶈兘鏁撮櫎璇存槑闇�瑕佹媶绠� + { + isChai = "1"; + unstackingMode2 = "1";//闇�瑕佹媶绠遍渶璧癙DA鎷嗗灈 + } + } + if (isChai == "0") + { + var boxInfo = Db.Queryable<DataBoxInfo>().Where(w => w.IsDel == "0" && w.PalletNo == item.PalletNo && w.BitBoxMark == "1").ToList(); + if (boxInfo.Count>0)//鎵樼洏涓婃湁闆剁闇�瑕佹媶绠� + { + isChai = "1"; + unstackingMode2 = "1";//闇�瑕佹媶绠遍渶璧癙DA鎷嗗灈 + } + } + + if (unstackingMode2 == "0")//鏈哄櫒浜烘媶鍨� + { + toLocation = "009";//鏈哄櫒浜烘媶鍨涚粺涓�鍙戦�佸埌009宸ヤ綅锛岀敱PLC鑷姩鍒嗛厤鎷嗗灈浣� + } + else //PDA鎷嗗灈 + { + toLocation = outMode;//鍑哄簱鍙� } } - #endregion - if (unstackingMode2 == "0")//鏈哄櫒浜烘媶鍨� + else { - toLocation = loadingAddre;//瑁呰溅鍙� - } - else //PDA鎷嗗灈 - { + unstackingMode2 = "1";//闈炴垚鍝佸嚭搴撹蛋PDA鎷嗗灈 toLocation = outMode;//鍑哄簱鍙� } + #endregion // 鍌ㄤ綅鍙� var locateNo = outStockDetail.First(m => m.PalletNo == item.PalletNo).LocatNo; @@ -1536,40 +1870,212 @@ if (locate.Status == "1") //鏈夌墿鍝� { #region 娣诲姞鍑哄簱浠诲姟 - - var taskNo = new Common().GetMaxNo("TK"); - var exTask = new LogTask //鍑哄簱浠诲姟 + if (locate.Depth == "01") //娣卞害涓�1 { - TaskNo = taskNo, - Sender = "WMS", - Receiver = "WCS", - IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + var taskNo = new Common().GetMaxNo("TK"); + var exTask = new LogTask //鍑哄簱浠诲姟 + { + TaskNo = taskNo, + Sender = "WMS", + Receiver = "WCS", + IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 - StartLocat = locate.LocatNo,//璧峰浣嶇疆 - EndLocat = toLocation,//outMode,//鐩爣浣嶇疆 - PalletNo = item.PalletNo,//鎵樼洏鐮� - IsSend = 1,//鏄惁鍙啀娆′笅鍙� - IsCancel = 1,//鏄惁鍙彇娑� - IsFinish = 1,//鏄惁鍙畬鎴� - Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 - Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 - OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� - Msg = "浠�" + locate.LocatNo + "鍒�" + toLocation + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 - }; - Db.Insertable(exTask).ExecuteCommand(); - logTaskList.Add(exTask); + StartLocat = locate.LocatNo,//璧峰浣嶇疆 + EndLocat = toLocation,//outMode,//鐩爣浣嶇疆 + PalletNo = item.PalletNo,//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� + Msg = "浠�" + locate.LocatNo + "鍒�" + toLocation + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 + }; + Db.Insertable(exTask).ExecuteCommand(); + logTaskList.Add(exTask); - outDtoList.Add(new OutCommandDto() + outDto1.Add(new OutCommandDto() + { + PalletNo = item.PalletNo,//鎵樼洏鍙� + StartLocate = locate.LocatNo, // 璧峰浣嶇疆 + StartRoadway = locate.RoadwayNo,//鍏跺疄宸烽亾 + EndLocate = toLocation,//outMode, // 鐩爣浣嶇疆 + TaskNo = exTask.TaskNo, // 浠诲姟鍙� + TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱) + OutMode = "", //鐩爣鍦板潃 + Order = 1 + }); + taskNoStr = exTask.TaskNo; + } + else if (locate.Depth == "02") //娣卞害涓�2 { - PalletNo = item.PalletNo,//鎵樼洏鍙� - StartLocate = locate.LocatNo, // 璧峰浣嶇疆 - StartRoadway = locate.RoadwayNo,//鍏跺疄宸烽亾 - EndLocate = toLocation,//outMode, // 鐩爣浣嶇疆 - TaskNo = exTask.TaskNo, // 浠诲姟鍙� - TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱) - OutMode = "", //鐩爣鍦板潃 - Order = 1 - }); + //鑾峰彇鍑哄簱娣卞害涓�2鍌ㄤ綅鍓嶉潰鐨勫偍浣嶄俊鎭� + var slotBefore = com.GetLocateNoDepth1(locate.WareHouseNo, locate.LocatNo); + if (slotBefore.Status == "1") //鍓嶉潰鐨勫偍浣嶆湁璐х墿銆佽繘琛岀Щ搴撴搷浣� + { + //瑕佸嚭搴撴繁搴︿负2鐨勫偍浣嶅墠闈㈢殑鍌ㄤ綅涓揣鐗╂槸鍚﹁鍑哄簱 + var isout = outStockDetail.Count(m => m.LocatNo == slotBefore.LocatNo); + + if (isout <= 0) //杩涜绉诲簱 + { + //鍘诲簱瀛樿〃涓壘鍒板偍浣嶅搴旂殑鎵樼洏鐮佹搷浣� + var stockNew = Db.Queryable<DataStockDetail>().First(m => m.LocatNo == slotBefore.LocatNo); + if (stockNew == null) + { + var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == slotBefore.LocatNo); + slotChange.Status = "0"; + Db.Updateable(slotChange).ExecuteCommand(); + } + else + { + //鑾峰彇绉诲簱鐨勫簱浣� + var newSlot = MoveAddress(slotBefore.LocatNo, slotBefore.RoadwayNo, item.SkuNo); + //褰撳墠绉诲簱搴撲綅鐨勫偍浣嶄俊鎭� + var locatey = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == newSlot && m.IsDel == "0"); + if (!string.IsNullOrEmpty(newSlot)) + { + #region 娣诲姞鍑哄簱鏃跺彂鐢熺殑绉诲簱浠诲姟 + + var exYkTaskNo = new Common().GetMaxNo("TK"); + var exYkTask = new LogTask //鍑哄簱鏃朵骇鐢熺Щ搴撲换鍔� + { + TaskNo = exYkTaskNo, + Sender = "WMS", + Receiver = "WCS", + IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + + StartLocat = stockNew.LocatNo,//璧峰浣嶇疆 + EndLocat = newSlot,//鐩爣浣嶇疆 + PalletNo = stockNew.PalletNo,//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Type = "2",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� + + Msg = stockNew.LocatNo + " ==>> " + newSlot + "鐨勭Щ搴撲换鍔�", + }; + Db.Insertable(exYkTask).ExecuteCommand(); + + moveDto.Add(new OutCommandDto() + { + StartRoadway = slotBefore.RoadwayNo, //璧峰宸烽亾 + PalletNo = stockNew.PalletNo,//鎵樼洏鍙� + StartLocate = stockNew.LocatNo, // 璧峰浣嶇疆 + EndLocate = newSlot, // 鐩爣浣嶇疆 + EndRoadway = locatey.RoadwayNo, // 鐩爣宸烽亾 + TaskNo = exYkTask.TaskNo, // 浠诲姟鍙� + TaskType = "2",// 浠诲姟绫诲瀷 (绉诲簱) + OutMode = "", //鐩爣鍦板潃 + Order = 1, + }); + #endregion + + #region 鏀瑰彉鍌ㄤ綅瑁呭~ + var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.Id == slotBefore.Id); + var slotChange2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == newSlot); + slotChange.Status = "5"; //鏀瑰彉鐘舵�侊紙姝e湪绉诲嚭锛� + slotChange2.Status = "4"; // 鏀瑰彉鐘舵�侊紙姝e湪绉诲叆锛� + Db.Updateable(slotChange).ExecuteCommand(); + Db.Updateable(slotChange2).ExecuteCommand(); + #endregion + } + else + { + #region 娣诲姞鍑哄簱浠诲姟 + + var exYkTaskNo1 = new Common().GetMaxNo("TK"); + var exYkTask1 = new LogTask //鍑哄簱绉诲簱娌℃湁搴撲綅浜嗚繘琛屽嚭搴撲换鍔� + { + TaskNo = exYkTaskNo1, + Sender = "WMS", + Receiver = "WCS", + IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + + StartLocat = stockNew.LocatNo,//璧峰浣嶇疆 + EndLocat = toLocation,//鐩爣浣嶇疆 + PalletNo = stockNew.PalletNo,//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� + Msg = locate.LocatNo + "鐨勫嚭搴撲换鍔�" + }; + Db.Insertable(exYkTask1).ExecuteCommand(); + + outDto1.Add(new OutCommandDto() + { + StartRoadway = slotBefore.RoadwayNo, //璧峰宸烽亾 + PalletNo = stockNew.PalletNo,//鎵樼洏鍙� + StartLocate = stockNew.LocatNo, // 璧峰浣嶇疆 + EndLocate = toLocation, // 鐩爣浣嶇疆 + EndRoadway = "", // 鐩爣宸烽亾 + TaskNo = exYkTask1.TaskNo, // 浠诲姟鍙� + TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱) + OutMode = "", //鐩爣鍦板潃 + Order = 1, + }); + #endregion + + #region MyRegion + + var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.Id == slotBefore.Id); + slotChange.Status = "3"; //鏀瑰彉鐘舵�侊紙姝e湪鍑哄簱锛� + Db.Updateable(slotChange).ExecuteCommand(); + + #endregion + } + } + } + } + else if (slotBefore.Status == "2" || slotBefore.Status == "4") //鍓嶉潰鍌ㄤ綅鐘舵�佹槸鍏ュ簱涓垨鑰呯Щ鍏ヤ腑 + { + flagList.Add(5); + continue; + } + + #region 娣诲姞鍑哄簱浠诲姟 + + var taskNo1 = new Common().GetMaxNo("TK"); + var exTask1 = new LogTask //鍑哄簱浠诲姟 + { + TaskNo = taskNo1, + Sender = "WMS", + Receiver = "WCS", + IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + + StartLocat = locate.LocatNo,//璧峰浣嶇疆 + EndLocat = toLocation,//鐩爣浣嶇疆 + PalletNo = item.PalletNo,//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "1",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� + Msg = locate.LocatNo + "鐨勫嚭搴撲换鍔�" + }; + Db.Insertable(exTask1).ExecuteCommand(); + logTaskList.Add(exTask1); + outDto2.Add(new OutCommandDto() + { + StartRoadway = locate.RoadwayNo, //璧峰宸烽亾 + PalletNo = item.PalletNo,//鎵樼洏鍙� + StartLocate = locate.LocatNo, // 璧峰浣嶇疆 + EndLocate = toLocation, // 鐩爣浣嶇疆 + EndRoadway = locate.RoadwayNo, //鐩爣宸烽亾 + TaskNo = exTask1.TaskNo, // 浠诲姟鍙� + TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱) + OutMode = "", //鐩爣鍦板潃 + Order = 1, + }); + taskNoStr = exTask1.TaskNo; + #endregion + + } #endregion #region 鏀瑰彉鏁版嵁 @@ -1596,7 +2102,7 @@ locate.Status = "3"; //瑕佸嚭搴撶殑鍌ㄤ綅鏀瑰彉鐘舵�� 姝e湪鍑哄簱 Db.Updateable(locate).ExecuteCommand(); - item.TaskNo = exTask.TaskNo; // 鍑哄簱鍒嗛厤淇℃伅涓洿鏂颁换鍔″彿 + item.TaskNo = taskNoStr; // 鍑哄簱鍒嗛厤淇℃伅涓洿鏂颁换鍔″彿 item.Status = "1"; // 鍑哄簱鍒嗛厤淇℃伅鐘舵�佹敼涓烘鍦ㄦ墽琛� item.UnstackingMode = unstackingMode2;//鎷嗗灈鏂瑰紡 item.OutMode = unstackingMode2 == "1" ? outMode : "";//鍑哄簱鍙� @@ -1631,10 +2137,10 @@ } } } - var taskNo = Db.Queryable<LogTask>().First(m => m.OrderType =="1"&& m.TaskNo != item.TaskNo && m.Status == "1" && m.PalletNo==item.PalletNo); + var taskNo = Db.Queryable<LogTask>().First(m => m.OrderType == "1" && m.TaskNo != item.TaskNo && m.Status == "1" && m.PalletNo == item.PalletNo); if (taskNo == null) { - taskNo = logTaskList.First(m => m.PalletNo == item.PalletNo);//褰撳墠鏈夊悓鎵樼洏涓嶅悓鐗╂枡鍑哄簱 + taskNo = logTaskList.FirstOrDefault(m => m.PalletNo == item.PalletNo);//褰撳墠鏈夊悓鎵樼洏涓嶅悓鐗╂枡鍑哄簱 } if (taskNo == null) { @@ -1653,7 +2159,8 @@ flagList.Add(1); } } - + outDto1.AddRange(moveDto); + outDto1.AddRange(outDto2); //娣诲姞鎿嶄綔鏃ュ織璁板綍 var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", soNo, "鍑哄簱", $"鐐瑰嚮鍑哄簱鎸夐挳鍑哄簱鍗曞彿涓猴細{soNo}鐨勫嚭搴撳崟", userId); Db.CommitTran(); @@ -1679,11 +2186,15 @@ { str += "3.瑕佸嚭搴撶殑鎵樼洏姝e湪鍏ュ簱銆�"; } - if (outDtoList.Count > 0) + if (string.IsNullOrWhiteSpace(str)) + { + str += "鎵樼洏鍙墽琛岋紝鏃犻渶涓嬪彂鍑哄簱浠诲姟"; + } + if (outDto1.Count > 0) { // 姝e紡杩愯绋嬪簭鏀惧紑 - var list2 = outDtoList.Select(m => m.TaskNo).ToList(); - var jsonData = JsonConvert.SerializeObject(outDtoList); + var list2 = outDto1.Select(m => m.TaskNo).ToList(); + var jsonData = JsonConvert.SerializeObject(outDto1); string response = ""; try @@ -1692,7 +2203,7 @@ response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橶CS鍑哄簱鍛戒护", "WCS"); var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss") - ////瑙f瀽杩斿洖鏁版嵁 + //////瑙f瀽杩斿洖鏁版嵁 var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); if (wcsModel.StatusCode == 0) { @@ -1713,7 +2224,7 @@ } - return outDtoList; + return outDto1; } catch (Exception e) { @@ -1730,16 +2241,24 @@ } } - //wcs杩斿洖鐨勬垚鍔熶俊鍙凤紙鍑哄簱鎴愬姛锛� - public void ExportSuccess(string taskNo, int userId) + //wcs杩斿洖鐨勬垚鍔熶俊鍙凤紙鍑哄簱鎴愬姛锛� + public void ExportSuccess(string taskNo, int userId,string url) { try { + //鍑哄簱浠诲姟鍙锋洿鏀癸紝濡傛灉鐢盤LC鍑哄簱锛屽垯PLC鍥炰紶浠诲姟鍙蜂负锛氫换鍔″彿+瀹為檯鍑哄簱鍙� + var TtaskNo = taskNo; + var outLine = ""; + if (taskNo.Length == 18) + { + TtaskNo = taskNo.Substring(0, taskNo.Length - 3); + outLine = taskNo.Substring(taskNo.Length - 3, 3); + } //褰撳墠浠诲姟淇℃伅 - var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0"); + var task = Db.Queryable<LogTask>().First(m => m.TaskNo == TtaskNo && m.IsDel == "0"); if (task == null) { - throw new Exception($"鏈煡璇㈠埌浠诲姟鍙蜂负锛氣�榹taskNo}鈥欑殑浠诲姟淇℃伅"); + throw new Exception($"鏈煡璇㈠埌浠诲姟鍙蜂负锛氣�榹TtaskNo}鈥欑殑浠诲姟淇℃伅"); } if (task.Status == "2") { @@ -1766,7 +2285,7 @@ } foreach (var item in stockDetail) { - if (item.SkuNo== "100099")//鍒ゆ柇鏄惁鏄┖鎵樺嚭搴� + if (item.SkuNo == "100099")//鍒ゆ柇鏄惁鏄┖鎵樺嚭搴� { //鍒ゆ柇鎬诲簱瀛樻槸鍚︿负0锛屽鏋滀负0鍒犻櫎 鍚﹀垯鍑忓幓鏁伴噺 var stock = Db.Queryable<DataStock>().First(m => m.SkuNo == "100099"); @@ -1855,7 +2374,7 @@ Db.Updateable(item).ExecuteCommand(); } //鍑哄簱娴佹按锛堟洿鏀圭姸鎬侊級 - var allot = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.TaskNo == taskNo || (m.Status == "1" && m.PalletNo == task.PalletNo))).ToList(); + var allot = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.TaskNo == TtaskNo || (m.Status == "1" && m.PalletNo == task.PalletNo))).ToList(); foreach (var item in allot) { @@ -1874,7 +2393,151 @@ if (userId != 0) { //娣诲姞鎿嶄綔鏃ュ織璁板綍 - var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鏃ュ織", taskNo, "瀹屾垚", $"鐐瑰嚮瀹屾垚鎸夐挳銆佸畬鎴愪换鍔″彿涓猴細{taskNo}鐨勪换鍔�", userId); + var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鏃ュ織", TtaskNo, "瀹屾垚", $"鐐瑰嚮瀹屾垚鎸夐挳銆佸畬鎴愪换鍔″彿涓猴細{TtaskNo}鐨勪换鍔�", userId); + } + if (outLine != "" && outLine != "009" && outLine != "013" && outLine != "018" && outLine != "022") + { + #region 鍒嗛厤鍑哄簱鐩殑浣� + string positionStart = outLine, positionEnd = "", type = "D00"; + var type1 = Db.Queryable<BllExportNotice>().Where(m => m.SONo == allot.First().SONo && m.IsDel == "0" && m.Status == "3").First(); + if (type1 == null) + { + var locateno = Db.Queryable<SysStorageLocat>().Where(m => m.AreaNo == "B13").ToList(); + type = "D02"; //绌烘墭鐩樺灈鍑哄簱 + if (outLine == "443")//瑗夸晶鍑哄簱 + { + positionEnd = locateno.First(m => m.Row == 1 && m.Status == "0" && m.Flag == "0").LocatNo; + } + else if (outLine == "440") //涓滀晶鍑哄簱 + { + positionEnd = locateno.First(m => m.Row == 2 && m.Status == "0" && m.Flag == "0").LocatNo; //涓滀晶鎴块棿搴撲綅 + } + else //1妤肩┖鎵樼洏鍑哄簱涓嶈皟鐢ˋGV + { + Db.CommitTran(); + return; + } + + } + else + { + if (type1.Type == "1" || (type1.Type == "5" && (positionStart == "440" || positionStart == "443"))) //3妤奸鏂欏嚭搴� /3L涓棿鍝佸嚭搴� + { + var locateno = Db.Queryable<SysStorageLocat>().Where(m => m.AreaNo == "B11").ToList(); + if (outLine == "443")//瑗夸晶鍑哄簱 + { + + positionEnd = locateno.OrderBy(m => m.LocatNo).First(m => m.Row == 1 && m.Status == "0" && m.Flag == "0").LocatNo; //瑗夸晶鎴块棿搴撲綅鍜屽闈㈡埧闂� + } + else if (outLine == "440") //涓滀晶鍑哄簱 + { + positionEnd = locateno.OrderBy(m => m.LocatNo).First(m => m.Row == 2 && m.Status == "0" && m.Flag == "0").LocatNo; //涓滀晶鎴块棿搴撲綅 + } + } + else if (type1.Type == "2" || type1.Type == "3") //鎶芥鍑哄簱 /鍙栨牱鍑哄簱 + { + positionEnd = Db.Queryable<SysStorageLocat>().OrderBy(m=>m.LocatNo).First(m => m.AreaNo == "B04" && m.Status == "0" && m.Flag == "0").LocatNo; + } + else if (type1.Type == "4")//涓嶅悎鏍煎搧鍑哄簱 + { + + positionEnd = Db.Queryable<SysStorageLocat>().OrderBy(m => m.LocatNo).First(m => m.AreaNo == "B03" && m.Status == "0" && m.Flag == "0").LocatNo; + } + else //鍏朵粬鍗曟嵁绫诲瀷閮藉瓨鏀惧彂璐х紦瀛樺尯 + { + positionEnd = Db.Queryable<SysStorageLocat>().OrderBy(m => m.LocatNo).First(m => m.AreaNo == "B02" && m.Status == "0" && m.Flag == "0").LocatNo; + } + } + #endregion + + #region AGV璋冪敤 + var storageLocatEnd = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == positionEnd && w.Flag == "0" && w.Status == "0"); + if (storageLocatEnd == null) + { + throw new Exception("鐢熸垚鐨凙GV浠诲姟鐩殑鍦板潃涓嶆纭�"); + } + List<AgvSchedulingTask> agvTaskList = new List<AgvSchedulingTask>(); + + object[] position = new object[2]; + position[0] = new + { + positionCode = positionStart, + type = "00" + }; + position[1] = new + { + positionCode = positionEnd, + type = "00" + }; + + AgvSchedulingTask agvTask = new AgvSchedulingTask(); + Random r = new Random(); + long ran = DateTime.Now.Ticks; + agvTask.ReqCode = ran.ToString(); + //agvTask.ReqCode = TtaskNo; //agv璇锋眰缂栧彿锛岄渶瑕侀殢鏈虹敓鎴� 锛堟渶澶�32浣嶏級 + agvTask.TaskCode = TtaskNo; //浠诲姟鍙� + agvTask.TaskTyp = type; //鎼繍绫诲瀷 + agvTask.PositionCodePath = position; //璧峰鍜岀洰鐨勪綅闆嗗悎 + agvTask.CtnrTyp = "1"; //瀹瑰櫒绫诲瀷锛屽�间负1 + if (type == "D02") + { + var palnoNum = Db.Queryable<BllPalletBind>().OrderByDescending(w=>w.Id).First(w => w.IsDel == "0" && w.PalletNo == task.PalletNo); + agvTask.CtnrNum = palnoNum.Qty.ToString(); //鍙犳墭浠诲姟闇�瑕佷笅鍙戠┖鎵樼洏鏁伴噺 + } + + agvTaskList.Add(agvTask); + + string str = ""; + var list2 = agvTaskList.Select(m => m.TaskCode).ToList(); + var jsonData = JsonConvert.SerializeObject(agvTaskList); + jsonData = jsonData.Substring(1, jsonData.Length - 1); + jsonData = jsonData.Substring(0, jsonData.Length - 1); + var response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橝GV杞繍鍛戒护", "AGV"); + var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response); + if (agvModel.Code != "0") + { + //璁板綍log + var logStr = $@".\log\AGV\浠诲姟鍙嶉" + DateTime.Now.ToString("yyyyMMdd") + ".txt"; + jsonData = JsonConvert.SerializeObject(agvModel); + LogFile.SaveLogToFile($"AGV浠诲姟鍙嶉鎵ц閫氱煡锛�( {jsonData} ),", logStr); + } + + #endregion + + #region 娣诲姞鍑哄簱浠诲姟淇℃伅 + + var taskNonew = new Common().GetMaxNo("TK"); + var exTask = new LogTask //灏忚溅绉诲簱浠诲姟 + { + TaskNo = TtaskNo, + Sender = "WMS", + Receiver = "AGV", + IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + + StartLocat = positionStart,//璧峰浣嶇疆 + EndLocat = positionEnd,//鐩爣浣嶇疆 + PalletNo = task.PalletNo,//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Type = "2",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "3",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� + CreateTime = DateTime.Now, //鍒涘缓鏃堕棿 + CreateUser = userId, //鍒涘缓浜� + Msg = "灏忚溅浠�" + positionStart + "鍒�" + positionEnd + "鐨勭Щ搴撲换鍔�", //鍏抽敭淇℃伅 + //FinishDate = serverTime, //瀹屾垚鏃堕棿 + }; + Db.Insertable(exTask).ExecuteCommand(); + + #endregion + + #region 鍌ㄤ綅鐘舵�佸彉鏇� + //鏇存敼鍌ㄤ綅鐘舵�佷负鍑哄簱涓� + var locat = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == positionEnd); + locat.Status = "4"; //4 绉诲叆涓� + Db.Updateable(locat).ExecuteCommand();//淇敼鍌ㄤ綅淇℃伅 + #endregion } Db.CommitTran(); } @@ -1890,8 +2553,88 @@ } } + /// <summary> + /// wcs杩斿洖鐨勬垚鍔熶俊鍙凤紙绉诲簱鎴愬姛锛� + /// </summary> + /// <param name="taskNo">浠诲姟鍙�</param> + /// <param name="userId">鎿嶄綔浜�</param> + /// <exception cref="Exception"></exception> + public void RelocationSuccess(string taskNo, int userId) + { + try + { + //褰撳墠浠诲姟淇℃伅 + var task = Db.Queryable<LogTask>().First(m => m.TaskNo == taskNo && m.IsDel == "0"); + if (task == null) + { + throw new Exception($"鏈煡璇㈠埌浠诲姟鍙蜂负锛氣�榹taskNo}鈥欑殑浠诲姟淇℃伅"); + } + if (task.Status == "2") + { + throw new Exception("褰撳墠浠诲姟宸插畬鎴�"); + } + Db.BeginTran(); + //搴撳瓨涓綋鍓嶆墭鐩樼殑淇℃伅 + var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == task.PalletNo).ToList(); + //褰撳墠浠诲姟涓殑鐩爣鍌ㄤ綅淇℃伅 + //褰撳墠浠诲姟涓殑鍘熷偍浣� + var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.StartLocat); + if (locate == null) + { + throw new Exception($"WMS绯荤粺涓病鏈夎{task.StartLocat}鍌ㄤ綅瀵瑰簲鐨勪俊鎭�"); + } + var locate2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.EndLocat); + if (locate2 == null) + { + throw new Exception($"WMS绯荤粺涓病鏈夎{task.EndLocat}鍌ㄤ綅瀵瑰簲鐨勪俊鎭�"); + } + + try + { + task.Status = "2";//浠诲姟鐘舵�� + task.IsSend = 0; + task.IsCancel = 0; + task.IsFinish = 0; + task.FinishDate = DateTime.Now;//瀹屾垚鏃堕棿 + Db.Updateable(task).ExecuteCommand(); + + #region 淇敼鍌ㄤ綅鐘舵�� + + //鍘熷偍浣嶆敼涓虹┖鍌ㄤ綅 0 + locate.Status = "0"; + Db.Updateable(locate).ExecuteCommand(); + + //鐩爣鍌ㄤ綅鏀逛负鏈夎揣鐗� 1 + locate2.Status = "1"; + Db.Updateable(locate2).ExecuteCommand(); + foreach (var item in stockDetail) + { + item.WareHouseNo = locate2.WareHouseNo; + item.AreaNo = locate2.AreaNo; + item.RoadwayNo = locate2.RoadwayNo; + item.LocatNo = locate2.LocatNo; + } + Db.Updateable(stockDetail).ExecuteCommand(); + + #endregion + + Db.CommitTran(); + } + catch (Exception ex) + { + Db.RollbackTran(); + throw new Exception(ex.Message); + } + } + catch (Exception ex) + { + throw new Exception("瀹屾垚鍙嶉澶辫触锛�" + ex.Message); + } + } + + //閲嶆柊涓嬪彂鍑哄簱浠诲姟 - public OutCommandDto AgainSendSoTask(string taskNo, int userId, string url) + public OutCommandDto AgainSendSoTask(string taskNo, string Receiver, int userId, string url) { try { @@ -1942,22 +2685,42 @@ { //绋嬪簭姝e紡鍙戝竷鍚庢斁寮� var time1 = DateTime.Now;//鍙戦�佹椂闂� .ToString("yyyy-MM-dd HH:mm:ss") - var response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橶CS鍑哄簱鍛戒护", "WCS"); + var response = HttpHelper.DoPost(url, jsonData, Receiver == "WCS" ? "涓嬪彂缁橶CS鍑哄簱鍛戒护" : "涓嬪彂缁橝GV鍑哄簱鍛戒护", "WCS"); var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss") - ////瑙f瀽杩斿洖鏁版嵁 - var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); - if (wcsModel.StatusCode == 0) + if (Receiver == "WCS") { - //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�// - new TaskServer().EditTaskIssueOk(list, time1, time2); + ////瑙f瀽杩斿洖鏁版嵁 + var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); + if (wcsModel.StatusCode == 0) + { + //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�// + new TaskServer().EditTaskIssueOk(list, time1, time2); + } + if (wcsModel.StatusCode == -1) + { + new TaskServer().EditTaskIssueNo(list, time1, time2, wcsModel.Msg); + throw new Exception($"wcs杩斿洖鐘舵�佸紓甯革細{wcsModel.Msg}"); + } } - if (wcsModel.StatusCode == -1) + else if (Receiver == "AGV") { - new TaskServer().EditTaskIssueNo(list, time1, time2, wcsModel.Msg); - throw new Exception($"wcs杩斿洖鐘舵�佸紓甯革細{wcsModel.Msg}"); + ////瑙f瀽杩斿洖鏁版嵁 + var agvModel = JsonConvert.DeserializeObject<OutCommanAgvDto>(response); + if (agvModel.Code == "0") + { + //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�// + new TaskServer().EditTaskIssueOk(list, time1, time2); + + } + if (agvModel.Code == "1") + { + new TaskServer().EditTaskIssueNo(list, time1, time2, agvModel.Message); + throw new Exception($"agv杩斿洖鐘舵�佸紓甯革細{agvModel.Message}"); + } } + } catch (Exception ex) { @@ -1985,6 +2748,38 @@ { throw new Exception("鏈煡璇㈠埌浠诲姟淇℃伅"); } + //鑾峰彇瀵瑰簲搴撲綅淇℃伅 + var startlocat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.StartLocat); + if (startlocat == null) + { + throw new Exception("鏈煡璇㈠埌鍌ㄤ綅淇℃伅"); + } + startlocat.Status = "0";//淇敼鍒嗛厤淇℃伅鐘舵�� + //鑾峰彇鍌ㄤ綅淇℃伅 + var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.StartLocat); + //鑾峰彇绉诲簱浠籨鍔″搴旂洰鏍囧偍浣嶄俊鎭� + SysStorageLocat endlocat = new SysStorageLocat(); + if (task.Type == "2") + { + endlocat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.EndLocat); + if (endlocat == null) + { + throw new Exception("鏈煡璇㈠埌鐩爣鍌ㄤ綅淇℃伅"); + } + } + if (locat == null) + { + Db.RollbackTran(); + throw new Exception("鏈煡璇㈠埌鍌ㄤ綅淇℃伅锛岃鏍稿疄锛�"); + } + locat.Status = "1"; //鏈夌墿鍝� + Db.Updateable(locat).ExecuteCommand(); + if (endlocat != null) + { + endlocat.Status = "0"; //绌哄偍浣� 0 + Db.Updateable(endlocat).ExecuteCommand(); + } + //淇敼浠诲姟 task.IsSuccess = 1; task.IsSend = 0; @@ -2009,21 +2804,10 @@ noticeDetail.FactQty -= item.Qty; //淇敼鍑哄簱鍗曟槑缁嗙殑涓嬫灦鏁伴噺 Db.Updateable(noticeDetail).ExecuteCommand(); - //鑾峰彇鍌ㄤ綅淇℃伅 - var locat = Db.Queryable<SysStorageLocat>().First(a => a.IsDel == "0" && a.WareHouseNo == "W01" && a.LocatNo == task.StartLocat); - - if (locat == null) - { - Db.RollbackTran(); - throw new Exception("鏈煡璇㈠埌鍌ㄤ綅淇℃伅锛岃鏍稿疄锛�"); - } - locat.Status = "1"; //鏈夌墿鍝� - Db.Updateable(locat).ExecuteCommand(); - if (noticeDetail.FactQty == 0) { var noticeDetail2 = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo && m.Id != noticeDetail.Id).ToList(); - var num = noticeDetail2.Count(m => m.FactQty>0); + var num = noticeDetail2.Count(m => m.FactQty > 0); //鍒ゆ柇鍑哄簱鍗曠殑鎵�鏈夋槑缁嗘槸鍚﹂兘涓�0锛涘鏋滀负0鍙樻洿鍑哄簱鍗曠姸鎬佷负宸插垎閰� if (num == 0) { @@ -2049,7 +2833,7 @@ //淇敼搴撳瓨鏄庣粏 stockDetail.LockQty -= stockDetail.Qty; //閿佸畾鏁伴噺 stockDetail.Status = "0"; //搴撳瓨鐘舵�� 0锛氬緟鍒嗛厤 - + //淇敼搴撳瓨鎬昏〃 datastock.LockQty -= (int)stockDetail.Qty; //閿佸畾鏁伴噺 @@ -2067,13 +2851,13 @@ Db.Updateable(locate).ExecuteCommand(); } - + } else { Db.Updateable(allot).ExecuteCommand(); } - + //娣诲姞鎿嶄綔鏃ュ織璁板綍 var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鏃ュ織", taskNo, "鍙栨秷", $"鐐瑰嚮鍙栨秷鎸夐挳銆佸彇娑堜簡浠诲姟鍙蜂负锛歿taskNo}鐨勪换鍔�", (int)userId); Db.CommitTran(); @@ -2100,7 +2884,7 @@ try { // 鍒ゆ柇褰撳墠浠诲姟鐘舵�� Status 1:姝e湪鎵ц 3:寮傚父缁撴潫 - var taskModel = Db.Queryable<LogTask>().First(m => m.TaskNo == model.TaskNo && m.IsDel == "0" && m.Status == "1"); + var taskModel = Db.Queryable<LogTask>().First(m => m.TaskNo == model.TaskNo && m.IsDel == "0" && m.Status == "1"); if (taskModel == null) { throw new Exception("姝や换鍔′笉瀛樺湪鎴栦换鍔$姸鎬佸凡鍙樻洿!"); @@ -2140,7 +2924,15 @@ // 鍑哄簱鎬昏〃 鐘舵�佹敼涓洪儴鍒嗗垎閰� var noticeModel = Db.Queryable<BllExportNotice>().First(m => m.SONo == noticeDetailModel.SONo && m.IsDel == "0"); - noticeModel.Status = "1"; + if (noticeDetailModel.AllotQty<=0) + { + noticeModel.Status = "0"; + } + else + { + noticeModel.Status = "1"; + } + Db.Updateable(noticeModel).ExecuteCommand(); // 搴撳瓨鏄庣粏琛� 鐘舵�佷慨鏀逛负寮傚父閿佸畾 閿佸畾鏁伴噺淇敼涓烘墭鐩樹笂鏁伴噺 @@ -2154,7 +2946,7 @@ // 搴撳瓨鎬昏〃 閿佸畾鏁伴噺=褰撳墠閿佸畾鏁伴噺 + (搴撳瓨鏄庣粏鎵樼洏涓婃暟閲�-搴撳瓨鏄庣粏鎵樼洏涓婂凡閿佸畾鐨勬暟閲�) var stockModel = Db.Queryable<DataStock>().First(m => m.LotNo == stockDetailModel.LotNo && m.SkuNo == stockDetailModel.SkuNo && m.IsDel == "0"); - stockModel.LockQty = stockModel.LockQty + (int)(stockDetailModel.Qty - lockQty); + stockModel.LockQty = stockModel.LockQty + (decimal)(stockDetailModel.Qty - lockQty); Db.Updateable(stockModel).ExecuteCommand(); // 鎷h揣鏄庣粏琛� 鍒犻櫎 @@ -2207,7 +2999,7 @@ } if (notice.Status != "0" && notice.Status != "1") { - throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负绛夊緟鎵ц鎴栭儴鍒嗗垎閰嶆垨鏉ユ簮鏄惁鏄疻MS"); + throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负绛夊緟鎵ц鎴栭儴鍒嗗垎閰�;"); } //鍑哄簱鍗曟槑缁� var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == soNo && (m.AllotQty - m.Qty) <= 0).ToList(); @@ -2242,70 +3034,90 @@ //鍒ゆ柇鍗曞彿鏄惁鎸囧畾鎵规 if (!string.IsNullOrWhiteSpace(detail.LotNo)) { - stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo && m.IsDel == "0").ToList(); + if (detail.LotNo.Contains(";")) + { + var lotNoList = detail.LotNo.Split(";"); + var lotNoList2 = new List<string>(); + + foreach (var lotNoItem in lotNoList) + { + lotNoList2.Add(lotNoItem); + } + stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && lotNoList2.Contains(m.LotNo) && m.IsDel == "0").ToList(); + } + else + { + stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo && m.IsDel == "0").ToList(); + } + } else { - stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && string.IsNullOrWhiteSpace(m.LotNo) && m.IsDel == "0").ToList(); + stockDetail = stockDetail.Where(m => m.SkuNo == detail.SkuNo && m.IsDel == "0" && string.IsNullOrWhiteSpace(m.LotNo)).ToList(); // } if (stockDetail.Count < 1) { throw new Exception("搴撳瓨涓嶈冻,鏃犲彲鍑哄簱搴撳瓨"); } + //0:鎴愬搧鍑哄簱銆�1:棰嗘枡鍑哄簱銆�2:鎶芥鍑哄簱銆�3锛氱墿鏂欏彇鏍峰嚭搴撱��4:涓嶅悎鏍煎搧鍑哄簱銆�5:涓棿鍝佸嚭搴撱��6:浠e偍鍑哄簱銆�7:鍏朵粬鍑哄簱銆�8:瀵勫瓨鍑哄簱 + if (notice.Type == "0" || notice.Type == "1")//鎴愬搧銆佸師杈呮枡鍑哄簱 + { + stockDetail = stockDetail.Where(m => m.InspectStatus == "1").ToList(); + } + else if (notice.Type == "3")//鍙栨牱鍑哄簱 + { + stockDetail = stockDetail.Where(m => m.InspectStatus == "0").ToList(); + } + else if (notice.Type == "5" || notice.Type == "6" || notice.Type == "7" || notice.Type == "8") + { + stockDetail = stockDetail.Where(m => m.InspectStatus == "0" || m.InspectStatus == "1").ToList(); + } + else if (notice.Type == "4")//涓嶅悎鏍煎嚭搴� + { + stockDetail = stockDetail.Where(m => m.InspectStatus == "2").ToList(); + } - //if (notice.Type == "0" || notice.Type == "1")//鎴愬搧銆佸師杈呮枡鍑哄簱 - //{ - stockDetail = stockDetail.Where(m => m.InspectStatus == "1").ToList(); - //} - //else if (notice.Type == "2" || notice.Type == "3")//鎴愬搧銆佸師杈呮枡鍑哄簱(涓嶅悎鏍�) - //{ - // stockDetail = stockDetail.Where(m => m.InspectStatus == "2").ToList(); - //} - //else if (notice.Type == "4")//鍙栨牱鍑哄簱 - //{ - // stockDetail = stockDetail.Where(m => m.InspectStatus == "0").ToList(); - //} - //灏嗗簱瀛樻槑缁嗘寜娣卞害杩涜鎺掑簭 娣卞害1鍦ㄥ墠 娣卞害2鍦ㄥ悗 - //stockDetail = stockDetail.OrderBy(d => int.Parse(d.LocatNo.Substring(6, 2))).ToList(); #region 鍖呰淇℃伅 var pack = packList.FirstOrDefault(p => p.PackagNo == detail.PackagNo); - if (pack == null) - { - throw new Exception("鏈煡璇㈠埌鐗╂枡鍖呰"); - } var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺 var bNum = 0;//绠辩墿鍝佹暟閲� - if (pack.L5Num.HasValue) + if (pack != null) { - pNum = Convert.ToInt32(pack.L5Num); - bNum = Convert.ToInt32(pack.L4Num); + //throw new Exception("鏈煡璇㈠埌鐗╂枡鍖呰"); + if (pack.L5Num.HasValue) + { + pNum = Convert.ToInt32(pack.L5Num); + bNum = Convert.ToInt32(pack.L4Num); + } + else if (pack.L4Num.HasValue) + { + pNum = Convert.ToInt32(pack.L4Num); + bNum = Convert.ToInt32(pack.L3Num); + } + else if (pack.L3Num.HasValue) + { + pNum = Convert.ToInt32(pack.L3Num); + bNum = Convert.ToInt32(pack.L2Num); + } + else if (pack.L2Num.HasValue) + { + pNum = Convert.ToInt32(pack.L2Num); + bNum = Convert.ToInt32(pack.L1Num); + } + else if (pack.L1Num.HasValue) + { + pNum = Convert.ToInt32(pack.L1Num); + bNum = Convert.ToInt32(pack.L1Num); + } } - else if (pack.L4Num.HasValue) - { - pNum = Convert.ToInt32(pack.L4Num); - bNum = Convert.ToInt32(pack.L3Num); - } - else if (pack.L3Num.HasValue) - { - pNum = Convert.ToInt32(pack.L3Num); - bNum = Convert.ToInt32(pack.L2Num); - } - else if (pack.L2Num.HasValue) - { - pNum = Convert.ToInt32(pack.L2Num); - bNum = Convert.ToInt32(pack.L1Num); - } - else if (pack.L1Num.HasValue) - { - pNum = Convert.ToInt32(pack.L1Num); - bNum = Convert.ToInt32(pack.L1Num); - } - if (pNum == 0) - { - throw new Exception("鏈煡璇㈠埌鐗╂枡鍖呰鎵樼鍏崇郴淇℃伅"); - } + + + //if (pNum == 0) + //{ + // throw new Exception("鏈煡璇㈠埌鐗╂枡鍖呰鎵樼鍏崇郴淇℃伅"); + //} #endregion //鍙栧悎閫傚簱瀛樺晢鍝� Dictionary<int, decimal> stockQtyDic = new Dictionary<int, decimal>();//鎵樺嚭搴撶墿鍝佹暟 @@ -2359,6 +3171,22 @@ } var sd = Db.Updateable(s).UpdateColumns(it => new { it.LockQty, it.Status }).ExecuteCommand(); + //if (notice.Type == "1" || notice.Type == "5" || notice.Type == "6" || notice.Type == "7" || notice.Type == "8")//1锛氶鏂欏嚭搴撱�� + //{ + // if (string.IsNullOrWhiteSpace(detail.LotNo)) + // { + // detail.LotNo = s.LotNo; + + // } + // else + // { + // if (!detail.LotNo.Contains(s.LotNo)) + // { + // detail.LotNo += ";" + s.LotNo; + // } + // } + //} + } detail.AllotQty += qty; detail.UpdateUser = userId; @@ -2497,6 +3325,15 @@ d.Status = "0"; d.UpdateUser = userId; d.UpdateTime = DateTime.Now; + + //if (notice.Type == "1" || notice.Type == "5" || notice.Type == "6" || notice.Type == "7" || notice.Type == "8")//1锛氶鏂欏嚭搴撱�� + //{ + // if (d.IsIssueLotNo != "1") + // { + // d.LotNo = ""; + // } + + //} } notice.Status = "0"; notice.UpdateUser = userId; @@ -2565,26 +3402,63 @@ { throw new Exception("鑾峰彇澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗曪紒"); } - if (detail.Status != "0" && detail.Status != "1" && detail.AllotQty >= detail.Qty) - { - throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟鐘舵�佷笉鏄瓑寰呮墽琛屾垨鍒嗛厤涓紒"); - } - if (detail.AllotQty >= detail.Qty) - { - throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟宸插垎閰嶅畬鎴�!"); - } + var notice = Db.Queryable<BllExportNotice>().First(a => a.SONo == detail.SONo); if (notice == null) { throw new Exception("鑾峰彇澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗�!"); } - if (notice.Status == "3" && detail.AllotQty >= detail.Qty || notice.Status == "4" || notice.Status == "5") + if (notice.Type != "1" && notice.Type != "2" && notice.Type != "3") { - throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟鐘舵�佷笉鍏佽!"); + if (detail.Status != "0" && detail.Status != "1" && detail.AllotQty >= detail.Qty) + { + throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟鐘舵�佷笉鏄瓑寰呮墽琛屾垨鍒嗛厤涓紒"); + } + if (detail.AllotQty >= detail.Qty) + { + throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟宸插垎閰嶅畬鎴�!"); + } + + if (notice.Status == "3" && detail.AllotQty >= detail.Qty || notice.Status == "4" || notice.Status == "5") + { + throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟鐘舵�佷笉鍏佽!"); + } + } + string inspectStatus = string.Empty; + switch (notice.Type)//0锛氬師鏂� 1锛氬寘鏉� 2锛氭垚鍝� 3锛氳�楁潗 4锛氬崐鎴愬搧 + { + case "0"://鎴愬搧鍑哄簱 + inspectStatus = "1"; + break; + case "1"://棰嗘枡鍑哄簱 + inspectStatus = "1"; + break; + case "2"://鎶芥鍑哄簱 + inspectStatus = "0,1,2"; + break; + case "3"://鐗╂枡鍙栨牱鍑哄簱 + inspectStatus = "0"; + break; + case "4"://涓嶅悎鏍煎搧鍑哄簱 + inspectStatus = "2"; + break; + case "5"://涓棿鍝佸嚭搴� + inspectStatus = "1"; + break; + case "6"://浠e偍鍑哄簱 + inspectStatus = "0,1,2"; + break; + case "8"://瀵勫瓨鍑哄簱 + inspectStatus = "0,1"; + break; + default: //鍏跺畠鍑哄簱 + inspectStatus = "0,1"; + break; } #endregion Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>() + .AndIF(!string.IsNullOrWhiteSpace(inspectStatus), m => inspectStatus.Contains(m.InspectStatus)) .AndIF(!string.IsNullOrWhiteSpace(houseNo), m => m.WareHouseNo == houseNo) .AndIF(!string.IsNullOrWhiteSpace(roadwayNo), m => m.RoadwayNo == roadwayNo) .AndIF(!string.IsNullOrWhiteSpace(locateNo), m => m.LocatNo == locateNo) @@ -2593,7 +3467,7 @@ m => m.SkuNo.Contains(msg.Trim()) || m.SkuName.Contains(msg.Trim()) || m.LocatNo.Contains(msg.Trim())) - .And(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo &&(m.Status == "0" || m.Status == "1")) + .And(m => m.IsDel == "0" && m.SkuNo == detail.SkuNo && m.LotNo == detail.LotNo && (m.Status == "0" || m.Status == "1")) .ToExpression();//娉ㄦ剰 杩欎竴鍙� 涓嶈兘灏� var list = Db.Queryable<DataStockDetail>().Where(item).Select(a => new StockDetailDto @@ -2609,6 +3483,7 @@ LocatNo = a.LocatNo, RoadwayNo = a.RoadwayNo, PalletNo = a.PalletNo, + Demo = a.Demo, }).ToList(); return list; @@ -2631,39 +3506,48 @@ { throw new Exception("鎿嶄綔澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗曡鎯咃紒"); } - if (detail.AllotQty >= detail.Qty || (detail.Status != "0" && detail.Status != "1")) - { - throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撳崟宸插垎閰嶅畬鎴愶紒"); - } - var notice = Db.Queryable<BllExportNotice>().First(a => a.IsDel =="0" && a.SONo == detail.SONo); + var notice = Db.Queryable<BllExportNotice>().First(a => a.IsDel == "0" && a.SONo == detail.SONo); if (notice == null) { throw new Exception("鎿嶄綔澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗曪紒"); } - if (notice.Status == "3" && detail.AllotQty >= detail.Qty || notice.Status == "4" || notice.Status == "5") + if (notice.Type != "1" && notice.Type != "2" && notice.Type !="3") { - throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撳崟宸插垎閰嶅畬鎴愶紒"); + if (detail.AllotQty >= detail.Qty || (detail.Status != "0" && detail.Status != "1")) + { + throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撳崟宸插垎閰嶅畬鎴愶紒"); + } + + if (notice.Status == "3" && detail.AllotQty >= detail.Qty || notice.Status == "4" || notice.Status == "5") + { + throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撳崟宸插垎閰嶅畬鎴愶紒"); + } + + //鍗曟嵁鏄庣粏闇�瑕佺殑鍑哄簱鏁伴噺 + var needQty = detail.Qty - detail.AllotQty; + //鍒嗛厤鐨勫嚭搴撴暟閲� + var outQty = model.StockList.Select(s => s.Qty).ToList().Sum(); + if (outQty < needQty) + { + throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撴暟閲忎笉鑳藉ぇ浜庤鍒掓暟閲忥紒"); + } } + #endregion - //鍗曟嵁鏄庣粏闇�瑕佺殑鍑哄簱鏁伴噺 - var needQty = detail.Qty - detail.AllotQty; - //鍒嗛厤鐨勫嚭搴撴暟閲� - var outQty = model.StockList.Select(s => s.Qty).ToList().Sum(); - if (outQty != needQty) - { - throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撴暟閲忎笌璁″垝鏁伴噺涓嶄竴鑷达紒"); - } + var stockIds = model.StockList.Select(a => a.StockId).ToList(); //搴撳瓨鏄庣粏 var stockList = Db.Queryable<DataStockDetail>().Where(a => stockIds.Contains(a.Id)).ToList(); + //鍒嗛厤淇℃伅 + var allots = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && m.SODetailNo == detail.Id && m.Status == "0").ToList(); //搴撳瓨鎬昏〃 - //var stockz = Db.Queryable<DataStock>().First(d => d.IsDel == "0" && d.SkuNo == detail.SkuNo && d.LotNo == detail.LotNo); + var stockz = Db.Queryable<DataStock>().First(d => d.IsDel == "0" && d.SkuNo == detail.SkuNo && d.LotNo == detail.LotNo); var allotList = new List<BllExportAllot>(); - var outQtys = 0; + decimal outQtys = 0; foreach (var st in model.StockList) { var stock = stockList.First(a => a.Id == st.StockId); @@ -2671,45 +3555,57 @@ { throw new Exception("鎿嶄綔澶辫触锛岄儴鍒嗗偍浣嶅簱瀛樺紓甯革紒"); } - if (st.Qty > (stock.Qty-stock.LockQty-stock.FrozenQty -stock.InspectQty)) + if (st.Qty > (stock.Qty - stock.LockQty - stock.FrozenQty)) // 杈撳叆鐨勬暟閲� - 鎵樼洏涓婂彲鐢ㄧ殑鏁伴噺锛堟墭鐩樹笂鏁伴噺-閿佸畾鐨勬暟閲�-鍐荤粨鐨勬暟閲忥級 { throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撴暟閲忚秴鍑哄簱瀛樻暟閲忥紒"); } - //娣诲姞鍒嗛厤琛ㄤ俊鎭� - var allot = new BllExportAllot - { - SONo = notice.SONo, - WaveNo = "", - SODetailNo = detail.Id, - StockId = st.StockId, - LotNo = stock.LotNo, - LotText = stock.LotText, - SupplierLot = stock.SupplierLot, - SkuNo = stock.SkuNo, - SkuName = stock.SkuName, - Standard = stock.Standard, - PalletNo = stock.PalletNo, - IsBale = stock.IsBale, - IsBelt = stock.IsBelt, - Qty = st.Qty, - CompleteQty = 0, - Status = "0", - LogisticsId = notice.LogisticsId, - IsAdvance = "0", - OutMode = "",//鍑哄簱鍙� - CreateUser = userId, - CreateTime = DateTime.Now - }; - allotList.Add(allot); + var bl = allots.FirstOrDefault(m => m.StockId == st.StockId); + if (bl == null) + { + //娣诲姞鍒嗛厤琛ㄤ俊鎭� + var allot = new BllExportAllot + { + SONo = notice.SONo, + WaveNo = "", + SODetailNo = detail.Id, + StockId = st.StockId, + LotNo = stock.LotNo, + LotText = stock.LotText, + SupplierLot = stock.SupplierLot, + SkuNo = stock.SkuNo, + SkuName = stock.SkuName, + Standard = stock.Standard, + PalletNo = stock.PalletNo, + IsBale = stock.IsBale, + IsBelt = stock.IsBelt, + Qty = st.Qty, + CompleteQty = 0, + Status = notice.Status == "4"? "2":"0", + LogisticsId = notice.LogisticsId, + IsAdvance = "0", + OutMode = "",//鍑哄簱鍙� + + CreateUser = userId, + CreateTime = DateTime.Now + }; + allotList.Add(allot); + } + else + { + bl.Qty += st.Qty; + Db.Updateable(bl).ExecuteCommand(); + } + //搴撳瓨鏄庣粏 stock.LockQty += st.Qty; stock.Status = stock.LockQty == stock.Qty ? "2" : "1"; - - //搴撳瓨鎬昏〃 - //stockz.LockQty += st.Qty; - //Db.Updateable(stockz).ExecuteCommand(); - + if (detail.AllotQty+ st.Qty > detail.Qty) + { + //搴撳瓨鎬昏〃 + stockz.LockQty += (decimal)detail.AllotQty + st.Qty - detail.Qty; + Db.Updateable(stockz).ExecuteCommand(); + } Db.Updateable(stock).UpdateColumns(it => new { it.LockQty, it.Status }).ExecuteCommand(); outQtys += st.Qty; @@ -2735,14 +3631,14 @@ foreach (var item in detailList) { totalQty += item.Qty; - totalAllotQty += Convert.ToInt32(item.AllotQty); + totalAllotQty += Convert.ToDecimal(item.AllotQty); } if (totalAllotQty >= totalQty) { notice.Status = "2";//璇佹槑鍒嗛厤鏁伴噺澶т簬绛変簬鍑哄簱鏁伴噺 淇敼涓哄凡鍒嗛厤 } - else if (totalAllotQty< totalQty && totalAllotQty>0) + else if (totalAllotQty < totalQty && totalAllotQty > 0) { notice.Status = "1";//璇佹槑鍒嗛厤鏁伴噺灏忎簬绛変簬鍑哄簱鏁伴噺 淇敼涓洪儴鍒嗗垎閰� } @@ -2785,7 +3681,7 @@ //鐗╂枡缂栫爜琛� var skuList = Db.Queryable<SysMaterials>().Where(w => w.IsDel == "0"); //鍖呰琛� - var packagList= Db.Queryable<SysPackag>().Where(w => w.IsDel == "0"); + var packagList = Db.Queryable<SysPackag>().Where(w => w.IsDel == "0"); //鍑哄簱鍒嗛厤淇℃伅 var allotList = Db.Queryable<BllExportAllot>().Where(w => w.IsDel == "0" && w.SONo == soNo).ToList(); foreach (var item in allotList) @@ -2808,6 +3704,12 @@ break; } } + var boxInfo = Db.Queryable<DataBoxInfo>().Where(w => w.IsDel == "0" && w.PalletNo == item.PalletNo && w.BitBoxMark == "1").ToList(); + if (boxInfo.Count>0)//鎵樼洏涓婃湁闆剁闇�瑕佹媶绠� + { + result = "1";//闇�瑕佹媶绠� + break; + } } return result; } @@ -2816,5 +3718,335 @@ throw new Exception(ex.Message); } } + + /// <summary> + /// 鑾峰彇绉诲簱鐩爣搴撲綅 + /// </summary> + /// <param name="oldAddress">闇�瑕佺Щ鍔ㄧ殑搴撲綅鍦板潃</param> + /// <param name="roadWay">宸烽亾</param> + /// <param name="skuNo">鐗╂枡缂栫爜</param> + /// <returns>鐩爣搴撲綅鍦板潃 涓�"" 鐩存帴涓嬪彂涓ゆ鍑哄簱鎸囦护</returns> + public string MoveAddress(string oldAddress, string roadWay, string skuNo)//01020201 鎺�-鍒�-灞�-娣卞害 + { + string nowAddress = ""; + + //鏍规嵁鐗╂枡缂栫爜鑾峰彇瀵瑰簲鍖哄煙 + var skuCategoryNo = Db.Queryable<SysMaterials>().Where(a => a.IsDel == "0" && a.SkuNo == skuNo).Select(a => a.CategoryNo).First(); + var category = Db.Queryable<SysMaterialCategory>().First(a => a.IsDel == "0" && a.CategoryNo == skuCategoryNo); + + // 鑾峰彇绉诲簱鐩爣鍌ㄤ綅 + var row = int.Parse(oldAddress.Substring(0, 2)); + var lie = int.Parse(oldAddress.Substring(2, 2)); + var ceng = int.Parse(oldAddress.Substring(4, 2)); + + var sqlString = $@"select LocatNo,[Row],[Column],Layer, (ABS(Row-{row}) + ABS([Column]-{lie}) + ABS(Layer-{ceng})) as distNum from SysStorageLocat where Flag = '0' and Status = '0' and Depth = '02' and RoadwayNo = '{roadWay}' and AreaNo in ('{category.AreaNo}') order by distNum;"; + + var addressModels = Db.Ado.SqlQuery<AddressCls>(sqlString).ToList(); + if (addressModels.Count > 0) // 鍒ゆ柇鍚屽贩閬撳唴鎺掔┖搴撲綅 + { + var listLocaete = new List<string>(); + foreach (var item in addressModels) + { + // 鐩爣鍐呭簱浣嶅搴旂殑澶栧簱浣� + string addressee = item.LocatNo.Substring(0, 6) + "01"; + + // 鍒ゆ柇鐩爣搴撲綅鐨勫搴撲綅鏄惁瀛樺湪璐х墿 (姝e父鎯呭喌涓嬫鍦ㄧЩ鍏ユ儏鍐典笉瀛樺湪锛屽洜涓虹Щ搴撳厛绉诲叆閲岄潰锛屽悗绉诲叆澶栭潰) + //SlotStatus 0: 绌哄偍浣� 1锛氭湁璐� 2锛氭鍦ㄥ叆搴� 3锛氭鍦ㄥ嚭搴� 4锛氭鍦ㄧЩ鍏� 5锛氭鍦ㄧЩ鍑� + sqlString = $"select count(*) from SysStorageLocat where LocatNo = '{addressee}' and Status = '0' and Flag in ('0','1') ; "; + var rowNum = Db.Ado.SqlQuery<int>(sqlString).First(); + if (rowNum == 0) + { + continue; + } + else + { + nowAddress = item.LocatNo; + break; + } + } + } + if (nowAddress == "") + { + // 鍒ゆ柇鍚屽贩閬撳鎺掔┖搴撲綅 + sqlString = $@"select LocatNo,[Row],[Column],Layer, (ABS(Row-{row}) + ABS([Column]-{lie}) + ABS(Layer-{ceng})) as distNum + from SysStorageLocat + where Flag = '0' and Status = '0' and Depth = '01' and RoadwayNo = '{roadWay}' and AreaNo in '{category}' + order by distNum;"; + var adderModeling = Db.Ado.SqlQuery<AddressCls>(sqlString).ToList(); + if (adderModeling.Count > 0) + { + nowAddress = adderModeling[0].LocatNo; + } + else + { + // 搴撳唴涓嶅瓨鍦ㄧ┖鍌ㄤ綅 + nowAddress = ""; + } + } + + + return nowAddress; + } + + /// <summary> + /// 鑾峰彇鎷嗗灈鎵樼洏鎷嗗灈淇℃伅 + /// </summary> + /// <param name="model">鎷嗗灈鎵樼洏鍙峰拰WCS浠诲姟鍙�</param> + /// <returns>鎷嗗灈鎵樼洏淇℃伅</returns> + public RequestBoxInfoCheck BoxInfoCheckWcs (BoxInfoCheck model) + { + try + { + // 鍒ゆ柇褰撳墠浠诲姟鐘舵�� Status 1:姝e湪鎵ц 3:寮傚父缁撴潫 + var taskModel = Db.Queryable<LogTask>().First(m => m.TaskNo == model.TaskNo && m.IsDel == "0" ); + if (taskModel == null) + { + throw new Exception("姝や换鍔′笉瀛樺湪鎴栦换鍔$姸鎬佸凡鍙樻洿!"); + } + // 楠岃瘉鎵樼洏鍒嗛厤淇℃伅 + var palletBindModel = Db.Queryable<BllExportAllot>().First(m => m.PalletNo == model.PalletNo && m.TaskNo == model.TaskNo && m.IsDel == "0" && m.Status == "2"); + if (palletBindModel == null) + { + throw new Exception("鏈壘鍒板綋鍓嶆墭鐩樺垎閰嶄换鍔′俊鎭�!"); + } + //璁$畻褰撳墠褰撳墠鎵樼洏涓婄鏁板拰鎷嗗灈绠辨暟 + var storcklist = Db.Queryable<DataStockDetail>().First(m => m.PalletNo == palletBindModel.PalletNo && m.SkuNo == palletBindModel.SkuNo && m.LotNo == palletBindModel.LotNo); + + string level = "1"; + int qty = 0, qtycount = 0; + var packlist = Db.Queryable<SysPackag>().First(m => m.PackagNo == palletBindModel.SkuNo && m.IsDel == "0"); + if (packlist.L2Name == "绠�") + { + level = "2"; + } + switch (level) + { + case "1": + qty = (int)(palletBindModel.Qty / packlist.L1Num); + qtycount = (int)(storcklist.Qty / packlist.L1Num); + break; + case "2": + qty = (int)(palletBindModel.Qty / packlist.L2Num); + qtycount = (int)(storcklist.Qty / packlist.L2Num); + break; + + } + + var list = new RequestBoxInfoCheck + { + PalletNo = model.PalletNo, + TaskNo = model.TaskNo, + SkuNo = palletBindModel.SkuNo, + SkuName = palletBindModel.SkuName, + LotNo = palletBindModel.LotNo, + OrderNo = palletBindModel.SONo, + Standard = palletBindModel.Standard, + Qty = qty,//鎷嗗灈绠辨暟 + QtyCount = qtycount //鎵樼洏涓婄鏁� + }; + return list; + } + catch (Exception e) + { + + throw new Exception(e.Message); + } + } + + /// <summary> + /// 鎷嗗灈鍒嗘嫞涓绘壂绠辩爜鍑哄簱 + /// </summary> + /// <param name="model">绠卞彿</param> + /// <returns>鍑哄簱鍒嗘嫞鍙�</returns> + public string BoxInfoExportWcs(string boxno) + { + try + { + if (string.IsNullOrWhiteSpace(boxno)) + { + throw new Exception("涓绘壂鍒嗘嫞绠辩爜涓虹┖"); + } + //绠辩爜鎵�鍦ㄦ媶鍨涙嫞璐т俊鎭� + var boxModel = Db.Queryable<DataBoxInfo>().First(m=>m.BoxNo == boxno); + if (boxModel == null) + { + throw new Exception("鏈煡璇㈠埌璇ョ鐮佺殑淇℃伅"); + } + //鍑哄簱鍒嗛厤淇℃伅 + var allot = Db.Queryable<BllExportAllot>().First(m => + m.IsDel == "0" && (m.Status == "2" || m.Status == "3") && m.PalletNo == boxModel.PalletNo); + if (allot == null) + { + throw new Exception("鏈煡璇㈠埌璇ユ墭鐩樼殑鍒嗛厤淇℃伅"); + } + //鍑哄簱鍗� + var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == allot.SONo); + if (notice == null) + { + throw new Exception("鏈煡璇㈠埌璇ュ嚭搴撳崟鐨勪俊鎭�"); + } + //鍑哄簱鍗曟槑缁� + var noticeDetail = Db.Queryable<BllExportNoticeDetail>() + .First(m => m.IsDel == "0" && m.Id == allot.SODetailNo); + if (noticeDetail == null) + { + throw new Exception("鏈煡璇㈠埌璇ュ嚭搴撳崟鏄庣粏鐨勪俊鎭�"); + } + + //鍓╀綑鎷h揣鏁伴噺锛堝緟鎷e噺鍘诲凡鎷o級 + var needQty = allot.Qty - allot.CompleteQty; + + //搴撳瓨鏄庣粏 + var stockDetail = Db.Queryable<DataStockDetail>().First(m => m.IsDel == "0" && m.Id == allot.StockId); + if (stockDetail == null) + { + throw new Exception("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨鏄庣粏淇℃伅锛�"); + } + //搴撳瓨鎬昏〃 + var stock = Db.Queryable<DataStock>().First(a => a.IsDel == "0" && a.SkuNo == stockDetail.SkuNo && a.LotNo == stockDetail.LotNo); + if (stock == null) + { + throw new Exception("鏈煡璇㈠埌璇ユ墭鐩樺垎閰嶇殑搴撳瓨淇℃伅锛�"); + } + + List<DataBoxInfo> boxInfos; + var boxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0" && m.BoxNo == boxno && m.StockDetailId == stockDetail.Id); + if (boxInfo.Count() == 0) + { + throw new Exception("鏈煡璇㈠埌璇ョ鐮佸強杩芥函鐮佺殑淇℃伅"); + } + boxInfos = boxInfo.ToList(); + + var comDetailList = Db.Queryable<BllCompleteDetail>().Where(m => m.IsDel == "0" && m.ExportAllotId == allot.Id && m.PalletNo == boxModel.PalletNo).ToList(); + if (boxInfo.Count() == 0) + { + throw new Exception("鏈煡璇㈠埌璇ョ鐮佺殑淇℃伅"); + } + if (boxInfo.Any(m => m.PalletNo != boxModel.PalletNo)) + { + throw new Exception("璇ユ墭鐩樹笌绠辩爜娌℃湁缁戝畾鍏崇郴"); + } + var boxQty = boxInfo.GroupBy(m => m.BoxNo).Select(m => SqlFunc.AggregateSum(m.Qty)).ToList(); + if (boxQty[0] > needQty) + { + throw new Exception("鎷h揣鏁伴噺涓嶈兘澶т簬绠卞唴鍓╀綑寰呮嫞鏁伴噺"); + } + decimal pickQty = 0;//鎷h揣鐨勬暟閲� + Db.BeginTran(); + var comList = new List<BllCompleteDetail>(); + foreach (var item in boxInfos) + { + //娣诲姞鎷h揣鏄庣粏 + var completeDetail = new BllCompleteDetail() + { + SONo = allot.SONo, + SODetailNo = allot.SODetailNo, + 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 = boxModel.PalletNo, + CompleteQty = item.Qty, + + }; + comList.Add(completeDetail); + + + pickQty += item.Qty; + //鍒犻櫎搴撳瓨绠辩爜鏄庣粏 + Db.Deleteable(item).ExecuteCommand(); + } + + Db.Insertable(comList).ExecuteCommand(); + //淇敼鍑哄簱鍒嗛厤淇℃伅 + allot.CompleteQty += pickQty; + allot.Status = allot.Qty == allot.CompleteQty ? "5" : "3"; + allot.UpdateTime = DateTime.Now; + if (allot.Status == "5") + { + //鍒ゆ柇璇ユ墭鐩樻槸鍚﹁繕瀛樺湪鐗╂枡 瀛樺湪鏀逛负寰呭洖搴� 寰呭洖搴撳畬鎴愬悗鏀逛负宸插畬鎴� + } + Db.Updateable(allot).ExecuteCommand(); + + //鍒犻櫎鎴栦慨鏀瑰簱瀛樻槑缁� + stockDetail.BitPalletMark = "1";//淇敼涓洪浂鎵樻爣璇� + stockDetail.Qty -= pickQty; + stockDetail.LockQty -= pickQty; + if (stockDetail.Qty == stockDetail.LockQty) + { + stockDetail.Status = "2"; + } + else if (stockDetail.Qty > stockDetail.LockQty && stockDetail.LockQty > 0) + { + stockDetail.Status = "1"; + } + else + { + stockDetail.Status = "0"; + } + + if (stockDetail.Qty <= 0) + { + Db.Deleteable(stockDetail).ExecuteCommand(); + } + else + { + Db.Updateable(stockDetail).ExecuteCommand(); + } + stock.Qty -= pickQty; + stock.LockQty -= pickQty; + if (stock.Qty <= 0) + { + Db.Deleteable(stock).ExecuteCommand(); + } + else + { + Db.Updateable(stock).ExecuteCommand(); + } + var num2 = Db.Queryable<DataStockDetail>().Count(m => m.IsDel == "0" && m.PalletNo == boxModel.PalletNo); + if (num2 <= 0) + { + //鏀瑰彉鎵樼洏鐘舵�� + var pallet = Db.Queryable<SysPallets>().First(m => m.PalletNo == boxModel.PalletNo && m.IsDel == "0"); + if (pallet == null) + { + throw new Exception("鏈湪鎵樼洏琛ㄤ腑鏌ヨ鍒版墭鐩樹俊鎭�"); + } + pallet.Status = "0"; + Db.Updateable(pallet).ExecuteCommand(); + } + //淇敼鍑哄簱鍗曟槑缁嗘嫞璐ф暟閲� + noticeDetail.CompleteQty += pickQty; + noticeDetail.Status = "2"; + Db.Updateable(noticeDetail).ExecuteCommand(); + + var num = Db.Queryable<BllExportNoticeDetail>() + .Count(m => m.IsDel == "0" && m.SONo == allot.SONo && m.CompleteQty < m.Qty); + if (num <= 0) + { + notice.Status = "4"; //鏇存敼涓烘墽琛屽畬鎴� + + noticeDetail.Status = "3"; + Db.Updateable(noticeDetail).ExecuteCommand(); + } + //淇敼鍑哄簱鍗曚俊鎭� + Db.Updateable(notice).ExecuteCommand(); + Db.CommitTran(); + return allot.LoadingAddre; + } + catch (Exception e) + { + Db.RollbackTran(); + throw new Exception(e.Message); + } + } } } -- Gitblit v1.8.0