From f3c8f980269b7f8fd9556c9076e06ca1461796e8 Mon Sep 17 00:00:00 2001
From: lss <2538410689@qq.com>
Date: 星期二, 15 七月 2025 17:30:55 +0800
Subject: [PATCH] 1111

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs | 1334 ++++++++++++++++++++++++++++++++++++---------------------
 1 files changed, 847 insertions(+), 487 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs
index 3e3a625..04c62d7 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.JiaTong/api/ApiHelper.cs
@@ -20,6 +20,7 @@
 using static HH.WCS.JiaTong.api.ApiModel;
 using static HH.WCS.JiaTong.api.OtherModel;
 using static HH.WCS.JiaTong.LISTA.process.HttpModel;
+using static HH.WCS.JiaTong.util.Settings;
 
 namespace HH.WCS.JiaTong.api
 {
@@ -46,6 +47,7 @@
         /// <returns></returns>
         internal static Result Createtask(CreateTask model)
         {
+
             Result result = new Result() { code = "0", msg = "鍒涘缓鎴愬姛" };
             if (model == null)
             {
@@ -118,8 +120,8 @@
 
                 #endregion
 
-                Location endloc = new Location();
-                Location startloc = new Location();
+                Location endloc = null;
+                Location startloc = null;
                 lock (_lockCreateTask)
                 {
                     if (taskData.taskType == 1) //鍑哄簱娴佺▼锛岄�杩囩墿鏂欐満鍙拌绠楃嚎杈硅揣浣�@@ -186,13 +188,6 @@
                                 }
 
                             }
-                            //else
-                            //{
-                            //    result.code = "1";
-                            //    result.msg = $"鏍规嵁璧风偣{Start},鏈壘鍒版墭鐩樿揣浣嶇粦瀹氬叧绯�;
-                            //    AddErrorInfo("鎵樼洏鏌ユ壘澶辫触", result.msg, Source);
-                            //    return result;
-                            //}
 
                         }
                         else
@@ -312,8 +307,31 @@
                             }
                             else if (startArea.N_FLOOR != endArea.N_FLOOR)
                             {
-                                //妤煎眰鐢垫鍒嗛厤
-                                var elevatorLoc = LocationHelper.GetElevatorLoc();
+                                string deviceName = "鐢垫1";
+                                if (startloc.S_WH_CODE == "103")
+                                {
+                                    deviceName = "鐢垫2";
+                                }
+                                var eleLoc = Settings.deviceInfos.Where(a => a.deviceName.Trim() == deviceName).FirstOrDefault();
+                                if (eleLoc == null)
+                                {
+                                    result.code = "1";
+                                    result.msg = $"鏈壘鍒颁粨搴搟startloc.S_WH_CODE}鎵�搴旂殑鐢垫锛岃妫�煡閰嶇疆鏂囦欢";
+                                    AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source);
+                                    return result;
+                                }
+                                //鏍规嵁浠诲姟鏁伴噺鍒ゆ柇閫佸線鍝釜鐢垫 锛堝叿浣撶數姊祦绋嬫牴鎹幇鍦虹數姊暟閲忥級
+                                string[] state = new string[] { "鎵ц涓�, "寮�鍙栬揣", "鍙栬揣瀹屾垚", "寮�鍗歌揣", "鍗歌揣瀹屾垚" };
+
+
+                                var elevatorLoc = db.Queryable<Location>().Where(a => a.S_CODE == eleLoc.TN_Location).First();
+                                if (elevatorLoc == null)
+                                {
+                                    result.code = "1";
+                                    result.msg = $"鏍规嵁鐢垫閰嶇疆鏂囦欢璐т綅锛歿eleLoc.TN_Location}鏈壘鍒板浜庤揣浣嶆暟鎹紝璇锋鏌ヨ揣浣嶈〃";
+                                    AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source);
+                                    return result;
+                                }
 
                                 if (elevatorLoc != null)
                                 {  //鍒涘缓wcs鍒嗘浠诲姟
@@ -565,6 +583,15 @@
                                 AddErrorInfo("搴撳尯鏌ユ壘澶辫触", result.msg);
                                 return result;
                             }
+                            int pri = 1;
+                            var area = Settings.wareLoc.Where(a => a.AreaCode == endloc.S_WH_CODE).First();
+                            if (area != null)
+                            {
+                                if (area.XbAreaCodes.Contains(endloc.S_AREA_CODE))
+                                {
+                                    pri = 2;
+                                }
+                            }
                             //鍒涘缓wcs浠诲姟
                             var wcsTask = new WCSTask
                             {
@@ -579,7 +606,7 @@
                                 S_END_AREA = endloc.S_AREA_CODE,
                                 N_SCHEDULE_TYPE = 1,
                                 S_CNTR_CODE = CntrCode,
-                                N_PRIORITY = taskData.priority,
+                                N_PRIORITY = pri,
                                 Z_TYPE = n_type,
                                 N_START_LAYER = 1,
                                 N_END_LAYER = 1,
@@ -744,7 +771,7 @@
                 {
 
                     //鍒涘缓鎵樼洏鏁版嵁缁戝畾鍏崇郴
-                    if (ContainerHelper.CreateCntrItem(model.Rfid, model.PartNumber, model.PartDesc, model.LotNumber, model.Weight, model.Qty, model.ProductionTime, model.MaturityTime))
+                    if (ContainerHelper.CreateCntrItemTray(model.Rfid, model.PartNumber, model.PartDesc, model.LotNumber, model.Weight, model.Qty, model.ProductionTime, model.MaturityTime, model.PowderType))
                     {
                         //鍒涘缓鎴愬姛娴佺▼
                     }
@@ -770,6 +797,183 @@
 
         }
 
+        public static object _Point = new object();
+        /// <summary>
+        /// 鍏ュ钩搴�+        /// </summary>
+        /// <param name="model"></param>
+        /// <param name="n_type">0:pda涓嬪彂浠诲姟锛�:mes涓嬪彂浠诲姟</param>
+        /// <returns></returns>
+        internal static Result Point(PointModel model)
+        {
+            Result result = new Result() { code = "200", msg = "鍏ュ钩搴撲换鍔′笅鍙戞垚鍔� };
+            string Source = "Mes";
+          
+            if (model == null)
+            {
+                result.code = "1";
+                result.msg = "鍙傛暟涓簄ull";
+                AddErrorInfo("鍙傛暟涓虹┖", result.msg, Source);
+                return result;
+            }
+            var db = new SqlHelper<object>().GetInstance();
+            Location loc = null;
+
+            string Start = model.InitialLocation;  //璧风偣璐т綅
+            string itemcode = model.PartNumber;    //鐗╂枡缂栫爜
+            string areacode = "";
+            try
+            {
+                lock (_Putin)
+                {
+                    #region 鍏ュ簱妫�煡鎵樼洏鐗╂枡琛ㄦ湁鏃犳暟鎹�+                    var cntritem = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First();
+                    if (cntritem == null)
+                    {
+                        result.code = "1";
+                        result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}鏃犵粦瀹氱墿鏂欐暟鎹�;
+                        LogHelper.Info($"ItemBack锛歿result.msg}");
+                        AddErrorInfo("鎵樼洏缁戝畾鐗╂枡鏁版嵁涓虹┖", result.msg, Source);
+                        return result;
+                    }
+                    #endregion
+
+                    #region 鍒ゆ柇鎵樼洏缁戝畾璐т綅鏄惁鍜屼笅鍙戠粦瀹氳捣鐐圭浉鍚�濡傛灉娌$粦瀹氭墭鐩樺垯缁戝畾鎵樼洏
+                    var CntrLoc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First();
+                    if (CntrLoc != null)
+                    {
+                        if (CntrLoc.S_LOC_CODE != Start)
+                        {
+
+                            result.code = "1";
+                            result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}缁戝畾浣嶇疆涓嶆槸璧风偣锛歿Start}";
+                            LogHelper.Info($"ItemBack锛歿result.msg}");
+                            AddErrorInfo("鎵樼洏缁戝畾浣嶇疆涓嶅悓", result.msg, Source);
+                            return result;
+                        }
+                    }
+                    else
+                    {
+                        LocationHelper.BindingLoc(Start, new List<string> { model.Rfid });
+                    }
+                   
+                    #endregion
+
+                    #region 鏍规嵁璧风偣璐т綅鐨勪粨搴撶紪鐮�鑾峰彇骞冲簱缂栫爜,骞惰绠楀叆搴撹揣浣�+                    string End = "";
+                    var startloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == Start).First();
+                    if (startloc != null)
+                    {
+                        //鏍规嵁浠撳簱 璁$畻搴撳尯
+                        var whcode = Settings.wareLoc.Where(a => a.AreaCode == startloc.S_WH_CODE).FirstOrDefault();
+                        if (whcode != null)
+                        {
+                            areacode = whcode.PMK;
+                        }
+                        else
+                        {
+                            result.code = "1";
+                            result.msg = $"鏍规嵁璧风偣浠撳簱缂栫爜锛歿startloc.S_WH_CODE}鏈壘鍒板搴旈厤缃枃浠�;
+                            LogHelper.Info($"Putin==> {result.msg}");
+                            AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
+                            return result;
+                        }
+
+
+                        loc = StorageCompute(itemcode, areacode);
+
+                        if (loc != null)
+                        {
+                            End = loc.S_CODE;
+                        }
+                        else
+                        {
+
+                            result.code = "1";
+                            result.msg = $"搴撳尯:{areacode}鏃犲彲鐢ㄨ揣浣�;
+                            LogHelper.Info($"Putin==> {result.msg}");
+                            AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
+                            return result;
+                        }
+                    }
+                    else
+                    {
+
+                        result.code = "1";
+                        result.msg = $"浠诲姟璧风偣:{Start}鎵句笉鍒板搴旇揣浣嶏紝璇锋鏌ヨ揣浣嶈〃";
+                        LogHelper.Info($"Putin==> {result.msg}");
+                        AddErrorInfo("鏌ユ壘璐т綅澶辫触", result.msg, Source);
+                        return result;
+                    }
+                    #endregion
+
+                    #region 鍒涘缓浠诲姟
+                    if (!string.IsNullOrEmpty(Start) && !string.IsNullOrEmpty(End))
+                    {
+                        if (startloc.N_LOCK_STATE != 0)
+                        {
+                            result.code = "1";
+                            result.msg = $"鍒涘缓浠诲姟澶辫触锛岃捣鐐�{Start}鏈夐攣";
+                            AddErrorInfo("璐т綅鏈夐攣", result.msg, Source);
+                            return result;
+                        }
+                        //鍒涘缓wcs浠诲姟
+                        var wcsTask = new WCSTask
+                        {
+                            S_CODE = WCSHelper.GenerateTaskNo(),
+                            S_TYPE = "鍏ュ钩搴�,
+                            S_EQ_NO = model.TaskNumber,
+                            S_START_LOC = Start,
+                            S_END_LOC = End,
+                            S_START_WH = startloc.S_WH_CODE,
+                            S_START_AREA = startloc.S_AREA_CODE,
+                            S_END_WH = loc.S_WH_CODE,
+                            S_END_AREA = loc.S_AREA_CODE,
+                            N_CNTR_COUNT = 1,
+                            N_SCHEDULE_TYPE = 1,
+                            S_CNTR_CODE = model.Rfid,
+                            N_START_LAYER = 1,
+                            N_END_LAYER = 1,
+                            N_PRIORITY = 1,
+                            Z_TYPE = n_type
+                        };
+                        LogHelper.Info("鍒涘缓鍏ュ钩搴撲换鍔★細" + JsonConvert.SerializeObject(wcsTask));
+                        if (WCSHelper.CreateTask(wcsTask))
+                        {
+                            //LocationHelper.LockLoc(Start, 2);
+                            //LocationHelper.LockLoc(End, 1);
+                            LogHelper.Info("鍒涘缓浠诲姟鎴愬姛");
+                        }
+                        else
+                        {
+                            result.code = "1";
+                            result.msg = $"浠诲姟鍒涘缓澶辫触";
+                            AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source);
+                            return result;
+                        }
+                    }
+                    else
+                    {
+                        result.code = "1";
+                        result.msg = "鍒涘缓浠诲姟澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫彇璐х偣鎴栧嵏璐х偣";
+                        return result;
+                    }
+                    #endregion
+
+                }
+
+                return result;
+            }
+            catch (Exception ex)
+            {
+                result.code = "1";
+                result.msg = ex.ToString();
+                LogHelper.Error("Putin Error锛� + ex.ToString(), ex);
+                return result;
+            }
+        }
+
+        public static object _Putin = new object();
         /// <summary>
         /// 鍏ュ钩搴�         /// </summary>
