From 648f4270f4f56c5ca284dbcfa650de05e46a7052 Mon Sep 17 00:00:00 2001
From: cjs <2216046164@qq.com>
Date: 星期三, 16 七月 2025 17:20:59 +0800
Subject: [PATCH] 11111

---
 HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs |  585 ++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 400 insertions(+), 185 deletions(-)

diff --git a/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs b/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
index 97abf92..28101f5 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);
-
+                
             }
 
         }
@@ -146,15 +153,18 @@
             if (mst.S_TYPE.Contains("绌烘墭涓婄嚎"))
             {
                 LogHelper.Info($"{mst.S_TYPE}鍗歌揣瀹屾垚锛屽啓鍏ヤ俊鍙�);
-                //鏍规嵁璧风偣鍒ゆ柇鏄疉鍙h繕鏄疊鍙�-                var locCode = mst.S_END_LOC;
-                var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault();
-                if (devInfo != null)
+                if(state == 6)
                 {
-                    var signal = devInfo.TN_Location[0] == mst.S_END_LOC ? "3F 00 10 0D 0A" : "3F 00 20 0D 0A";
-                    if (PlcHelper.SendHex(devInfo.address, signal)) LogHelper.Info($"{mst.S_TYPE}浠诲姟鍗歌揣瀹屾垚锛屽啓鍏ヤ俊鍙凤細{signal}锛宨p锛歿devInfo.address}");
+                    //鏍规嵁璧风偣鍒ゆ柇鏄疉鍙h繕鏄疊鍙�+                    var locCode = mst.S_END_LOC;
+                    var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault();
+                    if (devInfo != null)
+                    {
+                        var signal = devInfo.TN_Location[0] == mst.S_END_LOC ? "3F 00 10 0D 0A" : "3F 00 20 0D 0A";
+                        if (PlcHelper.SendHex(devInfo.address, signal)) LogHelper.Info($"{mst.S_TYPE}浠诲姟鍗歌揣瀹屾垚锛屽啓鍏ヤ俊鍙凤細{signal}锛宨p锛歿devInfo.address}");
+                    }
+                    else LogHelper.Info($"璁惧鏈壘鍒帮紝璐т綅鍙凤細{mst.S_END_LOC}");
                 }
-                else LogHelper.Info($"璁惧鏈壘鍒帮紝璐т綅鍙凤細{mst.S_END_LOC}");
             }
             if (mst.S_TYPE.Contains("婊℃墭涓婄嚎"))
             {
@@ -176,7 +186,7 @@
                 var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault();
                 if (devInfo != null)
                 {
-                    var signal = "3F 00 12 22 00 0D 0A";
+                    var signal = "3F 00 12 21 0D 0A";
                     if (state == 1102) signal = "3F 00 10 20 0D 0A";
                     if (PlcHelper.SendHex(devInfo.address, signal)) LogHelper.Info($"{mst.S_TYPE}浠诲姟鍙栬揣瀹屾垚锛屽啓鍏ヤ俊鍙凤細{signal}锛宨p锛歿devInfo.address}");
                 }
@@ -185,15 +195,18 @@
             if (mst.S_TYPE.Contains("婊℃墭涓嬬嚎"))
             {
                 LogHelper.Info($"{mst.S_TYPE}鍙栬揣瀹屾垚锛屽啓鍏ヤ俊鍙�);
-                //鏍规嵁璧风偣鍒ゆ柇鏄疉鍙h繕鏄疊鍙�-                var locCode = mst.S_START_LOC;
-                var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault();
-                if (devInfo != null)
+                if(state == 4)
                 {
-                    var signal = devInfo.TN_Location[0] == mst.S_START_LOC ? "3F 00 10 0D 0A" : "3F 00 20 0D 0A";
-                    if (PlcHelper.SendHex(devInfo.address, signal)) LogHelper.Info($"{mst.S_TYPE}浠诲姟鍙栬揣瀹屾垚锛屽啓鍏ヤ俊鍙凤細{signal}锛宨p锛歿devInfo.address}");
+                    //鏍规嵁璧风偣鍒ゆ柇鏄疉鍙h繕鏄疊鍙�+                    var locCode = mst.S_START_LOC;
+                    var devInfo = Settings.deviceInfos.Where(a => a.TN_Location.Contains(locCode)).FirstOrDefault();
+                    if (devInfo != null)
+                    {
+                        var signal = devInfo.TN_Location[0] == mst.S_START_LOC ? "3F 00 10 0D 0A" : "3F 00 20 0D 0A";
+                        if (PlcHelper.SendHex(devInfo.address, signal)) LogHelper.Info($"{mst.S_TYPE}浠诲姟鍙栬揣瀹屾垚锛屽啓鍏ヤ俊鍙凤細{signal}锛宨p锛歿devInfo.address}");
+                    }
+                    else LogHelper.Info($"璁惧鏈壘鍒帮紝璐т綅鍙凤細{mst.S_START_LOC}");
                 }
-                else LogHelper.Info($"璁惧鏈壘鍒帮紝璐т綅鍙凤細{mst.S_START_LOC}");
             }
         }
 
@@ -656,7 +669,6 @@
             if (state == 6)//鍗歌揣瀹屾垚
             {
                 claimGoodsTime(mst, state);
-                writeSignal(mst);
                 CacheBitUpdate(mst, false);
             }
             if (state == 7)
@@ -672,14 +684,14 @@
         /// <exception cref="NotImplementedException"></exception>
         public static void EmptyTask(WCSTask mst)
         {
-            //鐡剁洊娉ㄥ鏈虹┖鎵樹笂绾匡紝鑻ユ�浜ф�鐢ㄥ簱鍖烘病鏈夊浣欑殑绌烘墭锛屽垯鍦ㄩ潪鎬ヤ骇鎬ョ敤绌烘墭鍖烘嬁绌烘墭
+            //鐡剁洊娉ㄥ鏈虹┖鎵樹笂绾匡紝鑻ュ嵆浜ф�鐢ㄥ簱鍖烘病鏈夊浣欑殑绌烘墭锛屽垯鍦ㄩ潪鍗充骇鎬ョ敤绌烘墭鍖烘嬁绌烘墭
             var db = new SqlHelper<object>().GetInstance();
             Location startLoca = null;
 
             if (mst.S_TYPE.Contains("婊℃墭涓嬬嚎"))
             {
                 LogHelper.Info($"绌烘墭浠诲姟鐢熸垚澶勭悊锛屼换鍔$被鍨嬶細{mst.S_TYPE}");
-                string areaName = mst.S_TYPE.Contains("搴撳瓨") ? "鐡惰儦闈炲嵆浜х┖妗� : "鐡惰儦鍗充骇绌烘";
+                string areaName = mst.S_TYPE.Contains("搴撳瓨") ? "鐡跺澂闈炲嵆浜х┖妗� : "鐡跺澂鍗充骇绌烘";
                 var areaInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).First();
                 if(areaInfo != null)
                 {
@@ -710,7 +722,7 @@
                 string startArea = "";
                 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("鐡剁洊"))
                 {
                     //鐡剁洊鏃犲嵆浜у嵆鐢ㄥ拰闈炲嵆浜у嵆鐢�@@ -724,13 +736,14 @@
                 {
                     if (bcpW.S_UsingNow == "Y")
                     {
-                        LogHelper.Info($"鐡惰儦鍗充骇婊℃ 鏌ユ壘");
-                        startArea = Settings.areaInfos.Where(a => a.areaName == "鐡惰儦鍗充骇婊℃" && a.enable == 1).FirstOrDefault().areaCode;
+                        LogHelper.Info($"鐡跺澂鍗充骇婊℃ 鏌ユ壘");
+                        startArea = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇婊℃" && a.enable == 1).FirstOrDefault().areaCode;
                         startLoca = DeviceProcess.getFDSXArea(db, bcpW, startArea);
                     }
                     else
                     {
-                        string areaName = bcpW.S_PLineNo.Split('-')[1].Substring(0, 1) + "鍙风摱鑳氱炕鏂楁満闈炲嵆浜ф弧妗�;
+                        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);
                     }
@@ -746,7 +759,7 @@
                     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);
+                        WMSHelper.CreateOpTask(startLoca.S_CODE, mst.S_START_LOC, "鍑哄簱", taskType, cntrInfo.S_CNTR_CODE,"","",bcpW.S_WorkNo);
                     }
                     else LogHelper.Info($"鏈粦瀹氭墭鐩橈紝璐т綅鍙凤細{startLoca.S_CODE}");
                 }
@@ -1095,8 +1108,33 @@
                         TsNo = 1;
                         // 鍧洊浠诲姟涓嬪彂鍙傛暟鑾峰彇
                         // 鑾峰彇璧风粓鐐圭殑AGV绔欑偣
-                        Extend1 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_START_LOC && a.N_LAYER == mst.N_START_LAYER).First().S_AGV_SITE;
-                        Extend2 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_END_LOC && a.N_LAYER == mst.N_END_LAYER).First().S_AGV_SITE;
+                        Extend1 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_START_LOC).First().S_AGV_SITE;
+                        Extend2 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_END_LOC).First().S_AGV_SITE;
+                        if (mst.N_START_LAYER > 1)
+                        {
+                            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 == "娉ㄥ鍗充骇婊℃墭涓嬬嚎锛堢摱鍧級")
+                        {
+                            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";
                         // 鑾峰彇 浠诲姟鍙傛暟4 DATA 鏁版嵁
                         string startLayerValue = Convert.ToString(startLayer, 16).ToUpper();
@@ -1106,28 +1144,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}");
@@ -1271,127 +1309,141 @@
             if (action)
             {
                 //鐡剁洊搴撳尯锛屼袱灞傚瘑闆嗗瀷搴撳尯  绌烘弧鍦ㄥ悓涓�釜搴撳尯锛岄渶瑕佸尯鍒嗕笉鍚屾帓
-                var areaInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).First();
-                if (areaInfo != null)
+                var areaInfo = Settings.areaInfos.Where(a => a.areaName.Contains(areaName) && a.enable == 1).OrderByDescending(a => a.pri).ToList();
+                if (areaInfo.Count > 0)
                 {
-                    //搴撳尯璐т綅绾﹀畾锛氬垪鍙疯秺灏忚秺闈犻噷
-                    LogHelper.Info($"鍏ュ簱绠楁硶01:area锛歿areaInfo.areaCode},itemCode:{itemCode}");
-                    try
+                    foreach(var it in areaInfo)
                     {
-                        if (result == null)
+                        //搴撳尯璐т綅绾﹀畾锛氬垪鍙疯秺灏忚秺闈犻噷
+                        LogHelper.Info($"鍏ュ簱绠楁硶01:area锛歿it.areaCode},itemCode:{itemCode}");
+                        try
                         {
-                            var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL)
-                                .PartitionBy(a => a.N_ROW).Take(1)
-                                .ToList();
-                            if (locInfo.Count > 0)
+                            if (result == null)
                             {
-                                LogHelper.Info($"鍏ュ簱绠楁硶02:鏌ヨ鍒板彲鍏ヨ揣浣嶇殑鏁伴噺涓猴細{locInfo.Count}");
-                                foreach (var a in locInfo)
+                                var locInfo = 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)
+                                    .PartitionBy(a => a.N_ROW).Take(1)
+                                    .ToList();
+                                if (locInfo.Count > 0)
                                 {
-                                    LogHelper.Info($"鍏ュ簱绠楁硶03:鏌ヨ璐т綅锛歿a.S_CODE},閿佺姸鎬侊細{a.S_LOCK_STATE}锛屽綋鍓嶆暟閲忥細{a.N_CURRENT_NUM}");
-                                    //鍘绘帀褰撳墠璐т綅鏈夐攣锛屾垨鑰呬负绌烘墭鐨勮揣浣�-                                    if (a.S_LOCK_STATE == "鏃�)
+                                    if(areaName == "鐡跺澂鍗充骇婊℃缂撳瓨")
                                     {
-                                        string endItemCode = "";
-                                        var endCntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First();
-                                        if (endCntrInfo != null)
+                                        locInfo = locInfo.Where(a => a.N_ROW == 1 || a.N_ROW == 2).ToList();
+                                    }
+
+                                    LogHelper.Info($"鍏ュ簱绠楁硶02:鏌ヨ鍒板彲鍏ヨ揣浣嶇殑鏁伴噺涓猴細{locInfo.Count}");
+                                    foreach (var a in locInfo)
+                                    {
+                                        LogHelper.Info($"鍏ュ簱绠楁硶03:鏌ヨ璐т綅锛歿a.S_CODE},閿佺姸鎬侊細{a.S_LOCK_STATE}锛屽綋鍓嶆暟閲忥細{a.N_CURRENT_NUM}");
+                                        //鍘绘帀褰撳墠璐т綅鏈夐攣锛屾垨鑰呬负绌烘墭鐨勮揣浣�+                                        if (a.S_LOCK_STATE == "鏃�)
                                         {
-                                            var endItemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == endCntrInfo.S_CNTR_CODE).First();
-                                            if (endItemInfo != null)
+                                            string endItemCode = "";
+                                            var endCntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First();
+                                            if (endCntrInfo != null)
                                             {
-                                                endItemCode = endItemInfo.S_ITEM_CODE;
-                                            }
-                                        }
-                                        else
-                                        {
-                                            LogHelper.Info($"缁堢偣璐т綅鏈粦瀹氭墭鐩樹俊鎭�);
-                                            continue;
-                                        }
-                                        LogHelper.Info($"鍏ュ簱绠楁硶04:鏌ヨ鍒板綋鍓嶈揣浣嶇粦瀹氱殑鐗╂枡缂栫爜涓�{endItemCode}");
-                                        //鍒ゆ柇鏄惁鍜屽綋鍓嶈揣浣嶇殑鐗╂枡缂栫爜鐩稿悓
-                                        if (itemCode == endItemCode)
-                                        {
-                                            //鏌ヨ褰撳墠鎺掓槸鍚﹀彲鍏ワ紙鍒ゆ柇鏄槸鍚︽湁鍏ュ簱閿佸拰鍑哄簱閿侊級
-                                            var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First();
-                                            if (lockInfo == null)
-                                            {
-                                                //褰撳墠鎺掓棤浠诲姟
-                                                if (a.N_CURRENT_NUM < a.N_CAPACITY) result = a;
-                                                else
+                                                var endItemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == endCntrInfo.S_CNTR_CODE).First();
+                                                if (endItemInfo != null)
                                                 {
-                                                    //鏌ヨ鍚庨潰褰撳墠璐т綅鍚庝竴涓�-                                                    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();
-                                                }
-                                                if (result != null)
-                                                {
-                                                    break;
+                                                    endItemCode = endItemInfo.S_ITEM_CODE + endItemInfo.S_BATCH_NO;
                                                 }
                                             }
                                             else
                                             {
-                                                LogHelper.Info($"鍏ュ簱绠楁硶05:鏌ヨ鍒板綋鍓嶆帓鏈夐攣锛屾帓鍙凤細{a.N_ROW}");
-
+                                                LogHelper.Info($"缁堢偣璐т綅鏈粦瀹氭墭鐩樹俊鎭�);
+                                                continue;
                                             }
-                                        }
-                                    }
-                                }
-                            }
-                            else
-                            {
-                                LogHelper.Info($"鍏ュ簱绠楁硶02:鏈煡璇㈠埌鍙叆璐т綅");
-                            }
-                            if (result == null)
-                            {
-                                //todo 杩橀渶瑕佸垽鏂攣
-                                #region 鏌ユ壘鎵�湁鏁伴噺鏄┖鐨勬帓
-                                LogHelper.Info($"鍏ュ簱绠楁硶06:鏃犲彲鐢ㄨ揣浣嶏紝鑾峰彇绌烘帓璐т綅銆�, "WMSAlgoRithm");
-                                //2.0 绠�寲鏌ヨ鍙煡姣忎竴鎺掔涓�垪
-                                var list = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode).OrderBy(a => a.N_ROW).OrderBy(a => a.N_COL).PartitionBy(a => a.N_ROW).ToList().Where(a => a.N_CURRENT_NUM == 0).ToList();
-                                //2.1 閫変竴涓┖鎺�-                                if (list.Count > 0)
-                                {
-                                    LogHelper.Info($"鍏ュ簱绠楁硶06:鏃犲彲鐢ㄨ揣浣嶏紝鑾峰彇绌烘帓璐т綅鏁伴噺涓猴細{list.Count}銆�, "WMSAlgoRithm");
-                                    for (int i = 0; i < list.Count; i++)
-                                    {
-                                        LogHelper.Info($"鍏ュ簱绠楁硶07:鑾峰彇绌烘帓璐т綅锛氳揣浣嶇紪鐮侊細{list[i].S_CODE.Trim()},褰撳墠鏁伴噺锛歿list[i].N_CURRENT_NUM},鎺掑彿锛歿list[i].N_ROW},搴撳尯缂栫爜锛歿list[i].S_AREA_CODE.Trim()}", "WMSAlgoRithm");
-                                        if (list[i].S_LOCK_STATE.Trim().Contains("鏃�))
-                                        {
-                                            //浜屾鏍¢獙褰撳墠鎺掓墍鏈夎揣浣嶉兘鏄┖鐨勶紝闃叉绯荤粺鏁版嵁閿欎贡
-                                            int row = list[i].N_ROW;
-                                            string areaCode = list[i].S_AREA_CODE.Trim();
-                                            var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaCode && b.N_ROW == row && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First();
-                                            if (lockInfo == null)
+                                            LogHelper.Info($"鍏ュ簱绠楁硶04:鏌ヨ鍒板綋鍓嶈揣浣嶇粦瀹氱殑鐗╂枡缂栫爜涓�{endItemCode}");
+                                            //鍒ゆ柇鏄惁鍜屽綋鍓嶈揣浣嶇殑鐗╂枡缂栫爜鐩稿悓
+                                            if (itemCode == endItemCode)
                                             {
-                                                var locInfo1 = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaCode && a.N_ROW == row).Select(a => new { sum = SqlFunc.AggregateSum(a.N_CURRENT_NUM) }).First();
-                                                if (locInfo1 != null)
+                                                //鏌ヨ褰撳墠鎺掓槸鍚﹀彲鍏ワ紙鍒ゆ柇鏄槸鍚︽湁鍏ュ簱閿佸拰鍑哄簱閿侊級
+                                                var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First();
+                                                if (lockInfo == null)
                                                 {
-                                                    LogHelper.Info($"{locInfo1.sum},row:{row}");
-                                                    if (locInfo1.sum == 0)
+                                                    //褰撳墠鎺掓棤浠诲姟
+                                                    if (a.N_CURRENT_NUM < a.N_CAPACITY) result = a;
+                                                    else
                                                     {
-                                                        //绌烘帓
-                                                        result = list[i];
+                                                        //鏌ヨ鍚庨潰褰撳墠璐т綅鍚庝竴涓�+                                                        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)
+                                                    {
                                                         break;
                                                     }
                                                 }
-                                                else LogHelper.Info("鏈壘鍒拌鎺�);
-                                            }
-                                            else
-                                            {
-                                                LogHelper.Info("璇ユ帓鏈夐攣");
+                                                else
+                                                {
+                                                    LogHelper.Info($"鍏ュ簱绠楁硶05:鏌ヨ鍒板綋鍓嶆帓鏈夐攣锛屾帓鍙凤細{a.N_ROW}");
+
+                                                }
                                             }
                                         }
                                     }
                                 }
-                                else LogHelper.Info($"鏈幏鍙栧埌绌烘帓锛屽簱鍖虹紪鐮侊細{areaInfo.areaCode}");
-                                #endregion
+                                else
+                                {
+                                    LogHelper.Info($"鍏ュ簱绠楁硶02:鏈煡璇㈠埌鍙叆璐т綅");
+                                }
+                                if (result == null)
+                                {
+                                    //todo 杩橀渶瑕佸垽鏂攣
+                                    #region 鏌ユ壘鎵�湁鏁伴噺鏄┖鐨勬帓
+                                    LogHelper.Info($"鍏ュ簱绠楁硶06:鏃犲彲鐢ㄨ揣浣嶏紝鑾峰彇绌烘帓璐т綅銆�, "WMSAlgoRithm");
+                                    //2.0 绠�寲鏌ヨ鍙煡姣忎竴鎺掔涓�垪
+                                    var list = db.Queryable<Location>().Where(a => a.S_AREA_CODE == it.areaCode).OrderBy(a => a.N_ROW).OrderBy(a => a.N_COL).PartitionBy(a => a.N_ROW).ToList().Where(a => a.N_CURRENT_NUM == 0).ToList();
+                                    //2.1 閫変竴涓┖鎺�+                                    if (list.Count > 0)
+                                    {
+                                        LogHelper.Info($"鍏ュ簱绠楁硶06:鏃犲彲鐢ㄨ揣浣嶏紝鑾峰彇绌烘帓璐т綅鏁伴噺涓猴細{list.Count}銆�, "WMSAlgoRithm");
+                                        for (int i = 0; i < list.Count; i++)
+                                        {
+                                            LogHelper.Info($"鍏ュ簱绠楁硶07:鑾峰彇绌烘帓璐т綅锛氳揣浣嶇紪鐮侊細{list[i].S_CODE.Trim()},褰撳墠鏁伴噺锛歿list[i].N_CURRENT_NUM},鎺掑彿锛歿list[i].N_ROW},搴撳尯缂栫爜锛歿list[i].S_AREA_CODE.Trim()}", "WMSAlgoRithm");
+                                            if (list[i].S_LOCK_STATE.Trim().Contains("鏃�))
+                                            {
+                                                //浜屾鏍¢獙褰撳墠鎺掓墍鏈夎揣浣嶉兘鏄┖鐨勶紝闃叉绯荤粺鏁版嵁閿欎贡
+                                                int row = list[i].N_ROW;
+                                                string areaCode = list[i].S_AREA_CODE.Trim();
+                                                var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaCode && b.N_ROW == row && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First();
+                                                if (lockInfo == null)
+                                                {
+                                                    var locInfo1 = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaCode && a.N_ROW == row).Select(a => new { sum = SqlFunc.AggregateSum(a.N_CURRENT_NUM) }).First();
+                                                    if (locInfo1 != null)
+                                                    {
+                                                        LogHelper.Info($"{locInfo1.sum},row:{row}");
+                                                        if (locInfo1.sum == 0)
+                                                        {
+                                                            //绌烘帓
+                                                            result = list[i];
+                                                            break;
+                                                        }
+                                                    }
+                                                    else LogHelper.Info("鏈壘鍒拌鎺�);
+                                                }
+                                                else
+                                                {
+                                                    LogHelper.Info("璇ユ帓鏈夐攣");
+                                                }
+                                            }
+                                        }
+                                    }
+                                    else LogHelper.Info($"鏈幏鍙栧埌绌烘帓锛屽簱鍖虹紪鐮侊細{it.areaCode}");
+                                    #endregion
+                                }
+
+                                if(result != null)
+                                {
+                                    break;
+                                }
                             }
                         }
+                        catch (Exception ex)
+                        {
+                            Console.WriteLine("GetLocationIn:" + ex.Message + ex.StackTrace);
+                            LogHelper.Error("GetLocationIn:" + ex.Message, ex);
+                        }
                     }
-                    catch (Exception ex)
-                    {
-                        Console.WriteLine("GetLocationIn:" + ex.Message + ex.StackTrace);
-                        LogHelper.Error("GetLocationIn:" + ex.Message, ex);
-                    }
+                    
                 }
                 else
                 {
@@ -1400,47 +1452,59 @@
             }
             else
             {
-                LogHelper.Info($"鍑哄簱绠楁硶01:area锛歿areaName},itemCode:{itemCode}");
-                var areaInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).FirstOrDefault();
-                if(areaInfo != null)
+                var areaInfo = Settings.areaInfos.Where(a => a.areaName.Contains(areaName) && a.enable == 1).OrderByDescending(a => a.pri).ToList();
+                if(areaInfo.Count > 0)
                 {
-                    var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.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)
+                    foreach(var it in areaInfo)
                     {
-                        LogHelper.Info($"鍑哄簱绠楁硶02:鏌ヨ鍒板彲鍑鸿揣浣嶆暟閲忥細{locList.Count}");
-                        foreach (var a in locList)
+                        LogHelper.Info($"鍑哄簱绠楁硶01: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($"鍑哄簱绠楁硶03:鏌ヨ璐т綅锛歿a.S_CODE},閿佺姸鎬侊細{a.S_LOCK_STATE}");
-                            if (a.S_LOCK_STATE == "鏃�)
+                            if(areaName == "鐡跺澂鍗充骇婊℃缂撳瓨" && string.IsNullOrEmpty(itemCode))
                             {
-                                var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First();
-                                if(cntrInfo != null)
+                                locList = locList.Where(a => a.N_ROW == 3).ToList();
+                            }
+                            LogHelper.Info($"鍑哄簱绠楁硶02:鏌ヨ鍒板彲鍑鸿揣浣嶆暟閲忥細{locList.Count}");
+                            foreach (var a in locList)
+                            {
+                                LogHelper.Info($"鍑哄簱绠楁硶03:鏌ヨ璐т綅锛歿a.S_CODE},閿佺姸鎬侊細{a.S_LOCK_STATE}");
+                                if (a.S_LOCK_STATE == "鏃�)
                                 {
-                                    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)
+                                    var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First();
+                                    if (cntrInfo != null)
                                     {
-                                        endItemCode = itemInfo.S_ITEM_CODE;
-                                    }
-                                    if(endItemCode == itemCode)
-                                    {
-                                        //鍒ゆ柇褰撳墠鎺掓湁鏃犻攣
-                                        var lockInfo = db.Queryable<Location>().Where(b => b.S_AREA_CODE == areaInfo.areaCode && b.N_ROW == a.N_ROW && (b.S_LOCK_STATE == "鍏ュ簱閿� || b.S_LOCK_STATE == "鍑哄簱閿�)).First();
-                                        if (lockInfo == null)
+                                        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)
                                         {
-                                            result = a;
-                                            break;
+                                            endItemCode = itemInfo.S_ITEM_CODE;
                                         }
-                                        else
+                                        if (endItemCode == itemCode)
                                         {
-                                            LogHelper.Info($"鍑哄簱绠楁硶05:褰撳墠鎺掓湁閿侊紝璐т綅鍙凤細{lockInfo.S_CODE}");
+                                            //鍒ゆ柇褰撳墠鎺掓湁鏃犻攣
+                                            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($"鍑哄簱绠楁硶05:褰撳墠鎺掓湁閿侊紝璐т綅鍙凤細{lockInfo.S_CODE}");
+                                            }
                                         }
                                     }
                                 }
                             }
                         }
+                        if(result != null)
+                        {
+                            break;
+                        }
                     }
+                    
                 }
                 else
                 {
@@ -1456,7 +1520,7 @@
             if(usingNow == "Y")
             {
                 //鍗充骇鍗崇敤
-                var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡惰儦鍗充骇绌烘" && a.enable == 1).FirstOrDefault();
+                var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇绌烘" && a.enable == 1).FirstOrDefault();
                 if (areaInfo != null)
                 {
                     var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "鏃�).Includes(a => a.LocCntrRel).First();
@@ -1467,13 +1531,13 @@
                 }
                 else
                 {
-                    LogHelper.Info("鐡惰儦鍗充骇绌烘鏈厤缃�);
+                    LogHelper.Info("鐡跺澂鍗充骇绌烘鏈厤缃�);
                 }
             }
             else
             {
                 //闈炲嵆浜у嵆鐢�-                var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡惰儦闈炲嵆浜х┖妗� && a.enable == 1).FirstOrDefault();
+                var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂闈炲嵆浜х┖妗� && a.enable == 1).FirstOrDefault();
                 if (areaInfo != null)
                 {
                     var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.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();
@@ -1493,7 +1557,7 @@
                 }
                 else
                 {
-                    LogHelper.Info("鐡惰儦闈炲嵆浜х┖妗嗘湭閰嶇疆");
+                    LogHelper.Info("鐡跺澂闈炲嵆浜х┖妗嗘湭閰嶇疆");
                 }
             }
             
@@ -1514,8 +1578,8 @@
             LogHelper.Info($"鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱被鍨嬶細{taskName}锛岀墿鏂欑紪鐮侊細{itemCode}");
             if (taskName.Contains("鍗充骇"))
             {
-                //娉ㄥ鏈烘�浜у嵆鐢ㄤ笅绾匡紝棣栧厛涓嬬嚎鍒板嵆浜у嵆鐢ㄦ弧妗嗙嚎杈癸紝婊$湺绾胯竟婊′簡锛屼笅鍒板嵆浜у嵆鐢ㄦ弧妗嗙紦瀛樺尯锛屾弧妗嗙紦瀛樺尯婊′簡锛屼笅鍒板叆搴撴帴椹冲爢鍙犱綅
-                var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡惰儦鍗充骇婊℃" && a.enable == 1).FirstOrDefault();
+                //娉ㄥ鏈哄嵆浜у嵆鐢ㄤ笅绾匡紝棣栧厛涓嬬嚎鍒板嵆浜у嵆鐢ㄦ弧妗嗙嚎杈癸紝婊$湺绾胯竟婊′簡锛屼笅鍒板嵆浜у嵆鐢ㄦ弧妗嗙紦瀛樺尯锛屾弧妗嗙紦瀛樺尯婊′簡锛屼笅鍒板叆搴撴帴椹冲爢鍙犱綅
+                var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇婊℃" && a.enable == 1).FirstOrDefault();
                 if(areaInfo != null)
                 {
                     var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "鏃�).OrderBy(a => a.N_ROW).First();
@@ -1526,11 +1590,11 @@
                 }
                 else
                 {
-                    LogHelper.Info($"鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱摱鑳氬嵆浜ф弧妗�鏈厤缃�);
+                    LogHelper.Info($"鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱摱鍧嵆浜ф弧妗�鏈厤缃�);
                 }
                 if (result == null)
                 {
-                    result = TaskProcess.BCPInOrOut(db, true, "鐡惰儦鍗充骇婊℃缂撳瓨", itemCode);
+                    result = TaskProcess.BCPInOrOut(db, true, "鐡跺澂鍗充骇婊℃缂撳瓨", itemCode);
                 }
                 if(result == null)
                 {
@@ -1547,7 +1611,7 @@
         private static Location getJBLoc(SqlSugarClient db, Location result)
         {
             //娉ㄥ鏈洪潪鍗充骇鍗崇敤涓嬬嚎锛屼笅鍒板叆搴撴帴椹冲爢鍙犱綅
-            var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡惰儦鍏ュ簱鎺ラ┏" && a.enable == 1).FirstOrDefault();
+            var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍏ュ簱鎺ラ┏" && a.enable == 1).FirstOrDefault();
             if (areaInfo != null)
             {
                 var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM < a.N_CAPACITY && a.S_LOCK_STATE == "鏃�).OrderBy(a => a.N_COL).First();
@@ -1562,7 +1626,7 @@
             }
             else
             {
-                LogHelper.Info($"鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱摱鑳氬叆搴撴帴椹�鏈厤缃�);
+                LogHelper.Info($"鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱摱鍧叆搴撴帴椹�鏈厤缃�);
             }
 
             return result;
@@ -1579,7 +1643,7 @@
         {
             Location result = null;
 
-            string endAreaName = taskName.Contains("鐡剁洊") ? "鐡剁洊闈炲嵆浜х┖妗� : taskName.Contains("搴撳瓨") ? "鐡惰儦闈炲嵆浜х┖妗� : "鐡惰儦鍗充骇绌烘";
+            string endAreaName = taskName.Contains("鐡剁洊") ? "鐡剁洊闈炲嵆浜х┖妗� : taskName.Contains("搴撳瓨") ? "鐡跺澂闈炲嵆浜х┖妗� : "鐡跺澂鍗充骇绌烘";
             var areaInfo = Settings.areaInfos.Where(a => a.areaName == endAreaName && a.enable == 1).FirstOrDefault();
             if (areaInfo != null)
             {
@@ -1593,7 +1657,60 @@
             {
                 LogHelper.Info($"{endAreaName}鏈厤缃�);
             }
-            
+            if(result == null)
+            {
+                if(endAreaName == "缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡跺澂锛�)
+                {
+                    //鐡跺澂闈炲嵆浜х┖鎵樹笅绾�濡傛灉闈炲嵆浜х┖妗嗗簱鍖烘棤娉曞叆搴擄紝鍒欎笅绾垮埌鐡跺澂鍗充骇婊℃缂撳瓨 4 5 鎺�+                    areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇婊℃缂撳瓨" && a.enable == 1).FirstOrDefault();
+                    if (areaInfo != null)
+                    {
+                        var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && (a.N_ROW == 4 || a.N_ROW == 5) && a.N_CURRENT_NUM == 0).OrderBy(a => a.N_ROW).OrderBy(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList();
+                        if (locList.Count > 0)
+                        {
+                            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 && a.S_LOCK_STATE == "鏃�).First();
+                                if (rowInfo != null && a.S_LOCK_STATE == "鏃�)
+                                {
+                                    result = a;
+                                    break;
+                                }
+
+                            }
+                        }
+                    }
+                    else
+                    {
+                        LogHelper.Info("鐡跺澂鍗充骇婊℃缂撳瓨鏈厤缃�);
+                    }
+                }
+                if(endAreaName == "缈绘枟鏈哄嵆浜х┖鎵樹笅绾匡紙鐡跺澂锛�)
+                {
+                    //鐡跺澂鍗充骇绌烘墭涓嬬嚎 濡傛灉鍗充骇绌烘搴撳尯鏃犳硶鍏ュ簱锛屽垯涓嬬嚎鍒扮摱鍧嵆浜ф弧妗嗙紦瀛�3 鎺�+                    areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇婊℃缂撳瓨" && a.enable == 1).FirstOrDefault();
+                    if (areaInfo != null)
+                    {
+                        var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_ROW == 3 && a.N_CURRENT_NUM == 0).OrderBy(a => a.N_COL).First();
+                        if (locInfo != null )
+                        {
+                            var rowInfo = db.Queryable<RowLock>().Where(b => b.S_AREA_CODE == locInfo.S_AREA_CODE && b.S_ROW == locInfo.S_ROW && locInfo.S_LOCK_STATE == "鏃�).First();
+                            if (rowInfo != null && locInfo.S_LOCK_STATE == "鏃�)
+                            {
+                                result = locInfo;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        LogHelper.Info("鐡跺澂鍗充骇婊℃缂撳瓨鏈厤缃�);
+                    }
+                    if(result == null)
+                    {
+                        BCPEmptyOut(db, "缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡跺澂锛�);
+                    }
+                }
+            }
             return result;
         }
 
@@ -1813,7 +1930,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;
@@ -1829,7 +1946,11 @@
                     {
                         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}");
-                        BindCntrItem(cntrCode, itemCode, batchNo, itemlayer);
+                        
+                        if (!string.IsNullOrEmpty(itemCode))
+                        {
+                            BindCntrItem(cntrCode, itemCode, batchNo, itemlayer, itemName);
+                        }
                     }
                 }
             });
@@ -1844,7 +1965,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;
@@ -1852,6 +1973,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();
@@ -1859,8 +2000,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}");
                 }
 
 
@@ -2342,6 +2483,80 @@
             }
         }
 
+        /// <summary>
+        /// 璁$畻鐡跺澂闈炲嵆浜х┖鎵樿捣鐐�+        /// </summary>
+        /// <returns></returns>
+        internal static Location FJCKTLoc()
+        {
+            var db = new SqlHelper<object>().GetInstance();
+            Location result = null;
+            //鍦ㄧ摱鍧嵆浜ф弧妗�鏌ヨ 4 5涓ゆ帓鐨勭┖妗�+            var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇婊℃缂撳瓨" && a.enable == 1).FirstOrDefault();
+            if(areaInfo != null)
+            {
+                var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && (a.N_ROW == 4 || a.N_ROW == 5) && a.N_CURRENT_NUM > 0).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList();
+                if(locList.Count > 0)
+                {
+                    foreach (var a in locList)
+                    {
+                        var cntrInfo = db.Queryable<LocCntrRel>().Where(b => b.S_LOC_CODE == a.S_CODE).First();
+                        if(cntrInfo != null)
+                        {
+                            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;
+                                }
+                            }
 
+                        }
+                    }
+                }
+            }
+            if(result == null)
+            {
+                result = TaskProcess.BCPInOrOut(db, false, "鐡跺澂搴撳尯", "");
+            }
+
+            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);
+        }
     }
 }

--
Gitblit v1.9.1