Esempio n. 1
0
 /// <summary>
 /// Создать объект для расчета выходных значений
 /// </summary>
 protected override TaskCalculate createTaskCalculate(TaskCalculate.TYPE types
                                                      , IEnumerable <HandlerDbTaskCalculate.NALG_PARAMETER> listNAlg
                                                      , IEnumerable <HandlerDbTaskCalculate.PUT_PARAMETER> listPutPar
                                                      , Dictionary <KEY_VALUES, List <VALUE> > dictValues)
 {
     throw new NotImplementedException();
 }
 /// <summary>
 /// Конструктор - основной (с параметром)
 /// </summary>
 public TaskAutobookMonthValuesCalculate(TaskCalculate.TYPE types
                                         , IEnumerable <HandlerDbTaskCalculate.NALG_PARAMETER> listNAlg
                                         , IEnumerable <HandlerDbTaskCalculate.PUT_PARAMETER> listPutPar
                                         , Dictionary <KEY_VALUES, List <VALUE> > dictValues)
     : base(types, listNAlg, listPutPar, dictValues)
 {
 }
        ///// <summary>
        /////
        ///// </summary>
        ///// <returns></returns>
        //public string GetQueryComp(TaskCalculate.TYPE type)
        //{
        //    string strRes = string.Empty;

        //    strRes = @"SELECT a.[ID] as ID_ALG, p.[ID], p.[ID_COMP], cl.[DESCRIPTION], a.[N_ALG] "
        //    + @"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 " + "[" + s_dictDbTables[ID_DBTABLE.COMP_LIST].m_name + @"] cl "
        //    + @"ON cl.ID = p.ID_COMP "
        //    + @"WHERE a.ID_TASK  = " + (int)IdTask;

        //    return strRes;
        //}

        /// <summary>
        /// Получение вых.знач.
        /// </summary>
        /// <param name="dtRange">диапазон временной</param>
        /// <param name="err">Индентификатор ошибки</param>
        /// <returns>таблица данных</returns>
        public DataTable GetDataOutval(TaskCalculate.TYPE type, DateTimeRange[] dtRange, out int err)
        {
            string strQuery  = string.Empty;
            bool   bLastItem = false;

            for (int i = 0; i < dtRange.Length; i++)
            {
                bLastItem = !(i < (dtRange.Length - 1));

                strQuery += @"SELECT o.ID, o.ID_PUT, o.ID_USER, o.ID_SOURCE, o.DATE_TIME, o.ID_TIME"
                            + @", o.ID_TIMEZONE, o.QUALITY, o.VALUE, o.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].[outval_" + dtRange[i].End.ToString(@"yyyyMM") + @"] o"
                            + @" ON o.ID_PUT = p.ID"
                            + @" WHERE  [ID_TASK] = " + (int)IdTask
                            + @" AND [DATE_TIME] > '" + dtRange[i].Begin.ToString(@"yyyyMMdd HH:mm:ss") + @"'"
                            + @" AND [DATE_TIME] <= '" + dtRange[i].End.ToString(@"yyyyMMdd HH:mm:ss") + @"'"
                            + @" AND [ID_TIMEZONE] = " + (int)_Session.CurrentIdTimezone
                            + @" AND [ID_TIME] = " + (int)ID_PERIOD.DAY
                            + @" AND [QUALITY] > 0";

                if (bLastItem == false)
                {
                    strQuery += @" UNION ALL ";
                }
            }
            return(Select(strQuery, out err));
        }