@@ -792,172 +996,177 @@
                 return result;
             }
             var db = new SqlHelper<object>().GetInstance();
-            Location loc = new Location();
+            Location loc = null;
 
             string Start = model.InitialLocation;  //璧风偣璐т綅
             string itemcode = model.PartNumber;    //鐗╂枡缂栫爜
             string areacode = "";
             try
             {
-
-                #region 鍏ュ簱妫�煡鎵樼洏鐗╂枡琛ㄦ湁鏃犳暟鎹�-                var cntritem = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First();
-                if (cntritem == null)
+                lock (_Putin)
                 {
-                    result.code = "1";
-                    result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}鏃犵粦瀹氱墿鏂欐暟鎹�;
-                    LogHelper.Info($"ItemBack锛歿result.msg}");
-                    AddErrorInfo("鎵樼洏缁戝畾鐗╂枡鏁版嵁涓虹┖", result.msg, Source);
-                    return result;
-                }
-                #endregion
-
-                #region 鍒ゆ柇鎵樼洏缁戝畾璐т綅鏄惁鍜屼笅鍙戠粦瀹氳捣鐐圭浉鍚�濡傛灉娌$粦瀹氭墭鐩樺垯缁戝畾鎵樼洏
-                var CntrLoc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First();
-                if (CntrLoc != null)
-                {
-                    if (CntrLoc.S_LOC_CODE != Start)
+                    #region 鍏ュ簱妫�煡鎵樼洏鐗╂枡琛ㄦ湁鏃犳暟鎹�+                    var cntritem = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First();
+                    if (cntritem == null)
                     {
-
                         result.code = "1";
-                        result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}缁戝畾浣嶇疆涓嶆槸璧风偣锛歿Start}";
+                        result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}鏃犵粦瀹氱墿鏂欐暟鎹�;
                         LogHelper.Info($"ItemBack锛歿result.msg}");
-                        AddErrorInfo("鎵樼洏缁戝畾浣嶇疆涓嶅悓", result.msg, Source);
+                        AddErrorInfo("鎵樼洏缁戝畾鐗╂枡鏁版嵁涓虹┖", result.msg, Source);
                         return result;
                     }
-                }
-                else
-                {
-                    LocationHelper.BindingLoc(Start, new List<string> { model.Rfid });
-                    //LogHelper.Info($"ItemBack锛氬垱寤轰换鍔″け璐ワ紝鎵樼洏:{model.Rfid}鏈壘鍒扮粦瀹氳揣浣�);
-                    //result.code = "1";
-                    //result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}鏈壘鍒扮粦瀹氳揣浣�;
-                    //AddErrorInfo("鏌ユ壘鎵樼洏璐т綅澶辫触", result.msg);
-                    //return result;
-                }
-                // Console.WriteLine("鏌ヨ璐т綅缁戝畾鍏崇郴");
-                //鍒ゆ柇鎵樼洏涓庤揣浣嶆槸鍚︽湁缁戝畾鍏崇郴锛屽鏋滄病鏈夊垯杩涜缁戝畾
-                // var cntrloc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First();
-                // Console.WriteLine($"鑾峰彇缁戝畾鍏崇郴:{JsonConvert.SerializeObject(cntrloc)}");
-                //if (cntrloc == null)
-                //{
-                //    // Console.WriteLine("缁戝畾鎵樼洏");
-                //    List<string> cntrs = new List<string>() { model.Rfid };
+                    #endregion
 
-                //    LocationHelper.BindingLoc(Start, cntrs);
-                //}
-                //else
-                //{
-
-                //    if (cntrloc.S_LOC_CODE != Start)
-                //    {
-
-                //        LogHelper.Info($"Putin==>鎵樼洏:{model.Rfid}宸插拰璐т綅{cntrloc.S_LOC_CODE}鏈夌粦瀹氬叧绯�);
-                //        result.code = "1";
-                //        result.msg = $"鎵樼洏:{model.Rfid}宸插拰璐т綅{cntrloc.S_LOC_CODE}鏈夌粦瀹氬叧绯�;
-                //    }
-
-                //}
-                #endregion
-
-                #region 鏍规嵁璧风偣璐т綅鐨勪粨搴撶紪鐮�鑾峰彇骞冲簱缂栫爜,骞惰绠楀叆搴撹揣浣�-                string End = "";
-                var startloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == Start).First();
-                if (startloc != null)
-                {
-                    //鏍规嵁浠撳簱 璁$畻搴撳尯
-                    var whcode = Settings.wareLoc.Where(a => a.AreaCode == startloc.S_WH_CODE).FirstOrDefault();
-                    if (whcode != null)
+                    #region 鍒ゆ柇鎵樼洏缁戝畾璐т綅鏄惁鍜屼笅鍙戠粦瀹氳捣鐐圭浉鍚�濡傛灉娌$粦瀹氭墭鐩樺垯缁戝畾鎵樼洏
+                    var CntrLoc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First();
+                    if (CntrLoc != null)
                     {
-                        areacode = whcode.PMK;
+                        if (CntrLoc.S_LOC_CODE != Start)
+                        {
+
+                            result.code = "1";
+                            result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}缁戝畾浣嶇疆涓嶆槸璧风偣锛歿Start}";
+                            LogHelper.Info($"ItemBack锛歿result.msg}");
+                            AddErrorInfo("鎵樼洏缁戝畾浣嶇疆涓嶅悓", result.msg, Source);
+                            return result;
+                        }
                     }
                     else
                     {
+                        LocationHelper.BindingLoc(Start, new List<string> { model.Rfid });
+                        //LogHelper.Info($"ItemBack锛氬垱寤轰换鍔″け璐ワ紝鎵樼洏:{model.Rfid}鏈壘鍒扮粦瀹氳揣浣�);
+                        //result.code = "1";
+                        //result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}鏈壘鍒扮粦瀹氳揣浣�;
+                        //AddErrorInfo("鏌ユ壘鎵樼洏璐т綅澶辫触", result.msg);
+                        //return result;
+                    }
+                    // Console.WriteLine("鏌ヨ璐т綅缁戝畾鍏崇郴");
+                    //鍒ゆ柇鎵樼洏涓庤揣浣嶆槸鍚︽湁缁戝畾鍏崇郴锛屽鏋滄病鏈夊垯杩涜缁戝畾
+                    // var cntrloc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First();
+                    // Console.WriteLine($"鑾峰彇缁戝畾鍏崇郴:{JsonConvert.SerializeObject(cntrloc)}");
+                    //if (cntrloc == null)
+                    //{
+                    //    // Console.WriteLine("缁戝畾鎵樼洏");
+                    //    List<string> cntrs = new List<string>() { model.Rfid };
+
+                    //    LocationHelper.BindingLoc(Start, cntrs);
+                    //}
+                    //else
+                    //{
+
+                    //    if (cntrloc.S_LOC_CODE != Start)
+                    //    {
+
+                    //        LogHelper.Info($"Putin==>鎵樼洏:{model.Rfid}宸插拰璐т綅{cntrloc.S_LOC_CODE}鏈夌粦瀹氬叧绯�);
+                    //        result.code = "1";
+                    //        result.msg = $"鎵樼洏:{model.Rfid}宸插拰璐т綅{cntrloc.S_LOC_CODE}鏈夌粦瀹氬叧绯�;
+                    //    }
+
+                    //}
+                    #endregion
+
+                    #region 鏍规嵁璧风偣璐т綅鐨勪粨搴撶紪鐮�鑾峰彇骞冲簱缂栫爜,骞惰绠楀叆搴撹揣浣�+                    string End = "";
+                    var startloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == Start).First();
+                    if (startloc != null)
+                    {
+                        //鏍规嵁浠撳簱 璁$畻搴撳尯
+                        var whcode = Settings.wareLoc.Where(a => a.AreaCode == startloc.S_WH_CODE).FirstOrDefault();
+                        if (whcode != null)
+                        {
+                            areacode = whcode.PMK;
+                        }
+                        else
+                        {
+                            result.code = "1";
+                            result.msg = $"鏍规嵁璧风偣浠撳簱缂栫爜锛歿startloc.S_WH_CODE}鏈壘鍒板搴旈厤缃枃浠�;
+                            LogHelper.Info($"Putin==> {result.msg}");
+                            AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
+                            return result;
+                        }
+
+
+                        loc = StorageCompute(itemcode, areacode);
+
+                        if (loc != null)
+                        {
+                            End = loc.S_CODE;
+                        }
+                        else
+                        {
+
+                            result.code = "1";
+                            result.msg = $"搴撳尯:{areacode}鏃犲彲鐢ㄨ揣浣�;
+                            LogHelper.Info($"Putin==> {result.msg}");
+                            AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
+                            return result;
+                        }
+                    }
+                    else
+                    {
+
                         result.code = "1";
-                        result.msg = $"鏍规嵁璧风偣浠撳簱缂栫爜锛歿startloc.S_WH_CODE}鏈壘鍒板搴旈厤缃枃浠�;
+                        result.msg = $"浠诲姟璧风偣:{Start}鎵句笉鍒板搴旇揣浣嶏紝璇锋鏌ヨ揣浣嶈〃";
                         LogHelper.Info($"Putin==> {result.msg}");
-                        AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
+                        AddErrorInfo("鏌ユ壘璐т綅澶辫触", result.msg, Source);
                         return result;
                     }
