private DeviceRunInfo GetSubDeviceRunInfo(List <D_WirelessVibrationSlot> result, DateTime start, int day) { DeviceRunInfo devicerunInfo = new DeviceRunInfo(); devicerunInfo.RunInfo = new List <RunInfo>(); for (int i = 0; i < day; i++) { devicerunInfo.RunInfo.Add(new RunInfo() { Time = start.AddDays(i), }); } devicerunInfo.RunHours = 0; devicerunInfo.PreAlarmCount = 0; devicerunInfo.AlarmCount = 0; devicerunInfo.DangerCount = 0; if (result != null && result.Count > 0) { result = result.OrderBy(p => p.ACQDatetime).ToList(); //分组 var groupresult = result.GroupBy(p => new { Year = p.ACQDatetime.Year, Month = p.ACQDatetime.Month, Day = p.ACQDatetime.Day }); foreach (var groupdata in groupresult) { double hours = 0; foreach (var data in groupdata) { var extraInfoJson = data.ExtraInfoJSON; if (!string.IsNullOrWhiteSpace(extraInfoJson)) { M9600.Common.DTO.Device.ExtraInfo extraInfo = JsonConvert.DeserializeObject <M9600.Common.DTO.Device.ExtraInfo>(extraInfoJson.Substring(1, extraInfoJson.Length - 2)); if (extraInfo != null) { switch (data.AlarmGrade & 0xff) { case 0: break; case 1: hours += extraInfo.NormalTimeLength / 3600; break; case 2: hours += extraInfo.PreAlarmTimeLength / 3600; break; case 3: hours += extraInfo.AlarmTimeLength / 3600; break; case 4: hours += extraInfo.DangerTimeLength / 3600; break; } devicerunInfo.PreAlarmCount += extraInfo.PreAlarmCount; devicerunInfo.AlarmCount += extraInfo.AlarmCount; devicerunInfo.DangerCount += extraInfo.DangerCount; } } } hours = (hours > 24) ? 24 : hours; DateTime time = groupdata.First().ACQDatetime; devicerunInfo.RunHours += hours; RunInfo runinfo = devicerunInfo.RunInfo.Where(p => p.Time.Year == time.Year && p.Time.Month == time.Month && p.Time.Day == time.Day).First(); runinfo.RunHours = hours; runinfo.Result = groupdata.OrderBy(p => p.AlarmGrade & 0xff).ThenBy(n => n.Result).Select(p => p.Result.Value).LastOrDefault(); } } return(devicerunInfo); }
private DeviceRunInfo NewGetSubDeviceRunInfo(List <D_SlotStatistic> result, DateTime start, int day) { DeviceRunInfo devicerunInfo = new DeviceRunInfo(); devicerunInfo.RunInfo = new List <RunInfo>(); for (int i = 0; i < day; i++) { devicerunInfo.RunInfo.Add(new RunInfo() { Time = start.AddDays(i), }); } devicerunInfo.RunHours = 0; devicerunInfo.PreAlarmCount = 0; devicerunInfo.AlarmCount = 0; devicerunInfo.DangerCount = 0; if (result != null && result.Count > 0) { //分组 foreach (var dayresult in result) { DateTime time = dayresult.StatisticsTime.AddDays(-1); double hours = 0; var extraData = JsonConvert.DeserializeObject <SlotExtraData>(dayresult.ExtraData); if (extraData != null) { M9600.Common.DTO.Device.ExtraInfo extraInfo = new M9600.Common.DTO.Device.ExtraInfo(); extraInfo = DictionaryToClassHelper.DicToObject <M9600.Common.DTO.Device.ExtraInfo>(extraData.StatisticsInfo.ToDictionary(p => p.Key, p => p.Value as object)); var runhours = (extraInfo.NormalTimeLength + extraInfo.PreAlarmTimeLength + extraInfo.AlarmTimeLength + extraInfo.DangerTimeLength) / 3600; var allhours = (extraInfo.InvalidTimeLength + extraInfo.NotOKTimeLength + extraInfo.NormalTimeLength + extraInfo.PreAlarmTimeLength + extraInfo.AlarmTimeLength + extraInfo.DangerTimeLength) / 3600; devicerunInfo.RunHours += runhours / allhours * 24; hours = runhours / allhours * 24; devicerunInfo.PreAlarmCount += extraInfo.PreAlarmCount; devicerunInfo.AlarmCount += extraInfo.AlarmCount; devicerunInfo.DangerCount += extraInfo.DangerCount; } RunInfo runinfo = devicerunInfo.RunInfo.Where(p => p.Time.Year == time.Year && p.Time.Month == time.Month && p.Time.Day == time.Day).First(); runinfo.RunHours = hours; var secondmax = JsonConvert.DeserializeObject <SlotDiagnosticData>(dayresult.SecondaryMaxDiagnosticData); if (secondmax != null) { runinfo.Result = secondmax.Result; runinfo.ACQDatetime = secondmax.ACQDateTime; runinfo.RecordLab = secondmax.RecordLab.Value; runinfo.T_Item_Guid = dayresult.T_Item_Guid; runinfo.RPM = (float)secondmax.RPM; runinfo.Unit = secondmax.Unit; runinfo.AlarmGrade = (AlarmGrade)(secondmax.AlarmGrade & 0x00ffff00); } } RunInfo maxruninfo = devicerunInfo.RunInfo.OrderBy(p => p.Result).LastOrDefault(); devicerunInfo.ACQDatetime = maxruninfo.ACQDatetime; devicerunInfo.RecordLab = maxruninfo.RecordLab; devicerunInfo.T_Item_Guid = maxruninfo.T_Item_Guid; devicerunInfo.RPM = maxruninfo.RPM; devicerunInfo.MaxResult = maxruninfo.Result; devicerunInfo.Unit = maxruninfo.Unit; devicerunInfo.AlarmGrade = maxruninfo.AlarmGrade; } return(devicerunInfo); }
private DeviceRunInfo GetSubDeviceRunInfo(List <D_WirelessVibrationSlot> result, DateTime start, int day) { DeviceRunInfo devicerunInfo = new DeviceRunInfo(); devicerunInfo.RunInfo = new List <RunInfo>(); for (int i = 0; i < day; i++) { devicerunInfo.RunInfo.Add(new RunInfo() { Time = start.AddDays(i), }); } devicerunInfo.RunHours = 0; devicerunInfo.PreAlarmCount = 0; devicerunInfo.AlarmCount = 0; devicerunInfo.DangerCount = 0; if (result != null && result.Count > 0) { //分组 var groupresult = result.GroupBy(p => new { Year = p.ACQDatetime.Year, Month = p.ACQDatetime.Month, Day = p.ACQDatetime.Day }); foreach (var groupdata in groupresult) { double hours = 0; foreach (var data in groupdata) { var extraInfoJson = data.ExtraInfoJSON; if (!string.IsNullOrWhiteSpace(extraInfoJson)) { M9600.Common.DTO.Device.ExtraInfo extraInfo = JsonConvert.DeserializeObject <M9600.Common.DTO.Device.ExtraInfo>(extraInfoJson.Substring(1, extraInfoJson.Length - 2)); if (extraInfo != null) { switch (data.AlarmGrade & 0xff) { case 0: break; //无效数据可能不存 case 1: hours += extraInfo.NormalTimeLength / 3600; break; case 2: hours += extraInfo.PreAlarmTimeLength / 3600; break; case 3: hours += extraInfo.AlarmTimeLength / 3600; break; case 4: hours += extraInfo.DangerTimeLength / 3600; break; } devicerunInfo.PreAlarmCount += extraInfo.PreAlarmCount; devicerunInfo.AlarmCount += extraInfo.AlarmCount; devicerunInfo.DangerCount += extraInfo.DangerCount; } } } hours = (hours > 24) ? 24 : hours; DateTime time = groupdata.First().ACQDatetime; devicerunInfo.RunHours += hours; RunInfo runinfo = devicerunInfo.RunInfo.Where(p => p.Time.Date == time.Date).First(); runinfo.RunHours = hours; var secondmax = groupdata.Where(p => p.IsValidWave == true).OrderByDescending(p => p.AlarmGrade & 0xff).ThenByDescending(n => n.Result).Skip(1).Take(1).FirstOrDefault(); if (secondmax != null)//优先查有波形的 { runinfo.Result = secondmax.Result.Value; runinfo.ACQDatetime = secondmax.ACQDatetime; runinfo.RecordLab = (secondmax.IsValidWave == true) ? secondmax.RecordLab.Value : new Guid(); runinfo.T_Item_Guid = secondmax.T_Item_Guid; runinfo.RPM = (float)secondmax.RPM; runinfo.Unit = secondmax.Unit; runinfo.AlarmGrade = (AlarmGrade)(secondmax.AlarmGrade & 0x00ffff00); } else { secondmax = groupdata.OrderByDescending(p => p.AlarmGrade & 0xff).ThenByDescending(n => n.Result).Skip(1).Take(1).FirstOrDefault(); if (secondmax != null) { runinfo.Result = secondmax.Result.Value; runinfo.ACQDatetime = secondmax.ACQDatetime; runinfo.RecordLab = (secondmax.IsValidWave == true) ? secondmax.RecordLab.Value : new Guid(); runinfo.T_Item_Guid = secondmax.T_Item_Guid; runinfo.RPM = (float)secondmax.RPM; runinfo.Unit = secondmax.Unit; runinfo.AlarmGrade = (AlarmGrade)(secondmax.AlarmGrade & 0x00ffff00); } } } RunInfo maxruninfo = devicerunInfo.RunInfo.OrderBy(p => p.Result).LastOrDefault(); devicerunInfo.ACQDatetime = maxruninfo.ACQDatetime; devicerunInfo.RecordLab = maxruninfo.RecordLab; devicerunInfo.T_Item_Guid = maxruninfo.T_Item_Guid; devicerunInfo.RPM = maxruninfo.RPM; devicerunInfo.MaxResult = maxruninfo.Result; devicerunInfo.Unit = maxruninfo.Unit; devicerunInfo.AlarmGrade = maxruninfo.AlarmGrade; } return(devicerunInfo); }