From c8f338feee0b6003d8f069b1d37fd9b90dd1b7f4 Mon Sep 17 00:00:00 2001
From: 杨前锦 <1010338399@qq.com>
Date: 星期一, 07 七月 2025 17:31:38 +0800
Subject: [PATCH] 印尼佳通优化

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/core/WCSCore.cs |  420 +++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 292 insertions(+), 128 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/core/WCSCore.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/core/WCSCore.cs
index 895d834..5fac5a1 100644
--- a/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/core/WCSCore.cs
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/core/WCSCore.cs
@@ -17,10 +17,12 @@
 using static HH.WCS.Mobox3.YNJT_BZP.api.AgvController;
 using static HH.WCS.Mobox3.YNJT_BZP.api.ApiModel;
 using static HH.WCS.Mobox3.YNJT_BZP.dispatch.GtDispatch;
+using static HH.WCS.Mobox3.YNJT_BZP.util.Settings;
 
 namespace HH.WCS.Mobox3.YNJT_BZP.core {
     internal class WCSCore {
         public static void OperateAgvTaskStatus(AgvTaskState model) {
+            LogHelper.Info($"AGV浠诲姟鐘舵�鍙嶉锛屽叆鍙傦細{JsonConvert.SerializeObject(model)}", "AGV");
             try
             {
                 if (string.IsNullOrEmpty(model.No))
@@ -32,16 +34,16 @@
                     var TN_Task = WCSHelper.GetTask(model.No);
                     if (TN_Task != null)
                     {
-                        bool isExist = WCSHelper.CheckActionRecordExist(TN_Task.S_CODE, model.State);
-                        if (!isExist)
+                        var wmsTask = WMSHelper.GetWmsTask(TN_Task.S_OP_CODE);
+                        if (wmsTask != null && wmsTask.N_B_STATE < 2) 
                         {
-                            WCSHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData);
                             if (model.State <= 7)
                             {
                                 //鏈変换鍔″彿璇锋眰
                                 switch (model.State)
                                 {
                                     case 1:
+                                        TN_Task.S_EQ_NO = model.ForkliftNo;
                                         WCSHelper.Begin(TN_Task);
                                         break;
                                     #region MyRegion
@@ -58,39 +60,55 @@
                                     case 6:
                                         TaskProcess.OperateStatus(TN_Task, 6);
                                         WCSHelper.UpdateStatus(TN_Task, "鍗歌揣瀹屾垚");
+
+                                        // AGV鍗歌揣杈撻�绾匡紝瑙﹀彂鍏ュ簱浠诲姟
+                                        if (TN_Task.S_END_LOC != wmsTask.S_END_LOC)
+                                        {
+                                            LogHelper.Info($"浠诲姟鍙凤細{TN_Task.S_CODE}锛孉GV鍗歌揣杈撻�绾匡紝瑙﹀彂WCS鍏ュ簱浠诲姟", "AGV");
+                                            Container container = ContainerHelper.GetCntr(TN_Task.S_CNTR_CODE);
+                                            if (container != null)
+                                            {
+                                                WCSCore.createLastTask(TN_Task.S_END_LOC, wmsTask, 1);
+                                            }
+                                        }
                                         break;
                                     #endregion
                                     case 2:
                                         WCSHelper.End(TN_Task);
 
                                         var cntrItemRels = ContainerHelper.GetCntrItemRel(TN_Task.S_CNTR_CODE);
-                                        if (cntrItemRels.Count > 0) 
+                                        if (cntrItemRels.Count > 0)
                                         {
+                                            LogHelper.Info($"浠诲姟鍙凤細{TN_Task.S_CODE}锛孉GV浠诲姟瀹屾垚锛屼换鍔′俊鎭洖鎶T", "AGV");
                                             string shift = ApiHelper.getShift(DateTime.Now.TimeOfDay);
-                                            string ydate_shiftName = "";
+                                            string ydate= "";
                                             if (shift == "III")
                                             {
-                                                ydate_shiftName = DateTime.Now.AddDays(-1).ToString("yy/MM/dd") + "-" + shift;
+                                                ydate = DateTime.Now.AddDays(-1).ToString("dd/MM/yy");
                                             }
-                                            else 
+                                            else
                                             {
-                                                ydate_shiftName = DateTime.Now.ToString("yy/MM/dd") + "-" + shift;
+                                                ydate = DateTime.Now.ToString("dd/MM/yy");
                                             }
-                                            WmsToGtLokasiModel wmsToGtLokasiModel = new WmsToGtLokasiModel()
+                                            Trfloc trfloc = new Trfloc()
                                             {
-                                                ydate_shiftName = ydate_shiftName,
+                                                recid = 1,
+                                                ydate = ydate,
+                                                shift = shift,
                                                 bc_entried = cntrItemRels[0].S_CG_ID,
                                                 loc_from = TN_Task.S_START_LOC,
                                                 loc_to = TN_Task.S_END_LOC,
-                                                qty = 1,
+                                                qty = cntrItemRels[0].F_QTY,
                                                 lot = 1,
                                                 scantime = TN_Task.T_CREATE.ToString("yyyy-MM-dd HH:mm:ss"),
-                                                pic = model.ForkliftNo
+                                                pic = model.ForkliftNo,
+                                                last_modify_time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")
                                             };
-                                            GtDispatch.agvTaskFeedback(wmsToGtLokasiModel);
+                                           
                                         }
                                         break;
                                     case 7:
+                                        LogHelper.Info($"浠诲姟鍙凤細{TN_Task.S_CODE}锛孉GV浠诲姟鍙栨秷", "AGV");
                                         //鍒ゆ柇鏄惁鏀跺埌杩囧己鍒跺彇娑堬紝鏈夊氨涓嶅仛浠讳綍澶勭悊
                                         if (!WCSHelper.CheckActionRecordExist(TN_Task.S_CODE, 17))
                                         {
@@ -100,16 +118,106 @@
                                         break;
                                 }
                             }
-                            else if (model.State == 2001) 
+                            else if (model.State == 1003)
                             {
-                                //鐢宠鏂扮粓鐐�-                                string endLoc = AGVApplyEndLoc(model.No);
+                                LogHelper.Info($"浠诲姟鍙凤細{TN_Task.S_CODE}锛孉GV灏忚溅杩涘叆绛夊緟浣嶏細{TN_Task.S_END_LOC}", "AGV");
+                                // 鍗歌揣鍓嶇瓑寰�+                                // 鏌ヨ褰撳墠缁堢偣鏄瓑寰呭尯锛屽垯鏌ヨ鍏ュ簱agv鎺ラ┏浣�+                                var waitLoc = Settings.getAgvWaitLoc(TN_Task.S_END_LOC);
+                                if (waitLoc != null)
+                                {
+                                    if (TN_Task.S_TYPE.Contains("鍏ュ簱")) 
+                                    {
+                                        var endLoc = AGVApplyEndLoc(model.No);
+                                        if (endLoc != null) 
+                                        {
+                                            LogHelper.Info($"浠诲姟鍙凤細{TN_Task.S_CODE}锛孉GV灏忚溅鍙樻洿缁堢偣锛歿endLoc.S_CODE}", "AGV");
+                                            // 閫氱煡AGV鏇存敼缁堢偣
+                                            ChangeParamModel paramModel = new ChangeParamModel()
+                                            {
+                                                task_no = model.No,
+                                                param_no = 0,
+                                                param = $"{model.No};{TN_Task.S_START_LOC};{TN_Task.S_END_LOC};0;400;0;2"
+                                            };
+                                            LogHelper.Info($"閫氱煡AGV鏇存敼缁堢偣锛屽弬鏁�{paramModel}", "AGV");
+                                            /* NDCApi.ChangeOrderParam(paramModel);*/
+                                        }
+                                    }
+                                }
+                            }
+                            else if (model.State == 1004)
+                            {
+                                LogHelper.Info($"浠诲姟鍙凤細{TN_Task.S_CODE}锛孉GV灏忚溅鍗歌揣鍚庡湪鎺ラ┏浣�{TN_Task.S_END_LOC}绛夊緟", "AGV");
+                                // 鍗歌揣鍚庣瓑寰�+                                // 鏌ヨ缁堢偣璐т綅鏄惁鏄叆搴撴帴椹充綅
+                                var agvJBLoc = Settings.getAgvJBLoc(TN_Task.S_END_LOC);
+                                if (agvJBLoc != null && agvJBLoc.action == 1)
+                                {
+                                    //鏄垯鏌ヨWCS鐨勪换鍔℃墽琛屾儏鍐�+                                    var wcsTask = WCSHelper.GetTaskBySrcNoAndScheduleType(TN_Task.S_OP_CODE, "WCS" , wmsTask.S_TYPE);
+                                    if (wcsTask != null)
+                                    {
+                                        bool existAction = WCSHelper.CheckActionRecordExist(wcsTask.S_CODE, 7);
+                                        if (existAction)
+                                        {
+                                            LogHelper.Info($"涓嬫父浠诲姟锛歿wcsTask.S_CODE}鍙栨秷鍏ュ簱锛宺fid鏍¢獙澶辫触锛岀敓鎴愭柊浠诲姟鍒板紓甯稿尯", "AGV");
+                                            //濡傛灉WCS鍙嶉7鍙栨秷浠诲姟锛屽垯rfid鏍¢獙澶辫触锛岀敓鎴愭柊浠诲姟鍒板紓甯稿尯锛屽苟鍙樻洿agv浠诲姟鍙枫�璧风偣銆佺粓鐐�+                                            var mst = WMSHelper.GetWmsTask(TN_Task.S_OP_CODE);
+                                            var endLoc = WMSHelper.getErrorBufferAreaLoc();
+                                            if (endLoc != null)
+                                            {
+                                                LocationHelper.UnLockLoc(mst.S_END_LOC);
+                                                mst.S_END_LOC = endLoc.S_CODE;
+                                                mst.S_END_AREA = endLoc.S_AREA_CODE;
+
+                                                var newWcsTask = WCSCore.createLastTask(TN_Task.S_END_LOC, mst, 2, "鍑哄簱寮傚父鍖轰换鍔�);
+                                                LogHelper.Info($"浠诲姟鍙凤細{TN_Task.S_CODE}锛孉GV灏忚溅鏀归亾缁堢偣锛歿newWcsTask.S_END_LOC}", "AGV");
+                                                if (newWcsTask != null)
+                                                {
+                                                    WCSHelper.End(TN_Task);
+
+                                                    // 閫氱煡AGV鏇存敼缁堢偣
+                                                    ChangeParamModel paramModel = new ChangeParamModel()
+                                                    {
+                                                        task_no = model.No,
+                                                        param_no = 0,
+                                                        param = $"{model.No};{newWcsTask.S_START_LOC};{newWcsTask.S_END_LOC};0;0;0;1"
+                                                    };
+                                                    LogHelper.Info($"閫氱煡AGV鏇存敼缁堢偣锛屽弬鏁�{paramModel}", "AGV");
+                                                    /*NDCApi.ChangeOrderParam(paramModel);*/
+                                                }
+                                                return;
+                                            }
+                                            else
+                                            {
+                                                LogHelper.Info("寮傚父鍖烘病鏈夌┖璐т綅锛屾棤娉曞叆搴撳紓甯稿尯", "AGV");
+                                            }
+                                        }
+
+                                        existAction = WCSHelper.CheckActionRecordExist(wcsTask.S_CODE, 3);
+                                        if (existAction)
+                                        {
+                                            LogHelper.Info($"浠诲姟鍙凤細{TN_Task.S_CODE}锛孯FID妫�祴閫氳繃锛孉GV浠诲姟姝e父瀹屾垚", "AGV");
+                                            //WCS鍙嶉3宸插彇璐э紝鍒檃gv浠诲姟姝e父缁撴潫 锛岄�鐭GV瀹屾垚浠诲姟
+                                            ChangeParamModel paramModel = new ChangeParamModel()
+                                            {
+                                                task_no = model.No,
+                                                param_no = 0,
+                                                param = $"{model.No};{TN_Task.S_START_LOC};{TN_Task.S_END_LOC};0;0;0;1"
+                                            };
+                                            LogHelper.Info($"閫氱煡AGV瀹屾垚浠诲姟锛屽弬鏁�{paramModel}", "AGV");
+                                            /*NDCApi.ChangeOrderParam(paramModel);*/
+                                        }
+                                    }
+                                }
                             }
                             else
                             {
                                 //瀹夊叏璇锋眰绛�                                 TaskProcess.OperateReq(model.No, model.State, model.ForkliftNo, model.ExtData);
                             }
+
+                            WCSHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData);
                         }
                     }
                 }
@@ -127,62 +235,75 @@
         /// <param name="mst"></param>
         /// <param name="actType">1.鍏ュ簱 2.鍑哄簱</param>
         /// <returns></returns>
-        public static bool createLastTask(string startLocCode , WMSTask mst ,int actType) 
+        public static WCSTask createLastTask(string startLocCode , WMSTask mst ,int actType ,string typeName = null) 
         {
-            LogHelper.Info("鍒涘缓涓嬩竴娈典换鍔�, "WMS");
-            var startLoc = LocationHelper.GetLoc(startLocCode);
-            if (startLoc != null) 
+            LogHelper.Info($"浣滀笟鍙凤細{mst.S_CODE}锛屽垱寤轰笅涓�浠诲姟", "WMS");
+            var existTask = WCSHelper.GetTaskByStart(startLocCode);
+            if (existTask == null) 
             {
-                string cntrCode = "";
-                string scheduleType = "";
-                if (actType == 1) 
+                var startLoc = LocationHelper.GetLoc(startLocCode);
+                if (startLoc != null)
                 {
-                    var locCntrRels = LocationHelper.GetLocCntr(startLocCode);
-                    if (locCntrRels.Count > 0)
+                    string cntrCode = "";
+                    string scheduleType = "";
+                    if (actType == 1)
                     {
-                        foreach (var cntr in locCntrRels)
+                        var locCntrRels = LocationHelper.GetLocCntr(startLocCode);
+                        if (locCntrRels.Count > 0)
                         {
-                            cntrCode = cntrCode + ","+ cntr.S_CNTR_CODE;
+                            foreach (var cntr in locCntrRels)
+                            {
+                                cntrCode = cntrCode + "," + cntr.S_CNTR_CODE;
+                            }
+                            cntrCode = cntrCode.Substring(1, cntrCode.Length - 1);
                         }
-                        cntrCode = cntrCode.Substring(1, cntrCode.Length-1);
+                        scheduleType = "WCS";
                     }
-                    scheduleType = "WCS";
-                }
 
-                if (actType == 2)
-                {
-                    cntrCode = mst.S_CNTR_CODE;
-                    scheduleType = "AGV";
-                }
+                    if (actType == 2)
+                    {
+                        cntrCode = mst.S_CNTR_CODE;
+                        scheduleType = "AGV";
+                    }
+                    string type = "";
+                    if (typeName == null)
+                    {
+                        type = mst.S_TYPE + "-2";
+                    }
+                    else
+                    {
+                        type = typeName;
+                    }
 
-                // 鍒涘缓涓�鍏ュ簱浠诲姟
-                WCSTask wcsTask = new WCSTask()
-                {
-                    S_OP_NAME = mst.S_OP_DEF_NAME,
-                    S_OP_CODE = mst.S_CODE,
-                    S_CODE = WCSHelper.GenerateTaskNo(),
-                    S_CNTR_CODE = cntrCode,
-                    S_TYPE = mst.S_TYPE + "-2",
-                    S_START_LOC = startLoc.S_CODE,
-                    S_START_AREA = startLoc.S_AREA_CODE,
-                    S_END_LOC = mst.S_END_LOC,
-                    S_END_AREA = mst.S_END_AREA,
-                    S_SCHEDULE_TYPE = scheduleType,
-                    N_PRIORITY = mst.N_PRIORITY,
-                    T_START_TIME = DateTime.Now,
-                };
+                    // 鍒涘缓涓�鍏ュ簱浠诲姟
+                    WCSTask wcsTask = new WCSTask()
+                    {
+                        S_OP_NAME = mst.S_OP_DEF_NAME,
+                        S_OP_CODE = mst.S_CODE,
+                        S_CODE = WCSHelper.GenerateTaskNo(),
+                        S_CNTR_CODE = cntrCode,
+                        S_TYPE = type,
+                        S_START_LOC = startLoc.S_CODE,
+                        S_START_AREA = startLoc.S_AREA_CODE,
+                        S_END_LOC = mst.S_END_LOC,
+                        S_END_AREA = mst.S_END_AREA,
+                        S_SCHEDULE_TYPE = scheduleType,
+                        N_PRIORITY = mst.N_PRIORITY,
+                        T_START_TIME = DateTime.Now,
+                    };
 
-                if (WCSHelper.CreateTask(wcsTask))
-                {
-                    // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�-                    LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
-                    LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
+                    if (WCSHelper.CreateTask(wcsTask))
+                    {
+                        // 璧风偣銆佹帴椹崇偣銆佺粓鐐瑰姞閿�+                        LocationHelper.LockLoc(wcsTask.S_START_LOC, 2);
+                        LocationHelper.LockLoc(wcsTask.S_END_LOC, 1);
 
-                    WMSHelper.UpdateTaskEnd(mst);
-                    return true;
+                        WMSHelper.UpdateTaskEnd(mst);
+                        return wcsTask;
+                    }
                 }
             }
-            return false;
+            return null;
         }
 
         /// <summary>
@@ -205,108 +326,151 @@
             }
         }
 
-
+        private static readonly object emptyTrayInLock = new object(); // 闈欐�閿佸璞� 
         /// <summary>
         /// agv鐢宠缁堢偣
         /// </summary>
         /// <param name="taskNo"></param>
-        public static string AGVApplyEndLoc(string taskNo) 
+        public static Location AGVApplyEndLoc(string taskNo) 
         {
-            LogHelper.Info("銆恆gv鐢宠缁堢偣銆�, "AGV");
-            string endLocCode = null;
+            LogHelper.Info($"浠诲姟鍙凤細{taskNo},AGV绛夊緟鍖虹敵璇风粓鐐�, "AGV");
             var cst = WCSHelper.GetTask(taskNo);
-            if (cst != null && cst.N_B_STATE < 3) 
+            if (cst != null && cst.N_B_STATE < 3)
             {
                 var mst = WMSHelper.GetWmsTask(cst.S_OP_CODE);
-                if (mst != null && mst.N_B_STATE < 2 && mst.S_END_LOC == "铏氭嫙璐т綅") 
+                if (mst != null && mst.N_B_STATE < 2 && mst.S_END_LOC == "铏氭嫙璐т綅")
                 {
                     var container = ContainerHelper.GetCntr(cst.S_CNTR_CODE);
-                    if (container != null) 
+                    if (container != null)
                     {
-                        var endLoc = WMSHelper.GetInstockEndLoc(container.N_TYPE);
-                        if (endLoc != null)
+                        string itemCode = null;
+                        var cntrItemRels = ContainerHelper.GetCntrItemRel(cst.S_CNTR_CODE);
+                        if (cntrItemRels.Count > 0)
                         {
-                            Location agvLoc = null;
-                            var locCodes = Settings.getAgvJBLocList(1, endLoc.N_ROADWAY, 1);
-                            if (locCodes.Count > 0) 
+                            // 婊℃枡鎵樼洏鍏ュ簱
+                            itemCode = cntrItemRels[0].S_ITEM_CODE;
+                            int itemType = cntrItemRels[0].N_PRODUCT_TYPE_CODE;
+                            var endLoc = WMSHelper.GetInstockEndLoc(container.N_TYPE, null, 1, itemCode);
+                            if (endLoc != null)
                             {
-                                agvLoc = LocationHelper.GetLoc(locCodes[0]);
-                            }
-
-                            if (agvLoc != null && agvLoc.C_ENABLE == "Y") 
-                            {
-                                var wcsTask = WCSHelper.GetTaskByStartAndEnd(agvLoc.S_CODE);
-                                if (wcsTask == null && agvLoc.N_LOCK_STATE == 0)
+                                Location agvLoc = null;
+                                var locCodes = Settings.getAgvJBLocList( endLoc.N_ROADWAY, 1);
+                                if (locCodes.Count > 0)
                                 {
-                                    // 鑳庡湀鍏ュ簱锛屼笅鍙戞瘝鎷栧嚭搴撲换鍔�\ 甯樺竷銆佸唴琛叆搴擄紝涓嬪彂鎵樼洏鍥炲簱浠诲姟
-                                    if (mst.S_TYPE.Contains("鍏ュ簱"))
+                                    foreach (var locCode in locCodes)
                                     {
-                                        if (agvLoc.N_CURRENT_NUM == 1)
+                                        agvLoc = LocationHelper.GetLoc(locCode);
+                                        if (agvLoc != null && agvLoc.C_ENABLE == "Y")
                                         {
-                                            var locCntrRels = LocationHelper.GetLocCntr(agvLoc.S_CODE);
-                                            if (locCntrRels.Count > 0)
-                                            {
-                                                var container1 = ContainerHelper.GetCntr(locCntrRels[0].S_CNTR_CODE);
-                                                if (container1.N_TYPE == 0)
-                                                {
-                                                    if (container.N_TYPE == 4 || container.N_TYPE == 5)
-                                                    {
-                                                        ApiHelper.baseTrayInStockAgv(agvLoc.S_CODE, mst.S_CODE);
-                                                    }
-                                                }
-                                                else 
-                                                {
-                                                    LogHelper.Info($"鎺ラ┏浣�{agvLoc.S_CODE},瀛樺湪闈炴瘝鎷栧鍣�, "AGV");
-                                                }
-                                            }
-                                            else 
-                                            {
-                                                LogHelper.Info($"鎺ラ┏浣�{agvLoc.S_CODE}鐨勫綋鍓嶆暟閲忎笌瀹瑰櫒鏁伴噺涓嶅尮閰�, "AGV");
-                                            }
-                                        }
-                                        else if (agvLoc.N_CURRENT_NUM == 0)
-                                        {
-                                            if (container.N_TYPE == 6)
-                                            {
-                                                ApiHelper.baseTrayOutStockAgv(agvLoc.S_CODE, mst.S_CODE);
-                                            }
-                                        }
-                                        else 
-                                        {
-                                            return endLocCode;
+                                            cst.S_END_LOC = agvLoc.S_CODE;
+                                            cst.S_END_AREA = agvLoc.S_AREA_CODE;
+                                            WCSHelper.UpdateTaskEnd(cst);
+
+                                            mst.S_END_LOC = endLoc.S_CODE;
+                                            mst.S_END_AREA = endLoc.S_AREA_CODE;
+                                            WMSHelper.UpdateTaskEnd(mst);
+                                            LocationHelper.LockLoc(endLoc.S_CODE, 1);
+
+                                            LogHelper.Info($"浠诲姟鍙凤細{taskNo},AGV鐢宠鐨勭粓鐐癸細{agvLoc.S_CODE}", "AGV");
+                                            return agvLoc;
                                         }
                                     }
-                                    cst.S_END_LOC = agvLoc.S_CODE;
-                                    cst.S_END_AREA = agvLoc.S_AREA_CODE;
-                                    WCSHelper.UpdateTaskEnd(cst);
-
-                                    mst.S_END_LOC = endLoc.S_CODE;
-                                    mst.S_END_AREA = endLoc.S_AREA_CODE;
-                                    WMSHelper.UpdateTaskEnd(mst);
-
-                                    LocationHelper.LockLoc(agvLoc.S_CODE, 1);
-                                    LocationHelper.LockLoc(endLoc.S_CODE, 1);
-                                    endLocCode = agvLoc.S_CODE;
+                                    LogHelper.Info($"浠诲姟鍙凤細{taskNo},鍏ュ簱鎺ラ┏浣嶈揣浣嶉兘宸茬鐢�, "AGV");
                                 }
-                                else 
+                                else
                                 {
-                                    LogHelper.Info("鎺ラ┏浣嶅綋鍓嶆湁浠诲姟鏈畬鎴愶紝璇风◢绛�, "AGV");
+                                    LogHelper.Info($"浠诲姟鍙凤細{taskNo},娌℃湁閰嶇疆绔嬪簱鎺ラ┏浣�, "AGV");
                                 }
                             }
                             else
                             {
-                                LogHelper.Info("娌℃湁鍙敤鐨勫叆搴撴帴椹充綅", "AGV");
+                                LogHelper.Info($"浠诲姟鍙凤細{taskNo},绔嬪簱娌℃湁婊¤冻鏉′欢鐨勭┖璐т綅", "AGV");
                             }
                         }
                         else 
                         {
-                            LogHelper.Info("娌℃湁绌轰綑鐨勮揣浣�, "AGV");
+                            // 绌烘墭鐩樺洖搴�+                            lock (emptyTrayInLock) 
+                            {
+                                var emptyTrayBuffers = WMSHelper.getEmptyTrayBufferList();
+                                if (emptyTrayBuffers.Count > 0)
+                                {
+                                    var emptyTray = emptyTrayBuffers.Where(a => a.TRAY_TYPE == container.N_TYPE).OrderBy(a => a.T_CREATE).FirstOrDefault();
+                                    if (emptyTray != null)
+                                    {
+                                        var endLoc = LocationHelper.GetLoc(emptyTray.END_LOC);
+                                        cst.S_END_LOC = endLoc.S_CODE;
+                                        cst.S_END_AREA = endLoc.S_AREA_CODE;
+                                        WCSHelper.UpdateTaskEnd(cst);
+
+                                        mst.S_END_LOC = endLoc.S_CODE;
+                                        mst.S_END_AREA = endLoc.S_AREA_CODE;
+                                        WMSHelper.UpdateTaskEnd(mst);
+                                        LocationHelper.LockLoc(endLoc.S_CODE, 1);
+
+                                        emptyTray.IS_CREATED = "Y";
+                                        WMSHelper.updateEmptyTrayBuffer(emptyTray);
+                                    }
+                                }
+                                else 
+                                {
+                                    var endLoc = WMSHelper.GetInstockEndLoc(container.N_TYPE, null, 1);
+                                    if (endLoc != null)
+                                    {
+                                        Location agvLoc = null;
+                                        var locCodes = Settings.getAgvJBLocList(endLoc.N_ROADWAY, 1);
+                                        if (locCodes.Count > 0)
+                                        {
+                                            foreach (var locCode in locCodes)
+                                            {
+                                                agvLoc = LocationHelper.GetLoc(locCode);
+                                                if (agvLoc != null && agvLoc.C_ENABLE == "Y")
+                                                {
+                                                    cst.S_END_LOC = agvLoc.S_CODE;
+                                                    cst.S_END_AREA = agvLoc.S_AREA_CODE;
+                                                    WCSHelper.UpdateTaskEnd(cst);
+
+                                                    mst.S_END_LOC = endLoc.S_CODE;
+                                                    mst.S_END_AREA = endLoc.S_AREA_CODE;
+                                                    WMSHelper.UpdateTaskEnd(mst);
+                                                    LocationHelper.LockLoc(endLoc.S_CODE, 1);
+                                                    
+                                                    LogHelper.Info($"浠诲姟鍙凤細{taskNo},AGV鐢宠鐨勭粓鐐癸細{agvLoc.S_CODE}", "AGV");
+                                                    return agvLoc;
+                                                }
+                                            }
+
+                                            LogHelper.Info($"浠诲姟鍙凤細{taskNo},鍏ュ簱鎺ラ┏浣嶈揣浣嶉兘宸茬鐢�, "AGV");
+                                        }
+                                        else
+                                        {
+                                            LogHelper.Info($"浠诲姟鍙凤細{taskNo},娌℃湁閰嶇疆绔嬪簱鎺ラ┏浣�, "AGV");
+                                        }
+                                    }
+                                    else
+                                    {
+                                        LogHelper.Info($"浠诲姟鍙凤細{taskNo},绔嬪簱娌℃湁婊¤冻鏉′欢鐨勭┖璐т綅", "AGV");
+                                    }
+                                }
+                            }
                         }
                     }
+                    else 
+                    {
+                        LogHelper.Info($"浠诲姟鍙凤細{taskNo},AGV浠诲姟鐨勫鍣細{cst.S_CNTR_CODE}涓嶅瓨鍦�, "AGV");
+                    }
+                }
+                else 
+                {
+                    LogHelper.Info($"浠诲姟鍙凤細{taskNo},AGV浠诲姟宸茬敵璇风粓鐐癸紝璇峰嬁閲嶅鐢宠", "AGV");
                 }
             }
-            return endLocCode;
+            else 
+            {
+                LogHelper.Info($"浠诲姟鍙凤細{taskNo},AGV浠诲姟宸插畬鎴愭垨鍙栨秷", "AGV");
+            }
+            return null;
         }
 
     }

--
Gitblit v1.9.1