using HslCommunication.WebSocket; using Newtonsoft.Json; using OfficeOpenXml.FormulaParsing.Excel.Functions.Text; using SqlSugar; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using WIDESEAWCS_Core; using WIDESEAWCS_Core.BaseRepository; using WIDESEAWCS_Core.BaseServices; using WIDESEAWCS_Core.Helper; using WIDESEAWCS_DTO.Telescopic; using WIDESEAWCS_ITaskInfoService; using WIDESEAWCS_Model.Models; using WIDESEAWCS_QuartzJob; namespace WIDESEAWCS_TelescopicService { public class AlarmResetHsyServer : ServiceBase>, IAlarmResetHsyServer { public IRepository Repository => BaseDal; private readonly WebSocketServer _webSocketServer; private readonly IRepository _user; public AlarmResetHsyServer(IRepository BaseDal, WebSocketServer webSocketServer, IRepository user) : base(BaseDal) { _webSocketServer = webSocketServer; _user = user; } /// /// 添加报错数据 /// /// /// public WebResponseContent AddAlarmHsy(int deptid,string alarmContent, bool resetStatus) { var alarm = new Dt_AlarmResetHsy { Deptid= deptid, AlarmContent = alarmContent, ResetStatus= resetStatus, AlarmTime=DateTime.Now, }; BaseDal.AddData(alarm); return new WebResponseContent { Status=true, Data = alarm }; } public WebResponseContent GetWebSocketInfo(int deptid) { try { // 查询并排序,确保 ResetStatus 为 true 的记录排在前面,并按 CreateDate 降序排列 // var query = Db.Queryable() // .OrderBy(x => new { ResetStatus = SqlFunc.IsNull(x.ResetStatus, false), x.CreateDate }, OrderByType.Desc); // 按 ResetStatus 为 true 排在前,并按 CreateDate 降序 var query = BaseDal.QueryData(x=>x.Deptid==deptid).OrderByDescending(x => x.ResetStatus). ThenByDescending(x => x.CreateDate); // 再按 CreateDate 降序; // 如果需要根据其他字段进行过滤或模糊查询,可以在此添加 return new WebResponseContent { Status = true, Message = "查询成功", Data = query }; } catch (Exception ex) { // 异常捕获和错误返回 return new WebResponseContent { Status = false, Message = "错误:" + ex.Message }; } } /// /// 将表中部门id为状态全部为true的改为false /// /// /// public WebResponseContent BecomeTrue() { ////找到登入人的deptid //var loginer = _user.QueryFirst(x => x.UserName == account); if (!int.TryParse(AppSettings.Get("DepartmentID"), out int deid)) { return new WebResponseContent { Status = false, Message = "配置项 DepartmentID 无法转换为整数" }; } var devices = GetDevicesByDeptId(deid); var query = BaseDal.QueryData(x => x.ResetStatus == true && x.Deptid== deid).ToList(); // 如果没有找到符合条件的数据 if (query.Count == 0) { return new WebResponseContent { Status = false, Message = "没有要复位数据" }; } try { var left = devices.Value.left.Communicator.Write("M105", true); //重启报警复位 Console.WriteLine($"左报警信号复位写入{left}"); } catch (Exception) { } try { var right = devices.Value.right.Communicator.Write("M105", true); Console.WriteLine($"右报警信号复位写入{right}"); } catch (Exception) { } foreach (var item in query) { item.ResetStatus = false; item.ResetTime = DateTime.Now; } // 执行批量更新操作 var updateResult = BaseDal.UpdateData(query); // 检查更新是否成功 if (updateResult) { return new WebResponseContent { Status = true, Message = "数据已成功复位", Data = query }; } else { return new WebResponseContent { Status = false, Message = "复位操作失败" }; } } public WebResponseContent UpstreamInspectionRoad(UpstreamIDTO upstreamIDTO) { try { // 将 upstreamIDTO 转成 JSON 字符串 var json = JsonConvert.SerializeObject(upstreamIDTO); // 推送到所有 WebSocket 客户端 _webSocketServer.PublishAllClientPayload(json); return new WebResponseContent { Status = true, Message = "推送成功" }; } catch (Exception ex) { // 出现异常,返回失败 return new WebResponseContent { Status = false, Message = "推送失败:" + ex.Message }; } } public WebResponseContent DeleteAllinform() { try { if (!int.TryParse(AppSettings.Get("DepartmentID"), out int deid)) //获取轨道站号 { Console.WriteLine("配置项 DepartmentID 无法转换为整数"); } //找到该轨道站的全部信息 var alarm = BaseDal.QueryData(x => x.Deptid == deid).ToList(); if (alarm.Count<=0) { return new WebResponseContent { Status = false, Message = $"没有要删除的{deid}轨道站的报警信息" }; } //找到后全部删除 var reslut= BaseDal.DeleteData(alarm); return new WebResponseContent { Status = true, Message = "删除成功", Data = reslut }; } catch (Exception ex) { return new WebResponseContent { Status = false, Message = ex.Message }; } } 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); } } }