+                    #endregion
 
-                    loc = StorageCompute(itemcode, areacode);
-
-                    if (loc != null)
+                    #region 鍒涘缓浠诲姟
+                    if (!string.IsNullOrEmpty(Start) && !string.IsNullOrEmpty(End))
                     {
-                        End = loc.S_CODE;
-                    }
-                    else
-                    {
-
-                        result.code = "1";
-                        result.msg = $"搴撳尯:{areacode}鏃犲彲鐢ㄨ揣浣�;
-                        LogHelper.Info($"Putin==> {result.msg}");
-                        AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
-                        return result;
-                    }
-                }
-                else
-                {
-
-                    result.code = "1";
-                    result.msg = $"浠诲姟璧风偣:{Start}鎵句笉鍒板搴旇揣浣嶏紝璇锋鏌ヨ揣浣嶈〃";
-                    LogHelper.Info($"Putin==> {result.msg}");
-                    AddErrorInfo("鏌ユ壘璐т綅澶辫触", result.msg, Source);
-                    return result;
-                }
-                #endregion
-
-                #region 鍒涘缓浠诲姟
-                if (!string.IsNullOrEmpty(Start) && !string.IsNullOrEmpty(End))
-                {
-                    if (startloc.N_LOCK_STATE != 0)
-                    {
-                        result.code = "1";
-                        result.msg = $"鍒涘缓浠诲姟澶辫触锛岃捣鐐�{Start}鏈夐攣";
-                        AddErrorInfo("璐т綅鏈夐攣", result.msg, Source);
-                        return result;
-                    }
-                    //鍒涘缓wcs浠诲姟
-                    var wcsTask = new WCSTask
-                    {
-                        S_CODE = WCSHelper.GenerateTaskNo(),
-                        S_TYPE = "鍏ュ钩搴�,
-                        S_EQ_NO = model.TaskNumber,
-                        S_START_LOC = Start,
-                        S_END_LOC = End,
-                        S_START_WH = startloc.S_WH_CODE,
-                        S_START_AREA = startloc.S_AREA_CODE,
-                        S_END_WH = loc.S_WH_CODE,
-                        S_END_AREA = loc.S_AREA_CODE,
-                        N_CNTR_COUNT = 1,
-                        N_SCHEDULE_TYPE = 1,
-                        S_CNTR_CODE = model.Rfid,
-                        N_START_LAYER = 1,
-                        N_END_LAYER = 1,
-                        Z_TYPE = n_type
-                    };
-                    LogHelper.Info("鍒涘缓鍏ュ钩搴撲换鍔★細" + JsonConvert.SerializeObject(wcsTask));
-                    if (WCSHelper.CreateTask(wcsTask))
-                    {
-                        //LocationHelper.LockLoc(Start, 2);
-                        //LocationHelper.LockLoc(End, 1);
-                        LogHelper.Info("鍒涘缓浠诲姟鎴愬姛");
+                        if (startloc.N_LOCK_STATE != 0)
+                        {
+                            result.code = "1";
+                            result.msg = $"鍒涘缓浠诲姟澶辫触锛岃捣鐐�{Start}鏈夐攣";
+                            AddErrorInfo("璐т綅鏈夐攣", result.msg, Source);
+                            return result;
+                        }
+                        //鍒涘缓wcs浠诲姟
+                        var wcsTask = new WCSTask
+                        {
+                            S_CODE = WCSHelper.GenerateTaskNo(),
+                            S_TYPE = "鍏ュ钩搴�,
+                            S_EQ_NO = model.TaskNumber,
+                            S_START_LOC = Start,
+                            S_END_LOC = End,
+                            S_START_WH = startloc.S_WH_CODE,
+                            S_START_AREA = startloc.S_AREA_CODE,
+                            S_END_WH = loc.S_WH_CODE,
+                            S_END_AREA = loc.S_AREA_CODE,
+                            N_CNTR_COUNT = 1,
+                            N_SCHEDULE_TYPE = 1,
+                            S_CNTR_CODE = model.Rfid,
+                            N_START_LAYER = 1,
+                            N_END_LAYER = 1,
+                            N_PRIORITY = 1,
+                            Z_TYPE = n_type
+                        };
+                        LogHelper.Info("鍒涘缓鍏ュ钩搴撲换鍔★細" + JsonConvert.SerializeObject(wcsTask));
+                        if (WCSHelper.CreateTask(wcsTask))
+                        {
+                            //LocationHelper.LockLoc(Start, 2);
+                            //LocationHelper.LockLoc(End, 1);
+                            LogHelper.Info("鍒涘缓浠诲姟鎴愬姛");
+                        }
+                        else
+                        {
+                            result.code = "1";
+                            result.msg = $"浠诲姟鍒涘缓澶辫触";
+                            AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source);
+                            return result;
+                        }
                     }
                     else
                     {
                         result.code = "1";
-                        result.msg = $"浠诲姟鍒涘缓澶辫触";
-                        AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source);
+                        result.msg = "鍒涘缓浠诲姟澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫彇璐х偣鎴栧嵏璐х偣";
                         return result;
                     }
+                    #endregion
+
                 }
-                else
-                {
-                    result.code = "1";
-                    result.msg = "鍒涘缓浠诲姟澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫彇璐х偣鎴栧嵏璐х偣";
-                    return result;
-                }
-                #endregion
 
                 return result;
             }
@@ -970,6 +1179,7 @@
             }
         }
 
+        public static object _PutOut = new object();
         /// <summary>
         /// 鍑哄钩搴�         /// </summary>
@@ -996,7 +1206,6 @@
             string Start = "";
             string End = "";
             string CntrCode = "";
-
             string itemcode = model.PartNumber;
             string cntrType = "";
             string areacode = "";
