Ejemplo n.º 1
0
        private IConvertible DoStatus(IFormulaParser parser, Function func, FunctionArgumentList args, int arg_index,
                                      int args_count)
        {
            if (args_count != 1)
            {
                throw new Exception("Функция СтатусЗначенияНедостоверные должна иметь один входящий аргумент");
            }
            var firstOrDefault = args.OfType <IFunctionArgumnet>().FirstOrDefault <IFunctionArgumnet>();

            if (firstOrDefault == null)

            {
                throw new Exception("Должен быть передан хотя бы один аргумент");
            }
            if (firstOrDefault != null && firstOrDefault.Flag == null)
            {
                throw new Exception("Нет статуса у значения");
            }

            if ((firstOrDefault.Flag.Value & VALUES_FLAG_DB.AllAlarmStatuses) != 0)
            {
                return(1);
            }

            return(0);
        }
Ejemplo n.º 2
0
        private IConvertible DoStatus(IFormulaParser parser, Function func, FunctionArgumentList args, int arg_index,
                                      int args_count)
        {
            if (args_count != 2)
            {
                throw new Exception("Функция СтатусЗначенияСодержитКод должна иметь два входящих аргумента");
            }
            var firstOrDefault = args.OfType <IFunctionArgumnet>().FirstOrDefault <IFunctionArgumnet>();

            if (firstOrDefault == null)

            {
                throw new Exception("Должен быть передан хотя бы один аргумент");
            }
            if (firstOrDefault != null && firstOrDefault.Flag == null)
            {
                throw new Exception("Нет статуса у значения");
            }

            var last = args.OfType <IFunctionArgumnet>().LastOrDefault <IFunctionArgumnet>();

            if (last != null)
            {
                var code = (ulong)last.ArgumentValue;


                if ((firstOrDefault.Flag.Value & (VALUES_FLAG_DB)code) != 0)
                {
                    return(1);
                }

                return(0);
            }
            throw new Exception("Неверный код статуса для проверки в значении");


            //  return firstOrDefault.Flag.Value;
        }
Ejemplo n.º 3
0
        private IConvertible DoCSharp(IFormulaParser parser, Function func, FunctionArgumentList args, int arg_index,
                                      int args_count)
        {
            var firstOrDefault = args.OfType <IFunctionArgumnet>().FirstOrDefault <IFunctionArgumnet>();

            if (firstOrDefault == null)

            {
                throw new Exception("Должен быть передан хотя бы один аргумент");
            }
            if (firstOrDefault != null && firstOrDefault.ArgumentType != FunctionArgumentArgsTypeEnum.String)
            {
                throw new Exception("Первым аргументом должен быть С# код");
            }

            throw new NotImplementedException("Работа с C# выражениями на текущий момент отключена");
            //var res = Proryv.Servers.Calculation.Parser.ProryvParsersFactory.ParseTextToString(
            //     "{" + firstOrDefault.ArgumentValue.ToString() + "}", null);
            //return res;
        }
Ejemplo n.º 4
0
        private IConvertible DoIf(IFormulaParser parser, Function func, FunctionArgumentList args, int arg_index,
                                  int args_count)
        {
            // 0 аргумент - первое число для сравнения
            // 1 аргумент - второе число для сравнения
            // 2 аргумент - точность сравнения (число знаков после запятой, если -1, то как есть, без округления)
            // 3 аргумент - оператор сравнения (1 это >, 2 это <, 3 это >=, 4 это <=, 5 это ==, 6 это !=)
            // 4 аргумент - результат, если условие выполнено
            // 5 аргумент - результат, если условие ложно


            var points = (int)args[arg_index + 2].ArgumentValue;

            if (points >= 0)
            {
                return(CompareWithRound(args.OfType <IFunctionArgumnet <double> >().Select(i => i.Value).ToArray(),
                                        arg_index, args_count, points));
            }
            return(CompareExact(args[arg_index].ArgumentValue, args[arg_index + 1].ArgumentValue,
                                (EOperatorType)args[arg_index + 3].ArgumentValue, args[arg_index + 4].ArgumentValue,
                                args[arg_index + 5].ArgumentValue));
        }
