예제 #1
0
 public Revise(ItemFileInfo halvaCardInfo, List <ItemFileInfo> terminalFiles, BackgroundWorker backgroundWorker)
 {
     this.halvaCardInfo    = halvaCardInfo ?? throw new ArgumentNullException("halvaCardInfo");
     this.terminalFiles    = terminalFiles ?? throw new ArgumentNullException("terminalFiles");
     this.backgroundWorker = backgroundWorker ?? throw new ArgumentNullException("backgroundWorker");
     currentProgress       = 0;
 }
 public static void ReadCsvFileContent(ItemFileInfo itemFileInfo)
 {
     using (FileStream fs = new FileStream(itemFileInfo.FullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
         using (StreamReader reader = new StreamReader(fs, Encoding.GetEncoding("windows-1251"))) {
             using (CsvReader csvReader = new CsvReader(reader)) {
                 itemFileInfo.FileContents = csvReader.GetRecords <FileContent>().ToList();
             }
         }
     }
 }
예제 #3
0
        public MainWindowViewModel()
        {
            ListFilesTerminal      = new ObservableCollection <ItemFileInfo>();
            GridMainVisibility     = Visibility.Visible;
            GridProgressVisibility = Visibility.Hidden;

            if (Debugger.IsAttached)
            {
                halvaCardReportFile = new ItemFileInfo(
                    @"\\mskv-fs-01\MSKV Files\Управление информационных технологий\07_Аналитический отдел\FAQ\Сверка данных по картам Халва\Примеры\Февраль\" +
                    @"ООО _Клиника ЛМС__7704544391_И_01.03.2019.csv");

                ListFilesTerminal.Add(new ItemFileInfo(
                                          @"\\mskv-fs-01\MSKV Files\Управление информационных технологий\07_Аналитический отдел\FAQ\Сверка данных по картам Халва\Примеры\Февраль\Сбер\" +
                                          @"7704544391_17133645_5026412390406_M02 - сочи.xlsx"));
                ListFilesTerminal.Add(new ItemFileInfo(
                                          @"\\mskv-fs-01\MSKV Files\Управление информационных технологий\07_Аналитический отдел\FAQ\Сверка данных по картам Халва\Примеры\Февраль\Сбер\" +
                                          @"7704544391_E4017003Q25527DO_4848334753986_M02 - Каменск.xlsx"));

                ListFilesTerminal.Add(new ItemFileInfo(
                                          @"\\mskv-fs-01\MSKV Files\Управление информационных технологий\07_Аналитический отдел\FAQ\Сверка данных по картам Халва\Примеры\Февраль\ВТБ\" +
                                          @"m_-_ООО_Клиника_ЛМС_-ret_innxxx5391 - сущевка, фрунзенская.xlsx"));
                ListFilesTerminal.Add(new ItemFileInfo(
                                          @"\\mskv-fs-01\MSKV Files\Управление информационных технологий\07_Аналитический отдел\FAQ\Сверка данных по картам Халва\Примеры\Февраль\ВТБ\" +
                                          @"m_01-02-2019-28-02-2019_ООО_Клиника_ЛМС_-ret_innxxx4391 - Казань.xlsx"));
                ListFilesTerminal.Add(new ItemFileInfo(
                                          @"\\mskv-fs-01\MSKV Files\Управление информационных технологий\07_Аналитический отдел\FAQ\Сверка данных по картам Халва\Примеры\Февраль\ВТБ\" +
                                          @"m_01-02-2019-28-02-2019_ООО_Клиника_ЛМС_-ret_innxxx4391 - Питер.xlsx"));
                ListFilesTerminal.Add(new ItemFileInfo(
                                          @"\\mskv-fs-01\MSKV Files\Управление информационных технологий\07_Аналитический отдел\FAQ\Сверка данных по картам Халва\Примеры\Февраль\ВТБ\" +
                                          @"m_01-02-2019-28-02-2019_Филиал_ООО_Клиника_ЛМС_в_г_Краснодаре-ret_innxxx4391 - краснодар.xlsx"));
                ListFilesTerminal.Add(new ItemFileInfo(
                                          @"\\mskv-fs-01\MSKV Files\Управление информационных технологий\07_Аналитический отдел\FAQ\Сверка данных по картам Халва\Примеры\Февраль\ВТБ\" +
                                          @"m_15-02-2019-15-02-2019_Филиал_ООО_Клиника_ЛМС_в_г_Уфе-ret_innxxx4391 - Уфа.xlsx"));

                ListFilesTerminal.Add(new ItemFileInfo(
                                          @"\\mskv-fs-01\MSKV Files\Управление информационных технологий\07_Аналитический отдел\FAQ\Сверка данных по картам Халва\Примеры\Февраль\Союз\" +
                                          @"Клиника ЛМС_февраль.xlsx"));
                ListFilesTerminal.Add(new ItemFileInfo(
                                          @"\\mskv-fs-01\MSKV Files\Управление информационных технологий\07_Аналитический отдел\FAQ\Сверка данных по картам Халва\Примеры\Февраль\Союз\" +
                                          @"Клиника ЛМС_февраль_2.xlsx"));
                ListFilesTerminal.Add(new ItemFileInfo(
                                          @"\\mskv-fs-01\MSKV Files\Управление информационных технологий\07_Аналитический отдел\FAQ\Сверка данных по картам Халва\Примеры\Февраль\Союз\" +
                                          @"Клиника ЛМС_февраль_3.xlsx"));
            }
        }
예제 #4
0
        public void Action(object parameter)
        {
            string param = parameter.ToString();

            if (param.Equals("SelectHalvaFile"))
            {
                if (SelectScvFile(out string selectedFile))
                {
                    HalvaCardReportFile = new ItemFileInfo(selectedFile);
                }
            }

            else if (param.Equals("AddFilesTerminal"))
            {
                SelectExcelFiles(ListFilesTerminal);
            }

            else if (param.Equals("ExecuteRevise"))
            {
                ExecuteRevise();
            }
        }
예제 #5
0
        public static string WriteFileInfoToExcel(ItemFileInfo itemFileInfo,
                                                  Action <double, string> updateProgress,
                                                  double progressCurrent)
        {
            UpdateProgress  = updateProgress ?? throw new ArgumentNullException("updateProgress");
            ProgressCurrent = progressCurrent;
            IWorkbook workbook   = null;
            ISheet    sheet      = null;
            string    resultFile = string.Empty;

            UpdateProgress(ProgressCurrent, "Создание новой книги Excel из шаблона");
            if (!CreateNewIWorkbook(itemFileInfo.FileName, "Template.xlsx",
                                    out workbook, out sheet, out resultFile, "Данные"))
            {
                return(string.Empty);
            }

            int rowNumber    = 1;
            int columnNumber = 0;

            UpdateProgress(ProgressCurrent, "Запись данных");
            foreach (FileContent fileContent in itemFileInfo.FileContents)
            {
                if (string.IsNullOrEmpty(fileContent.TransactionProcessingDate))
                {
                    continue;
                }

                IRow row = null;
                try { row = sheet.GetRow(rowNumber); } catch (Exception) { }

                if (row == null)
                {
                    row = sheet.CreateRow(rowNumber);
                }

                object[] values = new object[] {
                    fileContent.TransactionProcessingDate,
                    fileContent.TransactionCommittingDate,
                    fileContent.TransactionCommitingTime,
                    fileContent.CustomerName,
                    fileContent.CustomerINN == string.Empty ?
                    string.Empty : "'" + fileContent.CustomerINN,
                    fileContent.CustomerStoreName,
                    fileContent.CustomerStoreAddress,
                    fileContent.TerminalIdentificator == string.Empty ?
                    string.Empty : "'" + fileContent.TerminalIdentificator,
                    fileContent.CardNumber,
                    fileContent.OperationAmount,
                    fileContent.TotalReward,
                    fileContent.CompanyReward,
                    fileContent.City,
                    fileContent.AuthorizationCode == string.Empty ?
                    string.Empty : "'" + fileContent.AuthorizationCode,
                    fileContent.UniqueOperationNumberRNN == string.Empty ?
                    string.Empty : "'" + fileContent.UniqueOperationNumberRNN,
                    fileContent.CoincidenceType,
                    fileContent.CoincidencePercent == 0 ?
                    string.Empty : fileContent.CoincidencePercent.ToString(),
                    fileContent.CoincidenceSource,
                    fileContent.CoincidenceRowNumber == 0 ?
                    string.Empty : fileContent.CoincidenceRowNumber.ToString(),
                    fileContent.Comment
                };

                foreach (object value in values)
                {
                    ICell cell = null;
                    try { cell = row.GetCell(columnNumber); } catch (Exception) { }

                    if (cell == null)
                    {
                        cell = row.CreateCell(columnNumber);
                    }

                    string valueToWrite = value == null ? string.Empty : value.ToString();

                    if (double.TryParse(valueToWrite, out double result))
                    {
                        cell.SetCellValue(result);
                    }
                    else if (DateTime.TryParse(valueToWrite, out DateTime date))
                    {
                        cell.SetCellValue(date);
                    }
                    else
                    {
                        cell.SetCellValue(valueToWrite);
                    }

                    columnNumber++;
                }

                columnNumber = 0;
                rowNumber++;
            }

            UpdateProgress(ProgressCurrent, "Сохранение книги Excel");
            if (!SaveAndCloseIWorkbook(workbook, resultFile))
            {
                return(string.Empty);
            }

            UpdateProgress(progressCurrent, "Выполнение пост-обработки");
            if (!PerformFinalProcessing(resultFile))
            {
                UpdateProgress(ProgressCurrent, "!!!Во время выполнения возникли ошибки");
            }

            return(resultFile);
        }
        public static string ReadExcelFileContent(ItemFileInfo itemFileInfo)
        {
            IWorkbook workbook;

            using (FileStream file = new FileStream(itemFileInfo.FullPath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
                workbook = new XSSFWorkbook(file);
            }

            int startRow = 0;
            int cellRNN  = 0;
            int cellAuthorizationCode = 0;
            int cellOperationAmount   = 0;
            int cellCardNumber        = 0;
            int cellCommittingDate    = 0;
            int cellCommittingTime    = 0;

            FileType type  = FileType.Unknown;
            ISheet   sheet = workbook.GetSheetAt(0);

            try {
                IRow   row        = sheet.GetRow(0);
                string firstValue = GetCellValue(row.GetCell(0)).ToLower();
                if (firstValue.StartsWith("номер_терминала"))
                {
                    type = FileType.Soyuz;
                }
                else if (firstValue.StartsWith("отчет о возмещении денежных средств предприятию"))
                {
                    string secondValue = GetCellValue(sheet.GetRow(1).GetCell(0)).ToLower();
                    if (secondValue.Equals("номер транзакции"))
                    {
                        type = FileType.SberbankOld;
                    }
                    else
                    {
                        type = FileType.SberbankNew;
                    }
                }
                else if (firstValue.StartsWith("отчёт по обработанным операциям за период"))
                {
                    type = FileType.Vtb;
                }
            } catch (Exception) { }


            switch (type)
            {
            case FileType.SberbankOld:
                startRow = 2;
                cellRNN  = 0;
                cellAuthorizationCode = 21;
                cellOperationAmount   = 10;
                cellCardNumber        = 20;
                cellCommittingDate    = 8;
                cellCommittingTime    = 8;
                break;

            case FileType.SberbankNew:
                startRow = 3;
                cellRNN  = -1;
                cellAuthorizationCode = 9;
                cellOperationAmount   = 5;
                cellCardNumber        = 8;
                cellCommittingDate    = 2;
                cellCommittingTime    = 2;
                break;

            case FileType.Vtb:
                startRow = 12;
                cellRNN  = 13;
                cellAuthorizationCode = 6;
                cellOperationAmount   = 9;
                cellCardNumber        = 1;
                cellCommittingDate    = 4;
                cellCommittingTime    = 5;
                break;

            case FileType.Soyuz:
                startRow = 1;
                cellRNN  = 5;
                cellAuthorizationCode = 6;
                cellOperationAmount   = 7;
                cellCardNumber        = 4;
                cellCommittingDate    = 2;
                cellCommittingTime    = 3;
                break;

            default:
                return(type.ToString());
            }

            for (int rowCount = startRow; rowCount <= sheet.LastRowNum; rowCount++)
            {
                try {
                    IRow row = sheet.GetRow(rowCount);

                    if (row == null)                      //null is when the row only contains empty cells
                    {
                        continue;
                    }

                    string rnn = string.Empty;

                    if (cellRNN != -1)
                    {
                        rnn = GetCellValue(row.GetCell(cellRNN));

                        if (string.IsNullOrEmpty(rnn) ||
                            string.IsNullOrWhiteSpace(rnn) ||
                            !long.TryParse(rnn, out _))
                        {
                            continue;
                        }
                    }

                    string authorizationCode = GetCellValue(row.GetCell(cellAuthorizationCode));
                    string operationAmount   = GetCellValue(row.GetCell(cellOperationAmount));
                    string cardNumber        = GetCellValue(row.GetCell(cellCardNumber));
                    string committingDate    = GetCellValue(row.GetCell(cellCommittingDate));
                    string committingTime    = GetCellValue(row.GetCell(cellCommittingTime));

                    if (type == FileType.SberbankNew)
                    {
                        committingDate = GetCellValue(row.GetCell(cellCommittingDate), true);
                    }

                    if (type == FileType.SberbankOld ||
                        type == FileType.SberbankNew)
                    {
                        string[] splittedDateTime = committingDate.Split(' ');
                        if (splittedDateTime.Length == 2)
                        {
                            committingDate = splittedDateTime[0];
                            committingTime = splittedDateTime[1];

                            if (committingTime.Length == 7)
                            {
                                committingTime = "0" + committingTime;
                            }
                        }
                    }

                    //if (type == FileType.Soyuz) {
                    //	if (committingDate.Length == 8)
                    //		committingDate =
                    //			committingDate.Substring(6, 2) + "." +
                    //			committingDate.Substring(4, 2) + "." +
                    //			committingDate.Substring(0, 4);

                    //	if (committingTime.Length == 6)
                    //		committingTime =
                    //			committingTime.Substring(0, 2) + ":" +
                    //			committingTime.Substring(2, 2) + ":" +
                    //			committingTime.Substring(4, 2);
                    //}

                    FileContent fileContent = new FileContent {
                        UniqueOperationNumberRNN = rnn,
                        OperationAmount          = operationAmount,
                        AuthorizationCode        = authorizationCode,
                        CardNumber = cardNumber,
                        TransactionCommittingDate = committingDate,
                        TransactionCommitingTime  = committingTime,
                        CoincidenceRowNumber      = rowCount + 1
                    };

                    itemFileInfo.FileContents.Add(fileContent);
                } catch (Exception e) {
                    Console.WriteLine(e.Message + Environment.NewLine + e.StackTrace);
                }
            }

            workbook.Close();
            return(type.ToString());
        }