Пример #1
0
        public void Create(ScriptDTO script)
        {
            try
            {
                using (DbConnection connection = db.CreateConnection())
                {
                    connection.Open();
                    DbTransaction transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);

                    try
                    {
                        string DDL = script.Script.Replace("[empresa]", Global.EmpresaAtiva);
                        dbCommand = db.GetSqlStringCommand(DDL);
                        db.ExecuteNonQuery(dbCommand, transaction);
                        Insert(script);
                        transaction.Commit();
                        connection.Close();
                    }
                    catch (Exception e)
                    {
                        transaction.Rollback();
                        connection.Close();
                        throw new Exception("A seguinte consulta não pode ser executada: " + "\nVersão: " + script.Versao + "\nMódulo: " + script.Modulo + "\nConsulta: " + script.Id_script, e);
                    }
                }
            }
            catch
            {
                throw;
            }
        }
Пример #2
0
        public bool GetScript(ScriptDTO script)
        {
            try
            {
                dbCommand = db.GetSqlStringCommand(" SELECT id_pacote, id_script FROM scriptpacote" +
                                                   " where id_pacote = @id_pacote and id_script = @id_script" +
                                                   " ORDER BY id_pacote desc");
                db.AddInParameter(dbCommand, "@id_script", DbType.Int32, script.Id_script);
                db.AddInParameter(dbCommand, "@id_pacote", DbType.Int32, script.Id_pacote);


                using (IDataReader DR = (Transaction == null ? db.ExecuteReader(dbCommand) : db.ExecuteReader(dbCommand, Transaction)))
                {
                    while (DR.Read())
                    {
                        return(true);
                    }
                }
                return(false);
            }
            catch
            {
                throw;
            }
        }
        public async Task <(bool state, string msg)> DeleteScriptAsync(ScriptDTO item, bool rmDb = true)
        {
            if (item.LocalId > 0)
            {
                var info = await scriptRepository.FirstOrDefaultAsync(x => x.Id == item.LocalId);

                if (info != null)
                {
                    var url = Path.Combine(TAG, $"{info.MD5}.js");
                    try
                    {
                        var cachePath = Path.Combine(IOPath.CacheDirectory, url);
                        var cacheInfo = new FileInfo(cachePath);
                        if (cacheInfo.Exists)
                        {
                            cacheInfo.Delete();
                        }
                    }
                    catch (Exception e)
                    {
                        var msg = SR.Script_CacheDeleteError.Format(e.GetAllMessage());
                        logger.LogError(e, msg);
                        return(false, msg);
                    }
                    try
                    {
                        var savePath = Path.Combine(IOPath.AppDataDirectory, url);
                        var fileInfo = new FileInfo(savePath);
                        if (fileInfo.Exists)
                        {
                            fileInfo.Delete();
                        }
                    }
                    catch (Exception e)
                    {
                        var msg = SR.Script_FileDeleteError.Format(e.GetAllMessage());
                        logger.LogError(e, msg);
                        return(false, msg);
                    }
                    if (rmDb)
                    {
                        var state = (await scriptRepository.DeleteAsync(item.LocalId)) > 0;
                        return(state, state ? SR.Script_DeleteSuccess : SR.Script_DeleteError);
                    }
                    return(true, SR.Script_DeleteSuccess);
                }
                else
                {
                    return(false, SR.Script_DeleteError);
                }
            }
            return(false, SR.Script_NoKey);
        }
        /// <summary>
        /// Inserta el script a partir de una prueba
        /// </summary>
        /// <param name="tipoPrueba"></param>
        /// <returns></returns>
        public ReturnMessage AddScript(ScriptDTO script)
        {
            ReturnMessage mensaje = new ReturnMessage();
            string        query   = @"INSERT INTO [dbo].[SCRIPT]
                                   ([NOMBRE]
                                   ,[SCRIPT]
                                   ,[EXTENSION])
                             VALUES
                                   (@Nombre
                                   ,@Script
                                   ,@Extension)

                            SELECT @@IDENTITY AS 'Identity'";

            using (var con = ConectarDB())
            {
                con.Open();

                try
                {
                    using (SqlCommand command = new SqlCommand(query, con))
                    {
                        command.Parameters.Add(new SqlParameter("@Nombre", script.Nombre));
                        command.Parameters.Add(new SqlParameter("@Script", string.Empty));
                        command.Parameters.Add(new SqlParameter("@Extension", string.Empty));
                        using (var reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                script.ID = Convert.ToInt32(reader[0]);
                            }
                        }
                    }

                    mensaje.Mensaje     = "El Script se creó correctamente";
                    mensaje.TipoMensaje = TipoMensaje.Correcto;
                    mensaje.obj         = script;
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Count not insert.");
                    mensaje.Mensaje     = ex.Message;
                    mensaje.TipoMensaje = TipoMensaje.Error;
                    mensaje.obj         = script;
                }
                finally
                {
                    con.Close();
                }
                return(mensaje);
            }
        }
