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