示例#1
0
        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);
        }
示例#2
0
        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);
        }
示例#3
0
        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);
        }