Esempio n. 4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        private string getRangeAlg(TaskCalculate.TYPE type)
        {
            string strRes = string.Empty;

            ID_START_RECORD idRecStart = ID_START_RECORD.ALG
            , idRecEnd = ID_START_RECORD.PUT;

            switch (type)
            {
            case TaskCalculate.TYPE.IN_VALUES:
                break;

            case TaskCalculate.TYPE.OUT_TEP_NORM_VALUES:
            case TaskCalculate.TYPE.OUT_VALUES:
                idRecStart = type == TaskCalculate.TYPE.OUT_TEP_NORM_VALUES ? ID_START_RECORD.ALG_NORMATIVE :
                             type == TaskCalculate.TYPE.OUT_VALUES ? ID_START_RECORD.ALG :
                             ID_START_RECORD.ALG;
                idRecEnd = type == TaskCalculate.TYPE.OUT_TEP_NORM_VALUES ? ID_START_RECORD.PUT :
                           type == TaskCalculate.TYPE.OUT_VALUES ? ID_START_RECORD.ALG_NORMATIVE :
                           ID_START_RECORD.PUT;

                strRes = @" BETWEEN " + (int)(idRecStart - 1) + @" AND " + (int)(idRecEnd - 1);
                break;

            default:
                break;
            }

            return(strRes);
        }
        /// <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));
        }
Esempio n. 6
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public string GetQueryComp(TaskCalculate.TYPE type)
        {
            string strRes = string.Empty;

            //strRes = @"SELECT a.[ID] as ID_ALG, p.[ID], p.[ID_COMP], cl.[DESCRIPTION], a.[N_ALG] , m.NAME_RU as NAME_SHR_MEASURE, m.[AVG] "
            //+ @"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 " + "[" + s_NameDbTables[(int)INDEX_DBTABLE_NAME.COMP_LIST] + @"] cl "
            //+ @"ON cl.ID = p.ID_COMP "
            //+ @"JOIN [dbo].[measure] as m "
            //+ @"ON a.ID_MEASURE = m.ID "
            //+ @"WHERE a.ID_TASK  = " + (int)IdTask;

            //return strRes;
            //string strRes = string.Empty;

            strRes = @"SELECT l.[ID] , l.[ID_COMP], l.[DESCRIPTION] "
                     + @"FROM  [" + s_NameDbTables[(int)INDEX_DBTABLE_NAME.COMP_LIST] + @"] l "
                     + @"LEFT JOIN [TEP_NTEC_5].[dbo].[comp] c "
                     + @"ON c.ID = l.ID_COMP "
                     + @"WHERE c.ID > 500 AND c.ID < 20000";

            return(strRes);
        }
        /// <summary>
        /// Получение вых.знач.
        /// </summary>
        /// <param name="dtRange">диапазон временной</param>
        /// <param name="err">Индентификатор ошибки</param>
        /// <returns>таблица данных</returns>
        public DataTable GetDataOutvalArch(TaskCalculate.TYPE type, DateTimeRange[] dtRange, out int err)
        {
            string strQuery  = string.Empty;
            bool   bLastItem = false;

            for (int i = 0; i < dtRange.Length; i++)
            {
                bLastItem = !(i < (dtRange.Length - 1));

                strQuery += @"SELECT [ID_PUT], [QUALITY], [VALUE], [DATE_TIME] as [WR_DATETIME]"
                            + @" , 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"
                            + @" LEFT JOIN [dbo].[outval_" + dtRange[i].End.ToString(@"yyyyMM") + @"] o"
                            + @" ON o.ID_PUT = p.ID"
                            + @" WHERE  [ID_TASK] = " + (int)IdTask
                            + @" AND [DATE_TIME] > '" + dtRange[i].Begin.ToString(@"yyyyMMdd HH:mm:ss") + @"'"
                            + @" AND [DATE_TIME] <= '" + dtRange[i].End.ToString(@"yyyyMMdd HH:mm:ss") + @"'"
                            + @" AND [ID_TIMEZONE] = " + (int)_Session.m_currIdTimezone
                            + @" AND [ID_TIME] = " + (int)ID_PERIOD.DAY
                            + @" AND [QUALITY] > 0";

                if (bLastItem == false)
                {
                    strQuery += @" UNION ALL ";
                }
            }
            return(Select(strQuery, out err));
        }