Ejemplo n.º 5
0
        private IConvertible DoUDF(IFormulaParser parser, Function func, FunctionArgumentList args, int arg_index,
                                   int args_count)
        {
            var currdate       = args.StartDateTime.AddMinutes(30 * args.HalfHourIndex);
            var firstOrDefault = args.OfType <IFunctionArgumnet>().FirstOrDefault <IFunctionArgumnet>();

            if (firstOrDefault == null)

            {
                throw new Exception("Должен быть передан хотя бы один аргумент");
            }
            if (firstOrDefault != null && firstOrDefault.ArgumentType != FunctionArgumentArgsTypeEnum.String)
            {
                throw new Exception("Первым аргументом должен быть формат выводимого значения");
            }
            //Вернуть время в формате Unix
            if (firstOrDefault.ArgumentValue == "u")
            {
                return((Int32)(currdate.ToUniversalTime().Subtract(new DateTime(1970, 1, 1))).TotalSeconds);
            }
            var res = currdate.ToString(firstOrDefault.ArgumentValue);

            return(res);
        }
Ejemplo n.º 6
0
        private IConvertible DoSql(IFormulaParser parser, Function func, FunctionArgumentList args, int arg_index,
                                   int args_count)
        {
            Debug.WriteLine(args.StartDateTime);
            Debug.WriteLine(args.EndDateTime);
            Debug.WriteLine(args.HalfHourIndex);
            var firstOrDefault = args.OfType <IFunctionArgumnet>().FirstOrDefault <IFunctionArgumnet>();

            if (firstOrDefault == null)

            {
                throw new Exception("Должен быть передан хотя бы один аргумент");
            }
            if (firstOrDefault != null && firstOrDefault.ArgumentType != FunctionArgumentArgsTypeEnum.String)
            {
                throw new Exception("Первым аргументом должен быть SQL скрипт");
            }

            using (var dbCon = _dbInterfaceAdapter.GetSqlConnection())
            {
                var t = args.OfType <IFunctionArgumnet>().Skip(1).Select(h => h.ArgumentValue);

                var SQL = string.Format(firstOrDefault.ArgumentValue.ToString(), t.ToArray());

                DbCommand cmd1 = new SqlCommand();
                dbCon.Open();
                cmd1.Connection  = dbCon;
                cmd1.CommandText = SQL;
                var result = cmd1.ExecuteScalar();
                return(result as IConvertible);
            }


            //        Execution_Id++;
            //            var firstOrDefault = args.OfType<IFunctionArgumnet>().FirstOrDefault<IFunctionArgumnet>();
            //            if (firstOrDefault == null)

            //            {
            //                throw new Exception("Должен быть передан хотя бы один аргумент");
            //            }
            //            if (firstOrDefault != null && firstOrDefault.ArgumentType != FunctionArgumentArgsTypeEnum.String)
            //            {
            //                throw new Exception("Первым аргументом должен быть SQL скрипт");
            //            }


            //            var t = args.OfType<IFunctionArgumnet>().Skip(1).Select(h => h.ArgumentValue);



            //            var SQLText = string.Format(firstOrDefault.ArgumentValue.ToString(), t.ToArray());
            //            var SQLcommand = string.Format(@"declare @out table
            //(
            //out float
            //)
            //insert into @out
            //exec(@sql)
            //INSERT INTO {0} VALUES(@execution_id,@sql,(select * from @out))", _tempTablePrefix);



            //            using (var cmd = new SqlCommand(SQLcommand))

            //            {
            //                Debug.WriteLine("Execute ");
            //                cmd.Connection = _connection;
            //                cmd.Parameters.Add("@execution_id", Execution_Id);
            //                cmd.Parameters.Add("@sql", SQLText);
            //                cmd.ExecuteNonQuery();
            //                Debug.WriteLine("Execute formula SQL");

            //                return new SqlTemporatyTableResult(_tempTablePrefix, _connection, Execution_Id, ref temporaryResulTable);
            //            }
            //using (DbCommand cmd1 = new SqlCommand(_connection))
            //{



            //    cmd1.Connection.Open();
            //    var result = cmd1.ExecuteScalar();
            //    return result as IConvertible;
            //}
        }