From 2877a2f0b9a0276e95f3312ae1dcdd1aece3ea94 Mon Sep 17 00:00:00 2001
From: cjs <2216046164@qq.com>
Date: 星期一, 21 七月 2025 17:29:04 +0800
Subject: [PATCH] 123

---
 HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs |  309 +++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 224 insertions(+), 85 deletions(-)

diff --git a/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs b/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
index fd850f0..5ba4346 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
@@ -11,6 +11,7 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Security.Cryptography;
+using System.Threading.Tasks;
 using System.Xml.Linq;
 using static HH.WCS.Mobox3.NFLZ.api.OtherModel;
 using static HH.WCS.Mobox3.NFLZ.dispatch.NDCApi;
@@ -42,6 +43,12 @@
                 Console.WriteLine($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_END_LOC}鍗歌揣瀹屾垚锛岀粓鐐圭粦瀹氬鍣▄mst.S_CNTR_CODE}");
                 LogHelper.Info($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_END_LOC}鍗歌揣瀹屾垚锛岀粓鐐圭粦瀹氬鍣▄mst.S_CNTR_CODE}");
                 LocationHelper.BindingLoc(mst.S_END_LOC, mst.S_CNTR_CODE.Split(',').ToList(),mst.S_TYPE);
+                if (mst.S_TYPE.Contains("婊℃墭涓婄嚎"))
+                {
+                    //瑙g粦鐗╂枡
+                    new SqlHelper<object>().GetInstance().Deleteable<CntrItemRel>().Where(a => mst.S_CNTR_CODE.Contains(a.S_CNTR_CODE)).ExecuteCommand();
+                    new SqlHelper<object>().GetInstance().Updateable<Container>().SetColumns(a => a.N_DETAIL_COUNT == 0).Where(a => mst.S_CNTR_CODE.Contains(a.S_CODE)).ExecuteCommand();
+                }
             }
 
         }
@@ -65,7 +72,7 @@
                 //璧风偣缁堢偣瑙i攣
                 LocationHelper.UnLockLoc(mst.S_START_LOC);
                 LocationHelper.UnLockLoc(mst.S_END_LOC);
-
+                
             }
 
         }
@@ -677,7 +684,7 @@
         /// <exception cref="NotImplementedException"></exception>
         public static void EmptyTask(WCSTask mst)
         {
-            //鐡剁洊娉ㄥ鏈虹┖鎵樹笂绾匡紝鑻ユ�浜ф�鐢ㄥ簱鍖烘病鏈夊浣欑殑绌烘墭锛屽垯鍦ㄩ潪鎬ヤ骇鎬ョ敤绌烘墭鍖烘嬁绌烘墭
+            //鐡剁洊娉ㄥ鏈虹┖鎵樹笂绾匡紝鑻ュ嵆浜ф�鐢ㄥ簱鍖烘病鏈夊浣欑殑绌烘墭锛屽垯鍦ㄩ潪鍗充骇鎬ョ敤绌烘墭鍖烘嬁绌烘墭
             var db = new SqlHelper<object>().GetInstance();
             Location startLoca = null;
 
@@ -716,46 +723,50 @@
                 LinZhiBCPWorkOrder bcpW = null;
                 bcpW = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_WorkNo == mst.S_WORK_NO && a.S_WorkState == "鎵ц涓�).First();
                 LogHelper.Info($"婊℃墭浠诲姟鐢熸垚澶勭悊,宸ュ崟锛歿JsonConvert.SerializeObject(bcpW)}");
-                if (mst.S_TYPE.Contains("鐡剁洊"))
-                {
-                    //鐡剁洊鏃犲嵆浜у嵆鐢ㄥ拰闈炲嵆浜у嵆鐢�-                    var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "鐡剁洊闈炲嵆浜ф弧妗� && a.enable == 1).FirstOrDefault();
-                    if (bcpInfo != null)
+                if (bcpW != null) 
+                { 
+                    if (mst.S_TYPE.Contains("鐡剁洊"))
                     {
-                        startLoca = DeviceProcess.getFDSXArea(db, bcpW, bcpInfo.areaCode);
-                    }
-                }
-                else
-                {
-                    if (bcpW.S_UsingNow == "Y")
-                    {
-                        LogHelper.Info($"鐡跺澂鍗充骇婊℃ 鏌ユ壘");
-                        startArea = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇婊℃" && a.enable == 1).FirstOrDefault().areaCode;
-                        startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea);
+                        //鐡剁洊鏃犲嵆浜у嵆鐢ㄥ拰闈炲嵆浜у嵆鐢�+                        var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "鐡剁洊闈炲嵆浜ф弧妗� && a.enable == 1).FirstOrDefault();
+                        if (bcpInfo != null)
+                        {
+                            startLoca = DeviceProcess.getFDSXArea(db, bcpW, bcpInfo.areaCode);
+                        }
                     }
                     else
                     {
-                        LogHelper.Info($"鐡跺澂缈绘枟鏈洪潪鍗充骇婊℃ 鏌ユ壘");
-                        string areaName = bcpW.S_PLineNo.Split('-')[1].Substring(0, 1) + "鍙风摱鍧炕鏂楁満闈炲嵆浜ф弧妗�;
-                        startArea = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).FirstOrDefault().areaCode;
-                        startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea);
+                        if (bcpW.S_UsingNow == "Y")
+                        {
+                            LogHelper.Info($"鐡跺澂鍗充骇婊℃ 鏌ユ壘");
+                            startArea = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇婊℃" && a.enable == 1).FirstOrDefault().areaCode;
+                            startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea);
+                        }
+                        else
+                        {
+                            LogHelper.Info($"鐡跺澂缈绘枟鏈洪潪鍗充骇婊℃ 鏌ユ壘");
+                            string areaName = bcpW.S_PLineNo.Split('-')[1].Substring(0, 1) + "鍙风摱鍧炕鏂楁満闈炲嵆浜ф弧妗�;
+                            startArea = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).FirstOrDefault().areaCode;
+                            startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea);
+                        }
                     }