Пример #5
0
 public ReturnMessage AddScript(ScriptDTO script)
 {
     try
     {
         //logica de negocio aquí
         ScriptBehavior scriptBehavior = new ScriptBehavior();
         return(scriptBehavior.AddScript(script));
     }
     catch (Exception ex)
     {
         ReturnMessage mensaje = new ReturnMessage();
         mensaje.TipoMensaje = TipoMensaje.Error;
         mensaje.Mensaje     = ex.Message;
         return(mensaje);
     }
 }
        /// <summary>
        /// 添加脚本
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public async Task <(bool state, ScriptDTO?model, string msg)> AddScriptAsync(string filePath, ScriptDTO?oldInfo = null, bool build = true, int?order = null, bool deleteFile = false, Guid?pid = null)
        {
            var fileInfo = new FileInfo(filePath);

            if (fileInfo.Exists)
            {
                ScriptDTO.TryParse(filePath, out ScriptDTO? info);
                return(await AddScriptAsync(fileInfo, info, oldInfo, build, order, deleteFile, pid));
            }
            else
            {
                var msg = SR.Script_NoFile.Format(filePath);// $"文件不存在:{filePath}";
                logger.LogError(msg);
                return(false, null, msg);
            }
        }
Пример #7
0
        /// <summary>
        /// 添加脚本
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public async Task <IApiResponse <ScriptDTO?> > AddScriptAsync(string filePath, ScriptDTO?oldInfo = null, bool build = true, int?order = null, bool deleteFile = false, Guid?pid = null, bool ignoreCache = false)
        {
            var fileInfo = new FileInfo(filePath);

            if (fileInfo.Exists)
            {
                ScriptDTO.TryParse(filePath, out ScriptDTO? info);
                return(await AddScriptAsync(fileInfo, info, oldInfo, build, order, deleteFile, pid, ignoreCache));
            }
            else
            {
                var msg = AppResources.Script_NoFile.Format(filePath);// $"文件不存在:{filePath}";
                logger.LogError(msg);
                return(ApiResponse.Fail <ScriptDTO?>(msg));
            }
        }