Esempio n. 8
0
        /// <summary>
        /// Возвратить строку запроса для получения
        /// </summary>
        /// <param name="idSession">Идентификатор сессии</param>
        /// <param name="type">Тип значений (входные, выходные-нормативы - только для ТЭП, выходные)</param>
        /// <returns>Строка - содержание запроса</returns>
        private string getQueryValuesVar(TaskCalculate.TYPE type)
        {
            string strRes   = string.Empty
            , strJoinValues = string.Empty;

            if (!(type == TaskCalculate.TYPE.UNKNOWN))
            {
                strJoinValues = getRangeAlg(type);
                if (strJoinValues.Equals(string.Empty) == false)
                {
                    strJoinValues = @" JOIN [" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.PUT) + @"] p ON p.ID = v.ID_PUT AND p.ID_ALG" + strJoinValues;
                }
                else
                {
                    ;
                }

                strRes = @"SELECT v.* FROM " + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.VALUE) + @" as v"
                         + strJoinValues
                         + @" WHERE [ID_SESSION]=" + _Session.m_Id;
            }
            else
            {
                Logging.Logg().Error(@"HandlerDbTaskCalculate::getQueryValuesVar () - неизвестный тип расчета...", Logging.INDEX_MESSAGE.NOT_SET);
            }

            return(strRes);
        }
 /// <summary>
 /// Создать объект для расчета выходных значений
 /// </summary>
 protected override TaskCalculate createTaskCalculate(TaskCalculate.TYPE types
                                                      , IEnumerable <HandlerDbTaskCalculate.NALG_PARAMETER> listNAlg
                                                      , IEnumerable <HandlerDbTaskCalculate.PUT_PARAMETER> listPutPar
                                                      , Dictionary <KEY_VALUES, List <VALUE> > dictValues)
 {
     return(new TaskVedomostBlCalculate(types, listNAlg, listPutPar, dictValues));
 }
Esempio n. 10
0
        /// <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));
        }
Esempio n. 11
0
        /// <summary>
        /// Возвратить наименование таблицы
        /// </summary>
        /// <param name="type">Тип панели/расчета</param>
        /// <param name="req">Индекс таблицы, требуемой при расчете</param>
        /// <returns>Наименование таблицы</returns>
        private static string getNameDbTable(TaskCalculate.TYPE type, TABLE_CALCULATE_REQUIRED req)
        {
            INDEX_DBTABLE_NAME indx = INDEX_DBTABLE_NAME.UNKNOWN;

            indx = TaskCalculate.GetIndexNameDbTable(type, req);

            return(s_NameDbTables[(int)indx]);
        }
        /// <summary>
        /// Формирование запроса на получение компонентов
        /// </summary>
        /// <returns>строка запроса</returns>
        public string GetQueryComp(TaskCalculate.TYPE type)
        {
            string strRes = string.Empty;

            strRes = @"SELECT l.[ID] , l.[ID_COMP], l.[DESCRIPTION] "
                     + @"FROM  [" + s_NameDbTables[(int)INDEX_DBTABLE_NAME.COMP_LIST] + @"] l "
                     + @"LEFT JOIN [comp] c "
                     + @"ON c.ID = l.ID_COMP "
                     + @"WHERE c.ID > 500 AND c.ID < 2000";

            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);
        }
Esempio n. 14
0
        /// <summary>
        /// Возвратить объект-таблицу со значениями из таблицы с временными для расчета
        /// </summary>
        /// <param name="type">Тип значений (входные, выходные)</param>
        /// <param name="err">Признак выполнения функции</param>
        /// <returns>Объект-таблица</returns>
        public DataTable GetValuesVar(TaskCalculate.TYPE type
                                      , out int err)
        {
            DataTable tableRes = new DataTable();

            err = -1;

            tableRes = DbTSQLInterface.Select(ref _dbConnection
                                              , getQueryValuesVar(type)
                                              , null, null
                                              , out err);

            return(tableRes);
        }