-                }
 
-                if (startLoca != null)
-                {
-                    LogHelper.Info("startLoca" + JsonConvert.SerializeObject(startLoca));
-                    string taskType = "";
-                    if (mst.S_TYPE == "缈绘枟鏈哄嵆浜х┖鎵樹笅绾匡紙鐡跺澂锛�) taskType = "缈绘枟鏈哄嵆浜ф弧鎵樹笂绾匡紙鐡跺澂锛�;
-                    if (mst.S_TYPE == "缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡跺澂锛�) taskType = "缈绘枟鏈哄簱瀛樻弧鎵樹笂绾匡紙鐡跺澂锛�;
-                    if (mst.S_TYPE == "缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡剁洊锛�) taskType = "缈绘枟鏈哄簱瀛樻弧鎵樹笂绾匡紙鐡剁洊锛�;
-                    var cntrInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoca.S_CODE).First();
-                    if (cntrInfo != null)
+                    if (startLoca != null)
                     {
-                        WMSHelper.CreateOpTask(startLoca.S_CODE, mst.S_START_LOC, "鍑哄簱", taskType, cntrInfo.S_CNTR_CODE,"","",bcpW.S_WorkNo);
+                        LogHelper.Info("startLoca" + JsonConvert.SerializeObject(startLoca));
+                        string taskType = "";
+                        if (mst.S_TYPE == "缈绘枟鏈哄嵆浜х┖鎵樹笅绾匡紙鐡跺澂锛�) taskType = "缈绘枟鏈哄嵆浜ф弧鎵樹笂绾匡紙鐡跺澂锛�;
+                        if (mst.S_TYPE == "缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡跺澂锛�) taskType = "缈绘枟鏈哄簱瀛樻弧鎵樹笂绾匡紙鐡跺澂锛�;
+                        if (mst.S_TYPE == "缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡剁洊锛�) taskType = "缈绘枟鏈哄簱瀛樻弧鎵樹笂绾匡紙鐡剁洊锛�;
+                        var cntrInfo = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE == startLoca.S_CODE).First();
+                        if (cntrInfo != null)
+                        {
+                            WMSHelper.CreateOpTask(startLoca.S_CODE, mst.S_START_LOC, "鍑哄簱", taskType, cntrInfo.S_CNTR_CODE,"","",bcpW.S_WorkNo);
+                        }
+                        else LogHelper.Info($"鏈粦瀹氭墭鐩橈紝璐т綅鍙凤細{startLoca.S_CODE}");
                     }
-                    else LogHelper.Info($"鏈粦瀹氭墭鐩橈紝璐т綅鍙凤細{startLoca.S_CODE}");
                 }
+                
             }
         }
 
@@ -1105,15 +1116,27 @@
                         Extend2 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_END_LOC).First().S_AGV_SITE;
                         if (mst.N_START_LAYER > 1)
                         {
-                            Extend1 = db.Queryable<LocationExt>().Where(a => a.S_LOC_CODE == mst.S_START_LOC && a.N_LAYER == mst.N_START_LAYER).First().S_AGV_SITE;
+                            if(mst.S_TYPE != "鐡跺澂闈炲嵆浜х┖妗嗗叆搴� && mst.S_TYPE != "鐡跺澂鎺ラ┏浣嶅叆搴� && mst.S_TYPE != "鐡剁洊绌烘墭鍏ュ簱")
+                            {
+                                Extend1 = db.Queryable<LocationExt>().Where(a => a.S_LOC_CODE == mst.S_START_LOC && a.N_LAYER == mst.N_START_LAYER).First().S_AGV_SITE;
+                            }
+                            
                         }
                         if (mst.N_END_LAYER > 1)
                         {
                             Extend2 = db.Queryable<LocationExt>().Where(a => a.S_LOC_CODE == mst.S_END_LOC && a.N_LAYER == mst.N_END_LAYER).First().S_AGV_SITE;
                         }
-                        if(mst.S_TYPE == "鐡跺澂闈炴�浜цˉ婊℃" || mst.S_TYPE == "鐡剁洊闈炴�浜цˉ婊℃" || mst.S_TYPE == "鐡跺澂闈炴�浜цˉ绌烘" || mst.S_TYPE == "鐡剁洊闈炴�浜цˉ绌烘" || mst.S_TYPE == "娉ㄥ鍗充骇婊℃墭涓嬬嚎锛堢摱鍧級")
+                        if(mst.S_TYPE == "鐡跺澂闈炲嵆浜цˉ婊℃" || mst.S_TYPE == "鐡剁洊闈炲嵆浜цˉ婊℃澶у寘瑁� || mst.S_TYPE == "鐡跺澂闈炲嵆浜цˉ绌烘" || mst.S_TYPE == "鐡剁洊闈炲嵆浜цˉ绌烘" || mst.S_TYPE == "娉ㄥ鍗充骇婊℃墭涓嬬嚎锛堢摱鍧級")
                         {
                             Extend2 = Settings.dXSites.Where(it => it.loc == mst.S_END_LOC).First().site.ToString();
+                        }
+
+                        if(mst.S_TYPE == "鎺ラ┏浣嶅叆搴�)
+                        {
+                            if(mst.S_CNTR_CODE.Split(',').ToList().Count != 2)
+                            {
+                                Extend1 = db.Queryable<LocationExt>().Where(a => a.S_LOC_CODE == mst.S_START_LOC && a.N_LAYER == 1).First().S_AGV_SITE;
+                            }
                         }
 
                         Extend3 = "0";
@@ -1125,28 +1148,28 @@
                         //Extend4 = db.Queryable<LinjiangBCPWorkOrder>().Where(a => a.S_WorkNo == workNo).First().S_UsingNow == "N" ? "2" : "1";
 
                         //鐡跺澂娉ㄥ鏈虹珯鐐规牴鎹厤缃枃浠惰幏鍙�-                        if (taskType.Contains("娉ㄥ") && taskType.Contains("鐡跺澂"))
-                        {
-                            var devInfo = Settings.deviceInfos.Where(a => (a.TN_Location.Contains(mst.S_START_LOC) || a.TN_Location.Contains(mst.S_END_LOC)) && a.enable == 1).FirstOrDefault();
-                            string machine = (devInfo.TN_Location[0] == mst.S_START_LOC || devInfo.TN_Location[0] == mst.S_END_LOC) ? "A" : "B";
-                            string machineTwo = devInfo.deviceName.Split('-')[1] + machine;
-                            LogHelper.Info($"鏈哄彴锛歿machineTwo}");
-                            var siteInfo = Settings.pPZSJSites.Where(a => a.siteName == machineTwo && a.enable == 1).FirstOrDefault();
-                            if (siteInfo != null)
-                            {
-                                if (taskType.Contains("绌烘墭涓婄嚎"))
-                                {
-                                    //鏀瑰彉缁堢偣绔欑偣
-                                    Extend2 = siteInfo.site[1];
-                                }
-                                else
-                                {
-                                    //鏀瑰彉璧风偣绔欑偣
-                                    Extend1 = siteInfo.site[0];
-                                }
-                            }
-                            else LogHelper.Info("閰嶇疆鏂囦欢鏈厤缃摱鍧敞濉戞満绔欑偣");
-                        }
+                        //if (taskType.Contains("娉ㄥ") && taskType.Contains("鐡跺澂"))
+                        //{
+                        //    var devInfo = Settings.deviceInfos.Where(a => (a.TN_Location.Contains(mst.S_START_LOC) || a.TN_Location.Contains(mst.S_END_LOC)) && a.enable == 1).FirstOrDefault();
+                        //    string machine = (devInfo.TN_Location[0] == mst.S_START_LOC || devInfo.TN_Location[0] == mst.S_END_LOC) ? "A" : "B";
+                        //    string machineTwo = devInfo.deviceName.Split('-')[1] + machine;
+                        //    LogHelper.Info($"鏈哄彴锛歿machineTwo}");
+                        //    var siteInfo = Settings.pPZSJSites.Where(a => a.siteName == machineTwo && a.enable == 1).FirstOrDefault();
+                        //    if (siteInfo != null)
+                        //    {
+                        //        if (taskType.Contains("绌烘墭涓婄嚎"))
+                        //        {
+                        //            //鏀瑰彉缁堢偣绔欑偣
+                        //            Extend2 = siteInfo.site[1];
+                        //        }
+                        //        else
+                        //        {
+                        //            //鏀瑰彉璧风偣绔欑偣
+                        //            Extend1 = siteInfo.site[0];
+                        //        }
+                        //    }
+                        //    else LogHelper.Info("閰嶇疆鏂囦欢鏈厤缃摱鍧敞濉戞満绔欑偣");
+                        //}
                     }
 
                     Console.WriteLine($"[SendTask]:TaskNo={mst.S_CODE.Trim()},start={Extend1},end={Extend2}");
@@ -1310,6 +1333,7 @@
                                     {
                                         locInfo = locInfo.Where(a => a.N_ROW == 1 || a.N_ROW == 2).ToList();
                                     }
+
                                     LogHelper.Info($"鍏ュ簱绠楁硶02:鏌ヨ鍒板彲鍏ヨ揣浣嶇殑鏁伴噺涓猴細{locInfo.Count}");
                                     foreach (var a in locInfo)
                                     {
@@ -1324,7 +1348,7 @@
                                                 var endItemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == endCntrInfo.S_CNTR_CODE).First();
                                                 if (endItemInfo != null)
                                                 {
-                                                    endItemCode = endItemInfo.S_ITEM_CODE;
+                                                    endItemCode = endItemInfo.S_ITEM_CODE + endItemInfo.S_BATCH_NO;
                                                 }
                                             }
                                             else
@@ -1345,7 +1369,7 @@
                                                     else
                                                     {
                                                         //鏌ヨ鍚庨潰褰撳墠璐т綅鍚庝竴涓�-                                                        result = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.N_ROW > a.N_ROW && b.S_LOCK_STATE == "鏃�).OrderBy(b => b.N_COL).First();
+                                                        result = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.N_ROW == a.N_ROW && b.N_COL > a.N_COL && b.N_CURRENT_NUM < b.N_CAPACITY && b.S_LOCK_STATE == "鏃�).OrderBy(b => b.N_COL).First();
                                                     }
                                                     if (result != null)
                                                     {
@@ -1457,7 +1481,7 @@
                                         LogHelper.Info($"鍑哄簱绠楁硶04:褰撳墠璐т綅缁戝畾鐨勬墭鐩樼爜涓猴細{cntrInfo.S_CNTR_CODE}");
                                         string endItemCode = "";
                                         var itemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First();
-                                        if (itemInfo != null && itemInfo.S_ITEM_CODE == itemCode)
+                                        if (itemInfo != null)
                                         {
                                             endItemCode = itemInfo.S_ITEM_CODE;
                                         }
@@ -1551,14 +1575,14 @@
         /// <param name="taskName"></param>
         /// <returns></returns>
         /// <exception cref="NotImplementedException"></exception>
-        internal static Location BCPFullOut(SqlSugarClient db, string taskName, string itemCode)
+        internal static Location BCPFullOut(SqlSugarClient db, string taskName, string itemCode,string batch)
         {
             Location result = null;
 
-            LogHelper.Info($"鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱被鍨嬶細{taskName}锛岀墿鏂欑紪鐮侊細{itemCode}");
+            LogHelper.Info($"鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱被鍨嬶細{taskName}锛岀墿鏂欑紪鐮侊細{itemCode},鎵规鍙凤細{batch}");
             if (taskName.Contains("鍗充骇"))
             {
-                //娉ㄥ鏈烘�浜у嵆鐢ㄤ笅绾匡紝棣栧厛涓嬬嚎鍒板嵆浜у嵆鐢ㄦ弧妗嗙嚎杈癸紝婊$湺绾胯竟婊′簡锛屼笅鍒板嵆浜у嵆鐢ㄦ弧妗嗙紦瀛樺尯锛屾弧妗嗙紦瀛樺尯婊′簡锛屼笅鍒板叆搴撴帴椹冲爢鍙犱綅
+                //娉ㄥ鏈哄嵆浜у嵆鐢ㄤ笅绾匡紝棣栧厛涓嬬嚎鍒板嵆浜у嵆鐢ㄦ弧妗嗙嚎杈癸紝婊$湺绾胯竟婊′簡锛屼笅鍒板嵆浜у嵆鐢ㄦ弧妗嗙紦瀛樺尯锛屾弧妗嗙紦瀛樺尯婊′簡锛屼笅鍒板叆搴撴帴椹冲爢鍙犱綅
                 var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇婊℃" && a.enable == 1).FirstOrDefault();
                 if(areaInfo != null)
                 {
@@ -1910,7 +1934,7 @@
         /// </summary>
         /// <param name="cntr"></param>
         /// <returns></returns>
-        internal static bool BindLocCntr(string loc, string cntr, string itemCode, string batchNo, string deviceName = "", string itemlayer = "")
+        internal static bool BindLocCntr(string loc, string cntr, string itemCode, string batchNo, string deviceName = "", string itemlayer = "",string itemName = "")
         {
             LogHelper.Info($"缁戝畾璐т綅瀹瑰櫒琛�loc:{loc},cntr:{cntr}");
             bool result = true;
@@ -1926,22 +1950,10 @@
                     {
                         var cir = new LocCntrRel { S_LOC_CODE = loc, S_CNTR_CODE = cntrCode, S_SRC = deviceName };
                         if (db.Insertable<LocCntrRel>(cir).ExecuteCommand() > 0) LogHelper.Info($"璐т綅瀹瑰櫒琛ㄧ粦瀹氭垚鍔燂紝璐т綅鍙凤細{loc}锛屾墭鐩樺彿锛歿cntrCode}");
-                        var Con = db.Queryable<Container>().Where(a => a.S_CODE == cntrCode).First();
-                        if(Con == null)
-                        {
-                            if(db.Insertable<Container>(new Container
-                            {
-                                S_CODE = cntrCode,
-                                N_TYPE = 1,
-                                N_DETAIL_COUNT = 1
-                            }).ExecuteCommand() > 0)
-                            {
-                                LogHelper.Info($"瀹瑰櫒琛ㄧ粦瀹氭垚鍔燂紝鎵樼洏鍙凤細{cntrCode}");
-                            }
-                        }
+                        
                         if (!string.IsNullOrEmpty(itemCode))
                         {
-                            BindCntrItem(cntrCode, itemCode, batchNo, itemlayer);
+                            BindCntrItem(cntrCode, itemCode, batchNo, itemlayer, itemName);
                         }
                     }
                 }
@@ -1957,7 +1969,7 @@
         /// <param name="batchNo"></param>
         /// <param name="qty"></param>
         /// <returns></returns>
-        internal static bool BindCntrItem(string trayCode, string itemCode, string batchNo, string itemlayer = "")
+        internal static bool BindCntrItem(string trayCode, string itemCode, string batchNo, string itemlayer = "",string itemName = "")
         {
             LogHelper.Info($"缁戝畾瀹瑰櫒鐗╂枡琛�trayCode:{trayCode}");
             var res = false;
@@ -1965,6 +1977,26 @@
             try
             {
                 db.BeginTran();
+
+                var Con = db.Queryable<Container>().Where(a => a.S_CODE == trayCode).First();
+                if (Con == null)
+                {
+                    int detallCount = 1;
+                    if (db.Insertable<Container>(new Container
+                    {
+                        S_CODE = trayCode,
+                        N_TYPE = 1,
+                        N_DETAIL_COUNT = detallCount
+                    }).ExecuteCommand() > 0)
+                    {
+                        LogHelper.Info($"瀹瑰櫒琛ㄧ粦瀹氭垚鍔燂紝鎵樼洏鍙凤細{trayCode}");
+                    }
+                }
+                else
+                {
+                    Con.N_DETAIL_COUNT = 1;
+                    db.Updateable(Con).UpdateColumns(a => new { a.N_DETAIL_COUNT }).ExecuteCommand();
+                }
                 //db.Updateable(cntr).UpdateColumns(it => new { it.S_DEST }).ExecuteCommand();
                 //1.灏嗗師鏈夊鍣ㄧ墿鏂欎俊鎭垹闄�                 //db.Deleteable<CntrItemRel>().Where(it => it.S_CNTR_CODE == cntr.S_CNTR_CODE.Trim()).ExecuteCommand();
@@ -1972,8 +2004,8 @@
                 var info = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE.Trim() == trayCode.Trim()).First();
                 if (info == null)
                 {
-                    var cir = new CntrItemRel { S_CNTR_CODE = trayCode, S_BATCH_NO = batchNo, S_ITEM_CODE = itemCode, S_ITEM_MODEL = itemlayer };
-                    if (db.Insertable<CntrItemRel>(cir).ExecuteCommand() > 0) LogHelper.Info($"瀹瑰櫒鐗╂枡琛ㄧ粦瀹氭垚鍔燂紝鎵樼洏鍙凤細{trayCode},鐗╂枡缂栫爜锛歿itemCode},鐗╂枡灞傛暟锛歿itemlayer}");
+                    var cir = new CntrItemRel { S_CNTR_CODE = trayCode, S_BATCH_NO = batchNo, S_ITEM_CODE = itemCode, S_ITEM_MODEL = itemlayer,S_ITEM_NAME = itemName };
+                    if (db.Insertable<CntrItemRel>(cir).ExecuteCommand() > 0) LogHelper.Info($"瀹瑰櫒鐗╂枡琛ㄧ粦瀹氭垚鍔燂紝鎵樼洏鍙凤細{trayCode},鐗╂枡缂栫爜锛歿itemCode},鐗╂枡灞傛暟锛歿itemlayer},鐗╂枡鍚嶇О锛歿itemName}");
                 }
 
 
@@ -2472,11 +2504,20 @@
                 {
                     foreach (var a in locList)
                     {
-                        var rowInfo = db.Queryable<RowLock>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.S_ROW == a.S_ROW && b.S_LOCK_STATE == "鏃�).First();
-                        if(rowInfo != null && a.S_LOCK_STATE == "鏃�)
+                        var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First();
+                        if(cntrInfo != null)
                         {
-                            result = a;
-                            break;
+                            var itemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First();
+                            if(itemInfo == null)
+                            {
+                                var rowInfo = db.Queryable<RowLock>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.S_ROW == a.S_ROW && b.S_LOCK_STATE == "鏃�).First();
+                                if (rowInfo != null && a.S_LOCK_STATE == "鏃�)
+                                {
+                                    result = a;
+                                    break;
+                                }
+                            }
+
                         }
                     }
                 }
@@ -2488,5 +2529,103 @@
 
             return result;
         }
+
+        /// <summary>
+        /// 鍙栨秷浠诲姟
+        /// </summary>
+        /// <param name="tN_Task"></param>
+        /// <exception cref="NotImplementedException"></exception>
+        internal static void cancelTask(WCSTask TN_Task)
+        {
+            if(!WCSHelper.CheckActionRecordExist(TN_Task.S_CODE, 4))
+            {
+                //鍙栨秷浠诲姟
+                WCSHelper.UpdateStatus(TN_Task.S_CODE, 4);
+                if (TN_Task.S_TYPE == "鎺ラ┏浣嶅叆搴�)
+                {
+                    new SqlHelper<object>().GetInstance().Deleteable<CntrItemRel>().Where(a => TN_Task.S_CNTR_CODE.Contains(a.S_CNTR_CODE)).ExecuteCommand();
+                    new SqlHelper<object>().GetInstance().Deleteable<LocCntrRel>().Where(a => TN_Task.S_CNTR_CODE.Contains(a.S_CNTR_CODE)).ExecuteCommand();
+                }
+            }
+            else
+            {
+                WCSHelper.UpdateStatus(TN_Task.S_CODE, 3);
+            }
+
+            var op = WMSHelper.GetWmsTask(TN_Task.S_OP_CODE);
+            if (op != null)
+            {
+                    //绛夊緟鐩存帴淇敼鐘舵�涓哄彇娑�+                op.N_B_STATE = 2;
+                WMSHelper.UpdateTaskState(op);
+            }
+            NDCApi.CancelOrder(TN_Task.S_CODE.Trim());
+            OperateStatus(TN_Task, 7);
+        }
+
+        internal static Location BCPInOrOutTwo(SqlSugarClient db, string areaName, string itemCode)
+        {
+            Location result = null;
+            var areaInfo = Settings.areaInfos.Where(a => a.areaName.Contains(areaName) && a.enable == 1).OrderByDescending(a => a.pri).ToList();
+            if (areaInfo.Count > 0)
+            {
+                foreach (var it in areaInfo)
+                {
+                    LogHelper.Info($"鐡跺澂闈炲嵆浜ф弧妗嗚浆杩�area锛歿it.areaName},itemCode:{itemCode}");
+                    var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == it.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).Includes(a => a.LocCntrRel).ToList();
+                    if (locList.Count > 0)
+                    {
+                        LogHelper.Info($"鐡跺澂闈炲嵆浜ф弧妗嗚浆杩�鏌ヨ鍒板彲鍑鸿揣浣嶆暟閲忥細{locList.Count}");
+                        foreach (var a in locList)
+                        {
+                            LogHelper.Info($"鐡跺澂闈炲嵆浜ф弧妗嗚浆杩�鏌ヨ璐т綅锛歿a.S_CODE},閿佺姸鎬侊細{a.S_LOCK_STATE}");
+                            if (a.S_LOCK_STATE == "鏃�)
+                            {
+                                var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First();
+                                if (cntrInfo != null)
+                                {
+                                    LogHelper.Info($"鐡跺澂闈炲嵆浜ф弧妗嗚浆杩�褰撳墠璐т綅缁戝畾鐨勬墭鐩樼爜涓猴細{cntrInfo.S_CNTR_CODE}");
+                                    string endItemCode = "";
+                                    var itemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == cntrInfo.S_CNTR_CODE).First();
+                                    if (itemInfo != null)
+                                    {
+                                        endItemCode = itemInfo.S_ITEM_CODE;
+                                    }
+                                    if (endItemCode == itemCode)
+                                    {
+                                        LogHelper.Info($"鐡跺澂闈炲嵆浜ф弧妗嗚浆杩�褰撳墠璐т綅缁戝畾鐨勭墿鏂欑紪鐮佷负锛歿endItemCode}锛岀墿鏂欑被鍨嬩负锛歿itemInfo.S_BATCH_NO},缁戝畾鏃堕棿涓猴細{itemInfo.T_CREATE}");
+                                        if ((itemInfo.S_BATCH_NO == "闈炲嵆浜� && itemInfo.T_CREATE.AddHours(Settings.lQHours) <= DateTime.Now) || itemInfo.S_BATCH_NO == "鍗充骇")
+                                        {
+                                            //闈炲嵆浜х摱鍧渶瑕佸垽鏂喎鍗存椂闂存槸鍚﹀ぇ浜庝竴瀹氭椂闂�+                                            //鍒ゆ柇褰撳墠鎺掓湁鏃犻攣
+                                            var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == it.areaCode && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First();
+                                            if (lockInfo == null)
+                                            {
+                                                result = a;
+                                                break;
+                                            }
+                                            else
+                                            {
+                                                LogHelper.Info($"鐡跺澂闈炲嵆浜ф弧妗嗚浆杩�褰撳墠鎺掓湁閿侊紝璐т綅鍙凤細{lockInfo.S_CODE}");
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                    if (result != null)
+                    {
+                        break;
+                    }
+                }
+
+            }
+            else
+            {
+                LogHelper.Info($"鐡跺澂闈炲嵆浜ф弧妗嗚浆杩愶細{areaName}鏈厤缃�);
+            }
+            return result;
+        }
     }
 }

--
Gitblit v1.9.1