From c9a1df9c19a64844d05d120ff171f523d77e7823 Mon Sep 17 00:00:00 2001
From: wanshenmean <cathay_xy@163.com>
Date: 星期六, 25 四月 2026 22:15:36 +0800
Subject: [PATCH] Merge branch 'xiaoyang' into dev

---
 Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTargetAddressSelector.cs |  252 ++++++++++----------------------------------------
 1 files changed, 50 insertions(+), 202 deletions(-)

diff --git a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTargetAddressSelector.cs b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTargetAddressSelector.cs
index 062265a..e003d18 100644
--- a/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTargetAddressSelector.cs
+++ b/Code/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/ConveyorLineNewJob/ConveyorLineTargetAddressSelector.cs
@@ -1,246 +1,94 @@
-using Microsoft.Extensions.Logging;
-using WIDESEAWCS_Core.LogHelper;
+using Serilog;
 using WIDESEAWCS_QuartzJob;
 
 namespace WIDESEAWCS_Tasks
 {
     /// <summary>
-    /// 杈撻�佺嚎鐩爣鍦板潃閫夋嫨鍣� - 澶勭悊鎷樻潫鏈�/鎻掓嫈閽夋満鐨勪笂涓嬪眰璇锋眰
+    /// 杈撻�佺嚎鐩爣鍦板潃閫夋嫨鍣�
     /// </summary>
     /// <remarks>
-    /// 鏍稿績鑱岃矗锛�
-    /// 1. 澶勭悊鍏ュ簱鍦烘櫙鐨勭洰鏍囧湴鍧�閫夋嫨
-    /// 2. 澶勭悊鍑哄簱鍦烘櫙鐨勭洰鏍囧湴鍧�閫夋嫨
-    /// 3. 鍒ゆ柇鎷樻潫鏈哄拰鎻掓嫈閽夋満鐨勭墿鏂欒姹傜姸鎬�
-    /// 4. 鍗忚皟杈撻�佺嚎涓庝笂涓嬪眰璁惧涔嬮棿鐨勭墿鏂欐祦杞�
-    ///
-    /// 鎷樻潫鏈哄拰鎻掓嫈閽夋満閮芥湁涓婁笅涓ゅ眰缁撴瀯锛�
-    /// 姣忓眰閮芥湁鐙珛鐨勭墿鏂欒姹傚拰鍑烘枡淇″彿锛岄渶瑕佸垎鍒鐞嗐��
     /// </remarks>
     public class ConveyorLineTargetAddressSelector
     {
         /// <summary>
-        /// 鎷樻潫鏈哄悕绉板父閲�
-        /// </summary>
-        private const string ConstraintMachineName = "鎷樻潫鏈�";
-
-        /// <summary>
-        /// 鎻掓嫈閽夋満鍚嶇О甯搁噺
-        /// </summary>
-        private const string PinMachineName = "鎻掓嫈閽夋満";
-
-        /// <summary>
-        /// 鎷樻潫鏈哄搴旂殑鐐逛綅缂栫爜鍒楄〃
-        /// </summary>
-        /// <remarks>
-        /// 褰撶洰鏍囧湴鍧�鍦ㄨ繖浜涚紪鐮佷腑鏃讹紝琛ㄧず闇�瑕佷笌鎷樻潫鏈轰氦浜掋��
-        /// </remarks>
-        private static readonly List<string> ConstraintMachineCodes = new List<string> { "10180", "20090" };
-
-        /// <summary>
-        /// 鎻掓嫈閽夋満瀵瑰簲鐨勭偣浣嶇紪鐮佸垪琛�
-        /// </summary>
-        /// <remarks>
-        /// 褰撶洰鏍囧湴鍧�鍦ㄨ繖浜涚紪鐮佷腑鏃讹紝琛ㄧず闇�瑕佷笌鎻掓嫈閽夋満浜や簰銆�
-        /// </remarks>
-        private static readonly List<string> PinMachineCodes = new List<string> { "10190", "20100" };
-
-        /// <summary>
         /// 鏃ュ織璁板綍鍣�
         /// </summary>
+        /// <remarks>
+        /// 閫氳繃 Microsoft.Extensions.Logging 鎺ュ彛娉ㄥ叆锛岀敤浜庣粨鏋勫寲鏃ュ織杈撳嚭銆�
+        /// </remarks>
         private readonly ILogger _logger;
 
         /// <summary>
         /// 鏋勯�犲嚱鏁�
         /// </summary>
-        /// <param name="logger">鏃ュ織璁板綍鍣�</param>
+        /// <param name="logger">鏃ュ織璁板綍鍣紝鐢变緷璧栨敞鍏ュ鍣ㄨ嚜鍔ㄦ敞鍏�</param>
         public ConveyorLineTargetAddressSelector(ILogger logger)
         {
-            _logger = logger;
+            _logger = logger; // 淇濆瓨鏃ュ織璁板綍鍣ㄥ疄渚嬶紝渚涘悗缁柟娉曚娇鐢�
         }
 
         /// <summary>
         /// 澶勭悊鍏ュ簱鍦烘櫙鐨勪笅涓�鍦板潃璇锋眰
         /// </summary>
         /// <remarks>
-        /// 褰撳叆搴撲换鍔℃墽琛屽埌鏌愪釜浣嶇疆鏃惰皟鐢ㄦ鏂规硶銆�
-        /// 鍒ゆ柇鐩爣璁惧鏄惁闇�瑕佺墿鏂欐垨鍙互鍑烘枡銆�
+        /// 鍏ュ簱浠诲姟鍒拌揪鏌愪釜浣嶇疆鏃惰皟鐢ㄦ鏂规硶锛屽垽鏂洰鏍囪澶囨槸鍚﹂渶瑕佺墿鏂欍��
+        /// 鍏ュ簱瀵瑰簲涓婂眰宸ヤ綅锛圠ayer.Upper锛夛紝鍥犱负鐗╂枡浠庝笂灞傝繘鍏ヤ粨搴撱��
         /// </remarks>
-        /// <param name="conveyorLine">杈撻�佺嚎璁惧瀵硅薄</param>
-        /// <param name="nextAddress">涓嬩竴鍦板潃/鐩爣璁惧缂栫爜</param>
-        /// <param name="childDeviceCode">褰撳墠瀛愯澶囩紪鐮�</param>
-        public void HandleInboundNextAddress(CommonConveyorLine conveyorLine, string nextAddress, string childDeviceCode)
+        /// <param name="conveyorLine">杈撻�佺嚎璁惧瀵硅薄锛岀敤浜庡啓鍏ョ洰鏍囧湴鍧�鍜� ACK 淇″彿</param>
+        /// <param name="nextAddress">涓嬩竴鍦板潃/鐩爣璁惧缂栫爜锛岀敤浜庤瘑鍒洰鏍囪澶囩被鍨�</param>
+        /// <param name="childDeviceCode">褰撳墠瀛愯澶囩紪鐮侊紝鐢ㄤ簬绮剧‘瀹氫綅鍐欏叆鍝釜瀛愯澶�</param>
+        public bool HandleInboundNextAddress(CommonConveyorLine conveyorLine, string nextAddress, string childDeviceCode)
         {
-            _logger.LogDebug("HandleInboundNextAddress锛氬叆搴撲笅涓�鍦板潃锛屽瓙璁惧: {ChildDeviceCode}锛岀洰鏍囧湴鍧�: {NextAddress}", childDeviceCode, nextAddress);
-            QuartzLogger.Debug($"HandleInboundNextAddress锛氬叆搴撲笅涓�鍦板潃锛屽瓙璁惧: {childDeviceCode}锛岀洰鏍囧湴鍧�: {nextAddress}", conveyorLine.DeviceCode);
-            // 璋冪敤閫氱敤澶勭悊鏂规硶锛宨sUpper = true 琛ㄧず澶勭悊涓婂眰
-            HandleDeviceRequest(conveyorLine, nextAddress, childDeviceCode, isUpper: true);
+            // 璁板綍鍏ュ簱鍦烘櫙鐨勮皟璇曟棩蹇楋紝鍖呭惈瀛愯澶囧拰鐩爣鍦板潃淇℃伅
+            WriteDebug(conveyorLine, "鍏ュ簱涓嬩竴鍦板潃", childDeviceCode, nextAddress);
+
+            var cvState = conveyorLine.GetValue<ConveyorLineDBNameNew, byte>(ConveyorLineDBNameNew.CV_State, nextAddress);
+            bool isAvailable = cvState == 2;
+            if (isAvailable)
+            {
+                return conveyorLine.SetValue(ConveyorLineDBNameNew.Target, Convert.ToInt16(nextAddress), childDeviceCode);
+            }
+            return false;
         }
 
         /// <summary>
         /// 澶勭悊鍑哄簱鍦烘櫙鐨勪笅涓�鍦板潃璇锋眰
         /// </summary>
         /// <remarks>
-        /// 褰撳嚭搴撲换鍔℃墽琛屽埌鏌愪釜浣嶇疆鏃惰皟鐢ㄦ鏂规硶銆�
-        /// 鍒ゆ柇鐩爣璁惧鏄惁闇�瑕佺墿鏂欐垨鍙互鍑烘枡銆�
+        /// 鍑哄簱浠诲姟鍒拌揪鏌愪釜浣嶇疆鏃惰皟鐢ㄦ鏂规硶锛屽垽鏂洰鏍囪澶囨槸鍚﹂渶瑕佸嚭鏂欍��
+        /// 鍑哄簱瀵瑰簲涓嬪眰宸ヤ綅锛圠ayer.Lower锛夛紝鍥犱负鐗╂枡浠庝笅灞傜寮�浠撳簱銆�
         /// </remarks>
-        /// <param name="conveyorLine">杈撻�佺嚎璁惧瀵硅薄</param>
-        /// <param name="nextAddress">涓嬩竴鍦板潃/鐩爣璁惧缂栫爜</param>
-        /// <param name="childDeviceCode">褰撳墠瀛愯澶囩紪鐮�</param>
-        public void HandleOutboundNextAddress(CommonConveyorLine conveyorLine, string nextAddress, string childDeviceCode)
+        /// <param name="conveyorLine">杈撻�佺嚎璁惧瀵硅薄锛岀敤浜庡啓鍏ョ洰鏍囧湴鍧�鍜� ACK 淇″彿</param>
+        /// <param name="nextAddress">涓嬩竴鍦板潃/鐩爣璁惧缂栫爜锛岀敤浜庤瘑鍒洰鏍囪澶囩被鍨�</param>
+        /// <param name="childDeviceCode">褰撳墠瀛愯澶囩紪鐮侊紝鐢ㄤ簬绮剧‘瀹氫綅鍐欏叆鍝釜瀛愯澶�</param>
+        public bool HandleOutboundNextAddress(CommonConveyorLine conveyorLine, string nextAddress, string childDeviceCode)
         {
-            _logger.LogDebug("HandleOutboundNextAddress锛氬嚭搴撲笅涓�鍦板潃锛屽瓙璁惧: {ChildDeviceCode}锛岀洰鏍囧湴鍧�: {NextAddress}", childDeviceCode, nextAddress);
-            QuartzLogger.Debug($"HandleOutboundNextAddress锛氬嚭搴撲笅涓�鍦板潃锛屽瓙璁惧: {childDeviceCode}锛岀洰鏍囧湴鍧�: {nextAddress}", conveyorLine.DeviceCode);
-            // 璋冪敤閫氱敤澶勭悊鏂规硶锛宨sUpper = false 琛ㄧず澶勭悊涓嬪眰
-            HandleDeviceRequest(conveyorLine, nextAddress, childDeviceCode, isUpper: false);
-        }
+            // 璁板綍鍑哄簱鍦烘櫙鐨勮皟璇曟棩蹇楋紝鍖呭惈瀛愯澶囧拰鐩爣鍦板潃淇℃伅
+            WriteDebug(conveyorLine, "鍑哄簱涓嬩竴鍦板潃", childDeviceCode, nextAddress);
 
+            var cvState = conveyorLine.GetValue<ConveyorLineDBNameNew, byte>(ConveyorLineDBNameNew.CV_State, nextAddress);
+            bool isAvailable = cvState == 2;
+            if (isAvailable)
+            {
+                return conveyorLine.SetValue(ConveyorLineDBNameNew.Target, Convert.ToInt16(nextAddress), childDeviceCode);
+            }
+            return false;
+        }
         /// <summary>
-        /// 閫氱敤璁惧璇锋眰澶勭悊鏂规硶
+        /// 鍐欏叆璋冭瘯鏃ュ織锛堝悓鏃惰緭鍑哄埌涓や釜鏃ュ織绯荤粺锛�
         /// </summary>
         /// <remarks>
-        /// 鏍规嵁鐩爣鍦板潃绫诲瀷锛堟嫎鏉熸満/鎻掓嫈閽夋満锛夎皟鐢ㄧ浉搴旂殑澶勭悊閫昏緫銆�
-        /// 澶勭悊涓婁笅灞傝澶囩殑鐗╂枡璇锋眰鍜屽嚭鏂欏崗璋冦��
+        /// 缁熶竴鍏ュ彛鐐规棩蹇楁牸寮忥紝鍚屾椂鍚� Microsoft.Extensions.Logging 鍜� QuartzLogger 鍐欏叆锛�
+        /// 淇濊瘉鏃ュ織鏃㈣兘鍦ㄦ帶鍒跺彴鏌ョ湅涔熻兘鍦ㄦ枃浠朵腑杩芥函銆�
         /// </remarks>
-        /// <param name="conveyorLine">杈撻�佺嚎璁惧瀵硅薄</param>
-        /// <param name="nextAddress">涓嬩竴鍦板潃/鐩爣璁惧缂栫爜</param>
-        /// <param name="childDeviceCode">褰撳墠瀛愯澶囩紪鐮�</param>
-        /// <param name="isUpper">鏄惁澶勭悊涓婂眰锛坱rue=涓婂眰锛宖alse=涓嬪眰锛�</param>
-        private void HandleDeviceRequest(CommonConveyorLine conveyorLine, string nextAddress, string childDeviceCode, bool isUpper)
+        /// <param name="conveyorLine">杈撻�佺嚎璁惧瀵硅薄锛岀敤浜庤幏鍙栬澶囩紪鐮佸啓鍏� QuartzLogger</param>
+        /// <param name="scenario">鍦烘櫙鎻忚堪锛屽"鍏ュ簱涓嬩竴鍦板潃"鎴�"鍑哄簱涓嬩竴鍦板潃"</param>
+        /// <param name="childDeviceCode">瀛愯澶囩紪鐮�</param>
+        /// <param name="nextAddress">鐩爣璁惧缂栫爜</param>
+        private void WriteDebug(CommonConveyorLine conveyorLine, string scenario, string childDeviceCode, string nextAddress)
         {
-            // 鑾峰彇鍏ㄥ眬璁惧鍒楄〃
-            var devices = Storage.Devices;
-
-            // 鍒ゆ柇鐩爣璁惧绫诲瀷
-            if (ConstraintMachineCodes.Contains(nextAddress))
-            {
-                // 鎷樻潫鏈哄鐞嗗垎鏀�
-                // 鏌ユ壘鎷樻潫鏈鸿澶�
-                ConstraintMachine? constraint = devices.OfType<ConstraintMachine>().FirstOrDefault(d => d.DeviceName == ConstraintMachineName);
-                if (constraint == null)
-                {
-                    _logger.LogDebug("HandleDeviceRequest锛氭湭鎵惧埌鎷樻潫鏈鸿澶�");
-                    QuartzLogger.Debug("HandleDeviceRequest锛氭湭鎵惧埌鎷樻潫鏈鸿澶�", conveyorLine.DeviceCode);
-                    // 鏈壘鍒版嫎鏉熸満璁惧锛岀洿鎺ヨ繑鍥�
-                    return;
-                }
-
-                // 澶勭悊鎷樻潫鏈虹殑璇锋眰
-                ProcessDeviceRequest(
-                    conveyorLine,
-                    childDeviceCode,
-                    // 鑾峰彇鐗╂枡璇锋眰鏍囧織锛堜笂灞傛垨涓嬪眰锛�
-                    getMaterialRequest: () => isUpper
-                        ? constraint.GetValue<ConstraintMachineDBName, short>(ConstraintMachineDBName.MaterialRequestUpper) != 0
-                        : constraint.GetValue<ConstraintMachineDBName, short>(ConstraintMachineDBName.MaterialRequestLower) != 0,
-                    // 鑾峰彇鍑烘枡璇锋眰鏍囧織锛堜笂灞傛垨涓嬪眰锛�
-                    getOutputRequest: () => isUpper
-                        ? constraint.GetValue<ConstraintMachineDBName, short>(ConstraintMachineDBName.OutputRequestUpper) != 0
-                        : constraint.GetValue<ConstraintMachineDBName, short>(ConstraintMachineDBName.OutputRequestLower) != 0,
-                    // 璁剧疆杈撳嚭灏辩华鏍囧織锛堜笂灞傛垨涓嬪眰锛�
-                    setOutputReady: outputReq =>
-                    {
-                        if (isUpper)
-                        {
-                            constraint.SetValue(ConstraintMachineDBName.ConstraintTrayOutputReadyUpper, outputReq ? 1 : 0);
-                        }
-                        else
-                        {
-                            constraint.SetValue(ConstraintMachineDBName.ConstraintTrayOutputReadyLower, outputReq ? 1 : 0);
-                        }
-                    },
-                    "鎷樻潫鏈�");
-            }
-            else if (PinMachineCodes.Contains(nextAddress))
-            {
-                // 鎻掓嫈閽夋満澶勭悊鍒嗘敮
-                // 鏌ユ壘鎻掓嫈閽夋満璁惧
-                PinMachine? pinMachine = devices.OfType<PinMachine>().FirstOrDefault(d => d.DeviceName == PinMachineName);
-                if (pinMachine == null)
-                {
-                    _logger.LogDebug("HandleDeviceRequest锛氭湭鎵惧埌鎻掓嫈閽夋満璁惧");
-                    QuartzLogger.Debug("HandleDeviceRequest锛氭湭鎵惧埌鎻掓嫈閽夋満璁惧", conveyorLine.DeviceCode);
-                    return;
-                }
-
-                // 澶勭悊鎻掓嫈閽夋満鐨勮姹�
-                ProcessDeviceRequest(
-                    conveyorLine,
-                    childDeviceCode,
-                    // 鑾峰彇鐗╂枡璇锋眰鏍囧織锛堜笂灞傛垨涓嬪眰锛�
-                    getMaterialRequest: () => isUpper
-                        ? pinMachine.GetValue<PinMachineDBName, short>(PinMachineDBName.MaterialRequestUpper) != 0
-                        : pinMachine.GetValue<PinMachineDBName, short>(PinMachineDBName.MaterialRequestLower) != 0,
-                    // 鑾峰彇鍑烘枡璇锋眰鏍囧織锛堜笂灞傛垨涓嬪眰锛�
-                    getOutputRequest: () => isUpper
-                        ? pinMachine.GetValue<PinMachineDBName, short>(PinMachineDBName.OutputRequestUpper) != 0
-                        : pinMachine.GetValue<PinMachineDBName, short>(PinMachineDBName.OutputRequestLower) != 0,
-                    // 璁剧疆杈撳嚭灏辩华鏍囧織锛堜笂灞傛垨涓嬪眰锛�
-                    setOutputReady: outputReq =>
-                    {
-                        if (isUpper)
-                        {
-                            pinMachine.SetValue(PinMachineDBName.PlugPinTrayOutputReadyUpper, outputReq ? 1 : 0);
-                        }
-                        else
-                        {
-                            pinMachine.SetValue(PinMachineDBName.PlugPinTrayOutputReadyLower, outputReq ? 1 : 0);
-                        }
-                    },
-                    "鎻掓嫈閽夋満");
-            }
-        }
-
-        /// <summary>
-        /// 澶勭悊璁惧璇锋眰鐨勬牳蹇冮�昏緫
-        /// </summary>
-        /// <remarks>
-        /// 鏍规嵁鐗╂枡璇锋眰鍜屽嚭鏂欒姹傜殑鐘舵�侊細
-        /// - 濡傛灉鏈夌墿鏂欒姹傦紝璁剧疆鐩爣鍦板潃骞跺彂閫� ACK
-        /// - 濡傛灉鏈夊嚭鏂欒姹傦紝璁剧疆璁惧鐨勮緭鍑哄氨缁爣蹇�
-        /// </remarks>
-        /// <param name="conveyorLine">杈撻�佺嚎璁惧瀵硅薄</param>
-        /// <param name="childDeviceCode">褰撳墠瀛愯澶囩紪鐮�</param>
-        /// <param name="getMaterialRequest">鑾峰彇鐗╂枡璇锋眰鐘舵�佺殑濮旀墭</param>
-        /// <param name="getOutputRequest">鑾峰彇鍑烘枡璇锋眰鐘舵�佺殑濮旀墭</param>
-        /// <param name="setOutputReady">璁剧疆杈撳嚭灏辩华鏍囧織鐨勫鎵�</param>
-        /// <param name="deviceType">璁惧绫诲瀷鎻忚堪</param>
-        private void ProcessDeviceRequest(
-            CommonConveyorLine conveyorLine,
-            string childDeviceCode,
-            Func<bool> getMaterialRequest,
-            Func<bool> getOutputRequest,
-            Action<bool> setOutputReady,
-            string deviceType)
-        {
-            // 鑾峰彇鐗╂枡璇锋眰鐘舵��
-            bool materialReq = getMaterialRequest();
-
-            // 鑾峰彇鍑烘枡璇锋眰鐘舵��
-            bool outputReq = getOutputRequest();
-
-            _logger.LogDebug("ProcessDeviceRequest锛歿DeviceType}锛屽瓙璁惧: {ChildDeviceCode}锛岀墿鏂欒姹�: {MaterialReq}锛屽嚭鏂欒姹�: {OutputReq}",
-                deviceType, childDeviceCode, materialReq, outputReq);
-            QuartzLogger.Debug($"ProcessDeviceRequest锛歿deviceType}锛屽瓙璁惧: {childDeviceCode}锛岀墿鏂欒姹�: {materialReq}锛屽嚭鏂欒姹�: {outputReq}", conveyorLine.DeviceCode);
-
-            // 濡傛灉璁惧闇�瑕佺墿鏂�
-            if (materialReq)
-            {
-                // 璁剧疆鐩爣鍦板潃涓� 1锛堣〃绀烘湁鏂欒繘鏉ワ級
-                conveyorLine.SetValue(ConveyorLineDBNameNew.Target, 1, childDeviceCode);
-
-                // 鍥炲 ACK 纭淇″彿
-                conveyorLine.SetValue(ConveyorLineDBNameNew.WCS_ACK, 1, childDeviceCode);
-
-                _logger.LogInformation("ProcessDeviceRequest锛歿DeviceType} 闇�瑕佺墿鏂欙紝宸茶缃洰鏍囧湴鍧�鍜孉CK", deviceType);
-                QuartzLogger.Info($"ProcessDeviceRequest锛歿deviceType} 闇�瑕佺墿鏂欙紝宸茶缃洰鏍囧湴鍧�鍜孉CK", conveyorLine.DeviceCode);
-            }
-            else
-            {
-                // 璁惧涓嶉渶瑕佺墿鏂欙紝璁剧疆杈撳嚭灏辩华鏍囧織
-                // 閫氱煡璁惧鍙互缁х画鍑烘枡
-                setOutputReady(outputReq);
-            }
+            // 鍐欏叆缁撴瀯鍖栨棩蹇楋紙鍙 Serilog 绛夋棩蹇楁鏋舵崟鑾凤級
+            QuartzLogHelper.LogDebug(_logger, "Handle{Scenario}锛氬瓙璁惧: {ChildDeviceCode}锛岀洰鏍囧湴鍧�: {NextAddress}", $"Handle{scenario}锛氬瓙璁惧: {childDeviceCode}锛岀洰鏍囧湴鍧�: {nextAddress}", conveyorLine.DeviceCode, scenario, childDeviceCode, nextAddress);
         }
     }
-}
+}
\ No newline at end of file

--
Gitblit v1.9.3