/// <summary> /// Получение плановых значений /// </summary> /// <param name="type"></param> /// <param name="arQueryRanges">отрезок времени</param> /// <param name="idPeriod">период времени</param> /// <param name="err"></param> /// <returns>таблица значений</returns> public DataTable getPlanOnMonth(TaskCalculate.TYPE type , DateTimeRange[] arQueryRanges , ID_PERIOD idPeriod, out int err) { string strQuery = string.Empty; for (int i = 0; i < arQueryRanges.Length; i++) { strQuery = "SELECT p.ID as ID_PUT" + @", " + _Session.m_Id + @" as [ID_SESSION]" + @", v.QUALITY as QUALITY, v.VALUE as VALUE" + @",v.DATE_TIME as WR_DATETIME, ROW_NUMBER() OVER(ORDER BY p.ID) as [EXTENDED_DEFINITION] " + @" FROM [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.ALG) + "] a" + @" LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.PUT) + "] p" + @" ON a.ID = p.ID_ALG" + @" LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.VALUE) + @"_" + arQueryRanges[i].Begin.ToString(@"yyyyMM") + @"] v " + @" ON v.ID_PUT = p.ID" + @" WHERE ID_TASK = " + (int)IdTask + @" AND [DATE_TIME] >= '" + arQueryRanges[i].Begin.ToString(@"yyyyMMdd HH:mm:ss") + @"'" + @" AND [DATE_TIME] < '" + arQueryRanges[i].End.AddMonths(1).ToString(@"yyyyMMdd HH:mm:ss") + @"'" + @" AND v.ID_TIME = 24"; } return(Select(strQuery, out err)); }
/// <summary> /// Получение корр. входных значений /// из INVAL /// </summary> /// <param name="type">тип задачи</param> /// <param name="arQueryRanges"></param> /// <param name="idPeriod">тек. период</param> /// <param name="err">Индентификатор ошибки</param> /// <returns>таблица значений</returns> public DataTable GetInVal(TaskCalculate.TYPE type , DateTimeRange[] arQueryRanges , ID_PERIOD idPeriod , out int err) { string strQuery = string.Empty; bool bLastItem = false; for (int i = 0; i < arQueryRanges.Length; i++) { bLastItem = !(i < (arQueryRanges.Length - 1)); strQuery += @"SELECT v.ID, v.ID_PUT, v.ID_USER, v.ID_SOURCE, v.DATE_TIME, v.ID_TIME" + ", v.ID_TIMEZONE, v.QUALITY, v.VALUE, v.WR_DATETIME" + @" FROM [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.ALG) + "] a" + @" LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.PUT) + "] p" + @" ON a.ID = p.ID_ALG" + @" LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.VALUE) + @"_" + arQueryRanges[i].End.ToString(@"yyyyMM") + @"] v" + @" ON v.ID_PUT = p.ID" + @" WHERE ID_TASK = " + (int)IdTask + @" AND [DATE_TIME] > '" + arQueryRanges[i].Begin.ToString(@"yyyyMMdd HH:mm:ss") + @"'" + @" AND [DATE_TIME] <= '" + arQueryRanges[i].End.ToString(@"yyyyMMdd HH:mm:ss") + @"'" + @" AND v.ID_TIME = " + (int)idPeriod + @" AND ID_TIMEZONE = " + (int)_Session.m_currIdTimezone; if (bLastItem == false) { strQuery += @" UNION ALL "; } } strQuery += @" ORDER BY [DATE_TIME] "; return(Select(strQuery, out err)); }
/// <summary> /// Вставить в таблицу БД идентификатор новой сессии /// </summary> /// <param name="id">Идентификатор сессии</param> /// <param name="idPeriod">Идентификатор периода расчета</param> /// <param name="cntBasePeriod">Количество базовых периодов расчета в интервале расчета</param> /// <param name="idTimezone">Идентификатор часового пояса</param> /// <param name="dtRange">Диапазон даты/времени для интервала расчета</param> /// <param name="err">Идентификатор ошибки при выполнеинии функции</param> private void insertIdSession(int id , ID_PERIOD idPeriod , int cntBasePeriod , ID_TIMEZONE idTimezone , DateTimeRange dtRange , out int err) { err = -1; string strQuery = string.Empty; // подготовить содержание запроса при вставке значений, идентифицирующих новую сессию strQuery = @"INSERT INTO " + HandlerDbTaskCalculate.s_NameDbTables[(int)INDEX_DBTABLE_NAME.SESSION] + @" (" + @"[ID_CALCULATE]" + @", [ID_TASK]" + @", [ID_USER]" + @", [ID_TIME]" + @", [ID_TIMEZONE]" + @", [DATETIME_BEGIN]" + @", [DATETIME_END]) VALUES (" ; strQuery += id; strQuery += @"," + (int)ID_TASK.TEP; strQuery += @"," + HTepUsers.Id; strQuery += @"," + (int)idPeriod; strQuery += @"," + (int)idTimezone; strQuery += @",'" + dtRange.Begin.ToString(System.Globalization.CultureInfo.InvariantCulture) + @"'"; // @"yyyyMMdd HH:mm:ss" strQuery += @",'" + dtRange.End.ToString(System.Globalization.CultureInfo.InvariantCulture) + @"'"; // @"yyyyMMdd HH:mm:ss" strQuery += @")"; //Вставить в таблицу БД строку с идентификтором новой сессии DbTSQLInterface.ExecNonQuery(ref _dbConnection, strQuery, null, null, out err); }
public void Initialize(long id, ID_PERIOD idPeriod, ID_TIMEZONE idTimezone, int curOffsetUTC, DateTimeRange rangeDatetime) { m_Id = id; m_currIdPeriod = idPeriod; m_currIdTimezone = idTimezone; m_curOffsetUTC = curOffsetUTC; m_rangeDatetime = rangeDatetime; }
/// <summary> /// Возвратить объект-таблицу со значенями по умолчанию /// </summary> /// <param name="idPeriod">Идентификатор </param> /// <param name="err">Признак выполнения функции</param> /// <returns>Объект-таблица со значенями по умолчанию</returns> public DataTable GetValuesDef(ID_PERIOD idPeriod, out int err) { DataTable tableRes = new DataTable(); err = -1; tableRes = DbTSQLInterface.Select(ref _dbConnection, getQueryValuesDef(idPeriod), null, null, out err); return(tableRes); }
protected override DataTable getDefaultTableValues(ID_PERIOD idPeriod, out int err) { DataTable tableRes = new DataTable(); err = -1; tableRes = base.getDefaultTableValues(idPeriod, out err); return(tableRes); }
/// <summary> /// Возвратить объект-таблицу со значенями по умолчанию /// </summary> /// <param name="idPeriod">Идентификатор </param> /// <param name="err">Признак выполнения функции</param> /// <returns>Объект-таблица со значенями по умолчанию</returns> public override DataTable GetValuesDef(ID_PERIOD idPeriod, out int err) { DataTable tableRes = new DataTable(); string query = @"SELECT d.[ID_PUT],d.[ID_TIME],d.[VALUE],d.[WR_ID_USER],d.[WR_DATETIME] from [TEP_NTEC_5].[dbo].[inalg] a left join [TEP_NTEC_5].[dbo].[input] i on a.id=i.ID_ALG inner join inval_def d on d.ID_PUT=i.ID where a.ID_TASK=2 and d.[ID_TIME] = " + (int)idPeriod; err = -1; tableRes = DbTSQLInterface.Select(ref _dbConnection, query, null, null, out err); return(tableRes); }
/// <summary> /// Запрос для получения значений "по умолчанию" /// </summary> private string getQueryValuesDef(ID_PERIOD idPeriod) { string strRes = string.Empty; strRes = @"SELECT" + @" *" + @" FROM [dbo].[" + HandlerDbTaskCalculate.s_NameDbTables[(int)INDEX_DBTABLE_NAME.INVAL_DEF] + @"] v" + @" WHERE [ID_TIME] = " + (int)idPeriod //(int)_currIdPeriod ; return(strRes); }
protected override DataTable getArchiveTableValues(TaskCalculate.TYPE type , ID_PERIOD idPeriod , int cntBasePeriod , ASUTP.Core.DateTimeRange [] arQueryRanges , out int err) { err = 0; DataTable tableRes = base.getArchiveTableValues(type, idPeriod, cntBasePeriod, arQueryRanges, out err); return(tableRes); }
/// <summary> /// Возвратить объект-таблицу со значениями из таблицы с сохраняемыми значениями из источников информации /// </summary> /// <param name="cntBasePeriod">Количество периодов расчета в интервале запрашиваемых данных</param> /// <param name="arQueryRanges">Массив диапазонов даты/времени - интервал(ы) заправшиваемых данных</param> /// <param name="err">Признак выполнения функции</param> /// <returns>Таблица со значенями</returns> public DataTable GetValuesVar(TaskCalculate.TYPE type , ID_PERIOD idPeriod , int cntBasePeriod , DateTimeRange[] arQueryRanges , out int err) { DataTable tableRes = new DataTable(); err = -1; tableRes = DbTSQLInterface.Select(ref _dbConnection , getQueryValuesVar(type , idPeriod , cntBasePeriod , arQueryRanges) , null, null , out err); return(tableRes); }
/// <summary> /// Установка периода /// </summary> /// <param name="idPeriod"></param> public DateTimeRange SetPeriod(ID_PERIOD idPeriod) { DateTimeRange rangeRes = new DateTimeRange(); HDateTimePicker hdtpBegin = Controls.Find(INDEX_CONTROL_BASE.HDTP_BEGIN.ToString(), true)[0] as HDateTimePicker , hdtpEnd = Controls.Find(INDEX_CONTROL_BASE.HDTP_END.ToString(), true)[0] as HDateTimePicker; //Выполнить запрос на получение значений для заполнения 'DataGridView' switch (idPeriod) { case ID_PERIOD.HOUR: break; case ID_PERIOD.DAY: break; case ID_PERIOD.MONTH: hdtpBegin.Mode = hdtpEnd.Mode = HDateTimePicker.MODE.MONTH; hdtpBegin.Value = new DateTime(DateTime.Now.Year , DateTime.Now.Month , 1 , 0 , 0 , 0); break; case ID_PERIOD.YEAR: break; default: break; } rangeRes.Set(hdtpBegin.Value, hdtpEnd.Value); return(rangeRes); }
/// <summary> /// Получение корр. PUT's /// </summary> /// <param name="type"></param> /// <param name="arQueryRanges"></param> /// <param name="idPeriod">период</param> /// <param name="err"></param> /// <returns></returns> public DataTable getInPut(TaskCalculate.TYPE type , DateTimeRange[] arQueryRanges , ID_PERIOD idPeriod , out int err) { string strQuery = string.Empty; for (int i = 0; i < arQueryRanges.Length; i++) { strQuery += @"SELECT DISTINCT v.ID,v.ID_PUT, v.ID_USER, v.ID_SOURCE,v.DATE_TIME, v.ID_TIME" + ", v.ID_TIMEZONE,v.QUALITY,v.VALUE,v.WR_DATETIME" + @" FROM [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.ALG) + "] a" + @" LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.PUT) + "] p" + @" ON a.ID = p.ID_ALG" + @" LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.VALUE) + @"_" + arQueryRanges[i].Begin.ToString(@"yyyyMM") + @"] v " + @" ON v.ID_PUT = p.ID" + @" WHERE ID_TASK = " + (int)IdTask + @" AND v.ID_TIME = " + (int)idPeriod + " AND v.ID_SOURCE = 0" + @" ORDER BY ID"; } return(Select(strQuery, out err)); }
/// <summary> /// Возвратить объект-таблицу со значениями из таблицы с сохраняемыми значениями из источников информации /// + для текущей задачи "растиражировать" плановые значения за месяц /// </summary> /// <param name="idPeriod">Идентификатор расчета (HOUR, DAY, MONTH, YEAR)</param> /// <param name="cntBasePeriod">Количество периодов расчета в интервале запрашиваемых данных</param> /// <param name="arQueryRanges">Массив диапазонов даты/времени - интервал(ы) запрашиваемых данных</param> /// <param name="err">Признак выполнения функции</param> /// <returns>Таблица со значениями</returns> protected override DataTable getVariableTableValues(TaskCalculate.TYPE type , ID_PERIOD idPeriod , int cntBasePeriod , ASUTP.Core.DateTimeRange [] arQueryRanges , out int err) { DataTable tableRes = new DataTable() , tableMonthPlan; int iDay = -1 , periodTotalDays = -1 , iColumnDataDate = -1; DateTime datetimeValue = DateTime.MinValue; object[] rowValues; double dayPlan = -1F; ASUTP.Core.DateTimeRange [] arMonthPlanQueryRanges; err = -1; tableRes = base.getVariableTableValues(type, idPeriod, cntBasePeriod, arQueryRanges, out err); // дополнительно прочитаем плановые значения (план выработки - входной параметр) if ((type & TaskCalculate.TYPE.IN_VALUES) == TaskCalculate.TYPE.IN_VALUES) { // для плана выработки индивидуальный диапазон даты/времени arMonthPlanQueryRanges = HandlerDbTaskCalculate.GetDateTimeRangeVariableValues(ID_PERIOD.MONTH, _Session.m_DatetimeRange, _Session.m_curOffsetUTC, MODE_DATA_DATETIME.Ended); // для плана выработки индивидуальный запрос значений tableMonthPlan = Select(HandlerDbTaskCalculate.GetQueryVariableValues(IdTask , _Session.m_Id , type , ID_PERIOD.MONTH , 1 , arMonthPlanQueryRanges , getWhereRangeAlg(type) , MODE_AGREGATE_GETVALUES.OFF , MODE_DATA_DATETIME.Ended) , out err); if (tableMonthPlan.Rows.Count == 1) { periodTotalDays = (int)(_Session.m_DatetimeRange.End - _Session.m_DatetimeRange.Begin).TotalDays; dayPlan = (double)tableMonthPlan.Rows[0][@"VALUE"] / periodTotalDays; rowValues = new object[tableMonthPlan.Columns.Count]; foreach (DataColumn column in tableMonthPlan.Columns) { if (column.ColumnName.Equals(@"VALUE") == true) { rowValues[column.Ordinal] = dayPlan; } else { if (column.ColumnName.Equals(@"EXTENDED_DEFINITION") == true) { iColumnDataDate = column.Ordinal; if (DateTime.TryParse((string)tableMonthPlan.Rows[0][column.Ordinal], out datetimeValue) == true) { ////??? в запросе добавляется период(месяц) //datetimeValue = datetimeValue.AddMonths(-1) ; } else { Logging.Logg().Error(string.Format(@"HandlerDbTaskAutobookMonthValuesCalculate::getVariableTableValues () - не распознано значение в {0}...", column.ColumnName), Logging.INDEX_MESSAGE.NOT_SET); } } else { ; } rowValues[column.Ordinal] = tableMonthPlan.Rows[0][column.Ordinal]; } } if (datetimeValue.Equals(DateTime.MinValue) == false) { for (iDay = 0; iDay < periodTotalDays; iDay++) { rowValues[iColumnDataDate] = string.Format(@"{0:s}", datetimeValue.AddDays(-1 * iDay)); tableRes.Rows.Add(rowValues); } tableRes.AcceptChanges(); } else { Logging.Logg().Error(string.Format(@"HandlerDbTaskAutobookMonthValuesCalculate::getVariableTableValues () - не удалось преобразовать метку даты/времени {0} планового значения" , tableMonthPlan.Rows[0][iColumnDataDate]) , Logging.INDEX_MESSAGE.NOT_SET); } } else { Logging.Logg().Error(string.Format(@"HandlerDbTaskAutobookMonthValuesCalculate::getVariableTableValues () - нет плановых значений за {0:s} - {1:s}" , _Session.m_DatetimeRange.Begin, _Session.m_DatetimeRange.End) , Logging.INDEX_MESSAGE.NOT_SET); } } else { // план только во входных значениях, в выходных его нет ; } return(tableRes); }
/// <summary> /// Инициализация объектов формы /// </summary> /// <param name="err">номер ошибки</param> /// <param name="errMsg">текст ошибки</param> protected override void initialize(out int err, out string errMsg) { err = 0; errMsg = string.Empty; ID_TIMEZONE idProfileTimezone = ID_TIMEZONE.UNKNOWN; ID_PERIOD idProfilePeriod = ID_PERIOD.UNKNOWN; string strItem = string.Empty; Control ctrl = null; //Заполнить таблицы со словарными, проектными величинами // PERIOD, TIMWZONE, COMP, PARAMETER, RATIO initialize //m_markTableDictPrj = new HMark (new ID_DBTABLE[] { /*ID_DBTABLE.PERIOD * , */ID_DBTABLE.TIME, ID_DBTABLE.TIMEZONE , ID_DBTABLE.COMP_LIST , IsInParameters == true ? ID_DBTABLE.IN_PARAMETER : ID_DBTABLE.UNKNOWN , IsOutParameters == true ? ID_DBTABLE.OUT_PARAMETER : ID_DBTABLE.UNKNOWN , ID_DBTABLE.RATIO } , out err, out errMsg ); HandlerDb.FilterDbTableTimezone = TepCommon.HandlerDbTaskCalculate.DbTableTimezone.Msk; HandlerDb.FilterDbTableTime = TepCommon.HandlerDbTaskCalculate.DbTableTime.Month; HandlerDb.FilterDbTableCompList = HandlerDbTaskCalculate.DbTableCompList.Tg; //активность_кнопки_сохранения try { if (Enum.IsDefined(typeof(MODE_CORRECT), m_dictProfile.GetAttribute(HTepUsers.ID_ALLOWED.ENABLED_CONTROL)) == true) { (Controls.Find(PanelManagementVedomostBl.INDEX_CONTROL.BUTTON_SAVE.ToString(), true)[0] as Button).Enabled = (MODE_CORRECT)MODE_CORRECT.Parse(typeof(MODE_CORRECT), m_dictProfile.GetAttribute(HTepUsers.ID_ALLOWED.ENABLED_CONTROL)) == MODE_CORRECT.ENABLE; } else { (Controls.Find(PanelManagementVedomostBl.INDEX_CONTROL.BUTTON_SAVE.ToString(), true)[0] as Button).Enabled = false; } } catch (Exception e) { // ??? Logging.Logg().Exception(e, string.Format(@"PanelTaskVedomostBl::initialize () - BUTTON_SAVE.Enabled..."), Logging.INDEX_MESSAGE.NOT_SET); err = -2; } if (err == 0) { try { //??? m_bflgClear = !m_bflgClear; //Заполнить элемент управления с часовыми поясами idProfileTimezone = ID_TIMEZONE.MSK; PanelManagement.FillValueTimezone(HandlerDb.m_dictTableDictPrj[ID_DBTABLE.TIMEZONE] , idProfileTimezone); //Заполнить элемент управления с периодами расчета idProfilePeriod = (ID_PERIOD)int.Parse(m_dictProfile.GetAttribute(HTepUsers.ID_ALLOWED.PERIOD)); PanelManagement.FillValuePeriod(HandlerDb.m_dictTableDictPrj[ID_DBTABLE.TIME] , idProfilePeriod); PanelManagement.AllowUserTimezoneChanged = false; PanelManagement.AllowUserPeriodChanged = false; } catch (Exception e) { Logging.Logg().Exception(e, @"PanelTaskVedomostBl::initialize () - ...", Logging.INDEX_MESSAGE.NOT_SET); } } else { Logging.Logg().Error(MethodBase.GetCurrentMethod(), @"...", Logging.INDEX_MESSAGE.NOT_SET); } }
/// <summary> /// Запрос к БД по получению редактируемых значений (автоматически собираемые значения) /// , структура таблицы совместима с [inval], [outval] /// </summary> /// <param name="type"></param> /// <param name="idPeriod">период</param> /// <param name="cntBasePeriod"></param> /// <param name="arQueryRanges">диапазон времени запроса</param> /// <returns></returns> public override string getQueryValuesVar(TaskCalculate.TYPE type, ID_PERIOD idPeriod , int cntBasePeriod, DateTimeRange[] arQueryRanges) { string strRes = string.Empty , whereParameters = string.Empty; if (!(type == TaskCalculate.TYPE.UNKNOWN)) { // аналог в 'GetQueryParameters' //whereParameters = getWhereRangeAlg(type); //if (whereParameters.Equals(string.Empty) == false) // whereParameters = @" AND a." + whereParameters; //else // ; int i = -1; bool bLastItem = false , bEquDatetime = false; for (i = 0; i < arQueryRanges.Length; i++) { if (arQueryRanges[i].Begin < DateTime.Now) { bLastItem = !(i < (arQueryRanges.Length - 1)); strRes += @"SELECT v.ID_PUT, v.QUALITY, v.[VALUE]" + @", " + _Session.m_Id + @" as [ID_SESSION]" + @",[DATE_TIME]" + @", m.[AVG]" + @", [EXTENDED_DEFINITION] = " + i //+ @", GETDATE () as [WR_DATETIME]" + @" FROM [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.VALUE) + @"_" + arQueryRanges[i].Begin.ToString(@"yyyyMM") + @"] v" + @" LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.PUT) + @"] p ON p.ID = v.ID_PUT" + @" LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.ALG) + @"] a ON a.ID = p.ID_ALG AND a.ID_TASK = " + (int)IdTask + whereParameters + @" LEFT JOIN [dbo].[measure] m ON a.ID_MEASURE = m.ID" + @" WHERE v.[ID_TIME] = " + (int)idPeriod //???ID_PERIOD.HOUR //??? _currIdPeriod ; // при попадании даты/времени на границу перехода между отчетными периодами (месяц) // 'Begin' == 'End' if (bLastItem == true) { bEquDatetime = arQueryRanges[i].Begin.Equals(arQueryRanges[i].End); } else { ; } if (bEquDatetime == false) { strRes += @" AND [DATE_TIME] >= '" + arQueryRanges[i].Begin.ToString(@"yyyyMMdd HH:mm:ss") + @"'" + @" AND [DATE_TIME] < '" + arQueryRanges[i].End.AddDays(1).ToString(@"yyyyMMdd HH:mm:ss") + @"'"; } if (bLastItem == false) { strRes += @" UNION ALL "; } else { ; } } else { // исключить лишнюю запятую strRes = strRes.Substring(0, strRes.Length - (" UNION ALL ".Length - 1)); break; } } strRes = " " + @" SELECT v.ID_PUT" // as [ID]" + @", " + _Session.m_Id + @" as [ID_SESSION]" + @", [QUALITY]" + ",[VALUE]" + ",[DATE_TIME] as [WR_DATETIME]" + @",[EXTENDED_DEFINITION]" + @" FROM (" + strRes + @") as v" + @" ORDER BY v.ID_PUT,v.DATE_TIME"; } else { Logging.Logg().Error(@"TepCommon.HandlerDbTaskCalculate::getQueryValuesVar () - неизветстный тип расчета...", Logging.INDEX_MESSAGE.NOT_SET); } return(strRes); }
private void setModeDatetimeRange() { ID_PERIOD idPeriod = IdPeriod; HDateTimePicker hdtpBegin = findControl(INDEX_CONTROL_BASE.HDTP_BEGIN.ToString()) as HDateTimePicker , hdtpEnd = findControl(INDEX_CONTROL_BASE.HDTP_END.ToString()) as HDateTimePicker; //Выполнить запрос на получение значений для заполнения 'DataGridView' switch (idPeriod) { case ID_PERIOD.HOUR: hdtpBegin.Value = new DateTime(DateTime.Now.Year , DateTime.Now.Month , DateTime.Now.Day , DateTime.Now.Hour , 0 , 0).AddHours(-1); hdtpEnd.Value = hdtpBegin.Value.AddHours(1); hdtpBegin.Mode = hdtpEnd.Mode = HDateTimePicker.MODE.HOUR; break; //case ID_PERIOD.SHIFTS: // hdtpBegin.Mode = HDateTimePicker.MODE.HOUR; // hdtpEnd.Mode = HDateTimePicker.MODE.HOUR; // break; case ID_PERIOD.DAY: hdtpBegin.Value = new DateTime(DateTime.Now.Year , DateTime.Now.Month , DateTime.Now.Day , 0 , 0 , 0).AddDays(-1); hdtpEnd.Value = hdtpBegin.Value.AddDays(1); hdtpBegin.Mode = hdtpEnd.Mode = HDateTimePicker.MODE.DAY; break; case ID_PERIOD.MONTH: hdtpBegin.Value = new DateTime(DateTime.Now.Year , DateTime.Now.Month , 1 , 0 , 0 , 0) /*.AddMonths(-1)*/; hdtpEnd.Value = hdtpBegin.Value.AddMonths(1); hdtpBegin.Mode = hdtpEnd.Mode = HDateTimePicker.MODE.MONTH; break; case ID_PERIOD.YEAR: hdtpBegin.Value = new DateTime(DateTime.Now.Year , 1 , 1 , 0 , 0 , 0).AddYears(0); hdtpEnd.Value = hdtpBegin.Value.AddYears(1); hdtpBegin.Mode = hdtpEnd.Mode = HDateTimePicker.MODE.YEAR; break; default: break; } }
/// <summary> /// Создать новую сессию для расчета /// - вставить входные данные во временную таблицу /// </summary> /// <param name="idSession">Идентификатор сессии</param> /// <param name="idPeriod">Идентификатор периода расчета</param> /// <param name="cntBasePeriod">Количество базовых периодов расчета в интервале расчета</param> /// <param name="idTimezone">Идентификатор часового пояса</param> /// <param name="tablePars">Таблица характеристик входных параметров</param> /// <param name="tableSessionValues">Таблица значений входных параметров</param> /// <param name="tableDefValues">Таблица значений по умолчанию входных параметров</param> /// <param name="dtRange">Диапазон даты/времени для интервала расчета</param> /// <param name="err">Идентификатор ошибки при выполнеинии функции</param> /// <param name="strErr">Строка текста сообщения при наличии ошибки</param> public void CreateSession(int idSession , ID_PERIOD idPeriod , int cntBasePeriod , ID_TIMEZONE idTimezone , DataTable tablePars , ref DataTable [] arTableValues , DateTimeRange dtRange , out int err, out string strErr) { err = 0; strErr = string.Empty; int iAVG = -1; string strQuery = string.Empty; // строки для удаления из таблицы значений "по умолчанию" // при наличии дубликатов строк в таблице с загруженными из источников с данными DataRow[] rowsSel = null; // удалить строки из таблицы со значениями "по умолчанию" foreach (DataRow rValVar in arTableValues[(int)HandlerDbTaskCalculate.INDEX_TABLE_VALUES.SESSION].Rows) { rowsSel = arTableValues[(int)HandlerDbTaskCalculate.INDEX_TABLE_VALUES.DEFAULT].Select(@"ID_PUT=" + rValVar[@"ID"]); foreach (DataRow rToRemove in rowsSel) { arTableValues[(int)HandlerDbTaskCalculate.INDEX_TABLE_VALUES.DEFAULT].Rows.Remove(rToRemove); } } // вставить строки из таблицы со значениями "по умолчанию" foreach (DataRow rValDef in arTableValues[(int)HandlerDbTaskCalculate.INDEX_TABLE_VALUES.DEFAULT].Rows) { rowsSel = tablePars.Select(@"ID=" + rValDef[@"ID_PUT"]); if (rowsSel.Length == 1) { iAVG = (Int16)rowsSel[0][@"AVG"]; arTableValues[(int)HandlerDbTaskCalculate.INDEX_TABLE_VALUES.SESSION].Rows.Add(new object[] { rValDef[@"ID_PUT"] //, HUsers.Id //ID_USER //, -1 //ID_SOURCE , idSession //ID_SESSION , (int)HandlerDbTaskCalculate.ID_QUALITY_VALUE.DEFAULT //QUALITY , (iAVG == 0) ? cntBasePeriod * (double)rValDef[@"VALUE"] : (double)rValDef[@"VALUE"] //VALUE , HDateTime.ToMoscowTimeZone() //??? GETADTE() } ); } else { ; // по идентификатору найден не единственный парпметр расчета } } if ((arTableValues[(int)HandlerDbTaskCalculate.INDEX_TABLE_VALUES.SESSION].Columns.Count > 0) && (arTableValues[(int)HandlerDbTaskCalculate.INDEX_TABLE_VALUES.SESSION].Rows.Count > 0)) { //Вситвить строку с идентификатором новой сессии insertIdSession(idSession, idPeriod, cntBasePeriod, idTimezone, dtRange, out err); //Вставить строки в таблицу БД со входными значениями для расчета insertInValues(arTableValues[(int)HandlerDbTaskCalculate.INDEX_TABLE_VALUES.SESSION], out err); //Вставить строки в таблицу БД со выходными значениями для расчета insertOutValues(idSession, out err); // необходимость очистки/загрузки - приведение структуры таблицы к совместимому с [inval] arTableValues[(int)HandlerDbTaskCalculate.INDEX_TABLE_VALUES.SESSION].Rows.Clear(); // получить входные для расчета значения для возможности редактирования strQuery = @"SELECT [ID_PUT] as [ID], [ID_SESSION], [QUALITY], [VALUE], [WR_DATETIME]" + @" FROM [" + s_NameDbTables[(int)INDEX_DBTABLE_NAME.INVALUES] + @"]" + @" WHERE [ID_SESSION]=" + idSession; arTableValues[(int)HandlerDbTaskCalculate.INDEX_TABLE_VALUES.SESSION] = Select(strQuery, out err); } else { Logging.Logg().Error(@"HandlerDbTaskCalculate::CreateSession () - отсутствуют строки для вставки ...", Logging.INDEX_MESSAGE.NOT_SET); } }
public void FillValuePeriod(DataTable tableValues, ID_PERIOD idSelected) { fillComboBoxValues(tableValues.Rows.Cast <DataRow>(), INDEX_CONTROL_BASE.CBX_PERIOD, (int)idSelected, @"DESCRIPTION", cbxPeriod_SelectedIndexChanged); }
public void SetCurrentPeriod(ID_PERIOD idPeriod) { m_currIdPeriod = idPeriod; }
public void SetPeriod(ID_PERIOD idPeriod) { HDateTimePicker hdtpBegin = Controls.Find(INDEX_CONTROL_BASE.HDTP_BEGIN.ToString(), true)[0] as HDateTimePicker , hdtpEnd = Controls.Find(INDEX_CONTROL_BASE.HDTP_END.ToString(), true)[0] as HDateTimePicker; //Выполнить запрос на получение значений для заполнения 'DataGridView' switch (idPeriod) { case ID_PERIOD.HOUR: hdtpBegin.Value = new DateTime(DateTime.Now.Year , DateTime.Now.Month , DateTime.Now.Day , DateTime.Now.Hour , 0 , 0).AddHours(-1); hdtpEnd.Value = hdtpBegin.Value.AddHours(1); hdtpBegin.Mode = hdtpEnd.Mode = HDateTimePicker.MODE.HOUR; break; //case ID_PERIOD.SHIFTS: // hdtpBegin.Mode = HDateTimePicker.MODE.HOUR; // hdtpEnd.Mode = HDateTimePicker.MODE.HOUR; // break; case ID_PERIOD.DAY: hdtpBegin.Value = new DateTime(DateTime.Now.Year , DateTime.Now.Month , DateTime.Now.Day , 0 , 0 , 0).AddDays(-1); hdtpEnd.Value = hdtpBegin.Value.AddDays(1); hdtpBegin.Mode = hdtpEnd.Mode = HDateTimePicker.MODE.DAY; break; case ID_PERIOD.MONTH: hdtpBegin.Value = new DateTime(DateTime.Now.Year , DateTime.Now.Month , 1 , 0 , 0 , 0).AddMonths(-1); hdtpEnd.Value = hdtpBegin.Value.AddMonths(1); hdtpBegin.Mode = hdtpEnd.Mode = HDateTimePicker.MODE.MONTH; break; case ID_PERIOD.YEAR: hdtpBegin.Value = new DateTime(DateTime.Now.Year , 1 , 1 , 0 , 0 , 0).AddYears(-1); hdtpEnd.Value = hdtpBegin.Value.AddYears(1); hdtpBegin.Mode = hdtpEnd.Mode = HDateTimePicker.MODE.YEAR; break; default: break; } }
/// <summary> /// Запрос к БД по получению редактируемых значений (автоматически собираемые значения) /// , структура таблицы совместима с [inval], [outval] /// </summary> public virtual string getQueryValuesVar(TaskCalculate.TYPE type , ID_PERIOD idPeriod , int cntBasePeriod , DateTimeRange[] arQueryRanges) { string strRes = string.Empty , whereParameters = string.Empty; if (!(type == TaskCalculate.TYPE.UNKNOWN)) { // аналог в 'GetQueryParameters' whereParameters = getWhereRangeAlg(type); if (whereParameters.Equals(string.Empty) == false) { whereParameters = @" AND a." + whereParameters; } else { ; } int i = -1; bool bLastItem = false , bEquDatetime = false; for (i = 0; i < arQueryRanges.Length; i++) { bLastItem = !(i < (arQueryRanges.Length - 1)); strRes += @"SELECT v.ID_PUT, v.QUALITY, v.[VALUE]" + @", " + _Session.m_Id + @" as [ID_SESSION]" + @", m.[AVG]" //+ @", GETDATE () as [WR_DATETIME]" + @" FROM [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.VALUE) + @"_" + arQueryRanges[i].Begin.ToString(@"yyyyMM") + @"] v" + @" LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.PUT) + @"] p ON p.ID = v.ID_PUT" + @" LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.ALG) + @"] a ON a.ID = p.ID_ALG AND a.ID_TASK = " + (int)_iIdTask + whereParameters + @" LEFT JOIN [dbo].[measure] m ON a.ID_MEASURE = m.ID" + @" WHERE v.[ID_TIME] = " + (int)idPeriod //???ID_PERIOD.HOUR //??? _currIdPeriod ; // при попадании даты/времени на границу перехода между отчетными периодами (месяц) // 'Begin' == 'End' if (bLastItem == true) { bEquDatetime = arQueryRanges[i].Begin.Equals(arQueryRanges[i].End); } else { ; } if (bEquDatetime == false) { strRes += @" AND [DATE_TIME] > '" + arQueryRanges[i].Begin.ToString(@"yyyyMMdd HH:mm:ss") + @"'" + @" AND [DATE_TIME] <= '" + arQueryRanges[i].End.ToString(@"yyyyMMdd HH:mm:ss") + @"'"; } else { strRes += @" AND [DATE_TIME] = '" + arQueryRanges[i].Begin.ToString(@"yyyyMMdd HH:mm:ss") + @"'"; } if (bLastItem == false) { strRes += @" UNION ALL "; } else { ; } } strRes = @"SELECT v.ID_PUT" // as [ID]" + @", " + _Session.m_Id + @" as [ID_SESSION]" + @", CASE" + @" WHEN COUNT (*) = " + cntBasePeriod + @" THEN MIN(v.[QUALITY])" + @" WHEN COUNT (*) = 0 THEN " + (int)ID_QUALITY_VALUE.NOT_REC + @" ELSE " + (int)ID_QUALITY_VALUE.PARTIAL + @" END as [QUALITY]" + @", CASE" + @" WHEN v.[AVG] = 0 THEN SUM (v.[VALUE])" + @" WHEN v.[AVG] = 1 THEN AVG (v.[VALUE])" + @" ELSE MIN (v.[VALUE])" + @" END as [VALUE]" + @", GETDATE () as [WR_DATETIME]" + @" FROM (" + strRes + @") as v" + @" GROUP BY v.ID_PUT" + @", v.[AVG]" ; } else { Logging.Logg().Error(@"HandlerDbTaskCalculate::getQueryValuesVar () - неизветстный тип расчета...", Logging.INDEX_MESSAGE.NOT_SET); } return(strRes); }
/// <summary> /// Запрос к БД по получению редактируемых значений (автоматически собираемые значения) /// , структура таблицы совместима с [inval], [outval] /// </summary> /// <param name="type">тип задачи</param> /// <param name="idPeriod">период</param> /// <param name="cntBasePeriod">период(день,месяц,год)</param> /// <param name="arQueryRanges">диапазон времени запроса</param> /// <returns>строка запроса</returns> public override string GetQueryValuesVar(TaskCalculate.TYPE type, ID_PERIOD idPeriod , int cntBasePeriod, DateTimeRange[] arQueryRanges) { string strRes = string.Empty , whereParameters = string.Empty; if (!(type == TaskCalculate.TYPE.UNKNOWN)) { // аналог в 'GetQueryParameters' //whereParameters = getWhereRangeAlg(type); //if (whereParameters.Equals(string.Empty) == false) // whereParameters = @" AND a." + whereParameters; //else // ; int i = -1; bool bLastItem = false , bEquDatetime = false; for (i = 0; i < arQueryRanges.Length; i++) { bLastItem = !(i < (arQueryRanges.Length - 1)); strRes += @"SELECT v.ID_PUT, v.QUALITY, v.[VALUE]" + @", " + _Session.m_Id + @" as [ID_SESSION]" + @", [DATE_TIME]" + @", CONVERT(varchar, [DATE_TIME], 127) as [EXTENDED_DEFINITION] " + @"FROM [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.ALG) + @"] a " + @"LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.PUT) + @"] p " + @"ON a.ID = p.ID_ALG AND a.ID_TASK = " + (int)IdTask + " " + @"LEFT JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.VALUE) + @"_" + arQueryRanges[i].End.ToString(@"yyyyMM") + @"] v " + @"ON p.ID = v.ID_PUT " + @"WHERE v.[ID_TIME] = " + (int)idPeriod //+ " AND [ID_SOURCE] > 0 " + @" AND ID_TIMEZONE = " + (int)_Session.m_currIdTimezone ; // при попадании даты/времени на границу перехода между отчетными периодами (месяц) // 'Begin' == 'End' if (bLastItem == true) { bEquDatetime = arQueryRanges[i].Begin.Equals(arQueryRanges[i].End); } if (bEquDatetime == false) { strRes += @" AND [DATE_TIME] > '" + arQueryRanges[i].Begin.ToString(@"yyyyMMdd HH:mm:ss") + @"'" + @" AND [DATE_TIME] <= '" + arQueryRanges[i].End.ToString(@"yyyyMMdd HH:mm:ss") + @"'"; } if (bLastItem == false) { strRes += @" UNION ALL "; } } strRes = "" + @"SELECT v.ID_PUT" + @", " + _Session.m_Id + @" as [ID_SESSION]" + @", [QUALITY]" + @", [VALUE]" + @", [DATE_TIME] as [WR_DATETIME]" + @", [EXTENDED_DEFINITION] " + @"FROM (" + strRes + @") as v " + @"ORDER BY v.ID_PUT,v.DATE_TIME"; } else { Logging.Logg().Error(@"TepCommon.HandlerDbTaskCalculate::getQueryValuesVar () - неизветстный тип расчета...", Logging.INDEX_MESSAGE.NOT_SET); } return(strRes); }
public void Load(ID_PERIOD idTime) { }