From 01cc5773457f68274ef1b2d9d9daca8983761828 Mon Sep 17 00:00:00 2001
From: 杨前锦 <1010338399@qq.com>
Date: 星期四, 05 六月 2025 17:33:03 +0800
Subject: [PATCH] 佳通bug优化

---
 HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/process/TaskProcess.cs |  192 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 192 insertions(+), 0 deletions(-)

diff --git a/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/process/TaskProcess.cs b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/process/TaskProcess.cs
new file mode 100644
index 0000000..b63289e
--- /dev/null
+++ b/HH.WCS.Mobox3/HH.WCS.Mobox3.FJJT/process/TaskProcess.cs
@@ -0,0 +1,192 @@
+锘縰sing HH.WCS.Mobox3.FJJT.api;
+using HH.WCS.Mobox3.FJJT.core;
+using HH.WCS.Mobox3.FJJT.dispatch;
+using HH.WCS.Mobox3.FJJT.util;
+using HH.WCS.Mobox3.FJJT.wms;
+using Newtonsoft.Json;
+using SqlSugar;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Security.Cryptography;
+
+namespace HH.WCS.Mobox3.FJJT.process {
+    internal class TaskProcess {
+        #region 浠诲姟鐩稿叧
+        //--------------------------------------------------浠诲姟鐩稿叧--------------------------------------------------
+        /// <summary>
+        /// 鍙栬揣鍗歌揣瀹屾垚锛岀紦瀛樹綅鐘舵�鏇存柊
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <param name="load"></param>
+        internal static void CacheBitUpdate(WCSTask mst, bool load) {
+            if (load) {
+                Console.WriteLine($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_START_LOC}鍙栬揣瀹屾垚锛岃捣鐐硅В缁戝鍣▄mst.S_CNTR_CODE}");
+                LogHelper.Info($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_START_LOC}鍙栬揣瀹屾垚锛岃捣鐐硅В缁戝鍣▄mst.S_CNTR_CODE}");
+                LocationHelper.UnBindingLoc(mst.S_START_LOC, mst.S_CNTR_CODE.Split(',').ToList());
+            }
+            else {
+                Console.WriteLine($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_END_LOC}鍗歌揣瀹屾垚锛岀粓鐐圭粦瀹氬鍣▄mst.S_CNTR_CODE}");
+                LogHelper.Info($"浠诲姟{mst.S_CODE} 璐т綅{mst.S_END_LOC}鍗歌揣瀹屾垚锛岃捣鐐硅В缁戝鍣▄mst.S_CNTR_CODE}");
+                // 缁堢偣涓虹洿杩炵紦瀛樹綅锛屼笉缁戝畾
+                var loc = WMSHelper.GetTransfeRelevance(mst.S_END_LOC); 
+                if (loc != null && loc.N_PROPERTY == 1)
+                {
+                    LocationHelper.UnLockLoc(mst.S_END_LOC);
+                    return;
+                }
+                LocationHelper.BindingLoc(mst.S_END_LOC, mst.S_CNTR_CODE.Split(',').ToList());
+            }
+        }
+
+        /// <summary>
+        /// 浠诲姟鍙栨秷锛岀紦瀛樹綅鐘舵�鏇存柊
+        /// </summary>
+        /// <param name="mst"></param>
+        internal static void CacheBitCancelUpdate(WCSTask mst) {
+            //浠诲姟鍙栨秷锛屽彇璐у畬鎴愬墠鐨勶紝璧风偣鐨刲oadingCount鍜岀粓鐐箄nLoadingCount閮芥竻闄わ紝鍙栬揣瀹屾垚鐨勫彧澶勭悊缁堢偣
+            if (WCSHelper.CheckActionRecordExist(mst.S_CODE, 4)) {
+                //鏍规嵁瀹㈡埛鐜板満瑕佹眰锛屽鏋滃彇璐у畬鎴愪换鍔″け璐ヤ汉宸ユ媺鍒扮粓鐐癸紝鎴戜滑灏卞綋鍗歌揣瀹屾垚澶勭悊锛涘鏋滄槸浜哄伐鎷夎蛋鍒板叾瀹冨尯鍩燂紝鎴戜滑灏辫В閿佺粓鐐癸紝鍒犻櫎鎵樼洏銆�+                //缁堢偣缁戝畾
+                CacheBitUpdate(mst, false);
+                LocationHelper.UnLockLoc(mst.S_END_LOC);
+            }
+            else {
+                //璧风偣缁堢偣瑙i攣
+                LocationHelper.UnLockLoc(mst.S_START_LOC);
+                LocationHelper.UnLockLoc(mst.S_END_LOC);
+            }
+
+        }
+
+        /// <summary>
+        /// 瀹夊叏璇锋眰
+        /// </summary>
+        /// <param name="no"></param>
+        /// <param name="state"></param>
+        /// <param name="forkliftNo"></param>
+        /// <param name="extData"></param>
+        internal static void OperateReq(string no, int state, string forkliftNo, string extData) {
+            LogHelper.Info($"寮�瀹夊叏璇锋眰锛屼换鍔″彿:{no},璇锋眰鐮�{state}", "HosttoagvTask");
+            var cst = WCSHelper.GetTask(no);
+            var taskAction = WCSHelper.getActionRecord(no, state);
+            if (taskAction != null)
+            {
+                LogHelper.Info($"鍐嶆瀹夊叏璇锋眰锛屾煡璇㈣澶囨槸鍚﹀弽棣�, "HosttoagvTask");
+                if (taskAction.N_S_STATUS == 1) 
+                {
+                    LogHelper.Info($"鍐嶆瀹夊叏璇锋眰锛岃澶囧凡鍙嶉", "HosttoagvTask");
+                    NDCApi.ChangeOrderParam(no, 8, "1");
+                }
+            }
+            else 
+            {
+                LogHelper.Info($"棣栨杩涜瀹夊叏璇锋眰锛屼换鍔″彿:{no},璇锋眰鐮�{state}", "HosttoagvTask");
+                bool result = false;
+                if (state == 1101)
+                {
+                    result = WCSDispatch.safetyInteraction(cst.S_CODE ,cst.S_START_LOC, "1");  //璇锋眰鍙栬揣锛�+                }
+                if (state == 1102)
+                {
+                    result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "2");  //璇锋眰杩旇揣
+                }
+                if (state == 1103)
+                {
+                    result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "3");  //鍙栬揣瀹屾垚鍏佽绂诲紑
+                }
+                if (state == 1104)
+                {
+                    result = WCSDispatch.safetyInteraction(cst.S_CODE, cst.S_START_LOC, "4");  //鏀捐揣瀹屾垚鍏佽绂诲紑
+                }
+
+                // 瀹夊叏璇锋眰鍙戦�鎴愬姛锛屾坊鍔犱换鍔″姩浣滆褰�+                if (result) 
+                {
+                    WCSHelper.AddActionRecord(no, state, forkliftNo, extData);
+                    LogHelper.Info($"棣栨杩涜瀹夊叏璇锋眰鎴愬姛", "HosttoagvTask");
+                }
+            }
+        }
+
+        /// <summary>
+        /// 浠诲姟鎷︽埅
+        /// </summary>
+        /// <param name="task"></param>
+        /// <returns></returns>
+        internal static bool Intercept(WCSTask mst) {
+            var result = false;
+            //鍑哄簱浠诲姟鏄壒閲忕敓鎴愮殑锛屽垵濮嬬粓鐐规垜浠厛缁欎竴涓櫄鎷熺偣锛屼笉鎺ㄩ�銆傛湁鍗曠嫭鐨勭幇鍦哄幓鍒ゆ柇鍑哄簱缂撳瓨鍖哄厜鐢碉紝绌轰簡鍐嶇粰鍑哄簱浠诲姟鍒嗛厤缁堢偣
+            if (mst.S_END_LOC.Trim() == "鍑哄簱铏氭嫙鐐�) {
+                result = true;
+            }
+            return result;
+        }
+
+        /// <summary>
+        /// 浠诲姟鐘舵�鏇存柊澶勭悊
+        /// </summary>
+        /// <param name="mst"></param>
+        /// <param name="state"></param>
+        internal static void OperateStatus(WCSTask mst, int state) {
+            if (state == 4) {
+                CacheBitUpdate(mst, true);
+            }
+            if (state == 6)//鍗歌揣瀹屾垚
+            {
+                CacheBitUpdate(mst, false);
+            }
+            if (state == 7) {
+                CacheBitCancelUpdate(mst);
+            }
+        }
+
+        private static object locLocker = new object();
+
+       
+        /// <summary>
+        /// 鎺ㄩ�浠诲姟
+        /// </summary>
+        /// <param name="mst"></param>
+        internal static bool SendTask(WCSTask mst) {
+            var result = false;
+            var start = "0"; var end = "0";
+            if (mst.N_B_STATE == 0) {
+                if (mst.S_SCHEDULE_TYPE == "NDC") 
+                {
+                    start = LocationHelper.GetAgvSite(mst.S_START_LOC);
+                    end = LocationHelper.GetAgvSite(mst.S_END_LOC);
+
+                    var dic = new List<param>();
+                    dic.Add( new param() { name = "No" , value = ""});
+                    dic.Add( new param() { name = "From", value = ""});
+                    dic.Add( new param() { name = "To", value = ""});
+                    dic.Add( new param() { name = "3" , value = "4"});
+                    dic.Add( new param() { name = "4" , value = "512"});
+                    dic.Add( new param() { name = "5" , value = "0"});
+                    var res = NDCApi.AddOrderNew(1,mst.N_PRIORITY,mst.S_CODE,dic);
+                    if (res != null && res.err_code == 0 ) {
+                        //鎺ㄩ�鎴愬姛锛屼慨鏀逛换鍔′紭鍏堢骇
+                        mst.N_B_STATE = 1;
+                        WCSHelper.UpdateStatus(mst);
+                        result = true;
+                    }
+                }
+                else if (mst.S_SCHEDULE_TYPE == "WCS") {
+
+                    mst.N_B_STATE = 1;
+                    WCSHelper.UpdateStatus(mst);
+                }
+                else if (mst.S_SCHEDULE_TYPE == "AGV")
+                {
+                    mst.N_B_STATE = 1;
+                    WCSHelper.UpdateStatus(mst);
+                }
+
+            }
+            return result;
+        }
+
+        #endregion
+    }
+}

--
Gitblit v1.9.1