From 75efeb2ec42214f7a70f6cccc3374ccf458740be Mon Sep 17 00:00:00 2001 From: chengsc <Demo@DESKTOP-CPA90BF> Date: 星期六, 27 七月 2024 17:27:25 +0800 Subject: [PATCH] 修改问题 --- Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs | 449 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 449 insertions(+), 0 deletions(-) diff --git a/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs b/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs index 139ff0c..e213d45 100644 --- a/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs +++ b/Wms/WMS.BLL/BllAsnServer/PalletBindServer.cs @@ -1186,6 +1186,279 @@ } } + // 鐢宠宸烽亾 鍙傝妯″紡 + public OutCommandDto RequestRoadWayModel(string palletNo, string houseNo) + { + try + { + #region 楠岃瘉鎵樼洏鍚堟硶鎬� + //楠岃瘉鎵樼洏鏉$爜鏄惁涓虹┖ + if (string.IsNullOrEmpty(palletNo)) + { + throw new Exception("璇疯緭鍏ヨ鐢宠鐨勬墭鐩樻潯鐮�"); + } + //楠岃瘉鎵�灞炰粨搴撴槸鍚︿负绌� + if (string.IsNullOrEmpty(houseNo)) + { + throw new Exception("璇烽�夋嫨鎵�灞炰粨搴�"); + } + //楠岃瘉鏄惁涓哄钩搴撳叆搴� + if (houseNo == "W02") + { + throw new Exception("骞冲簱璇蜂娇鐢≒DA鎵嬫寔杩涜骞冲簱鍏ュ簱"); + } + + var stock = Db.Queryable<SysPallets>().First(a => a.PalletNo == palletNo);//鎵樼洏淇℃伅 + //鍒ゆ柇鎵樼洏鏉$爜鏄惁鏈夋晥 + if (stock == null) + { + throw new Exception("鎵樼洏鏉$爜涓嶅彈WMS绠$悊锛屼笉鍙叆搴擄紒"); + } + #endregion + + + OutCommandDto comDto;//杩斿洖wcs鐨勫叆搴撳懡浠� + #region + + #region 鍒ゆ柇浠诲姟鏄惁宸茬粡瀛樺湪锛岃嫢瀛樺湪鐩存帴杩斿洖浠诲姟锛� + var beingTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0" + && (m.Status == "0" || m.Status == "1") && m.PalletNo == palletNo && m.Type == "0"); + if (beingTask != null) + { + comDto = new OutCommandDto() + { + PalletNo = palletNo,//鎵樼洏鍙� + StartRoadway = beingTask.StartRoadway, // 璧峰宸烽亾 + StartLocate = "", // 璧峰浣嶇疆 + EndLocate = beingTask.EndLocat, // 鐩爣浣嶇疆 + EndRoadway = beingTask.EndRoadway, // 鐩爣宸烽亾 + TaskNo = beingTask.TaskNo, // 浠诲姟鍙� + TaskType = "0",// 浠诲姟绫诲瀷 (鍑哄簱) + OutMode = "", //鐩爣鍦板潃 + Order = 1 + }; + if (beingTask.IsSuccess == 0) + { + beingTask.IsSuccess = 1; + beingTask.Status = "1"; + Db.Updateable(beingTask).ExecuteCommand(); + } + + return comDto; + } + #endregion + + + + var areaNoStr = "婕旂ず鍖哄煙"; + var allotLocate = new AllotLocation(); + + #region 鏍规嵁sku纭鍖哄煙鍒掑垎 + + 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 && m.AreaNo == areaNoStr) + .GroupBy(m => m.RoadwayNo).OrderBy(m => m.RoadwayNo).Select(m => m.RoadwayNo).ToList(); + + SysRoadwayUseLog useLog = Db.Queryable<SysRoadwayUseLog>().Where(m => m.IsDel == "0" && roadList.Contains(m.RoadwayNo)).OrderByDescending(l => l.Id).First(); //宸烽亾鏈�鍚庝竴娆′娇鐢ㄨ褰� + #endregion + + + #region 纭畾宸烽亾鎺掑簭 + List<string> roadList2 = new List<string>(); + List<string> roadSmall = new List<string>(); + List<string> roadLarge = new List<string>(); + if (useLog != null) + { + roadList2.Add(useLog.RoadwayNo); + foreach (var r in roadList) + { + if (r == useLog.RoadwayNo) + { + continue; + } + //濡傛灉缁撴灉涓�0锛屽垯璇存槑涓や釜瀛楃涓茬浉绛夛紱 ABC BCE + //濡傛灉缁撴灉灏忎簬0锛屽垯璇存槑绗竴涓瓧绗︿覆灏忎簬绗簩涓瓧绗︿覆锛� + //濡傛灉缁撴灉澶т簬0锛屽垯璇存槑绗竴涓瓧绗︿覆澶т簬绗簩涓瓧绗︿覆銆� + var bol = String.CompareOrdinal(r, useLog.RoadwayNo); + if (bol < 0) + { + roadSmall.Add(r); + } + if (bol > 0) + { + roadLarge.Add(r); + } + } + roadList2.AddRange(roadLarge); + roadList2.AddRange(roadSmall); + } + + roadList = roadList2; + #endregion + + + var roadNo = ""; + if (laneAllot == 0)//璺冲贩閬撳钩鍧囧垎閰� + { + //鍙栧悇宸烽亾鎵�鏈夋帓绗竴涓悎閫備綅 + 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" && m.AreaNo == areaNoStr && m.RoadwayNo == l).Count(); + + var taskNum = Db.Queryable<LogTask>() + .Where(m => m.IsDel == "0" && m.Type == "0" && (m.Status == "0" || m.Status == "1") && m.EndRoadway == l) + .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count(); + if (locateCount - taskNum > 0) + { + roadNo = l; + } + //褰撳墠宸锋湁浣嶇疆鍒欓��鍑� + if (roadNo != null) + { + break; + } + } + //濡傛灉璺冲贩閬撳苟涓旀湭鎵惧埌鍚堥�傜┖鍌ㄤ綅,鍒欒烦鍒版渶鍚庝竴娆′娇鐢ㄧ殑宸烽亾鏌ヨ + + if (roadNo == null) + { + if (useLog != null) + { + var locateCount = Db.Queryable<SysStorageLocat>() + .Where(m => m.Status == "0" && m.Flag == "0" && m.AreaNo == areaNoStr && m.RoadwayNo == useLog.RoadwayNo).Count(); + + var taskNum = Db.Queryable<LogTask>() + .Where(m => m.IsDel == "0" && m.Type == "0" && (m.Status == "0" || m.Status == "1") && m.EndRoadway == useLog.RoadwayNo) + .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count(); + if (locateCount - taskNum > 0) + { + roadNo = useLog.RoadwayNo; + } + } + } + } + else//鎸夌収宸烽亾浼樺厛绾у垎閰� + { + foreach (var item in roadList) + { + var locateCount = Db.Queryable<SysStorageLocat>() + .Where(m => m.Status == "0" && m.Flag == "0" && m.AreaNo == areaNoStr && m.RoadwayNo == item).Count(); + + var taskNum = Db.Queryable<LogTask>() + .Where(m => m.IsDel == "0" && m.Type == "0" && (m.Status == "0" || m.Status == "1") && m.EndRoadway == item) + .GroupBy(m => m.PalletNo).Select(m => m.PalletNo).Count(); + + if (locateCount - taskNum > 0) + { + roadNo = item; + } + //褰撳墠宸锋湁浣嶇疆鍒欓��鍑� + if (roadNo != null) + { + break; + } + } + } + + if (string.IsNullOrWhiteSpace(roadNo)) + { + throw new Exception("鏈煡璇㈠埌绌哄偍浣嶅贩閬�"); + } + + Db.BeginTran(); + try + { + //娣诲姞宸烽亾浣跨敤璁板綍 + var log = new SysRoadwayUseLog + { + RoadwayNo = roadNo, + WareHouseNo = houseNo, + Row = 0, + Column = 0, + Layer = 0, + }; + Db.Insertable(log).ExecuteCommand(); + + // 娣诲姞鍏ュ簱鏃ュ織璁板綍 + var taskNo = new Common().GetMaxNo("TK"); + var exTask = new LogTask //鍏ュ簱浠诲姟 + { + TaskNo = taskNo, + Sender = "WMS", + Receiver = "WCS", + IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + SendDate = DateTime.Now, //鍙戦�佹椂闂� + BackDate = DateTime.Now, //杩斿洖鏃堕棿 + StartRoadway = "", // 璧峰宸烽亾 + StartLocat = "",//璧峰浣嶇疆 + EndLocat = "",//鐩爣浣嶇疆 + EndRoadway = roadNo, // 鐩爣宸烽亾 + PalletNo = palletNo,//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Type = "0",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "0",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� + Msg = "鍏ュ簱鍙e埌=>>" + roadNo + "宸烽亾鐨勫叆搴撲换鍔�", //鍏抽敭淇℃伅 + TaskModel = "1" //浠诲姟妯″紡 1锛氭紨绀烘ā寮� + + }; + Db.Insertable(exTask).ExecuteCommand(); + + Db.CommitTran(); + + comDto = new OutCommandDto() + { + PalletNo = palletNo,//鎵樼洏鍙� + StartRoadway = "", + StartLocate = "", // 璧峰浣嶇疆 + EndLocate = "", // 鐩爣浣嶇疆 + EndRoadway = roadNo, // 鐩爣宸烽亾 + TaskNo = taskNo, // 浠诲姟鍙� + TaskType = "0",// 浠诲姟绫诲瀷:鍏ュ簱浠诲姟 + OutMode = "", //鐩爣鍦板潃 + Order = 1 + }; + } + catch (Exception ex) + { + Db.RollbackTran(); + throw new Exception(ex.Message); + } + #endregion + + return comDto; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + } + //鐢宠鍌ㄤ綅 public OutCommandDto RequestLocation(string palletNo, string houseNo, string roadwayNo) { @@ -1555,6 +1828,176 @@ } } + + //鐢宠鍌ㄤ綅(鍙傝妯″紡) + public OutCommandDto RequestLocationModel(string palletNo, string houseNo, string roadwayNo) + { + try + { + + //楠岃瘉鎵樼洏鏉$爜鏄惁涓虹┖ + if (string.IsNullOrEmpty(palletNo)) + { + throw new Exception("璇疯緭鍏ヨ鐢宠鐨勬墭鐩樻潯鐮�"); + } + //楠岃瘉鎵�灞炰粨搴撴槸鍚︿负绌� + if (string.IsNullOrEmpty(houseNo)) + { + throw new Exception("璇烽�夋嫨鎵�灞炰粨搴�"); + } + //楠岃瘉宸烽亾鏄惁涓虹┖ + if (string.IsNullOrWhiteSpace(roadwayNo)) + { + throw new Exception("宸烽亾涓嶈兘涓虹┖"); + } + //楠岃瘉鏄惁涓哄钩搴撳叆搴� + if (houseNo == "W02") + { + throw new Exception("骞冲簱璇蜂娇鐢≒DA鎵嬫寔杩涜骞冲簱鍏ュ簱"); + } + var stock = Db.Queryable<SysPallets>().First(a => a.PalletNo == palletNo);//鎵樼洏淇℃伅 + + //鍒ゆ柇鎵樼洏鏉$爜鏄惁鏈夋晥 + if (stock == null) + throw new Exception("鎵樼洏鏉$爜涓嶅彈WMS绠$悊锛屼笉鍙叆搴擄紒"); + + OutCommandDto comDto;//杩斿洖wcs鐨勫叆搴撳懡浠� + + var isAddTask = false; + var oldTaskNo = ""; + #region + + var beingTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0" + && (m.Status == "0" || m.Status == "1") && m.PalletNo == palletNo && m.Type == "0"); + if (beingTask != null) + { + if (!string.IsNullOrWhiteSpace(beingTask.EndLocat)) + { + comDto = new OutCommandDto() + { + PalletNo = palletNo,//鎵樼洏鍙� + StartRoadway = beingTask.StartRoadway, // 璧峰宸烽亾 + StartLocate = "", // 璧峰浣嶇疆 + EndLocate = beingTask.EndLocat, // 鐩爣浣嶇疆 + EndRoadway = beingTask.EndRoadway, // 鐩爣宸烽亾 + TaskNo = beingTask.TaskNo, // 浠诲姟鍙� + TaskType = "0",// 浠诲姟绫诲瀷 (鍑哄簱) + OutMode = "", //鐩爣鍦板潃 + Order = 1 + }; + if (beingTask.IsSuccess == 0) + { + beingTask.IsSuccess = 1; + beingTask.Status = "1"; + Db.Updateable(beingTask).ExecuteCommand(); + } + return comDto; + } + else + { + if (string.IsNullOrWhiteSpace(roadwayNo)) + { + roadwayNo = beingTask.EndRoadway; + } + } + oldTaskNo = beingTask.TaskNo; + } + else + { + isAddTask = true; + } + + + #endregion + + + var allotLocate = new AllotLocation(); + + SysStorageLocat locate; + var areaList = new List<string>(); + areaList.Add("婕旂ず鍖哄煙"); + locate = allotLocate.GetSuiTableLocate(houseNo, areaList, roadwayNo); + + Db.BeginTran(); + try + { + if (isAddTask) + { + var taskNo = new Common().GetMaxNo("TK"); + var exTask = new LogTask //鍏ュ簱浠诲姟 + { + TaskNo = taskNo, + Sender = "WMS", + Receiver = "WCS", + IsSuccess = 1, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + SendDate = DateTime.Now, //鍙戦�佹椂闂� + BackDate = DateTime.Now, //杩斿洖鏃堕棿 + StartRoadway = "", // 璧峰宸烽亾 + StartLocat = "",//璧峰浣嶇疆 + EndLocat = locate.LocatNo,//鐩爣浣嶇疆 + EndRoadway = locate.RoadwayNo, // 鐩爣宸烽亾 + PalletNo = palletNo,//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Type = "0",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Status = "1",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "0",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� + Msg = "鍏ュ簱鍙e埌=>>" + locate.LocatNo + "鐨勫叆搴撲换鍔�", //鍏抽敭淇℃伅 + TaskModel = "1" + + }; + Db.Insertable(exTask).ExecuteCommand(); + + oldTaskNo = taskNo; + } + else + { + var oldTask = Db.Queryable<LogTask>().First(m => m.IsDel == "0" && m.TaskNo == oldTaskNo); + oldTask.EndLocat = locate.LocatNo; + oldTask.EndRoadway = locate.RoadwayNo; + if (oldTask.IsSuccess == 0) + { + oldTask.IsSuccess = 1; + oldTask.Status = "1"; + } + Db.Updateable(oldTask).ExecuteCommand(); + } + + + locate.Status = "2"; + Db.Updateable(locate).ExecuteCommand(); + + Db.CommitTran(); + comDto = new OutCommandDto() + { + PalletNo = palletNo,//鎵樼洏鍙� + StartRoadway = "", + StartLocate = "", // 璧峰浣嶇疆 + EndLocate = locate.LocatNo, // 鐩爣浣嶇疆 + EndRoadway = locate.RoadwayNo, // 鐩爣宸烽亾 + TaskNo = oldTaskNo, // 浠诲姟鍙� + TaskType = "0",// 浠诲姟绫诲瀷 (鍑哄簱) + OutMode = "", //鐩爣鍦板潃 + Order = 1 + }; + + } + catch (Exception ex) + { + Db.RollbackTran(); + throw new Exception(ex.Message); + } + + + return comDto; + } + catch (Exception e) + { + throw new Exception(e.Message); + } + } + //鍏ュ簱瀹屾垚(wcs鍙嶉銆亀ms鎵嬪姩瀹屾垚) public void ArrivalSuccess(string taskNo, int userId) { @@ -1594,6 +2037,12 @@ //娣诲姞鎿嶄綔鏃ュ織璁板綍 var k = new OperationASNServer().AddLogOperationAsn("鍏ュ簱浣滀笟", "鍏ュ簱鏃ュ織", taskNo, "瀹屾垚", $"鐐瑰嚮瀹屾垚鎸夐挳銆佸畬鎴愪换鍔″彿涓猴細{taskNo}鐨勪换鍔�", userId); } + if (task.TaskModel == "1") //婕旂ず妯″紡 + { + locate.Status = "1"; + Db.Updateable(locate).ExecuteCommand(); + return; + } //鍒ゆ柇鏄惁鏄洖娴佸叆搴撳畬鎴� if (stockDetail.Any()) { -- Gitblit v1.8.0