/// <summary> /// Пишем информацию о смене счетчика /// </summary> /// <param name="integralActTi"></param> /// <param name="row"></param> /// <param name="comment"></param> /// <param name="tiNum"></param> /// <param name="channelName"></param> /// <param name="firstVal"></param> /// <param name="lastVal"></param> /// <returns></returns> public bool WriteChangePuInfo(List <TMetersTO_Information> metersInformations, string name, double voltage, StringBuilder comment, int tiNum, string channelName, TINTEGRALVALUES_DB firstVal, TINTEGRALVALUES_DB lastVal ) { if (metersInformations == null || metersInformations.Count == 0) { return(false); } var to = metersInformations.First(); //Первая запись if (string.IsNullOrEmpty(to.MeterSerialNumberBefo)) { //Это начало действия нового стчетчика comment.AppendFormat("Установка ПУ №{0}\n" + "дата установки {1:dd.MM.yyyy HH:mm}\n" + "первое значение после установки{2:" + IntegralFormat + "}\n", to.MeterSerialNumberAfter, to.ExchangeDateTime, to.DataAfter / (double)_paramIntegralAct.UnitDigit); } else { comment.AppendFormat("Замена ПУ №{0} на №{1}\n" + "дата замены {2:dd.MM.yyyy HH:mm}\n" + "последнее значение перед заменой {3:0.#######}\n" + "первое значение после замены {4:0.#######}\n", to.MeterSerialNumberBefo, to.MeterSerialNumberAfter, to.ExchangeDateTime, to.DataBefo / (double)_paramIntegralAct.UnitDigit, to.DataAfter / (double)_paramIntegralAct.UnitDigit); SetRowHeight(Row, 2 * 250); //Информация до смены SetCellValue(Row, StartCol + 3, to.MeterSerialNumberBefo + " ", CenterFormatThin); //старый номер ПУ SetCellValue(Row, StartCol + 5, to.DataBefo / (double)_paramIntegralAct.UnitDigit, IntegralFormat); // показания старого ПУ на начало периода if (firstVal != null) { SetCellValue(Row, StartCol + 6, (firstVal.F_VALUE) / (double)_paramIntegralAct.UnitDigit, IntegralFormat); // последние данные старого ПУ if ((firstVal.F_FLAG & VALUES_FLAG_DB.AllAlarmStatuses) != VALUES_FLAG_DB.None || (firstVal.EventDateTime - _paramIntegralAct.DTStart).TotalDays > 1) { SetCellBkColor(Row, StartCol + 6, _noDrumsColor); SetComment(Row, StartCol + 6, firstVal.EventDateTime.ToString("dd.MM.yyyy HH:mm") + " :\n" + firstVal.F_FLAG.FlagToString("\n")); SetCommentProperties(Row, StartCol + 6, _commentProps); } } SetCellFloatValue(Row, StartCol + 7, to.IntDataBefor / (double)_paramIntegralAct.UnitDigit, true, need0: false); // Разница SetCellFloatValue(Row, StartCol + 8, to.CoeffTransformationBefo, true, need0: false); // Коэффициент ПУ до смены SetCellValue(Row, StartCol + 9, to.HhDataBefor / (double)_paramIntegralAct.UnitDigit, IntegralFormat); // Получасовки до смены //if (isInterval) SetCellValue(Row, StartCol + 10, to.HhDataBefor, IntegralFormat); // Получасовки до смены Row++; } //промежуточные записи foreach (var po in metersInformations.Skip(1).Take(metersInformations.Count - 1)) { comment.AppendFormat("Замена ПУ №{0} на №{1}\n" + "дата замены {2:dd.MM.yyyy HH:mm}\n" + "последнее значение перед заменой {3:0.#######}\n" + "первое значение после замены {4:0.#######}\n", po.MeterSerialNumberBefo, po.MeterSerialNumberAfter, po.ExchangeDateTime, po.DataBefo / (double)_paramIntegralAct.UnitDigit, po.DataAfter / (double)_paramIntegralAct.UnitDigit); SetRowHeight(Row, 2 * 250); //Информация до смены SetCellValue(Row, StartCol + 1, name + " после замены ", LeftFormatThin); SetCellValue(Row, StartCol + 2, voltage, CenterFormatThin); SetCellValue(Row, StartCol + 3, po.MeterSerialNumberBefo + " ", CenterFormatThin); //старый номер ПУ SetCellValue(Row, StartCol + 4, channelName, CenterFormatThin); SetCellValue(Row, StartCol + 5, po.DataBefo / (double)_paramIntegralAct.UnitDigit, IntegralFormat); // показания старого ПУ на начало периода SetCellValue(Row, StartCol + 6, to.DataAfter / (double)_paramIntegralAct.UnitDigit, IntegralFormat); // последние данные старого ПУ SetCellFloatValue(Row, StartCol + 7, po.IntDataBefor / (double)_paramIntegralAct.UnitDigit, true, need0: false); // Разница SetCellFloatValue(Row, StartCol + 8, po.CoeffTransformationBefo, true, need0: false); // Коэффициент ПУ до смены SetCellValue(Row, StartCol + 9, po.IntDataBefor / (double)_paramIntegralAct.UnitDigit * po.CoeffTransformationBefo, IntegralFormat); // Получасовки до смены to = po; //Сохраняем предыдущее Row++; } //Последняя запись to = metersInformations.Last(); SetRowHeight(Row, 2 * 250); //Последняя строка со значениями после смены //SetCellValue(Row, _startCol, tiNum, 0); SetCellValue(Row, StartCol + 1, name + " после замены ", LeftFormatThin); SetCellValue(Row, StartCol + 2, voltage, CenterFormatThin); //SetCellAlignH(xls, Row, startCol + 2, THFlxAlignment.center); SetCellValue(Row, StartCol + 4, channelName, CenterFormatThin); SetCellValue(Row, StartCol + 3, to.MeterSerialNumberAfter + " ", CenterFormatThin); //новый номер ПУ SetCellValue(Row, StartCol + 6, to.DataAfter / (double)_paramIntegralAct.UnitDigit, IntegralFormat); // показания нового ПУ на конец периода if (lastVal != null) { SetCellValue(Row, StartCol + 5, (lastVal.F_VALUE) / (double)_paramIntegralAct.UnitDigit, IntegralFormat); // Первые данные после смены if ((lastVal.F_FLAG & VALUES_FLAG_DB.AllAlarmStatuses) != VALUES_FLAG_DB.None || (_paramIntegralAct.DTEnd - lastVal.EventDateTime).TotalDays > 1) { SetCellBkColor(Row, StartCol + 5, _noDrumsColor); SetComment(Row, StartCol + 5, lastVal.EventDateTime.ToString("dd.MM.yyyy HH:mm") + " :\n" + lastVal.F_FLAG.FlagToString("\n")); SetCommentProperties(Row, StartCol + 5, _commentProps); } } SetCellFloatValue(Row, StartCol + 7, to.HhDataAfter / (double)_paramIntegralAct.UnitDigit / to.CoeffTransformationAfter, true, need0: Need0); // Разница показаний SetCellFloatValue(Row, StartCol + 8, to.CoeffTransformationAfter, true, need0: false); // Коэффициент ПУ после смены SetCellValue(Row, StartCol + 9, to.HhDataAfter / (double)_paramIntegralAct.UnitDigit, IntegralFormat); // Получасовки после смены return(true); }
/// <summary> /// Пишем интегралы /// </summary> /// <param name="firstVal"></param> /// <param name="lastVal"></param> /// <param name="metersDelta"></param> /// <param name="deltaValWithCoeff"></param> /// <param name="dtStart"></param> /// <param name="dtEnd"></param> /// <param name="commentProps"></param> public void WriteIntegralInfo(TINTEGRALVALUES_DB firstVal, TINTEGRALVALUES_DB lastVal, double metersDelta, double deltaValWithCoeff, StringBuilder comment) { var coeffUnit = ((double)_paramIntegralAct.UnitDigit); var isIntegralThroughZero = false; if (lastVal != null) { SetCellFloatValue(Row, StartCol + 5, ((lastVal.F_VALUE) / coeffUnit), true, need0: Need0); // на конеч if ((lastVal.F_FLAG & VALUES_FLAG_DB.AllAlarmStatuses) != VALUES_FLAG_DB.None || (_paramIntegralAct.DTEnd - lastVal.EventDateTime).TotalDays > 1) { SetCellBkColor(Row, StartCol + 5, _noDrumsColor); SetComment(Row, StartCol + 5, lastVal.EventDateTime.ToString("dd.MM.yyyy HH:mm") + " :\n" + lastVal.F_FLAG.FlagToString("\n")); SetCommentProperties(Row, StartCol + 5, _commentProps); } if (lastVal.F_FLAG.HasFlag(VALUES_FLAG_DB.IsIntegralThroughZero)) //Обработка перехода через 0 { isIntegralThroughZero = true; SetCellBkColor(Row, StartCol + 5, _noDrumsColor); SetComment(Row, StartCol + 5, lastVal.F_FLAG.FlagToString("\n")); SetCommentProperties(Row, StartCol + 5, _commentProps); } } else { SetComment(Row, StartCol + 5, "Показание не найдено, или отсутствует"); SetCellFormat(Row, StartCol + 5, IntegralFormat); SetCellBkColor(Row, StartCol + 5, _noDrumsColor); } if (firstVal != null) { SetCellFloatValue(Row, StartCol + 6, ((firstVal.F_VALUE) / coeffUnit), true, need0: Need0); // на начало if ((firstVal.F_FLAG & VALUES_FLAG_DB.AllAlarmStatuses) != VALUES_FLAG_DB.None || (firstVal.EventDateTime - _paramIntegralAct.DTStart).TotalDays > 1) { SetCellBkColor(Row, StartCol + 6, _noDrumsColor); SetComment(Row, StartCol + 6, firstVal.EventDateTime.ToString("dd.MM.yyyy HH:mm") + " :\n" + firstVal.F_FLAG.FlagToString("\n")); SetCommentProperties(Row, StartCol + 6, _commentProps); } if (firstVal.F_FLAG.HasFlag(VALUES_FLAG_DB.IsIntegralThroughZero)) //Обработка перехода через 0 { isIntegralThroughZero = true; SetCellBkColor(Row, StartCol + 6, _noDrumsColor); SetComment(Row, StartCol + 6, firstVal.F_FLAG.FlagToString("\n")); SetCommentProperties(Row, StartCol + 6, _commentProps); } } else { SetComment(Row, StartCol + 6, "Показание не найдено, или отсутствует"); SetCellFormat(Row, StartCol + 6, IntegralFormat); SetCellBkColor(Row, StartCol + 6, _noDrumsColor); } SetCellFloatValue(Row, StartCol + 7, metersDelta / coeffUnit, true, need0: Need0); // разность SetCellFloatValue(Row, StartCol + 9, deltaValWithCoeff / coeffUnit, true, need0: Need0); //Количество энергии учтеной ПУ //Считаем сумму барабанов //drumVal += iVal.DiffWithCoeff / 1000; //Достоверность для ПУ if (firstVal == null || firstVal.F_FLAG.HasFlag(VALUES_FLAG_DB.DataNotFull) || lastVal == null || lastVal.F_FLAG.HasFlag(VALUES_FLAG_DB.DataNotFull)) { SetCellBkColor(Row, StartCol + 9, _noDrumsColor); } else if (firstVal.F_FLAG.HasFlag(VALUES_FLAG_DB.UpToTimeZone) || lastVal.F_FLAG.HasFlag(VALUES_FLAG_DB.UpToTimeZone)) { SetCellBkColor(Row, StartCol + 9, _offsetFromMoscowEnbledForDrumsColor); SetComment(Row, StartCol + 9, (firstVal.F_FLAG | lastVal.F_FLAG).FlagToString("\n")); SetCommentProperties(Row, StartCol + 9, _commentProps); } if (isIntegralThroughZero) { comment.Append("Переход через 0\n"); } }