From b7cece216d84ef5b079e99f4843485e092cc4c33 Mon Sep 17 00:00:00 2001 From: Demo <Demo@DESKTOP-CPA90BF> Date: 星期二, 20 二月 2024 16:37:51 +0800 Subject: [PATCH] 添加申请巷道server --- Wms/WMS.IBLL/IBllAsnServer/IPalletBindServer.cs | 7 + Wms/WMS.BLL/Logic/AllotLocation.cs | 28 ++- Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs | 340 ++++++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 351 insertions(+), 24 deletions(-) diff --git a/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs b/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs index a5e06a7..fe0f1cc 100644 --- a/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs +++ b/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs @@ -664,6 +664,314 @@ } #endregion + // 鐢宠宸烽亾 + public OutCommandDto RequestRoadWay(string palletNo, string houseNo) + { + try + { + //楠岃瘉鎵樼洏鏉$爜鏄惁涓虹┖ + if (string.IsNullOrEmpty(palletNo)) + { + throw new Exception("璇疯緭鍏ヨ鐢宠鐨勬墭鐩樻潯鐮�"); + } + //楠岃瘉鎵�灞炰粨搴撴槸鍚︿负绌� + if (string.IsNullOrEmpty(houseNo)) + { + throw new Exception("璇烽�夋嫨鎵�灞炰粨搴�"); + } + //楠岃瘉鏄惁涓哄钩搴撳叆搴� + if (houseNo == "W02") + { + throw new Exception("骞冲簱璇蜂娇鐢≒DA鎵嬫寔杩涜骞冲簱鍏ュ簱"); + } + + OutCommandDto comDto;//杩斿洖wcs鐨勫叆搴撳懡浠� + var isHaveLocateNo = false; //鎵樼洏缁戝畾淇℃伅涓槸鍚﹀凡鏈夋寚瀹氬偍浣� + + var stock = Db.Queryable<SysPallets>().First(a => a.PalletNo == palletNo);//鎵樼洏淇℃伅 + + //鍒ゆ柇鎵樼洏鏉$爜鏄惁鏈夋晥 + if (stock == null) + { + throw new Exception("鎵樼洏鏉$爜涓嶅彈WMS绠$悊锛屼笉鍙叆搴擄紒"); + } + + #region + + //鏌ヨ鎵樼洏缁戝畾淇℃伅(鐘舵�佷负绛夊緟鍏ュ簱鐨�) + 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 palletBind = palletBindList.FirstOrDefault(m => m.Status == "1");//鏌ヨ鏄惁鏈夋鍦ㄦ墽琛岀殑鎵樼洏缁戝畾 + if (palletBind != null) + { + var beingTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0" && m.TaskNo == palletBind.TaskNo); + if (beingTask == null) + { + throw new Exception("璇ユ墭鐩樻鍦ㄥ叆搴擄紝浣嗘湭鏌ヨ鍒颁换鍔′俊鎭�"); + } + comDto = new OutCommandDto() + { + PalletNo = palletNo,//鎵樼洏鍙� + StartRoadway = beingTask.StartRoadway, // 璧峰宸烽亾 + StartLocate = "", // 璧峰浣嶇疆 + EndLocate = beingTask.EndLocat, // 鐩爣浣嶇疆 + EndRoadway = beingTask.EndRoadway, // 鐩爣宸烽亾 + TaskNo = beingTask.TaskNo, // 浠诲姟鍙� + TaskType = "0",// 浠诲姟绫诲瀷 (鍑哄簱) + OutMode = "", //鐩爣鍦板潃 + Order = 1 + }; + return comDto; + } + if (haveLocate != null) + { + isHaveLocateNo = true; //宸叉湁鎸囧畾鍌ㄤ綅 + } + + if (palletBindList.First().Type == "0") //鐗╂枡鎵樺叆搴� + { + //鍒ゆ柇鏄惁缁戝畾鍗曟嵁鍙婂崟鎹姸鎬佹槸鍚︽甯� + foreach (var item in palletBindList) + { + var notice = Db.Queryable<BllArrivalNotice>().First(m => m.IsDel == "0" && m.ASNNo == item.ASNNo); + if (notice == null) + { + 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 //鍥炴祦鍏ュ簱 + { + var stockDetail = Db.Queryable<DataStockDetail>().Where(m => m.PalletNo == palletNo).ToList(); + if (stockDetail.Count == 0) + { + throw new Exception($"{palletNo}鎵樼洏鏉$爜涓嶅叿鏈夌鐮佷俊鎭紝涓嶅彲鍏ュ簱锛�"); + } + skuNo = stockDetail.First().SkuNo; + + //鑾峰彇瀵瑰簲鍥炲簱瑙勫垯 + var function = Db.Queryable<SysFunSetting>().First(a => a.IsDel == "0" && a.FunSetName == "鎵樼洏鍥炲簱楠岃瘉" && a.IsEnable == "NO"); + #region 鎵樼洏鍥炲簱瑙勫垯 + + if (function != null) + { + //鎷h揣瀹屾垚鍚庡厑璁告墭鐩樺洖搴� + if (function.SetValue == "CompletePick") + { + var allot = Db.Queryable<BllExportAllot>().First(a => a.IsDel == "0" && a.LotNo == stockDetail[0].LotNo && a.PalletNo == palletNo && a.SkuNo == stockDetail[0].SkuNo); + + //楠岃瘉鎷h揣鏄庣粏鏄惁瀛樺湪 + if (allot != null) + { + //楠岃瘉褰撳墠鎵樼洏鎷h揣淇℃伅鏄惁宸插畬鎴� + if (allot.Status != "5") + { + throw new Exception("褰撳墠鎵樼洏鎷h揣淇℃伅鏈畬鎴愶紝璇峰畬鎴愬悗鍥炲簱锛�"); + } + } + } + } + + + #endregion + } + + var allotLocate = new AllotLocation(); + + SysStorageLocat locate; + + 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); + } + + var laneAllot = 0; //鍌ㄤ綅璺冲贩鍒嗛厤 0:璺崇潃鍒嗛厤(涓�涓竴涓垎閰�)1:宸烽亾鎸夌収浼樺厛绾у垎閰嶏紝鍚屼紭鍏堢骇椤哄簭鍒嗛厤(涓�涓贩閬撴弧浜嗗啀鍒嗛厤涓嬩竴涓殑宸烽亾鍌ㄤ綅) + var funSet3 = Db.Queryable<SysFunSetting>().First(m => m.IsDel == "0" && m.FunSetName == "鍌ㄤ綅璺冲贩鍒嗛厤" && m.IsEnable == "NO"); + if (funSet3 != null) + { + switch (funSet3.SetValue) + { + case "JumpLaneAllot": + laneAllot = 0;//绔嬪簱鍌ㄤ綅鍒嗛厤 宸烽亾鍚屼紭鍏堢骇宸烽亾璺崇潃鍒嗛厤(涓�涓竴涓垎閰�) + break; + case "RankLaneAllot": + laneAllot = 1;//绔嬪簱鍌ㄤ綅鍒嗛厤 宸烽亾鎸夌収浼樺厛绾у垎閰嶏紝鍚屼紭鍏堢骇椤哄簭鍒嗛厤(涓�涓贩閬撴弧浜嗗啀鍒嗛厤涓嬩竴涓殑宸烽亾鍌ㄤ綅) + break; + default: + laneAllot = 1;// 榛樿 璺崇潃鍒嗛厤 + break; + } + } + var roadList = Db.Queryable<SysStorageLocat>().Where(m => m.WareHouseNo == houseNo && areaList.Contains(m.AreaNo)) + .GroupBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList(); + + SysRoadwayUseLog useLog = Db.Ado.SqlQuerySingle<SysRoadwayUseLog>("select Top(1) * from SysRoadwayUseLog where IsDel=0 order by CreateTime desc"); //宸烽亾鏈�鍚庝竴娆′娇鐢ㄨ褰� + + var bindNum = Db.Queryable<BllPalletBind>() + .Where(m => m.IsDel == "0" && m.Status == "0" && !string.IsNullOrWhiteSpace(m.RoadwayNo)) + .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count(); + + var roadNo = ""; + if (laneAllot == 0)//璺冲贩閬撳钩鍧囧垎閰� + { + //濡傛灉鍚岀骇宸烽亾鏈夊鏉″垯鏌ヤ笂娆′綅缃棩蹇� + if (roadList.Count > 1) + { + useLog = Db.Queryable<SysRoadwayUseLog>().OrderByDescending(l => l.Id).First(); + } + //鍙栧悇宸烽亾鎵�鏈夋帓绗竴涓悎閫備綅 + foreach (var l in roadList) + { + //濡傛灉涓婃鏄綋鍓嶅贩閬撳垯璺冲嚭 + if (useLog != null && l == useLog.RoadwayNo) + { + continue; + } + + var locateCount = Db.Queryable<SysStorageLocat>() + .Where(m => m.Status == "0" && m.Flag == "0" && areaList.Contains(m.AreaNo)).Count(); + if (locateCount- bindNum>0) + { + roadNo = l; + } + //褰撳墠宸锋湁浣嶇疆鍒欓��鍑� + if (roadNo != null) + { + break; + } + } + //濡傛灉璺冲贩閬撳苟涓旀湭鎵惧埌鍚堥�傜┖鍌ㄤ綅,鍒欒烦鍒版渶鍚庝竴娆′娇鐢ㄧ殑宸烽亾鏌ヨ + + if (roadNo == null) + { + if (useLog != null) + { + roadNo = useLog.RoadwayNo; + } + } + } + else//鎸夌収宸烽亾浼樺厛绾у垎閰� + { + foreach (var item in roadList) + { + roadNo = item; + if (roadNo != null) + { + break; + } + } + } + + if (string.IsNullOrWhiteSpace(roadNo)) + { + throw new Exception("鏈煡璇㈠埌绌哄偍浣嶅贩閬�"); + } + + Db.BeginTran(); + try + { + if (roadNo != null) + { + //娣诲姞宸烽亾浣跨敤璁板綍 + var log = new SysRoadwayUseLog + { + RoadwayNo = roadNo , + WareHouseNo = houseNo, + Row = 0, + Column = 0, + Layer = 0, + }; + Db.Insertable(log).ExecuteCommand(); + } + + if (palletBindList.Count >= 1) + { + foreach (var item in palletBindList) + { + item.WareHouseNo = houseNo; + item.RoadwayNo = roadNo; + item.TaskNo = ""; + } + Db.Updateable(palletBindList).ExecuteCommand(); + } + Db.CommitTran(); + comDto = new OutCommandDto() + { + PalletNo = palletNo,//鎵樼洏鍙� + StartRoadway = "", + StartLocate = "", // 璧峰浣嶇疆 + EndLocate = "", // 鐩爣浣嶇疆 + EndRoadway = roadNo, // 鐩爣宸烽亾 + TaskNo = "", // 浠诲姟鍙� + TaskType = "0",// 浠诲姟绫诲瀷 (鍑哄簱) + OutMode = "", //鐩爣鍦板潃 + Order = 1 + }; + + } + catch (Exception ex) + { + Db.RollbackTran(); + throw new Exception(ex.Message); + } + #endregion + + return null; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + } + //鐢宠鍌ㄤ綅 public OutCommandDto RequestLocation(string palletNo, string houseNo, string roadwayNo) { @@ -682,7 +990,7 @@ //楠岃瘉鏄惁涓哄钩搴撳叆搴� if (houseNo == "W02") { - throw new Exception("闆剁搴撹浣跨敤PDA鎵嬫寔杩涜骞冲簱鍏ュ簱"); + throw new Exception("骞冲簱璇蜂娇鐢≒DA鎵嬫寔杩涜骞冲簱鍏ュ簱"); } OutCommandDto comDto;//杩斿洖wcs鐨勫叆搴撳懡浠� @@ -864,21 +1172,21 @@ Db.BeginTran(); try { - if (locate != null) - { - //娣诲姞宸烽亾浣跨敤璁板綍 - var log = new SysRoadwayUseLog - { - RoadwayNo = locate.RoadwayNo, - LocateNo = locate.LocatNo, - WareHouseNo = locate.WareHouseNo, - Row = locate.Row, - Column = locate.Column, - Layer = locate.Layer, - Depth = locate.Depth - }; - Db.Insertable(log).ExecuteCommand(); - } + //if (locate != null) + //{ + // //娣诲姞宸烽亾浣跨敤璁板綍 + // var log = new SysRoadwayUseLog + // { + // RoadwayNo = locate.RoadwayNo, + // LocateNo = locate.LocatNo, + // WareHouseNo = locate.WareHouseNo, + // Row = locate.Row, + // Column = locate.Column, + // Layer = locate.Layer, + // Depth = locate.Depth + // }; + // Db.Insertable(log).ExecuteCommand(); + //} var taskNo = new Common().GetMaxNo("TK"); var exTask = new LogTask //鍏ュ簱浠诲姟 diff --git a/Wms/WMS.BLL/Logic/AllotLocation.cs b/Wms/WMS.BLL/Logic/AllotLocation.cs index 04f23da..eb574c4 100644 --- a/Wms/WMS.BLL/Logic/AllotLocation.cs +++ b/Wms/WMS.BLL/Logic/AllotLocation.cs @@ -63,7 +63,7 @@ //鏌ヨ璇ュ贩閬撳苟涓旀爣蹇椾负姝e父鐨勭殑鍌ㄤ綅 roadwayList.Add(roadway); - var locate = GetLocateByRoadways(roadwayList,areaList); + var locate = GetLocateByRoadways(roadwayList,areaList,true); if (locate == null) { throw new Exception($"{roadwayNo}宸烽亾娌℃湁鍚堥�傜殑绌哄偍浣�"); @@ -107,8 +107,9 @@ /// </summary> /// <param name="roadways">宸烽亾闆嗗悎</param> /// <param name="areaList">鍖哄煙闆嗗悎</param> + /// <param name="isRoadway">鏄惁鎸囧畾宸烽亾</param> /// <returns></returns> - private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways,List<string> areaList) + private SysStorageLocat GetLocateByRoadways(List<SysStorageRoadway> roadways,List<string> areaList,bool isRoadway = false) { try { @@ -185,11 +186,15 @@ //鍙栧悇宸烽亾鎵�鏈夋帓绗竴涓悎閫備綅 foreach (var l in roadways) { - //濡傛灉涓婃鏄綋鍓嶅贩閬撳垯璺冲嚭 - if (log != null && l.RoadwayNo == log.RoadwayNo) + if (!isRoadway) { - continue; + //濡傛灉涓婃鏄綋鍓嶅贩閬撳垯璺冲嚭 + if (log != null && l.RoadwayNo == log.RoadwayNo) + { + continue; + } } + //鍙栧綋鍓嶅贩鏈�浼樹綅缃� locate = GetLocateByRoadway(l.RoadwayNo, topOrBom, leftOrRight, areaList); //褰撳墠宸锋湁浣嶇疆鍒欓��鍑� @@ -199,11 +204,14 @@ } } //濡傛灉璺冲贩閬撳苟涓旀湭鎵惧埌鍚堥�傜┖鍌ㄤ綅,鍒欒烦鍒版渶鍚庝竴娆′娇鐢ㄧ殑宸烽亾鏌ヨ - if (locate == null) + if (!isRoadway) { - if (log != null) + if (locate == null) { - locate = GetLocateByRoadway(log.RoadwayNo, topOrBom, leftOrRight, areaList); + if (log != null) + { + locate = GetLocateByRoadway(log.RoadwayNo, topOrBom, leftOrRight, areaList); + } } } } @@ -212,6 +220,10 @@ foreach (var item in roadways) { locate = GetLocateByRoadway(item.RoadwayNo, topOrBom, leftOrRight, areaList); + if (locate != null) + { + break; + } } } diff --git a/Wms/WMS.IBLL/IBllAsnServer/IPalletBindServer.cs b/Wms/WMS.IBLL/IBllAsnServer/IPalletBindServer.cs index 82c43ec..b6660a2 100644 --- a/Wms/WMS.IBLL/IBllAsnServer/IPalletBindServer.cs +++ b/Wms/WMS.IBLL/IBllAsnServer/IPalletBindServer.cs @@ -69,6 +69,13 @@ #endregion /// <summary> + /// 鐢宠宸烽亾 + /// </summary> + /// <param name="palletNo">鎵樼洏鍙�</param> + /// <param name="houseNo">浠撳簱鍙�</param> + /// <returns></returns> + OutCommandDto RequestRoadWay(string palletNo, string houseNo); + /// <summary> /// 鐢宠绌哄偍浣� /// </summary> /// <param name="palletNo">鎵樼洏鍙�</param> -- Gitblit v1.8.0