Ejemplo n.º 1
0
        public async Task ImportExcelProducer(IFormFile excel, CancellationToken cancellationToken)
        {
            if (excel.Length > 10000)
            {
                throw new ImportExcelException("Файл не может быть больше 10 000 байт");
            }
            var supportedExcelFiles = new[] { "xls", "xlsx" };
            var fileExt             = System.IO.Path.GetExtension(excel.FileName).Substring(1);

            if (!supportedExcelFiles.Contains(fileExt))
            {
                throw new ImportExcelException("Данный формат файла не поддерживается, загрузите excel файл");
            }

            var excelFileStream = excel.OpenReadStream();

            var userId = await _identityService.GetCurrentUserId(cancellationToken);

            var domainUser = await _userRepository.FindById(userId, cancellationToken);

            if (!domainUser.IsCorporation)
            {
                throw new HaveNoRightException($"У пользователя с id {userId} нет прав массово загружать объявления");
            }

            var importExcelEndpoint = await _sendEndpointProvider.GetSendEndpoint(new Uri("queue:import_excel"));

            using (IExcelDataReader excelReader = ExcelReaderFactory.CreateReader(excelFileStream))
            {
                DataSet excelFileData = excelReader.AsDataSet(new ExcelDataSetConfiguration
                {
                    ConfigureDataTable = _ => new ExcelDataTableConfiguration {
                        UseHeaderRow = true
                    }
                });

                DataRowCollection excelRows = excelFileData.Tables[0].Rows;

                foreach (DataRow row in excelRows)
                {
                    var message = new ImportExcelMessage
                    {
                        Title       = row.ItemArray[0].ToString(),
                        Description = row.ItemArray[1].ToString(),
                        Price       = Convert.ToDecimal(row.ItemArray[2].ToString()),
                        CategoryId  = Convert.ToInt32(row.ItemArray[3].ToString()),
                        Location    = Convert.ToString(row.ItemArray[4].ToString()),
                        GetLat      = Convert.ToDecimal(row.ItemArray[5].ToString()),
                        GeoLon      = Convert.ToDecimal(row.ItemArray[6].ToString()),
                        OwnerId     = userId
                    };
                    await importExcelEndpoint.Send(message, cancellationToken);
                }
            }
        }
Ejemplo n.º 2
0
        public async Task CreateByExcelConsumer(ImportExcelMessage message, CancellationToken cancellationToken)
        {
            var advertisement = new Domain.Advertisement
            {
                Title       = message.Title,
                Description = message.Description,
                Price       = message.Price,
                OwnerId     = message.OwnerId,
                CategoryId  = message.CategoryId,
                CreatedDate = DateTime.UtcNow,
                Location    = message.Location,
                GeoLat      = message.GetLat,
                GeoLon      = message.GeoLon,
                Status      = Domain.Advertisement.Statuses.Created
            };

            await _repository.Save(advertisement, cancellationToken);
        }