From 7fda4aeb36beda46d767a78082573692e7b85651 Mon Sep 17 00:00:00 2001
From: cjs <2216046164@qq.com>
Date: 星期二, 15 七月 2025 17:23:05 +0800
Subject: [PATCH] 111

---
 HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs |  241 +++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 205 insertions(+), 36 deletions(-)

diff --git a/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs b/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
index 97110a5..5659dd1 100644
--- a/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
+++ b/HH.WCS.Mobox3.NongFuLinZhi/process/TaskProcess.cs
@@ -11,6 +11,7 @@
 using System.Collections.Generic;
 using System.Linq;
 using System.Security.Cryptography;
+using System.Threading.Tasks;
 using System.Xml.Linq;
 using static HH.WCS.Mobox3.NFLZ.api.OtherModel;
 using static HH.WCS.Mobox3.NFLZ.dispatch.NDCApi;
@@ -65,7 +66,7 @@
                 //璧风偣缁堢偣瑙i攣
                 LocationHelper.UnLockLoc(mst.S_START_LOC);
                 LocationHelper.UnLockLoc(mst.S_END_LOC);
-
+                
             }
 
         }
@@ -677,7 +678,7 @@
         /// <exception cref="NotImplementedException"></exception>
         public static void EmptyTask(WCSTask mst)
         {
-            //鐡剁洊娉ㄥ鏈虹┖鎵樹笂绾匡紝鑻ユ�浜ф�鐢ㄥ簱鍖烘病鏈夊浣欑殑绌烘墭锛屽垯鍦ㄩ潪鎬ヤ骇鎬ョ敤绌烘墭鍖烘嬁绌烘墭
+            //鐡剁洊娉ㄥ鏈虹┖鎵樹笂绾匡紝鑻ュ嵆浜ф�鐢ㄥ簱鍖烘病鏈夊浣欑殑绌烘墭锛屽垯鍦ㄩ潪鍗充骇鎬ョ敤绌烘墭鍖烘嬁绌烘墭
             var db = new SqlHelper<object>().GetInstance();
             Location startLoca = null;
 
@@ -1105,15 +1106,27 @@
                         Extend2 = db.Queryable<Location>().Where(a => a.S_CODE == mst.S_END_LOC).First().S_AGV_SITE;
                         if (mst.N_START_LAYER > 1)
                         {
-                            Extend1 = db.Queryable<LocationExt>().Where(a => a.S_LOC_CODE == mst.S_START_LOC && a.N_LAYER == mst.N_START_LAYER).First().S_AGV_SITE;
+                            if(mst.S_TYPE != "鐡跺澂闈炲嵆浜х┖妗嗗叆搴� && mst.S_TYPE != "鐡跺澂鎺ラ┏浣嶅叆搴� && mst.S_TYPE != "鐡剁洊绌烘墭鍏ュ簱")
+                            {
+                                Extend1 = db.Queryable<LocationExt>().Where(a => a.S_LOC_CODE == mst.S_START_LOC && a.N_LAYER == mst.N_START_LAYER).First().S_AGV_SITE;
+                            }
+                            
                         }
                         if (mst.N_END_LAYER > 1)
                         {
                             Extend2 = db.Queryable<LocationExt>().Where(a => a.S_LOC_CODE == mst.S_END_LOC && a.N_LAYER == mst.N_END_LAYER).First().S_AGV_SITE;
                         }
-                        if(mst.S_TYPE == "鐡跺澂闈炴�浜цˉ婊℃" || mst.S_TYPE == "鐡剁洊闈炴�浜цˉ婊℃" || mst.S_TYPE == "鐡跺澂闈炴�浜цˉ绌烘" || mst.S_TYPE == "鐡剁洊闈炴�浜цˉ绌烘" || mst.S_TYPE == "娉ㄥ鍗充骇婊℃墭涓嬬嚎锛堢摱鍧級")
+                        if(mst.S_TYPE == "鐡跺澂闈炲嵆浜цˉ婊℃" || mst.S_TYPE == "鐡剁洊闈炲嵆浜цˉ婊℃澶у寘瑁� || mst.S_TYPE == "鐡跺澂闈炲嵆浜цˉ绌烘" || mst.S_TYPE == "鐡剁洊闈炲嵆浜цˉ绌烘" || mst.S_TYPE == "娉ㄥ鍗充骇婊℃墭涓嬬嚎锛堢摱鍧級")
                         {
                             Extend2 = Settings.dXSites.Where(it => it.loc == mst.S_END_LOC).First().site.ToString();
+                        }
+
+                        if(mst.S_TYPE == "鎺ラ┏浣嶅叆搴�)
+                        {
+                            if(mst.S_CNTR_CODE.Split(',').ToList().Count != 2)
+                            {
+                                Extend1 = db.Queryable<LocationExt>().Where(a => a.S_LOC_CODE == mst.S_START_LOC && a.N_LAYER == 1).First().S_AGV_SITE;
+                            }
                         }
 
                         Extend3 = "0";
@@ -1125,28 +1138,28 @@
                         //Extend4 = db.Queryable<LinjiangBCPWorkOrder>().Where(a => a.S_WorkNo == workNo).First().S_UsingNow == "N" ? "2" : "1";
 
                         //鐡跺澂娉ㄥ鏈虹珯鐐规牴鎹厤缃枃浠惰幏鍙�-                        if (taskType.Contains("娉ㄥ") && taskType.Contains("鐡跺澂"))
-                        {
-                            var devInfo = Settings.deviceInfos.Where(a => (a.TN_Location.Contains(mst.S_START_LOC) || a.TN_Location.Contains(mst.S_END_LOC)) && a.enable == 1).FirstOrDefault();
-                            string machine = (devInfo.TN_Location[0] == mst.S_START_LOC || devInfo.TN_Location[0] == mst.S_END_LOC) ? "A" : "B";
-                            string machineTwo = devInfo.deviceName.Split('-')[1] + machine;
-                            LogHelper.Info($"鏈哄彴锛歿machineTwo}");
-                            var siteInfo = Settings.pPZSJSites.Where(a => a.siteName == machineTwo && a.enable == 1).FirstOrDefault();
-                            if (siteInfo != null)
-                            {
-                                if (taskType.Contains("绌烘墭涓婄嚎"))
-                                {
-                                    //鏀瑰彉缁堢偣绔欑偣
-                                    Extend2 = siteInfo.site[1];
-                                }
-                                else
-                                {
-                                    //鏀瑰彉璧风偣绔欑偣
-                                    Extend1 = siteInfo.site[0];
-                                }
-                            }
-                            else LogHelper.Info("閰嶇疆鏂囦欢鏈厤缃摱鍧敞濉戞満绔欑偣");
-                        }
+                        //if (taskType.Contains("娉ㄥ") && taskType.Contains("鐡跺澂"))
+                        //{
+                        //    var devInfo = Settings.deviceInfos.Where(a => (a.TN_Location.Contains(mst.S_START_LOC) || a.TN_Location.Contains(mst.S_END_LOC)) && a.enable == 1).FirstOrDefault();
+                        //    string machine = (devInfo.TN_Location[0] == mst.S_START_LOC || devInfo.TN_Location[0] == mst.S_END_LOC) ? "A" : "B";
+                        //    string machineTwo = devInfo.deviceName.Split('-')[1] + machine;
+                        //    LogHelper.Info($"鏈哄彴锛歿machineTwo}");
+                        //    var siteInfo = Settings.pPZSJSites.Where(a => a.siteName == machineTwo && a.enable == 1).FirstOrDefault();
+                        //    if (siteInfo != null)
+                        //    {
+                        //        if (taskType.Contains("绌烘墭涓婄嚎"))
+                        //        {
+                        //            //鏀瑰彉缁堢偣绔欑偣
+                        //            Extend2 = siteInfo.site[1];
+                        //        }
+                        //        else
+                        //        {
+                        //            //鏀瑰彉璧风偣绔欑偣
+                        //            Extend1 = siteInfo.site[0];
+                        //        }
+                        //    }
+                        //    else LogHelper.Info("閰嶇疆鏂囦欢鏈厤缃摱鍧敞濉戞満绔欑偣");
+                        //}
                     }
 
                     Console.WriteLine($"[SendTask]:TaskNo={mst.S_CODE.Trim()},start={Extend1},end={Extend2}");
@@ -1306,6 +1319,11 @@
                                     .ToList();
                                 if (locInfo.Count > 0)
                                 {
+                                    if(areaName == "鐡跺澂鍗充骇婊℃缂撳瓨")
+                                    {
+                                        locInfo = locInfo.Where(a => a.N_ROW == 1 || a.N_ROW == 2).ToList();
+                                    }
+
                                     LogHelper.Info($"鍏ュ簱绠楁硶02:鏌ヨ鍒板彲鍏ヨ揣浣嶇殑鏁伴噺涓猴細{locInfo.Count}");
                                     foreach (var a in locInfo)
                                     {
@@ -1320,7 +1338,7 @@
                                                 var endItemInfo = db.Queryable<CntrItemRel>().Where(b => b.S_CNTR_CODE == endCntrInfo.S_CNTR_CODE).First();
                                                 if (endItemInfo != null)
                                                 {
-                                                    endItemCode = endItemInfo.S_ITEM_CODE;
+                                                    endItemCode = endItemInfo.S_ITEM_CODE + endItemInfo.S_BATCH_NO;
                                                 }
                                             }
                                             else
@@ -1341,7 +1359,7 @@
                                                     else
                                                     {
                                                         //鏌ヨ鍚庨潰褰撳墠璐т綅鍚庝竴涓�-                                                        result = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.N_ROW > a.N_ROW && b.S_LOCK_STATE == "鏃�).OrderBy(b => b.N_COL).First();
+                                                        result = db.Queryable<Location>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.N_ROW == a.N_ROW && b.N_COL > a.N_COL && a.N_CURRENT_NUM < a.N_CAPACITY && b.S_LOCK_STATE == "鏃�).OrderBy(b => b.N_COL).First();
                                                     }
                                                     if (result != null)
                                                     {
@@ -1437,6 +1455,10 @@
                         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)
                         {
+                            if(areaName == "鐡跺澂鍗充骇婊℃缂撳瓨" && string.IsNullOrEmpty(itemCode))
+                            {
+                                locList = locList.Where(a => a.N_ROW == 3).ToList();
+                            }
                             LogHelper.Info($"鍑哄簱绠楁硶02:鏌ヨ鍒板彲鍑鸿揣浣嶆暟閲忥細{locList.Count}");
                             foreach (var a in locList)
                             {
@@ -1550,7 +1572,7 @@
             LogHelper.Info($"鐡跺澂娉ㄥ婊℃墭涓嬬嚎锛氱被鍨嬶細{taskName}锛岀墿鏂欑紪鐮侊細{itemCode}");
             if (taskName.Contains("鍗充骇"))
             {
-                //娉ㄥ鏈烘�浜у嵆鐢ㄤ笅绾匡紝棣栧厛涓嬬嚎鍒板嵆浜у嵆鐢ㄦ弧妗嗙嚎杈癸紝婊$湺绾胯竟婊′簡锛屼笅鍒板嵆浜у嵆鐢ㄦ弧妗嗙紦瀛樺尯锛屾弧妗嗙紦瀛樺尯婊′簡锛屼笅鍒板叆搴撴帴椹冲爢鍙犱綅
+                //娉ㄥ鏈哄嵆浜у嵆鐢ㄤ笅绾匡紝棣栧厛涓嬬嚎鍒板嵆浜у嵆鐢ㄦ弧妗嗙嚎杈癸紝婊$湺绾胯竟婊′簡锛屼笅鍒板嵆浜у嵆鐢ㄦ弧妗嗙紦瀛樺尯锛屾弧妗嗙紦瀛樺尯婊′簡锛屼笅鍒板叆搴撴帴椹冲爢鍙犱綅
                 var areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇婊℃" && a.enable == 1).FirstOrDefault();
                 if(areaInfo != null)
                 {
@@ -1629,7 +1651,60 @@
             {
                 LogHelper.Info($"{endAreaName}鏈厤缃�);
             }
-            
+            if(result == null)
+            {
+                if(endAreaName == "缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡跺澂锛�)
+                {
+                    //鐡跺澂闈炲嵆浜х┖鎵樹笅绾�濡傛灉闈炲嵆浜х┖妗嗗簱鍖烘棤娉曞叆搴擄紝鍒欎笅绾垮埌鐡跺澂鍗充骇婊℃缂撳瓨 4 5 鎺�+                    areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇婊℃缂撳瓨" && a.enable == 1).FirstOrDefault();
+                    if (areaInfo != null)
+                    {
+                        var locList = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && (a.N_ROW == 4 || a.N_ROW == 5) && a.N_CURRENT_NUM == 0).OrderBy(a => a.N_ROW).OrderBy(a => a.N_COL).Take(1).PartitionBy(a => a.N_ROW).ToList();
+                        if (locList.Count > 0)
+                        {
+                            foreach (var a in locList)
+                            {
+                                var rowInfo = db.Queryable<RowLock>().Where(b => b.S_AREA_CODE == a.S_AREA_CODE && b.S_ROW == a.S_ROW && a.S_LOCK_STATE == "鏃�).First();
+                                if (rowInfo != null && a.S_LOCK_STATE == "鏃�)
+                                {
+                                    result = a;
+                                    break;
+                                }
+
+                            }
+                        }
+                    }
+                    else
+                    {
+                        LogHelper.Info("鐡跺澂鍗充骇婊℃缂撳瓨鏈厤缃�);
+                    }
+                }
+                if(endAreaName == "缈绘枟鏈哄嵆浜х┖鎵樹笅绾匡紙鐡跺澂锛�)
+                {
+                    //鐡跺澂鍗充骇绌烘墭涓嬬嚎 濡傛灉鍗充骇绌烘搴撳尯鏃犳硶鍏ュ簱锛屽垯涓嬬嚎鍒扮摱鍧嵆浜ф弧妗嗙紦瀛�3 鎺�+                    areaInfo = Settings.areaInfos.Where(a => a.areaName == "鐡跺澂鍗充骇婊℃缂撳瓨" && a.enable == 1).FirstOrDefault();
+                    if (areaInfo != null)
+                    {
+                        var locInfo = db.Queryable<Location>().Where(a => a.S_AREA_CODE == areaInfo.areaCode && a.N_ROW == 3 && a.N_CURRENT_NUM == 0).OrderBy(a => a.N_COL).First();
+                        if (locInfo != null )
+                        {
+                            var rowInfo = db.Queryable<RowLock>().Where(b => b.S_AREA_CODE == locInfo.S_AREA_CODE && b.S_ROW == locInfo.S_ROW && locInfo.S_LOCK_STATE == "鏃�).First();
+                            if (rowInfo != null && locInfo.S_LOCK_STATE == "鏃�)
+                            {
+                                result = locInfo;
+                            }
+                        }
+                    }
+                    else
+                    {
+                        LogHelper.Info("鐡跺澂鍗充骇婊℃缂撳瓨鏈厤缃�);
+                    }
+                    if(result == null)
+                    {
+                        BCPEmptyOut(db, "缈绘枟鏈哄簱瀛樼┖鎵樹笅绾匡紙鐡跺澂锛�);
+                    }
+                }
+            }
             return result;
         }
 
@@ -1849,7 +1924,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;
@@ -1868,11 +1943,16 @@
                         var Con = db.Queryable<Container>().Where(a => a.S_CODE == cntrCode).First();
                         if(Con == null)
                         {
+                            int detallCount = 0;
+                            if (!string.IsNullOrEmpty(itemCode))
+                            {
+                                detallCount = 1;
+                            }
                             if(db.Insertable<Container>(new Container
                             {
                                 S_CODE = cntrCode,
                                 N_TYPE = 1,
-                                N_DETAIL_COUNT = 1
+                                N_DETAIL_COUNT = detallCount
                             }).ExecuteCommand() > 0)
                             {
                                 LogHelper.Info($"瀹瑰櫒琛ㄧ粦瀹氭垚鍔燂紝鎵樼洏鍙凤細{cntrCode}");
@@ -1880,7 +1960,7 @@
                         }
                         if (!string.IsNullOrEmpty(itemCode))
                         {
-                            BindCntrItem(cntrCode, itemCode, batchNo, itemlayer);
+                            BindCntrItem(cntrCode, itemCode, batchNo, itemlayer, itemName);
                         }
                     }
                 }
@@ -1896,7 +1976,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;
@@ -1911,8 +1991,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}");
                 }
 
 
@@ -2394,6 +2474,95 @@
             }
         }
 
+        /// <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)
+            {
+                if (op.N_B_STATE == 0)
+                {
+                    //绛夊緟鐩存帴淇敼鐘舵�涓哄彇娑�+                    op.N_B_STATE = 3;
+                }
+                else if (op.N_B_STATE == 1)
+                {
+                    if (WCSHelper.CheckActionRecordExist(TN_Task.S_CODE, 4))
+                    {
+                        op.N_B_STATE = 2;
+                    }
+                    else
+                    {
+                        op.N_B_STATE = 3;
+                    }
+                }
+                
+                WMSHelper.UpdateTaskState(op);
+            }
+            NDCApi.CancelOrder(TN_Task.S_CODE.Trim());
+            OperateStatus(TN_Task, 7);
+        }
     }
 }

--
Gitblit v1.9.1