From de8cd5585ba690902333cf4ce9aa5dbc7eb9acf6 Mon Sep 17 00:00:00 2001
From: kazelee <1847801760@qq.com>
Date: 星期三, 28 五月 2025 17:29:33 +0800
Subject: [PATCH] 根据业务重构库区,增加记录表,开始ERP下发反馈逻辑开发

---
 core/WCSCore.cs |  218 +++++++++++++++++++++++++++++-------------------------
 1 files changed, 116 insertions(+), 102 deletions(-)

diff --git a/core/WCSCore.cs b/core/WCSCore.cs
index 95eff3f..a9985d1 100644
--- a/core/WCSCore.cs
+++ b/core/WCSCore.cs
@@ -4,8 +4,8 @@
 using System.Text;
 using System.Threading.Tasks;
 
+using HH.WCS.Mobox3.DSZSH.api;
 using HH.WCS.Mobox3.DSZSH.device;
-
 using HH.WCS.Mobox3.DSZSH.models;
 using HH.WCS.Mobox3.DSZSH.process;
 using HH.WCS.Mobox3.DSZSH.util;
@@ -14,7 +14,6 @@
 using Newtonsoft.Json;
 
 using static HH.WCS.Mobox3.DSZSH.api.ApiModel;
-
 
 namespace HH.WCS.Mobox3.DSZSH.core {
     public class WCSCore {
@@ -85,9 +84,12 @@
                     WCSHelper.UpdateStatus(TN_Task, "鍙栬揣瀹屾垚"); // 浠诲姟鐘舵�鏀规垚鍙栬揣瀹屾垚
                     TaskProcess.OperateStatus(TN_Task, 4); // 璧风偣瀹瑰櫒璐т綅瑙g粦,瑙i攣璧风偣
 
-                    if (TN_Task.S_TYPE == TaskName.鎴愬搧鑳跺嚭搴� {
+                    if (TN_Task.S_TYPE == TaskName.C鎴愬搧鑳跺嚭搴� {
                         var nextOutboundTask = Task.Run(() => {
                             UpdateOutboundTaskState(3);
+                        });
+                        var pickUpReturnErpTask = Task.Run(() => {
+                            PickUpReturnErp(TN_Task);
                         });
                     }
 
@@ -102,11 +104,11 @@
                 case 2: // 瀹屾垚
                     WCSHelper.End(TN_Task); // 浠诲姟鐘舵�鏀规垚缁撴潫
 
-                    if (TN_Task.S_TYPE == TaskName.鎶芥_鍑哄簱) {
-                        var checkCompleteTask = Task.Run(() => {
-                            UpdateCheckTaskState(3);
-                        });
-                    }
+                    //if (TN_Task.S_TYPE == TaskName.鎶芥_鍑哄簱) {
+                    //    var checkCompleteTask = Task.Run(() => {
+                    //        UpdateCheckTaskState(3);
+                    //    });
+                    //}
 
                     break;
                 case 7: // 寮傚父
@@ -123,52 +125,108 @@
         }
 
         public static ReturnResult SafetyInteraction(SafetyInteractionInfo model) {
-            var gzResult = new ReturnResult();
             var db = new SqlHelper<object>().GetInstance();
-            ModbusHelper.Relink();
+            var info = "";
 
             try {
+                ModbusHelper.Relink();
 
+                //var loc = db.Queryable<TN_Location>()
+                //    .Where(l => l.S_AGV_SITE == model.station_name && Settings.AreaMap[AreaName.鍖呰鍖篯.Contains(l.S_AREA_CODE))
+                //    .First();
 
-                var prodLineInfo = Settings.ProductionLines[0];
-                var prodLineDevice = new ProductionLineDevice(prodLineInfo.PlcIp, prodLineInfo.PlcPort);
+                if (!Settings.AgvSite_ProdLineCodeMap.TryGetValue(model.station_name, out int prodIndex)) {
+                    info = $"AGV 绔欑偣{model.station_name}涓嶆槸鍚堟硶鐨勪骇绾挎帴椹充綅绔欑偣";
+                    LogHelper.Info(info);
+                    return NewReturnResult(1, info);
+                }
+
+                var prodLineInfo = Settings.ProductionLines[prodIndex];
+
+                var prodLineDevice = new ProductionLineDevice(prodLineInfo);
                 if (!prodLineDevice.LoadDeviceStateOk()) {
-                    LogHelper.Info("鍔犺浇璁惧淇℃伅澶辫触");
+                    info = "涓庝骇绾胯澶囬�璁け璐�;
+                    LogHelper.Info(info);
+                    return NewReturnResult(2, info);
                 }
 
-                var tn_task = db.Queryable<TN_Task>().First(a => a.S_CODE == model.task_no);
-                if (tn_task == null) {
-                    LogHelper.Info($"浠诲姟鍙�'{model.task_no}' 涓嶅瓨鍦�);
+                //var tn_task = db.Queryable<TN_Task>().First(a => a.S_CODE == model.task_no);
+                //if (tn_task == null) {
+                //    LogHelper.Info($"浠诲姟鍙�'{model.task_no}' 涓嶅瓨鍦�);
+                //}
+                //if (prodLineDevice.SystemState == 1) {
+                //    if (prodLineDevice.FullOffline == 1 && tn_task.S_TYPE == TaskName.鎵樼洏_婊℃墭涓嬬嚎鍏ュ簱) {
+                //        prodLineDevice.AgvPicking = 1;
+                //    }
+                //    if (prodLineDevice.AllowAgvPlacePallet == 1 && tn_task.S_TYPE == TaskName.鎵樼洏_绌烘墭涓婄嚎) {
+                //        prodLineDevice.AgvPlacingPallet = 1;
+                //    }
+                //}
+
+                if (prodLineDevice.SystemState != 1) {
+                    info = $"褰撳墠浜х嚎鏃犳硶涓嶢GV鑱斿姩锛氱姸鎬亄prodLineDevice.SystemState}";
+                    LogHelper.Info(info);
+                    return NewReturnResult(3, info);
                 }
 
-                // 寰呬慨鏀癸細琛ュ厖涓嶅悓鍒嗘敮AGV鍒ゆ柇
-                if (prodLineDevice.SystemState == 1) {
-                    if (prodLineDevice.FullOffline == 1 && tn_task.S_TYPE == TaskName.鎵樼洏_婊℃墭涓嬬嚎鍏ュ簱) {
-                        prodLineDevice.AgvPicking = 1;
+                if (model.apply_code == "5") { // 璇锋眰鍙栬揣
+                    if (prodLineDevice.FullOffline != 1) {
+                        info = $"褰撳墠杈撻�绾挎弧鏂欎笅绾夸俊鍙蜂笉涓�锛屾棤娉曞彇璐�;
+                        LogHelper.Info(info);
+                        return NewReturnResult(4, info);
                     }
-                    if (prodLineDevice.AllowAgvPlacePallet == 1 && tn_task.S_TYPE == TaskName.鎵樼洏_绌烘墭涓婄嚎) {
-                        prodLineDevice.AgvPlacingPallet = 1;
+                    
+                    if (!prodLineDevice.SetAgvPicking(1)) {
+                        info = $"鍚戣緭閫佺嚎鍐欏叆鍏佽鍙栬揣淇″彿澶辫触";
+                        LogHelper.Info(info);
+                        return NewReturnResult(5, info);
                     }
+                    
+                    info = $"鍚戣緭閫佺嚎鍐欏叆鍏佽鍙栬揣淇″彿鎴愬姛";
+                    LogHelper.Info(info);
+                    return NewReturnResult(0, info);
+
+                }
+                else if (model.apply_code == "1") { // 璇锋眰鍗歌揣
+                    if (prodLineDevice.AllowAgvPlacePallet != 1) {
+                        info = $"褰撳墠杈撻�绾垮厑璁告斁鎵樼洏淇″彿涓嶄负1锛屾棤娉曟斁璐�;
+                        LogHelper.Info(info);
+                        return NewReturnResult(6, info);
+                    }
+
+                    if (!prodLineDevice.SetAgvPlacingPallet(1)) {
+                        info = $"鍚戣緭閫佺嚎鍐欏叆鍏佽鏀捐揣淇″彿澶辫触";
+                        LogHelper.Info(info);
+                        return NewReturnResult(7, info);
+                    }
+
+                    info = $"鍚戣緭閫佺嚎鍐欏叆鍏佽鏀捐揣淇″彿鎴愬姛";
+                    LogHelper.Info(info);
+                    return NewReturnResult(0, info);
+                }
+                else {
+                    info = $"褰撳墠AGV璇锋眰鐮佷笉涓�5鍙栬揣 鎴�1鍗歌揣";
+                    LogHelper.Info(info);
+                    return NewReturnResult(8, info);
                 }
 
-                LogHelper.Info(JsonConvert.SerializeObject(prodLineDevice, Formatting.Indented));
-                return gzResult;
             }
             catch (Exception ex) {
-                LogHelper.Info($"鍙戠敓浜嗗紓甯革細{ex.Message}");
-                return gzResult;
+                info = $"鍙戠敓浜嗗紓甯革細{ex.Message}";
+                LogHelper.InfoEx(ex);
+                return NewReturnResult(1, info);
             }
         }
 
         public static void UpdateOutboundTaskState(int spotStateCode) {
-
+            var taskName = TaskName.C鎴愬搧鑳跺嚭搴�
             var db = new SqlHelper<object>().GetInstance();
 
             var detail = db.Queryable<TN_Outbound_Detail>()
                 .First(d => d.N_B_STATE == 2);
 
             if (detail == null) {
-                LogHelper.Info("鍑哄簱--AGV鍙栬揣--鏌ヨDetail锛氬綋鍓嶆病鏈�鎵ц涓�鐨凞etail琛紒");
+                LogHelper.Info($"{taskName}--AGV鍙栬揣--鏌ヨ鏄庣粏鍗曪細褰撳墠娌℃湁鎵ц涓殑鏄庣粏鍗�);
                 return;
             }
 
@@ -176,14 +234,14 @@
                 detail.N_B_STATE = spotStateCode;
                 if (db.Updateable<TN_Outbound_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
                     tran.RollbackTran();
-                    LogHelper.Info("鍑哄簱--AGV鍙栬揣锛氫慨鏀笵etail鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�);
+                    LogHelper.Info($"{taskName}--AGV鍙栬揣锛氫慨鏀规槑缁嗗崟鐘舵�涓�浠诲姟鎵ц瀹屾垚--澶辫触锛�);
                     return;
                 }
 
                 var finishedCount = db.Queryable<TN_Outbound_Detail>().Count(d => d.S_OO_NO == detail.S_OO_NO && d.N_B_STATE == 3);
                 var allCount = db.Queryable<TN_Outbound_Detail>().Count(d => d.S_OO_NO == detail.S_OO_NO);
 
-                LogHelper.Info($"鍑哄簱--AGV鍙栬揣--缁熻浠诲姟宸插畬鎴愶細{finishedCount} / {allCount}");
+                LogHelper.Info($"{taskName}--AGV鍙栬揣--缁熻浠诲姟宸插畬鎴愶細{finishedCount}/{allCount}");
 
                 if (finishedCount == allCount) { // 褰撳墠鍑哄簱鍗曚笅鐨勬墍鏈夋槑缁嗗崟锛屼换鍔¢兘宸茬粡瀹屾垚
 
@@ -192,7 +250,7 @@
                         .ExecuteCommand() <= 0) {
 
                         tran.RollbackTran();
-                        LogHelper.Info("鍑哄簱--AGV鍙栬揣--鎵�湁浠诲姟瀹屾垚鏃讹細淇敼Order鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�);
+                        LogHelper.Info($"{taskName}--AGV鍙栬揣--鎵�湁浠诲姟瀹屾垚鏃讹細淇敼鍗曟嵁鐘舵�涓�浠诲姟鎵ц瀹屾垚--澶辫触锛�);
                         return;
                     }
                 }
@@ -201,84 +259,40 @@
             }
         }
 
-        public static void UpdateCheckTaskState(int spotStateCode) {
-            var db = new SqlHelper<object>().GetInstance();
-
-            var detail = db.Queryable<TN_Check_Detail>()
-                .First(d => d.N_B_STATE == 2);
-
-            if (detail == null) {
-                LogHelper.Info("鎶芥--AGV浠诲姟瀹屾垚--鏌ヨDetail锛氬綋鍓嶆病鏈�鎵ц涓�鐨凞etail琛紒");
-                return;
+        public static void PickUpReturnErp(TN_Task task) {
+            var httpH = new HttpHelper();
+            var model = new OtherModel.PickUpReturnErpInfo();
+            model.LocCode = task.S_START_LOC;
+            try {
+                var jsonInfo = JsonConvert.SerializeObject(model);
+                var result = httpH.WebPost(Settings.ErpApiUrl + "PickUpReturn", jsonInfo);
+                // TODO
             }
-
-            using (var tran = db.Ado.UseTran()) {
-                detail.N_B_STATE = spotStateCode;
-                if (db.Updateable<TN_Check_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
-                    tran.RollbackTran();
-                    LogHelper.Info("鎶芥--AGV浠诲姟瀹屾垚锛氫慨鏀笵etail鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�);
-                    return;
-                }
-
-                var finishedCount = db.Queryable<TN_Check_Detail>().Count(d => d.S_NO == detail.S_NO && d.N_B_STATE == 3);
-                var allCount = db.Queryable<TN_Check_Detail>().Count(d => d.S_NO == detail.S_NO);
-
-                LogHelper.Info($"鎶芥--AGV浠诲姟瀹屾垚锛氱粺璁′换鍔″凡瀹屾垚锛歿finishedCount} / {allCount}");
-
-                if (finishedCount == allCount) { // 褰撳墠order涓嬬殑detail锛屼换鍔¢兘宸茬粡瀹屾垚
-
-                    if (db.Updateable<TN_Check_Order>().SetColumns(it => it.N_B_STATE == 3)
-                        .Where(it => it.S_NO == detail.S_NO)
-                        .ExecuteCommand() <= 0) {
-
-                        tran.RollbackTran();
-                        LogHelper.Info("鎶芥--AGV浠诲姟瀹屾垚--鎵�湁浠诲姟瀹屾垚鏃讹細淇敼Order鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�);
-                        return;
-                    }
-                }
-
-                tran.CommitTran();
+            catch (Exception ex) {
+                LogHelper.InfoEx(ex);
             }
         }
 
-        public static void UpdateShiftTaskState(int spotStateCode) {
-            var db = new SqlHelper<object>().GetInstance();
-
-            var detail = db.Queryable<TN_Shift_Detail>()
-                .First(d => d.N_B_STATE == 2);
-
-            if (detail == null) {
-                LogHelper.Info("绉诲簱--AGV浠诲姟瀹屾垚--鏌ヨDetail锛氬綋鍓嶆病鏈�鎵ц涓�鐨凞etail琛紒");
-                return;
+        /// <summary>
+        /// 浠诲姟鍒嗗彂锛屾牴鎹皟搴︾被鍨嬪彂缁欎笉鍚岀殑璋冨害绯荤粺
+        /// </summary>
+        internal static void Dispatch() {
+            //鏌ヨ浠诲姟
+            //鑾峰彇鎵�湁绛夊緟鐨勪换鍔�+            var list = WCSHelper.GetWaitingTaskList();
+            LogHelper.Info("绛夊緟浠诲姟淇℃伅" + JsonConvert.SerializeObject(list), "API");
+            if (list.Count > 0) {
+                list.ForEach(task => {
+                    //浣跨敤鑷畾涔変换鍔℃帹閫�+                    TaskProcess.SendTask(task);//璋冨害NDC鎴栨澀濂ユ垨鍥借嚜璁惧
+                    //TaskProcess.SendGZTask(task);///璋冨害鍥借嚜璁惧
+                });
+            }
+            else {
+                LogHelper.Info("鏆傛棤浠诲姟");
             }
 
-            detail.N_B_STATE = spotStateCode;
 
-            var finishedCount = db.Queryable<TN_Shift_Detail>().Count(d => d.S_NO == detail.S_NO && d.N_B_STATE == 3);
-            var allCount = db.Queryable<TN_Shift_Detail>().Count(d => d.S_NO == detail.S_NO);
-
-            LogHelper.Info($"绉诲簱--AGV浠诲姟瀹屾垚锛氱粺璁′换鍔″凡瀹屾垚锛歿finishedCount} / {allCount}");
-
-            using (var tran = db.Ado.UseTran()) {
-                if (db.Updateable<TN_Shift_Detail>(detail).UpdateColumns(it => it.N_B_STATE).ExecuteCommand() <= 0) {
-                    tran.RollbackTran();
-                    LogHelper.Info("绉诲簱--AGV浠诲姟瀹屾垚锛氫慨鏀笵etail鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�);
-                    return;
-                }
-
-                if (finishedCount == allCount) { // 褰撳墠order涓嬬殑detail锛屼换鍔¢兘宸茬粡瀹屾垚
-                    if (db.Updateable<TN_Shift_Order>().SetColumns(it => it.N_B_STATE == 3)
-                        .Where(it => it.S_NO == detail.S_NO)
-                        .ExecuteCommand() <= 0) {
-
-                        tran.RollbackTran();
-                        LogHelper.Info("绉诲簱--AGV浠诲姟瀹屾垚--鎵�湁浠诲姟瀹屾垚鏃讹細淇敼Order鐘舵� N_B_STATE 涓�3浠诲姟鎵ц瀹屾垚 澶辫触锛�);
-                        return;
-                    }
-                }
-
-                tran.CommitTran();
-            }
         }
     }
 }

--
Gitblit v1.9.1