public static void UpdateConfig(ConnectionConfig config) { List <ConnectionConfig> configs = JsonConfigUtil.GetConfigObject <List <ConnectionConfig> >(PathConnections); //检查旧名称 if (configs == null || !configs.Exists(p => p.Id.Equals(config.Id))) { throw new KeyNotFoundException($"配置文件中已丢失原配置信息。"); } //检查新名称 List <ConnectionConfig> tmps = configs.Where(p => p.Id.Equals(config.Id) == false).ToList(); if (tmps != null && tmps.Exists(p => p.Name.Equals(config.Name))) { throw new DuplicateMemberException($"已存在名为 {config.Name} 的配置信息。"); } ConnectionConfig tmp = configs.Find(p => p.Id.Equals(config.Id)); tmp.IP = config.IP; tmp.Name = config.Name; tmp.Password = config.Password; tmp.Port = config.Port; JsonConfigUtil.SetConfigObject <List <ConnectionConfig> >(PathConnections, configs); DictConnectionConfig[config.Id] = config; string host = (string.IsNullOrEmpty(config.Password) ? "" : $"{config.Password}@") + $"{config.IP}:{config.Port}"; string[] hosts = new string[] { host }; RedisCaches[config.Id] = new RedisCache(hosts, hosts); }
/// <summary> /// 移除配置信息。 /// </summary> /// <param name="id"></param> public static void RemoveConfig(string id) { List <ConnectionConfig> configs = JsonConfigUtil.GetConfigObject <List <ConnectionConfig> >(PathConnections); int index = configs.FindIndex(p => p.Id.Equals(id)); configs.RemoveAt(index); JsonConfigUtil.SetConfigObject <List <ConnectionConfig> >(PathConnections, configs); DictConnectionConfig.Remove(id); RedisCaches.Remove(id); }
/// <summary> /// 保存配置信息。 /// </summary> /// <param name="config"></param> /// <exception cref="DuplicateMemberException">成员重复异常</exception> public static void SaveConfig(ConnectionConfig config) { List <ConnectionConfig> configs = JsonConfigUtil.GetConfigObject <List <ConnectionConfig> >(PathConnections); if (configs == null) { configs = new List <ConnectionConfig>(); } if (configs.Exists(p => p.Name.Equals(config.Name))) { throw new DuplicateMemberException($"已存在名为 {config.Name} 的配置信息。"); } configs.Add(config); JsonConfigUtil.SetConfigObject <List <ConnectionConfig> >(PathConnections, configs); DictConnectionConfig.Add(config.Id, config); string host = (string.IsNullOrEmpty(config.Password) ? "" : $"{config.Password}@") + $"{config.IP}:{config.Port}"; string[] hosts = new string[] { host }; RedisCaches.Add(config.Id, new RedisCache(hosts, hosts)); }
/// <summary> /// 获取所有配置信息 /// </summary> /// <returns></returns> public static List <ConnectionConfig> GetAllConnectionConfig() { List <ConnectionConfig> configs = JsonConfigUtil.GetConfigObject <List <ConnectionConfig> >(PathConnections); return(configs); }
static void Main(string[] args) { Console.SetWindowSize(140, 30); string message; int consoleCursor = 0; var configPath = Directory.GetCurrentDirectory() + "\\appconfig.json"; //Ставим логгер if (!Directory.Exists("\\logs")) { Directory.CreateDirectory("logs"); } Logger.SetFile(Directory.GetCurrentDirectory() + "\\logs\\" + $"user_log_{DateTime.Now:ddMMyy_hhmm}.txt"); //Чтение конфига Console.WriteLine("Подготовка загрузки.\nЧтение конфигурационного файла..."); try { ConfigUtil configUtil = new JsonConfigUtil(configPath); configUtil.ReadConfig(); message = $"Конфигурационный файл {configPath} успешно загружен."; WriteLineColor(message, ConsoleColor.DarkGreen); Logger.WriteLine(message); } catch (Exception) { message = $"Ошибка загрузки конфигурационного файла {configPath}!"; WriteLineColor(message, ConsoleColor.DarkRed); Logger.WriteLine(message); SayByeBye(); return; } DataClient dataClient = new OracleDataClient(AppConfig.DatabaseConnectionString); //<--для пластичности можно переделать в свитч if (!Directory.Exists(AppConfig.WorkingDirectory) || !dataClient.TestConnection()) { message = "Ошибка: Загрузка невозможна (отсутствует рабочая директория и/или соединение с БД)."; WriteLineColor(message, ConsoleColor.DarkRed); Logger.WriteLine(message); SayByeBye(); return; } foreach (var table in AppConfig.Tables) { dataClient.ConfTable = table; if (Directory.Exists(AppConfig.WorkingDirectory + table.SubDirectory)) { consoleCursor += 6; var timer = new System.Diagnostics.Stopwatch(); timer.Start(); DrawLine(); WriteLineDifferentColor("Обработка поддиректории {1}", $"{table.SubDirectory}", ConsoleColor.DarkYellow); Logger.WriteLine($"Обработка поддиректории {table.SubDirectory}"); var pathList = Directory.GetFiles(AppConfig.WorkingDirectory + table.SubDirectory + "\\", AppConfig.FileExtension).ToList(); WriteLineDifferentColor("Будет обработано {1} файлов.\nЗагрузка файлов:\n", $"{pathList.Count}", ConsoleColor.DarkYellow); Logger.WriteLine($"Будет обработано {pathList.Count} файлов.\nЗагрузка файлов:\n"); foreach (var path in pathList) { ClearLine(consoleCursor); ClearLine(consoleCursor + 1); Console.SetCursorPosition(0, consoleCursor); WriteLineDifferentColor("Прогресс обработки ({1}/{2}):", $"{pathList.IndexOf(path) + 1}", $"{pathList.Count}", ConsoleColor.DarkGreen, ConsoleColor.DarkYellow); message = $"Файл {path.Split('\\')[path.Split('\\').Length - 1]} "; Console.Write(message); Logger.WriteLine(message); try { DataParser parser = new XlsxDataParser(path, table); DataTable dataTable = parser.ReadFile(); dataClient.Send(dataTable); if (AppConfig.DeleteFilesAfterLoad) { File.Delete(path); } } catch (Exception) { Console.WriteLine("ОШИБКА."); Logger.WriteLine("ОШИБКА. Файл не загружен."); } } timer.Stop(); message = $"Файлы поддиректории загружены за {timer.Elapsed.TotalMinutes} минут."; WriteLineColor(message, ConsoleColor.DarkGreen); Logger.WriteLine(message); } } WriteLineColor("Все файлы успешно загружены.", ConsoleColor.Green); Logger.WriteLine("Все файлы успешно загружены."); SayByeBye(); }