From 7642a3e183b5a584d1da5eb6b48e0f9cb2b5c68c Mon Sep 17 00:00:00 2001 From: chengsc <11752@DESKTOP-DS49RCP> Date: 星期一, 17 三月 2025 10:39:13 +0800 Subject: [PATCH] 修改问题 --- Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs | 1158 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 1,153 insertions(+), 5 deletions(-) diff --git a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs index a8be286..e0f4851 100644 --- a/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs +++ b/Wms/WMS.BLL/BllSoServer/ExportNoticeServer.cs @@ -26,12 +26,16 @@ using System.Runtime.Intrinsics.X86; using ZXing.OneD; using System.Threading.Tasks; +using System.Diagnostics; +using System.Drawing.Drawing2D; +using Model.ModelDto.LogDto; 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) { } @@ -2419,12 +2423,9 @@ Dictionary<int, decimal> stockQtyDic = new Dictionary<int, decimal>();//鎵樺嚭搴撶墿鍝佹暟 var qty = 0m; var house = ""; - if (notice.Type == "0") - { - house = "W01"; - } + //鍒嗛厤璐х墿 - qty += assign.AllotPallets(stockDetail, needQty, pNum, bNum, stockQtyDic, 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); @@ -2967,6 +2968,1153 @@ #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>();//姝ゆ鍑哄簱浠诲姟闆嗗悎锛屼负搴斿鍚屾墭鐩樹笉鍚岀墿鏂欏嚭搴� + //寰幆鍒嗛厤鐨勪俊鎭敓鎴愬嚭搴撲换鍔� + foreach (var item in list) + { + 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 = 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") //鏈夌墿鍝� + { + #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 = 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 + "鍒�" + outMode + "鐨勫嚭搴撲换鍔�", //鍏抽敭淇℃伅 + }; + Db.Insertable(exTask).ExecuteCommand(); + logTaskList.Add(exTask); + + outDto1.Add(new OutCommandDto() + { + PalletNo = item.PalletNo,//鎵樼洏鍙� + StartLocate = locate.LocatNo, // 璧峰浣嶇疆 + StartRoadway = locate.RoadwayNo,//鍏跺疄宸烽亾 + EndLocate = outMode, // 鐩爣浣嶇疆 + TaskNo = exTask.TaskNo, // 浠诲姟鍙� + TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)0鍏� 1鍑� 2绉� + OutMode = outMode, //鍑哄簱鍙� + 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(); + + 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); + } + } + + //娣诲姞鎿嶄綔鏃ュ織璁板綍 + 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 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 = toLocation,//outMode, // 鐩爣浣嶇疆 + TaskNo = ykTaskNo, // 浠诲姟鍙� + TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)0鍏� 1鍑� 2绉� + Order = Math.Abs(row2 - rows), + + }); + 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); + + outDto1.Add(new OutCommandDto() + { + PalletNo = item.PalletNo,//鎵樼洏鍙� + StartLocate = locate.LocatNo, // 璧峰浣嶇疆 + StartRoadway = locate.RoadwayNo,//鍏跺疄宸烽亾 + EndLocate = toLocation,//outMode, // 鐩爣浣嶇疆 + TaskNo = exTask.TaskNo, // 浠诲姟鍙� + TaskType = "1",// 浠诲姟绫诲瀷 (鍑哄簱)0鍏� 1鍑� 2绉� + OutMode = toLocation, //鍑哄簱鍙� + Order = Math.Abs(row2 - row1), + + }); + 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; } + + } + #endregion + #endregion -- Gitblit v1.8.0