From d3091b37a593885877f4ed4180d49e5ce259b657 Mon Sep 17 00:00:00 2001
From: yanjinhui <3306209981@qq.com>
Date: 星期一, 04 八月 2025 10:27:55 +0800
Subject: [PATCH] 优化接口

---
 项目代码/后端/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SSG/AlarmResetJob.cs |  284 ++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 191 insertions(+), 93 deletions(-)

diff --git "a/\351\241\271\347\233\256\344\273\243\347\240\201/\345\220\216\347\253\257/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SSG/AlarmResetJob.cs" "b/\351\241\271\347\233\256\344\273\243\347\240\201/\345\220\216\347\253\257/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SSG/AlarmResetJob.cs"
index 1d08638..7d3f56a 100644
--- "a/\351\241\271\347\233\256\344\273\243\347\240\201/\345\220\216\347\253\257/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SSG/AlarmResetJob.cs"
+++ "b/\351\241\271\347\233\256\344\273\243\347\240\201/\345\220\216\347\253\257/WCS/WIDESEAWCS_Server/WIDESEAWCS_Tasks/SSG/AlarmResetJob.cs"
@@ -15,142 +15,246 @@
 using WIDESEAWCS_TelescopicService;
 using WIDESEAWCS_ISystemServices;
 using WIDESEAWCS_Core.Helper;
