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 |  386 +++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 263 insertions(+), 123 deletions(-)

diff --git a/Wms/WMS.BLL/BllTransServer/HopperTransportServer.cs b/Wms/WMS.BLL/BllTransServer/HopperTransportServer.cs
index f497068..ce85dbb 100644
--- a/Wms/WMS.BLL/BllTransServer/HopperTransportServer.cs
+++ b/Wms/WMS.BLL/BllTransServer/HopperTransportServer.cs
@@ -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,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,//鏄惁鍙畬鎴�
@@ -359,7 +361,7 @@
                     //缁欎笅杞︿笅鍙戜换鍔�
                     logTaskEntry.SendDate = DateTime.Now;//鍙戦�佹椂闂�
                     //涓嬪彂杞藉叿绫诲瀷
-                    var bind = RcsHelper.BindPalletAndSite(palletModel.PalletNo, palletModel.LocatNo, url, out string agvBindMsg);
+                    var bind = RcsHelper.BindPalletAndSite(palletModel.PalletNo, palletModel.LocatNo, bindUrl, out string agvBindMsg);
                     if (bind)
                     {
                         var agvResult = RcsHelper.CreateTaskForAgv(task, url, out agvMsg);
@@ -371,7 +373,7 @@
                             //logTaskEntry.IsCancel = 0;
                             logTaskEntry.BackDate = DateTime.Now;
                             logTaskEntry.Status = "1";//姝e湪鎵ц
-                            Db.Insertable(logTaskEntry).ExecuteCommand();
+                            Db.Updateable(logTaskEntry).ExecuteCommand();
 
                             startLoction.Status = "3";//鍑哄簱涓�
                             Db.Updateable(startLoction).ExecuteCommand();
@@ -383,14 +385,14 @@
                         {
                             logTaskEntry.IsSuccess = 0;
                             logTaskEntry.Information = agvMsg;
-                            Db.Insertable(logTaskEntry).ExecuteCommand();
+                            Db.Updateable(logTaskEntry).ExecuteCommand();
                         }
                     }
                     else 
                     {
                         logTaskEntry.IsSuccess = 0;
                         logTaskEntry.Information = "璐ф灦涓庤揣浣嶇粦瀹氬け璐ワ紝鍘熷洜锛�"+agvBindMsg;
-                        Db.Insertable(logTaskEntry).ExecuteCommand();
+                        Db.Updateable(logTaskEntry).ExecuteCommand();
                     }
                    
                 }
@@ -442,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);
@@ -461,10 +464,6 @@
                         throw new Exception("娌℃湁鏌ヨ鍒扮墿鏂欎俊鎭�");
                     }
                     skuName = sku.SkuName;
-                }
-                else if (plnStatus == "3")
-                {
-
                 }
                 //鐩爣妤煎眰
                 var layer = startLoction.Layer;
@@ -502,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)
                 {
@@ -575,7 +576,7 @@
                         //logTaskEntry.IsCancel = 0;
                         logTaskEntry.BackDate = DateTime.Now;
                         logTaskEntry.Status = "1";//姝e湪鎵ц
-                        Db.Insertable(logTaskEntry).ExecuteCommand();
+                        Db.Updateable(logTaskEntry).ExecuteCommand();
 
                         startLoction.Status = "3";//鍑哄簱涓�
                         Db.Updateable(startLoction).ExecuteCommand();
@@ -587,7 +588,7 @@
                     {
                         logTaskEntry.IsSuccess = 0;
                         logTaskEntry.Information = agvMsg;
-                        Db.Insertable(logTaskEntry).ExecuteCommand();
+                        Db.Updateable(logTaskEntry).ExecuteCommand();
                     }
 
                 }
@@ -595,7 +596,7 @@
                 {
                     logTaskEntry.IsSuccess = 0;
                     logTaskEntry.Information = "璐ф灦涓庤揣浣嶇粦瀹氬け璐ワ紝鍘熷洜锛�"+agvBindMsg;
-                    Db.Insertable(logTaskEntry).ExecuteCommand();
+                    Db.Updateable(logTaskEntry).ExecuteCommand();
                 }
                 
 
@@ -634,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();
@@ -680,6 +681,7 @@
                     throw new Exception($"鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦�");
                 }
                 endLocatInfo.Status = "1";//鏈夌墿鍝�
+                endLocatInfo.UpdateTime = DateTime.Now;//鏇存柊鏃堕棿
                 //淇敼鐩爣鍌ㄤ綅鐘舵��
                 Db.Updateable(endLocatInfo).ExecuteCommand();
 
@@ -702,7 +704,7 @@
                 }
                 else if (endAreaInfo.Type == "1")//婊℃《鍖�
                 {
-                    stockDetail.PalletStatus = "1";
+                    stockDetail.PalletStatus = "2";
                     stockDetail.Status = "0";//寰呭垎閰�
                 }
                 else if (endAreaInfo.Type == "2")//鑴忔《鍖�
@@ -764,6 +766,38 @@
                 {
                     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)
@@ -775,6 +809,7 @@
                 var startLoction = new SysStorageLocat();//璧峰鍌ㄤ綅淇℃伅
                 var endLoction = new SysStorageLocat();//鐩爣鍌ㄤ綅淇℃伅
                 var palletModel = new DataStockDetail();//鍒嗛厤妗朵俊鎭�
+                string type = "";//鍙枡绫诲瀷
 
                 //寮�鍚簨鍔�
                 Db.BeginTran();
@@ -783,64 +818,117 @@
                 switch (deviceStation)
                 {
                     case "input"://鍙剰妗�
-                        //鍙《璁惧鎵�鍦ㄥ偍浣嶄俊鎭紙鐩爣鍌ㄤ綅锛�
-                        endLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo);
+                        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");
-                       
-                        //浼樺厛鏌ユ壘鑴忔《缂撳瓨杞﹂棿
-                        palletModel = stockDetail.Where(w => w.AreaNo == "C43").OrderByDescending(o => o.UpdateTime).First();
-                        if (palletModel == null)//鑴忔《缂撳瓨杞﹂棿娌℃湁鑴忔《锛屽啀浠庝笁妤间腑闂寸珯鑴忔《鍖烘煡鎵�
-                        {
-                            palletModel = stockDetail.Where(w =>w.WareHouseNo=="M16" && w.AreaNo == "C26").OrderByDescending(o => o.UpdateTime).First();
+                            // 鎵�鏈夊緟鍒嗛厤鐨勮剰妗�
+                            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}");
+                            }
                         }
-                        if (palletModel == null)//涓夋ゼ涓棿绔欒剰妗跺尯娌℃湁鑴忔《锛屽啀浠庡洓妤间腑闂寸珯鑴忔《鍖烘煡鎵�
+                        else
                         {
-                            palletModel = stockDetail.Where(w => w.WareHouseNo == "M01" && w.AreaNo == "C03").OrderByDescending(o => o.UpdateTime).First();
-                        }
-                        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}");
+                            throw new Exception("璧峰鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦�");
                         }
 
                         break;
 
                     case "output"://鍑�妗剁敵璇峰偍浣�
-                        //鍙《璁惧鎵�鍦ㄥ偍浣嶄俊鎭紙璧峰鍌ㄤ綅锛�
-                        startLoction = Db.Queryable<SysStorageLocat>().First(w => w.IsDel == "0" && w.WareHouseNo == houseNo && w.AreaNo == deviceInfo.AreaNo);
-                        //妗朵俊鎭�
-                        palletModel = Db.Queryable<DataStockDetail>().Where(w => w.WareHouseNo==houseNo && w.AreaNo==deviceInfo.AreaNo && w.LocatNo==startLoction.LocatNo).First();
-                        if (palletModel == null)
+                        if (deviceID == "1002" || deviceID == "1004")
                         {
-                            throw new Exception("鏈煡璇㈠埌鍑�妗朵俊鎭�");
+                            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("鏈壘鍒版竻娲楄捣濮嬬偣浣�");
+                            //}
                         }
-                        //鍒嗛厤鍌ㄤ綅
-                        //浼樺厛鍒嗛厤鍥涙ゼ涓棿绔欏噣妗跺尯
-                        endLoction= Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0"
-                                            && w.WareHouseNo == "M01" && w.AreaNo == "C01")
-                                            .OrderBy(o => o.Row).OrderByDescending(o => o.Column).First();
-                        if (endLoction == null)//鍥涙ゼ涓棿绔欏噣妗跺尯娌℃湁绌哄偍浣嶏紝鍐嶄粠涓夋ゼ涓棿绔欏噣妗跺尯鏌ユ壘
+                        else
                         {
-                            endLoction = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0"
-                                            && w.WareHouseNo == "M16" && w.AreaNo == "C24")
-                                            .OrderBy(o => o.Row).OrderByDescending(o => o.Column).First();
-                        }
-                        if (endLoction == null)//涓夋ゼ涓棿绔欏噣妗跺尯娌℃湁绌哄偍浣嶏紝鍐嶄粠涓夋ゼ娓呮礂闂寸紦瀛樺尯鏌ユ壘
-                        {
-                            endLoction = Db.Queryable<SysStorageLocat>().Where(w => w.IsDel == "0" && w.Status == "0" && w.Flag == "0"
-                                            && w.WareHouseNo == "M44" && w.AreaNo == "C55")
-                                            .OrderBy(o => o.Row).OrderByDescending(o => o.Column).First();
-                        }
-                        if (endLoction == null)
-                        {
-                            throw new Exception("鏈煡璇㈠埌鍚堥�傚偍浣�");
+                            throw new Exception("璧峰鐩爣鍌ㄤ綅淇℃伅涓嶅瓨鍦�");
                         }
                         break;
 