Пример #8
0
        public ReturnMessage UpdateScript(ScriptDTO script)
        {
            ReturnMessage returnMessage = new ReturnMessage();

            try
            {
                ScriptBehavior scriptBehavior = new ScriptBehavior();
                return(scriptBehavior.UpdateScript(script));
            }
            catch (Exception ex)
            {
                returnMessage.Mensaje     = ex.Message;
                returnMessage.TipoMensaje = TipoMensaje.Error;
                throw;
            }
        }
        /// <summary>
        /// Selecciona un script dado un tipo de prueba.
        /// </summary>
        /// <param name="tipoPrueba_id"></param>
        /// <returns></returns>
        public ScriptDTO SelectScript(int tipoPrueba_id)
        {
            StringBuilder query = new StringBuilder().Append(@"SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
                            SELECT 
								SCRIPT.SCRIPT_ID,
								SCRIPT.NOMBRE,
								SCRIPT.SCRIPT,
								SCRIPT.EXTENSION 
							FROM SCRIPT INNER JOIN TIPOPRUEBA ON SCRIPT.SCRIPT_ID=TIPOPRUEBA.SCRIPT_ID
							AND TIPOPRUEBA.TIPOPRUEBA_ID=@tipoPrueba_id"                            );

            using (var con = ConectarDB())
            {
                con.Open();
                try
                {
                    using (SqlCommand command = new SqlCommand(query.ToString(), con))
                    {
                        command.Parameters.Add(new SqlParameter("@tipoPrueba_id", tipoPrueba_id));

                        using (var reader = command.ExecuteReader())
                        {
                            while (reader.Read())
                            {
                                ScriptDTO script = new ScriptDTO()
                                {
                                    ID        = Convert.ToInt32(reader[0]),
                                    Nombre    = reader[1].ToString(),
                                    Script    = reader[2].ToString(),
                                    Extension = reader[3].ToString()
                                };
                                return(script);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Count not insert.");
                }
                finally
                {
                    con.Close();
                }
            }
            return(new ScriptDTO());
        }
Пример #10
0
        public void Insert(ScriptDTO script)
        {
            try
            {
                using (DbConnection connection = db.CreateConnection())
                {
                    connection.Open();
                    DbTransaction transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);

                    try
                    {
                        dbCommand = db.GetSqlStringCommand("Insert Into public.scriptpacote(" +
                                                           " id_pacote," +
                                                           " script," +
                                                           " executado," +
                                                           " id_script," +
                                                           " erro" +
                                                           ") VALUES (" +
                                                           " @id_pacote," +
                                                           " @script," +
                                                           " @executado," +
                                                           " @id_script," +
                                                           " @erro);" +
                                                           " SELECT currval('scriptpacote_id_seq');");
                        db.AddInParameter(dbCommand, "@id_pacote", DbType.String, script.Id_pacote);
                        db.AddInParameter(dbCommand, "@script", DbType.String, script.Script);
                        db.AddInParameter(dbCommand, "@executado", DbType.Boolean, script.Executado);
                        db.AddInParameter(dbCommand, "@id_script", DbType.String, script.Id_script);
                        db.AddInParameter(dbCommand, "@erro", DbType.String, script.Erro);
                        db.ExecuteNonQuery(dbCommand, transaction);

                        transaction.Commit();
                        connection.Close();
                    }
                    catch (DbException dbex)
                    {
                        transaction.Rollback();
                        connection.Close();
                        throw dbex;
                    }
                }
            }
            catch
            {
                throw;
            }
        }
Пример #11
0
        public async Task <ScriptDTO> TryReadFile(ScriptDTO item)
        {
            var cachePath = Path.Combine(IOPath.CacheDirectory, item.CachePath);
            var fileInfo  = new FileInfo(cachePath);

            if (fileInfo.Exists)
            {
                item.Content = File.ReadAllText(cachePath);
            }
            else
            {
                var infoPath = Path.Combine(IOPath.AppDataDirectory, item.FilePath);
                var infoFile = new FileInfo(infoPath);
                if (infoFile.Exists)
                {
                    if (await BuildScriptAsync(item, item.IsBuild))
                    {
                        cachePath = Path.Combine(IOPath.CacheDirectory, item.CachePath);
                        fileInfo  = new FileInfo(cachePath);
                        if (fileInfo.Exists)
                        {
                            item.Content = File.ReadAllText(cachePath);
                        }
                    }
                    else
                    {
                        toast.Show(SR.Script_ReadFileError.Format(item.Name));
                    }
                }
                else
                {
                    var temp = await DeleteScriptAsync(item);

                    if (temp.state)//$"脚本:{item.Name}_文件丢失已删除"
                    {
                        toast.Show(SR.Script_NoFile.Format(item.Name));
                    }
                    else
                    {
                        toast.Show(SR.Script_NoFileDeleteError.Format(item.Name));
                    }
                    //toast.Show($"脚本:{item.Name}_文件丢失,删除失败去尝试手动删除");
                }
            }
            return(item);
        }
Пример #12
0
        public void Update(ScriptDTO script)
        {
            try
            {
                using (DbConnection connection = db.CreateConnection())
                {
                    connection.Open();
                    DbTransaction transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted);

                    try
                    {
                        dbCommand = db.GetSqlStringCommand(" UPDATE public.scriptpacote SET" +
                                                           "    id_pacote = @id_pacote," +
                                                           "    script = @script," +
                                                           "    executado = @executado," +
                                                           "    erro = @erro" +
                                                           "     WHERE" +
                                                           "     id = @id");
                        db.AddInParameter(dbCommand, "@id_pacote", DbType.String, script.Id_pacote);
                        db.AddInParameter(dbCommand, "@script", DbType.String, script.Script);
                        db.AddInParameter(dbCommand, "@executado", DbType.Boolean, script.Executado);
                        db.AddInParameter(dbCommand, "@erro", DbType.String, script.Erro);
                        db.ExecuteNonQuery(dbCommand, transaction);

                        transaction.Commit();
                        connection.Close();
                    }
                    catch (DbException dbex)
                    {
                        transaction.Rollback();
                        connection.Close();
                        throw dbex;
                    }
                }
            }
            catch
            {
                throw;
            }
        }
Пример #13
0
        public async Task <bool> BuildScriptAsync(ScriptDTO model, bool build = true)
        {
            try
            {
                if (model.RequiredJsArray != null)
                {
                    var scriptContent = new StringBuilder();
                    if (build)
                    {
                        scriptContent.AppendLine("(function() {");
                        foreach (var item in model.RequiredJsArray)
                        {
                            try
                            {
                                var scriptInfo = await httpService.GetAsync <string>(item);

                                scriptContent.AppendLine(scriptInfo);
                            }
                            catch (Exception e)
                            {
                                var errorMsg = SR.Script_BuildDownloadError.Format(model.Name, item);
                                logger.LogError(e, errorMsg);
                                toast.Show(errorMsg);
                            }
                        }
                        scriptContent.AppendLine(model.Content);
                        scriptContent.AppendLine("})( )");
                    }
                    else
                    {
                        scriptContent.Append(model.Content);
                    }
                    var cachePath = Path.Combine(IOPath.CacheDirectory, model.CachePath);
                    var fileInfo  = new FileInfo(cachePath);
                    if (!fileInfo.Directory.Exists)
                    {
                        fileInfo.Directory.Create();
                    }
                    if (fileInfo.Exists)
                    {
                        fileInfo.Delete();
                    }
                    using (var stream = fileInfo.CreateText())
                    {
                        stream.Write(scriptContent);
                        await stream.FlushAsync();

                        await stream.DisposeAsync();

                        //stream
                    }

                    return(true);
                    //var scriptRequired = new string[model.RequiredJsArray.Length];
                    //Parallel.ForEach(model.RequiredJsArray, async (item,index)=>
                    //{
                    //	var scriptInfo = await httpService.GetAsync<string>(item);
                    //});
                }
            }
            catch (Exception e)
            {
                var msg = SR.Script_BuildError.Format(e.GetAllMessage());
                logger.LogError(e, msg);
                toast.Show(msg);
            }
            return(false);
        }
Пример #14
0
        private bool ExecutarScriptsBanco(BackgroundWorker status)
        {
            try
            {
                int versaoInicial = int.Parse(versaoSistema.Substring(5, 4));
                int versaoFinal   = int.Parse(versaoServidor.Substring(5, 4));

                versaoInicial++;
                do
                {
                    versaoServidor = "1.00." + CompletarZerosEsquerda(versaoInicial, 4);
                    if (Directory.Exists(DriveRede + "/sistemas/MechTech/Scripts/" + versaoServidor))
                    {
                        DirectoryInfo dirInfo = new DirectoryInfo(DriveRede + "/sistemas/MechTech/Scripts/" + versaoServidor);
                        tamanho = dirInfo.GetFiles().Count();
                        foreach (var item in dirInfo.GetFiles())
                        {
                            System.IO.StreamReader myFile = null;
                            myFile = new System.IO.StreamReader(item.FullName);
                            string texto = myFile.ReadToEnd();
                            consultas.Add(texto + "**" + item.Name.Replace(".sql", "") + "**" + versaoServidor);
                        }
                    }
                    versaoInicial++;
                } while (versaoInicial.Equals(versaoFinal));
                string nomeScript = string.Empty;
                try
                {
                    foreach (var consulta in consultas)
                    {
                        string[] scriptString = consulta.Split(new string[] { "**" }, StringSplitOptions.None);

                        //MONTANDO OS DADOS DO SCRIPT
                        ScriptDTO script = new ScriptDTO();
                        script.Script    = scriptString[0];
                        script.Id_script = int.Parse(scriptString[1]);
                        string[] dadosVersaoModulo = scriptString[2].Split(new string[] { "." }, StringSplitOptions.None);
                        script.Modulo    = dadosVersaoModulo[2];
                        script.Versao    = dadosVersaoModulo[0];
                        script.Executado = true;
                        nomeScript       = scriptString[1];

                        //VERIFICANDO SE O PACOTE JÁ EXISTE
                        int Id_pacote = new VersaoDAO().VerificaVersaoModulo(stringConexao, int.Parse(script.Versao), int.Parse(script.Modulo));
                        if (Id_pacote.Equals(0))
                        {
                            new VersaoDAO().Insert(int.Parse(script.Versao), int.Parse(script.Modulo), DateTime.Now.ToShortDateString(), DateTime.Now.ToString("hh:mm:ss tt"), stringConexao);
                            Id_pacote = new VersaoDAO().VerificaVersaoModulo(stringConexao, int.Parse(script.Versao), int.Parse(script.Modulo));
                        }
                        else
                        {
                            Id_pacote = new VersaoDAO().VerificaVersaoModulo(stringConexao, int.Parse(script.Versao), int.Parse(script.Modulo));
                        }

                        script.Id_pacote = Id_pacote;
                        //VERIFICAR SE O SCRIPT FOI EXECUTADO
                        bool scriptVerificar = new ExecutaSQLDAO(stringConexao).GetScript(script);
                        if (!scriptVerificar)
                        {
                            //EXECUTANDO O SCRIPT
                            new ExecutaSQLDAO(stringConexao).Create(script);
                        }
                        UpdateBarraExecucaoScriptSQLProgressBarControl(consultas.Count());
                    }
                }
                catch { throw new Exception("A seguinte consulta não pode ser executada: " + "\nVersão: " + versaoServidor + "\nConsulta: " + nomeScript); }
                return(true);
            }
            catch (Exception)
            {
                throw;
            }
        }
        /// <summary>
        /// Actualizar el script
        /// </summary>
        /// <param name="script"></param>
        /// <returns></returns>
        public ReturnMessage UpdateScript(ScriptDTO script)
        {
            ReturnMessage mensaje = new ReturnMessage();
            StringBuilder query   = new StringBuilder();


            int flagUpdate = 0;

            query.Append(@"SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
                            UPDATE SCRIPT SET");

            //valida que los campos tengan un valor para actualizar.
            if (!string.IsNullOrEmpty(script.Script))
            {
                query.Append(" Script=@script");
                flagUpdate = 1;
            }
            if (!string.IsNullOrEmpty(script.Extension))
            {
                if (flagUpdate == 1)
                {
                    query.Append(",");
                }
                query.Append(" Extension=@extension");
                flagUpdate = 1;
            }


            if (flagUpdate == 1)
            {
                query.Append(" WHERE SCRIPT_ID=@script_id;");
            }

            if (flagUpdate == 1)
            {
                using (var con = ConectarDB())
                {
                    con.Open();

                    try
                    {
                        using (SqlCommand command = new SqlCommand(query.ToString(), con))
                        {
                            if (!string.IsNullOrEmpty(script.Script))
                            {
                                command.Parameters.Add(new SqlParameter("@script", script.Script));
                            }
                            if (!string.IsNullOrEmpty(script.Extension))
                            {
                                command.Parameters.Add(new SqlParameter("@extension", script.Extension));
                            }
                            if (flagUpdate == 1)
                            {
                                command.Parameters.Add(new SqlParameter("@script_id", script.ID));
                            }

                            command.ExecuteNonQuery();
                        }
                        mensaje.Mensaje     = "El script se actualizó correctamente";
                        mensaje.TipoMensaje = TipoMensaje.Correcto;
                        mensaje.obj         = script;
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("Count not insert.");
                        mensaje.Mensaje     = ex.Message;
                        mensaje.TipoMensaje = TipoMensaje.Error;
                        mensaje.obj         = script;
                    }
                    finally
                    {
                        con.Close();
                    }
                }
            }
            return(mensaje);
        }
Пример #16
0
 public ReturnMessage Put([FromBody] ScriptDTO script)
 {
     ControllerVulkano.ScriptController scriptController = new ControllerVulkano.ScriptController();
     return(scriptController.UpdateScript(script));
 }
 public ReturnMessage Post([FromBody] ScriptDTO script)
 {
     Controller.ScriptController scriptController = new Controller.ScriptController();
     return(scriptController.AddScript(script));
 }