-
+using Microsoft.AspNetCore.Http;
+using System.Collections.Concurrent;
+using Microsoft.AspNetCore.Hosting.Server;
+using static System.Collections.Specialized.BitVector32;
 
 namespace WIDESEAWCS_Tasks
 {
     [DisallowConcurrentExecution]
     public class AlarmResetJob : JobBase, IJob
     {
-
         private readonly IAlarmResetHsyServer _alarmResetHsyServer;
         private readonly ISys_UserService _UserService;
         WebSocketServer _webSocketServer;
         private readonly Idt_ErrormsginfoService _ErrormsginfoService;
+        private readonly AlarmResetHsyServer _alarmResetHsy;
+        private readonly IIPaddressServer _cunstomipService;
+        //private static readonly object _lockObj = new object(); //鍔犻攣
 
 
-        public AlarmResetJob(Idt_ErrormsginfoService errormsginfoService, WebSocketServer webSocketServer, IAlarmResetHsyServer alarmResetHsyServer, ISys_UserService UserService)
+        // 澧炴坊鐨勫瓧鍏歌窡韪姤璀︿负姣忎釜瑁呯疆 Quartz 榛樿姣忔璋冨害浠诲姟鏃朵細閲嶆柊鍒涘缓
+        private static readonly Dictionary<string, bool> _leftAlarmStates = new Dictionary<string, bool>() //鍔犻攣
+        {
+            ["M109"] = false,//浼烘湇鎶ヨ
+            ["M111"] = false,//鍏朵粬鎶ヨ
+            ["M110"] = false,//鎬ュ仠鎶ヨ
+            ["M120"] = false,//闅滅鎶ヨ
+        };
+        private static readonly Dictionary<string, bool> _rightAlarmStates = new Dictionary<string, bool>()
+        { 
+            ["M109"] = false,//浼烘湇鎶ヨ
+            ["M111"] = false,//鍏朵粬鎶ヨ
+            ["M110"] = false,//鎬ュ仠鎶ヨ
+            ["M120"] = false,//闅滅鎶ヨ
+        };
+
+        public AlarmResetJob(Idt_ErrormsginfoService errormsginfoService, WebSocketServer webSocketServer, IAlarmResetHsyServer alarmResetHsyServer, ISys_UserService UserService, IIPaddressServer cunstomipService)
         {
             _webSocketServer = webSocketServer;
             _alarmResetHsyServer = alarmResetHsyServer;
             _UserService = UserService;
             _ErrormsginfoService = errormsginfoService;
+            _cunstomipService = cunstomipService;    
         }
 
+       
 
         public Task Execute(IJobExecutionContext context)
         {
             try
             {
+                WebSocketSession[] webSocketSessions = _webSocketServer.OnlineSessions;//灏嗘墍鏈夌殑杩炴帴淇℃伅瀛樺埌杩欓噷
+                //string clientIp = webSocketSessions[0].Remote.Address.ToString().Replace("::ffff", ""); //鑾峰彇涓�涓猧p鍦板潃
 
-                //鑾峰彇璁惧鍙�
-                // 鑾峰彇璁惧閰嶇疆
-                //OtherDevice serialPortDevice = (OtherDevice)context.JobDetail.JobDataMap.Get("JobParams");
-                if (!int.TryParse(AppSettings.Get("DepartmentID"), out int deid))
+                foreach (var session in webSocketSessions)
                 {
-                    Console.WriteLine("閰嶇疆椤� DepartmentID 鏃犳硶杞崲涓烘暣鏁�");
-                }
-                var devices = GetDevicesByDeptId(deid);
-                if (devices != null)
-                {
-                    //棣栧厛瑕佷竴鐩磋锛屽鏋滃彂鐢熶簡鏁呴殰瑕佸啓鍒癬alarmResetHsyServer涓褰曚笅鏉ュ苟涓旂粰鍒板墠绔暟鎹�
-                    //宸lc
-                    try
+                    string clientIp = session.Remote.Address.ToString().Replace("::ffff:", "");
+                    var customip = _cunstomipService.GetStandid(clientIp);
+                    if (customip.Status && customip.Data != null)
                     {
-                        if (devices.Value.left.IsConnected)
+                        //var deid = customip.Data.StationID;
+                        var deid = Convert.ToInt32(customip.Data);
+                        var devices = GetDevicesByDeptId(deid);
+
+
+
+                        //if (!int.TryParse(AppSettings.Get("DepartmentID"), out int deid))
+                        //{
+                        //    Console.WriteLine("閰嶇疆椤� DepartmentID 鏃犳硶杞崲涓烘暣鏁�");
+                        //}
+                        //var devices = GetDevicesByDeptId(deid);
+
+
+
+                        if (devices != null)
                         {
-                            var leftPLcstuck1 = devices.Value.left.Communicator.Read<bool>("M109"); //鍗′綇鎶ヨ
-                            var leftPLcOher1 = devices.Value.left.Communicator.Read<bool>("M111");  //鍏朵粬鎶ヨ //榛樿鏄痜alse
-                            var leftPLcNowAdd = devices.Value.left.Communicator.Read<float>("D80");
-                            Console.WriteLine($"{devices.Value.left.DeviceName}:鍗′綇鎶ヨ{leftPLcstuck1}锛屽叾浠栨姤璀leftPLcOher1}");
-                            if (leftPLcstuck1 == true && leftPLcOher1 == false)
+                            // Left PLC processing
+                            try
                             {
-                                string text = $"杞ㄩ亾{deid}锛氫几缂╁崱浣忔姤璀�";
-                                //鎶ヨ浜嗗湪杩欒皟鐢ㄦ坊鍔犳柟娉曪紝骞朵紶缁欏墠绔�
-                                var reslut = _alarmResetHsyServer.AddAlarmHsy(deid,text, leftPLcstuck1);
+                                if (devices.Value.left.IsConnected)
+                                {
+                                    var leftPLcstuck1 = devices.Value.left.Communicator.Read<bool>("M109"); // Servo alarm
+                                    var leftPLcOher1 = devices.Value.left.Communicator.Read<bool>("M111");  // Other alarm
+                                    var leftscram = devices.Value.left.Communicator.Read<bool>("M110");     // Emergency stop
+                                    var leftstop = devices.Value.left.Communicator.Read<bool>("M120");      // Obstacle stop
+
+                                    var leftPLcNowAdd = devices.Value.left.Communicator.Read<float>("D80"); //褰撳墠浣嶇疆
+                                    Console.WriteLine($"{devices.Value.left.DeviceName}:鍗′綇鎶ヨ{leftPLcstuck1}锛屽叾浠栨姤璀leftPLcOher1}");
 
 
-                            }
-                            if (leftPLcstuck1 == false && leftPLcOher1 == true)
-                            {
-                                string text = $"杞ㄩ亾{deid}锛氬叾浠栨晠闅滄姤璀�";
-                                var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, leftPLcstuck1);
+                                    // Check and record alarms only when state changes from false to true
+                                    if (leftPLcstuck1 && !_leftAlarmStates["M109"])
+                                    {
+                                        string text = $"妫�{deid}閬撳乏渚ц鎯曟満鏋勶細浼哥缉鍗′綇鎶ヨ";
+                                        var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, leftPLcstuck1);
+                                        _leftAlarmStates["M109"] = true;
+                                    }
+                                    else if (!leftPLcstuck1)
+                                    {
+                                        _leftAlarmStates["M109"] = false;
+                                    }
 
+                                    if (leftPLcOher1 && !_leftAlarmStates["M111"])
+                                    {
+                                        string text = $"妫�{deid}閬撳乏渚ц鎯曟満鏋勶細鍏朵粬鏁呴殰鎶ヨ";
+                                        var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, leftPLcOher1);
+                                        _leftAlarmStates["M111"] = true;
+                                    }
+                                    else if (!leftPLcOher1)
+                                    {
+                                        _leftAlarmStates["M111"] = false;
+                                    }
+
+                                    if (leftscram && !_leftAlarmStates["M110"])
+                                    {
+                                        string text = $"妫�{deid}閬撳乏渚ц鎯曟満鏋勶細鎬ュ仠鎶ヨ";
+                                        var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, leftscram);
+                                        _leftAlarmStates["M110"] = true;
+                                    }
+                                    else if (!leftscram)
+                                    {
+                                        _leftAlarmStates["M110"] = false;
+                                    }
+
+                                    if (leftstop && !_leftAlarmStates["M120"])
+                                    {
+                                        string text = $"妫�{deid}閬撳乏渚ц鎯曟満鏋勶細閬囬殰纰嶅仠姝㈡姤璀�";
+                                        var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, leftstop);
+                                        _leftAlarmStates["M120"] = true;
+                                    }
+                                    else if (!leftstop)
+                                    {
+                                        _leftAlarmStates["M120"] = false;
+                                    }
+
+
+                                    _webSocketServer.PublishAllClientPayload(JsonConvert.SerializeObject(new
+                                    {
+                                        device = "宸lc",
+                                        Liftvalue = leftPLcNowAdd
+                                    })); //杩斿洖褰撳墠plc浣嶇疆
+                                }
                             }
-                            if (leftPLcstuck1 == true && leftPLcOher1 == true)//濡傛灉鎶ヨ浜�
+                            catch (Exception)
                             {
-                                string text = $"杞ㄩ亾{deid}锛氭姤璀︿几缂╁崱浣忔姤璀﹀拰鍏朵粬鏁呴殰鎶ヨ";
-                                var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, leftPLcstuck1);
+                                string text = $"杞ㄩ亾{deid}锛氬乏PLC鏈繛鎺�";
+                                //var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, false);
                             }
-                            _webSocketServer.PublishAllClientPayload(JsonConvert.SerializeObject(new
+
+                            // Right PLC processing
+                            try
                             {
-                                device = "宸lc",
-                                Liftvalue = leftPLcNowAdd
-                            }));//鎶奃80缁欏墠绔�
+                                if (devices.Value.right.IsConnected)
+                                {
+                                    var rightPLcSuck = devices.Value.right.Communicator.Read<bool>("M109"); // Servo alarm
+                                    var rightPLcOher = devices.Value.right.Communicator.Read<bool>("M111"); // Other alarm
+                                    var rightscram = devices.Value.right.Communicator.Read<bool>("M110"); // Emergency stop
+                                    var rightstop = devices.Value.right.Communicator.Read<bool>("M120");     // Obstacle stop
+
+                                    var rightPLcNowAdd = devices.Value.right.Communicator.Read<float>("D80");
+                                    Console.WriteLine($"{devices.Value.right.DeviceName}:鍗′綇鎶ヨ{rightPLcSuck}锛屽叾浠栨姤璀rightPLcOher}");
+
+
+                                    // Check and record alarms only when state changes from false to true
+                                    if (rightPLcSuck && !_rightAlarmStates["M109"])
+                                    {
+                                        string text = $"妫�{deid}閬撳彸渚ц鎯曟満鏋勶細鎶ヨ浼哥缉鍗′綇鎶ヨ";
+                                        var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, rightPLcSuck);
+                                        _rightAlarmStates["M109"] = true;
+                                    }
+                                    else if (!rightPLcSuck)
+                                    {
+                                        _rightAlarmStates["M109"] = false;
+                                    }
+
+                                    if (rightPLcOher && !_rightAlarmStates["M111"])
+                                    {
+                                        string text = $"妫�{deid}閬撳彸渚ц鎯曟満鏋勶細鍏朵粬鏁呴殰鎶ヨ";
+                                        var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, rightPLcOher);
+                                        _rightAlarmStates["M111"] = true;
+                                    }
+                                    else if (!rightPLcOher)
+                                    {
+                                        _rightAlarmStates["M111"] = false;
+                                    }
+
+                                    if (rightscram && !_rightAlarmStates["M110"])
+                                    {
+                                        string text = $"妫�{deid}閬撳彸渚ц鎯曟満鏋勶細鎬ュ仠鎶ヨ";
+                                        var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, rightscram);
+                                        _rightAlarmStates["M110"] = true;
+                                    }
+                                    else if (!rightscram)
+                                    {
+                                        _rightAlarmStates["M110"] = false;
+                                    }
+
+                                    if (rightstop && !_rightAlarmStates["M120"])
+                                    {
+                                        string text = $"妫�{deid}閬撳彸渚ц鎯曟満鏋勶細閬囬殰纰嶅仠姝㈡姤璀�";
+                                        var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, rightstop);
+                                        _rightAlarmStates["M120"] = true;
+                                    }
+                                    else if (!rightstop)
+                                    {
+                                        _rightAlarmStates["M120"] = false;
+                                    }
+
+                                    _webSocketServer.PublishAllClientPayload(JsonConvert.SerializeObject(new
+                                    {
+                                        device = "鍙砅lc",
+                                        Rightvalue = rightPLcNowAdd
+                                    }));
+                                }
+                            }
+                            catch (Exception)
+                            {
+                                string text = $"杞ㄩ亾{deid}锛氬彸PLC鏈繛鎺�";
+                                //var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, false);
+                            }
+
+                            var alrt = _alarmResetHsyServer.GetWebSocketInfo(deid);
+                            _webSocketServer.PublishAllClientPayload(JsonConvert.SerializeObject(alrt)); //杩斿洖鎵�鏈夌殑鎶ヨ琛ㄧ殑淇℃伅
                         }
                     }
