private void BwLoadToDb_DoWork(object sender, DoWorkEventArgs e) { e.Result = false; BackgroundWorker bw = sender as BackgroundWorker; IsButtonLoadToDbEnabled = false; bw.ReportProgress(0, new string('=', 40)); try { VerticaClient verticaClient = new VerticaClient( VerticaSettings.host, VerticaSettings.database, VerticaSettings.user, VerticaSettings.password, bw); bool isOk = false; if (IsCheckedLoadTypeTreatmentsDetails) { isOk = verticaClient.ExecuteUpdateQuery(VerticaSettings.sqlInsertTreatmentsDetails, true, fileInfo); } else if (IsCheckedLoadTypeProfitAndLoss) { isOk = verticaClient.ExecuteUpdateQuery(VerticaSettings.sqlInsertProfitAndLoss, false, fileInfo); } if (isOk) { bw.ReportProgress(0, "Данные успешно загружены в БД"); if (IsCheckedLoadTypeProfitAndLoss) { e.Result = true; return; } //bw.ReportProgress(0, "Обновление данных в основной таблице с услугами (это может занять несколько минут). Дождитесь окончания."); //DataTable dataTableRefresh = verticaClient.GetDataTable(VerticaSettings.sqlRefreshOrderdet); //if (dataTableRefresh != null) // if (dataTableRefresh.Rows[0][0].ToString().Equals("refresh_columns completed")) { // bw.ReportProgress(0, "Обновление выполнено успешно"); // bw.ReportProgress(0, "Копирование исходного файла в архив"); // string pathArchive = Program.GetArchivePath(out string messageError); // if (string.IsNullOrEmpty(pathArchive)) { // bw.ReportProgress(0, "Не удалось получить доступ к папке архива: " + messageError); // } else { // try { // string fileName = Path.GetFileNameWithoutExtension(SelectedFile); // string fileExtension = Path.GetExtension(SelectedFile); // string archiveFilePath = Path.Combine(pathArchive, fileName + fileExtension); // if (File.Exists(archiveFilePath)) // archiveFilePath = Path.Combine(pathArchive, fileName + "_" + DateTime.Now.ToString("yyyyMMddHHmmss") + fileExtension); // File.Copy(SelectedFile, archiveFilePath); // bw.ReportProgress(0, "Файл " + fileName + fileExtension + " успешно скопирован в архив"); // e.Result = true; // } catch (Exception excArch) { // bw.ReportProgress(0, "Не удалось скопировать файл: " + excArch.Message + Environment.NewLine // + excArch.StackTrace); // } // } // } } else { bw.ReportProgress(0, "!!! Во время загрузки возникли ошибки"); } } catch (Exception exc) { string message = "!!! Не удалось выполнить загрузку в БД: " + exc.Message + Environment.NewLine + exc.StackTrace; Logging.ToLog(message); bw.ReportProgress(0, message); } }
private void BwReadFile_DoWork(object sender, DoWorkEventArgs e) { e.Result = false; BackgroundWorker bw = sender as BackgroundWorker; UpdateProgress("Считывание файла: " + SelectedFile + ", лист: " + SelectedSheetName); string fileResult; if (IsCheckedLoadTypeTreatmentsDetails) { fileResult = Program.ReadTreatmentsDetailsFileContent(selectedFile, SelectedSheetName, out fileInfo, bw); } else if (IsCheckedLoadTypeProfitAndLoss) { fileResult = Program.ReadProfitAndLossLFileContent(selectedFile, SelectedSheetName, out fileInfo, bw); } else { fileResult = "Неизвестный тип импорта; ошибок: 1"; } UpdateProgress(fileResult); if (!fileResult.Contains("ошибок: 0")) { UpdateProgress("!!! Имеются ошибки при считывании файла, продолжение невозможно"); if (!Debugger.IsAttached) { return; } } int rowsReadedCount = 0; if (IsCheckedLoadTypeTreatmentsDetails) { rowsReadedCount = Program.FileContentTreatmentsDetails.Rows.Count; } else if (IsCheckedLoadTypeProfitAndLoss) { rowsReadedCount = Program.FileContentProfitAndLoss.Count; } if (rowsReadedCount == 0) { UpdateProgress("!!! Не удалось считать данные для записи в БД (пустой файл / несоответствие формата))"); return; } if (IsCheckedLoadTypeProfitAndLoss) { e.Result = true; return; } UpdateProgress("Создание подключения к БД"); VerticaClient verticaClient = new VerticaClient( VerticaSettings.host, VerticaSettings.database, VerticaSettings.user, VerticaSettings.password, bw); UpdateProgress("Запрос данных по выбранной страховой за указанный период"); string sqlQuery = VerticaSettings.sqlGetDataTreatmentsDetails; if (SelectedInsuranceCompany.Equals("Другие СК")) { sqlQuery = VerticaSettings.sqlGetDataTreatmentsDetailsOtherIc; } DataTable dataTableDb = verticaClient.GetDataTable( sqlQuery.Replace("@jids", insuranceCompaniesJID[SelectedInsuranceCompany]), new Dictionary <string, object> { { "@dateBegin", DateBegin }, { "@dateEnd", DateEnd } }); UpdateProgress("Получено строк: " + dataTableDb.Rows.Count); if (dataTableDb.Rows.Count == 0) { UpdateProgress("!!! Не удалось получить информацию из БД за указанный период (нет приемов)"); return; } UpdateProgress(new string('-', 40)); UpdateProgress("Сверка данных между файлом Excel и БД"); bool isDataOk = Program.IsCompareReadedDataToDbOk( dataTableDb, out int rowsToDelete, out int rowsLoadedBefore, out int rowsWithNoOrdtid, bw); UpdateProgress("Расчет и применение средней скидки для изначальных данных"); Program.ApplyAverageDiscount(dataTableDb, bw); UpdateProgress(new string('=', 40)); if (isDataOk) { UpdateProgress("Сводная информация по загруженным данным: "); int serviceCountLoaded = 0; double serviceAmountLoaded = 0; int rowCountLoaded = 0; foreach (DataRow dataRow in Program.FileContentTreatmentsDetails.Rows) { string contract = dataRow["contract"].ToString(); if (string.IsNullOrEmpty(contract)) { continue; } int serviceCount = int.Parse(dataRow["service_count"].ToString()); serviceCountLoaded += serviceCount; double serviceAmount = double.Parse(dataRow["amount_total_with_discount"].ToString()); serviceAmountLoaded += serviceAmount; rowCountLoaded++; } int serviceCountDb = 0; double serviceAmountDb = 0; int rowCountDb = dataTableDb.Rows.Count; foreach (DataRow dataRow in dataTableDb.Rows) { int serviceCount = int.Parse(dataRow["schcount"].ToString()); serviceCountDb += serviceCount; double serviceAmount = double.Parse(dataRow["schamount"].ToString()); serviceAmountDb += serviceAmount; } UpdateProgress( "\t\t| Кол-во услуг\t| Общая стоимость\t| Кол-во строк" + Environment.NewLine + "Загруженный файл\t| " + serviceCountLoaded.ToString("N0") + "\t\t| " + serviceAmountLoaded.ToString("N2") + "\t\t| " + rowCountLoaded.ToString("N0") + Environment.NewLine + "Данные в БД\t\t| " + serviceCountDb.ToString("N0") + "\t\t| " + serviceAmountDb.ToString("N2") + "\t\t| " + rowCountDb.ToString("N0")); UpdateProgress(new string('-', 80)); UpdateProgress("Кол-во строк, помеченных для удаления: " + rowsToDelete); UpdateProgress(new string('-', 80)); UpdateProgress("Сверка выполнена успешно, ошибок нет"); } else { UpdateProgress("Считано строк из файла: " + rowsReadedCount); if (rowsLoadedBefore > 0) { UpdateProgress("!!! Строк, загруженных ранее: " + rowsLoadedBefore + " - не допускается повторная загрузка данных, необходимо сначала удалить ранее загруженные данные"); } if (rowsWithNoOrdtid > 0) { UpdateProgress("!!! Строк, для которых не удалось найти сопоставления в БД: " + rowsWithNoOrdtid + " - не допускается загрузка данных, которые невозможно идентифицировать в БД"); if (Debugger.IsAttached) { isDataOk = true; } } UpdateProgress("Для консультирования просьба обратиться в отдел поддержки бизнес-приложений"); } e.Result = isDataOk; }