From 4de417b106a062452f5ac86e626e7e225b753eab Mon Sep 17 00:00:00 2001 From: zhaowc <526854230@qq.com> Date: 星期二, 23 九月 2025 08:03:11 +0800 Subject: [PATCH] 优化问题 --- Wms/WMS.BLL/BllTransServer/HopperTransportServer.cs | 686 +++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 540 insertions(+), 146 deletions(-) diff --git a/Wms/WMS.BLL/BllTransServer/HopperTransportServer.cs b/Wms/WMS.BLL/BllTransServer/HopperTransportServer.cs index 8856889..ce85dbb 100644 --- a/Wms/WMS.BLL/BllTransServer/HopperTransportServer.cs +++ b/Wms/WMS.BLL/BllTransServer/HopperTransportServer.cs @@ -217,7 +217,7 @@ /// <param name="lotNo">鎵规</param> /// <param name="userId">鎿嶄綔浜�</param> /// <exception cref="Exception"></exception> - public void jiaoLiaoHopper(string areaNo,string endLocate,string plnStatus,string standard,string skuNo,string lotNo,string url,int userId) + public void jiaoLiaoHopper(string areaNo,string endLocate,string plnStatus,string standard,string skuNo,string lotNo,string url, string bindUrl, int userId) { try { @@ -297,17 +297,19 @@ var locatListWai = locatList.Where(w => string.IsNullOrEmpty(w.AisleOne)).Select(s => s.LocatNo); //鍏堟壘涓嶉渶瑕佺Щ搴撶殑妗� - var palletModel = stockDetail.Where(w => locatListWai.Contains(w.LocatNo)).OrderBy(o => o.UpdateTime).FirstOrDefault(); + var palletModel = stockDetail.Where(w => locatListWai.Contains(w.LocatNo)).OrderByDescending(w => w.UpdateTime).FirstOrDefault(); if (palletModel == null) { //鎵鹃渶瑕佺Щ搴撶殑妗� - palletModel= stockDetail.Where(w => !locatListWai.Contains(w.LocatNo)).OrderBy(o => o.UpdateTime).FirstOrDefault(); + palletModel= stockDetail.Where(w => !locatListWai.Contains(w.LocatNo)).OrderByDescending(w => w.UpdateTime).FirstOrDefault(); if (palletModel == null) { throw new Exception("鏈壘鍒板搴旀《淇℃伅"); } - resultYi = YikuTask(palletModel.PalletNo, taskNo, url); + resultYi = YikuTask(palletModel.PalletNo, taskNo, url,bindUrl); } + palletModel.Status = "2"; + Db.Updateable(palletModel).ExecuteCommand(); #endregion //璧峰鍌ㄤ綅鍦板潃淇℃伅 var startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.Status == "1" && w.LocatNo == palletModel.LocatNo); @@ -328,9 +330,9 @@ Receiver = "RCS", IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 - StartLocat = "",//璧峰浣嶇疆 + StartLocat = startLoction.LocatNo,//璧峰浣嶇疆 EndLocat = endLocate,//鐩爣浣嶇疆 - PalletNo = "",//鎵樼洏鐮� + PalletNo = palletModel.PalletNo,//鎵樼洏鐮� IsSend = 1,//鏄惁鍙啀娆′笅鍙� IsCancel = 1,//鏄惁鍙彇娑� IsFinish = 1,//鏄惁鍙畬鎴� @@ -358,29 +360,41 @@ string agvMsg = string.Empty; //缁欎笅杞︿笅鍙戜换鍔� logTaskEntry.SendDate = DateTime.Now;//鍙戦�佹椂闂� - var agvResult = RcsHelper.CreateTaskForAgv(task, url, out agvMsg); - if (agvResult)//鎴愬姛 + //涓嬪彂杞藉叿绫诲瀷 + var bind = RcsHelper.BindPalletAndSite(palletModel.PalletNo, palletModel.LocatNo, bindUrl, out string agvBindMsg); + if (bind) { - //璇锋眰鎴愬姛淇敼浠诲姟琛ㄧ浉搴斿瓧娈电姸鎬� - logTaskEntry.IsSuccess = 1; - logTaskEntry.IsSend = 0; - //logTaskEntry.IsCancel = 0; - logTaskEntry.BackDate = DateTime.Now; - logTaskEntry.Status = "1";//姝e湪鎵ц - Db.Insertable(logTaskEntry).ExecuteCommand(); + var agvResult = RcsHelper.CreateTaskForAgv(task, url, out agvMsg); + if (agvResult)//鎴愬姛 + { + //璇锋眰鎴愬姛淇敼浠诲姟琛ㄧ浉搴斿瓧娈电姸鎬� + logTaskEntry.IsSuccess = 1; + logTaskEntry.IsSend = 0; + //logTaskEntry.IsCancel = 0; + logTaskEntry.BackDate = DateTime.Now; + logTaskEntry.Status = "1";//姝e湪鎵ц + Db.Updateable(logTaskEntry).ExecuteCommand(); - startLoction.Status = "3";//鍑哄簱涓� - Db.Updateable(startLoction).ExecuteCommand(); + startLoction.Status = "3";//鍑哄簱涓� + Db.Updateable(startLoction).ExecuteCommand(); - endLocateInfo.Status = "2";//鍏ュ簱涓� - Db.Updateable(endLocateInfo).ExecuteCommand(); + endLocateInfo.Status = "2";//鍏ュ簱涓� + Db.Updateable(endLocateInfo).ExecuteCommand(); + } + else//澶辫触 + { + logTaskEntry.IsSuccess = 0; + logTaskEntry.Information = agvMsg; + Db.Updateable(logTaskEntry).ExecuteCommand(); + } } - else//澶辫触 + else { logTaskEntry.IsSuccess = 0; - logTaskEntry.Information = agvMsg; - Db.Insertable(logTaskEntry).ExecuteCommand(); + logTaskEntry.Information = "璐ф灦涓庤揣浣嶇粦瀹氬け璐ワ紝鍘熷洜锛�"+agvBindMsg; + Db.Updateable(logTaskEntry).ExecuteCommand(); } + } //鎻愪氦浜嬪姟 Db.CommitTran(); @@ -405,7 +419,7 @@ /// <param name="lotNo">鎵规</param> /// <param name="userId">鎿嶄綔浜�</param> /// <exception cref="Exception"></exception> - public void jiaoCheHopper(string areaNo, string StartLocate, string plnNo, string plnStatus, decimal weight, string skuNo, string lotNo, string url,int userId) + public void jiaoCheHopper(string areaNo, string StartLocate, string plnNo, string plnStatus, decimal weight, string skuNo, string lotNo, string url,string bindUrl,int userId) { try { @@ -430,11 +444,12 @@ Db.BeginTran(); //妗朵俊鎭� - var pln = Db.Queryable<SysPallets>().First(w => w.IsDel == "0" && w.PalletNo == plnNo); + var pln = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.LocatNo == StartLocate && w.AreaNo == areaNo); if (pln == null) { throw new Exception("鏈煡璇㈠埌妗朵俊鎭�"); } + plnNo = pln.PalletNo; //璧峰鍌ㄤ綅淇℃伅 var startLoction = Db.Queryable<SysStorageLocat>().First(m => m.IsDel == "0" && m.AreaNo == areaNo && m.LocatNo == StartLocate); @@ -449,10 +464,6 @@ throw new Exception("娌℃湁鏌ヨ鍒扮墿鏂欎俊鎭�"); } skuName = sku.SkuName; - } - else if (plnStatus == "3") - { - } //鐩爣妤煎眰 var layer = startLoction.Layer; @@ -490,24 +501,26 @@ CompleteTime = DateTime.Now, PalletStatus = plnStatus, - Status = "0", + Status = "2", InspectMark = "0", BitPalletMark = "0", InspectStatus = "1", }; - Db.Insertable(stockDetailNew).ExecuteCommand(); + Db.Updateable(stockDetailNew).ExecuteCommand(); } else { stockDetail.PalletStatus = plnStatus; stockDetail.SkuNo = skuNo; + stockDetail.SkuName = skuName; stockDetail.LotNo = lotNo; stockDetail.Qty = weight; + stockDetail.Status = "2"; Db.Updateable(stockDetail).ExecuteCommand(); } //鍒嗛厤鍌ㄤ綅 - var endLocatInfo = GetLocatModel(house.WareHouseNo, plnStatus, skuNo, pln.Standard);//鐩爣鍌ㄤ綅 + var endLocatInfo = GetLocatModel(house.WareHouseNo, plnStatus, startLoction.WareHouseNo, skuNo, pln.Standard,lotNo);//鐩爣鍌ㄤ綅 //娌℃湁鍙敤绌哄偍浣� if (endLocatInfo == null) { @@ -550,29 +563,42 @@ string agvMsg = string.Empty; //缁欎笅杞︿笅鍙戜换鍔� logTaskEntry.SendDate = DateTime.Now;//鍙戦�佹椂闂� - var agvResult = RcsHelper.CreateTaskForAgv(task, url, out agvMsg); - if (agvResult)//鎴愬姛 + //涓嬪彂杞藉叿涓庤揣浣嶇粦瀹� + var bind = RcsHelper.BindPalletAndSite(plnNo, StartLocate, bindUrl, out string agvBindMsg); + if (bind) { - //璇锋眰鎴愬姛淇敼浠诲姟琛ㄧ浉搴斿瓧娈电姸鎬� - logTaskEntry.IsSuccess = 1; - logTaskEntry.IsSend = 0; - //logTaskEntry.IsCancel = 0; - logTaskEntry.BackDate = DateTime.Now; - logTaskEntry.Status = "1";//姝e湪鎵ц - Db.Insertable(logTaskEntry).ExecuteCommand(); + var agvResult = RcsHelper.CreateTaskForAgv(task, url, out agvMsg); + if (agvResult)//鎴愬姛 + { + //璇锋眰鎴愬姛淇敼浠诲姟琛ㄧ浉搴斿瓧娈电姸鎬� + logTaskEntry.IsSuccess = 1; + logTaskEntry.IsSend = 0; + //logTaskEntry.IsCancel = 0; + logTaskEntry.BackDate = DateTime.Now; + logTaskEntry.Status = "1";//姝e湪鎵ц + Db.Updateable(logTaskEntry).ExecuteCommand(); - startLoction.Status = "3";//鍑哄簱涓� - Db.Updateable(startLoction).ExecuteCommand(); + startLoction.Status = "3";//鍑哄簱涓� + Db.Updateable(startLoction).ExecuteCommand(); - endLocatInfo.Status = "2";//鍏ュ簱涓� - Db.Updateable(endLocatInfo).ExecuteCommand(); + endLocatInfo.Status = "2";//鍏ュ簱涓� + Db.Updateable(endLocatInfo).ExecuteCommand(); + } + else//澶辫触 + { + logTaskEntry.IsSuccess = 0; + logTaskEntry.Information = agvMsg; + Db.Updateable(logTaskEntry).ExecuteCommand(); + } + } - else//澶辫触 + else { logTaskEntry.IsSuccess = 0; - logTaskEntry.Information = agvMsg; - Db.Insertable(logTaskEntry).ExecuteCommand(); + logTaskEntry.Information = "璐ф灦涓庤揣浣嶇粦瀹氬け璐ワ紝鍘熷洜锛�"+agvBindMsg; + Db.Updateable(logTaskEntry).ExecuteCommand(); } + //鎻愪氦浜嬪姟 Db.CommitTran(); @@ -609,10 +635,10 @@ { throw new Exception($"浠诲姟鍙蜂负:{taskNo}鐨勪换鍔′笉瀛樺湪!"); } - if (taskInfo.Status != "1" && comeFrom != "WMS") - { - throw new Exception($"浠诲姟鍙蜂负:{taskNo}鐨勪换鍔$姸鎬佸紓甯�"); - } + //if (taskInfo.Status != "0" && comeFrom != "WMS") + //{ + // throw new Exception($"浠诲姟鍙蜂负:{taskNo}鐨勪换鍔$姸鎬佸紓甯�"); + //} #endregion //寮�鍚簨鍔� Db.BeginTran(); @@ -655,6 +681,7 @@ throw new Exception($"鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦�"); } endLocatInfo.Status = "1";//鏈夌墿鍝� + endLocatInfo.UpdateTime = DateTime.Now;//鏇存柊鏃堕棿 //淇敼鐩爣鍌ㄤ綅鐘舵�� Db.Updateable(endLocatInfo).ExecuteCommand(); @@ -677,7 +704,7 @@ } else if (endAreaInfo.Type == "1")//婊℃《鍖� { - stockDetail.PalletStatus = "1"; + stockDetail.PalletStatus = "2"; stockDetail.Status = "0";//寰呭垎閰� } else if (endAreaInfo.Type == "2")//鑴忔《鍖� @@ -688,6 +715,10 @@ stockDetail.SkuName = ""; stockDetail.Status = "0";//寰呭垎閰� stockDetail.InspectStatus = "0";//寰呮楠� + } + else if (endAreaInfo.Type == "4")//璁惧鍖� + { + } //淇敼搴撳瓨鏄庣粏 Db.Updateable(stockDetail).ExecuteCommand(); @@ -716,11 +747,283 @@ } } - - private bool YikuTask(string palletNo, string taskNo, string url) + /// <summary> + /// 娓呮礂鏈哄彨鏂欑姸鎬� + /// </summary> + /// <param name="deviceID">娓呮礂鏈虹紪鍙�</param> + /// <param name="deviceStation">鍙枡鐐逛綅锛氣�漣nput鈥�-鍏ュ彛锛堝彨鑴忔《锛夛紝鈥漮utput鈥�-鍑哄彛锛堝噣妗剁敵璇峰偍浣嶏級</param> + /// <param name="status"></param> + /// <exception cref="Exception"></exception> + public void RCSCleanRequest(string deviceID,string deviceStation,string status,string url,string bindUrl) { try { + if (string.IsNullOrEmpty(deviceID)) + { + throw new Exception("娓呮礂鏈虹紪鍙蜂笉鑳戒负绌�"); + } + if (status != "1") + { + throw new Exception("闈炲彨鏂欑姸鎬�"); + } + switch (deviceStation) + { + case "input"://鍙剰妗� + switch (deviceID) + { + case "2001": + deviceID = "1001"; + break; + case "2002": + deviceID = "1003"; + break; + default: + throw new Exception("鍙剰妗剁偣浣嶅紓甯�"); + } + break; + case "output"://鍙溅鎷夊噣妗� + switch (deviceID) + { + case "2001": + deviceID = "1002"; + break; + case "2002": + deviceID = "1004"; + break; + default: + throw new Exception("鍙噣妗剁偣浣嶅紓甯�"); + } + break; + default: + throw new Exception("鍙枡绫诲瀷寮傚父"); + + } + //閫氳繃璁惧鍙锋煡鎵惧埌鎵�灞炶澶囷紙鍖哄煙锛� + var deviceInfo = Db.Queryable<SysStorageArea>().First(w => w.IsDel == "0" && w.DeviceCode == deviceID); + if (deviceInfo == null) + { + throw new Exception("璁惧淇℃伅涓嶅瓨鍦�"); + } + var houseNo = deviceInfo.WareHouseNo;//鍙《璁惧鎵�灞炶溅闂寸紪鍙� + + var startLoction = new SysStorageLocat();//璧峰鍌ㄤ綅淇℃伅 + var endLoction = new SysStorageLocat();//鐩爣鍌ㄤ綅淇℃伅 + var palletModel = new DataStockDetail();//鍒嗛厤妗朵俊鎭� + string type = "";//鍙枡绫诲瀷 + + //寮�鍚簨鍔� + Db.BeginTran(); + + //鍙枡鐐逛綅 + switch (deviceStation) + { + case "input"://鍙剰妗� + if (deviceID == "1001" || deviceID == "1003") + { + type = "3"; + //鍙《璁惧鎵�鍦ㄥ偍浣嶄俊鎭紙鐩爣鍌ㄤ綅锛� + endLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo); + + // 鎵�鏈夊緟鍒嗛厤鐨勮剰妗� + var stockDetail = Db.Queryable<DataStockDetail>().Where(w => w.Status == "0" && w.PalletStatus == "3").OrderByDescending(w => w.UpdateTime).ToList(); + + //鍒ゆ柇褰撳墠娓呮礂鏈鸿澶囦笂鏈夊嚑涓剰妗讹紝status锛�2 姝e湪娓呮礂鐨勮剰妗讹紙鐘舵�佽Е鍙戝彉鏇翠负AGV鍙2涓剰妗舵椂瑙﹀彂锛� + int ztQty = Db.Queryable<DataStockDetail>().Count(w => w.IsDel == "0" && w.Status == "2" && w.LocatNo == deviceID); + if (ztQty == 1) + { + throw new Exception((deviceID == "1001"?"1":"2") + "鍙锋竻娲楁満鑴忔《宸叉弧锛岄噸澶嶅彨鏂欙紒"); + } + + //鍏堟煡鐪嬪彨鏂欒澶囦綅鏄惁鏈夎剰妗� + if (endLoction.Status == "1") + { + //鏈夎剰妗剁殑璇濓紝灏嗘洿鏀规妗剁姸鎬�(浠h〃姝ゆ《姝e湪娓呮礂涓�) + var qxStock = Db.Queryable<DataStockDetail>().Where(w => w.LocatNo == endLoction.LocatNo).First(); + qxStock.Status = "2"; + qxStock.UpdateTime = DateTime.Now;//娓呮礂鏃堕棿 + Db.Updateable(qxStock).ExecuteCommand(); + //鏇存敼璁惧鍌ㄤ綅鐘舵�佷负绌哄偍浣� + endLoction.Status = "0"; + Db.Updateable(endLoction).ExecuteCommand(); + } + //浼樺厛鏌ユ壘鑴忔《缂撳瓨杞﹂棿 + palletModel = stockDetail.Where(w => w.AreaNo == "C54").FirstOrDefault(); + if (palletModel == null)//鑴忔《缂撳瓨杞﹂棿娌℃湁鑴忔《锛屽啀浠庝笁妤间腑闂寸珯鑴忔《鍖烘煡鎵� + { + palletModel = stockDetail.Where(w => w.WareHouseNo == "M16" && w.AreaNo == "C26").FirstOrDefault(); + } + if (palletModel == null)//涓夋ゼ涓棿绔欒剰妗跺尯娌℃湁鑴忔《锛屽啀浠庡洓妤间腑闂寸珯鑴忔《鍖烘煡鎵� + { + palletModel = stockDetail.Where(w => w.WareHouseNo == "M01" && w.AreaNo == "C03").FirstOrDefault(); + } + if (palletModel == null) + { + throw new Exception("鏃犺剰妗跺彲鍒嗛厤"); + } + //璧峰鍌ㄤ綅鍦板潃淇℃伅 + startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.Status == "1" && w.LocatNo == palletModel.LocatNo); + if (startLoction == null) + { + throw new Exception($"璧峰鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦紝妗跺彿锛歿palletModel.LocatNo}"); + } + } + else + { + throw new Exception("璧峰鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦�"); + } + + break; + + case "output"://鍑�妗剁敵璇峰偍浣� + if (deviceID == "1002" || deviceID == "1004") + { + type = "4"; + //鍙《璁惧鎵�鍦ㄥ偍浣嶄俊鎭紙璧峰鍌ㄤ綅锛� + startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo); + //鑾峰彇娓呮礂鏈轰笂绗竴娆″彨鐨勮剰妗� + string locate = deviceID == "1002"?"1001":"1003"; + palletModel = Db.Queryable<DataStockDetail>().Where(w => w.LocatNo == locate && (w.Status == "2" || w.Status == "0")).OrderBy(o => o.CreateTime).First(); + if (palletModel == null) + { + throw new Exception("鏈壘鍒板簱瀛樹腑姝e湪娓呮礂鐨勮剰妗�"); + } + if (!string.IsNullOrEmpty(palletModel.LocatNo)) + { + palletModel.LocatNo = startLoction.LocatNo; + palletModel.PalletStatus = "0"; + palletModel.Status = "0"; + Db.Updateable(palletModel).ExecuteCommand(); + } + //鍒嗛厤鍌ㄤ綅 + //鏌ユ壘鎵�鏈夊噣妗跺偍浣� + var jtLocate = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0") + .OrderBy(w => w.Row).OrderByDescending(w => w.Column).ToList(); + if (jtLocate.Count == 0) + { + throw new Exception("娌℃湁绌轰綑鐨勫噣妗跺偍浣�"); + } + //浼樺厛鍒嗛厤鍥涙ゼ涓棿绔欏噣妗跺尯 + //endLoction = jtLocate.Where(w => w.WareHouseNo == "M01" && w.AreaNo == "C01") + // .OrderBy(w => w.Row).OrderByDescending(w => w.Column).FirstOrDefault(); + //if (endLoction == null)//鍥涙ゼ涓棿绔欏噣妗跺尯娌℃湁绌哄偍浣嶏紝鍐嶄粠涓夋ゼ涓棿绔欏噣妗跺尯鏌ユ壘 + //{ + endLoction = jtLocate.Where(w => w.WareHouseNo == "M16" && w.AreaNo == "C24") + .OrderBy(w => w.Row).OrderByDescending(w => w.Column).FirstOrDefault(); + //} + if (endLoction == null)//涓夋ゼ涓棿绔欏噣妗跺尯娌℃湁绌哄偍浣嶏紝鍐嶄粠涓夋ゼ娓呮礂闂寸紦瀛樺尯鏌ユ壘 PS锛氬皬杞︾幇鍦ㄨ繕涓嶆敮鎸佹竻娲楁満鐩存帴閫佸線4妤煎噣妗跺尯 + { + endLoction = jtLocate.Where(w => w.WareHouseNo == "M44" && w.AreaNo == "C55") + .OrderBy(w => w.Row).OrderByDescending(w => w.Column).FirstOrDefault(); + } + if (endLoction == null) + { + throw new Exception("鏈煡璇㈠埌鍚堥�傚偍浣�"); + } + //string startlono = startLoction.LocatNo == "1001" ? "1002" : "1004";//娓呮礂瀹屾垚鐐逛綅 + //startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.LocatNo == startlono); + //if (startLoction == null) + //{ + // throw new Exception("鏈壘鍒版竻娲楄捣濮嬬偣浣�"); + //} + } + else + { + throw new Exception("璧峰鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦�"); + } + break; + + default: + throw new Exception("鍙枡鐐逛綅寮傚父"); + + } + + var taskNo = new Common().GetMaxNo("TK"); + //娣诲姞浠诲姟 + var logTaskEntry = new LogTask + { + TaskNo = taskNo, + Sender = "WMS", + Receiver = "RCS", + IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛 + + StartLocat = startLoction.LocatNo,//璧峰浣嶇疆 + EndLocat = endLoction.LocatNo,//鐩爣浣嶇疆 + PalletNo = palletModel.PalletNo,//鎵樼洏鐮� + IsSend = 1,//鏄惁鍙啀娆′笅鍙� + IsCancel = 1,//鏄惁鍙彇娑� + IsFinish = 1,//鏄惁鍙畬鎴� + Type = "1",//浠诲姟绫诲瀷 0 鍏ュ簱浠诲姟 1 鍑哄簱浠诲姟 2 绉诲簱浠诲姟 + Status = "0",//浠诲姟鐘舵��0锛氱瓑寰呮墽琛�1姝e湪鎵ц2鎵ц瀹屾垚 + OrderType = "3",//0 鍏ュ簱鍗� 1 鍑哄簱鍗� 2 鐩樼偣鍗� 3 绉诲簱鍗� + + CreateTime = DateTime.Now + }; + Db.Insertable(logTaskEntry).ExecuteCommand(); + + //缁勭粐涓嬪彂灏忚溅浠诲姟淇℃伅 + var task = new TaskDetial + { + Taskno = taskNo,//浠诲姟鍙� + Startport = palletModel.LocatNo,//璧峰浣嶇疆 + Endport = endLoction.LocatNo,//鐩爣浣嶇疆 + Pallno = palletModel.PalletNo,//妗跺彿 + Crtype = type,//鍙《 + }; + + string agvMsg = string.Empty; + //缁欎笅杞︿笅鍙戜换鍔� + logTaskEntry.SendDate = DateTime.Now;//鍙戦�佹椂闂� + //涓嬪彂杞藉叿涓庤揣浣嶇粦瀹� + var bind = RcsHelper.BindPalletAndSite(palletModel.PalletNo, palletModel.LocatNo, bindUrl, out string agvBindMsg); + if (bind) + { + var agvResult = RcsHelper.CreateTaskForAgv(task, url, out agvMsg); + if (agvResult)//鎴愬姛 + { + //璇锋眰鎴愬姛淇敼浠诲姟琛ㄧ浉搴斿瓧娈电姸鎬� + logTaskEntry.IsSuccess = 1; + logTaskEntry.IsSend = 0; + //logTaskEntry.IsCancel = 0; + logTaskEntry.BackDate = DateTime.Now; + logTaskEntry.Status = "1";//姝e湪鎵ц + Db.Updateable(logTaskEntry).ExecuteCommand(); + + startLoction.Status = "3";//鍑哄簱涓� + Db.Updateable(startLoction).ExecuteCommand(); + + endLoction.Status = "2";//鍏ュ簱涓� + Db.Updateable(endLoction).ExecuteCommand(); + } + else//澶辫触 + { + logTaskEntry.IsSuccess = 0; + logTaskEntry.Information = agvMsg; + Db.Updateable(logTaskEntry).ExecuteCommand(); + } + } + else + { + logTaskEntry.IsSuccess = 0; + logTaskEntry.Information = agvBindMsg; + Db.Updateable(logTaskEntry).ExecuteCommand(); + } + + //鎻愪氦浜嬪姟 + Db.CommitTran(); + } + catch (Exception e) + { + //鍥炴粴浜嬪姟 + Db.RollbackTran(); + throw new Exception(e.Message); + } + } + + private bool YikuTask(string palletNo, string taskNo, string url,string bindUrl) + { + try + { + bool t = false; //鍒嗛厤妗剁殑搴撳瓨淇℃伅 var palletInfo = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo); if (palletInfo == null) @@ -809,36 +1112,55 @@ string agvMsg = string.Empty; //缁欎笅杞︿笅鍙戜换鍔� logTaskEntry.SendDate = DateTime.Now;//鍙戦�佹椂闂� - var agvResult = RcsHelper.CreateTaskForAgv(task, url, out agvMsg, "70"); - if (agvResult)//鎴愬姛 + //涓嬪彂杞藉叿涓庤揣浣嶇粦瀹� + var bind = RcsHelper.BindPalletAndSite(palletInfoYi.LocatNo, palletInfoYi.PalletNo, bindUrl, out string agvBindMsg); + if (bind) { - //璇锋眰鎴愬姛淇敼浠诲姟琛ㄧ浉搴斿瓧娈电姸鎬� - logTaskEntry.IsSuccess = 1; - logTaskEntry.IsSend = 0; - //logTaskEntry.IsCancel = 0; - logTaskEntry.BackDate = DateTime.Now; - logTaskEntry.Status = "1";//姝e湪鎵ц - Db.Insertable(logTaskEntry).ExecuteCommand(); + var agvResult = RcsHelper.CreateTaskForAgv(task, url, out agvMsg, "70"); + if (agvResult)//鎴愬姛 + { + //璇锋眰鎴愬姛淇敼浠诲姟琛ㄧ浉搴斿瓧娈电姸鎬� + logTaskEntry.IsSuccess = 1; + logTaskEntry.IsSend = 0; + //logTaskEntry.IsCancel = 0; + logTaskEntry.BackDate = DateTime.Now; + logTaskEntry.Status = "1";//姝e湪鎵ц + Db.Updateable(logTaskEntry).ExecuteCommand(); - //淇敼绉诲嚭鍌ㄤ綅鐘舵�� - locatInfo.Status = "5";//绉诲嚭涓� - Db.Updateable(locatInfo).ExecuteCommand(); + //淇敼绉诲嚭鍌ㄤ綅鐘舵�� + locatInfo.Status = "5";//绉诲嚭涓� + Db.Updateable(locatInfo).ExecuteCommand(); - //淇敼绉诲叆鍌ㄤ綅鐘舵�� - transferLocat.Status = "4";//绉诲叆涓� - Db.Updateable(transferLocat).ExecuteCommand(); + //淇敼绉诲叆鍌ㄤ綅鐘舵�� + transferLocat.Status = "4";//绉诲叆涓� + Db.Updateable(transferLocat).ExecuteCommand(); + } + else//澶辫触 + { + logTaskEntry.IsSuccess = 0; + logTaskEntry.Information = agvMsg; + Db.Updateable(logTaskEntry).ExecuteCommand(); + + throw new Exception($"缁欏皬杞︿笅鍙戠Щ搴撲换鍔″け璐ワ紝妗跺彿锛歿palletInfoYi.PalletNo}"); + } } - else//澶辫触 + else { logTaskEntry.IsSuccess = 0; - logTaskEntry.Information = agvMsg; - Db.Insertable(logTaskEntry).ExecuteCommand(); + logTaskEntry.Information = agvBindMsg; + Db.Updateable(logTaskEntry).ExecuteCommand(); throw new Exception($"缁欏皬杞︿笅鍙戠Щ搴撲换鍔″け璐ワ紝妗跺彿锛歿palletInfoYi.PalletNo}"); } + t = true; + + } + else + { + return t; } } - return true; + return t; } catch (Exception e) { @@ -851,7 +1173,7 @@ /// <param name="taskNo"></param> /// <param name="url"></param> /// <exception cref="Exception"></exception> - public void OutBinAgv(string taskNo,string url) + public void OutBinAgv(string taskNo,string url, string bindUrl) { try { @@ -859,7 +1181,7 @@ Db.BeginTran(); //鏌ユ壘浠诲姟淇℃伅 - var logTaskInfo = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && w.Status == "1" && w.TaskNo == taskNo); + var logTaskInfo = Db.Queryable<LogTask>().First(w => w.IsDel == "0" && w.Status == "0" && w.TaskNo == taskNo); if (logTaskInfo == null) { throw new Exception("鏈煡璇㈠埌璇ヤ换鍔�"); @@ -904,34 +1226,49 @@ string agvMsg = string.Empty; //缁欎笅杞︿笅鍙戜换鍔� logTaskInfoZ.SendDate = DateTime.Now;//鍙戦�佹椂闂� - var agvResult = RcsHelper.CreateTaskForAgv(task, url, out agvMsg, "70"); - if (agvResult)//鎴愬姛 + //涓嬪彂杞藉叿涓庤揣浠粦瀹� + var bind = RcsHelper.BindPalletAndSite(logTaskInfoZ.PalletNo, logTaskInfoZ.StartLocat, bindUrl, out string agvBindMsg); + if (bind) { - //璇锋眰鎴愬姛淇敼浠诲姟琛ㄧ浉搴斿瓧娈电姸鎬� - logTaskInfoZ.IsSuccess = 1; - logTaskInfoZ.IsSend = 0; - //logTaskEntry.IsCancel = 0; - logTaskInfoZ.BackDate = DateTime.Now; - logTaskInfoZ.Status = "1";//姝e湪鎵ц - Db.Insertable(logTaskInfoZ).ExecuteCommand(); + var agvResult = RcsHelper.CreateTaskForAgv(task, url, out agvMsg, "70"); + if (agvResult)//鎴愬姛 + { + //璇锋眰鎴愬姛淇敼浠诲姟琛ㄧ浉搴斿瓧娈电姸鎬� + logTaskInfoZ.IsSuccess = 1; + logTaskInfoZ.IsSend = 0; + //logTaskEntry.IsCancel = 0; + logTaskInfoZ.BackDate = DateTime.Now; + logTaskInfoZ.Status = "1";//姝e湪鎵ц + Db.Updateable(logTaskInfoZ).ExecuteCommand(); - //淇敼绉诲嚭鍌ㄤ綅鐘舵�� - startLocatInfoZ.Status = "5";//绉诲嚭涓� - Db.Updateable(startLocatInfoZ).ExecuteCommand(); + //淇敼绉诲嚭鍌ㄤ綅鐘舵�� + startLocatInfoZ.Status = "5";//绉诲嚭涓� + Db.Updateable(startLocatInfoZ).ExecuteCommand(); - //淇敼绉诲叆鍌ㄤ綅鐘舵�� - endLocatInfoZ.Status = "4";//绉诲叆涓� - Db.Updateable(endLocatInfoZ).ExecuteCommand(); + //淇敼绉诲叆鍌ㄤ綅鐘舵�� + endLocatInfoZ.Status = "4";//绉诲叆涓� + Db.Updateable(endLocatInfoZ).ExecuteCommand(); + } + else//澶辫触 + { + logTaskInfoZ.IsSuccess = 0; + logTaskInfoZ.Information = agvMsg; + Db.Updateable(logTaskInfoZ).ExecuteCommand(); + + throw new Exception($"缁欏皬杞︿笅鍙戠Щ搴撲换鍔″け璐ワ紝妗跺彿锛歿logTaskInfoZ.PalletNo}"); + } } - else//澶辫触 + else { logTaskInfoZ.IsSuccess = 0; - logTaskInfoZ.Information = agvMsg; - Db.Insertable(logTaskInfoZ).ExecuteCommand(); + logTaskInfoZ.Information = agvBindMsg; + Db.Updateable(logTaskInfoZ).ExecuteCommand(); throw new Exception($"缁欏皬杞︿笅鍙戠Щ搴撲换鍔″け璐ワ紝妗跺彿锛歿logTaskInfoZ.PalletNo}"); } + } + Db.CommitTran(); } catch (Exception e) { @@ -946,7 +1283,7 @@ /// </summary> /// <param name="url"></param> /// <exception cref="Exception"></exception> - public void TransferBackTimer(string url) + public void TransferBackTimer(string url,string bindUrl) { try { @@ -979,7 +1316,7 @@ continue; } //鍒嗛厤鍌ㄤ綅 - var endLocatInfo = GetLocatModel(itemHouseNo,detailInfo.PalletStatus,detailInfo.SkuNo,detailInfo.Standard);//鐩爣鍌ㄤ綅 + var endLocatInfo = GetLocatModel(itemHouseNo,detailInfo.PalletStatus,"",detailInfo.SkuNo,detailInfo.Standard,detailInfo.LotNo);//鐩爣鍌ㄤ綅 //娌℃湁鍙敤绌哄偍浣� if (endLocatInfo == null) { @@ -1019,36 +1356,49 @@ Crtype = "2"//鍙《 }; string agvMsg = string.Empty; - //缁欎笅杞︿笅鍙戜换鍔� + //缁欎笅杞︿笅鍙戜换鍔� s logTaskEntry.SendDate = DateTime.Now;//鍙戦�佹椂闂� - var agvResult = RcsHelper.CreateTaskForAgv(task, url, out agvMsg); - if (agvResult)//鎴愬姛 + //涓嬪彂杞藉叿涓庤揣浣嶇粦瀹� + var bind = RcsHelper.BindPalletAndSite(detailInfo.PalletNo, detailInfo.LocatNo, bindUrl, out string agvBindMsg); + if (bind) { - //璇锋眰鎴愬姛淇敼浠诲姟琛ㄧ浉搴斿瓧娈电姸鎬� - logTaskEntry.IsSuccess = 1; - logTaskEntry.IsSend = 0; - //logTaskEntry.IsCancel = 0; - logTaskEntry.BackDate = DateTime.Now; - logTaskEntry.Status = "1";//姝e湪鎵ц - Db.Insertable(logTaskEntry).ExecuteCommand(); + var agvResult = RcsHelper.CreateTaskForAgv(task, url, out agvMsg); + if (agvResult)//鎴愬姛 + { + //璇锋眰鎴愬姛淇敼浠诲姟琛ㄧ浉搴斿瓧娈电姸鎬� + logTaskEntry.IsSuccess = 1; + logTaskEntry.IsSend = 0; + //logTaskEntry.IsCancel = 0; + logTaskEntry.BackDate = DateTime.Now; + logTaskEntry.Status = "1";//姝e湪鎵ц + Db.Updateable(logTaskEntry).ExecuteCommand(); - //淇敼绉诲嚭鍌ㄤ綅鐘舵�� - locatModel.Status = "5";//绉诲嚭涓� - Db.Updateable(locatModel).ExecuteCommand(); + //淇敼绉诲嚭鍌ㄤ綅鐘舵�� + locatModel.Status = "5";//绉诲嚭涓� + Db.Updateable(locatModel).ExecuteCommand(); - //淇敼绉诲叆鍌ㄤ綅鐘舵�� - endLocatInfo.Status = "4";//绉诲叆涓� - Db.Updateable(endLocatInfo).ExecuteCommand(); + //淇敼绉诲叆鍌ㄤ綅鐘舵�� + endLocatInfo.Status = "4";//绉诲叆涓� + Db.Updateable(endLocatInfo).ExecuteCommand(); + } + else//澶辫触 + { + logTaskEntry.IsSuccess = 0; + logTaskEntry.Information = agvMsg; + Db.Updateable(logTaskEntry).ExecuteCommand(); + + throw new Exception($"缁欏皬杞︿笅鍙戠Щ搴撲换鍔″け璐ワ紝妗跺彿锛歿detailInfo.PalletNo}"); + } } - else//澶辫触 + else { logTaskEntry.IsSuccess = 0; - logTaskEntry.Information = agvMsg; - Db.Insertable(logTaskEntry).ExecuteCommand(); + logTaskEntry.Information = agvBindMsg; + Db.Updateable(logTaskEntry).ExecuteCommand(); throw new Exception($"缁欏皬杞︿笅鍙戠Щ搴撲换鍔″け璐ワ紝妗跺彿锛歿detailInfo.PalletNo}"); } - + } } //鎻愪氦浜嬪姟 @@ -1071,7 +1421,7 @@ /// <param name="standard">妗惰鏍�</param> /// <returns></returns> /// <exception cref="Exception"></exception> - private SysStorageLocat GetLocatModel(string houseNo, string palletStatus,string skuNo="",string standard="") + private SysStorageLocat GetLocatModel(string houseNo, string palletStatus,string zonghong,string skuNo="",string standard="",string lotNo = "") { try { @@ -1088,44 +1438,88 @@ .OrderBy(o => o.Row).OrderByDescending(o => o.Column).First(); break; case "2"://婊℃《 - //鏌ュ埌鍒版弧妗跺尯鍩熺紪鍙� - areaNo = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.Type == "1").Select(s => s.AreaNo).First(); - //鍒嗛厤鍌ㄤ綅 - //鍏堟煡鍒板悓鐗╂枡鐨勭粍 - string sql = $@"select Row from SysStorageLocat where WareHouseNo='{houseNo}' and AreaNo='{areaNo}' and LocatNo in( - select LocatNo from DataStockDetail where SkuNo='{skuNo}' and Standard='{standard}' and WareHouseNo='{houseNo}' and AreaNo='{areaNo}' - ) group by Row"; - - List<int> RowList = Db.Ado.SqlQuery<int>(sql).ToList(); - foreach (var rowItem in RowList) + //鎬绘贩鍒嗛厤鍌ㄤ綅 锛堜粨搴撶紪鐮丮12,M13锛夛紝鍒嗛厤閫昏緫锛氫紭鍏堝垎閰嶅悓鐗╂枡鐨勭粍锛屽啀鍒嗛厤鍒�3妤间腑闂寸珯锛屾渶鍚庡垎閰嶅埌4妤间腑闂寸珯 + if (zonghong == "M12" || zonghong == "M13") { - endLocatInfo = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" - && w.WareHouseNo == houseNo && w.AreaNo == areaNo && w.Row == rowItem) - .OrderByDescending(o => o.Column).First(); + //鍏堟煡鍒板悓鐗╂枡鐨勭粍 + string sql = $@"select Row,AreaNo from SysStorageLocat where LocatNo in( + select LocatNo from DataStockDetail where SkuNo='{skuNo}' and LotNo = '{lotNo}' and Standard='{standard}' + and AreaNo in ('C02','C25') + ) group by Row,AreaNo"; + var RowList = Db.Ado.SqlQuery<TableMan>(sql).ToList(); - if (endLocatInfo != null) + foreach (var rowItem in RowList) { - break; + endLocatInfo = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" && w.Row == rowItem.Row && w.AreaNo == rowItem.AreaNo && (w.WareHouseNo == "M01"||w.WareHouseNo == "M16")) + .OrderByDescending(o => o.Column).First(); + if (endLocatInfo.LocatNo != null) + { + break; + } + } + //娌℃湁鎵惧埌鐩稿悓鐗╂枡鍚岀粍鐨勭┖鍌ㄤ綅 + if (endLocatInfo.LocatNo == null) + { + + endLocatInfo = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" + && (w.AreaNo == "C02" || w.AreaNo == "C25")) + .OrderBy(o=>o.Layer).OrderByDescending(o => o.Column).OrderBy(o => o.Row).First(); + } + + } + else {//鍏朵粬鍖哄煙 + //鏌ュ埌鍒版弧妗跺尯鍩熺紪鍙� + areaNo = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.Type == "1").Select(s => s.AreaNo).First(); + //鍒嗛厤鍌ㄤ綅 + //鍏堟煡鍒板悓鐗╂枡鐨勭粍 + string sql = $@"select Row,AreaNo from SysStorageLocat where WareHouseNo='{houseNo}' and AreaNo='{areaNo}' and Status = '0' and LocatNo in( + select LocatNo from DataStockDetail where SkuNo='{skuNo}' and LotNo = '{lotNo}' and Standard='{standard}' and WareHouseNo='{houseNo}' and AreaNo='{areaNo}' + ) group by Row,AreaNo"; + + var RowList = Db.Ado.SqlQuery<TableMan>(sql).ToList(); + foreach (var rowItem in RowList) + { + endLocatInfo = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" + && w.WareHouseNo == houseNo && w.AreaNo == areaNo && w.Row == rowItem.Row && w.AreaNo == rowItem.AreaNo && (w.WareHouseNo == "M01" || w.WareHouseNo == "M16")) + .OrderByDescending(o => o.Column).First(); + + if (endLocatInfo.LocatNo != null) + { + break; + } + } + //娌℃湁鎵惧埌鐩稿悓鐗╂枡鍚岀粍鐨勭┖鍌ㄤ綅 + if (endLocatInfo.LocatNo == null) + { + + endLocatInfo = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" + && w.WareHouseNo == houseNo && w.AreaNo == areaNo) + .OrderByDescending(o => o.Column).OrderBy(o => o.Row).First(); } } - //娌℃湁鎵惧埌鐩稿悓鐗╂枡鍚岀粍鐨勭┖鍌ㄤ綅 - if (endLocatInfo == null) - { - endLocatInfo = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" - && w.WareHouseNo == houseNo && w.AreaNo == areaNo) - .OrderBy(o => o.Row).OrderByDescending(o => o.Column).First(); - } - break; case "3"://鑴忔《 - //鏌ュ埌鍒拌剰妗跺尯鍩熺紪鍙� - areaNo = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.Type == "2").Select(s => s.AreaNo).First(); + //鏌ュ埌鍒拌剰妗跺尯鍩熺紪鍙凤紝瀛樻斁椤哄簭锛孋54 鏂欐枟娓呮礂鏆傚瓨闂达紝C26 3妤间腑闂寸珯鑴忔《鍖猴紝C03 4妤间腑闂寸珯鑴忔《鍖� + var ztAreaNo = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.Type == "2").Select(w => w.AreaNo).ToList(); + //鏌ユ壘鎵�鏈夊彲鐢ㄨ剰妗跺簱浣� + var ztLocat = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" && ztAreaNo.Contains(w.AreaNo)) + .OrderBy(o => o.Row).OrderByDescending(o => o.Column).ToList(); + //areaNo = Db.Queryable<SysStorageArea>().Where(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.Type == "2").Select(s => s.AreaNo).First(); //鍒嗛厤鍌ㄤ綅 - endLocatInfo = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0" - && w.WareHouseNo == houseNo && w.AreaNo == areaNo) - .OrderBy(o => o.Row).OrderByDescending(o => o.Column).First(); - - + //鏂欐枟娓呮礂鏆傚瓨闂� + endLocatInfo = ztLocat.Where(w => w.AreaNo == "C54").FirstOrDefault(); + if (endLocatInfo == null) + { + endLocatInfo = ztLocat.Where(w => w.AreaNo == "C26").FirstOrDefault(); + if (endLocatInfo == null) + { + endLocatInfo = ztLocat.Where(w => w.AreaNo == "C03").FirstOrDefault(); + if (endLocatInfo == null) + { + throw new Exception("鏃犲彲鐢ㄨ剰妗跺簱浣�"); + } + } + } break; } return endLocatInfo; -- Gitblit v1.8.0