-                    catch (Exception)
-                    {
-                        string text = $"杞ㄩ亾{deid}锛氬乏PLC鏈繛鎺�";
-                        //var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, false);//娣诲姞鏁版嵁
                     }
-                    
-                    try
-                    {
-                        if (devices.Value.right.IsConnected)//鏄惁杩炴帴涓�
-                        {
-                            //鍙硃lc
-                            var rightPLcSuck = devices.Value.right.Communicator.Read<bool>("M109"); //鍗′綇鎶ヨ
-                            var rightPLcOher = devices.Value.right.Communicator.Read<bool>("M111");//鍏朵粬鎶ヨ
-                            var rightPLcNowAdd = devices.Value.right.Communicator.Read<float>("D80");
-                            Console.WriteLine($"{devices.Value.right.DeviceName}:鍗′綇鎶ヨ{rightPLcSuck}锛屽叾浠栨姤璀rightPLcOher}");
-                            if (rightPLcSuck == true && rightPLcOher == false)
-                            {
-                                string text = $"杞ㄩ亾{deid}锛氭姤璀︿几缂╁崱浣忔姤璀�";
-                                //鎶ヨ浜嗗湪杩欒皟鐢ㄦ坊鍔犳柟娉曪紝骞朵紶缁欏墠绔�
-                                var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, rightPLcSuck);
-                                // _webSocketServer.PublishAllClientPayload(JsonConvert.SerializeObject(reslut));//websocketserver杩欑鍙兘浼犵粰鍓嶇json鏍煎紡
-                            }
-                            if (rightPLcOher == false && rightPLcSuck == true)
-                            {
-                                string text = $"杞ㄩ亾{deid}锛氬叾浠栨晠闅滄姤璀�";
-                                var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, rightPLcOher);
-                            }
-                            if (rightPLcSuck == true && rightPLcOher == true)//濡傛灉鎶ヨ浜�
-                            {
-                                string text = $"杞ㄩ亾{deid}锛氭姤璀︿几缂╁崱浣忔姤璀﹀拰鍏朵粬鏁呴殰鎶ヨ";
-                                var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, rightPLcOher);//娣诲姞鏁版嵁
-                            }
-                            _webSocketServer.PublishAllClientPayload(JsonConvert.SerializeObject(new {
-                                device="鍙砅lc",
-                                Rightvalue= rightPLcNowAdd
-                            }));//鎶奃80缁欏墠绔�
-
-                        }
-                    }
-                    catch (Exception)
-                    {
-                        string text = $"杞ㄩ亾{deid}锛氬彸PLC鏈繛鎺�";
-                        //var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, false);//娣诲姞鏁版嵁
-                    }
-                    var alrt = _alarmResetHsyServer.GetWebSocketInfo(deid);
-                    _webSocketServer.PublishAllClientPayload(JsonConvert.SerializeObject(alrt));
-                    
                 }
-            }
-
-                       
             catch (Exception ex)
             {
                 _ErrormsginfoService.UpdateErrorMsg(ex.Message, 1);
                 Console.WriteLine("閿欒淇℃伅锛�" + ex.Message);
                 Console.WriteLine(ex.StackTrace);
             }
+
             return Task.CompletedTask;
+
         }
+
+
         public (OtherDevice left, OtherDevice right)? GetDevicesByDeptId(int deptId)
         {
-            // 宸﹁澶囧彿锛�1 -> 001锛�2 -> 003锛�3 -> 005...
             int baseCode = 1 + (deptId - 1) * 2;
             string leftCode = $"SSG{baseCode.ToString("D3")}";
             string rightCode = $"SSG{(baseCode + 1).ToString("D3")}";
@@ -158,13 +262,7 @@
             var left = (OtherDevice)Storage.Devices.Find(x => x.DeviceCode == leftCode);
             var right = (OtherDevice)Storage.Devices.Find(x => x.DeviceCode == rightCode);
 
-            
-            //if (left == null || right == null)
-            //    return null;
-
             return (left, right);
         }
     }
-}
-
-
+}
\ No newline at end of file

--
Gitblit v1.9.3