From 06747ef981873358950982e7a53c6d221ef93ac3 Mon Sep 17 00:00:00 2001
From: cjs <2216046164@qq.com>
Date: 星期四, 17 七月 2025 17:19:24 +0800
Subject: [PATCH] 11

---
 HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs |  922 ++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 518 insertions(+), 404 deletions(-)

diff --git a/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs b/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
index 0fb1a31..b587da0 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
@@ -5,13 +5,16 @@
 using HH.WCS.Mobox3.NFLZ.util;
 using HH.WCS.Mobox3.NFLZ.wms;
 using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
 using SqlSugar;
 using System;
 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.NDC;
+using static HH.WCS.Mobox3.NFLZ.dispatch.NDCApi;
 using static HH.WCS.Mobox3.NFLZ.wms.WMSHelper.AddChangeModel;
 
 namespace HH.WCS.Mobox3.NFLZ.process
@@ -40,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();
+                }
             }
 
         }
@@ -63,7 +72,7 @@
                 //璧风偣缁堢偣瑙i攣
                 LocationHelper.UnLockLoc(mst.S_START_LOC);
                 LocationHelper.UnLockLoc(mst.S_END_LOC);
-
+                
             }
 
         }
@@ -144,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("婊℃墭涓婄嚎"))
             {
@@ -174,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}");
                 }
@@ -183,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}");
             }
         }
 
@@ -654,7 +669,6 @@
             if (state == 6)//鍗歌揣瀹屾垚
             {
                 claimGoodsTime(mst, state);
-                writeSignal(mst);
                 CacheBitUpdate(mst, false);
             }
             if (state == 7)
@@ -670,17 +684,18 @@
         /// <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}");
-                var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂绌烘墭" && a.enable == 1).First();
+                string areaName = mst.S_TYPE.Contains("搴撳瓨") ? "鐡跺澂闈炲嵆浜х┖妗� : "鐡跺澂鍗充骇绌烘";
+                var areaInfo = Settings.areaInfos.Where(a => a.areaName == areaName && a.enable == 1).First();
                 if(areaInfo != null)
                 {
-                    startLoca = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "鏃�).OrderBy(a => a.N_COL).First();
+                    startLoca = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_CURRENT_NUM > 0 && a.S_LOCK_STATE == "鏃�).OrderBy(a => a.N_ROW).First();
                     if (startLoca != null)
                     {
                         LogHelper.Info("startLoca" + JsonConvert.SerializeObject(startLoca));
@@ -706,19 +721,12 @@
                 LogHelper.Info($"婊℃墭浠诲姟鐢熸垚澶勭悊锛屼换鍔$被鍨嬶細{mst.S_TYPE}");
                 string startArea = "";
                 LinZhiBCPWorkOrder bcpW = null;
-                if (mst.S_TYPE.Contains("鐡跺澂"))
-                {
-                    bcpW = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo.Contains("鍐滃か鏋楄姖-鐡跺澂缈绘枟鏈�) && a.S_WorkState == "鎵ц涓�).First();
-                }
-                else
-                {
-                    bcpW = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo.Contains("鍐滃か鏋楄姖-鐡剁洊缈绘枟鏈�) && a.S_WorkState == "鎵ц涓�).First();
-                }
-
+                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();
+                    var bcpInfo = Settings.areaInfos.Where(a => a.areaName == "鐡剁洊闈炲嵆浜ф弧妗� && a.enable == 1).FirstOrDefault();
                     if (bcpInfo != null)
                     {
                         startLoca = DeviceProcess.getFDSXArea(db, bcpW, bcpInfo.areaCode);
@@ -728,18 +736,15 @@
                 {
                     if (bcpW.S_UsingNow == "Y")
                     {
-                        LogHelper.Info($"鐡跺澂鍗充骇鍗崇敤A搴撳尯鏌ユ壘");
-                        startArea = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇鍗崇敤A" && 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);
-                        if (startLoca == null)
-                        {
-                            LogHelper.Info($"鐡跺澂鍗充骇鍗崇敤A搴撳尯鏈壘鍒版弧鎵橈紝鍘荤摱鍧嵆浜у嵆鐢˙搴撳尯鏌ユ壘");
-                            startLoca = TaskProcess.BCPInOrOut(db, true, "鐡跺澂鍗充骇鍗崇敤B", bcpW.S_ItemCode);
-                        }
                     }
                     else
                     {
-                        startArea = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂闈炲嵆浜у嵆鐢� && a.enable == 1).FirstOrDefault().areaCode;
+                        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);
                     }
                 }
@@ -754,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}");
                 }