@@ -1004,148 +1213,180 @@
             #endregion
             try
             {
-
-                #region 鏍规嵁鐗╂枡缂栫爜瑙勫垯 璁$畻鍑哄簱搴撳尯
-                //绮夋枡浠庡钩搴撳嚭搴擄紝鍏朵粬鐗╂枡闇�浠庢殏瀛樺尯鍑哄簱
-                var locJt = db.Queryable<Location>().Where(a => a.S_AREA_CODE == model.WorkCenter).First();
-                if (locJt == null)
+                lock (_PutOut)
                 {
-                    result.code = "1";
-                    result.msg = $"鏍规嵁鏈哄彴缂栫爜锛歿model.WorkCenter}鏈壘鍒板搴旇揣浣�;
-                    LogHelper.Info($"Putin==> {result.msg}");
-                    AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
-                    return result;
-                }
-                //鏍规嵁浠撳簱 璁$畻搴撳尯
-                var whcode = Settings.wareLoc.Where(a => a.AreaCode == locJt.S_WH_CODE).FirstOrDefault();
-                if (whcode != null)
-                {
-                    if (model.PartNumber.StartsWith("4X"))
+                    #region 鏍规嵁鐗╂枡缂栫爜瑙勫垯 璁$畻鍑哄簱搴撳尯
+                    //绮夋枡浠庡钩搴撳嚭搴擄紝鍏朵粬鐗╂枡闇�浠庢殏瀛樺尯鍑哄簱
+                    var locJt = db.Queryable<Location>().Where(a => a.S_AREA_CODE == model.WorkCenter).First();
+                    if (locJt == null)
                     {
-                        areacode = whcode.PMK;
-                        cntrType = "PM";
+                        result.code = "1";
+                        result.msg = $"鏍规嵁鏈哄彴缂栫爜锛歿model.WorkCenter}鏈壘鍒板搴旇揣浣�;
+                        LogHelper.Info($"Putin==> {result.msg}");
+                        AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
+                        return result;
                     }
-                    else
+                    //鏍规嵁浠撳簱 璁$畻搴撳尯
+                    var whcode = Settings.wareLoc.Where(a => a.AreaCode == locJt.S_WH_CODE).FirstOrDefault();
+                    if (whcode != null)
                     {
-                        if (model.PartNumber.StartsWith("3"))
+                        if (model.PartNumber.StartsWith("4X"))
                         {
-                            cntrType = "RC";
-                            areacode = whcode.ZCW;
+                            areacode = whcode.PMK;
+                            cntrType = "PM";
+                        }
+                        else if (model.PartNumber.StartsWith("32"))
+                        {
+                            areacode = whcode.ZCW2;
                         }
                         else
                         {
+                            if (model.PartNumber.StartsWith("3"))
+                            {
+                                cntrType = "RC";
+                                areacode = whcode.ZCW;
+                            }
+                            else
+                            {
 
-                            result.code = "1";
-                            result.msg = $"鍒涘缓浠诲姟澶辫触锛岀墿鏂欏彿{model.PartNumber}涓嶅睘浜庤瀹氱墿鏂�;
-                            LogHelper.Info($"ItemBack锛歿result.msg}");
-                            AddErrorInfo("鐗╂枡缂栫爜鏍煎紡閿欒", result.msg, Source);
-                            return result;
+                                result.code = "1";
+                                result.msg = $"鍒涘缓浠诲姟澶辫触锛岀墿鏂欏彿{model.PartNumber}涓嶅睘浜庤瀹氱墿鏂�;
+                                LogHelper.Info($"ItemBack锛歿result.msg}");
+                                AddErrorInfo("鐗╂枡缂栫爜鏍煎紡閿欒", result.msg, Source);
+                                return result;
+                            }
                         }
-                    }
-                }
-                else
-                {
-                    result.code = "1";
-                    result.msg = $"鏍规嵁缁堢偣搴撳尯浠撳簱缂栫爜锛歿locJt.S_WH_CODE}鏈壘鍒板搴旈厤缃枃浠�;
-                    LogHelper.Info($"Putin==> {result.msg}");
-                    AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
-                    return result;
-                }
-                #endregion
-
-                #region 鏍规嵁鐗╂枡缂栫爜璁$畻鍑哄簱璐т綅锛岄�寰�嚎杈逛綅缃�-                var Endloc = new Location();
-                //鏍规嵁鐗╂枡缂栫爜璁$畻鍑哄簱璐т綅
-                var loc = airlift(areacode, itemcode, model.PartLevel);
-                if (loc != null)
-                {
-                    Start = loc.S_CODE;
-                    //鏍规嵁鍑哄簱璐т綅鎵惧埌缁戝畾鎵樼洏锛岃幏鍙栧叆鏈哄彴璐т綅
-                    var CntrRel = LocationHelper.GetLocCntrRel(loc.S_CODE).FirstOrDefault();
-                    CntrCode = CntrRel.S_CNTR_CODE;
-                    Endloc = Computeloc(CntrCode, model.WorkCenter, cntrType);
-                    if (Endloc != null)
-                    {
-                        End = Endloc.S_CODE;
                     }
                     else
                     {
                         result.code = "1";
-                        result.msg = $"Computeloc==銆嬫牴鎹満鍙扮紪鐮侊細{model.WorkCenter},宸ヨ绫诲瀷锛歿cntrType} 鏈壘鍒扮┖璐т綅鏁版嵁锛岃妫�煡璐т綅琛�;
+                        result.msg = $"鏍规嵁缁堢偣搴撳尯浠撳簱缂栫爜锛歿locJt.S_WH_CODE}鏈壘鍒板搴旈厤缃枃浠�;
+                        LogHelper.Info($"Putin==> {result.msg}");
+                        AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
+                        return result;
+                    }
+                    #endregion
+
+                    #region 鏍规嵁鐗╂枡缂栫爜璁$畻鍑哄簱璐т綅锛岄�寰�嚎杈逛綅缃�+                    Location Endloc = null;
+
+                    //鏍规嵁鐗╂枡缂栫爜璁$畻鍑哄簱璐т綅
+                    var loc = airlift(areacode, itemcode, model.PartLevel, model.PowderType);
+                    if (loc != null)
+                    {
+                        Start = loc.S_CODE;
+
+                        var CntrRel = LocationHelper.GetLocCntrRel(loc.S_CODE).FirstOrDefault();
+                        CntrCode = CntrRel.S_CNTR_CODE;
+                        //缁欑粓鐐圭敤缁堢偣锛屾病缁欑粓鐐圭敤鏈哄彴搴撳尯璁$畻璐т綅
+                        if (string.IsNullOrEmpty(model.TargetLocation))
+                        {
+
+                            Endloc = Computeloc(CntrCode, model.WorkCenter, cntrType);
+                            if (Endloc != null)
+                            {
+                                End = Endloc.S_CODE;
+                            }
+                            else
+                            {
+                                result.code = "1";
+                                result.msg = $"Computeloc==銆嬫牴鎹満鍙扮紪鐮侊細{model.WorkCenter},宸ヨ绫诲瀷锛歿cntrType} 鏈壘鍒扮┖璐т綅鏁版嵁锛岃妫�煡璐т綅琛�;
+                                LogHelper.Info($"ItemBack锛歿result.msg}");
+                                AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
+                                return result;
+                            }
+                        }
+                        else
+                        {
+
+                            Endloc = db.Queryable<Location>().Where(a => a.S_CODE == model.TargetLocation).First();
+                            if (Endloc != null)
+                            {
+                                End = Endloc.S_CODE;
+                            }
+                            else
+                            {
+                                result.code = "1";
+                                result.msg = $"Computeloc==銆嬫牴鎹粓鐐硅揣浣嶏細{model.TargetLocation} 鏈壘鍒拌揣浣嶆暟鎹紝璇锋鏌ヨ揣浣嶈〃";
+                                LogHelper.Info($"ItemBack锛歿result.msg}");
+                                AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
+                                return result;
+                            }
+                        }
+
+                    }
+                    else
+                    {
+
+                        result.code = "1";
+                        result.msg = $"浠诲姟鐗╂枡:{itemcode}鎵句笉鍒板搴斿簱瀛�;
                         LogHelper.Info($"ItemBack锛歿result.msg}");
                         AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
                         return result;
                     }
-                }
-                else
-                {
+                    #endregion
 
-                    result.code = "1";
-                    result.msg = $"浠诲姟鐗╂枡:{itemcode}鎵句笉鍒板搴斿簱瀛�;
-                    LogHelper.Info($"ItemBack锛歿result.msg}");
-                    AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
-                    return result;
-                }
-                #endregion
+                    #region 浠诲姟鍒涘缓
+                    if (string.IsNullOrEmpty(Start))
+                    {
+                        result.code = "1";
+                        result.msg = "鍒涘缓浠诲姟澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫彇璐х偣";
+                        return result;
+                    }
+                    if (string.IsNullOrEmpty(End))
+                    {
+                        result.code = "1";
+                        result.msg = "鍒涘缓浠诲姟澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫嵏璐х偣";
+                        return result;
+                    }
+                    if (loc.N_LOCK_STATE != 0)
+                    {
+                        result.code = "1";
+                        result.msg = $"鍒涘缓浠诲姟澶辫触锛岃捣鐐箋Start}鏈夐攣";
+                        AddErrorInfo("璐т綅鏈夐攣", result.msg, Source);
+                        return result;
+                    }
+                    //鍒涘缓wcs浠诲姟
+                    var wcsTask = new WCSTask
+                    {
+                        S_CODE = WCSHelper.GenerateTaskNo(),
+                        S_TYPE = "鍑哄钩搴�,
+                        S_EQ_NO = model.TaskNumber,
+                        S_START_LOC = Start,
+                        S_END_LOC = End,
+                        S_START_WH = loc.S_WH_CODE,
+                        S_START_AREA = loc.S_AREA_CODE,
+                        S_END_WH = Endloc.S_WH_CODE,
+                        S_END_AREA = Endloc.S_AREA_CODE,
+                        N_CNTR_COUNT = 1,
+                        N_SCHEDULE_TYPE = 1,
+                        S_CNTR_CODE = CntrCode,
+                        N_START_LAYER = 1,
+                        N_END_LAYER = 1,
+                        N_PRIORITY = 1,
+                        Z_TYPE = n_type
 
-                #region 浠诲姟鍒涘缓
-                if (string.IsNullOrEmpty(Start))
-                {
-                    result.code = "1";
-                    result.msg = "鍒涘缓浠诲姟澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫彇璐х偣";
-                    return result;
-                }
-                if (string.IsNullOrEmpty(End))
-                {
-                    result.code = "1";
-                    result.msg = "鍒涘缓浠诲姟澶辫触锛屾湭鎵惧埌瀵瑰簲鐨勫嵏璐х偣";
-                    return result;
-                }
-                if (loc.N_LOCK_STATE != 0)
-                {
-                    result.code = "1";
-                    result.msg = $"鍒涘缓浠诲姟澶辫触锛岃捣鐐箋Start}鏈夐攣";
-                    AddErrorInfo("璐т綅鏈夐攣", result.msg, Source);
-                    return result;
-                }
-                //鍒涘缓wcs浠诲姟
-                var wcsTask = new WCSTask
-                {
-                    S_CODE = WCSHelper.GenerateTaskNo(),
-                    S_TYPE = "鍑哄钩搴�,
-                    S_EQ_NO = model.TaskNumber,
-                    S_START_LOC = Start,
-                    S_END_LOC = End,
-                    S_START_WH = loc.S_WH_CODE,
-                    S_START_AREA = loc.S_AREA_CODE,
-                    S_END_WH = Endloc.S_WH_CODE,
-                    S_END_AREA = Endloc.S_AREA_CODE,
-                    N_CNTR_COUNT = 1,
-                    N_SCHEDULE_TYPE = 1,
-                    S_CNTR_CODE = CntrCode,
-                    N_START_LAYER = 1,
-                    N_END_LAYER = 1,
-                    Z_TYPE = n_type
+                    };
+                    LogHelper.Info("鍒涘缓鍑哄钩搴撲换鍔★細" + JsonConvert.SerializeObject(wcsTask));
+                    if (WCSHelper.CreateTask(wcsTask))
+                    {
+                        LogHelper.Info("鍒涘缓浠诲姟鎴愬姛");
+                        //LocationHelper.LockLoc(Start, 2);
+                        //LocationHelper.LockLoc(End, 1);
+                    }
+                    else
+                    {
+                        result.code = "1";
+                        result.msg = $"浠诲姟鍒涘缓澶辫触";
+                        AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source);
+                        return result;
+                    }
 
-                };
-                LogHelper.Info("鍒涘缓鍑哄钩搴撲换鍔★細" + JsonConvert.SerializeObject(wcsTask));
-                if (WCSHelper.CreateTask(wcsTask))
-                {
-                    LogHelper.Info("鍒涘缓浠诲姟鎴愬姛");
-                    //LocationHelper.LockLoc(Start, 2);
-                    //LocationHelper.LockLoc(End, 1);
-                }
-                else
-                {
-                    result.code = "1";
-                    result.msg = $"浠诲姟鍒涘缓澶辫触";
-                    AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source);
+                    #endregion
+
                     return result;
                 }
 
