/// <summary> /// Расчитать выходные-нормативные значения для задачи "Расчет ТЭП" /// , сохранить значения во временной таблице для возможности предварительного просмотра результата /// </summary> public void Calculate(TaskCalculate.TYPE type) { int err = -1 , iRegDbConn = -1; DataTable tableOrigin = null , tableCalcRes = null; TaskTepCalculate.ListDATATABLE listDataTables = null; // регистрация соединения с БД RegisterDbConnection(out iRegDbConn); if (!(iRegDbConn < 0)) { switch (IdTask) { case ID_TASK.TEP: // подготовить таблицы для расчета listDataTables = prepareTepCalculateValues(type, out err); if (err == 0) { // произвести вычисления switch (type) { case TaskCalculate.TYPE.OUT_TEP_NORM_VALUES: tableOrigin = listDataTables.FindDataTable(TaskCalculate.INDEX_DATATABLE.OUT_NORM_VALUES); tableCalcRes = (m_taskCalculate as TaskTepCalculate).CalculateNormative(listDataTables); break; case TaskCalculate.TYPE.OUT_VALUES: tableCalcRes = (m_taskCalculate as TaskTepCalculate).CalculateMaket(listDataTables); break; default: break; } // сохранить результаты вычисления saveResult(tableOrigin, tableCalcRes, out err); } else { Logging.Logg().Error(@"HandlerDbTaskCalculate::Calculate () - при подготовке данных для расчета...", Logging.INDEX_MESSAGE.NOT_SET); } break; default: Logging.Logg().Error(@"HandlerDbTaskCalculate::Calculate () - неизвестный тип задачи расчета...", Logging.INDEX_MESSAGE.NOT_SET); break; case ID_TASK.AUTOBOOK: break; } } else { Logging.Logg().Error(@"HandlerDbTaskCalculate::Calculate () - при регистрации соединения...", Logging.INDEX_MESSAGE.NOT_SET); } // отмена регистрации БД - только, если регистрация произведена в текущем контексте if (!(iRegDbConn > 0)) { UnRegisterDbConnection(); } else { ; } }
/// <summary> /// Подготовить таблицы для проведения расчета /// </summary> /// <param name="err">Признак ошибки при выполнении функции</param> /// <returns>Массив таблиц со значенями для расчета</returns> private TaskTepCalculate.ListDATATABLE prepareTepCalculateValues(TaskCalculate.TYPE type, out int err) { TaskTepCalculate.ListDATATABLE listRes = new TaskTepCalculate.ListDATATABLE(); err = -1; //long idSession = -1; DataTable tableVal = null; if (isRegisterDbConnection == true) { // проверить наличие сессии if (_Session.m_Id > 0) { // получить таблицу со значеняими нормативных графиков tableVal = GetDataTable(INDEX_DBTABLE_NAME.FTABLE, out err); listRes.Add(new TaskTepCalculate.DATATABLE() { m_indx = TaskTepCalculate.INDEX_DATATABLE.FTABLE, m_table = tableVal.Copy() }); // получить описание входных парметров в алгоритме расчета tableVal = Select(GetQueryParameters(TaskCalculate.TYPE.IN_VALUES), out err); listRes.Add(new TaskTepCalculate.DATATABLE() { m_indx = TaskTepCalculate.INDEX_DATATABLE.IN_PARAMETER, m_table = tableVal.Copy() }); // получить входные значения для сессии tableVal = GetValuesVar(TaskCalculate.TYPE.IN_VALUES, out err); listRes.Add(new TaskTepCalculate.DATATABLE() { m_indx = TaskTepCalculate.INDEX_DATATABLE.IN_VALUES, m_table = tableVal.Copy() }); if (IdTask == ID_TASK.TEP) { // получить описание выходных-нормативных парметров в алгоритме расчета tableVal = Select(GetQueryParameters(TaskCalculate.TYPE.OUT_TEP_NORM_VALUES), out err); listRes.Add(new TaskTepCalculate.DATATABLE() { m_indx = TaskTepCalculate.INDEX_DATATABLE.OUT_NORM_PARAMETER, m_table = tableVal.Copy() }); // получить выходные-нормативные значения для сессии tableVal = GetValuesVar(TaskCalculate.TYPE.OUT_TEP_NORM_VALUES, out err); listRes.Add(new TaskTepCalculate.DATATABLE() { m_indx = TaskTepCalculate.INDEX_DATATABLE.OUT_NORM_VALUES, m_table = tableVal.Copy() }); } else { ; } if (type == TaskCalculate.TYPE.OUT_VALUES) {// дополнительно получить описание выходных-нормативных параметров в алгоритме расчета tableVal = Select(GetQueryParameters(TaskCalculate.TYPE.OUT_VALUES), out err); listRes.Add(new TaskTepCalculate.DATATABLE() { m_indx = TaskTepCalculate.INDEX_DATATABLE.OUT_PARAMETER, m_table = tableVal.Copy() }); // получить выходные значения для сессии tableVal = GetValuesVar(TaskCalculate.TYPE.OUT_VALUES, out err); listRes.Add(new TaskTepCalculate.DATATABLE() { m_indx = TaskTepCalculate.INDEX_DATATABLE.OUT_VALUES, m_table = tableVal.Copy() }); } else { ; } } else { Logging.Logg().Error(@"HandlerDbTaskCalculate::prepareTepCalculateValues () - при получении идентифкатора сессии расчета...", Logging.INDEX_MESSAGE.NOT_SET); } } else { ; // ошибка при регистрации соединения с БД } return(listRes); }