@@ -1103,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();
@@ -1114,48 +1144,70 @@
                         //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}");
                     LogHelper.Info($"[SendTask]:TaskNo={mst.S_CODE.Trim()},start={Extend1},end={Extend2}");
                     bool action = true;
-                    var dic = new Dictionary<string, string>();
-                    //var dic1 = new Dictionary<string, string>();
-                    //dic.Add("Pri", mst.N_PRIORITY.ToString());
-                    //dic.Add("No", mst.S_CODE.Trim());
-                    dic.Add("From", Extend1);
-                    dic.Add("To", Extend2);
-                    dic.Add("Func", Extend3);
-                    dic.Add("Data", Extend4);
-
+                    //var dic = new Dictionary<string, string>();
+                    ////var dic1 = new Dictionary<string, string>();
+                    ////dic.Add("Pri", mst.N_PRIORITY.ToString());
+                    ////dic.Add("No", mst.S_CODE.Trim());
+                    //dic.Add("From", Extend1);
+                    //dic.Add("To", Extend2);
+                    //dic.Add("Func", Extend3);
+                    //dic.Add("Data", Extend4);
+                    //
+                    //if (ConveryTaskList.Contains(taskType) || taskType.Contains("绉诲簱"))
+                    //{
+                    //    dic.Add("ItemHeight", Extend5);
+                    //    dic.Add("CntrType", Extend6);
+                    //    dic.Add("FromCol", Extend7);
+                    //    dic.Add("ToCol", Extend8);
+                    //    if (taskType.Contains("绉诲簱") || taskType.Contains("鎴愬搧涓嬬嚎") || taskType.Contains("闆跺ご涓嬬嚎"))
+                    //    {
+                    //        LogHelper.Info($"绉诲簱锛欵xtend5:{Extend5},Extend6:{Extend6},Extend7:{Extend7},Extend8:{Extend8},");
+                    //        if (Extend5 == "" || Extend6 == "" || Extend7 == "" || Extend8 == "")
+                    //        {
+                    //            action = false;
+                    //        }
+                    //    }
+                    //}
+                    var dic = new List<param>
+                    {
+                        new param() { name = "From", value = Extend1 },
+                        new param() { name = "To", value = Extend2 },
+                        new param() { name = "Func", value = Extend3 },
+                        new param() { name = "Data", value = Extend4 }
+                    };
                     if (ConveryTaskList.Contains(taskType) || taskType.Contains("绉诲簱"))
                     {
-                        dic.Add("ItemHeight", Extend5);
-                        dic.Add("CntrType", Extend6);
-                        dic.Add("FromCol", Extend7);
-                        dic.Add("ToCol", Extend8);
+                        dic.Add(new param(){name = "ItemHeight", value = Extend5});
+                        dic.Add(new param(){name = "CntrType", value = Extend6});
+                        dic.Add(new param(){name = "FromCol", value = Extend7});
+                        dic.Add(new param(){name = "ToCol", value = Extend8});
                         if (taskType.Contains("绉诲簱") || taskType.Contains("鎴愬搧涓嬬嚎") || taskType.Contains("闆跺ご涓嬬嚎"))
                         {
                             LogHelper.Info($"绉诲簱锛欵xtend5:{Extend5},Extend6:{Extend6},Extend7:{Extend7},Extend8:{Extend8},");
@@ -1165,13 +1217,13 @@
                             }
                         }
                     }