@@ -848,6 +936,7 @@
                         throw new Exception("鍙枡鐐逛綅寮傚父");
      
                 }
+                
                 var taskNo = new Common().GetMaxNo("TK");
                 //娣诲姞浠诲姟
                 var logTaskEntry = new LogTask
@@ -857,9 +946,9 @@
                     Receiver = "RCS",
                     IsSuccess = 0, //鏄惁涓嬪彂鎴愬姛 0澶辫触 1鎴愬姛
 
-                    StartLocat = "",//璧峰浣嶇疆
+                    StartLocat = startLoction.LocatNo,//璧峰浣嶇疆
                     EndLocat = endLoction.LocatNo,//鐩爣浣嶇疆
-                    PalletNo = "",//鎵樼洏鐮�
+                    PalletNo = palletModel.PalletNo,//鎵樼洏鐮�
                     IsSend = 1,//鏄惁鍙啀娆′笅鍙�
                     IsCancel = 1,//鏄惁鍙彇娑�
                     IsFinish = 1,//鏄惁鍙畬鎴�
@@ -878,7 +967,7 @@
                     Startport = palletModel.LocatNo,//璧峰浣嶇疆
                     Endport = endLoction.LocatNo,//鐩爣浣嶇疆
                     Pallno = palletModel.PalletNo,//妗跺彿
-                    Crtype = "1",//鍙《
+                    Crtype = type,//鍙《
                 };
 
                 string agvMsg = string.Empty;
@@ -897,7 +986,7 @@
                         //logTaskEntry.IsCancel = 0;
                         logTaskEntry.BackDate = DateTime.Now;
                         logTaskEntry.Status = "1";//姝e湪鎵ц
-                        Db.Insertable(logTaskEntry).ExecuteCommand();
+                        Db.Updateable(logTaskEntry).ExecuteCommand();
 
                         startLoction.Status = "3";//鍑哄簱涓�
                         Db.Updateable(startLoction).ExecuteCommand();
@@ -909,14 +998,14 @@
                     {
                         logTaskEntry.IsSuccess = 0;
                         logTaskEntry.Information = agvMsg;
-                        Db.Insertable(logTaskEntry).ExecuteCommand();
+                        Db.Updateable(logTaskEntry).ExecuteCommand();
                     }
                 }
                 else
                 {
                     logTaskEntry.IsSuccess = 0;
                     logTaskEntry.Information = agvBindMsg;
-                    Db.Insertable(logTaskEntry).ExecuteCommand();
+                    Db.Updateable(logTaskEntry).ExecuteCommand();
                 }
                 
                 //鎻愪氦浜嬪姟