Esempio n. 15
0
        /// <summary>
        ///
        /// </summary>
        /// <returns></returns>
        public string GetQueryComp(TaskCalculate.TYPE type)
        {
            string strRes = string.Empty;

            strRes = @"SELECT a.[ID] as ID_ALG, p.[ID], p.[ID_COMP], cl.[DESCRIPTION], a.[N_ALG] "
                     + @"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 " + "[" + s_NameDbTables[(int)INDEX_DBTABLE_NAME.COMP_LIST] + @"] cl "
                     + @"ON cl.ID = p.ID_COMP "
                     + @"WHERE a.ID_TASK  = " + (int)IdTask;

            return(strRes);
        }
Esempio n. 16
0
        /// <summary>
        /// Расчитать выходные-нормативные значения для задачи "Расчет ТЭП"
        ///  , сохранить значения во временной таблице для возможности предварительного просмотра результата
        /// </summary>
        public void Calculate(TaskCalculate.TYPE type)
        {
            int err      = -1
            , iRegDbConn = -1;

            // регистрация соединения с БД
            RegisterDbConnection(out iRegDbConn);

            if (!(iRegDbConn < 0))
            {
                switch (IdTask)
                {
                case ID_TASK.TEP:
                case ID_TASK.AUTOBOOK:
                case ID_TASK.BAL_TEPLO:     //Для работы с балансом тепла 6,06,2016 Апельганс
                    calculate(type, out err);
                    if (!(err == 0))
                    {
                        Logging.Logg().Error(@"HandlerDbTaskCalculate::Calculate () - ошибка при выполнеии расчета задачи ID=" + IdTask.ToString() + @" ...", Logging.INDEX_MESSAGE.NOT_SET);
                    }
                    else
                    {
                        ;
                    }
                    break;

                default:
                    Logging.Logg().Error(@"HandlerDbTaskCalculate::Calculate () - неизвестный тип задачи расчета...", Logging.INDEX_MESSAGE.NOT_SET);
                    break;
                }
            }
            else
            {
                Logging.Logg().Error(@"HandlerDbTaskCalculate::Calculate () - при регистрации соединения...", Logging.INDEX_MESSAGE.NOT_SET);
            }

            // отмена регистрации БД - только, если регистрация произведена в текущем контексте
            if (!(iRegDbConn > 0))
            {
                UnRegisterDbConnection();
            }
            else
            {
                ;
            }
        }
Esempio n. 17
0
        /// <summary>
        /// Строка - условие для TSQL-запроса для указания диапазона идентификаторов
        ///  выходных параметров алгоритма расчета
        /// </summary>
        private string getWhereRangeAlg(TaskCalculate.TYPE type, string strNameFieldId = @"ID")
        {
            string strRes = string.Empty;

            switch (type)
            {
            case TaskCalculate.TYPE.IN_VALUES:
                break;

            case TaskCalculate.TYPE.OUT_TEP_NORM_VALUES:
            case TaskCalculate.TYPE.OUT_VALUES:
                strRes = @"[" + strNameFieldId + @"]" + getRangeAlg(type);
                break;

            default:
                break;
            }

            return(strRes);
        }
Esempio n. 18
0
        /// <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);
        }
Esempio n. 19
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public virtual string GetQueryParameters(TaskCalculate.TYPE type /* = TaskCalculate.TYPE.UNKNOWN*/)
        {
            string strRes     = string.Empty
            , whereParameters = string.Empty;

            //if (type == TaskCalculate.TYPE.UNKNOWN)
            //    type = m_taskCalculate.Type;
            //else
            //    ;

            if (!(type == TaskCalculate.TYPE.UNKNOWN))
            {
                // аналог в 'getQueryValuesVar'
                whereParameters = getWhereRangeAlg(type);
                if (whereParameters.Equals(string.Empty) == false)
                {
                    whereParameters = @" AND a." + whereParameters;
                }
                else
                {
                    ;
                }

                strRes = @"SELECT p.ID, p.ID_ALG, p.ID_COMP, p.ID_RATIO, p.MINVALUE, p.MAXVALUE"
                         + @", a.NAME_SHR, a.N_ALG, a.DESCRIPTION, a.ID_MEASURE, a.SYMBOL"
                         + @", m.NAME_RU as NAME_SHR_MEASURE, m.[AVG]"
                         + @" FROM [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.PUT) + @"] as p"
                         + @" JOIN [dbo].[" + getNameDbTable(type, TABLE_CALCULATE_REQUIRED.ALG) + @"] as a ON a.ID = p.ID_ALG AND a.ID_TASK = " + (int)IdTask
                         + whereParameters
                         + @" JOIN [dbo].[" + s_NameDbTables[(int)INDEX_DBTABLE_NAME.MEASURE] + @"] as m ON a.ID_MEASURE = m.ID ORDER BY ID";
            }
            else
            {
                Logging.Logg().Error(@"HandlerDbTaskCalculate::GetQueryParameters () - неизвестный тип расчета...", Logging.INDEX_MESSAGE.NOT_SET);
            }

            return(strRes);
        }
        /// <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));
        }
