/// <summary> /// Преобразование входных для расчета значений в структуры, пригодные для производства расчетов /// </summary> /// <param name="pAlg">Объект - словарь структур для расчета</param> /// <param name="tablePar">Таблица с параметрами</param> /// <param name="tableVal">Таблица со значениями</param> protected int initValues(P_ALG pAlg, DataTable tablePar, DataTable tableVal) { int iRes = 0; //Предположение, что ошибки нет DataRow[] rVal = null; int idPut = -1 , idComponent = -1; string strNAlg = string.Empty; pAlg.Clear(); // цикл по всем параметрам расчета foreach (DataRow rPar in tablePar.Rows) { // найти соответствие параметра в алгоритме расчета и значения для него idPut = (int)rPar[@"ID"]; // идентификатор параметра в алгоритме расчета - ключ для словаря с его характеристиками strNAlg = ((string)rPar[@"N_ALG"]).Trim(); rVal = tableVal.Select(@"ID_PUT=" + idPut); // проверить успешность нахождения соответствия if (rVal.Length == 1) { if (pAlg.ContainsKey(strNAlg) == false) {// добавить параметр в алгоритме расчета pAlg.Add(strNAlg, new P_ALG.P_PUT()); pAlg[strNAlg].m_sAVG = (Int16)rPar[@"AVG"]; pAlg[strNAlg].m_bDeny = false; } else { ; } // идентификатор компонента станции - ключ для словаря со значением и характеристиками для него idComponent = (int)rPar[@"ID_COMP"]; if (pAlg[strNAlg].ContainsKey(idComponent) == false) { pAlg[strNAlg].Add(idComponent, new P_ALG.P_PUT.P_VAL() // добавить параметр компонента в алгоритме расчета { m_iId = idPut //, m_iIdComponent = idComponent , m_bDeny = false , value = (float)(double)rVal[0][@"VALUE"] , m_sQuality = ID_QUALITY_VALUE.DEFAULT // не рассчитывался , m_idRatio = (int)rPar[@"ID_RATIO"] , m_fMinValue = (rPar[@"MINVALUE"] is DBNull) ? 0 : (float)rPar[@"MINVALUE"] //??? - ошибка д.б. float , m_fMaxValue = (rPar[@"MAXVALUE"] is DBNull) ? 0 : (float)rPar[@"MAXVALUE"] //??? - ошибка д.б. float }); } else { ; } } else {// ошибка - не найдено соответствие параметр-значение iRes = -1; Logging.Logg().Error(@"TaskCalculate::initValues (ID_PUT=" + idPut + @") - не найдено соответствие параметра и значения...", Logging.INDEX_MESSAGE.NOT_SET); } } return(iRes); }
protected int initValues(P_ALG pAlg , IEnumerable <HandlerDbTaskCalculate.NALG_PARAMETER> listNAlg , IEnumerable <HandlerDbTaskCalculate.PUT_PARAMETER> listPutPar , IEnumerable <VALUE> values) { int iRes = 0; NALG_PARAMETER nAlg; IEnumerable <VALUE> putValues; //VALUE value; P_ALG.KEY_P_VALUE keyPValue; foreach (PUT_PARAMETER putPar in listPutPar) { if (putPar.IsNaN == false) { nAlg = listNAlg.FirstOrDefault(item => { return(item.m_Id == putPar.m_idNAlg); }); putValues = values.Where(item => { return(item.m_IdPut == putPar.m_Id); }); if (!(nAlg == null)) { if (!(nAlg.m_Id < 0)) { foreach (VALUE value in putValues) { if ((value.m_IdPut > 0) /*&& (((value.stamp_value.Equals(DateTime.MinValue) == false)))*/) { if (pAlg.ContainsKey(nAlg.m_nAlg) == false) { pAlg.Add(nAlg.m_nAlg, new P_ALG.P_PUT(nAlg.m_Id, !nAlg.m_bEnabled, nAlg.m_sAverage)); } else { ; } keyPValue = new P_ALG.KEY_P_VALUE() { Id = putPar.IdComponent, Stamp = value.stamp_value }; if (pAlg[nAlg.m_nAlg].ContainsKey(keyPValue) == false) { pAlg[nAlg.m_nAlg].Add(keyPValue , new P_ALG.P_PUT.P_VALUE() { m_iId = putPar.m_Id , m_bDeny = !putPar.IsEnabled , m_idRatio = putPar.m_prjRatio , m_sQuality = (value.stamp_value.Equals(DateTime.MinValue) == false) ? value.m_iQuality : ID_QUALITY_VALUE.NOT_REC , value = (value.stamp_value.Equals(DateTime.MinValue) == false) ? value.value : 0F , m_fMinValue = putPar.m_fltMinValue , m_fMaxValue = putPar.m_fltMaxValue }); } else { // для параметра 1-го порядка уже содержится значение параметра 2-го порядка ; } } else { // некорректный параметр расчета 2-го порядка ; } } } else { // не найден либо параметр 1-го порядка, либо значение для параметра 2-го порядка ; } } else { // не найден параметр 1-го порядка (не ошибка - возможно putPar для другого типа расчета) ; } } else { // параметр 2-го порядка не достоверен ; } } return(iRes); }