-                #endregion
-
-                return result;
             }
             catch (Exception ex)
             {
@@ -1180,9 +1421,8 @@
             string Start = model.InitialLocation;
             string itemcode = "";
             int endlayer = 1;
-            Location loc = new Location();
+            Location loc = null;
             string areacode = "";
-            WCSTask mst = new WCSTask();
             List<WCSTask> msts = new List<WCSTask>();
             #endregion
 
@@ -1190,34 +1430,45 @@
             {
                 lock (_lockEmpty)
                 {
-                    #region 鍒ゆ柇鎵樼洏缁戝畾璐т綅鏄惁鍜屼笅鍙戠粦瀹氳捣鐐圭浉鍚�-                    //var CntrLoc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First();
-                    //if (CntrLoc != null)
-                    //{
-                    //    if (CntrLoc.S_LOC_CODE != Start)
-                    //    {
-                    //        LogHelper.Info($"ItemBack锛氬垱寤轰换鍔″け璐ワ紝鎵樼洏:{model.Rfid}缁戝畾浣嶇疆涓嶆槸璧风偣锛歿Start}");
-                    //        result.code = "1";
-                    //        result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}缁戝畾浣嶇疆涓嶆槸璧风偣锛歿Start}";
-                    //        AddErrorInfo("鎵樼洏缁戝畾浣嶇疆涓嶅悓", result.msg);
-                    //        return result;
-                    //    }
-                    //}
-                    //else
-                    //{
-                    //    LogHelper.Info($"ItemBack锛氬垱寤轰换鍔″け璐ワ紝鎵樼洏:{model.Rfid}鏈壘鍒扮粦瀹氳揣浣�);
-                    //    result.code = "1";
-                    //    result.msg = $"鍒涘缓浠诲姟澶辫触锛屾墭鐩�{model.Rfid}鏈壘鍒扮粦瀹氳揣浣�;
-                    //    AddErrorInfo("鏌ユ壘鎵樼洏璐т綅澶辫触", result.msg);
-                    //    return result;
-                    //}
-                    #endregion
+
 
                     #region 鏍规嵁璐т綅妤煎眰鍒ゆ柇锛�妤煎幓寰�彔鐩樹綅 鍏朵粬鐨勫洖搴�                     var startloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == Start).First();
                     if (startloc != null)
                     {
-                        if (startloc.N_LAYER == 3)
+                        if (!string.IsNullOrEmpty(startloc.S_NOTE1))
+                        {
+                            //鍙犵洏璐т綅璁$畻鍙犵洏璐т綅
+                            // var dploc = db.Queryable<Location>().Where(a => a.S_NOTE.Trim() == "鍙犵洏" && a.N_LAYER == startloc.N_LAYER && a.S_WH_CODE.Trim() == startloc.S_WH_CODE && a.C_ENABLE == "Y").ToList();
+                            var dploc = db.Queryable<Location>().Where(a => a.S_NOTE1.Trim() == startloc.S_NOTE1 + "鍙犵洏" && a.S_WH_CODE.Trim() == startloc.S_WH_CODE).ToList();
+                            if (dploc.Count > 0)
+                            {
+                                // LogHelper.Info($"鑾峰彇鍙犵洏璐т綅:{JsonConvert.SerializeObject(dploc)}");
+                                loc = dploc.FindAll(a => a.N_LOCK_STATE == 0 && a.N_CURRENT_NUM < 6).OrderByDescending(a => a.N_CURRENT_NUM).FirstOrDefault();
+                                if (loc == null)
+                                {
+                                    LogHelper.Info($"{startloc.S_NOTE1}鍙犵洏浣嶏紝閮藉凡缁忔湁閿佹垨鑰呭凡缁忓彔婊★紝璇锋鏌ヨ揣浣嶇姸鎬�);
+                                    result.code = "1";
+                                    result.msg = $"{startloc.S_NOTE1}鍙犵洏璐т綅涓嶅彲鐢紝缁堢偣搴撳尯娌℃湁鍙敤璐т綅锛岃妫�煡閿佺姸鎬佸拰鏁伴噺";
+                                    AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
+                                    return result;
+                                }
+                                else
+                                {
+                                    endlayer = loc.N_CURRENT_NUM + 1;
+                                }
+                            }
+                            else
+                            {
+                                // LogHelper.Info($"鏍规嵁璐т綅妤煎眰锛歿startloc.N_LAYER}锛屼粨搴撶紪鐮侊細{startloc.S_WH_CODE}锛岃揣浣嶅娉細鍙犵洏锛屾湭鎵惧埌鍙犵洏璐т綅");
+                                result.code = "1";
+                                result.msg = $"{startloc.S_NOTE1}鍙犵洏璐т綅涓嶅彲鐢紝鏈壘鍒板彲鍙犵洏璐т綅";
+                                LogHelper.Info($"鏍规嵁璐т綅澶囨敞锛歿startloc.S_NOTE1}鍙犵洏锛岃揣浣嶄粨搴�{startloc.S_WH_CODE}锛屾壘涓嶅埌鍙犵洏璐т綅");
+                                AddErrorInfo("鏌ユ壘璐т綅澶辫触", result.msg, Source);
+                                return result;
+                            }
+                        }
+                        else if (startloc.N_LAYER == 3)
                         {
                             //鍙犵洏璐т綅璁$畻鍙犵洏璐т綅
                             // var dploc = db.Queryable<Location>().Where(a => a.S_NOTE.Trim() == "鍙犵洏" && a.N_LAYER == startloc.N_LAYER && a.S_WH_CODE.Trim() == startloc.S_WH_CODE && a.C_ENABLE == "Y").ToList();
@@ -1302,18 +1553,25 @@
                             #endregion
 
                             //鍥炲簱璐т綅璁$畻搴撳尯璐т綅
+                            if (string.IsNullOrEmpty(areacode))
+                            {
+                                result.code = "1";
+                                result.msg = $"璧风偣璐т綅{startloc.S_CODE}鏃犳硶鎵惧埌鍥炲簱搴撳尯锛岃妫�煡璧风偣璐т綅";
+                                LogHelper.Info($" {result.msg}");
+                                AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
+                                return result;
+                            }
                             loc = StorageCompute(itemcode, areacode);
                             if (loc == null)
                             {
-                                loc = emptyRow(areacode);
-                                if (loc == null)
-                                {
-                                    result.code = "1";
-                                    result.msg = $"搴撳尯锛歿areacode}娌℃湁鍙敤璐т綅";
-                                    LogHelper.Info($" {result.msg}");
-                                    AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
-                                    // LogHelper.Info($"搴撳尯锛歿areacode}娌℃湁鍙敤璐т綅");
-                                }
+
+                                result.code = "1";
+                                result.msg = $"搴撳尯锛歿areacode}娌℃湁鍙敤璐т綅";
+                                LogHelper.Info($" {result.msg}");
+                                AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg, Source);
+                                return result;
+                                // LogHelper.Info($"搴撳尯锛歿areacode}娌℃湁鍙敤璐т綅");
+
                             }
                             //else
                             //{
@@ -1329,7 +1587,6 @@
                     }
                     else
                     {
-
                         result.code = "1";
                         result.msg = $"Empty==> 浠诲姟璧风偣:{Start}鎵句笉鍒板搴旇揣浣嶏紝璇锋鏌ヨ揣浣嶈〃";
                         LogHelper.Info($"{result.msg}");
@@ -1338,7 +1595,7 @@
                     }
                     #endregion
 
-                    #region 鍒涘缓浠诲姟
+                    #region 鍒涘缓浠诲姟   
                     if (startloc != null && loc != null)
                     {
                         if (startloc.N_LOCK_STATE != 0 && loc.N_LOCK_STATE != 0)
@@ -1348,6 +1605,7 @@
                             AddErrorInfo("璐т綅鏈夐攣", result.msg);
                             return result;
                         }
+                        LogHelper.Info("鍒涘缓绌烘墭鍥炲簱浠诲姟,缁堢偣璐т綅涓虹┖锛� + JsonConvert.SerializeObject(loc));
                         //鍒涘缓wcs浠诲姟
                         var wcsTask = new WCSTask
                         {
@@ -1365,6 +1623,8 @@
                             S_CNTR_CODE = model.Rfid,
                             N_START_LAYER = 1,
                             N_END_LAYER = endlayer,
+                            N_PRIORITY = 1,
+                            S_B_STATE = "绛夊緟鎺ㄩ�",
                             Z_TYPE = 5
                         };
                         LogHelper.Info("鍒涘缓绌烘墭鍥炲簱浠诲姟锛� + JsonConvert.SerializeObject(wcsTask));
@@ -1386,7 +1646,7 @@
                         else
                         {
                             result.code = "1";
-                            result.msg = $"浠诲姟鍒涘缓澶辫触";
+                            result.msg = $"浠诲姟鍒涘缓澶辫触锛岃妫�煡璧风偣璐т綅鐘舵�鍚庨噸鏂颁笅鍙�;
                             AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source);
                             return result;
                         }
@@ -1438,7 +1698,7 @@
 
             string areacode = "";
             string cntrcode = "";
-            Location startloc = new Location();
+            Location startloc = null;
             //  startloc = LocationHelper.GetLocByAreacode(areacode, model.CarrierType);
             #endregion
 
@@ -1446,8 +1706,6 @@
             {
                 lock (_lockcallfixture)
                 {
-
-
                     #region 鏍规嵁浠撳簱缂栫爜鍒ゆ柇搴撳尯 骞惰绠楀嚭搴撹揣浣�                     var endloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == End).First();
                     //鏍规嵁浠撳簱 璁$畻搴撳尯
@@ -1546,6 +1804,7 @@
                             N_START_LAYER = 1,
                             N_END_LAYER = 1,
                             Z_TYPE = 5,
+                            N_PRIORITY = 1,
                             S_NOTE = "绮夋枡"
                         };
                         LogHelper.Info("鍒涘缓鍛煎彨绌烘墭浠诲姟锛� + JsonConvert.SerializeObject(wcsTask));
@@ -1611,9 +1870,8 @@
             string Start = model.InitialLocation;
             string End = "";
             string itemcode = model.PartNumber;
-            Location loc = new Location();
+            Location loc = null;
             string areacode = "";
-            WCSTask mst = new WCSTask();
             List<WCSTask> msts = new List<WCSTask>();
             #endregion
 
@@ -1622,36 +1880,6 @@
                 lock (_lockItemBack)
                 {
 
-
-
-                    #region 浣欐枡杩斿洖鏍规嵁鎵樼洏鎵惧嚭搴撲换鍔�-                    //浣欐枡杩斿洖鏍规嵁鎵樼洏鎵惧嚭搴撲换鍔�-                    //msts = WCSHelper.GetTaskBycntrcode(model.Rfid);
-                    //if (msts.Count() > 0)
-                    //{
-                    //    msts.RemoveAll(a => string.IsNullOrEmpty(a.S_CNTR_CODE));
-                    //    mst = msts.OrderByDescending(a => a.T_CREATE).FirstOrDefault();
-                    //}
-                    //if (mst != null)
-                    //{
-                    //    areacode = mst.S_START_AREA;
-                    //}
-                    //else
-                    //{
-                    //    result.code = "1";
-                    //    result.msg = $"鍒涘缓浠诲姟澶辫触锛屾牴鎹墭鐩樼紪鐮亄model.Rfid}鏈壘鍒版墭鐩樺嚭搴撲换鍔�;
-                    //    AddErrorInfo("鏌ユ壘浠诲姟澶辫触", result.msg);
-                    //    return result;
-                    //}
-                    //if (string.IsNullOrEmpty(areacode))
-                    //{
-                    //    LogHelper.Info($"鍒涘缓浠诲姟澶辫触锛屾牴鎹墭鐩樼紪鐮亄model.Rfid}鎵惧埌鍑哄簱浠诲姟{mst.S_CODE}鐨勮捣鐐瑰簱鍖轰负绌�);
-                    //    result.code = "1";
-                    //    result.msg = $"鍒涘缓浠诲姟澶辫触锛屾牴鎹墭鐩樼紪鐮亄model.Rfid}鎵惧埌鍑哄簱浠诲姟{mst.S_CODE}鐨勮捣鐐瑰簱鍖轰负绌�;
-                    //    AddErrorInfo("鏌ユ壘搴撳尯澶辫触", result.msg);
-                    //    return result;
-                    //}
-                    #endregion
 
                     #region 鍒ゆ柇鎵樼洏缁戝畾璐т綅鏄惁鍜屼笅鍙戠粦瀹氳捣鐐圭浉鍚�                     var CntrLoc = db.Queryable<LocCntrRel>().Where(a => a.S_CNTR_CODE.Trim() == model.Rfid).First();
@@ -1699,17 +1927,18 @@
                                 //    loc = emptyRow(areacode);
                                 //}
                             }
+                            else if (model.PartNumber.StartsWith("32"))
+                            {
+                                areacode = whcode.ZCW2;
+                            }
                             else
                             {
-
-
                                 if (model.PartNumber.StartsWith("3"))
                                 {
                                     areacode = whcode.ZCW;
                                 }
                                 else
                                 {
-
                                     result.code = "1";
                                     result.msg = $"鍒涘缓浠诲姟澶辫触锛岀墿鏂欏彿{model.PartNumber}涓嶅睘浜庤瀹氱墿鏂�;
                                     LogHelper.Info($"ItemBack锛歿result.msg}");
@@ -1800,6 +2029,7 @@
                             S_CNTR_CODE = model.Rfid,
                             N_START_LAYER = 1,
                             N_END_LAYER = 1,
+                            N_PRIORITY = 1,
                             Z_TYPE = 5
 
                         };
@@ -2051,6 +2281,7 @@
                         S_CNTR_CODE = CntrCode,
                         N_START_LAYER = 1,
                         N_END_LAYER = 1,
+                        N_PRIORITY = 1,
                         //  N_TYPE = n_type
 
 
@@ -2132,35 +2363,49 @@
                     var cntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == startloc.S_CODE).First();
                     if (cntr == null)
                     {
-
                         result.code = "1";
                         result.msg = $"璧风偣{model.Data.start_loc_code}鏈煡璇㈢粦瀹氭墭鐩�;
                         LogHelper.Info($"callfixture:鍒涘缓绌哄伐瑁呭懠鍙换鍔�=>{result.msg}");
                         AddErrorInfo("鏌ユ壘鎵樼洏澶辫触", result.msg, Source);
                         return result;
                     }
-
-                    // var startArea = db.Queryable<Area>().Where(a => a.S_CODE.Trim() == startloc.S_AREA_CODE).First();
-                    //var endArea = db.Queryable<Area>().Where(a => a.S_CODE.Trim() == endloc.S_AREA_CODE).First();
-
-                    //string dtcode = "DT-01";
-                    ////妤煎眰鐢垫鍒嗛厤
-                    //var Diantiloc = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == dtcode).First();
-                    //if (Diantiloc == null)
-                    //{
-                    //    result.code = "1";
-                    //    result.msg = $"鍒涘缓浠诲姟澶辫触锛屾牴鎹揣浣嶇紪鐮�{dtcode}鏈壘鍒扮數姊揣浣�;
-                    //    AddErrorInfo("鏌ユ壘璐т綅澶辫触", result.msg, Source);
-                    //    return result;
-                    //}
-
+                    string deviceName = "鐢垫1";
+                    if (startloc.S_WH_CODE == "103")
+                    {
+                        deviceName = "鐢垫2";
+                    }
+                    var eleLoc = Settings.deviceInfos.Where(a => a.deviceName.Trim() == deviceName).FirstOrDefault();
+                    if (eleLoc == null)
+                    {
+                        result.code = "1";
+                        result.msg = $"鏈壘鍒颁粨搴搟startloc.S_WH_CODE}鎵�搴旂殑鐢垫锛岃妫�煡閰嶇疆鏂囦欢";
+                        AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source);
+                        return result;
+                    }
                     //鏍规嵁浠诲姟鏁伴噺鍒ゆ柇閫佸線鍝釜鐢垫 锛堝叿浣撶數姊祦绋嬫牴鎹幇鍦虹數姊暟閲忥級
-                    var elevatorLoc = LocationHelper.GetElevatorLoc();
+                    string[] state = new string[] { "鎵ц涓�, "寮�鍙栬揣", "鍙栬揣瀹屾垚", "寮�鍗歌揣", "鍗歌揣瀹屾垚" };
 
+
+                    var elevatorLoc = db.Queryable<Location>().Where(a => a.S_CODE == eleLoc.TN_Location).First();
+                    if (elevatorLoc == null)
+                    {
+                        result.code = "1";
+                        result.msg = $"鏍规嵁鐢垫閰嶇疆鏂囦欢璐т綅锛歿eleLoc.TN_Location}鏈壘鍒板浜庤揣浣嶆暟鎹紝璇锋鏌ヨ揣浣嶈〃";
+                        AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source);
+                        return result;
+                    }
+                    int mst = db.Queryable<WCSTask>().Where(a => a.S_TYPE.Contains("鐢垫") && state.Contains(a.S_B_STATE) && (a.S_END_LOC == elevatorLoc.S_CODE || a.S_START_LOC == elevatorLoc.S_CODE)).Count();
+                    if (mst > 0)
+                    {
+                        result.code = "1";
+                        result.msg = $"鐢垫瀛樺湪浠诲姟锛屼笉鍏佽鍒涘缓鐢垫浠诲姟";
+                        AddErrorInfo("浠诲姟鍒涘缓澶辫触", result.msg, Source);
+                        return result;
+                    }
                     var wcsTask = new WCSTask
                     {
                         S_CODE = WCSHelper.GenerateTaskNo(),
-                        S_TYPE = "鐢垫2",
+                        S_TYPE = "1妤肩數姊惉杩�,
                         S_EQ_NO = model.Data.task_no,
                         S_START_LOC = elevatorLoc.S_CODE,
                         S_END_LOC = endloc.S_CODE,
@@ -2172,7 +2417,9 @@
                         N_SCHEDULE_TYPE = 1,
                         S_CNTR_CODE = cntr.S_CNTR_CODE,
                         N_END_LAYER = 1,
-                        Z_TYPE = 6
+                        Z_TYPE = 6,
+                        N_PRIORITY = 1,
+                        S_B_STATE = "鐢垫鎺ㄩ�"
                     };
 
 
@@ -2233,6 +2480,47 @@
 
         }
 
+
+        /// <summary>
+        /// 鐢垫浠诲姟鎺ㄩ�
+        /// </summary>
+        /// <param name="model"></param>
+        /// <returns></returns>
+        internal static Result DT(DTModel model)
+        {
+            Result result = new Result() { code = "200", msg = "鐢垫浠诲姟鎺ㄩ�鎴愬姛" };
+            string Source = "WMS";
+            if (model == null)
+            {
+                result.code = "1";
+                result.msg = "鍙傛暟涓簄ull";
+                AddErrorInfo("鍙傛暟涓虹┖", result.msg, Source);
+                return result;
+            }
+            try
+            {
+                if (model.prepare == "1")
+                {
+                    var db = new SqlHelper<object>().GetInstance();
+                    //淇敼瀵瑰簲鐢垫浠诲姟杩涜鎺ㄩ�
+                    return result;
+                }
+                else
+                {
+                    result.code = "1";
+                    result.msg = $"涓�ゼ鐢垫鎼繍浠诲姟鎺ㄩ�澶辫触 prepare{model.prepare}涓嶄负1";
+                    LogHelper.Info(result.msg);
+                    return result;
+                }
+            }
+            catch (Exception ex)
+            {
+                result.code = "1";
+                result.msg = $"鐢垫浠诲姟鎺ㄩ�澶辫触 閿欒淇℃伅锛歿ex}";
+                LogHelper.Error("鐐瑰鐐逛换鍔�Error锛� + ex.ToString(), ex);
+                return result;
+            }
+        }
         /// <summary>
         /// 璐т綅淇℃伅涓婁紶
         /// </summary>
@@ -2396,58 +2684,47 @@
             var db = new SqlHelper<object>().GetInstance();
             try
             {
-                var location = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == loc).First();
-                if (location != null)
+                lock (_lockCreateItem)
                 {
-                    var loccntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == loc).ToList();
-                    if (loccntr.Count > 0)
+                    var location = db.Queryable<Location>().Where(a => a.S_CODE.Trim() == loc).First();
+                    if (location != null)
                     {
-                        foreach (var item in loccntr)
+                        var loccntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == loc.Trim()).ToList();
+                        if (loccntr.Count > 0)
                         {
-                            string cntrcode = item.S_CNTR_CODE;
-                            LocationHelper.UnBindingLoc(loc, new List<string>() { cntrcode });
-                            var CntrItem = db.Queryable<CntrItemDetail>().Where(a => a.S_CNTR_CODE.Trim() == cntrcode).First();
-                            if (CntrItem != null)
+                            var cntrcodes = loccntr.Select(a => a.S_CNTR_CODE.Trim()).ToList();
+                            if (LocationHelper.Clear(loc, cntrcodes))
                             {
-                                db.Deleteable<Container>().Where(it => it.S_CODE == item.S_CNTR_CODE).ExecuteCommand();
-                                // db.Deleteable<LocCntrRel>().Where(it => it.S_LOC_CODE.Trim() == loc).ExecuteCommand();
-                                if (db.Deleteable<CntrItemDetail>().Where(it => it.S_CNTR_CODE == cntrcode).ExecuteCommand() > 0)
-                                {
-                                    LogHelper.Info($"ClearLoc 搴撲綅娓呴櫎鎴愬姛");
-                                }
-                                else
-                                {
-                                    LogHelper.Info($"ClearLoc 搴撲綅娓呴櫎澶辫触");
-                                    result.code = "1";
-                                    result.msg = "搴撲綅娓呴櫎澶辫触";
-                                    AddErrorInfo("搴撲綅娓呴櫎澶辫触", result.msg, Source);
-                                    return result;
-                                }
+                                LogHelper.Info($"ClearLoc 搴撲綅娓呴櫎鎴愬姛");
                             }
                             else
                             {
-                                LogHelper.Info($"搴撳尯娓呯┖=銆嬫墭鐩�{cntrcode}鏃犵墿鏂欐暟鎹�);
-
+                                LogHelper.Info($"ClearLoc 搴撲綅娓呴櫎澶辫触");
+                                result.code = "1";
+                                result.msg = "搴撲綅娓呴櫎澶辫触";
+                                AddErrorInfo("搴撲綅娓呴櫎澶辫触", result.msg, Source);
+                                return result;
                             }
+
+                        }
+                        else
+                        {
+                            result.code = "1";
+                            result.msg = $" ClearLoc 璐т綅{loc}鏃犳墭鐩樿揣浣嶇粦瀹氬叧绯�;
+                            AddErrorInfo("搴撲綅娓呴櫎澶辫触", result.msg, Source);
+                            return result;
+
                         }
 
                     }
+
                     else
                     {
                         result.code = "1";
-                        result.msg = $" ClearLoc 璐т綅{loc}鏃犳墭鐩樿揣浣嶇粦瀹氬叧绯�;
-                        AddErrorInfo("搴撲綅娓呴櫎澶辫触", result.msg, Source);
+                        result.msg = $"鏍规嵁璐т綅:{loc}鎵句笉鍒拌揣浣嶅叧绯�;
+                        AddErrorInfo("璐т綅涓虹┖", result.msg, Source);
                         return result;
-
                     }
-
-                }
-                else
-                {
-                    result.code = "1";
-                    result.msg = $"鏍规嵁璐т綅:{loc}鎵句笉鍒拌揣浣嶅叧绯�;
-                    AddErrorInfo("璐т綅涓虹┖", result.msg, Source);
-                    return result;
                 }
             }
             catch (Exception ex)
@@ -2485,12 +2762,12 @@
             if (agvDeviceInfo.Count > 0)
             {
                 device.AgvQty = agvDeviceInfo.Count;
-                device.AgvErrorQty = agvDeviceInfo.FindAll(a => a.agvErrCode != "0" || a.agvErrCode != "0" || a.faildCode != "0").Count;
-                device.AgvChargeQty = agvDeviceInfo.FindAll(a => a.agvErrCode == "1").Count;
-                device.AgvRunQty = agvDeviceInfo.FindAll(a => a.agvErrCode == "1").Count;
+                device.AgvErrorQty = agvDeviceInfo.FindAll(a => a.agvErrCode != "0" || int.Parse(a.errCode2) > 1 || int.Parse(a.faildCode) > 1).Count;
+                device.AgvChargeQty = agvDeviceInfo.FindAll(a => a.errCode2 == "1").Count;
+                device.AgvRunQty = agvDeviceInfo.FindAll(a => a.agvErrCode == "0"&& a.errCode2 == "0" && a.faildCode == "1").Count;
                 foreach (var agv in agvDeviceInfo)
                 {
-                    string agvErrorInfo = GetAgvAlarmSendCodeTwo(agv.agvErrCode, agv.errCode2, agv.faildCode);
+                    string agvErrorInfo = GetAgvAlarmSendCodeTwo(agv.agvNo, agv.agvErrCode, agv.errCode2, agv.faildCode);
                     deviceInfos.Add(new DeviceInfos() { AgvNo = agv.agvNo, AgvInfo = agvErrorInfo });
                 }
             }
@@ -2502,56 +2779,65 @@
         /// <summary>
         /// agv灏忚溅鏁呴殰鐮佸鐞�         /// </summary>
+        ///<param name="agvNo">杞﹀彿</param>
         /// <param name="errCode1">閿欒鐮�</param>
         /// <param name="errCode2">閿欒鐮�</param>
         /// <param name="faildCode">閿欒鐮�</param>
         /// <returns></returns>
-        private static string GetAgvAlarmSendCodeTwo(string errCode1, string errCode2, string faildCode)
+        private static string GetAgvAlarmSendCodeTwo(string agvNo, string errCode1, string errCode2, string faildCode)
         {
             string result = "";
             //灏嗘姤璀︿俊鎭暣鍚�-            string binSW1 = Convert.ToString(int.Parse(errCode1), 2).PadLeft(22, '0');
+            string binSW1 = Convert.ToString(int.Parse(errCode1), 2).PadLeft(25, '0');
             string binSW2 = Convert.ToString(int.Parse(errCode1), 2).PadLeft(20, '0');
             string binFc = Convert.ToString(int.Parse(errCode1), 2).PadLeft(16, '0');
             var arr1 = binSW1.ToArray();
             var arr2 = binSW2.ToArray();
             var arr3 = binFc.ToArray();
 
-            for (int i = 0; i <= arr1.Length; i++)
+            var AgvError = Settings.agvError.Where(a => a.agvNo.Contains(agvNo)).FirstOrDefault();
+            if (AgvError != null)
             {
-                if (arr1[i] == '1')
+                for (int i = 0; i <= arr1.Length; i++)
                 {
-                    var ErrorInfo = Settings.agvErrorCode1.Where(a => a.ErrorCode == i).FirstOrDefault();
-                    if (ErrorInfo != null)
+                    if (arr1[i] == '1')
                     {
-                        result = result + "," + $"{ErrorInfo.ErrorInfo}";
-                    }
+                        var ErrorInfo = AgvError.AgvErrorCode1.Find(a => a.ErrorCode == i);
+                        if (ErrorInfo != null)
+                        {
+                            result = result + "," + $"{ErrorInfo.ErrorInfo}";
+                        }
 
+                    }
+                }
+                for (int i = 0; i <= arr2.Length; i++)
+                {
+                    if (arr1[i] == '1')
+                    {
+                        var ErrorInfo = AgvError.AgvErrorCode2.Find(a => a.ErrorCode == i);
+                        if (ErrorInfo != null)
+                        {
+                            result = result + "," + $"{ErrorInfo.ErrorInfo}";
+                        }
+
+                    }
+                }
+                for (int i = 0; i <= arr3.Length; i++)
+                {
+                    if (arr1[i] == '1')
+                    {
+                        var ErrorInfo = AgvError.AgvFaildCode.Find(a => a.ErrorCode == i);
+                        if (ErrorInfo != null)
+                        {
+                            result = result + "," + $"{ErrorInfo.ErrorInfo}";
+                        }
+
+                    }
                 }
             }
-            for (int i = 0; i <= arr2.Length; i++)
+            else
             {
-                if (arr1[i] == '1')
-                {
-                    var ErrorInfo = Settings.agvErrorCode2.Where(a => a.ErrorCode == i).FirstOrDefault();
-                    if (ErrorInfo != null)
-                    {
-                        result = result + "," + $"{ErrorInfo.ErrorInfo}";
-                    }
 
-                }
-            }
-            for (int i = 0; i <= arr3.Length; i++)
-            {
-                if (arr1[i] == '1')
-                {
-                    var ErrorInfo = Settings.agvFaildCode.Where(a => a.ErrorCode == i).FirstOrDefault();
-                    if (ErrorInfo != null)
-                    {
-                        result = result + "," + $"{ErrorInfo.ErrorInfo}";
-                    }
-
-                }
             }
             return result;
         }
@@ -2568,54 +2854,26 @@
         /// <returns></returns>
         internal static Location StorageCompute(string itemcode, string areacode)
         {
+            //Location result = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM == 0 && a.S_AREA_CODE.Trim() == areacode && a.N_LOCK_STATE == 0).First();
             var db = new SqlHelper<object>().GetInstance();
-            //   Location result = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM == 0 && a.S_AREA_CODE.Trim() == areacode && a.N_LOCK_STATE == 0 ).First();
-            Location result = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM == 0 && a.S_AREA_CODE.Trim() == areacode && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").First();
-            //鏌ヨ鎵�湁鏈夋墭鐩樼殑鎺掓病閿佺殑鎺�-            // var list = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM > 0 && a.S_AREA_CODE.Trim() == areacode && a.N_LOCK_STATE == 0).OrderByDescending(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList();
-            // if (list.Count > 0)
-            //{
-            //    for (int i = 0; i < list.Count; i++)
-            //    {
-            //        LogHelper.Info($"鏈夋墭鐩樻帓鍙穥list[i].N_ROW}锛岀墿鏂欑紪鐮亄itemcode},搴撳尯{areacode}");
-            //        //鏌ヨ璐т綅缁戝畾鎵樼洏
-            //        var cntr = db.Queryable<LocCntrRel>().Where(a => a.S_LOC_CODE.Trim() == list[i].S_CODE).First();
-            //        if (cntr != null)
-            //        {
-            //            //鏌ヨ鎵樼洏鐗╂枡淇℃伅
-            //            var iteminfo = ContainerHelper.GetCntrItemRel(cntr.S_CNTR_CODE).FirstOrDefault();
+            Location result = null;
+            // 867C567A-183C-413B-9891-15D8F6DE1620
 
-            //            if (string.IsNullOrEmpty(itemcode))//绌烘墭鍏ュ簱
-            //            {
-            //                if (iteminfo == null)
-            //                {
-            //                    //鐗╂枡鐩稿悓鍏ヨ揣浣嶅悗涓�綅璐т綅
-            //                    result = db.Queryable<Location>().OrderBy(a => a.N_COL).Where(a => a.S_AREA_CODE.Trim() == areacode && a.N_ROW == list[i].N_ROW && a.N_COL > list[i].N_COL && a.N_LOCK_STATE == 0 && a.N_CURRENT_NUM == 0).First();
-            //                }
-            //            }
-            //            else//婊℃嫋鍏ュ簱
-            //            {
-            //                if (iteminfo != null)
-            //                {
-            //                    if (iteminfo.S_ITEM_CODE == itemcode)
-            //                    {
-            //                        //鐗╂枡鐩稿悓鍏ヨ揣浣嶅悗涓�綅璐т綅
-            //                        result = db.Queryable<Location>().OrderBy(a => a.N_COL).Where(a => a.S_AREA_CODE.Trim() == areacode && a.N_ROW == list[i].N_ROW && a.N_COL > list[i].N_COL && a.N_LOCK_STATE == 0 && a.N_CURRENT_NUM == 0).First();
+            // var aaa = db.Deleteable<Location>(a => a.S_ID == "867C567A-183C-413B-9891-15D8F6DE1620").ExecuteCommand();
+            // var aaa = db.Deleteable<Location>(a => a.S_ID.Trim() == "867C567A-183C-413B-9891-15D8F6DE1620").ExecuteCommand();
 
-            //                    }
-            //                }
-            //            }
-            //            if (result != null)
-            //            {
-            //                return result;
-            //            }
-            //        }
-            //        else
-            //        {
-            //            LogHelper.Info($"鏍规嵁璐х墿缂栫爜{list[i].S_CODE}鏈壘鍒版墭鐩樿揣浣嶇粦瀹氬叧绯�);
-            //        }
-            //    }
-            //}
+            //LogHelper.Info($"鏂规硶锛歋torageCompute");
+            var list = db.Queryable<Location>().Where(a => a.N_CURRENT_NUM == 0 && a.S_AREA_CODE == areacode && a.N_LOCK_STATE == 0).ToList();
+            // LogHelper.Info($"鍒涘缓绌烘墭鍥炲簱浠诲姟,缁堢偣璐т綅闆嗗悎锛氭牴鎹簱鍖虹紪鐮侊細{areacode}" + list.Count);
+            //list.RemoveAll(a => string.IsNullOrEmpty(a.S_CODE.Trim()) || a.S_CODE == null || string.IsNullOrWhiteSpace(a.S_CODE.Trim()));
+            // list = list.FindAll(a => a.N_ROW > 0 && a.N_COL > 0);
+            //LogHelper.Info("鍒涘缓绌烘墭鍥炲簱浠诲姟,缁堢偣璐т綅闆嗗悎杩囨护锛� + list.Count);
+
+            if (list.Count > 0)
+            {
+                result = FindEndcolByLocList(list);
+            }
+
             return result;
         }
 
@@ -2626,8 +2884,10 @@
         /// <param name="areacode"></param>
         /// <param name="itemcode"></param>
         /// <param name="level">鐗╂枡绛夌骇</param>
+        /// <param name="powderType">鏈哄瀷</param>
         /// <returns></returns>
-        internal static Location airlift(string areacode, string itemcode, string level = "")
+        internal static Location
+            airlift(string areacode, string itemcode, string level, string powderType)
         {
             var db = new SqlHelper<object>().GetInstance();
             Location result = null;
@@ -2684,8 +2944,8 @@
             //}
 
             #endregion
-            var loc = LocationHelper.GetLocByItemCode(areacode, itemcode, level);
-            LogHelper.Info($"airlift=>鏍规嵁搴撳尯缂栫爜:{areacode}锛岀墿鏂欑紪鐮�{itemcode},鐗╂枡绛夌骇璁$畻鍑烘湁鎵樼洏璐т綅{JsonConvert.SerializeObject(loc)}");
+            var loc = LocationHelper.GetLocByItemCode(areacode, itemcode, level, powderType);
+            LogHelper.Info($"airlift=>鏍规嵁搴撳尯缂栫爜:{areacode}锛岀墿鏂欑紪鐮�{itemcode},鏈哄瀷{powderType},鐗╂枡绛夌骇璁$畻鍑烘湁鎵樼洏璐т綅{JsonConvert.SerializeObject(loc)}");
             // result = FindStartcolByLoclist(loc);
             if (loc.Count > 0)
             {
@@ -2730,7 +2990,7 @@
             else
             {
                 return ContainerHelper.CreateCntrItem(taskData.pickStation, partData.rfid, partData.partNumber, partData.partDesc, partData.partType, taskData.carrierType, partData.lotNumber, taskData.wmsLot, partData.weight, partData.unit,
-                    taskData.tyreType, taskData.supplier, taskData.receiveLot, taskData.subpool, partData.productionTime, partData.maturityTime, taskData.level);
+                    taskData.tyreType, taskData.supplier, taskData.receiveLot, taskData.subpool, partData.productionTime, partData.maturityTime, taskData.level, partData.qty, partData.qtyCfg);
             }
 
         }
@@ -2759,7 +3019,7 @@
         /// <returns></returns>
         internal static Location Computeloc(string cntrcode, string jtcode, string cntrType)
         {
-            Location End = new Location();
+            Location End = null;
             var db = new SqlHelper<object>().GetInstance();
 
 
@@ -2767,12 +3027,16 @@
 
             lock (_lockLocation)
             {
-                var loc = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == jtcode.Trim() && a.S_NOTE == cntrType && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃�).First();
-                if (loc != null)
+                if (string.IsNullOrEmpty(cntrType))
                 {
-                    End = loc;
+                    End = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == jtcode.Trim() && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃�).First();
                 }
                 else
+                {
+                    End = db.Queryable<Location>().Where(a => a.S_AREA_CODE.Trim() == jtcode.Trim() && a.S_NOTE == cntrType && a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.S_LOCK_STATE == "鏃�).First();
+                }
+
+                if (End == null)
                 {
                     LogHelper.Info($"Computeloc==銆嬫牴鎹満鍙板垎缁勶細{jtcode},宸ヨ绫诲瀷锛歿cntrType} 鏈壘鍒扮┖璐т綅鏁版嵁锛岃妫�煡璐т綅琛�);
                 }
@@ -2820,6 +3084,48 @@
         }
 
         /// <summary>
+        /// 鍚堣偉浣抽�鎺ュ彛璋冪敤淇℃伅
+        /// </summary>
+        /// <param name="source">绯荤粺鏉ユ簮</param>
+        /// <param name="name">鎺ュ彛鍚嶇О</param>
+        /// <param name="type">璇锋眰鍦板潃绫诲瀷</param>
+        /// <param name="body">璇锋眰鍙傛暟</param>
+        /// <param name="url">璇锋眰鍦板潃</param>
+        /// <param name="err">閿欒淇℃伅</param>
+        /// <returns></returns>
+        public static bool AddInfo(string source, string name, string body, string err, string type, string url)
+        {
+            bool result = false;
+            var db = new SqlHelper<object>().GetInstance();
+            try
+            {
+                var error = new GT_Interface_Exc
+                {
+                    S_SOURCE = source,
+                    S_NAME = name,
+                    S_TYPE = type,
+                    S_URL = url,
+                    S_BODY = body,
+                    S_ERR = err
+                };
+                if (result = db.Insertable<GT_Interface_Exc>(error).ExecuteCommand() > 0)
+                {
+
+                }
+                //else
+                //{
+                //    //娣诲姞澶辫触閲嶆柊娣诲姞
+                //    AddErrorInfo(errorInfo, remake, areacode, taskno);
+                //}
+            }
+            catch (Exception ex)
+            {
+                LogHelper.Info($"AddInfo Error:{ex.Message}");
+            }
+            return result;
+        }
+
+        /// <summary>
         /// 鎵剧粓鐐圭┖璐т綅
         /// </summary>
         /// <param name="locations"></param>
@@ -2834,13 +3140,15 @@
                 var rows = locations.Select(a => a.N_ROW).Distinct().ToList();
                 for (int i = 0; i < rows.Count; i++)
                 {
+
                     var rowList = locations.Where(r => r.N_ROW == rows[i]).ToList();
+                    //  LogHelper.Info($"褰撳墠鎺�{rows[i]},鑾峰緱璐т綅{JsonConvert.SerializeObject(rowList)}");
                     if (rowList.Count(a => a.N_CURRENT_NUM == 0) > 0)
                     {
                         Location other = null;
                         //褰撳墠鎺掓病鏈夐攣骞朵笖鏈夌┖浣嶇疆
-                        //鍏堟壘婊′綅锛岀劧鍚庡悗闈竴灞傝涔堟槸绌猴紝瑕佷箞涓嶅瓨鍦�-                        /// other = rowList.OrderBy(a => a.N_COL).Where(a => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").FirstOrDefault();
+
+                        // other = rowList.OrderBy(a => a.N_COL).Where(a => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0 && a.C_ENABLE == "Y").FirstOrDefault();
                         other = rowList.OrderBy(a => a.N_COL).Where(a => a.N_CURRENT_NUM == 0 && a.N_LOCK_STATE == 0).FirstOrDefault();
                         //if (full == null)
                         //{
@@ -2857,6 +3165,59 @@
                         //    other = db.Queryable<Location>().OrderBy(a => a.N_LAYER).Where(a => (string.IsNullOrEmpty(a.C_ENABLE) || a.C_ENABLE.Trim() != "绂佺敤") && a.S_AREA_CODE == other.S_AREA_CODE && a.N_ROW == other.N_ROW && a.N_COL > other.N_COL).First();
                         //    //LogHelper.Info($"绂佺敤閫夋嫨鍚庝竴涓揣浣峽result}", "鎴愬搧");
                         //}
+
+                        if (other != null)
+                        {
+                            if (other.S_CODE != null && !string.IsNullOrEmpty(other.S_CODE))
+                            {
+                                end = other;
+                                break;
+                            }
+                        }
+                    }
+                }
+                return end;
+            }
+            catch (Exception)
+            {
+
+                throw;
+            }
+
+        }
+
+        /// <summary>
+        /// 鎵剧粓鐐圭┖璐т綅璁$畻鎺掗攣
+        /// </summary>
+        /// <param name="locations"></param>
+        /// <returns></returns>
+        internal static Location FindEndcolByLocListLock(List<Location> locations)
+        {
+            try
+            {
+                var db = new SqlHelper<object>().GetInstance();
+                Location end = null;
+                //鏍规嵁缁堢偣璐т綅鎵剧┖闂茶揣浣�+                var rows = locations.Select(a => a.N_ROW).Distinct().ToList();
+                for (int i = 0; i < rows.Count; i++)
+                {
+                    var rowList = locations.Where(r => r.N_ROW == rows[i]).ToList();
+                    if (rowList.Count(a => a.S_LOCK_STATE != "鏃�) == 0 && rowList.Count(a => a.N_CURRENT_NUM == 0) > 0)
+                    {
+                        Location other = null;
+                        //褰撳墠鎺掓病鏈夐攣骞朵笖鏈夌┖浣嶇疆
+                        //鍏堟壘婊′綅锛岀劧鍚庡悗闈竴浣嶈涔堟槸绌猴紝瑕佷箞涓嶅瓨鍦�+                        var full = rowList.OrderByDescending(a => a.N_COL).Where(a => a.N_CURRENT_NUM == 1).FirstOrDefault();
+                        if (full == null)
+                        {
+                            //娌℃湁婊′綅锛岄偅灏辨壘鏈�皬鐨勭┖浣�+                            other = rowList.OrderBy(a => a.N_COL).FirstOrDefault();
+                        }
+                        else
+                        {
+                            other = rowList.OrderBy(a => a.N_COL).Where(a => a.N_COL > full.N_COL).FirstOrDefault();
+                        }
+
                         if (other != null)
                         {
                             end = other;
@@ -2959,7 +3320,6 @@
         {
             lock (AGVDeviceReceiveLock)
             {
-
                 var db = new SqlHelper<HangChaAGV>().GetInstance();
                 var agvDeviceInfo = db.Queryable<HangChaAGV>().Where(a => a.agvNo.Trim() == forkliftNo).First();
                 if (agvDeviceInfo == null)

--
Gitblit v1.9.1