From 8cb4b3e784bcbe9fbbd95dec54f41528a6bb7fe0 Mon Sep 17 00:00:00 2001 From: Demo <Demo@DESKTOP-CPA90BF> Date: 星期日, 04 二月 2024 13:37:49 +0800 Subject: [PATCH] Merge branch 'csc' --- Wms/WMS.BLL/Logic/AllotLocation.cs | 51 +++++++----- Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs | 139 +++++++++++++++++++++++++++++----- 2 files changed, 147 insertions(+), 43 deletions(-) diff --git a/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs b/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs index 257b33d..472de61 100644 --- a/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs +++ b/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs @@ -699,20 +699,25 @@ //鏌ヨ鎵樼洏缁戝畾淇℃伅(鐘舵�佷负绛夊緟鍏ュ簱鐨�) var palletBindList = Db.Queryable<BllPalletBind>().Where(m => m.IsDel == "0" && m.PalletNo == palletNo && m.Status != "2").ToList(); var haveLocate = palletBindList.FirstOrDefault(m => !string.IsNullOrWhiteSpace(m.LocatNo)); - + + var skuList = Db.Queryable<SysMaterials>().Where(m => m.IsDel == "0").ToList(); + //鐗╂枡绫诲埆淇℃伅 + var skuCategoryList = Db.Queryable<SysMaterialCategory>().Where(m => m.IsDel == "0").ToList(); + + var skuNo = ""; //鍏ュ簱鐗╂枡 if (palletBindList.Count >= 1) //姝e父鍏ュ簱 { - var bindIdList = palletBindList.Select(m => m.Id).ToList(); + //var bindIdList = palletBindList.Select(m => m.Id).ToList(); //鍒ゆ柇鏄惁鏈夐浂绠� - foreach (var item in bindIdList) - { - var boxInfo = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BindNo == item); - if (boxInfo.Count(m => m.BitBoxMark == "1") > 0) - { - throw new Exception($"{palletNo}鎵樼洏涓婃湁闆剁锛岃鍏ラ浂绠卞簱锛�"); - } - } + //foreach (var item in bindIdList) + //{ + // var boxInfo = Db.Queryable<BllBoxInfo>().Where(m => m.IsDel == "0" && m.BindNo == item); + // if (boxInfo.Count(m => m.BitBoxMark == "1") > 0) + // { + // throw new Exception($"{palletNo}鎵樼洏涓婃湁闆剁锛岃鍏ラ浂绠卞簱锛�"); + // } + //} var palletBind = palletBindList.FirstOrDefault(m => m.Status == "1"); if (palletBind != null) @@ -740,6 +745,7 @@ { isHaveLocateNo = true; //宸叉湁鎸囧畾鍌ㄤ綅 } + if (palletBindList.First().Type == "0") //鐗╂枡鎵樺叆搴� { //鍒ゆ柇鏄惁缁戝畾鍗曟嵁鍙婂崟鎹姸鎬佹槸鍚︽甯� @@ -750,12 +756,26 @@ { throw new Exception("鎵樼洏瀛樺湪鐗╂枡鏈粦瀹氬叆搴撳崟锛屼笉鍙叆搴擄紒"); } - if (notice.Status == "3") { throw new Exception($"鍏ュ簱鍗晎item.ASNNo}宸插叧闂紝涓嶅彲鍏ュ簱锛�"); } } + + //鑾峰彇鐗╂枡瀛樻斁鍖哄煙 + var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m => + m.IsDel == "0" && m.Id == palletBindList.First().ASNDetailNo); + if (noticeDetail == null) + { + throw new Exception("鎵樼洏瀛樺湪鐗╂枡鏈粦瀹氬叆搴撳崟鏄庣粏锛屼笉鍙叆搴�"); + } + + skuNo = noticeDetail.SkuNo; + + } + else if(palletBindList.First().Type == "1")//绌烘墭鐩� + { + skuNo = "100099"; } } else //鍥炴祦鍏ュ簱 @@ -765,17 +785,19 @@ { throw new Exception($"{palletNo}鎵樼洏鏉$爜涓嶅叿鏈夌鐮佷俊鎭紝涓嶅彲鍏ュ簱锛�"); } - else - { - //鍒ゆ柇鏄惁鏈夐浂绠� - var detailIdList = stockDetail.Select(m => m.Id).ToList(); - var dataBoxInfo = Db.Queryable<DataBoxInfo>().Where(m => detailIdList.Contains(m.StockDetailId)).ToList(); - if (dataBoxInfo.Count(m => m.BitBoxMark == "1")>0) - { - throw new Exception($"{palletNo}鎵樼洏涓婃湁闆剁锛屼笉鍙叆搴擄紒"); - } + skuNo = stockDetail.First().SkuNo; + //else + //{ + // //鍒ゆ柇鏄惁鏈夐浂绠� + // var detailIdList = stockDetail.Select(m => m.Id).ToList(); + // var dataBoxInfo = Db.Queryable<DataBoxInfo>().Where(m => detailIdList.Contains(m.StockDetailId)).ToList(); + // if (dataBoxInfo.Count(m => m.BitBoxMark == "1")>0) + // { + // throw new Exception($"{palletNo}鎵樼洏涓婃湁闆剁锛屼笉鍙叆搴擄紒"); + // } - } + //} + //鑾峰彇瀵瑰簲鍥炲簱瑙勫垯 var function = Db.Queryable<SysFunSetting>().First(a => a.IsDel == "0" && a.FunSetName == "鎵樼洏鍥炲簱楠岃瘉" && a.IsEnable == "NO"); @@ -813,7 +835,31 @@ } else { - locate = allotLocate.GetSuiTableLocate(houseNo, roadwayNo); + var sku = skuList.FirstOrDefault(m => m.SkuNo == skuNo); + if (sku == null) + { + throw new Exception("鐗╂枡淇℃伅涓湭鏌ヨ鍒板叆搴撳崟鏄庣粏鍖呭惈鐨勭墿鏂欎俊鎭紝涓嶅彲鍏ュ簱"); + } + //鍒ゆ柇鐗╂枡鏄惁鍚湁绫诲埆淇℃伅 + if (string.IsNullOrWhiteSpace(sku.CategoryNo)) + { + throw new Exception($"鐗╂枡锛歿sku.SkuNo}鏈煡璇㈠埌绫诲埆淇℃伅"); + } + + var skuCategory = skuCategoryList.FirstOrDefault(m => m.CategoryNo == sku.CategoryNo); + if (skuCategory == null) + { + throw new Exception($"鏈湪绫诲埆淇℃伅涓煡璇㈠埌鐗╂枡锛歿sku.SkuNo}鍖呭惈鐨勭被鍒�"); + } + + var areaStr = skuCategory.AreaNo.Split(","); + var areaList = new List<string>(); + foreach (var item in areaStr) + { + areaList.Add(item); + } + + locate = allotLocate.GetSuiTableLocate(houseNo, areaList, roadwayNo); } Db.BeginTran(); try @@ -1479,7 +1525,54 @@ AllotLocation allotLocate = new AllotLocation(); try { - locate = allotLocate.GetSuiTableLocate("W01", taskModel.EndRoadway); + var skuNo = ""; + if (asnNo != "鍥炴祦鎵樼洏") + { + //鑾峰彇鐗╂枡瀛樻斁鍖哄煙 + var noticeDetail = Db.Queryable<BllArrivalNoticeDetail>().First(m => + m.IsDel == "0" && m.Id == palletBindModel.ASNDetailNo); + if (noticeDetail == null) + { + throw new Exception("鎵樼洏瀛樺湪鐗╂枡鏈粦瀹氬叆搴撳崟鏄庣粏锛屼笉鍙叆搴�"); + } + + skuNo = noticeDetail.SkuNo; + } + else + { + var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == model.PalletNo).ToList(); + if (stockDetail.Count == 0) + { + throw new Exception($"{model.PalletNo}鎵樼洏鏉$爜涓嶅叿鏈夌鐮佷俊鎭紝涓嶅彲鍏ュ簱锛�"); + } + skuNo = stockDetail.First().SkuNo; + } + + var sku = Db.Queryable<SysMaterials>().First(m =>m.IsDel =="0" && m.SkuNo == skuNo); + if (sku == null) + { + throw new Exception("鐗╂枡淇℃伅涓湭鏌ヨ鍒板叆搴撳崟鏄庣粏鍖呭惈鐨勭墿鏂欎俊鎭紝涓嶅彲鍏ュ簱"); + } + //鍒ゆ柇鐗╂枡鏄惁鍚湁绫诲埆淇℃伅 + if (string.IsNullOrWhiteSpace(sku.CategoryNo)) + { + throw new Exception($"鐗╂枡锛歿sku.SkuNo}鏈煡璇㈠埌绫诲埆淇℃伅"); + } + + var skuCategory = Db.Queryable<SysMaterialCategory>().First(m =>m.IsDel=="0" && m.CategoryNo == sku.CategoryNo); + if (skuCategory == null) + { + throw new Exception($"鏈湪绫诲埆淇℃伅涓煡璇㈠埌鐗╂枡锛歿sku.SkuNo}鍖呭惈鐨勭被鍒�"); + } + + var areaStr = skuCategory.AreaNo.Split(","); + var areaList = new List<string>(); + foreach (var item in areaStr) + { + areaList.Add(item); + } + + locate = allotLocate.GetSuiTableLocate("W01", areaList, taskModel.EndRoadway); } catch (Exception ex) { diff --git a/Wms/WMS.BLL/Logic/AllotLocation.cs b/Wms/WMS.BLL/Logic/AllotLocation.cs index a8dc8a5..4e7f3a8 100644 --- a/Wms/WMS.BLL/Logic/AllotLocation.cs +++ b/Wms/WMS.BLL/Logic/AllotLocation.cs @@ -18,9 +18,10 @@ /// 鑾峰彇鍚堥�傜殑搴撲綅 /// </summary> /// <param name="houseNo">浠撳簱鍙�</param> + /// <param name="areaList">鍖哄煙闆嗗悎</param> /// <param name="roadwayNo">宸烽亾鍙�(鍙┖)</param> /// <returns></returns> - public SysStorageLocat GetSuiTableLocate(string houseNo, string roadwayNo = "") + public SysStorageLocat GetSuiTableLocate(string houseNo, List<string> areaList,string roadwayNo = "") { try { @@ -33,6 +34,10 @@ { throw new Exception($"鏈煡璇㈠埌{houseNo}浠撳簱淇℃伅"); } + + var roadList = db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == houseNo && areaList.Contains(m.AreaNo) ) + .GroupBy(m=>m.RoadwayNo).Select(m=>m.RoadwayNo).ToList(); + //鏁版嵁瀛楀吀(鑾峰彇瀛楀吀涓粨搴撶被鍨�) var dic = db.Queryable<SysDictionary>().First(m => m.Id.ToString() == house.Type); switch (dic.DictName) @@ -46,6 +51,11 @@ { throw new Exception($"鏈煡璇㈠埌{roadwayNo}宸烽亾淇℃伅"); } + + if (!roadList.Contains(roadwayNo)) + { + throw new Exception("褰撳墠鐗╂枡瀛樻斁鍖哄煙鏈湪鎸囧畾宸烽亾涓�"); + } if (roadway.Status == "1") { throw new Exception($"{roadwayNo}宸烽亾宸插仠鐢�"); @@ -53,7 +63,7 @@ //鏌ヨ璇ュ贩閬撳苟涓旀爣蹇椾负姝e父鐨勭殑鍌ㄤ綅 roadwayList.Add(roadway); - var locate = GetLocateByRoadways(roadwayList); + var locate = GetLocateByRoadways(roadwayList,areaList); if (locate == null) { throw new Exception($"{roadwayNo}宸烽亾娌℃湁鍚堥�傜殑绌哄偍浣�"); @@ -63,9 +73,9 @@ //绔嬩綋搴撴病鏈夋寚瀹氬贩閬擄紙寰幆宸烽亾鏍规嵁浼樺厛绾у垎閰嶏級 case "绔嬩綋搴�" when string.IsNullOrWhiteSpace(roadwayNo): { - var roadwayList = db.Queryable<SysStorageRoadway>().Where(m => m.WareHouseNo == houseNo && m.Status == "0").OrderBy(m => new { m.Priority, m.RoadwayNo }).ToList(); + var roadwayList = db.Queryable<SysStorageRoadway>().Where(m => m.WareHouseNo == houseNo && m.Status == "0" && roadList.Contains(m.RoadwayNo)).OrderBy(m => new { m.Priority, m.RoadwayNo }).ToList(); - var locate = GetLocateByRoadways(roadwayList); + var locate = GetLocateByRoadways(roadwayList,areaList); if (locate == null) { throw new Exception($"{houseNo}浠撳簱宸插惎鐢ㄧ殑宸烽亾涓病鏈夊悎閫傜殑绌哄偍浣�"); @@ -96,9 +106,9 @@ /// 鑾峰彇鍚堥�傜┖鍌ㄤ綅淇℃伅锛堟牴鎹贩閬撻泦鍚堝垽鏂級 /// </summary> /// <param name="roadways">宸烽亾闆嗗悎</param> - /// <param name="areaNo">鍖哄煙鍙�(瀛愭瘝鎵樼洏鍖�)</param> + /// <param name="areaList">鍖哄煙闆嗗悎</param> /// <returns></returns> - private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways) + private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways,List<string> areaList) { try { @@ -181,7 +191,7 @@ continue; } //鍙栧綋鍓嶅贩鏈�浼樹綅缃� - locate = GetLocateByRoadway(l.RoadwayNo, topOrBom, leftOrRight); + locate = GetLocateByRoadway(l.RoadwayNo, topOrBom, leftOrRight, areaList); //褰撳墠宸锋湁浣嶇疆鍒欓��鍑� if (locate != null) { @@ -193,7 +203,7 @@ { if (log != null) { - locate = GetLocateByRoadway(log.RoadwayNo, topOrBom, leftOrRight); + locate = GetLocateByRoadway(log.RoadwayNo, topOrBom, leftOrRight, areaList); } } } @@ -201,7 +211,7 @@ { foreach (var item in roadways) { - locate = GetLocateByRoadway(item.RoadwayNo, topOrBom, leftOrRight); + locate = GetLocateByRoadway(item.RoadwayNo, topOrBom, leftOrRight, areaList); } } @@ -221,17 +231,18 @@ /// <param name="roadwayNo">宸烽亾鍙�</param> /// <param name="topOrBom">鍌ㄤ綅鍒嗛厤涓婁笅 0 涓� 1 涓�</param> /// <param name="leftOrRight">鍌ㄤ綅鍒嗛厤涓婁笅 0 宸� 1 鍙�</param> - /// <param name="areaNo">鍖哄煙鍙�(瀛愭瘝鎵樼洏鍖�)</param> + /// <param name="areaList">鍖哄煙闆嗗悎</param> /// <returns></returns> - private SysStorageLocat GetLocateByRoadway(string roadwayNo, int topOrBom, int leftOrRight) + private SysStorageLocat GetLocateByRoadway(string roadwayNo, int topOrBom, int leftOrRight,List<string> areaList) { var db = DataContext.Db; var str = "''"; //鏌ヨ璇ュ贩閬撳苟涓旀爣蹇椾负姝e父鐨勭殑鍌ㄤ綅 - do + SysStorageLocat data; + + foreach (var area in areaList) { - var sql = $@"select * from SysStorageLocat where IsDel = 0 and Flag = 0 and [Status] = 0 and RoadwayNo = '{roadwayNo}' and LocatNo not in({str}) "; - //sql += !string.IsNullOrWhiteSpace(areaNo) ? $"and AreaNo = '{areaNo}' " : ""; + var sql = $@"select * from SysStorageLocat where IsDel = 0 and Flag = 0 and [Status] = 0 and RoadwayNo = '{roadwayNo}' and AreaNo = '{area}' and LocatNo not in({str}) "; sql += "order by "; sql += topOrBom == 0 ? "Layer desc, " : "Layer, "; sql += leftOrRight == 0 ? "[Column], " : "[Column] desc, "; @@ -239,16 +250,16 @@ var locateList = db.Ado.SqlQuery<SysStorageLocat>(sql); - var data = locateList.FirstOrDefault(); + data = locateList.FirstOrDefault(); if (data != null) { return data; } - else - { - return null; - } - } while (true); + } + + return null; + + } } -- Gitblit v1.8.0