protected override void FillItems() { try { foreach (string file in SourceFiles) { using (var streamReader = new StreamReader(file)) { List <string> fileHeaders = streamReader.ReadLine().Split(Separator).ToList(); // Contiene el header(key) y la posicion(value) en el archivo original, que seran incluidos en el reporte. Dictionary <string, int> headers = GetHeadersIndexes(_reportConfiguration.ReportFields, fileHeaders, out int processedIndex, out int resultIndex); if (processedIndex == -1 || resultIndex == -1) { continue; } while (!streamReader.EndOfStream) { string[] lineArray = streamReader.ReadLine().Split(Separator); if (lineArray.Length <= resultIndex || lineArray[processedIndex] != Constants.PROCESS_RESULT_OK) { continue; } var item = new ReportItem(); foreach (string key in headers.Keys) { //index in original file. int value = headers[key]; //index in report int index = value; ReportFieldConfiguration field = _reportConfiguration.ReportFields.FirstOrDefault(x => x.NameInFile == key); if (field != null) { index = field.Position; } item.AddValue(lineArray[value].Trim(), index); } item.ResultId = lineArray[resultIndex]; _items.Add(item); } } } GetDataFromDB(_items, _dateFormat); } catch (Exception) { _logger.Error("Error trying to get report items"); throw; } }
protected override void FillItems() { Dictionary <string, int> headers; try { using (StreamReader streamReader = new StreamReader(SourceFile)) { int processedIndex; int resultIndex; headers = GetHeadersIndexes(_reportConfiguration.ReportFields, streamReader.ReadLine().Split(Separator).ToList(), out processedIndex, out resultIndex); while (!streamReader.EndOfStream) { string[] lineArray = streamReader.ReadLine().Split(Separator); if (processedIndex == -1 || resultIndex == -1 || lineArray.Length <= resultIndex) { continue; } if (lineArray[processedIndex] != Constants.PROCESS_RESULT_OK) { continue; } var item = new ReportItem(); foreach (int value in headers.Values) { item.AddValue(lineArray[value].Trim()); } item.ResultId = lineArray[resultIndex]; _items.Add(item); } } GetDataFromDB(_items, _dateFormat); } catch (Exception) { _logger.Error("Error trying to get report items"); throw; } }
protected override void FillItems() { Dictionary <string, int> headers; List <Dictionary <string, int> > headersList; try { foreach (string file in SourceFiles) { using (var reader = new StreamReader(file)) { int processedIndex; int resultIndex; List <string> fileHeaders = reader.ReadLine().Split(Separator).ToList(); headers = GetHeadersIndexes(_reportConfiguration.ReportFields, fileHeaders, out processedIndex, out resultIndex); //headersList = GetHeadersList(_reportConfiguration.Fields.Except(headers.Keys).ToList(), fileHeaders); List <string> fields = _reportConfiguration.ReportFields.Where(x => !string.IsNullOrEmpty(x.NameInFile)).Select(x => x.HeaderName).Except(headers.Keys).ToList(); headersList = GetHeadersList(fields, fileHeaders); while (!reader.EndOfStream) { string[] lineArray = reader.ReadLine().Split(Separator); if (processedIndex == -1 || resultIndex == -1 || lineArray.Length <= resultIndex) { continue; } if (lineArray[processedIndex] != Constants.PROCESS_RESULT_OK) { continue; } string resultId = lineArray[resultIndex]; foreach (var dHeader in headersList) { bool hasValue = false; var item = new ReportItem(); foreach (int specialValue in dHeader.Values) { string fileValue = lineArray[specialValue]; if (!string.IsNullOrEmpty(fileValue)) { item.AddValue(fileValue.Trim()); hasValue = true; } } if (hasValue) { foreach (int fixValue in headers.Values) { item.AddValue(lineArray[fixValue].Trim(), fixValue); } item.ResultId = resultId; _items.Add(item); } } } } } GetDataFromDB(_items, _dateFormat); } catch (Exception e) { _logger.Error("Error trying to get report items"); throw; } }
protected void GetDataFromDB(List <ReportItem> items, string dateFormat) { List <string> guids = items.Select(it => it.ResultId).Distinct().ToList(); var sqlHelper = new SqlHelper(); try { int i = 0; while (i < guids.Count) { // TODO use skip take from linq. var aux = new List <string>(); for (int count = 0; i < guids.Count && count < 1000; count++) { aux.Add(guids[i]); i++; } List <DBReportItem> dbReportItemList = sqlHelper.GetResultsByDeliveryList(UserId, aux); foreach (DBReportItem dbReportItem in dbReportItemList) { ReportItem item = items.FirstOrDefault(x => x.ResultId == dbReportItem.MessageGuid); if (item != null) { string status; string description; GetStatusAndDescription(dbReportItem, out status, out description); foreach (ReportFieldConfiguration reportField in _reportConfiguration.ReportFields.Where(x => !string.IsNullOrEmpty(x.NameInDB))) { switch (reportField.NameInDB) { case "CreatedAt": item.AddValue(dbReportItem.CreatedAt.AddHours(ReportGMT).ToString(dateFormat), reportField.Position); break; case "Status": item.AddValue(status, reportField.Position); break; case "Description": item.AddValue(description, reportField.Position); break; case "ClickEventsCount": item.AddValue(dbReportItem.ClickEventsCount.ToString(), reportField.Position); break; case "OpenEventsCount": item.AddValue(dbReportItem.OpenEventsCount.ToString(), reportField.Position); break; case "Subject": item.AddValue(dbReportItem.Subject, reportField.Position); break; case "FromEmail": item.AddValue(dbReportItem.FromEmail, reportField.Position); break; case "FromName": item.AddValue(dbReportItem.FromName, reportField.Position); break; case "Address": item.AddValue(dbReportItem.Address, reportField.Position); break; case "OpenDate": item.AddValue(dbReportItem.OpenDate.AddHours(ReportGMT).ToString(dateFormat), reportField.Position); break; case "ClickDate": item.AddValue(dbReportItem.ClickDate.AddHours(ReportGMT).ToString(dateFormat), reportField.Position); break; case "BounceDate": item.AddValue(dbReportItem.BounceDate.AddHours(ReportGMT).ToString(dateFormat), reportField.Position); break; } } } } aux.Clear(); } sqlHelper.CloseConnection(); } catch (Exception e) { _logger.Error($"Error on get data from DB {e}"); throw; } }