-
                     if (action)
                     {
-                        var res = new AGVResult();
-                        res = NDC.AddNewOrderNew(TsNo,mst.N_PRIORITY,mst.S_CODE, dic);
+                        var res = new AgvApiResult();
+                        //res = NDC.AddNewOrderNew(TsNo,mst.N_PRIORITY,mst.S_CODE, dic);
+                        res = NDCApi.AddOrderNew(TsNo, mst.N_PRIORITY, mst.S_CODE,dic);
 
-                        if (res != null && (res.Res.ErrCode == 0 || res.Res.ErrCode == 50009))
+                        if (res != null && (res.err_code == 0 || res.err_code == 50009))
                         {
                             mst.N_B_STATE = 1;
                             WCSHelper.UpdateStatus(mst, "宸叉帹閫�);
@@ -1257,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
                 {
@@ -1386,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
                 {
@@ -1442,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();
@@ -1453,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();
@@ -1479,7 +1557,7 @@
                 }
                 else
                 {
-                    LogHelper.Info("鐡惰儦闈炲嵆浜х┖妗嗘湭閰嶇疆");
+                    LogHelper.Info("鐡跺澂闈炲嵆浜х┖妗嗘湭閰嶇疆");
                 }
             }
             
@@ -1493,15 +1571,15 @@
         /// <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();
+                //娉ㄥ鏈哄嵆浜у嵆鐢ㄤ笅绾匡紝棣栧厛涓嬬嚎鍒板嵆浜у嵆鐢ㄦ弧妗嗙嚎杈癸紝婊$湺绾胯竟婊′簡锛屼笅鍒板嵆浜у嵆鐢ㄦ弧妗嗙紦瀛樺尯锛屾弧妗嗙紦瀛樺尯婊′簡锛屼笅鍒板叆搴撴帴椹冲爢鍙犱綅
+                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();
@@ -1512,18 +1590,16 @@
                 }
                 else
                 {
-                    LogHelper.Info($"鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱摱鑳氬嵆浜ф弧妗�鏈厤缃�);
+                    LogHelper.Info($"鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱摱鍧嵆浜ф弧妗�鏈厤缃�);
                 }
                 if (result == null)
                 {
-                    result = TaskProcess.BCPInOrOut(db, true, "鐡惰儦鍗充骇婊℃缂撳瓨鍖�, itemCode);
+                    result = TaskProcess.BCPInOrOut(db, true, "鐡跺澂鍗充骇婊℃缂撳瓨", itemCode);
                 }
                 if(result == null)
                 {
-                    //result = TaskProcess.BCPInOrOut(db, true, "鐡跺澂搴撳尯", itemCode);
                     result = getJBLoc(db, result);
                 }
-
             }
             else
             {
@@ -1535,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();
@@ -1550,7 +1626,7 @@
             }
             else
             {
-                LogHelper.Info($"鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱摱鑳氬叆搴撴帴椹�鏈厤缃�);
+                LogHelper.Info($"鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱摱鍧叆搴撴帴椹�鏈厤缃�);
             }
 
             return result;
@@ -1566,13 +1642,13 @@
         internal static Location BCPEmptyOut(SqlSugarClient db, string taskName)
         {
             Location result = null;
-            //缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡剁洊锛�-            string endAreaName = taskName.Contains("鐡剁洊") ? "鐡剁洊绌烘墭" : "鐡跺澂绌烘墭";
+
+            string endAreaName = taskName.Contains("鐡剁洊") ? "鐡剁洊闈炲嵆浜х┖妗� : taskName.Contains("搴撳瓨") ? "鐡跺澂闈炲嵆浜х┖妗� : "鐡跺澂鍗充骇绌烘";
             var areaInfo = Settings.areaInfos.Where(a => a.areaName == endAreaName && a.enable == 1).FirstOrDefault();
-            if(areaInfo != null)
+            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();
-                if(locInfo != 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();
+                if (locInfo != null)
                 {
                     result = locInfo;
                 }
@@ -1581,187 +1657,62 @@
             {
                 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;
         }
-
-        /// <summary>
-        /// 鍗婃垚鍝佺Щ搴�-        /// </summary>
-        /// <param name="action">true - 宸ュ崟寮�惎 false - 宸ュ崟鍏抽棴</param>
-        /// <param name="machine">璁惧</param>
-        internal static void BCPYiKu(bool action, string machine)
-        {
-            var db = new SqlHelper<object>().GetInstance();
-            Location startLoc = null;
-            Location endLoc = null;
-            if (action)
-            {
-                if(machine == "鐡跺澂缈绘枟鏈�)
-                {
-                    //鐡跺澂缈绘枟鏈�-                    //寮�惎锛屽垽鏂伐鍗曠被鍨嬶紝鏍规嵁宸ュ崟绫诲瀷琛ュ厖瀵瑰簲鐨勫簱鍖�鍗充骇鍗崇敤涓嶈ˉ鍏�-                    var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂闈炲嵆浜у嵆鐢� && a.enable == 1).FirstOrDefault();
-                    if (areaInfo != null)
-                    {
-                        var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == "鍐滃か鏋楄姖-鐡舵壒缈绘枟鏈� && a.S_WorkState == "鎵ц涓�).First();
-                        if (workInfo.S_UsingNow == "N")
-                        {
-                            startLoc = TaskProcess.BCPInOrOut(db, false, "鐡跺澂搴撳尯", workInfo.S_ItemCode);
-                            endLoc = 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();
-                        }
-                    }
-                    else
-                    {
-                        LogHelper.Info("鐡跺澂闈炲嵆浜у嵆鐢ㄦ湭閰嶇疆");
-                    }
-                        
-                }
-                if (machine == "鐡跺澂娉ㄥ鏈�)
-                {
-                    //寮�惎锛屾煡璇�鐡跺澂绌烘墭 鏄惁绌烘墭鏁伴噺澶т簬3鎵橈紝濡傛灉涓嶅ぇ浜庯紝鍒欒ˉ绌烘墭
-                    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 && a.S_LOCK_STATE == "鏃�).ToList();
-                        if(locList.Count > 2)
-                        {
-                            LogHelper.Info("鐡跺澂绌烘墭 琛ョ┖鎵�);
-                            startLoc = TaskProcess.BCPInOrOut(db, false, "鐡跺澂搴撳尯","");
-                            endLoc = 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();
-                        }
-                    }
-                    else
-                    {
-                        LogHelper.Info("鐡跺澂娉ㄥ鏈虹┖鎵樻湭閰嶇疆");
-                    }
-
-                }
-                if (machine == "鐡剁洊缈绘枟鏈�)
-                {
-                    //寮�惎锛屾煡璇�鐡剁洊闈炴�浜ф�鐢�鐗╂枡鏄惁婊★紝涓嶆弧鍒欒ˉ鍏呯墿鏂�-                    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 == "鏃�).First();
-                        if(locInfo != null)
-                        {
-                            LogHelper.Info("鐡剁洊闈炲嵆浜у嵆鐢�琛ユ弧鎵�);
-                            var workInfo = db.Queryable<LinZhiBCPWorkOrder>().Where(a => a.S_PLineNo == "鍐滃か鏋楄姖-鐡剁洊缈绘枟鏈� && a.S_WorkState == "鎵ц涓�).First();
-                            startLoc = TaskProcess.BCPInOrOut(db, false, "鐡剁洊搴撳尯", workInfo.S_ItemCode);
-                            endLoc = 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();
-                        }
-                    }
-                    else
-                    {
-                        LogHelper.Info("鐡剁洊闈炲嵆浜у嵆鐢ㄦ湭閰嶇疆");
-                    }
-                }
-            }
-            else
-            {
-                if (machine == "鐡跺澂缈绘枟鏈�)
-                {
-                    //鍏抽棴锛屾煡璇�鐡跺澂闈炲嵆浜у嵆鐢�鐡跺澂鍗充骇鍗崇敤A 鐡跺澂鍗充骇鍗崇敤B 鏄惁鏈夌墿鏂欙紝鏈夊垯鍏ュ簱
-                    var areaList = Settings.areaInfos.Where(a => (a.areaName == "鐡跺澂闈炲嵆浜у嵆鐢� || a.areaName == "鐡跺澂鍗充骇鍗崇敤A") && a.enable == 1).ToList();
-                    if (areaList.Count > 0)
-                    {
-                        foreach(var a in areaList)
-                        {
-                            startLoc = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.areaCode && b.N_CURRENT_NUM > 0 && b.S_LOCK_STATE == "鏃�).Includes(b => b.LocCntrRel).First();
-                            if (startLoc != null) break;
-                        }
-                    }
-                    if (startLoc == null)
-                    {
-                        var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇鍗崇敤B" && 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).OrderBy(a => a.N_ROW).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).Includes(a => a.LocCntrRel).ToList();
-                            if(locInfo.Count > 0)
-                            {
-                                foreach(var a in locInfo)
-                                {
-                                    int row = a.N_ROW;
-                                    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)
-                                    {
-                                        startLoc = a;
-                                    }
-                                }
-                            }
-                        }
-                    }
-                    if(startLoc != null)
-                    {
-                        if (startLoc.LocCntrRel != null)
-                        {
-                            var itemInfo = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == startLoc.LocCntrRel.S_CNTR_CODE).First();
-                            if (itemInfo != null)
-                            {
-                                endLoc = TaskProcess.BCPInOrOut(db, true, "鐡跺澂搴撳尯", itemInfo.S_ITEM_CODE);
-                            }
-                        }
-                    }
-                }
-                if (machine == "鐡跺澂娉ㄥ鏈�)
-                {
-                    //鍏抽棴锛屾煡璇�鐡跺澂绌烘墭 鏄惁鏈夌┖鎵橈紝鏈夊垯鍏ュ簱
-                    var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂娉ㄥ鏈虹┖鎵� && a.enable == 1).FirstOrDefault();
-                    if (areaInfo != null)
-                    {
-                        startLoc = 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();
-                        if(startLoc != null)
-                        {
-                            endLoc = TaskProcess.BCPInOrOut(db, true, "鐡跺澂搴撳尯", "");
-                        }
-                    }
-                }
-                if (machine == "鐡剁洊缈绘枟鏈�)
-                {
-                    //鍏抽棴锛�1銆佹煡璇�鐡剁洊绌烘墭 鏄惁杩樻湁鎵樼洏锛屾湁鍒欏叆搴� 2銆佹煡璇㈢摱鐩栭潪鍗充骇鍗崇敤 鏄惁鏈夌墿鏂欙紝 鏈夊垯鍏ュ簱
-                    //鍏抽棴锛屾煡璇�鐡跺澂绌烘墭 鏄惁鏈夌┖鎵橈紝鏈夊垯鍏ュ簱
-
-                    //鏌ヨ绌烘墭搴撳尯
-                    var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡剁洊绌烘墭" && a.enable == 1).FirstOrDefault();
-                    if (areaInfo != null)
-                    {
-                        startLoc = 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();
-                        if (startLoc != null)
-                        {
-                            endLoc = TaskProcess.BCPInOrOut(db, true, "鐡剁洊搴撳尯", "");
-                        }
-                    }
-
-                    //鏌ヨ婊℃墭搴撳尯
-                    if(startLoc == null)
-                    {
-                        areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡剁洊闈炲嵆浜у嵆鐢� && a.enable == 1).FirstOrDefault();
-                        if (areaInfo != null)
-                        {
-                            startLoc = 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();
-                            if (startLoc != null)
-                            {
-                                if(startLoc.LocCntrRel != null)
-                                {
-                                    var itemInfo = db.Queryable<CntrItemRel>().Where(a => a.S_CNTR_CODE == startLoc.LocCntrRel.S_CNTR_CODE).First();
-                                    if(itemInfo != null)
-                                    {
-                                        endLoc = TaskProcess.BCPInOrOut(db, true, "鐡剁洊搴撳尯", itemInfo.S_ITEM_CODE);
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-
-            if (startLoc != null && endLoc != null)
-            {
-                WMSHelper.CreateOpTask(startLoc.S_CODE, endLoc.S_CODE, "鍏ュ簱", "鍗婃垚鍝佺Щ搴�, startLoc.LocCntrRel.S_CNTR_CODE);
-            }
-        }
-
-
 
         /// <summary>
         /// FuLeWebPost
@@ -1979,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;
@@ -1995,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);
+                        }
                     }
                 }
             });
@@ -2010,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;
@@ -2018,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();
@@ -2025,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}");
                 }
 
 
@@ -2508,6 +2483,145 @@
             }
         }
 
+        /// <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);
+        }
+
+        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