From 48df8080d7befac9fff4f5345750699c592512f6 Mon Sep 17 00:00:00 2001 From: chengsc <11752@DESKTOP-DS49RCP> Date: 星期三, 07 五月 2025 08:21:28 +0800 Subject: [PATCH] 修改问题 --- Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs | 3405 ++++++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 2,320 insertions(+), 1,085 deletions(-) diff --git a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs index 230ca96..88bb8bb 100644 --- a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs +++ b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs @@ -26,12 +26,17 @@ using System.Runtime.Intrinsics.X86; using ZXing.OneD; using System.Threading.Tasks; +using System.Diagnostics; +using System.Drawing.Drawing2D; +using Model.ModelDto.LogDto; +using AutoMapper.Internal; namespace WMS.BLL.BllSoServer { public class ExportNoticeServer : DbHelper<BllExportNotice>, IExportNoticeServer { private static readonly SqlSugarScope Db = DataContext.Db; + private readonly object IssueOutLock = new object(); public ExportNoticeServer() : base(Db) { } @@ -812,6 +817,8 @@ #endregion + #region JC34 + #region 鍩虹鍔熻兘 public async Task<List<ExportNoticeDto>> GetExportNoticeList(GetExportNoticeVm model, RefAsync<int> count) @@ -839,12 +846,14 @@ .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<SysWareHouse>((a, b, c, d, e,f) => a.WareHouseNo == f.WareHouseNo) + .Select((a, b, c, d, e,f) => new ExportNoticeDto() { Id = a.Id, SONo = a.SONo, Type = a.Type, Status = a.Status, + WareHouseName = f.WareHouseName, Origin = a.Origin, CustomerNo = a.CustomerNo, CustomerName = a.CustomerName, @@ -873,10 +882,14 @@ } //鑾峰彇娣诲姞/缂栬緫鍑哄簱鍗曟椂閫夋嫨鐗╂枡鏄庣粏淇℃伅 - public List<ExStockInfoDto> GetStockGroupList(string type, string ownerNo, string msg) + public List<ExStockInfoDto> GetStockGroupList(string house, string type, string ownerNo, string msg) { try { + if (string.IsNullOrEmpty(house)) + { + throw new Exception("璇烽�夋嫨鍑哄簱浠撳簱"); + } if (string.IsNullOrEmpty(type)) { throw new Exception("璇烽�夋嫨鍑哄簱鍗曠被鍨�"); @@ -893,23 +906,52 @@ switch (type)//0锛氬師鏂� 1锛氬寘鏉� 2锛氭垚鍝� 3锛氳�楁潗 4锛氬崐鎴愬搧 { case "0"://鎴愬搧鍑哄簱 + if (house !="W01") + { + throw new Exception("鎴愬搧鍑哄簱鍙兘閫夋嫨鎴愬搧搴�"); + } skuType = "(2)"; inspectStatus = "1"; break; case "1"://棰嗘枡鍑哄簱 + if (house != "W02") + { + throw new Exception("棰嗘枡鍑哄簱鍙兘閫夋嫨鍘熸枡搴�"); + } skuType = "(0,1,3)"; inspectStatus = "1"; break; case "2"://鎶芥鍑哄簱 - skuType = "(0,1,2,3)"; + if (house == "W01") + { + skuType = "(2)"; + } + if (house == "W02") + { + skuType = "(0,1,3)"; + } inspectStatus = "0,1,2"; break; case "3"://鐗╂枡鍙栨牱鍑哄簱 - skuType = "(0,1,2,3)"; + if (house == "W01") + { + skuType = "(2)"; + } + if (house == "W02") + { + skuType = "(0,1,3)"; + } inspectStatus = "0"; break; case "4"://涓嶅悎鏍煎搧鍑哄簱 - skuType = "(0,1,2,3)"; + if (house == "W01") + { + skuType = "(2)"; + } + if (house == "W02") + { + skuType = "(0,1,3)"; + } inspectStatus = "2"; break; case "5"://涓棿鍝佸嚭搴� @@ -920,14 +962,38 @@ skuType = "(2)"; inspectStatus = "0,1"; break; - case "8"://瀵勫瓨鍑哄簱 - skuType = "(0,1,2,3)"; + case "7"://鍏跺畠鍑哄簱 + if (house == "W01") + { + skuType = "(2)"; + } + if (house == "W02") + { + skuType = "(0,1,3,4)"; + } inspectStatus = "0,1"; + break; + case "8"://瀵勫瓨鍑哄簱 + if (house == "W01") + { + skuType = "(2)"; + } + if (house == "W02") + { + skuType = "(0,1,3)"; + } + inspectStatus = "0,1"; + break; + case "9"://鐢熶骇棰嗘枡鍑哄簱 + if (house != "W02") + { + throw new Exception("鐢熶骇棰嗘枡鍑哄簱鍙兘閫夋嫨鍘熸枡搴�"); + } + skuType = "(0,1,3)"; + inspectStatus = "1"; break; default: //鍏跺畠鍑哄簱 - skuType = "(0,1,2,3,4)"; - inspectStatus = "0,1"; - break; + throw new Exception("鍗曟嵁绫诲瀷閿欒"); } var skuList = sku.Where(m => skuType.Contains(m.Type)).ToList(); if (skuList.Count == 0) @@ -937,9 +1003,9 @@ if (type == "6") { - skuList = skuList.Where(m=> string.IsNullOrWhiteSpace(m.PackagNo)).ToList(); + skuList = skuList.Where(m => string.IsNullOrWhiteSpace(m.PackagNo)).ToList(); } - if (type!="8") + if (type != "8") { skuList = skuList.Where(m => m.SkuNo != "100088").ToList(); } @@ -951,7 +1017,7 @@ var stockRst = new StockServer(); var stockDetailRst = new StockDetailServer(); Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>() - //.And(it => it.WareHouseNo == wareHouseNo) + .And(it => it.WareHouseNo == house || string.IsNullOrWhiteSpace(it.LocatNo)) .AndIF(!string.IsNullOrWhiteSpace(inspectStatus), it => inspectStatus.Contains(it.InspectStatus)) .And(m => skuStrList.Contains(m.SkuNo)) .AndIF(type == "6", m => m.OwnerNo == ownerNo)//浠e偍鍑哄簱闇�瑕佸叧鑱旇揣涓� @@ -1035,6 +1101,23 @@ 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(); + switch (model.WareHouseNo) + { + case "W01"://鎴愬搧搴� + if (skuList.Any(m=>m.Type !="2")) + { + throw new Exception("浠撳簱涓庡嚭搴撶墿鏂欎笉绗�"); + } + break; + case "W02"://鍘熸枡搴� + if (skuList.Any(m => m.Type == "2")) + { + throw new Exception("浠撳簱涓庡嚭搴撶墿鏂欎笉绗�"); + } + break; + default: + throw new Exception("浠撳簱鍙烽敊璇�"); + } 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(); //瀹㈡埛淇℃伅 @@ -1068,7 +1151,7 @@ throw new Exception($"鐗╂枡淇℃伅涓湭鏌ヨ鍒板嚭搴撶墿鏂欎俊鎭�:{d.SkuNo}"); } - //0:鎴愬搧鍑哄簱銆�1:棰嗘枡鍑哄簱銆�2:鎶芥鍑哄簱銆�4:涓嶅悎鏍煎搧鍑哄簱銆�6:浠e偍鍑哄簱銆�7:鍏朵粬鍑哄簱銆� ///3锛氱墿鏂欏彇鏍峰嚭搴撱��5:涓棿鍝佸嚭搴撱��8:瀵勫瓨鍑哄簱 + //0:鎴愬搧鍑哄簱銆�1:棰嗘枡鍑哄簱銆�2:鎶芥鍑哄簱銆�4:涓嶅悎鏍煎搧鍑哄簱銆�7:鍏朵粬鍑哄簱銆�9鐢熶骇棰嗘枡鍑哄簱 ///3锛氱墿鏂欏彇鏍峰嚭搴撱��5:涓棿鍝佸嚭搴撱��6:浠e偍鍑哄簱銆�8:瀵勫瓨鍑哄簱 if (model.Type == "0" || model.Type == "2" || model.Type == "4" || model.Type == "7") { if (string.IsNullOrWhiteSpace(d.LotNo)) @@ -1077,20 +1160,20 @@ } } - if (model.Type == "1") - { - if (list.Count(m=>m.SkuNo == d.SkuNo)>=2) - { - throw new Exception("棰嗘枡鍑哄簱鍗曞悓鍗曟嵁鍚岀墿鏂欎笉鍏佽瓒呰繃3涓壒娆℃贩鎵瑰嚭搴�"); - } - } - else - { - if (list.Count(m => m.SkuNo == d.SkuNo) >= 1) - { - throw new Exception("鍑哄簱鍗曞悓鍗曟嵁鍚岀墿鏂欎笉鍏佽瓒呰繃2涓壒娆℃贩鎵瑰嚭搴�"); - } - } + //if (model.Type == "1") + //{ + // if (list.Count(m=>m.SkuNo == d.SkuNo)>=2) + // { + // throw new Exception("棰嗘枡鍑哄簱鍗曞悓鍗曟嵁鍚岀墿鏂欎笉鍏佽瓒呰繃3涓壒娆℃贩鎵瑰嚭搴�"); + // } + //} + //else + //{ + // if (list.Count(m => m.SkuNo == d.SkuNo) >= 1) + // { + // throw new Exception("鍑哄簱鍗曞悓鍗曟嵁鍚岀墿鏂欎笉鍏佽瓒呰繃2涓壒娆℃贩鎵瑰嚭搴�"); + // } + //} //搴撳瓨 List<DataStock> stocks; @@ -1141,7 +1224,7 @@ }; list.Add(item); - + stocks.First().LockQty += d.Qty;//閿佸畾鏁伴噺 var i = Db.Updateable(stocks.First()).UpdateColumns(it => new { it.LockQty }) .ExecuteCommand(); @@ -1167,7 +1250,7 @@ IsWave = "0", WaveNo = "", IsDespatch = "0", - + WareHouseNo = model.WareHouseNo, CreateUser = userId, }; @@ -1218,6 +1301,7 @@ { SoNo = notify.SONo, Type = notify.Type, + WareHouseNo = notify.WareHouseNo, CustomerNo = notify.CustomerNo, LogisticsId = notify.LogisticsId, //ExportWarehouseId = notify.ExportWarehouseId, @@ -1618,10 +1702,10 @@ //鏌ヨ鏀瑰悗鐨勫崟鎹俊鎭� 鍚庢湡鎺ュ彛瀵规帴瀹屽悗闇�鏀瑰姩鍥炰紶鍙傛暟 var detail = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == notice.SONo).Select(m => new SelectStockSkuDto { - LotNo =m.LotNo, + LotNo = m.LotNo, SkuNo = m.SkuNo, SkuName = m.SkuName, - Qty = m.Qty, + Qty = m.Qty, ExQty = decimal.Parse(m.CompleteQty.ToString()), Standard = m.Standard, IsBale = m.IsBale, @@ -2154,6 +2238,2209 @@ } #endregion + + #region 鑷姩鍒嗛厤銆佸彇娑堝垎閰嶃�佽幏鍙栨墜鍔ㄥ垎閰嶇殑鏁版嵁婧愩�佹墜鍔ㄥ垎閰� + + // 鍒ゆ柇鏄惁鏄法鎵瑰嚭搴� + public bool IsCrossLotNo(string soNo) + { + try + { + //鏂规硶杩斿洖缁撴灉锛歜l + var bl = true; + //鏌ヨ鍗曟嵁淇℃伅 + var notice = Db.Queryable<BllExportNotice>().First(m => m.SONo == soNo && m.IsDel == "0"); + //鍒ゆ柇鍗曟嵁绫诲瀷 鎴愬搧鍑哄簱銆侀鏂欏嚭搴擄紙鍏跺畠绫诲瀷璺冲嚭姝ゆ柟娉曪級 + if (notice.Type != "0" && notice.Type != "1") + { + return bl; + } + //鏌ヨ鍒板綋鍓嶅崟鎹笅鐨勫嚭搴撳崟鏄庣粏淇℃伅 + var noticeDetail = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == soNo).ToList(); + //搴撳瓨鎬昏〃淇℃伅 + var data = Db.Queryable<DataStock>().Where(m => m.IsDel == "0").ToList(); + //搴撳瓨鏄庣粏涓楠屽悎鏍兼壒娆¢泦鍚� + var dataDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.InspectStatus == "1").GroupBy(g => g.LotNo).Select(s => s.LotNo).ToList(); + //搴撳瓨鏄庣粏琛ㄤ俊鎭� + var dataBoxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0").ToList(); + + + //寰幆鍗曟嵁鏄庣粏淇℃伅 + foreach (var item in noticeDetail) + { + //楠岃瘉鍏堣繘鍏堝嚭鍘熷垯 + //鑾峰彇褰撳墠鐗╂枡鐨勬墍鏈夋壒娆′俊鎭�(鎺掗櫎鍗曟嵁鐨勬壒娆★紝闃叉鍗曟嵁鎵�鍦ㄦ壒娆¢攣瀹氭暟閲忓悗楠岃瘉灏忎簬绛変簬0) + var forData = data.Where(m => m.SkuNo == item.SkuNo + && m.LotNo != item.LotNo && (m.Qty - m.FrozenQty - m.LockQty) > 0 + && dataDetail.Contains(m.LotNo)).Select(m => m.LotNo).ToList(); + + forData.Add(item.LotNo); //闆嗗悎娣诲姞鍗曟嵁鐨勬壒娆� + //鑾峰彇鎺掑簭鍚庣殑绗竴涓壒娆� + var firstLotNo = forData.OrderBy(m => m).First(); + if (firstLotNo != item.LotNo) + { + bl = false; + break; + } + + //楠岃瘉鏁堟湡浼樺厛鍘熷垯 + var forDataBox = dataBoxInfo.Where(m => m.SkuNo == item.SkuNo && m.LotNo != item.LotNo && m.Qty > 0).ToList(); + //鑾峰彇褰撳墠鍗曟嵁鎵规鐨勬渶杩戞晥鏈� + var expirationTimedt = dataBoxInfo.Where(m => m.SkuNo == item.SkuNo + && m.LotNo == item.LotNo && m.Qty > 0).ToList(); + if (expirationTimedt.Count > 0) + { + var expirationTime = expirationTimedt.OrderBy(m => m.ExpirationTime).Select(m => m.ExpirationTime).First(); + //鑾峰彇搴撳瓨涓叾瀹冩壒娆℃晥鏈熷ぇ浜庡綋鍓嶅崟鎹壒娆$殑鏁堟湡鏁伴噺 + var num = forDataBox.Count(m => m.ExpirationTime > expirationTime); + //鍒ゆ柇鏄惁澶т簬0 + if (num > 0) + { + bl = false; + break; + } + } + else + { + var dataDetailtime = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.InspectStatus == "1"). + Where(m => m.SkuNo == item.SkuNo + && m.LotNo == item.LotNo && m.Qty > 0) + .OrderBy(m => m.ExpirationTime) + .Select(m => m.ExpirationTime).First(); + + var num = forDataBox.Count(m => m.ExpirationTime > dataDetailtime); + //鍒ゆ柇鏄惁澶т簬0 + if (num > 0) + { + bl = false; + break; + } + } + } + + + return bl; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + } + + /// <summary> + /// 鑷姩鍒嗛厤 + /// </summary> + /// <param name="soNo"></param> + /// <param name="userId"></param> + /// <returns></returns> + /// <exception cref="Exception"></exception> + public bool AutoAllot(string soNo, int userId) + { + try + { + #region 鍒ゆ柇鏉′欢锛堝嚭搴撳崟銆佸嚭搴撳崟鏄庣粏锛� + //鍑哄簱鍗� + var notice = Db.Queryable<BllExportNotice>().Where(m => m.IsDel == "0" && m.SONo == soNo).ToList().FirstOrDefault(); + if (notice == null) + { + throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅"); + } + if (notice.Status != "0" && notice.Status != "1") + { + throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负绛夊緟鎵ц鎴栭儴鍒嗗垎閰�;"); + } + //鍑哄簱鍗曟槑缁� + var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == soNo && (m.AllotQty - m.Qty) <= 0).ToList(); + if (!detailList.Any()) + { + throw new Exception("鏈煡璇㈠埌绗﹀悎鍒嗛厤鏉′欢鐨勫嚭搴撳崟鎹槑缁嗕俊鎭�"); + } + + #endregion + + var exAllotList = new List<BllExportAllot>(); + var assign = new AllotSku(); + Db.BeginTran(); + try + { + List<SoDetailInfo> soDetailList = new List<SoDetailInfo>(); + foreach (var detail in detailList) + { + if (detail.AllotQty >= detail.Qty) + { + continue; + } + //杩橀渶瑕佸垎閰嶇殑鏁伴噺 + decimal needQty = detail.Qty - (detail.AllotQty == null ? 0 : decimal.Parse(detail.AllotQty.ToString())); + //搴撳瓨鏄庣粏 Status 0锛氬緟鍒嗛厤 1锛氶儴鍒嗗垎閰� 2锛氬凡鍒嗛厤 + var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == detail.SkuNo && (m.Qty - m.FrozenQty - m.LockQty + m.InspectQty) > 0 && (m.Status == "0" || m.Status == "1") && m.IsDel == "0").ToList(); + + + //鍒ゆ柇鍗曞彿鏄惁鎸囧畾鎵规 + if (!string.IsNullOrWhiteSpace(detail.LotNo)) + { + 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 && m.IsDel == "0" && string.IsNullOrWhiteSpace(m.LotNo)).ToList(); + } + + if (stockDetail.Count < 1) + { + throw new Exception("搴撳瓨涓嶈冻,鏃犲彲鍑哄簱搴撳瓨"); + } + //0:鎴愬搧鍑哄簱銆�1:棰嗘枡鍑哄簱銆�2锛氭娊妫�鍑哄簱銆�4:涓嶅悎鏍煎搧鍑哄簱銆�7:鍏朵粬鍑哄簱銆�9:鐢熶骇棰嗘枡鍑哄簱 ///3:鍙栨牱鍑哄簱銆�5:涓棿鍝佸嚭搴撱��8:瀵勫瓨鍑哄簱 + if (notice.Type == "0" || notice.Type == "1" || notice.Type == "9")//鎴愬搧銆侀鏂欏嚭搴� + { + stockDetail = stockDetail.Where(m => m.InspectStatus == "1").ToList(); + } + else if (notice.Type == "2")//鎶芥鍑哄簱 + { + stockDetail = stockDetail.Where(m => m.InspectStatus == "0" || m.InspectStatus == "1" || m.InspectStatus == "2").ToList(); + } + else if (notice.Type == "4")//涓嶅悎鏍煎嚭搴� + { + stockDetail = stockDetail.Where(m => m.InspectStatus == "2").ToList(); + } + else if (notice.Type == "7") //銆佸叾瀹� + { + stockDetail = stockDetail.Where(m => m.InspectStatus == "0" || m.InspectStatus == "1").ToList(); + } + if (stockDetail.Sum(m => m.Qty - m.LockQty) < needQty) + { + throw new Exception("搴撳瓨鏄庣粏鏁伴噺涓嶈冻"); + } + #region 鍖呰淇℃伅 + + var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺 + var bNum = 0;//绠辩墿鍝佹暟閲� + //鍏叡鏂规硶鑾峰彇鍖呰鏁伴噺 + new Common().GetPackQtyInfo(detail.PackagNo, ref pNum, ref bNum); + + #endregion + + //鍙栧悎閫傚簱瀛樺晢鍝� + Dictionary<int, decimal> stockQtyDic = new Dictionary<int, decimal>();//鎵樺嚭搴撶墿鍝佹暟 + var qty = 0m; + var house = ""; + + //鍒嗛厤璐х墿 + qty += assign.AllotPallets(stockDetail, needQty, pNum, bNum, stockQtyDic, notice.WareHouseNo); + foreach (var sc in stockQtyDic) + { + var s = stockDetail.FirstOrDefault(m => m.Id == sc.Key); + //娣诲姞鍒嗛厤琛ㄤ俊鎭� + var allot = new BllExportAllot + { + SONo = notice.SONo, + WaveNo = "", + SODetailNo = detail.Id, + StockId = sc.Key, + LotNo = s.LotNo, + LotText = s.LotText, + SupplierLot = s.SupplierLot, + SkuNo = s.SkuNo, + SkuName = s.SkuName, + Standard = s.Standard, + PalletNo = s.PalletNo, + IsBale = detail.IsBale == "0" ? "0" : s.IsBale == "1" ? "0" : "1", //鏄惁瑁瑰寘 + IsBelt = detail.IsBelt == "0" ? "0" : s.IsBelt == "1" ? "0" : "1", //鏄惁鎵撳甫 + + Qty = sc.Value, + CompleteQty = 0, + //BoxexQty = s.Qty, //绠卞唴鏁伴噺 + Status = "0", + LogisticsId = notice.LogisticsId, + IsAdvance = "0", + OutMode = "",//鍑哄簱鍙� + + CreateUser = userId, + CreateTime = DateTime.Now + }; + exAllotList.Add(allot); + + s.LockQty += stockQtyDic[s.Id]; + + if (s.LockQty == s.Qty) + { + s.Status = "2"; + } + else + { + s.Status = "1"; + } + + var sd = Db.Updateable(s).UpdateColumns(it => new { it.LockQty, it.Status }).ExecuteCommand(); + + } + detail.AllotQty += qty; + detail.UpdateUser = userId; + detail.UpdateTime = DateTime.Now; + if (detail.Status == "0") + { + detail.Status = "1"; + } + if (qty > detail.Qty) + { + //搴撳瓨鎬昏〃 + var stock = Db.Queryable<DataStock>().First(d => d.IsDel == "0" + && d.SkuNo == detail.SkuNo + && d.LotNo == detail.LotNo); + stock.LockQty += qty - detail.Qty; + Db.Updateable(stock).ExecuteCommand(); + + //娣诲姞鍥炰紶涓婃父绯荤粺閿佸畾鏁伴噺鏇存敼浠g爜 + SoDetailInfo soDetail = new SoDetailInfo(); + soDetail.OrderDetailCode = detail.OrderDetailCode; + soDetail.LockQty = qty - detail.Qty; + soDetail.LotNo = detail.LotNo; + + soDetailList.Add(soDetail); + } + + } + + var mx = Db.Updateable(detailList).ExecuteCommand(); + var fp = Db.Insertable(exAllotList).ExecuteCommand(); + + //淇敼鍒嗛厤鍗曟嵁鐨勭姸鎬� + if (notice.Status == "0" || notice.Status == "1") + { + var bl = 0; + var bl2 = 0; + foreach (var item in detailList) + { + if (item.AllotQty <= 0) + { + continue; + } + if (item.AllotQty < item.Qty) + { + bl = 1; + } + else + { + bl2 = 1; + } + } + + switch (bl2) + { + case 1 when bl == 1: + notice.Status = "1";//璇佹槑閮ㄥ垎鍒嗛厤鏁伴噺鍏ㄩ儴澶т簬绛変簬鍑哄簱鏁伴噺 淇敼涓哄凡鍒嗛厤 + break; + case 0 when bl == 1: + notice.Status = "1";//璇佹槑閮ㄥ垎鍒嗛厤鏁伴噺鍏ㄩ儴澶т簬绛変簬鍑哄簱鏁伴噺 淇敼涓哄凡鍒嗛厤 + break; + case 1 when bl == 0: + notice.Status = "2";//璇佹槑鍒嗛厤鏁伴噺鍏ㄩ儴澶т簬绛変簬鍑哄簱鏁伴噺 淇敼涓哄凡鍒嗛厤 + break; + case 0 when bl == 0: + //璇佹槑鎵�鏈夊垎閰嶆暟閲忓叏閮ㄥ皬浜庣瓑浜庡嚭搴撴暟閲� 涓嶅仛淇敼 + break; + } + + } + notice.UpdateUser = userId; + notice.UpdateTime = DateTime.Now; + var zd = Db.Updateable(notice).ExecuteCommand(); + + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", + notice.SONo, "鍒嗛厤", $"鑷姩鍒嗛厤浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId); + + if (zd > 0 && mx > 0 && fp > 0 && k) + { + #region 閫氳繃鎺ュ彛鍙戦�佽嚦erp + //绯荤粺瀵规帴鍚庢斁寮� + /*var jsonData = JsonConvert.SerializeObject(soDetailList); + + var response = HttpHelper.DoPost(url, jsonData, "搴撳瓨閿佸畾鏁伴噺鍙樻洿", "ERP"); + + var obj = JsonConvert.DeserializeObject<ErpModel>(response);//瑙f瀽杩斿洖鏁版嵁 + if (obj.Success != 0) + { + throw new Exception("涓婁紶澶辫触" + obj.Message); + }*/ + #endregion + + Db.CommitTran(); + return true; + } + Db.RollbackTran(); + return false; + } + catch (Exception e) + { + Db.RollbackTran(); + throw new Exception(e.Message); + } + } + catch (Exception e) + { + throw new Exception("鑷姩鍒嗛厤澶辫触锛�" + e.Message); + } + } + + //鍙栨秷鍒嗛厤 + public bool CancelAllot(string soNo, int userId) + { + try + { + + var notice = Db.Queryable<BllExportNotice>().Where(m => m.IsDel == "0" && m.SONo == soNo).ToList().FirstOrDefault(); + if (notice == null) + { + throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅"); + } + if (notice.Status != "1" && notice.Status != "2") + { + throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负宸插垎閰嶆垨閮ㄥ垎鍒嗛厤鎴栨潵婧愭槸鍚︽槸WMS"); + } + //璇ュ崟鎹殑鍒嗛厤淇℃伅 Status 0锛氫换鍔′笅鍙� 1锛氬緟鎷h揣 2锛氶儴鍒嗘嫞璐� 3锛氬緟鍥炲簱 4锛氬凡瀹屾垚 + var allotList = Db.Queryable<BllExportAllot>().Where(o => o.IsDel == "0" && o.SONo == soNo).ToList(); + //鏈夊凡鎵ц鐨勫垎閰嶆暟鎹笉鑳藉彇娑� + if (allotList.Any(o => o.Status != "0")) + { + throw new Exception("褰撳墠鍗曟嵁鐨勫垎閰嶄俊鎭凡鏈夋墽琛屼腑锛屼笉鑳藉彇娑堝垎閰�"); + } + List<SoDetailInfo> soDetailList = new List<SoDetailInfo>(); + //寮�鍚簨鍔� + Db.BeginTran(); + try + { + //鏌ヨ鍒嗛厤鐨勬槑缁� + var detail = Db.Queryable<BllExportNoticeDetail>().Where(d => d.SONo == soNo && d.AllotQty > 0 && d.IsDel == "0").ToList(); + foreach (var d in detail) + { + var orders = allotList.Where(o => o.SODetailNo == d.Id).ToList(); + foreach (var o in orders) + { + var pq = Db.Queryable<DataStockDetail>().Where(t => t.Id == o.StockId); + + var pq2 = !string.IsNullOrWhiteSpace(o.LotNo) ? pq.Where(t => t.LotNo == o.LotNo).ToList() : pq.Where(t => string.IsNullOrWhiteSpace(t.LotNo)).ToList(); + + var pallet = pq2.FirstOrDefault(); + if (pallet != null) + { + pallet.LockQty -= o.Qty; + pallet.Status = pallet.LockQty == 0 ? "0" : "1"; //濡傛灉閿佸畾鏁伴噺鏄�0鐘舵�佸彉鏇翠负寰呭垎閰� 鍚﹀垯涓洪儴鍒嗗垎閰� + Db.Updateable(pallet).ExecuteCommand(); + + //搴撳瓨鎬昏〃 + //var stock = Db.Queryable<DataStock>().First(t => t.SkuNo == pallet.SkuNo && t.IsDel == "0"); + //stock.LockQty -= o.Qty; + //Db.Updateable(stock).ExecuteCommand(); + } + + } + Db.Deleteable<BllExportAllot>(orders).ExecuteCommand(); + + if (d.AllotQty > d.Qty) + { + //搴撳瓨鎬昏〃 + var stock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo); + stock.LockQty -= (decimal)d.AllotQty - d.Qty; + Db.Updateable(stock).ExecuteCommand(); + + //娣诲姞鍥炰紶涓婃父绯荤粺閿佸畾鏁伴噺鏇存敼浠g爜 + SoDetailInfo soDetail = new SoDetailInfo(); + soDetail.OrderDetailCode = d.OrderDetailCode; + soDetail.LockQty = (decimal)(d.Qty - d.AllotQty); + soDetail.LotNo = d.LotNo; + + soDetailList.Add(soDetail); + } + d.AllotQty = 0; + 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 = ""; + // } + + //} + } + + //鏌ヨ褰撳墠鍗曟嵁鏄惁宸叉坊鍔犲鏂欎换鍔� + if (notice.Type == "1") + { + var task = Db.Queryable<BllExportTimingTask>().First(m => m.IsDel == "0" && m.SoNo == soNo); + if (task != null) + { + task.IsDel = "1"; + task.UpdateUser = userId; + task.UpdateTime = DateTime.Now; + Db.Updateable(task).ExecuteCommand(); + } + } + notice.Status = "0"; + notice.UpdateUser = userId; + notice.UpdateTime = DateTime.Now; + Db.Updateable(detail).ExecuteCommand(); + Db.Updateable(notice).ExecuteCommand(); + + //绯荤粺瀵规帴鍚庢斁寮� + /*var jsonData = JsonConvert.SerializeObject(soDetailList); + + var response = HttpHelper.DoPost(url, jsonData, "搴撳瓨閿佸畾鏁伴噺鍙樻洿", "ERP"); + + var obj = JsonConvert.DeserializeObject<ErpModel>(response);//瑙f瀽杩斿洖鏁版嵁 + if (obj.Success != 0) + { + throw new Exception("涓婁紶澶辫触" + obj.Message); + }*/ + + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "鍙栨秷鍒嗛厤", $"鍙栨秷鍒嗛厤浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId); + Db.CommitTran(); + } + catch (Exception e) + { + Db.RollbackTran(); + throw new Exception(e.Message); + } + return true; + } + catch (Exception e) + { + throw new Exception("鍙栨秷鍒嗛厤澶辫触" + e.Message); + } + } + + /// <summary> + /// 缁存姢鍑哄簱鍗曞娉ㄤ俊鎭� + /// </summary> + /// <param name="id"></param> + /// <param name="demo"></param> + /// <param name="userId"></param> + public void EditNoticeDemo(int id, string demo, int userId) + { + try + { + var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.Id == id); + if (notice == null) + { + throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅"); + } + notice.Demo = demo + "".Trim(); + notice.UpdateUser = userId; + notice.UpdateTime = DateTime.Now; + + int i = Db.Updateable(notice).ExecuteCommand(); + if (i > 0) + { + //娣诲姞鎿嶄綔鏃ュ織 + new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "缂栬緫", $"缂栬緫浜嗗崟鎹彿涓簕notice.SONo}鐨勫娉ㄤ俊鎭�", userId); + } + } + catch (Exception ex) + { + throw new Exception(ex.Message); + } + } + + //鑾峰彇搴撳瓨鏄庣粏淇℃伅锛堝嚭搴撳崟鎵嬪姩鍒嗛厤閫夋嫨鏁版嵁婧愶級 + public List<StockDetailDto> GetHandOutList(int detailId, string houseNo, string roadwayNo, string locateNo, string msg, string palletNo) + { + try + { + var detail = Db.Queryable<BllExportNoticeDetail>().First(d => d.Id == detailId); + + #region 鍒ゆ柇鏉′欢 + + if (detail == null) + { + 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") + { + throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟鐘舵�佷笉鍏佽!"); + } + #endregion + + Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>() + .AndIF(!string.IsNullOrWhiteSpace(houseNo), m => m.WareHouseNo == houseNo) + .AndIF(!string.IsNullOrWhiteSpace(roadwayNo), m => m.RoadwayNo == roadwayNo) + .AndIF(!string.IsNullOrWhiteSpace(locateNo), m => m.LocatNo == locateNo) + .AndIF(!string.IsNullOrWhiteSpace(palletNo), m => m.PalletNo == palletNo) + .AndIF(!string.IsNullOrWhiteSpace(msg), + 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")) + .ToExpression();//娉ㄦ剰 杩欎竴鍙� 涓嶈兘灏� + + var list = Db.Queryable<DataStockDetail>().Where(item).Select(a => new StockDetailDto + { + Id = a.Id, + SkuNo = a.SkuNo, + SkuName = a.SkuName, + Standard = a.Standard, + LotNo = a.LotNo, + LotText = a.LotText, + SupplierLot = a.SupplierLot, + Qty = a.Qty - a.LockQty - a.FrozenQty, + LocatNo = a.LocatNo, + RoadwayNo = a.RoadwayNo, + PalletNo = a.PalletNo, + Demo = a.Demo, + }).ToList(); + + return list; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + } + + //鎵嬪姩鍒嗛厤鍑哄簱鍗曟槑缁� + public void AddHandOutAllot(AddHandOutVm model, int userId) + { + try + { + #region 鍒ゆ柇鏉′欢 + //鏁版嵁楠岃瘉 + var detail = Db.Queryable<BllExportNoticeDetail>().First(a => a.IsDel == "0" && a.Id == model.Id); + if (detail == null) + { + 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); + if (notice == null) + { + throw new Exception("鎿嶄綔澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗曪紒"); + } + if (notice.Status == "3" && detail.AllotQty >= detail.Qty || notice.Status == "4" || notice.Status == "5") + { + 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 allotList = new List<BllExportAllot>(); + decimal outQtys = 0; + foreach (var st in model.StockList) + { + var stock = stockList.First(a => a.Id == st.StockId); + if (stock == null) + { + throw new Exception("鎿嶄綔澶辫触锛岄儴鍒嗗偍浣嶅簱瀛樺紓甯革紒"); + } + if (st.Qty > (stock.Qty - stock.LockQty - stock.FrozenQty)) // 杈撳叆鐨勬暟閲� - 鎵樼洏涓婂彲鐢ㄧ殑鏁伴噺锛堟墭鐩樹笂鏁伴噺-閿佸畾鐨勬暟閲�-鍐荤粨鐨勬暟閲忥級 + { + throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撴暟閲忚秴鍑哄簱瀛樻暟閲忥紒"); + } + + 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 = "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(); + + + Db.Updateable(stock).UpdateColumns(it => new { it.LockQty, it.Status }).ExecuteCommand(); + outQtys += st.Qty; + } + Db.Insertable(allotList).ExecuteCommand(); + //淇敼鍗曟嵁鏄庣粏 + detail.AllotQty += outQtys; + detail.UpdateUser = userId; + detail.UpdateTime = DateTime.Now; + if (detail.Status == "0") + { + detail.Status = "1"; + } + + Db.Updateable(detail).ExecuteCommand(); + var detailList = Db.Queryable<BllExportNoticeDetail>() + .Where(m => m.IsDel == "0" && m.SONo == notice.SONo).ToList(); + //淇敼鍑哄簱鍗曠姸鎬� + if (notice.Status == "0" || notice.Status == "1") + { + decimal totalQty = 0; + decimal totalAllotQty = 0; + foreach (var item in detailList) + { + totalQty += item.Qty; + totalAllotQty += Convert.ToInt32(item.AllotQty); + } + + if (totalAllotQty >= totalQty) + { + notice.Status = "2";//璇佹槑鍒嗛厤鏁伴噺澶т簬绛変簬鍑哄簱鏁伴噺 淇敼涓哄凡鍒嗛厤 + } + else if (totalAllotQty < totalQty && totalAllotQty > 0) + { + notice.Status = "1";//璇佹槑鍒嗛厤鏁伴噺灏忎簬绛変簬鍑哄簱鏁伴噺 淇敼涓洪儴鍒嗗垎閰� + } + Db.Updateable(notice).ExecuteCommand(); + } + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "鍒嗛厤", $"鎵嬪姩鍒嗛厤浜嗗崟鎹彿涓簕notice.SONo}銆佺墿鏂欙細{detail.SkuNo}銆佹壒娆★細{detail.LotNo}鐨勫崟鎹俊鎭�", userId); + + Db.CommitTran(); + + } + catch (Exception e) + { + Db.RollbackTran(); + throw new Exception(e.Message); + } + } + + #endregion + + #region 涓嬪彂鍑哄簱銆佸嚭搴撳畬鎴愩�侀噸鏂颁笅鍙戜换鍔°�佸彇娑堜换鍔°�佸紓甯稿鐞� + + public string GetHouseBySo(string soNo) + { + try + { + var notcie = Db.Queryable<BllExportNotice>().First(m=>m.IsDel == "0" && m.SONo == soNo); + if (notcie == null) + { + throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曚俊鎭�"); + } + return notcie.WareHouseNo; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + } + + public List<OutCommandDto> IssueOutHouseLk(string soNo, string outMode, int userId, string url, out string str) + { + try + { + var outDto1 = new List<OutCommandDto>(); //鍑哄簱鏁版嵁鐨勯泦鍚堬紙娣卞害涓�1鐨勫偍浣嶏級 + //璁板綍閿欒淇℃伅鐨勯泦鍚� //1:褰撳墠瑕佸嚭搴撶殑鍌ㄤ綅姝e湪绉诲嚭銆�2 鍑哄簱鐨勬墭鐩樺偍浣嶄俊鎭敊璇�(鍦ㄥ偍浣嶈〃涓湭鏌ヨ鍒�)銆�3鍌ㄤ綅鎹熷潖涓嶈兘鍑哄簱銆�4 瑕佸嚭搴撶殑鎵樼洏姝e湪鍏ュ簱 + var flagList = new List<int>(); + + var com = new Common(); + var notice = Db.Queryable<BllExportNotice>().First(m => m.SONo == soNo && m.IsDel == "0"); + if (notice == null) + { + throw new Exception($"鏈壘鍒皗soNo}鍑哄簱鍗曚俊鎭�"); + } + if (notice.WareHouseNo != "W02") + { + throw new Exception("浠撳簱鍙烽敊璇�"); + } + //鎵�鏈夎鍑哄簱鐨勫嚭搴撳垎閰嶄俊鎭�(鏈笅鍙戠殑淇℃伅鍜屽緟鎷h揣鐨勪俊鎭�) + var list = Db.Queryable<BllExportAllot>().Where(a => a.IsDel == "0" && a.SONo == soNo && (a.Status == "0" || a.Status == "2")).ToList(); + if (list.Count == 0) //鍒ゆ柇鏄惁鏈夐渶瑕佷笅鍙戠殑鍑哄簱娴佹按 + { + throw new Exception("褰撳墠鍑哄簱鍗曟嵁鏃犻渶瑕佷笅鍙戠殑鎵樼洏"); + } + + #region 闆嗗悎 + //瑕佸嚭搴撶殑鎵樼洏闆嗗悎 + var outLpnList = list.Select(m => m.PalletNo).ToList(); + //瑕佸嚭搴撶殑鏄庣粏闆嗗悎 + var outStockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToList(); + //鐗╂枡缂栫爜琛� + var skuList = Db.Queryable<SysMaterials>().Where(w => w.IsDel == "0"); + //鍖呰琛� + var packagList = Db.Queryable<SysPackag>().Where(w => w.IsDel == "0"); + Db.BeginTran(); + try + { + List<LogTask> logTaskList = new List<LogTask>();//姝ゆ鍑哄簱浠诲姟闆嗗悎锛屼负搴斿鍚屾墭鐩樹笉鍚岀墿鏂欏嚭搴� + var i = 0; + var outLocatelist1 = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.AreaNo == "B02" && m.Flag == "0").ToList(); + var outLocatelist2 = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && m.AreaNo == "B05" && m.Flag == "0").ToList(); + //寰幆鍒嗛厤鐨勪俊鎭敓鎴愬嚭搴撲换鍔� + foreach (var item in list) + { + var outModeLocate = ""; + if (outMode == "1") + { + if (i < outLocatelist1.Count) + { + outModeLocate = outLocatelist1[i].LocatNo; + } + else + { + var j = i % outLocatelist1.Count; + + outModeLocate = outLocatelist1[j].LocatNo; + } + } + else if(outMode == "2") + { + if (i < outLocatelist1.Count) + { + outModeLocate = outLocatelist2[i].LocatNo; + } + else + { + var j = i % outLocatelist1.Count; + + outModeLocate = outLocatelist2[j].LocatNo; + } + } + + var taskNoStr = ""; + + // 鍌ㄤ綅鍙� + var locateNo = outStockDetail.First(m => m.PalletNo == item.PalletNo).LocatNo; + + #region 鍒ゆ柇 + + //鍒ゆ柇鎵樼洏鏄惁鍦ㄥ簱鍐� + if (string.IsNullOrWhiteSpace(locateNo)) //搴撳 + { + //鍒ゆ柇鎵樼洏鏄惁鍦ㄥ叆搴撲腑 + var imBl = com.GetImTask(item.PalletNo); + if (imBl != null) + { + flagList.Add(4); + continue; + } + //鍒ゆ柇鏄惁鏄凡缁忓嚭杩囧簱鍙堝洖搴擄紙鐘舵�佷负寰呮嫞璐х殑锛� + if (item.Status == "0") + { + //濡傛灉涓嶅湪浠撳簱鍐咃紝褰撳墠鍒嗛厤淇℃伅鐩存帴鏇存柊鍑哄簱瀹屾垚 + item.Status = "2";//鐘舵�� + item.OutMode = outModeLocate;//鍑哄簱鍙� + Db.Updateable(item).ExecuteCommand(); + var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo); + if (noticeDetail != null) //鏇存柊鍑哄簱鍗曟嵁鐨勪笅鍙戞暟閲� + { + noticeDetail.FactQty += item.Qty; + Db.Updateable(noticeDetail).ExecuteCommand(); + } + + //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo); + if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2") + { + var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList(); + if (detailList.Count(m => m.Qty >= m.AllotQty) > 0) + { + notice.Status = "3"; //鍙樻洿鐘舵�佷负姝e湪鎵ц + Db.Updateable(notice).ExecuteCommand(); + } + } + } + flagList.Add(0); + continue; + + } + + var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0");//褰撳墠鍑哄簱鐨勫偍浣嶄俊鎭� + if (locate == null) + { + flagList.Add(2); + continue; + } + //鍒ゆ柇鍌ㄤ綅鏍囧織鏄惁涓烘崯鍧� + if (locate.Flag == "2") + { + flagList.Add(3); + continue; + } + + #endregion + + if (locate.Status == "1") //鏈夌墿鍝� + { + #region 娣诲姞鍑哄簱浠诲姟 + + var taskNo = new Common().GetMaxNo("TK"); + var exTask = new LogTask //鍑哄簱浠诲姟 + { + TaskNo = taskNo, + Sender = "WMS", + Receiver = "WCS", + IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + + StartLocat = locate.LocatNo,//璧峰浣嶇疆 + EndLocat = outModeLocate,//鐩爣浣嶇疆 + 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 + "鍒�" + outModeLocate + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 + }; + Db.Insertable(exTask).ExecuteCommand(); + logTaskList.Add(exTask); + + outDto1.Add(new OutCommandDto() + { + PalletNo = item.PalletNo,//鎵樼洏鍙� + StartLocate = locate.LocatNo, // 璧峰浣嶇疆 + StartRoadway = locate.RoadwayNo,//鍏跺疄宸烽亾 + EndLocate = outModeLocate, // 鐩爣浣嶇疆 + TaskNo = exTask.TaskNo, // 浠诲姟鍙� + TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)0鍏� 1鍑� 2绉� + OutMode = outModeLocate, //鍑哄簱鍙� + Order = 1, + + //UnstackingMode = "unstackingMode2",//鎷h揣鏂瑰紡 0鏈哄櫒鎷嗘墭鍑� 1 浜哄伐鎷h揣鍑� + //CompleteQty = outCount2, //鎷嗙殑浠舵暟 + //BoxexQty = outCount, //鎬讳欢鏁� + }); + taskNoStr = exTask.TaskNo; + + #endregion + + #region 鏀瑰彉鏁版嵁 + if (item.Status == "0")//鍒ゆ柇鎵樼洏鏄惁涓嬪彂杩� + { + var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo); + if (noticeDetail != null) //鏇存柊鍑哄簱鍗曟嵁鐨勪笅鍙戞暟閲� + { + noticeDetail.FactQty += item.Qty; + Db.Updateable(noticeDetail).ExecuteCommand(); + } + + //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo); + if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2") + { + var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList(); + if (detailList.Count(m => m.Qty >= m.AllotQty) > 0) + { + notice.Status = "3"; //鍙樻洿鐘舵�佷负姝e湪鎵ц + Db.Updateable(notice).ExecuteCommand(); + } + } + } + locate.Status = "3"; //瑕佸嚭搴撶殑鍌ㄤ綅鏀瑰彉鐘舵�� 姝e湪鍑哄簱 + Db.Updateable(locate).ExecuteCommand(); + var locate2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == outModeLocate && m.IsDel == "0");//褰撳墠鍑哄簱鐨勭洰鏍囧偍浣嶄俊鎭� + locate2.Status = "4"; + Db.Updateable(locate2).ExecuteCommand(); + + item.TaskNo = taskNoStr; // 鍑哄簱鍒嗛厤淇℃伅涓洿鏂颁换鍔″彿 + item.Status = "1"; // 鍑哄簱鍒嗛厤淇℃伅鐘舵�佹敼涓烘鍦ㄦ墽琛� + //item.UnstackingMode = unstackingMode2;//鎷嗗灈鏂瑰紡 + item.OutMode = outModeLocate;//鍑哄簱鍙� + //item.LoadingAddre = unstackingMode2 == "0" ? loadingAddre : "";//瑁呰溅鍙� + Db.Updateable(item).ExecuteCommand(); + + #endregion + + flagList.Add(0); + i++; + } + else if (locate.Status == "3") //鍑哄簱涓� + { + #region 鏀瑰彉鏁版嵁 + //鍒ゆ柇鏄惁鏄凡缁忓嚭杩囧簱鍙堝洖搴擄紙鐘舵�佷负寰呮嫞璐х殑 1锛� + if (item.Status == "0") + { + var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo); + if (noticeDetail != null) //鏇存柊鍑哄簱鍗曟嵁鐨勪笅鍙戞暟閲� + { + noticeDetail.FactQty += item.Qty; + Db.Updateable(noticeDetail).ExecuteCommand(); + } + + //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo); + if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2") + { + var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList(); + if (detailList.Count(m => m.Qty >= m.AllotQty) > 0) + { + notice.Status = "3"; //鍙樻洿鐘舵�佷负姝e湪鎵ц + Db.Updateable(notice).ExecuteCommand(); + } + } + } + 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.FirstOrDefault(m => m.PalletNo == item.PalletNo);//褰撳墠鏈夊悓鎵樼洏涓嶅悓鐗╂枡鍑哄簱 + } + if (taskNo == null) + { + throw new Exception($"鎵樼洏鍙凤細{item.PalletNo},鍑哄簱寮傚父"); + } + item.TaskNo = taskNo.TaskNo; + item.Status = "1"; // 鍑哄簱鍒嗛厤淇℃伅鐘舵�佹敼涓烘鍦ㄦ墽琛� + item.OutMode = item.OutMode;//鍑哄簱鍙� + //item.UnstackingMode = unstackingMode2;//鎷嗗灈妯″紡 + Db.Updateable(item).ExecuteCommand(); + flagList.Add(0); + #endregion + } + else if (locate.Status == "5") //绉诲嚭涓� + { + flagList.Add(1); + } + } + + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", soNo, "鍑哄簱", $"鐐瑰嚮鍑哄簱鎸夐挳鍑哄簱鍗曞彿涓猴細{soNo}鐨勫嚭搴撳崟", userId); + Db.CommitTran(); + + str = string.Empty; + if (flagList.Count(m => m == 0) > 0) + { + str += "0.涓嬪彂鎴愬姛銆�"; + } + if (flagList.Count(m => m == 1) > 0) + { + str += "1.褰撳墠瑕佸嚭搴撶殑鍌ㄤ綅姝e湪绉诲嚭銆�"; + } + if (flagList.Count(m => m == 2) > 0) + { + str += "2.鍑哄簱鐨勬墭鐩樺偍浣嶄俊鎭敊璇�(鍦ㄥ偍浣嶈〃涓湭鏌ヨ鍒�)銆�"; + } + if (flagList.Count(m => m == 3) > 0) + { + str += "4.鍌ㄤ綅鎹熷潖涓嶈兘鍑哄簱銆�"; + } + if (flagList.Count(m => m == 4) > 0) + { + str += "3.瑕佸嚭搴撶殑鎵樼洏姝e湪鍏ュ簱銆�"; + } + if (flagList.Count(m => m == 5) > 0) + { + str += "3.瑕佸嚭搴撶殑鎵樼洏姝e湪鎷嗘墭璇风◢鍚庝笅鍙戙��"; + } + if (outDto1.Count > 0) + { + // 姝e紡杩愯绋嬪簭鏀惧紑 + var list2 = outDto1.Select(m => m.TaskNo).ToList(); + var jsonData = JsonConvert.SerializeObject(outDto1); + string response = ""; + + try + { + var time1 = DateTime.Now;//鍙戦�佹椂闂� .ToString("yyyy-MM-dd HH:mm:ss") + //response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橶CS鍑哄簱鍛戒护", "WCS"); + var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss") + + //////瑙f瀽杩斿洖鏁版嵁 + //var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); + //if (wcsModel.StatusCode == 0) + //{ + // //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�// + new TaskServer().EditTaskIssueOk(list2, time1, time2); + str += "涓嬪彂鎴愬姛"; + //} + //if (wcsModel.StatusCode == -1) + //{ + // new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg); + // throw new Exception(wcsModel.Msg); + //} + } + catch (Exception ex) + { + throw new Exception(ex.Message); + } + + } + + return outDto1; + } + catch (Exception e) + { + Db.RollbackTran(); + throw new Exception(e.Message); + } + + + #endregion + } + catch (Exception e) + { + throw new Exception(e.Message); + } + } + + public List<OutCommandDto> IssueOutHouseMk(string soNo, string outMode, int userId, string url, out string str) + { + try + { + #region 闆嗗悎 + + 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湪鍏ュ簱 + + #endregion + var com = new Common(); + var allot = new AllotLocation(); + + var notice = Db.Queryable<BllExportNotice>().First(m => m.SONo == soNo && m.IsDel == "0"); + if (notice == null) + { + throw new Exception($"鏈壘鍒皗soNo}鍑哄簱鍗曚俊鎭�"); + } + //鎵�鏈夎鍑哄簱鐨勫嚭搴撳垎閰嶄俊鎭�(鏈笅鍙戠殑淇℃伅鍜屽緟鎷h揣鐨勪俊鎭�) + var list = Db.Queryable<BllExportAllot>().Where(a => a.IsDel == "0" && a.SONo == soNo && (a.Status == "0" || a.Status == "2")).ToList(); + if (list.Count == 0) //鍒ゆ柇鏄惁鏈夐渶瑕佷笅鍙戠殑鍑哄簱娴佹按 + { + throw new Exception("褰撳墠鍑哄簱鍗曟嵁鏃犻渶瑕佷笅鍙戠殑鎵樼洏"); + } + + #region 闆嗗悎 + //瑕佸嚭搴撶殑鎵樼洏闆嗗悎 + var outLpnList = list.Select(m => m.PalletNo).ToList(); + //瑕佸嚭搴撶殑鏄庣粏闆嗗悎 + var outStockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && outLpnList.Contains(m.PalletNo)).ToList(); + //鎵�鏈夎鍑哄簱鐨勫偍浣嶉泦鍚� + var locateListStrs = outStockDetail.Where(m=> !string.IsNullOrWhiteSpace(m.LocatNo)).Select(m => m.LocatNo).Distinct().ToList(); + //鐗╂枡缂栫爜琛� + var skuList = Db.Queryable<SysMaterials>().Where(w => w.IsDel == "0"); + //鍖呰琛� + var packagList = Db.Queryable<SysPackag>().Where(w => w.IsDel == "0"); + Db.BeginTran(); + try + { + List<LogTask> logTaskList = new List<LogTask>();//姝ゆ鍑哄簱浠诲姟闆嗗悎锛屼负搴斿鍚屾墭鐩樹笉鍚岀墿鏂欏嚭搴� + //寰幆鍒嗛厤鐨勪俊鎭敓鎴愬嚭搴撲换鍔� + foreach (var item in list) + { + var taskNoStr = ""; + string toLocation = string.Empty;//鐩爣浣嶇疆 + + // 鍌ㄤ綅鍙� + var locateNo = outStockDetail.First(m => m.PalletNo == item.PalletNo).LocatNo; + + #region 鍒ゆ柇鎵樼洏鏄惁鍦ㄥ簱鍐� + + //鍒ゆ柇鎵樼洏鏄惁鍦ㄥ簱鍐� + if (string.IsNullOrWhiteSpace(locateNo)) //搴撳 + { + if (notice.Type == "0") + { + flagList.Add(5); + continue; + } + //鍒ゆ柇鎵樼洏鏄惁鍦ㄥ叆搴撲腑 + var imBl = com.GetImTask(item.PalletNo); + if (imBl != null) + { + flagList.Add(4); + continue; + } + //鍒ゆ柇鏄惁鏄凡缁忓嚭杩囧簱鍙堝洖搴擄紙鐘舵�佷负寰呮嫞璐х殑 1锛� + if (item.Status == "0") + { + //濡傛灉涓嶅湪浠撳簱鍐咃紝褰撳墠鍒嗛厤淇℃伅鐩存帴鏇存柊鍑哄簱瀹屾垚 + item.Status = "2";//鐘舵�� + item.OutMode = outMode;//鍑哄簱鍙� + Db.Updateable(item).ExecuteCommand(); + var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo); + if (noticeDetail != null) //鏇存柊鍑哄簱鍗曟嵁鐨勪笅鍙戞暟閲� + { + noticeDetail.FactQty += item.Qty; + Db.Updateable(noticeDetail).ExecuteCommand(); + } + + //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo); + if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2") + { + var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList(); + if (detailList.Count(m => m.Qty >= m.AllotQty) > 0) + { + notice.Status = "3"; //鍙樻洿鐘舵�佷负姝e湪鎵ц + Db.Updateable(notice).ExecuteCommand(); + } + } + } + flagList.Add(0); + continue; + } + + //鍒ゆ柇鍌ㄤ綅 + var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo && m.IsDel == "0");//褰撳墠鍑哄簱鐨勫偍浣嶄俊鎭� + if (locate == null) + { + flagList.Add(2); + continue; + } + //鍒ゆ柇鍌ㄤ綅鏍囧織鏄惁涓烘崯鍧� + if (locate.Flag == "2") + { + flagList.Add(3); + continue; + } + + #endregion + + + + if (locate.Status == "1") //鏈夌墿鍝� + { + var row1 = int.Parse(locate.LocatNo.Substring(2,2)); + var row2 = int.Parse(locate.AisleOne.Substring(2, 2)); + //闇�瑕佺Щ搴撶殑淇℃伅 + var NeedMoveInfo = IsNeedMoveLocate(locate, locateListStrs, out int isOut); + if (isOut == 1) + { + //宸烽亾缁勪腑鏈夊叆搴撴垨绉诲叆鐨勫偍浣嶏紝鎴栬�呮槸褰撳墠鍌ㄤ綅鍓嶆湁鍌ㄤ綅鏈笅鍙戞垚鍔熺殑浠诲姟 + flagList.Add(2); + continue; + } + if (NeedMoveInfo.Count > 0)//闇�瑕佺Щ搴� + { + //鍒ゆ柇搴撳唴绌哄偍浣嶆槸鍚﹀ + var okRoad = Db.Queryable<SysStorageRoadway>().Where(m => m.Status == "0" && m.IsDel == "0" && m.WareHouseNo == notice.WareHouseNo).Select(m => m.RoadwayNo).ToList(); + var nullSlotNum = Db.Queryable<SysStorageLocat>().Count(m => m.RoadwayNo != locate.RoadwayNo && okRoad.Contains(m.RoadwayNo) && m.Status == "0"); + //鍒ゆ柇绌哄偍浣嶇殑鏁伴噺鏄惁澶т簬闇�瑕佺Щ搴撶殑鏁伴噺 + if (nullSlotNum >= NeedMoveInfo.Count) + { + var isYk = false; + foreach (var s in NeedMoveInfo) + { + //鍌ㄤ綅鍒� + var rows = int.Parse(s.Substring(2,2)); + + //鑾峰彇绉诲簱鍌ㄤ綅 + var moveAddress = GetMiJiMoveAddress(s, locate.AisleOne); + var tary = Db.Queryable<DataStockDetail>().First(m => m.LocatNo == s); + if (string.IsNullOrWhiteSpace(moveAddress)) // 鍒ゆ柇鏄惁鑾峰彇鍒扮Щ搴撶殑搴撲綅 + { + isYk = true; + flagList.Add(5);//鍑哄簱鍓嶆湁璐х墿锛岄渶绉诲簱浣嗘湭鏌ヨ鍒扮┖鍌ㄤ綅 + break; //娌℃湁绉诲簱鐨勫簱浣嶄簡 + } + else + { + //鍒ゆ柇鎵樼洏鏈夋病鏈夊洖绉荤殑浠诲姟 + //var hy = GetHyTask(item.ExportStockCode); + //if (hy != null) + //{ + // var hyentity = dataContext.WmsExportTask.FirstOrDefault(m => m.TaskId == hy.TaskId); + // if (hyentity != null) + // { + // isYk = true; + // msgList.Add(6);//鍑哄簱鍓嶆湁璐х墿锛岄渶绉诲簱浣嗘槸鍥炵Щ鎵樼洏 + // break; //娌℃湁绉诲簱鐨勫簱浣嶄簡 + // } + //} + var ykTaskNo = new Common().GetMaxNo("TK"); + var ykTask = new LogTask //鍑哄簱浠诲姟 + { + TaskNo = ykTaskNo, + Sender = "WMS", + Receiver = "WCS", + IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + + StartLocat = s,//璧峰浣嶇疆 + EndLocat = moveAddress,//outMode,//鐩爣浣嶇疆 + PalletNo = tary.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 = "浠�" + locate.LocatNo + "鍒�" + toLocation + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 + }; + Db.Insertable(ykTask).ExecuteCommand(); + logTaskList.Add(ykTask); + + outDto1.Add(new OutCommandDto() + { + PalletNo = item.PalletNo,//鎵樼洏鍙� + StartLocate = locate.LocatNo, // 璧峰浣嶇疆 + StartRoadway = locate.RoadwayNo,//鍏跺疄宸烽亾 + EndLocate = moveAddress,//outMode, // 鐩爣浣嶇疆 + TaskNo = ykTaskNo, // 浠诲姟鍙� + TaskType = "2",// 浠诲姟绫诲瀷 (鍑哄簱)0鍏� 1鍑� 2绉� + Order = Math.Abs(row2 - rows), + Type = PLCTypeEnum.ShuttleCar + + }); + var slotChange = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == s); + var slotChange2 = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == moveAddress); + + slotChange.Status = "5"; //鏀瑰彉鐘舵�侊紙姝e湪鍑哄簱锛� + slotChange2.Status = "4"; // 鏀瑰彉鐘舵�侊紙姝e湪绉诲叆锛� + Db.Updateable(slotChange).ExecuteCommand(); + Db.Updateable(slotChange2).ExecuteCommand(); + } + } + if (isYk) + { + break; + } + } + else + { + flagList.Add(5); + break; + } + } + #region 娣诲姞鍑哄簱浠诲姟 + + 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); + var endroad = allot.RoadwayToStationNum(locate.RoadwayNo, toLocation); + outDto1.Add(new OutCommandDto() + { + PalletNo = item.PalletNo,//鎵樼洏鍙� + StartLocate = locate.LocatNo, // 璧峰浣嶇疆 + StartRoadway = locate.RoadwayNo,//璧峰宸烽亾 + EndLocate = outMode,//, // 鐩爣浣嶇疆 + EndRoadway = endroad, + TaskNo = exTask.TaskNo, // 浠诲姟鍙� + TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)0鍏� 1鍑� 2绉� + OutMode = outMode, //鍑哄簱鍙� + Order = Math.Abs(row2 - row1), + Type = PLCTypeEnum.ShuttleCar + + }); + taskNoStr = exTask.TaskNo; + + #endregion + + #region 鏀瑰彉鏁版嵁 + if (item.Status == "0")//鍒ゆ柇鎵樼洏鏄惁涓嬪彂杩� + { + var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo); + if (noticeDetail != null) //鏇存柊鍑哄簱鍗曟嵁鐨勪笅鍙戞暟閲� + { + noticeDetail.FactQty += item.Qty; + Db.Updateable(noticeDetail).ExecuteCommand(); + } + + //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo); + if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2") + { + var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList(); + if (detailList.Count(m => m.Qty >= m.AllotQty) > 0) + { + notice.Status = "3"; //鍙樻洿鐘舵�佷负姝e湪鎵ц + Db.Updateable(notice).ExecuteCommand(); + } + } + } + locate.Status = "3"; //瑕佸嚭搴撶殑鍌ㄤ綅鏀瑰彉鐘舵�� 姝e湪鍑哄簱 + Db.Updateable(locate).ExecuteCommand(); + + item.TaskNo = taskNoStr; // 鍑哄簱鍒嗛厤淇℃伅涓洿鏂颁换鍔″彿 + item.Status = "1"; // 鍑哄簱鍒嗛厤淇℃伅鐘舵�佹敼涓烘鍦ㄦ墽琛� + //item.UnstackingMode = unstackingMode2;//鎷嗗灈鏂瑰紡 + item.OutMode = outMode;//鍑哄簱鍙� + //item.LoadingAddre = unstackingMode2 == "0" ? loadingAddre : "";//瑁呰溅鍙� + Db.Updateable(item).ExecuteCommand(); + + #endregion + + flagList.Add(0); + } + else if (locate.Status == "3") //鍑哄簱涓� + { + #region 鏀瑰彉鏁版嵁 + //鍒ゆ柇鏄惁鏄凡缁忓嚭杩囧簱鍙堝洖搴擄紙鐘舵�佷负寰呮嫞璐х殑 1锛� + if (item.Status == "0") + { + var noticeDetail = Db.Queryable<BllExportNoticeDetail>().First(m => m.IsDel == "0" && m.Id == item.SODetailNo); + if (noticeDetail != null) //鏇存柊鍑哄簱鍗曟嵁鐨勪笅鍙戞暟閲� + { + noticeDetail.FactQty += item.Qty; + Db.Updateable(noticeDetail).ExecuteCommand(); + } + + //var notice2 = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.SONo == item.SONo); + if (notice.Status == "0" || notice.Status == "1" || notice.Status == "2") + { + var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == item.SONo).ToList(); + if (detailList.Count(m => m.Qty >= m.AllotQty) > 0) + { + notice.Status = "3"; //鍙樻洿鐘舵�佷负姝e湪鎵ц + Db.Updateable(notice).ExecuteCommand(); + } + } + } + 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.FirstOrDefault(m => m.PalletNo == item.PalletNo);//褰撳墠鏈夊悓鎵樼洏涓嶅悓鐗╂枡鍑哄簱 + } + if (taskNo == null) + { + throw new Exception($"鎵樼洏鍙凤細{item.PalletNo},鍑哄簱寮傚父"); + } + item.TaskNo = taskNo.TaskNo; + item.Status = "1"; // 鍑哄簱鍒嗛厤淇℃伅鐘舵�佹敼涓烘鍦ㄦ墽琛� + item.OutMode = item.OutMode;//鍑哄簱鍙� + //item.UnstackingMode = unstackingMode2;//鎷嗗灈妯″紡 + Db.Updateable(item).ExecuteCommand(); + flagList.Add(0); + #endregion + } + else if (locate.Status == "5") //绉诲嚭涓� + { + flagList.Add(1); + } + } + outDto1.AddRange(moveDto); + outDto1.AddRange(outDto2); + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", soNo, "鍑哄簱", $"鐐瑰嚮鍑哄簱鎸夐挳鍑哄簱鍗曞彿涓猴細{soNo}鐨勫嚭搴撳崟", userId); + Db.CommitTran(); + + str = string.Empty; + if (flagList.Count(m => m == 0) > 0) + { + str += "0.涓嬪彂鎴愬姛銆�"; + } + if (flagList.Count(m => m == 1) > 0) + { + str += "1.褰撳墠瑕佸嚭搴撶殑鍌ㄤ綅姝e湪绉诲嚭銆�"; + } + if (flagList.Count(m => m == 2) > 0) + { + str += "2.鍑哄簱鐨勬墭鐩樺偍浣嶄俊鎭敊璇�(鍦ㄥ偍浣嶈〃涓湭鏌ヨ鍒�)銆�"; + } + if (flagList.Count(m => m == 3) > 0) + { + str += "4.鍌ㄤ綅鎹熷潖涓嶈兘鍑哄簱銆�"; + } + if (flagList.Count(m => m == 4) > 0) + { + str += "3.瑕佸嚭搴撶殑鎵樼洏姝e湪鍏ュ簱銆�"; + } + if (flagList.Count(m => m == 5) > 0) + { + str += "3.瑕佸嚭搴撶殑鎵樼洏姝e湪鎷嗘墭璇风◢鍚庝笅鍙戙��"; + } + if (outDto1.Count > 0) + { + // 姝e紡杩愯绋嬪簭鏀惧紑 + var list2 = outDto1.Select(m => m.TaskNo).ToList(); + var jsonData = JsonConvert.SerializeObject(outDto1); + string response = ""; + + try + { + //var time1 = DateTime.Now;//鍙戦�佹椂闂� .ToString("yyyy-MM-dd HH:mm:ss") + //response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橶CS鍑哄簱鍛戒护", "WCS"); + //var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss") + + //////瑙f瀽杩斿洖鏁版嵁 + //var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); + //if (wcsModel.StatusCode == 0) + //{ + // //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�// + // new TaskServer().EditTaskIssueOk(list2, time1, time2); + // str += "涓嬪彂鎴愬姛"; + //} + //if (wcsModel.StatusCode == -1) + //{ + // new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg); + // throw new Exception(wcsModel.Msg); + //} + } + catch (Exception ex) + { + throw new Exception(ex.Message); + } + + } + + return outDto1; + } + catch (Exception e) + { + Db.RollbackTran(); + throw new Exception(e.Message); + } + + + #endregion + } + catch (Exception e) + { + throw new Exception(e.Message); + } + } + + /// <summary> + /// 鍒ゆ柇鏄惁闇�瑕佽繘琛岀Щ搴撴搷浣� + /// </summary> + /// <param name="oldAddress">瑕佸嚭搴撶殑搴撲綅鍦板潃</param> + /// <param name="aisle">閫氶亾鍙�</param> + /// <param name="addressList">瑕佸嚭鍙g殑鍌ㄤ綅闆嗗悎</param> + /// <param name="isOut">鏄惁鍑哄簱 1:鏈夋湭涓嬪彂鐨勪换鍔″湪鍓嶉潰</param> + /// <returns>闇�瑕佺Щ搴撶殑闆嗗悎锛堝鏋滀负绌哄垯涓嶉渶绉诲簱锛�</returns> + private List<string> IsNeedMoveLocate(SysStorageLocat lcoate,List<string> locateStrList, out int isOut) + { + var nowAddress = new List<string>(); //闇�瑕佺Щ搴撶殑闆嗗悎 + // 010101 娲惧垪灞� + //var bol = String.CompareOrdinal(lcoate.LocatNo, lcoate.AisleOne); + + var sArray = lcoate.LocatNo.Substring(4,2); + var row = int.Parse(sArray);//鍌ㄤ綅鍒� + var sArray2 = lcoate.AisleOne.Substring(4, 2); + var row2 = int.Parse(sArray2); //閫氶亾鍙e垪 + + isOut = 0; + + var bol = row2 - row > 0; + + //鍚岀粍鐨勫偍浣嶉泦鍚� + var slotList = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == lcoate.RoadwayNo).ToList(); + List<string> list; + + + if (bol) + { + //鍌ㄤ綅灏忎簬閫氶亾鍙� 鍊掑簭 + list = slotList.Where(m => m.Column < row2 && m.Column > row).Select(m => m.LocatNo).ToList(); + } + else + { + //鍌ㄤ綅澶т簬閫氶亾鍙� 姝e簭 + list = slotList.Where(m => m.Column > row2 && m.Column < row).Select(m => m.LocatNo).ToList(); + } + + if (list.Any()) + { + //鎺掗櫎鎺夊悓宸烽亾缁勪腑瑕佸嚭搴撶殑鍌ㄤ綅 + if (locateStrList.Count != 0) + { + list = list.Where(m => !locateStrList.Contains(m)).ToList(); + } + //鍒ゆ柇鏄惁鏈夊叆搴撲腑鎴栨鍦ㄧЩ鍏ョ殑 + var s = slotList.Where(m => list.Contains(m.LocatNo) && (m.Status == "2" || m.Status == "4")).Select(m => m.LocatNo).ToList(); + if (s.Count > 0) + { + isOut = 1; + return nowAddress; + } + //鍒ゆ柇鏄惁鏈夊湪褰撳墠鍌ㄤ綅鍓嶆湭涓嬪彂鐨勪换鍔★紙闃叉鎾炶溅锛� + var w = Db.Queryable<LogTask>().Where(m => list.Contains(m.StartLocat) && m.IsSuccess == 0).Select(m => m.StartLocat).ToList(); + if (w.Count > 0) + { + isOut = 1; + return nowAddress; + } + if (bol) + { + //鍌ㄤ綅灏忎簬閫氶亾鍙� 鍊掑簭 + nowAddress = slotList.Where(m => list.Contains(m.LocatNo) && m.Status == "1").OrderByDescending(m => m.LocatNo).Select(m => m.LocatNo).ToList(); + } + else + { + //鍌ㄤ綅澶т簬閫氶亾鍙� 姝e簭 + nowAddress = slotList.Where(m => list.Contains(m.LocatNo) && m.Status == "1").OrderBy(m => m.LocatNo).Select(m => m.LocatNo).ToList(); + + } + if (nowAddress.Count > 0) + { + return nowAddress; + } + } + else + { + return nowAddress; + } + + + return nowAddress; + } + + /// <summary> + /// 鑾峰彇绉诲簱鐩爣搴撲綅 瀵嗛泦搴� + /// </summary> + /// <param name="oldAddress">闇�瑕佺Щ鍔ㄧ殑搴撲綅鍦板潃</param> + /// <param name="slotOut">闇�瑕佺Щ鍔ㄧ殑搴撲綅鐨勫嚭鍙d腑杞綅</param> + /// <param name="billCode">鍑哄簱鍗曟嵁鎴栨槸娉㈡鍗曟嵁</param> + /// <param name="flags">涓浆鍙�</param> + /// <param name="refLanWayId">闇�鍥炵Щ鐨勫贩閬搃d</param> + /// <param name="refLanOutCode">闇�鍥炵Щ鐨勫贩閬撲腑杞彛</param> + /// <returns>鐩爣搴撲綅鍦板潃 涓�"" 鐩存帴涓嬪彂涓ゆ鍑哄簱鎸囦护</returns> + public string GetMiJiMoveAddress(string oldAddress, string slotOut) + { + var newAddress = ""; //鏂板簱浣� + var newLaneWayAddress = ""; //鏂板贩閬撳彛搴撲綅 + + // 鑾峰彇绉诲簱鐩爣鍌ㄤ綅 + + // + var sArray = oldAddress.Substring(4,2); + var ceng = int.Parse(sArray); + // + var sArray2 = slotOut.Substring(2, 2); + var row2 = sArray2; + //鍗佸瓧鍙� + var shiKou = new List<string>() + { + slotOut, + "070501", + "071301", + "070502", + "071302", + }; + var shiKou3 = new List<addreClass>(); + foreach (var item in shiKou) + { + var a = item.Substring(4, 2); + var b = item.Substring(2, 2); + if (int.Parse(a) != ceng) continue; + var s = Math.Abs(int.Parse(b) - int.Parse(row2)); + if (shiKou3.Any(m => m.distNum == s)) continue; + shiKou3.Add(new addreClass() + { + slotCode = item, + distNum = s + }); + } + //鏍规嵁鍗佸瓧鍙e樊鍊兼渶灏忕殑鎺掑簭 + shiKou3 = shiKou3.OrderBy(m => m.distNum).ToList(); + + /** + //1 绉诲姩鍒版渶杩戠殑绌哄偍浣嶏紝蹇呴』鍥炵Щ銆� + //鏍规嵁鍥涘悜杞︾Щ鍔ㄨ建杩硅绠楀嚭鏈�杩戠┖鍌ㄤ綅銆� + //鍑哄簱瀹屾垚鍚庢牴鎹壒娆″彿 鐢熶骇鏃ユ湡 鍑哄彛璁$畻鍥炵Щ鍌ㄤ綅銆� + + //2 绉诲姩閫傚悎瀛樻斁鐨勭粍锛岀郴缁熻嚜鍔ㄨ绠楁槸鍚﹀洖绉汇�� + //鏍规嵁鎵规鍙� 鐢熶骇鏃ユ湡 鍑哄彛 鐗╂枡绛夎绠楀嚭绉诲簱鐩爣鍌ㄤ綅 + //鍑哄簱瀹屾垚鍚庯紝鍒ゆ柇鏄惁鏈夋瘮褰撳墠搴撲綅鏇村悎閫傜殑瀛樺偍鍌ㄤ綅锛屾湁绉诲姩锛屾棤涓嶇Щ鍔ㄣ�� + */ + + var oldSlot = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == oldAddress); + if (oldSlot == null) + { + throw new Exception("鏈兘鎵惧埌鍌ㄤ綅淇℃伅"); + } + #region 1涓嶉渶瑕佸洖绉荤殑 + + //鍚庢湡搴撳瓨鎵樼洏琛ㄦ敼浜嗗悗闇�瑕佸姞绛涢�夋潯浠舵墭鐩樼殑鐘舵�侊紙閫�璐�/棰勬嫞锛� + var tray1 = Db.Queryable<DataStockDetail>().Where(m => m.LocatNo == oldAddress).ToList(); + //鏍规嵁鐗╂枡銆佹壒娆°�佹墭鐩樼姸鎬侊紙閫�璐�/棰勬嫞/鏆傚瓨绛夛級鍒嗙粍鍒ゆ柇 + var d = tray1.GroupBy(m => new { m.SkuNo, m.LotNo, m.PalletTags }); + var location = string.Empty; + if (d.Any()) + { + //鏃у偍浣嶅悓缁勭殑鍌ㄤ綅闆嗗悎 + var slotList = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == oldSlot.RoadwayNo).Select(m => m.LocatNo).ToList(); + foreach (var item in d) + { + foreach (var item2 in item) + { + var okLan = Db.Queryable<SysStorageRoadway>().Where(m => m.Status == "0" && m.IsDel == "0").Select(m => m.RoadwayNo).ToList(); + var tray2 = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == item2.SkuNo + && m.LotNo == item2.LotNo && !slotList.Contains(m.LocatNo) && m.PalletTags == item2.PalletTags && okLan.Contains(m.RoadwayNo)).ToList(); + foreach (var s in tray2) + { + if (string.IsNullOrWhiteSpace(s.RoadwayNo))//鍒ゆ柇鏄惁鍦ㄥ簱澶栵紝濡傛槸璺宠繃 + { + continue; + } + var lan = Db.Queryable<SysStorageLocat>().Where(m => m.RoadwayNo == s.RoadwayNo).OrderBy(m => m.LocatNo).ToList(); + //鍒ゆ柇鏄惁鏈夊叆搴撲腑銆佸嚭搴撲腑銆佺Щ鍏ヤ腑銆佺Щ鍑轰腑 + if (lan.Count(m => m.Status == "2" || m.Status == "3" || m.Status == "4" || m.Status == "5") > 0) + { + continue; + } + if (lan.Count(m => m.Status == "0") > 0) + { + + var bol = GetBecomingLocation(s.RoadwayNo, ref location); + if (bol && !string.IsNullOrWhiteSpace(location)) + { + newAddress = location; + return newAddress; + + } + + } + } + } + } + + } + + #endregion + + #region 2闇�瑕佸洖绉荤殑 + + ////濡傛灉娌℃湁鎵惧埌鍚堥�傜殑鍌ㄤ綅 + //if (string.IsNullOrWhiteSpace(newAddress)) + //{ + // foreach (var s in shiKou3) + // { + + // var r = int.Parse(s.slotCode.Substring(0, 2)); + // var l = int.Parse(s.slotCode.Substring(2, 2)); + // var c = int.Parse(s.slotCode.Substring(4, 2)); + // //鏌ヨ绌哄偍浣� + // var sqlString = $@"select LocatNo,Row,Column,Layer,(ABS(Row-{r}) + ABS(Column-{l}) ) as distNum + // from SysStorageLocat where (AisleOneRow = {r} or AisleTwoRow = {r}) and Status in (0) and + // RoadwayNo !='{oldSlot.RoadwayNo}' and RoadwayNo not in(select RoadwayNo from SysStorageRoadway where Status = 1) order by distNum,SlotCode"; + + // var addressModels = dataContext.ExecuteQuery<addreClass>(sqlString).ToList(); + // foreach (var item in addressModels) + // { 銆� + + + // newAddress = item.slotCode; + // var dz = newAddress.Split(new char[] { '-' }); + // var l1 = dz[1]; + // var c1 = dz[0]; + // newLaneWayAddress = $"{c1}-{l1}-{a[2]}"; + // flags = newLaneWayAddress; + + // var slotModel = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == item.slotCode); + + // var lan = dataContext.WmsBaseSlot.Where(m => m.SlotLanewayId == slotModel.SlotLanewayId).ToList(); + // if (slotModel.SlotRow > int.Parse(a[2])) + // { + // // 鍙栨渶涓婇潰涓�鎺� + // lan = lan.OrderBy(m => m.SlotCode).ToList(); + // for (int i = 0; i < lan.Count; i++) + // { + // var slot = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == lan[i].SlotCode); + // if (slot.SlotStatus == 0) + // { + // if (i == lan.Count - 1) + // { + // newAddress = lan[lan.Count - 1].SlotCode; + + // break; + // } + // else + // { + // continue; + // } + + // } + // else + // { + // newAddress = lan[i - 1].SlotCode; + // break; + // } + // } + + // } + // else + // { + // // 鍙栨渶涓嬮潰涓�鎺� + // lan = lan.OrderByDescending(m => m.SlotCode).ToList(); + // for (int i = 0; i < lan.Count; i++) + // { + // var slot = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == lan[i].SlotCode); + // if (slot.SlotStatus == 0) + // { + // if (i == lan.Count - 1) + // { + // newAddress = lan[lan.Count - 1].SlotCode; + // break; + // } + // else + // { + // continue; + // } + + // } + // else + // { + // newAddress = lan[i - 1].SlotCode; + // break; + // } + // } + // } + // //娣诲姞鍥炵Щ浠诲姟 + // AddHyTask(oldAddress, newAddress, newLaneWayAddress, oldSlot.SlotLanewayId, slotOut, billCode); + // refLanWayId = slotModel.SlotLanewayId; + // refLanOutCode = newLaneWayAddress; + // //9锛氶攣瀹氬偍浣� + // var updateSlot = dataContext.WmsBaseSlot.Where(m => m.SlotLanewayId == slotModel.SlotLanewayId).ToList(); + // var newAddressRow = dataContext.WmsBaseSlot.FirstOrDefault(m => m.SlotCode == newAddress); + // if (newAddressRow.SlotRow > int.Parse(a[2])) + // { + // updateSlot = updateSlot.Where(m => m.SlotRow < newAddressRow.SlotRow && m.SlotRow > int.Parse(a[2])).OrderBy(m => m.SlotCode).ToList(); + // } + // else + // { + // updateSlot = updateSlot.Where(m => m.SlotRow > newAddressRow.SlotRow && m.SlotRow < int.Parse(a[2])).OrderByDescending(m => m.SlotCode).ToList(); + + // } + // foreach (var source in updateSlot) + // { + // if (source.SlotCode == newAddress) + // { + // continue; + // } + // if (source.SlotStatus == 0) + // { + // source.SlotStatus = 8; + // } + // } + + // if (updateSlot.Count <= 0) + // { + // refLanWayId = ""; + // refLanOutCode = ""; + // } + // dataContext.SubmitChanges(); + // return newAddress; + + + + // } + + // } + + //} + + return newAddress; + #endregion + + + } + + /// <summary> + /// 鑾峰彇绉诲簱鍚堥�傜殑鍌ㄤ綅 瀵嗛泦搴� + /// </summary> + /// <param name="laneWayId">鍚堥�傜粍鐨勫贩閬撳彿</param> + /// <param name="location">鍒嗛厤鍌ㄤ綅</param> + /// <returns>true锛氬瓨鍦ㄥ悎閫傚偍浣� False锛氫笉瀛樺湪鍚堥�傚偍浣�</returns> + private bool GetBecomingLocation(string laneWayId, ref string location) + { + bool bl = false; + + // 寰幆鍒ゆ柇褰撳墠缁勬槸鍚︽湁鍓╀綑鍌ㄤ綅 + string sqlString = string.Empty; + location = ""; + + // 鍒ゆ柇鍌ㄤ綅缁勬槸鍚︽湁绌哄偍浣� 鍏宠仈搴撳瓨鏄庣粏琛ㄥ彲闃叉鍌ㄤ綅鐘舵�佷笉鍑嗙‘閬垮厤閫犳垚婊″叆寮傚父//not in ('1','2','4','6','7','8') + sqlString = $"select LocatNo,Column,AisleOne from SysStorageLocat where RoadwayNo = {laneWayId} and Status in ('0') and LocatNo not in (select LocatNo from DataStockDetail where RoadwayNo = { laneWayId}) order by Row;"; + var slotModel =Db.SqlQueryable<LocateInfo>(sqlString).ToList(); + if (slotModel.Count == 0) + { + bl = false; + } + else // 瀛樺湪绌哄偍浣� + { + // 鍒ゆ柇褰撳墠缁勫悎閫傜殑鍌ㄤ綅鍦板潃 + var numstr = slotModel[0].AisleOne.Substring(4,2); + int aisleRow = int.Parse(numstr); + + if (slotModel[0].Column > aisleRow) + { + // 鍙栨渶涓婇潰涓�鎺� + location = slotModel[0].LocatNo; + + } + else + { + // 鍙栨渶涓嬮潰涓�鎺� + + location = slotModel[slotModel.Count - 1].LocatNo; + } + + bl = true; + } + + + + return bl; + } + + private class addreClass + { + public string slotCode { get; set; } + public int distNum { get; set; } + } + public class LocateInfo + { + public string LocatNo { get; set; } + public int Column { get; set; } + public string AisleOne { get; set; } + + } + + /// <summary> + /// wcs杩斿洖鐨勬垚鍔熶俊鍙凤紙鍑哄簱鎴愬姛锛� + /// </summary> + /// <param name="taskNo"></param> + /// <param name="userId"></param> + /// <exception cref="Exception"></exception> + public void ExportSuccess(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 locateNo = stockDetail.Select(m => m.LocatNo).Distinct().FirstOrDefault(); + //褰撳墠浠诲姟涓殑鍌ㄤ綅淇℃伅 + var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo); + try + { + task.Status = "2";//浠诲姟鐘舵�� + task.IsSend = 0; + task.IsCancel = 0; + task.IsFinish = 0; + task.FinishDate = DateTime.Now;//瀹屾垚鏃堕棿 + Db.Updateable(task).ExecuteCommand(); + if (locate != null) + { + locate.Status = "0"; // 鏇存敼褰撳墠浠诲姟涓殑鍌ㄤ綅鐘舵�侊紙鏀逛负0绌哄偍浣嶏級 + Db.Updateable(locate).ExecuteCommand(); + } + foreach (var item in stockDetail) + { + if (item.SkuNo == "100099")//鍒ゆ柇鏄惁鏄┖鎵樺嚭搴� + { + //鍒ゆ柇鎬诲簱瀛樻槸鍚︿负0锛屽鏋滀负0鍒犻櫎 鍚﹀垯鍑忓幓鏁伴噺 + var stock = Db.Queryable<DataStock>().First(m => m.SkuNo == "100099"); + + if (stock != null) + { + if (item.LockQty != null) + { + stock.Qty -= item.LockQty.Value; + stock.LockQty -= item.LockQty.Value; + Db.Updateable(stock).ExecuteCommand(); + } + + if (stock.Qty == 0) + { + Db.Deleteable(stock).ExecuteCommand(); + } + } + + //鎵樼洏鐘舵�佹敼涓烘湭浣跨敤 + var sCode = Db.Queryable<SysPallets>().First(m => m.PalletNo == item.PalletNo); + if (sCode != null) + { + sCode.Status = "0"; + Db.Updateable(sCode).ExecuteCommand(); + } + Db.Deleteable(item).ExecuteCommand(); + + continue; + } + item.LocatNo = "";//鍌ㄤ綅鏇存敼锛堟敼涓虹┖锛� + item.WareHouseNo = "";//鎵�灞炰粨搴撴洿鏀癸紙鏀逛负绌猴級 + item.RoadwayNo = "";//鎵�灞炲贩閬撴洿鏀癸紙鏀逛负绌猴級 + item.AreaNo = "";//鎵�灞炲尯鍩熸洿鏀癸紙鏀逛负绌猴級 + + } + //鍑哄簱娴佹按锛堟洿鏀圭姸鎬侊級 + var allot = Db.Queryable<BllExportAllot>().Where(m => m.IsDel == "0" && (m.TaskNo == taskNo || (m.Status == "1" && m.PalletNo == task.PalletNo))).ToList(); + var PalletType = "0"; //0锛氱墿鏂欐墭 1锛氱┖鎵樼洏鎵� + + foreach (var item in allot) + { + if (item.SkuNo == "100099") + { + item.Status = "5"; + item.CompleteQty += stockDetail[0].Qty; + PalletType = "1"; + } + else + { + item.Status = "2"; + } + + } + + var endLocateList = Db.Queryable<SysStorageLocat>().Where(m => m.IsDel == "0" && (m.AreaNo == "B02" || m.AreaNo == "B05")).Select(m=>m.LocatNo).ToList(); + //鍒ゆ柇鏄惁鏄師杈呮枡鍑哄簱浠诲姟 璐ф灦鍌ㄤ綅=銆嬪钩搴撳偍浣� + if ( endLocateList.Contains(task.EndLocat) && PalletType == "0") + { + //淇敼鐩爣鍦板潃鐘舵�� + var endLocat = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.LocatNo == task.EndLocat); + endLocat.Status = "1"; + Db.Updateable(endLocat).ExecuteCommand(); + foreach (var item in stockDetail) + { + item.LocatNo = endLocat.LocatNo;//鍌ㄤ綅鏇存敼锛堟敼涓虹┖锛� + item.WareHouseNo = endLocat.WareHouseNo;//鎵�灞炰粨搴撴洿鏀癸紙鏀逛负绌猴級 + item.RoadwayNo = endLocat.RoadwayNo;//鎵�灞炲贩閬撴洿鏀癸紙鏀逛负绌猴級 + item.AreaNo = endLocat.AreaNo;//鎵�灞炲尯鍩熸洿鏀癸紙鏀逛负绌猴級 + } + } + Db.Updateable(stockDetail).ExecuteCommand(); + Db.Updateable(allot).ExecuteCommand(); + + if (userId != 0) + { + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鏃ュ織", taskNo, "瀹屾垚", $"鐐瑰嚮瀹屾垚鎸夐挳銆佸畬鎴愪换鍔″彿涓猴細{taskNo}鐨勪换鍔�", userId); + } + + Db.CommitTran(); + } + catch (Exception ex) + { + Db.RollbackTran(); + throw new Exception(ex.Message); + } + } + catch (Exception ex) + { + throw new Exception("瀹屾垚鍙嶉澶辫触锛�" + ex.Message); + } + } + + /// <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}鍌ㄤ綅瀵瑰簲鐨勪俊鎭�"); + } + //骞冲簱涓偍浣嶉泦鍚� + var pingKuLocate = Db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == "W04" && m.IsDel == "0").ToList(); + var pingKuList = pingKuLocate.Select(m => m.LocatNo).ToList(); + try + { + + task.Status = "5";//浠诲姟鐘舵�� + //鍒ゆ柇璧峰鐩爣浣嶇疆閮芥槸骞冲簱 + if (pingKuList.Contains(task.StartLocat) && pingKuList.Contains(task.EndLocat)) + { + task.Status = "2"; + } + + task.IsSend = 0; + task.IsCancel = 0; + task.IsFinish = 0; + task.FinishDate = DateTime.Now;//瀹屾垚鏃堕棿 + Db.Updateable(task).ExecuteCommand(); + + #region 淇敼鍌ㄤ綅鐘舵�� + + if (!pingKuList.Contains(task.StartLocat)) + { + //鍘熷偍浣嶆敼涓虹┖鍌ㄤ綅 0 + locate.Status = "0"; + Db.Updateable(locate).ExecuteCommand(); + } + + + //鐩爣鍌ㄤ綅鏀逛负鏈夎揣鐗� 1 + locate2.Status = "1"; + Db.Updateable(locate2).ExecuteCommand(); + //鍒ゆ柇璧峰鐩爣浣嶇疆閮芥槸骞冲簱 + if ( pingKuList.Contains(task.EndLocat)) + { + 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); + } + } + + /// <summary> + /// AGV浠诲姟鍙栬揣瀹屾垚鍙嶉 + /// </summary> + /// <param name="taskNo"></param> + public void AGVQuHuoSuccess(string taskNo) + { + try + { + Db.BeginTran(); + var task = Db.Queryable<LogTask>().First(m=>m.IsDel =="0" && m.TaskNo == taskNo); + if (task == null) + { + throw new Exception("娌℃湁鏌ヨ鍒颁换鍔′俊鎭�"); + } + if (task.Status!="1") + { + throw new Exception("浠诲姟鐘舵�佷笉鏄鍦ㄦ墽琛岋紝璇锋牳瀹�"); + } + var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == task.StartLocat && m.IsDel == "0"); + if (locate == null) + { + throw new Exception("娌℃湁鏌ヨ鍒拌捣濮嬪偍浣嶄俊鎭�"); + } + if (locate.WareHouseNo!="W04") + { + throw new Exception("璧峰鍌ㄤ綅涓嶆槸骞冲簱鍌ㄤ綅锛岃鏍稿疄"); + } + locate.Status = "0"; //鏇存敼鍌ㄤ綅鐘舵�佷负绌哄偍浣� + Db.Updateable(locate).ExecuteCommand(); + //鏌ヨ鍑烘墭鐩樹俊鎭� 鏇存敼搴撳瓨鍌ㄤ綅淇℃伅 + var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.PalletNo == task.PalletNo).ToList(); + foreach (var item in stockDetail) + { + item.WareHouseNo = ""; + item.AreaNo = ""; + item.RoadwayNo = ""; + item.LocatNo = ""; + } + Db.Updateable(stockDetail).ExecuteCommand(); + Db.CommitTran(); + } + catch (Exception e) + { + Db.RollbackTran(); + throw new Exception(e.Message); + } + } + + + #endregion + + #endregion + + //------------------------------------------------------------------ @@ -3635,338 +5922,6 @@ } } - //wcs杩斿洖鐨勬垚鍔熶俊鍙凤紙鍑哄簱鎴愬姛锛� - public void ExportSuccess(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 locateNo = stockDetail.Select(m => m.LocatNo).Distinct().FirstOrDefault(); - //褰撳墠浠诲姟涓殑鍌ㄤ綅淇℃伅 - var locate = Db.Queryable<SysStorageLocat>().First(m => m.LocatNo == locateNo); - try - { - task.Status = "2";//浠诲姟鐘舵�� - task.IsSend = 0; - task.IsCancel = 0; - task.IsFinish = 0; - task.FinishDate = DateTime.Now;//瀹屾垚鏃堕棿 - Db.Updateable(task).ExecuteCommand(); - if (locate != null) - { - locate.Status = "0"; // 鏇存敼褰撳墠浠诲姟涓殑鍌ㄤ綅鐘舵�侊紙鏀逛负0绌哄偍浣嶏級 - Db.Updateable(locate).ExecuteCommand(); - } - foreach (var item in stockDetail) - { - if (item.SkuNo == "100099")//鍒ゆ柇鏄惁鏄┖鎵樺嚭搴� - { - //鍒ゆ柇鎬诲簱瀛樻槸鍚︿负0锛屽鏋滀负0鍒犻櫎 鍚﹀垯鍑忓幓鏁伴噺 - var stock = Db.Queryable<DataStock>().First(m => m.SkuNo == "100099"); - - if (stock != null) - { - if (item.LockQty != null) - { - stock.Qty -= item.LockQty.Value; - stock.LockQty -= item.LockQty.Value; - Db.Updateable(stock).ExecuteCommand(); - } - - if (stock.Qty == 0) - { - Db.Deleteable(stock).ExecuteCommand(); - } - } - - //鎵樼洏鐘舵�佹敼涓烘湭浣跨敤 - var sCode = Db.Queryable<SysPallets>().First(m => m.PalletNo == item.PalletNo); - if (sCode != null) - { - sCode.Status = "0"; - Db.Updateable(sCode).ExecuteCommand(); - } - Db.Deleteable(item).ExecuteCommand(); - - #region 鎷h揣淇℃伅 - - //var pickQty = 0;//鎷h揣鐨勬暟閲� - //var comList = new List<BllCompleteDetail>(); - // //娣诲姞鎷h揣鏄庣粏 - // var completeDetail = new BllCompleteDetail() - // { - // SONo = "", - // SODetailNo = 0, - // ExportAllotId = 0, - // StockId = exportAllot.StockId, - // BoxNo = item.BoxNo, - // BoxNo2 = item.BoxNo2, - // BoxNo3 = item.BoxNo3, - - // LotNo = exportAllot.LotNo, - // LotText = exportAllot.LotText, - // SupplierLot = exportAllot.SupplierLot, - // SkuNo = exportAllot.SkuNo, - // SkuName = exportAllot.SkuName, - // Standard = exportAllot.Standard, - // PalletNo = palletNo, - // CompleteQty = item.Qty, - - // CreateUser = userId - // }; - // comList.Add(completeDetail); - - // //鍒犻櫎搴撳瓨绠辩爜鏄庣粏 - // Db.Deleteable(item).ExecuteCommand(); - // pickQty += item.Qty; - - // exportAllot.Status = "5"; //寰呭洖搴� : 宸插畬鎴� - // exportAllot.CompleteQty += item.Qty; //鎷h揣鏁伴噺 - // exportAllot.UpdateUser = userId; //淇敼浜� - // exportAllot.UpdateTime = serverTime; //淇敼鏃堕棿 - - // Db.Updateable(exportAllot).ExecuteCommand(); - - // //楠岃瘉鎷h揣淇℃伅鏄惁涓哄凡瀹屾垚 - // if (exportAllot.Status == "5") - // { - // break; - // } - - - //Db.Insertable(comList).ExecuteCommand(); - - - #endregion - - continue; - } - item.LocatNo = "";//鍌ㄤ綅鏇存敼锛堟敼涓虹┖锛� - item.WareHouseNo = "";//鎵�灞炰粨搴撴洿鏀癸紙鏀逛负绌猴級 - item.RoadwayNo = "";//鎵�灞炲贩閬撴洿鏀癸紙鏀逛负绌猴級 - item.AreaNo = "";//鎵�灞炲尯鍩熸洿鏀癸紙鏀逛负绌猴級 - 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 PalletType = "0"; //0锛氱墿鏂欐墭 1锛氱┖鎵樼洏鎵� - var soNo = ""; - var sku = ""; - foreach (var item in allot) - { - if (item.SkuNo == "100099") - { - item.Status = "5"; - item.CompleteQty += stockDetail[0].Qty; - PalletType = "1"; - } - else - { - item.Status = "2"; - soNo = item.SONo; - sku = item.SkuNo; - } - - } - //涓嬪彂鍥涙ゼ璋冨害AGV鐨勪换鍔� - if ((task.EndLocat == "outMode" || task.EndLocat == "outMode") && PalletType == "0") - { - foreach (var item in allot) - { - var detail = Db.Queryable<DataStockDetail>().First(m => m.Id == item.StockId); - detail.SONo = item.SONo; - Db.Updateable(detail).ExecuteCommand(); - } - - var locatePing = new AllotLocation().GetPingLocate(soNo, sku); - if (locatePing == null) - { - throw new Exception("骞冲簱鏈煡璇㈠埌绌轰綅缃�"); - } - var exTask = new LogTask //鍑哄簱浠诲姟 - { - TaskNo = new Common().GetMaxNo("TK"), - Sender = "WMS", - Receiver = "AGV", - IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 - - StartLocat = task.EndLocat,//璧峰浣嶇疆 - EndLocat = locatePing.LocatNo,//outMode,//鐩爣浣嶇疆 - PalletNo = task.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 = "浠�" + task.EndLocat + "鍒�" + locatePing.LocatNo + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 - }; - Db.Insertable(exTask).ExecuteCommand(); - - var outDto = new List<OutCommandDto> - { - new OutCommandDto() - { - PalletNo = task.PalletNo,//鎵樼洏鍙� - StartLocate = task.EndLocat, // 璧峰浣嶇疆 - StartRoadway = "",//鍏跺疄宸烽亾 - EndLocate = locatePing.LocatNo,//outMode, // 鐩爣浣嶇疆 - TaskNo = exTask.TaskNo, // 浠诲姟鍙� - TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)0鍏� 1鍑� 2绉� - OutMode = "", //鍑哄簱鍙� - Order = 1, - - //UnstackingMode = unstackingMode2,//鎷h揣鏂瑰紡 0鏈哄櫒鎷嗘墭鍑� 1 浜哄伐鎷h揣鍑� - //CompleteQty = outCount2, //鎷嗙殑浠舵暟 - //BoxexQty = outCount, //鎬讳欢鏁� - } - }; - // 姝e紡杩愯绋嬪簭鏀惧紑 - var list2 = outDto.Select(m => m.TaskNo).ToList(); - var jsonData = JsonConvert.SerializeObject(outDto); - string response = ""; - - try - { - var time1 = DateTime.Now;//鍙戦�佹椂闂� .ToString("yyyy-MM-dd HH:mm:ss") - //response = HttpHelper.DoPost(url, jsonData, "涓嬪彂缁橶CS鍑哄簱鍛戒护", "WCS"); - var time2 = DateTime.Now;//杩斿洖鏃堕棿 .ToString("yyyy-MM-dd HH:mm:ss") - - //////瑙f瀽杩斿洖鏁版嵁 - //var wcsModel = JsonConvert.DeserializeObject<WcsModel>(response); - //if (wcsModel.StatusCode == 0) - //{ - //鏇存敼浠诲姟鐨勫彂閫佽繑鍥炴椂闂�// - new TaskServer().EditTaskIssueOk(list2, time1, time2); - //} - //if (wcsModel.StatusCode == -1) - //{ - // new TaskServer().EditTaskIssueNo(list2, time1, time2, wcsModel.Msg); - // throw new Exception(wcsModel.Msg); - //} - } - catch (Exception ex) - { - throw new Exception(ex.Message); - } - } - - Db.Updateable(allot).ExecuteCommand(); - - if (userId != 0) - { - //娣诲姞鎿嶄綔鏃ュ織璁板綍 - var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鏃ュ織", taskNo, "瀹屾垚", $"鐐瑰嚮瀹屾垚鎸夐挳銆佸畬鎴愪换鍔″彿涓猴細{taskNo}鐨勪换鍔�", userId); - } - - - - Db.CommitTran(); - } - catch (Exception ex) - { - Db.RollbackTran(); - throw new Exception(ex.Message); - } - } - catch (Exception ex) - { - throw new Exception("瀹屾垚鍙嶉澶辫触锛�" + ex.Message); - } - } - - /// <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) { @@ -4289,727 +6244,7 @@ } #endregion - #region 鑷姩鍒嗛厤銆佸彇娑堝垎閰嶃�佽幏鍙栨墜鍔ㄥ垎閰嶇殑鏁版嵁婧愩�佹墜鍔ㄥ垎閰� - - // 鍒ゆ柇鏄惁鏄法鎵瑰嚭搴� - public bool IsCrossLotNo(string soNo) - { - try - { - //鏂规硶杩斿洖缁撴灉锛歜l - var bl = true; - //鏌ヨ鍗曟嵁淇℃伅 - var notice = Db.Queryable<BllExportNotice>().First(m=>m.SONo == soNo && m.IsDel == "0"); - //鍒ゆ柇鍗曟嵁绫诲瀷 鎴愬搧鍑哄簱銆侀鏂欏嚭搴擄紙鍏跺畠绫诲瀷璺冲嚭姝ゆ柟娉曪級 - if (notice.Type!="0" && notice.Type!="1") - { - return bl; - } - //鏌ヨ鍒板綋鍓嶅崟鎹笅鐨勫嚭搴撳崟鏄庣粏淇℃伅 - var noticeDetail = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == soNo).ToList(); - //搴撳瓨鎬昏〃淇℃伅 - var data = Db.Queryable<DataStock>().Where(m => m.IsDel == "0").ToList(); - //搴撳瓨鏄庣粏涓楠屽悎鏍兼壒娆¢泦鍚� - var dataDetail = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.InspectStatus == "1").GroupBy(g => g.LotNo).Select(s => s.LotNo).ToList(); - //搴撳瓨鏄庣粏琛ㄤ俊鎭� - var dataBoxInfo = Db.Queryable<DataBoxInfo>().Where(m => m.IsDel == "0").ToList(); - - - //寰幆鍗曟嵁鏄庣粏淇℃伅 - foreach (var item in noticeDetail) - { - //楠岃瘉鍏堣繘鍏堝嚭鍘熷垯 - //鑾峰彇褰撳墠鐗╂枡鐨勬墍鏈夋壒娆′俊鎭�(鎺掗櫎鍗曟嵁鐨勬壒娆★紝闃叉鍗曟嵁鎵�鍦ㄦ壒娆¢攣瀹氭暟閲忓悗楠岃瘉灏忎簬绛変簬0) - var forData = data.Where(m => m.SkuNo == item.SkuNo - && m.LotNo != item.LotNo && (m.Qty - m.FrozenQty - m.LockQty) > 0 - && dataDetail.Contains(m.LotNo)).Select(m=>m.LotNo).ToList(); - - forData.Add(item.LotNo); //闆嗗悎娣诲姞鍗曟嵁鐨勬壒娆� - //鑾峰彇鎺掑簭鍚庣殑绗竴涓壒娆� - var firstLotNo = forData.OrderBy(m => m).First(); - if (firstLotNo != item.LotNo) - { - bl = false; - break; - } - - //楠岃瘉鏁堟湡浼樺厛鍘熷垯 - var forDataBox = dataBoxInfo.Where(m => m.SkuNo == item.SkuNo && m.LotNo != item.LotNo && m.Qty > 0).ToList(); - //鑾峰彇褰撳墠鍗曟嵁鎵规鐨勬渶杩戞晥鏈� - var expirationTimedt = dataBoxInfo.Where(m => m.SkuNo == item.SkuNo - && m.LotNo == item.LotNo && m.Qty > 0).ToList(); - if (expirationTimedt.Count > 0) - { - var expirationTime = expirationTimedt.OrderBy(m => m.ExpirationTime).Select(m => m.ExpirationTime).First(); - //鑾峰彇搴撳瓨涓叾瀹冩壒娆℃晥鏈熷ぇ浜庡綋鍓嶅崟鎹壒娆$殑鏁堟湡鏁伴噺 - var num = forDataBox.Count(m => m.ExpirationTime > expirationTime); - //鍒ゆ柇鏄惁澶т簬0 - if (num > 0) - { - bl = false; - break; - } - } - else - { - var dataDetailtime = Db.Queryable<DataStockDetail>().Where(m => m.IsDel == "0" && m.InspectStatus == "1"). - Where(m => m.SkuNo == item.SkuNo - && m.LotNo == item.LotNo && m.Qty > 0) - .OrderBy(m => m.ExpirationTime) - .Select(m => m.ExpirationTime).First(); - - var num = forDataBox.Count(m => m.ExpirationTime > dataDetailtime); - //鍒ゆ柇鏄惁澶т簬0 - if (num > 0) - { - bl = false; - break; - } - } - } - - - return bl; - } - catch (Exception e) - { - throw new Exception(e.Message); - } - } - - //鑷姩鍒嗛厤 - public bool AutoAllot(string soNo, int userId) - { - try - { - #region 鍒ゆ柇鏉′欢锛堝嚭搴撳崟銆佸嚭搴撳崟鏄庣粏锛� - //鍑哄簱鍗� - var notice = Db.Queryable<BllExportNotice>().Where(m => m.IsDel == "0" && m.SONo == soNo).ToList().FirstOrDefault(); - if (notice == null) - { - throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅"); - } - if (notice.Status != "0" && notice.Status != "1") - { - throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负绛夊緟鎵ц鎴栭儴鍒嗗垎閰�;"); - } - //鍑哄簱鍗曟槑缁� - var detailList = Db.Queryable<BllExportNoticeDetail>().Where(m => m.IsDel == "0" && m.SONo == soNo && (m.AllotQty - m.Qty) <= 0).ToList(); - if (!detailList.Any()) - { - throw new Exception("鏈煡璇㈠埌绗﹀悎鍒嗛厤鏉′欢鐨勫嚭搴撳崟鎹槑缁嗕俊鎭�"); - } - - #endregion - - var exAllotList = new List<BllExportAllot>(); - var assign = new AllotSku(); - Db.BeginTran(); - try - { - List<SoDetailInfo> soDetailList = new List<SoDetailInfo>(); - foreach (var detail in detailList) - { - if (detail.AllotQty >= detail.Qty) - { - continue; - } - //杩橀渶瑕佸垎閰嶇殑鏁伴噺 - decimal needQty = detail.Qty - (detail.AllotQty == null? 0: decimal.Parse(detail.AllotQty.ToString())); - //搴撳瓨鏄庣粏 Status 0锛氬緟鍒嗛厤 1锛氶儴鍒嗗垎閰� 2锛氬凡鍒嗛厤 - var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.SkuNo == detail.SkuNo && (m.Qty - m.FrozenQty - m.LockQty + m.InspectQty) > 0 && (m.Status == "0" || m.Status == "1") && m.IsDel == "0").ToList(); - - - //鍒ゆ柇鍗曞彿鏄惁鎸囧畾鎵规 - if (!string.IsNullOrWhiteSpace(detail.LotNo)) - { - 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 && m.IsDel == "0" && string.IsNullOrWhiteSpace(m.LotNo)).ToList(); - } - - if (stockDetail.Count < 1) - { - throw new Exception("搴撳瓨涓嶈冻,鏃犲彲鍑哄簱搴撳瓨"); - } - //0:鎴愬搧鍑哄簱銆�1:棰嗘枡鍑哄簱銆�2锛氭娊妫�鍑哄簱銆�4:涓嶅悎鏍煎搧鍑哄簱銆�6:浠e偍鍑哄簱銆�7:鍏朵粬鍑哄簱銆� ///3:鍙栨牱鍑哄簱銆�5:涓棿鍝佸嚭搴撱��8:瀵勫瓨鍑哄簱 - if (notice.Type == "0" || notice.Type == "1" )//鎴愬搧銆侀鏂欏嚭搴� - { - stockDetail = stockDetail.Where(m => m.InspectStatus == "1").ToList(); - } - else if (notice.Type == "2" )//鎶芥鍑哄簱 - { - stockDetail = stockDetail.Where(m => m.InspectStatus == "0" || m.InspectStatus == "1" || m.InspectStatus == "2").ToList(); - } - else if (notice.Type == "6" || notice.Type == "7" ) //浠e偍銆佸叾瀹� - { - 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 (stockDetail.Sum(m=>m.Qty-m.LockQty) < needQty) - { - throw new Exception("搴撳瓨鏄庣粏鏁伴噺涓嶈冻"); - } - #region 鍖呰淇℃伅 - - var pNum = 0;//鎵樼洏鐗╁搧鏁伴噺 - var bNum = 0;//绠辩墿鍝佹暟閲� - //鍏叡鏂规硶鑾峰彇鍖呰鏁伴噺 - new Common().GetPackQtyInfo(detail.PackagNo,ref pNum,ref bNum); - - #endregion - - //鍙栧悎閫傚簱瀛樺晢鍝� - Dictionary<int, decimal> stockQtyDic = new Dictionary<int, decimal>();//鎵樺嚭搴撶墿鍝佹暟 - var qty = 0m; - //鍒嗛厤璐х墿 - qty += assign.AllotPallets(stockDetail, needQty, pNum, bNum, stockQtyDic, detail.LotNo, detail.IsMixBox); - foreach (var sc in stockQtyDic) - { - var s = stockDetail.FirstOrDefault(m => m.Id == sc.Key); - //娣诲姞鍒嗛厤琛ㄤ俊鎭� - var allot = new BllExportAllot - { - SONo = notice.SONo, - WaveNo = "", - SODetailNo = detail.Id, - StockId = sc.Key, - LotNo = s.LotNo, - LotText = s.LotText, - SupplierLot = s.SupplierLot, - SkuNo = s.SkuNo, - SkuName = s.SkuName, - Standard = s.Standard, - PalletNo = s.PalletNo, - IsBale = detail.IsBale == "0" ? "0" : s.IsBale == "1" ? "0" : "1", //鏄惁瑁瑰寘 - IsBelt = detail.IsBelt == "0" ? "0" : s.IsBelt == "1" ? "0" : "1", //鏄惁鎵撳甫 - - Qty = sc.Value, - CompleteQty = 0, - //BoxexQty = s.Qty, //绠卞唴鏁伴噺 - Status = "0", - LogisticsId = notice.LogisticsId, - IsAdvance = "0", - OutMode = "",//鍑哄簱鍙� - - CreateUser = userId, - CreateTime = DateTime.Now - }; - exAllotList.Add(allot); - - s.LockQty += stockQtyDic[s.Id]; - - if (s.LockQty == s.Qty) - { - s.Status = "2"; - } - else - { - s.Status = "1"; - } - - var sd = Db.Updateable(s).UpdateColumns(it => new { it.LockQty, it.Status }).ExecuteCommand(); - - } - detail.AllotQty += qty; - detail.UpdateUser = userId; - detail.UpdateTime = DateTime.Now; - if (detail.Status == "0") - { - detail.Status = "1"; - } - if (qty > detail.Qty) - { - //搴撳瓨鎬昏〃 - var stock = Db.Queryable<DataStock>().First(d => d.IsDel == "0" - && d.SkuNo == detail.SkuNo - && d.LotNo == detail.LotNo); - stock.LockQty += qty-detail.Qty; - Db.Updateable(stock).ExecuteCommand(); - - //娣诲姞鍥炰紶涓婃父绯荤粺閿佸畾鏁伴噺鏇存敼浠g爜 - SoDetailInfo soDetail = new SoDetailInfo(); - soDetail.OrderDetailCode = detail.OrderDetailCode; - soDetail.LockQty = qty - detail.Qty; - soDetail.LotNo = detail.LotNo; - - soDetailList.Add(soDetail); - } - - } - - var mx = Db.Updateable(detailList).ExecuteCommand(); - var fp = Db.Insertable(exAllotList).ExecuteCommand(); - - //淇敼鍒嗛厤鍗曟嵁鐨勭姸鎬� - if (notice.Status == "0" || notice.Status == "1") - { - var bl = 0; - var bl2 = 0; - foreach (var item in detailList) - { - if (item.AllotQty <= 0) - { - continue; - } - if (item.AllotQty < item.Qty) - { - bl = 1; - } - else - { - bl2 = 1; - } - } - - switch (bl2) - { - case 1 when bl == 1: - notice.Status = "1";//璇佹槑閮ㄥ垎鍒嗛厤鏁伴噺鍏ㄩ儴澶т簬绛変簬鍑哄簱鏁伴噺 淇敼涓哄凡鍒嗛厤 - break; - case 0 when bl == 1: - notice.Status = "1";//璇佹槑閮ㄥ垎鍒嗛厤鏁伴噺鍏ㄩ儴澶т簬绛変簬鍑哄簱鏁伴噺 淇敼涓哄凡鍒嗛厤 - break; - case 1 when bl == 0: - notice.Status = "2";//璇佹槑鍒嗛厤鏁伴噺鍏ㄩ儴澶т簬绛変簬鍑哄簱鏁伴噺 淇敼涓哄凡鍒嗛厤 - break; - case 0 when bl == 0: - //璇佹槑鎵�鏈夊垎閰嶆暟閲忓叏閮ㄥ皬浜庣瓑浜庡嚭搴撴暟閲� 涓嶅仛淇敼 - break; - } - - } - notice.UpdateUser = userId; - notice.UpdateTime = DateTime.Now; - var zd = Db.Updateable(notice).ExecuteCommand(); - - //娣诲姞鎿嶄綔鏃ュ織璁板綍 - var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", - notice.SONo, "鍒嗛厤", $"鑷姩鍒嗛厤浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId); - - if (zd > 0 && mx > 0 && fp > 0 && k) - { - #region 閫氳繃鎺ュ彛鍙戦�佽嚦erp - //绯荤粺瀵规帴鍚庢斁寮� - /*var jsonData = JsonConvert.SerializeObject(soDetailList); - - var response = HttpHelper.DoPost(url, jsonData, "搴撳瓨閿佸畾鏁伴噺鍙樻洿", "ERP"); - - var obj = JsonConvert.DeserializeObject<ErpModel>(response);//瑙f瀽杩斿洖鏁版嵁 - if (obj.Success != 0) - { - throw new Exception("涓婁紶澶辫触" + obj.Message); - }*/ - #endregion - - Db.CommitTran(); - return true; - } - Db.RollbackTran(); - return false; - } - catch (Exception e) - { - Db.RollbackTran(); - throw new Exception(e.Message); - } - } - catch (Exception e) - { - throw new Exception("鑷姩鍒嗛厤澶辫触锛�" + e.Message); - } - } - - //鍙栨秷鍒嗛厤 - public bool CancelAllot(string soNo, int userId) - { - try - { - - var notice = Db.Queryable<BllExportNotice>().Where(m => m.IsDel == "0" && m.SONo == soNo).ToList().FirstOrDefault(); - if (notice == null) - { - throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅"); - } - if (notice.Status != "1" && notice.Status != "2") - { - throw new Exception("鍙傛暟寮傚父,璇锋鏌ョ姸鎬佹槸鍚︿负宸插垎閰嶆垨閮ㄥ垎鍒嗛厤鎴栨潵婧愭槸鍚︽槸WMS"); - } - //璇ュ崟鎹殑鍒嗛厤淇℃伅 Status 0锛氫换鍔′笅鍙� 1锛氬緟鎷h揣 2锛氶儴鍒嗘嫞璐� 3锛氬緟鍥炲簱 4锛氬凡瀹屾垚 - var allotList = Db.Queryable<BllExportAllot>().Where(o => o.IsDel == "0" && o.SONo == soNo).ToList(); - //鏈夊凡鎵ц鐨勫垎閰嶆暟鎹笉鑳藉彇娑� - if (allotList.Any(o => o.Status != "0")) - { - throw new Exception("褰撳墠鍗曟嵁鐨勫垎閰嶄俊鎭凡鏈夋墽琛屼腑锛屼笉鑳藉彇娑堝垎閰�"); - } - List<SoDetailInfo> soDetailList = new List<SoDetailInfo>(); - //寮�鍚簨鍔� - Db.BeginTran(); - try - { - //鏌ヨ鍒嗛厤鐨勬槑缁� - var detail = Db.Queryable<BllExportNoticeDetail>().Where(d => d.SONo == soNo && d.AllotQty > 0 && d.IsDel == "0").ToList(); - foreach (var d in detail) - { - var orders = allotList.Where(o => o.SODetailNo == d.Id).ToList(); - foreach (var o in orders) - { - var pq = Db.Queryable<DataStockDetail>().Where(t => t.Id == o.StockId); - - var pq2 = !string.IsNullOrWhiteSpace(o.LotNo) ? pq.Where(t => t.LotNo == o.LotNo).ToList() : pq.Where(t => string.IsNullOrWhiteSpace(t.LotNo)).ToList(); - - var pallet = pq2.FirstOrDefault(); - if (pallet != null) - { - pallet.LockQty -= o.Qty; - pallet.Status = pallet.LockQty == 0 ? "0" : "1"; //濡傛灉閿佸畾鏁伴噺鏄�0鐘舵�佸彉鏇翠负寰呭垎閰� 鍚﹀垯涓洪儴鍒嗗垎閰� - Db.Updateable(pallet).ExecuteCommand(); - - //搴撳瓨鎬昏〃 - //var stock = Db.Queryable<DataStock>().First(t => t.SkuNo == pallet.SkuNo && t.IsDel == "0"); - //stock.LockQty -= o.Qty; - //Db.Updateable(stock).ExecuteCommand(); - } - - } - Db.Deleteable<BllExportAllot>(orders).ExecuteCommand(); - - if (d.AllotQty > d.Qty) - { - //搴撳瓨鎬昏〃 - var stock = Db.Queryable<DataStock>().First(m => m.IsDel == "0" && m.SkuNo == d.SkuNo && m.LotNo == d.LotNo); - stock.LockQty -= (decimal)d.AllotQty - d.Qty; - Db.Updateable(stock).ExecuteCommand(); - - //娣诲姞鍥炰紶涓婃父绯荤粺閿佸畾鏁伴噺鏇存敼浠g爜 - SoDetailInfo soDetail = new SoDetailInfo(); - soDetail.OrderDetailCode = d.OrderDetailCode; - soDetail.LockQty = (decimal)(d.Qty-d.AllotQty); - soDetail.LotNo = d.LotNo; - - soDetailList.Add(soDetail); - } - d.AllotQty = 0; - 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 = ""; - // } - - //} - } - - //鏌ヨ褰撳墠鍗曟嵁鏄惁宸叉坊鍔犲鏂欎换鍔� - if (notice.Type == "1") - { - var task = Db.Queryable<BllExportTimingTask>().First(m => m.IsDel == "0" && m.SoNo == soNo); - if (task!=null) - { - task.IsDel = "1"; - task.UpdateUser = userId; - task.UpdateTime = DateTime.Now; - Db.Updateable(task).ExecuteCommand(); - } - } - notice.Status = "0"; - notice.UpdateUser = userId; - notice.UpdateTime = DateTime.Now; - Db.Updateable(detail).ExecuteCommand(); - Db.Updateable(notice).ExecuteCommand(); - - //绯荤粺瀵规帴鍚庢斁寮� - /*var jsonData = JsonConvert.SerializeObject(soDetailList); - - var response = HttpHelper.DoPost(url, jsonData, "搴撳瓨閿佸畾鏁伴噺鍙樻洿", "ERP"); - - var obj = JsonConvert.DeserializeObject<ErpModel>(response);//瑙f瀽杩斿洖鏁版嵁 - if (obj.Success != 0) - { - throw new Exception("涓婁紶澶辫触" + obj.Message); - }*/ - - //娣诲姞鎿嶄綔鏃ュ織璁板綍 - var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "鍙栨秷鍒嗛厤", $"鍙栨秷鍒嗛厤浜嗗崟鎹彿涓簕notice.SONo}鐨勫崟鎹俊鎭�", userId); - Db.CommitTran(); - } - catch (Exception e) - { - Db.RollbackTran(); - throw new Exception(e.Message); - } - return true; - } - catch (Exception e) - { - throw new Exception("鍙栨秷鍒嗛厤澶辫触" + e.Message); - } - } - - /// <summary> - /// 缁存姢鍑哄簱鍗曞娉ㄤ俊鎭� - /// </summary> - /// <param name="id"></param> - /// <param name="demo"></param> - /// <param name="userId"></param> - public void EditNoticeDemo(int id, string demo, int userId) - { - try - { - var notice = Db.Queryable<BllExportNotice>().First(m => m.IsDel == "0" && m.Id == id); - if (notice == null) - { - throw new Exception("鏈煡璇㈠埌鍑哄簱鍗曟嵁淇℃伅"); - } - notice.Demo = demo + "".Trim(); - notice.UpdateUser = userId; - notice.UpdateTime = DateTime.Now; - - int i = Db.Updateable(notice).ExecuteCommand(); - if (i > 0) - { - //娣诲姞鎿嶄綔鏃ュ織 - new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "缂栬緫", $"缂栬緫浜嗗崟鎹彿涓簕notice.SONo}鐨勫娉ㄤ俊鎭�", userId); - } - } - catch (Exception ex) - { - throw new Exception(ex.Message); - } - } - - //鑾峰彇搴撳瓨鏄庣粏淇℃伅锛堝嚭搴撳崟鎵嬪姩鍒嗛厤閫夋嫨鏁版嵁婧愶級 - public List<StockDetailDto> GetHandOutList(int detailId, string houseNo, string roadwayNo, string locateNo, string msg, string palletNo) - { - try - { - var detail = Db.Queryable<BllExportNoticeDetail>().First(d => d.Id == detailId); - - #region 鍒ゆ柇鏉′欢 - - if (detail == null) - { - 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") - { - throw new Exception("鑾峰彇澶辫触锛屽嚭搴撳崟鐘舵�佷笉鍏佽!"); - } - #endregion - - Expression<Func<DataStockDetail, bool>> item = Expressionable.Create<DataStockDetail>() - .AndIF(!string.IsNullOrWhiteSpace(houseNo), m => m.WareHouseNo == houseNo) - .AndIF(!string.IsNullOrWhiteSpace(roadwayNo), m => m.RoadwayNo == roadwayNo) - .AndIF(!string.IsNullOrWhiteSpace(locateNo), m => m.LocatNo == locateNo) - .AndIF(!string.IsNullOrWhiteSpace(palletNo), m => m.PalletNo == palletNo) - .AndIF(!string.IsNullOrWhiteSpace(msg), - 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")) - .ToExpression();//娉ㄦ剰 杩欎竴鍙� 涓嶈兘灏� - - var list = Db.Queryable<DataStockDetail>().Where(item).Select(a => new StockDetailDto - { - Id = a.Id, - SkuNo = a.SkuNo, - SkuName = a.SkuName, - Standard = a.Standard, - LotNo = a.LotNo, - LotText = a.LotText, - SupplierLot = a.SupplierLot, - Qty = a.Qty - a.LockQty - a.FrozenQty, - LocatNo = a.LocatNo, - RoadwayNo = a.RoadwayNo, - PalletNo = a.PalletNo, - Demo = a.Demo, - }).ToList(); - - return list; - } - catch (Exception e) - { - throw new Exception(e.Message); - } - } - - //鎵嬪姩鍒嗛厤鍑哄簱鍗曟槑缁� - public void AddHandOutAllot(AddHandOutVm model, int userId) - { - try - { - #region 鍒ゆ柇鏉′欢 - //鏁版嵁楠岃瘉 - var detail = Db.Queryable<BllExportNoticeDetail>().First(a => a.IsDel == "0" && a.Id == model.Id); - if (detail == null) - { - 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); - if (notice == null) - { - throw new Exception("鎿嶄綔澶辫触锛屾湭鎵惧埌鎸囧畾鍑哄簱鍗曪紒"); - } - if (notice.Status == "3" && detail.AllotQty >= detail.Qty || notice.Status == "4" || notice.Status == "5") - { - 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 allotList = new List<BllExportAllot>(); - decimal outQtys = 0; - foreach (var st in model.StockList) - { - var stock = stockList.First(a => a.Id == st.StockId); - if (stock == null) - { - throw new Exception("鎿嶄綔澶辫触锛岄儴鍒嗗偍浣嶅簱瀛樺紓甯革紒"); - } - if (st.Qty > (stock.Qty - stock.LockQty - stock.FrozenQty)) // 杈撳叆鐨勬暟閲� - 鎵樼洏涓婂彲鐢ㄧ殑鏁伴噺锛堟墭鐩樹笂鏁伴噺-閿佸畾鐨勬暟閲�-鍐荤粨鐨勬暟閲忥級 - { - throw new Exception("鎿嶄綔澶辫触锛屽嚭搴撴暟閲忚秴鍑哄簱瀛樻暟閲忥紒"); - } - - 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 = "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(); - - - Db.Updateable(stock).UpdateColumns(it => new { it.LockQty, it.Status }).ExecuteCommand(); - outQtys += st.Qty; - } - Db.Insertable(allotList).ExecuteCommand(); - //淇敼鍗曟嵁鏄庣粏 - detail.AllotQty += outQtys; - detail.UpdateUser = userId; - detail.UpdateTime = DateTime.Now; - if (detail.Status == "0") - { - detail.Status = "1"; - } - - Db.Updateable(detail).ExecuteCommand(); - var detailList = Db.Queryable<BllExportNoticeDetail>() - .Where(m => m.IsDel == "0" && m.SONo == notice.SONo).ToList(); - //淇敼鍑哄簱鍗曠姸鎬� - if (notice.Status == "0" || notice.Status == "1") - { - decimal totalQty = 0; - decimal totalAllotQty = 0; - foreach (var item in detailList) - { - totalQty += item.Qty; - totalAllotQty += Convert.ToInt32(item.AllotQty); - } - - if (totalAllotQty >= totalQty) - { - notice.Status = "2";//璇佹槑鍒嗛厤鏁伴噺澶т簬绛変簬鍑哄簱鏁伴噺 淇敼涓哄凡鍒嗛厤 - } - else if (totalAllotQty < totalQty && totalAllotQty > 0) - { - notice.Status = "1";//璇佹槑鍒嗛厤鏁伴噺灏忎簬绛変簬鍑哄簱鏁伴噺 淇敼涓洪儴鍒嗗垎閰� - } - Db.Updateable(notice).ExecuteCommand(); - } - //娣诲姞鎿嶄綔鏃ュ織璁板綍 - var k = new OperationSOServer().AddLogOperationSo("鍑哄簱浣滀笟", "鍑哄簱鍗曟嵁", notice.SONo, "鍒嗛厤", $"鎵嬪姩鍒嗛厤浜嗗崟鎹彿涓簕notice.SONo}銆佺墿鏂欙細{detail.SkuNo}銆佹壒娆★細{detail.LotNo}鐨勫崟鎹俊鎭�", userId); - - Db.CommitTran(); - - } - catch (Exception e) - { - Db.RollbackTran(); - throw new Exception(e.Message); - } - } - - #endregion + /// <summary> /// 鍒ゆ柇鍑哄簱鏄惁闇�瑕佹媶绠� -- Gitblit v1.8.0