using HighWayIot.Repository.domain; using HighWayIot.Repository.service; using HighWayIot.Repository.service.Impl; using HighWayIot.TouchSocket; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Web; namespace RFIDSocket { /// /// 数据解析类 /// public class ServerDataAnalysis { private static readonly Lazy lazy = new Lazy(() => new ServerDataAnalysis()); public static ServerDataAnalysis Instance => lazy.Value; public List rFIDContents = new List(); public List rFIDHeartbeats = new List(); public List HeartbeatsState = new List(); public List rFIDStates = new List(); public List AlarmState = new List(); public IContentService ContentService = new BaseContentServiceImpl(); public IHeartbeatService HeartbeatService = new BaseHeartbeatServiceImpl(); public IStateService StateService = new BaseStateServiceImpl(); /// /// 获取数据解析 /// public void GetData() { rFIDContents = ContentService.GetContentInfos().Reverse().Take(200).ToList(); rFIDStates = StateService.GetStateInfos(); var StateGroup = rFIDStates.GroupBy(x => x.DeviceNo); AlarmState.Clear(); foreach(var a in StateGroup) { var b = a.LastOrDefault(); if (b.DeviceState) { AlarmState.Add(b); } } rFIDHeartbeats = HeartbeatService.GetHeartbeatInfos(); var HeartBeatGroup = rFIDHeartbeats.GroupBy(x => x.DeviceNo); HeartbeatsState.Clear(); foreach (var a in HeartBeatGroup) { var b = a.LastOrDefault(); if (DateTime.Now - b.BeatTime > TimeSpan.FromSeconds(10)) { b.TimeSpan = SecondToTime(Convert.ToInt32((DateTime.Now - b.BeatTime).TotalSeconds)); HeartbeatsState.Add(b); } } } /// /// 清除报警 /// /// public bool ClearAllError() { return StateService.SetAllNoError(); } /// /// 秒转时间 /// /// /// private string SecondToTime(int t) { int m = t / 60; int s = t % 60; if (m == 0) { return "00 分 " + s.ToString("00") + " 秒"; } return m.ToString("00") + " 分 " + s.ToString("00") + " 秒"; } } }