@@ -934,6 +1023,7 @@
         {
             try
             {
+                bool t = false;
                 //鍒嗛厤妗剁殑搴撳瓨淇℃伅
                 var palletInfo = Db.Queryable<DataStockDetail>().First(w => w.IsDel == "0" && w.PalletNo == palletNo);
                 if (palletInfo == null)
@@ -1022,7 +1112,7 @@
                         string agvMsg = string.Empty;
                         //缁欎笅杞︿笅鍙戜换鍔�
                         logTaskEntry.SendDate = DateTime.Now;//鍙戦�佹椂闂�
-                                                             //涓嬪彂杞藉叿涓庤揣浣嶇粦瀹�
+                        //涓嬪彂杞藉叿涓庤揣浣嶇粦瀹�
                         var bind = RcsHelper.BindPalletAndSite(palletInfoYi.LocatNo, palletInfoYi.PalletNo, bindUrl, out string agvBindMsg);
                         if (bind)
                         {
@@ -1035,7 +1125,7 @@
                                 //logTaskEntry.IsCancel = 0;
                                 logTaskEntry.BackDate = DateTime.Now;
                                 logTaskEntry.Status = "1";//姝e湪鎵ц
-                                Db.Insertable(logTaskEntry).ExecuteCommand();
+                                Db.Updateable(logTaskEntry).ExecuteCommand();
 
                                 //淇敼绉诲嚭鍌ㄤ綅鐘舵��
                                 locatInfo.Status = "5";//绉诲嚭涓�
@@ -1049,7 +1139,7 @@
                             {
                                 logTaskEntry.IsSuccess = 0;
                                 logTaskEntry.Information = agvMsg;
-                                Db.Insertable(logTaskEntry).ExecuteCommand();
+                                Db.Updateable(logTaskEntry).ExecuteCommand();
 
                                 throw new Exception($"缁欏皬杞︿笅鍙戠Щ搴撲换鍔″け璐ワ紝妗跺彿锛歿palletInfoYi.PalletNo}");
                             }
@@ -1058,14 +1148,19 @@
                         {
                             logTaskEntry.IsSuccess = 0;
                             logTaskEntry.Information = agvBindMsg;
-                            Db.Insertable(logTaskEntry).ExecuteCommand();
+                            Db.Updateable(logTaskEntry).ExecuteCommand();
 
                             throw new Exception($"缁欏皬杞︿笅鍙戠Щ搴撲换鍔″け璐ワ紝妗跺彿锛歿palletInfoYi.PalletNo}");
                         }
-                        
+                        t = true;
+
+                    }
+                    else
+                    {
+                        return t;
                     }
                 }
-                return true;
+                return t;
             }
             catch (Exception e)
             {
@@ -1086,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("鏈煡璇㈠埌璇ヤ换鍔�");
@@ -1144,7 +1239,7 @@
                             //logTaskEntry.IsCancel = 0;
                             logTaskInfoZ.BackDate = DateTime.Now;
                             logTaskInfoZ.Status = "1";//姝e湪鎵ц
-                            Db.Insertable(logTaskInfoZ).ExecuteCommand();
+                            Db.Updateable(logTaskInfoZ).ExecuteCommand();
 
                             //淇敼绉诲嚭鍌ㄤ綅鐘舵��
                             startLocatInfoZ.Status = "5";//绉诲嚭涓�
@@ -1158,7 +1253,7 @@
                         {
                             logTaskInfoZ.IsSuccess = 0;
                             logTaskInfoZ.Information = agvMsg;
-                            Db.Insertable(logTaskInfoZ).ExecuteCommand();
+                            Db.Updateable(logTaskInfoZ).ExecuteCommand();
 
                             throw new Exception($"缁欏皬杞︿笅鍙戠Щ搴撲换鍔″け璐ワ紝妗跺彿锛歿logTaskInfoZ.PalletNo}");
                         }
@@ -1167,12 +1262,13 @@
                     {
                         logTaskInfoZ.IsSuccess = 0;
                         logTaskInfoZ.Information = agvBindMsg;
-                        Db.Insertable(logTaskInfoZ).ExecuteCommand();
+                        Db.Updateable(logTaskInfoZ).ExecuteCommand();
 
                         throw new Exception($"缁欏皬杞︿笅鍙戠Щ搴撲换鍔″け璐ワ紝妗跺彿锛歿logTaskInfoZ.PalletNo}");
                     }
                     
                 }
+                Db.CommitTran();
             }
             catch (Exception e)
             {
@@ -1220,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)
                         {
@@ -1260,7 +1356,7 @@
                             Crtype = "2"//鍙《
                         };
                         string agvMsg = string.Empty;
-                        //缁欎笅杞︿笅鍙戜换鍔�
+                        //缁欎笅杞︿笅鍙戜换鍔�            s
                         logTaskEntry.SendDate = DateTime.Now;//鍙戦�佹椂闂�
                         //涓嬪彂杞藉叿涓庤揣浣嶇粦瀹�
                         var bind = RcsHelper.BindPalletAndSite(detailInfo.PalletNo, detailInfo.LocatNo, bindUrl, out string agvBindMsg);
@@ -1275,7 +1371,7 @@
                                 //logTaskEntry.IsCancel = 0;
                                 logTaskEntry.BackDate = DateTime.Now;
                                 logTaskEntry.Status = "1";//姝e湪鎵ц
-                                Db.Insertable(logTaskEntry).ExecuteCommand();
+                                Db.Updateable(logTaskEntry).ExecuteCommand();
 
                                 //淇敼绉诲嚭鍌ㄤ綅鐘舵��
                                 locatModel.Status = "5";//绉诲嚭涓�
@@ -1289,7 +1385,7 @@
                             {
                                 logTaskEntry.IsSuccess = 0;
                                 logTaskEntry.Information = agvMsg;
-                                Db.Insertable(logTaskEntry).ExecuteCommand();
+                                Db.Updateable(logTaskEntry).ExecuteCommand();
 
                                 throw new Exception($"缁欏皬杞︿笅鍙戠Щ搴撲换鍔″け璐ワ紝妗跺彿锛歿detailInfo.PalletNo}");
                             }
@@ -1298,7 +1394,7 @@
                         {
                             logTaskEntry.IsSuccess = 0;
                             logTaskEntry.Information = agvBindMsg;
-                            Db.Insertable(logTaskEntry).ExecuteCommand();
+                            Db.Updateable(logTaskEntry).ExecuteCommand();
 
                             throw new Exception($"缁欏皬杞︿笅鍙戠Щ搴撲换鍔″け璐ワ紝妗跺彿锛歿detailInfo.PalletNo}");
                         }
@@ -1325,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
             {
@@ -1342,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