/// <summary> /// Прибавляет заданную наработку к уже существующей /// </summary> /// <param name="lifelength"></param> public void Add(Lifelength lifelength) { // прибавляем к this // null + cycles = cycles // cycles + null = cycles // null + null = null // cycles + cycles = cycles + cycles if (Cycles == null && lifelength.Cycles != null) { Cycles = lifelength.Cycles; } else if (Cycles != null && lifelength.Cycles != null) { Cycles += lifelength.Cycles; } if (Days == null && lifelength.Days != null) { Days = lifelength.Days; } else if (Days != null && lifelength.Days != null) { Days += lifelength.Days; } if (TotalMinutes == null && lifelength.TotalMinutes != null) { TotalMinutes = lifelength.TotalMinutes; } else if (TotalMinutes != null && lifelength.TotalMinutes != null) { TotalMinutes += lifelength.TotalMinutes; } }
public DirectiveRecordView(DirectiveRecord source) { if (source == null) { return; } Id = source.Id; NumGroup = source.NumGroup; RecordTypeID = source.RecordTypeID; ParentID = source.ParentID; ParentTypeId = source.ParentTypeId; Remarks = source.Remarks; RecordDate = source.RecordDate; WorkPackageID = source.WorkPackageID; Dispatched = source.Dispatched; Completed = source.Completed; Reference = source.Reference; ODR = source.ODR; MaintenanceOrganization = source.MaintenanceOrganization; MaintenanceDirectiveRecordId = source.MaintenanceDirectiveRecordId; MaintenanceCheckRecordId = source.MaintenanceCheckRecordId; PerformanceNum = source.PerformanceNum.HasValue ? source.PerformanceNum.Value : 0; IsControlPoint = source.IsControlPoint; ComplianceCheckName = source.ComplianceCheckName; OnLifelength = Lifelength.ConvertFromByteArray(source.OnLifelength); Unused = Lifelength.ConvertFromByteArray(source.Unused); CalculatedPerformanceSource = Lifelength.ConvertFromByteArray(source.CalculatedPerformanceSource); Overused = Lifelength.ConvertFromByteArray(source.Overused); }
public ComponentView(Component source) { if (source == null) { return; } Id = source.Id; AircaraftId = source.AircaraftId; PartNumber = source.PartNumber; ManufactureDate = source.ManufactureDate.Value; IsBaseComponent = source.IsBaseComponent; LLPMark = source.LLPMark; LLPCategories = source.LLPCategories; _threshold = new Threshold(); Warranty = Lifelength.ConvertFromByteArray(source.Warranty); WarrantyNotify = Lifelength.ConvertFromByteArray(source.WarrantyNotify); LifeLimit = Lifelength.ConvertFromByteArray(source.LifeLimit); LifeLimitNotify = Lifelength.ConvertFromByteArray(source.LifeLimitNotify); ActualStateRecords = source.ActualStateRecords?.Select(i => new ActualStateRecordView(i)).ToList(); TransferRecords = source.TransferRecords?.Select(i => new TransferRecordView(i)).ToList(); ChangeLLPCategoryRecords = source.ChangeLLPCategoryRecords?.Select(i => new ComponentLLPCategoryChangeRecordView(i)).ToList(); ComponentDirectives = source.ComponentDirectives?.Select(i => new ComponentDirectiveView(i)).ToList(); LLPData = source.LLPData?.Select(i => new ComponentLLPCategoryDataView(i)).ToList(); AverageUtilization = AverageUtilization.ConvertFromByteArray(source.AverageUtilization); }
/// <summary> /// Метод проверяет, является ли данная наработка строго меньшей заданной по всем трем параметрам /// </summary> /// <param name="lifelength"></param> /// <param name="strictCompare"></param> /// <returns></returns> public bool IsLess(Lifelength lifelength, bool strictCompare = true) { if (Cycles != null && lifelength.Cycles != null && Cycles < lifelength.Cycles && TotalMinutes != null && lifelength.TotalMinutes != null && TotalMinutes < lifelength.TotalMinutes && Days != null && lifelength.Days != null && Days < lifelength.Days) { return(true); } return(false); }
public ComponentLLPCategoryChangeRecordView(ComponentLLPCategoryChangeRecord source) { if (source == null) { return; } Id = source.Id; ParentId = source.ParentId; RecordDate = source.RecordDate.Value; OnLifeLength = Lifelength.ConvertFromByteArray(source.OnLifeLengthByte); }
/// <summary> /// Копирует наработку (Создает новую наработку с такими же параметрами) /// </summary> /// <param name="source"></param> public Lifelength(Lifelength source) { if (source == null) { return; } // Cycles = source.Cycles; CalendarSpan = new CalendarSpan(source.CalendarSpan); TotalMinutes = source.TotalMinutes; }
public ComponentLLPCategoryDataView(ComponentLLPCategoryData source) { if (source == null) { return; } Id = source.Id; LLPLifeLength = Lifelength.ConvertFromByteArray(source.LLPLifeLength); LLPLifeLimit = Lifelength.ConvertFromByteArray(source.LLPLifeLimit); Notify = Lifelength.ConvertFromByteArray(source.Notify); LLPLifeLengthCurrent = Lifelength.ConvertFromByteArray(source.LLPLifeLengthCurrent); LLPLifeLengthForDate = Lifelength.ConvertFromByteArray(source.LLPLifeLengthForDate); Date = source.Date; }
/// <summary> /// Получает свойства из массива байт /// </summary> /// <param name="data"></param> public static Threshold ConvertForCMaintenanceDirective(byte[] data) { var item = new Threshold(); if (data == null) { data = new byte[SerializedDataLengthMaintenance]; } int currentPos = 0; byte[] serializedEffectivityDate = new byte[sizeof(long)]; Array.Copy(data, currentPos, serializedEffectivityDate, 0, sizeof(long)); item.EffectiveDate = new DateTime(DbTypes.Int64FromByteArray(serializedEffectivityDate, 0)); currentPos += sizeof(long); byte[] serializedPerformSinceNew = new byte[Lifelength.SerializedDataLength]; Array.Copy(data, currentPos, serializedPerformSinceNew, 0, Lifelength.SerializedDataLength); item.FirstPerformanceSinceNew = Lifelength.ConvertFromByteArray(serializedPerformSinceNew); currentPos += Lifelength.SerializedDataLength; byte[] serializedSinceEffectivityLifelength = new byte[Lifelength.SerializedDataLength]; Array.Copy(data, currentPos, serializedSinceEffectivityLifelength, 0, Lifelength.SerializedDataLength); item.FirstPerformanceSinceEffectiveDate = Lifelength.ConvertFromByteArray(serializedSinceEffectivityLifelength); currentPos += Lifelength.SerializedDataLength; byte[] serializedNotification = new byte[Lifelength.SerializedDataLength]; Array.Copy(data, currentPos, serializedNotification, 0, Lifelength.SerializedDataLength); item.FirstNotification = Lifelength.ConvertFromByteArray(serializedNotification); currentPos += Lifelength.SerializedDataLength; item.FirstPerformanceConditionType = data[currentPos] == 1 ? ThresholdConditionType.WhicheverLater : ThresholdConditionType.WhicheverFirst; currentPos += 1; item.PerformRepeatedly = data[currentPos] == 1; currentPos += 1; byte[] serializedrepeatPerform = new byte[Lifelength.SerializedDataLength]; Array.Copy(data, currentPos, serializedrepeatPerform, 0, Lifelength.SerializedDataLength); item.RepeatInterval = Lifelength.ConvertFromByteArray(serializedrepeatPerform); currentPos += Lifelength.SerializedDataLength; byte[] serializedRepeatNotificaction = new byte[Lifelength.SerializedDataLength]; Array.Copy(data, currentPos, serializedRepeatNotificaction, 0, Lifelength.SerializedDataLength); item.RepeatNotification = Lifelength.ConvertFromByteArray(serializedRepeatNotificaction); currentPos += Lifelength.SerializedDataLength; item.RepeatPerformanceConditionType = data[currentPos] == 1 ? ThresholdConditionType.WhicheverLater : ThresholdConditionType.WhicheverFirst; return(item); }
/// <summary> /// Дополняет пустые параметры текущего объекта параметрами из источника /// </summary> /// <param name="source"></param> public void CompleteNullParameters(Lifelength source) { if (Cycles == null) { Cycles = source.Cycles; } if (TotalMinutes == null) { TotalMinutes = source.TotalMinutes; } if (Days == null) { Days = source.Days; } }
/* * Методы */ #region public void Resemble(Lifelength sample) /// <summary> /// Сделать похожим на заданный ресурс. Т.е. если не заданы часы - сделать часы n/a и т.д. /// </summary> /// <param name="sample"></param> public void Resemble(Lifelength sample) { if (sample.TotalMinutes == null) { TotalMinutes = null; } if (sample.Cycles == null) { Cycles = null; } if (sample.Days == null) { Days = null; } }
/// <summary> /// Конвертирует данные из БД в Lifelength /// </summary> /// <param name="data"></param> public static Lifelength ConvertFromByteArray(byte[] data) { Lifelength item = new Lifelength(); byte[] binaryData = data; if (null == binaryData) { return(null); } if (binaryData == null || binaryData.Length != SerializedDataLength) { return(null); //на случай если -1 пришел } //throw new ArgumentException("Data cannot be converted to Lifelength"); item.Cycles = DbTypes.Int32FromByteArray(binaryData, 1); var calendar = DbTypes.Int64FromByteArray(binaryData, 5); var cal = new TimeSpan(calendar); item.CalendarSpan = new CalendarSpan(cal.Days, (CalendarTypes)cal.Milliseconds); var ticks = DbTypes.Int64FromByteArray(binaryData, 13); var ts = new TimeSpan(ticks); item.TotalMinutes = ts.Minutes + ((int)ts.TotalHours) * 60; if ((binaryData[0] & 1) == 0) { item.Days = null; } if ((binaryData[0] >> 1 & 1) == 0) { item.Cycles = null; } if ((binaryData[0] >> 2 & 1) == 0) { item.Hours = null; } return(item); }
/// <summary> /// Метод проверяет, является ли данная наработка меньше заданной по любому из трех параметров /// </summary> /// <param name="lifelength"></param> /// <returns></returns> public bool IsLessByAnyParameter(Lifelength lifelength) { //Cycles if (Cycles != null && lifelength.Cycles != null && Cycles < lifelength.Cycles) { return(true); } // TotalMinutes if (TotalMinutes != null && lifelength.TotalMinutes != null && TotalMinutes < lifelength.TotalMinutes) { return(true); } // Days if (Days != null && lifelength.Days != null && Days < lifelength.Days) { return(true); } return(false); }
/// <summary> /// По выходу объект будет представлять содержитать минимальных ресурсов от обоих объектов (whichever first) /// </summary> /// <param name="candidate"></param> public void SetMin(Lifelength candidate) { // Если у кандидата циклы меньше чем у текущего объекта - присваиваем минимальные циклы if (candidate.Cycles != null && (Cycles == null || Cycles > candidate.Cycles)) { Cycles = candidate.Cycles; } // то же по часам if (candidate.TotalMinutes != null && (TotalMinutes == null || TotalMinutes > candidate.TotalMinutes)) { TotalMinutes = candidate.TotalMinutes; } // то же по календарю if (candidate.Days != null && (Days == null || Days > candidate.Days)) { Days = candidate.Days; } }
/* * Арифметика */ #region public bool IsGreaterByAnyParameter(Lifelength lifelength) /// <summary> /// Метод проверяет, является ли данная наработка больше заданной по любому из трех параметров /// </summary> /// <param name="lifelength"></param> /// <returns></returns> public bool IsGreaterByAnyParameter(Lifelength lifelength) { // 10, 10, 10 > 5, 5, 5 // 10, 10, 10 > 5, 20, 5 //Cycles if (Cycles != null && lifelength.Cycles != null && Cycles > lifelength.Cycles) { return(true); } // TotalMinutes if (TotalMinutes != null && lifelength.TotalMinutes != null && TotalMinutes > lifelength.TotalMinutes) { return(true); } // Days if (Days != null && lifelength.Days != null && Days > lifelength.Days) { return(true); } return(false); }
/// <summary> /// Прибавляет заданную наработку к уже существующей /// </summary> /// <param name="from"></param> /// <param name="lifelength"></param> public void Add(DateTime from, Lifelength lifelength) { // прибавляем к this // null + cycles = cycles // cycles + null = cycles // null + null = null // cycles + cycles = cycles + cycles if (Cycles == null && lifelength.Cycles != null) { Cycles = lifelength.Cycles; } else if (Cycles != null && lifelength.Cycles != null) { Cycles += lifelength.Cycles; } if (TotalMinutes == null && lifelength.TotalMinutes != null) { TotalMinutes = lifelength.TotalMinutes; } else if (TotalMinutes != null && lifelength.TotalMinutes != null) { TotalMinutes += lifelength.TotalMinutes; } if (CalendarValue == null && lifelength.CalendarValue != null) { DateTime to = from.AddCalendarSpan(lifelength.CalendarSpan); Days = (to - from).Days; } else if (Days != null && lifelength.Days != null) { DateTime to = from.AddCalendarSpan(lifelength.CalendarSpan); Days += (to - from).Days; } }
/// <summary> /// Получает свойства из массива байт /// </summary> /// <param name="data"></param> /// <param name="serializedDataLength"></param> public static Threshold ConvertForComponentDirective(byte[] data) { var item = new Threshold(); if (data == null) { data = new byte[SerializedDataLengthComponentDirective]; } var serializedFirstPerformance = new byte[Lifelength.SerializedDataLength]; Array.Copy(data, 0, serializedFirstPerformance, 0, Lifelength.SerializedDataLength); item.FirstPerformanceSinceNew = Lifelength.ConvertFromByteArray(serializedFirstPerformance); var serializedFirstNotification = new byte[Lifelength.SerializedDataLength]; Array.Copy(data, Lifelength.SerializedDataLength, serializedFirstNotification, 0, Lifelength.SerializedDataLength); item.FirstNotification = Lifelength.ConvertFromByteArray(serializedFirstNotification); var serializedrepeatPerform = new byte[Lifelength.SerializedDataLength]; Array.Copy(data, Lifelength.SerializedDataLength * 2, serializedrepeatPerform, 0, Lifelength.SerializedDataLength); item.RepeatInterval = Lifelength.ConvertFromByteArray(serializedrepeatPerform); var serializedNotification = new byte[Lifelength.SerializedDataLength]; Array.Copy(data, Lifelength.SerializedDataLength * 3, serializedNotification, 0, Lifelength.SerializedDataLength); item.RepeatNotification = Lifelength.ConvertFromByteArray(serializedNotification); var serializedWarranty = new byte[Lifelength.SerializedDataLength]; Array.Copy(data, Lifelength.SerializedDataLength * 4, serializedWarranty, 0, Lifelength.SerializedDataLength); item.Warranty = Lifelength.ConvertFromByteArray(serializedWarranty); var serializedWarrantyNotification = new byte[Lifelength.SerializedDataLength]; Array.Copy(data, Lifelength.SerializedDataLength * 5, serializedWarrantyNotification, 0, Lifelength.SerializedDataLength); item.WarrantyNotification = Lifelength.ConvertFromByteArray(serializedWarrantyNotification); item.PerformRepeatedly = data[Lifelength.SerializedDataLength * 6] == 1; item.FirstPerformanceConditionType = data[Lifelength.SerializedDataLength * 6 + 1] == 1 ? ThresholdConditionType.WhicheverLater : ThresholdConditionType.WhicheverFirst; // если еще есть данные то рекурсивно считываем и его var dataIndex = SerializedDataLengthComponentDirective; var dataLeft = data.Length - dataIndex; if (dataLeft >= sizeof(long)) { var serializedEffectivityDate = new byte[sizeof(long)]; Array.Copy(data, dataIndex, serializedEffectivityDate, 0, sizeof(long)); item.EffectiveDate = new DateTime(DbTypes.Int64FromByteArray(serializedEffectivityDate, 0)); } dataLeft -= sizeof(long); dataIndex += sizeof(long); if (dataLeft >= Lifelength.SerializedDataLength) { var serializedRepeatNotificaction = new byte[Lifelength.SerializedDataLength]; Array.Copy(data, dataIndex, serializedRepeatNotificaction, 0, Lifelength.SerializedDataLength); item.FirstPerformanceSinceEffectiveDate = Lifelength.ConvertFromByteArray(serializedRepeatNotificaction); } return(item); }
/// <summary> /// Получает свойства из массива байт /// </summary> /// <param name="data"></param> public static Threshold ConvertForDirective(byte[] data) { Threshold item = new Threshold(); if (data == null) { data = new byte[SerializedDataLength]; } byte[] serializedEffectivityDate = new byte[sizeof(long)]; Array.Copy(data, 0, serializedEffectivityDate, 0, sizeof(long)); item.EffectiveDate = new DateTime(DbTypes.Int64FromByteArray(serializedEffectivityDate, 0)); byte[] serializedPerformSinceNew = new byte[Lifelength.SerializedDataLength]; Array.Copy(data, sizeof(long), serializedPerformSinceNew, 0, Lifelength.SerializedDataLength); item.FirstPerformanceSinceNew = Lifelength.ConvertFromByteArray(serializedPerformSinceNew); byte[] serializedrepeatPerform = new byte[Lifelength.SerializedDataLength]; Array.Copy(data, sizeof(long) + Lifelength.SerializedDataLength, serializedrepeatPerform, 0, Lifelength.SerializedDataLength); item.RepeatInterval = Lifelength.ConvertFromByteArray(serializedrepeatPerform); byte[] serializedNotification = new byte[Lifelength.SerializedDataLength]; Array.Copy(data, sizeof(long) + Lifelength.SerializedDataLength * 2, serializedNotification, 0, Lifelength.SerializedDataLength); item.FirstNotification = Lifelength.ConvertFromByteArray(serializedNotification); item.PerformSinceNew = data[sizeof(long) + Lifelength.SerializedDataLength * 3] == 1; item.PerformSinceEffectiveDate = data[sizeof(long) + Lifelength.SerializedDataLength * 3 + 1] == 1; item.PerformRepeatedly = data[sizeof(long) + Lifelength.SerializedDataLength * 3 + 2] == 1; byte[] serializedSinceEffectivityLifelength = new byte[Lifelength.SerializedDataLength]; Array.Copy(data, sizeof(long) + Lifelength.SerializedDataLength * 3 + 3, serializedSinceEffectivityLifelength, 0, Lifelength.SerializedDataLength); item.FirstPerformanceSinceEffectiveDate = Lifelength.ConvertFromByteArray(serializedSinceEffectivityLifelength); // если у нас еще есть данные то рекурсивно считываем и его int dataIndex = SerializedDataLength; int dataLeft = data.Length - SerializedDataLength; if (dataLeft >= Lifelength.SerializedDataLength) { byte[] serializedRepeatNotificaction = new byte[Lifelength.SerializedDataLength]; Array.Copy(data, sizeof(long) + Lifelength.SerializedDataLength * 4 + 3, serializedRepeatNotificaction, 0, Lifelength.SerializedDataLength); item.RepeatNotification = Lifelength.ConvertFromByteArray(serializedRepeatNotificaction); dataLeft -= Lifelength.SerializedDataLength; dataIndex += Lifelength.SerializedDataLength; } if (dataLeft >= sizeof(byte)) { item.FirstPerformanceConditionType = data[dataIndex] == 0 ? ThresholdConditionType.WhicheverFirst : ThresholdConditionType.WhicheverLater; dataLeft -= sizeof(byte); dataIndex += sizeof(byte); } if (dataLeft >= sizeof(byte)) { item.RepeatPerformanceConditionType = data[dataIndex] == 0 ? ThresholdConditionType.WhicheverFirst : ThresholdConditionType.WhicheverLater; } return(item); }
/// <summary> /// Отнимает заданную наработку от уже существующей /// </summary> /// <param name="lifelength"></param> public void Substract(Lifelength lifelength) { Lifelength lifelength2 = new Lifelength(-lifelength.Days, -lifelength.Cycles, -lifelength.TotalMinutes); Add(lifelength2); }