コード例 #1
0
        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)
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        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));
        }
コード例 #4
0
        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;
                }
            }
        }