yanjinhui
2025-06-02 4b4cc0dd66d0bfb8220709f6a5edd5fc3b8a65c2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
using HslCommunication.WebSocket;
using Newtonsoft.Json;
using Quartz;
using SqlSugar;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Core.HttpContextUser;
using WIDESEAWCS_Core;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_TelescopicService;
using WIDESEAWCS_ISystemServices;
using WIDESEAWCS_Core.Helper;
 
 
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;
 
 
        public AlarmResetJob(Idt_ErrormsginfoService errormsginfoService, WebSocketServer webSocketServer, IAlarmResetHsyServer alarmResetHsyServer, ISys_UserService UserService)
        {
            _webSocketServer = webSocketServer;
            _alarmResetHsyServer = alarmResetHsyServer;
            _UserService = UserService;
            _ErrormsginfoService = errormsginfoService;
        }
 
 
        public Task Execute(IJobExecutionContext context)
        {
            try
            {
 
                //获取设备号
                // 获取设备配置
                //OtherDevice serialPortDevice = (OtherDevice)context.JobDetail.JobDataMap.Get("JobParams");
                if (!int.TryParse(AppSettings.Get("DepartmentID"), out int deid))
                {
                    Console.WriteLine("配置项 DepartmentID 无法转换为整数");
                }
                var devices = GetDevicesByDeptId(deid);
                if (devices != null)
                {
                    //首先要一直读,如果发生了故障要写到_alarmResetHsyServer中记录下来并且给到前端数据
                    //左plc
                    try
                    {
                        if (devices.Value.left.IsConnected)
                        {
                            var leftPLcstuck1 = devices.Value.left.Communicator.Read<bool>("M109"); //卡住报警
                            var leftPLcOher1 = devices.Value.left.Communicator.Read<bool>("M111");  //其他报警 //默认是false
                            var leftPLcNowAdd = devices.Value.left.Communicator.Read<float>("D80");
                            Console.WriteLine($"{devices.Value.left.DeviceName}:卡住报警{leftPLcstuck1},其他报警{leftPLcOher1}");
                            if (leftPLcstuck1 == true && leftPLcOher1 == false)
                            //if (leftPLcOher == false)
                            {
                                string text = $"轨道{deid}:伸缩卡住报警";
                                //报警了在这调用添加方法,并传给前端
                                var reslut = _alarmResetHsyServer.AddAlarmHsy(deid,text, leftPLcstuck1);
 
 
                            }
                            if (leftPLcstuck1 == false && leftPLcOher1 == true)
                            {
                                string text = $"轨道{deid}:其他故障报警";
                                var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, leftPLcstuck1);
 
                            }
                            if (leftPLcstuck1 == true && leftPLcOher1 == true)//如果报警了
                            {
                                string text = $"轨道{deid}:报警伸缩卡住报警和其他故障报警";
                                var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, leftPLcstuck1);
                            }
                            _webSocketServer.PublishAllClientPayload(JsonConvert.SerializeObject(new
                            {
                                device = "左Plc",
                                Liftvalue = leftPLcNowAdd
                            }));//把D80给前端
                        }
                    }
                    catch (Exception)
                    {
                        string text = $"轨道{deid}:左PLC未连接";
                        //var reslut = _alarmResetHsyServer.AddAlarmHsy(deid, text, false);//添加数据
                    }
                    
                    try
                    {
                        if (devices.Value.right.IsConnected)//是否连接上
                        {
                            //右plc
                            var rightPLcSuck = devices.Value.right.Communicator.Read<bool>("M109"); //卡住报警
                            var rightPLcOher = devices.Value.right.Communicator.Read<bool>("M110");//其他报警
                            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="右Plc",
                                Rightvalue= rightPLcNowAdd
                            }));//把D80给前端
 
                        }
                    }
                    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")}";
 
            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);
        }
    }
}