Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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;
        }