Esempio n. 21
0
 public override DataTable GetImportTableValues(TaskCalculate.TYPE type, long idSession, DataTable tableInParameter, DataTable tableRatio, out int err)
 {
     throw new NotImplementedException();
 }
Esempio n. 22
0
        /// <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);
        }
 protected override TaskCalculate.ListDATATABLE prepareCalculateValues(TaskCalculate.TYPE type, out int err)
 {
     throw new NotImplementedException();
 }
Esempio n. 24
0
 protected abstract void calculate(TaskCalculate.TYPE type, out int err);
Esempio n. 25
0
        /// <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);
        }
Esempio n. 26
0
 protected override void calculate(TaskCalculate.TYPE type, out int err)
 {
     err = 0;
 }
Esempio n. 27
0
        /// <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
            {
                ;
            }
        }
Esempio n. 28
0
        /// <summary>
        /// Вставить значения в таблицу для временных выходных значений сессии расчета
        /// </summary>
        /// <param name="idSession">Идентификатор сессии расчета</param>
        /// <param name="typeCalc">Тип расчета</param>
        /// <param name="err">Идентификатор ошибки при выполнении функции</param>
        private void insertOutValues(long idSession, TaskCalculate.TYPE typeCalc, out int err)
        {
            err = -1;

            DataTable tableParameters = null;
            string    strBaseQuery    = string.Empty
            , strQuery = string.Empty;
            int iRowCounterToInsert = -1;

            strQuery        = GetQueryParameters(typeCalc);
            tableParameters = Select(strQuery, out err);

            strBaseQuery =
                strQuery =
                    @"INSERT INTO " + s_NameDbTables[(int)INDEX_DBTABLE_NAME.OUTVALUES] + @" VALUES ";

            iRowCounterToInsert = 0;
            foreach (DataRow rPar in tableParameters.Rows)
            {
                if (iRowCounterToInsert > MAX_ROWCOUNT_TO_INSERT)
                {
                    // исключить лишнюю запятую
                    strQuery = strQuery.Substring(0, strQuery.Length - 1);
                    // вставить строки в таблицу
                    DbTSQLInterface.ExecNonQuery(ref _dbConnection, strQuery, null, null, out err);

                    if (!(err == 0))
                    {
                        // при ошибке - не продолжать
                        break;
                    }
                    else
                    {
                        ;
                    }

                    strQuery            = strBaseQuery;
                    iRowCounterToInsert = 0;
                }
                else
                {
                    ;
                }

                strQuery += @"(";

                strQuery += idSession + @","      //ID_SEESION
                            + rPar[@"ID"] + @","  //ID_PUT
                            + 0.ToString() + @"," //QUALITY
                            + 0.ToString() + @"," //VALUE
                            + @"GETDATE()"
                ;

                strQuery += @"),";

                iRowCounterToInsert++;
            }

            if (err == 0)
            {
                // исключить лишнюю запятую
                strQuery = strQuery.Substring(0, strQuery.Length - 1);
                // вставить строки в таблицу
                DbTSQLInterface.ExecNonQuery(ref _dbConnection, strQuery, null, null, out err);
            }
            else
            {
                ; // при ошибке - не продолжать
            }
        }
        /// <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);
        }
Esempio n. 30
0
        /// <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);
        }