public async Task <JsonResult> GetRecordAsync(int sheet, int id) { if (id <= 0) { return(new JsonResult("Некорректный идентификатор записи.")); } if (sheet <= 0) { return(new JsonResult("Некорректный идентификатор листа.")); } SheetRecordDataModel record = default; switch (sheet) { case 1: record = await _mainService.GetFirstSheetRecordAsync(id); break; case 2: record = await _mainService.GetSecondSheetRecordAsync(id); break; } if (record is null || record is (SheetRecordDataModel) default)
public async Task UpdateSecondSheetRecordAsync(SheetRecordDataModel sheetItem) { SecondSheetItem entityFromDb = await _context.SecondSheetItems.Where(x => !x.DtDelete.HasValue).AsNoTracking() .FirstOrDefaultAsync(i => i.ID == sheetItem.ID); if (entityFromDb is null || entityFromDb.DtDelete.HasValue) { throw new Exception("Запись не найдена."); } SecondSheetItem entity = _mapper.Map <SecondSheetItem>(sheetItem); entity.DtAdd = entityFromDb.DtAdd; entity.DtEdit = DateTime.UtcNow; try { _context.Entry(entity).State = EntityState.Modified; await _context.SaveChangesAsync(); } catch (Exception ex) { throw new Exception(ex.Message); } }
public async Task <JsonResult> GetSecondSheetRecordAsync(int id) { if (id <= 0) { return(new JsonResult("Некорректный идентификатор.")); } SheetRecordDataModel record = await _mainService.GetSecondSheetRecordAsync(id); if (record is null) { return(new JsonResult(new { error = "Запись не найдена." })); } SheetRecordViewModel model = _mapper.Map <SheetRecordViewModel>(record); return(new JsonResult(model)); }
public async Task UploadDataAsync(Stream data, CancellationToken ct) { XLWorkbook workbook = new XLWorkbook(data); if (workbook.Worksheets is null) { return; } foreach (IXLWorksheet worksheet in workbook.Worksheets) { List <IXLRow> rowList = worksheet.RowsUsed().ToList(); if (rowList.Count == 0) { continue; } bool haveHeader = rowList.First().Cells().Where(c => !c.IsEmpty()).Take(20).All(c => c.Value.ToString().ToLower().StartsWith("col")); IXLRow header = haveHeader ? rowList.First() : null; if (haveHeader) { rowList = rowList.Skip(1).ToList(); } //в задании указано парсить по 1 строке с каждого листа, поэтому заменяем список строк на первую строку rowList = rowList.Take(1).ToList(); List <SheetRecordDataModel> itemList = new List <SheetRecordDataModel>(); foreach (IXLRow row in rowList) { List <IXLCell> cellInRowList = row.Cells().Where(c => { bool result = !c.IsMerged() || c.MergedRange().FirstCell().Address.Equals(c.Address); return(result); }).Take(20).ToList(); if (cellInRowList.All(c => c.IsEmpty())) { continue; } SheetRecordDataModel item = new SheetRecordDataModel(); int cellNumber = 0; foreach (IXLCell cell in cellInRowList) { if (ct.IsCancellationRequested) { throw new OperationCanceledException("Загрузка отменена пользователем."); } cellNumber++; if (cell.IsEmpty()) { continue; } PropertyInfo field; //если есть шапка с названиями колонок, то заполняем модель по ней, если нет - по порядку if (haveHeader) { var columnName = header.Cell(cellNumber.ToString()).Value.ToString(); field = item.GetType().GetProperties().FirstOrDefault(f => f.Name.ToLower().Equals(columnName)); } else { field = item.GetType().GetProperties().FirstOrDefault(f => f.Name.ToLower().Contains(cellNumber.ToString())); } if (field != null) { field.SetValue(item, cell.Value.ToString()); } } itemList.Add(item); } switch (worksheet.Position) { case 1: await AddFirstSheetItemsAsync(itemList); break; case 2: await AddSecondSheetItemsAsync(itemList); break; } } }