From e0d89637030791ce1e7dd46ca5fdec9979977960 Mon Sep 17 00:00:00 2001
From: 杨前锦 <1010338399@qq.com>
Date: 星期三, 11 六月 2025 17:28:41 +0800
Subject: [PATCH] 印尼佳通-硫化流程出入库流程开发

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.YNJT_BZP/core/WCSCore.cs |  152 ++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 115 insertions(+), 37 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 d184c8a..1758ea2 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,6 +17,7 @@
 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 {
@@ -36,7 +37,6 @@
                         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)
                             {
                                 //鏈変换鍔″彿璇锋眰
@@ -123,17 +123,23 @@
                                 var waitLoc = Settings.getAgvWaitLoc(TN_Task.S_END_LOC);
                                 if (waitLoc != null)
                                 {
-                                    var endLoc = AGVApplyEndLoc(model.No);
-                                    LogHelper.Info($"浠诲姟鍙凤細{TN_Task.S_CODE}锛孉GV灏忚溅鍙樻洿缁堢偣锛歿endLoc.S_CODE}", "AGV");
-                                    // 閫氱煡AGV鏇存敼缁堢偣
-                                    ChangeParamModel paramModel = new ChangeParamModel()
+                                    if (TN_Task.S_TYPE.Contains("鍏ュ簱")) 
                                     {
-                                        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);*/
+                                        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)
@@ -142,10 +148,10 @@
                                 // 鍗歌揣鍚庣瓑寰�                                 // 鏌ヨ缁堢偣璐т綅鏄惁鏄叆搴撴帴椹充綅
                                 var agvJBLoc = Settings.getAgvJBLoc(TN_Task.S_END_LOC);
-                                if (agvJBLoc != null && agvJBLoc.type == 1 && agvJBLoc.action == 1)
+                                if (agvJBLoc != null && agvJBLoc.action == 1)
                                 {
                                     //鏄垯鏌ヨWCS鐨勪换鍔℃墽琛屾儏鍐�-                                    var wcsTask = WCSHelper.GetTaskBySrcNoAndScheduleType(TN_Task.S_OP_CODE, "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);
@@ -161,7 +167,7 @@
                                                 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, "鍏ュ簱寮傚父鍖轰换鍔�);
+                                                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)
                                                 {
@@ -207,6 +213,8 @@
                                 //瀹夊叏璇锋眰绛�                                 TaskProcess.OperateReq(model.No, model.State, model.ForkliftNo, model.ExtData);
                             }
+
+                            WCSHelper.AddActionRecord(model.No, model.State, model.ForkliftNo, model.ExtData);
                         }
                     }
                 }
@@ -315,7 +323,7 @@
             }
         }
 
-
+        private static readonly object emptyTrayInLock = new object(); // 闈欐�閿佸璞� 
         /// <summary>
         /// agv鐢宠缁堢偣
@@ -333,23 +341,63 @@
                     var container = ContainerHelper.GetCntr(cst.S_CNTR_CODE);
                     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;
+                            var endLoc = WMSHelper.GetInstockEndLoc(container.N_TYPE, null, 1, itemCode);
+                            if (endLoc != null)
                             {
-                                foreach (var locCode in locCodes)
+                                Location agvLoc = null;
+                                var locCodes = Settings.getAgvJBLocList( endLoc.N_ROADWAY, 1);
+                                if (locCodes.Count > 0)
                                 {
-                                    agvLoc = LocationHelper.GetLoc(locCode);
-                                    if (agvLoc != null && agvLoc.C_ENABLE == "Y")
+                                    foreach (var locCode in locCodes)
                                     {
-                                        LogHelper.Info($"妫�祴AGV鎺ラ┏浣�{locCode}璁惧鏄惁鍙敤", "AGV");
+                                        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);
 
-                                        cst.S_END_LOC = agvLoc.S_CODE;
-                                        cst.S_END_AREA = agvLoc.S_AREA_CODE;
+                                            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 
+                        {
+                            // 绌烘墭鐩樺洖搴�+                            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;
@@ -357,21 +405,51 @@
                                         WMSHelper.UpdateTaskEnd(mst);
                                         LocationHelper.LockLoc(endLoc.S_CODE, 1);
 
-                                        LogHelper.Info($"浠诲姟鍙凤細{taskNo},AGV鐢宠鐨勭粓鐐癸細{agvLoc.S_CODE}", "AGV");
-                                        return agvLoc;
+                                        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);
 
-                                LogHelper.Info($"浠诲姟鍙凤細{taskNo},鍏ュ簱鎺ラ┏浣嶈揣浣嶉兘宸茬鐢�, "AGV");
+                                                    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");
-                            }
-                        }
-                        else
-                        {
-                            LogHelper.Info($"浠诲姟鍙凤細{taskNo},绔嬪簱娌℃湁婊¤冻鏉′欢鐨勭┖璐т綅", "AGV");
                         }
                     }
                     else 

--
Gitblit v1.9.1