示例#1
0
        public async Task <IActionResult> SaveFulfillmentCenter([FromBody] FulfillmentCenter center)
        {
            await _fulfillmentCenterService.SaveChangesAsync(new[] { center });

            return(Ok(center));
        }
        public async Task ImportAsync(Stream inputStream, ExportImportOptions options, Action <ExportImportProgressInfo> progressCallback, ICancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            var progressInfo = new ExportImportProgressInfo();
            var fulfillmentCentersTotalCount = 0;
            var inventoriesTotalCount        = 0;

            using (var streamReader = new StreamReader(inputStream))
                using (var reader = new JsonTextReader(streamReader))
                {
                    while (reader.Read())
                    {
                        if (reader.TokenType == JsonToken.PropertyName)
                        {
                            if (reader.Value.ToString() == "FulfillmentCenterTotalCount")
                            {
                                fulfillmentCentersTotalCount = reader.ReadAsInt32() ?? 0;
                            }
                            else if (reader.Value.ToString() == "FulfillmentCenters")
                            {
                                var fulfillmentCenters     = new List <FulfillmentCenter>();
                                var fulfillmentCenterCount = 0;
                                while (reader.TokenType != JsonToken.EndArray)
                                {
                                    var fulfillmentCenter = _serializer.Deserialize <FulfillmentCenter>(reader);
                                    fulfillmentCenters.Add(fulfillmentCenter);
                                    fulfillmentCenterCount++;

                                    reader.Read();
                                }

                                for (int i = 0; i < fulfillmentCenterCount; i += BatchSize)
                                {
                                    await _fulfillmentCenterService.SaveChangesAsync(fulfillmentCenters.Skip(i).Take(BatchSize).ToArray());

                                    if (fulfillmentCenterCount > 0)
                                    {
                                        progressInfo.Description = $"{ i } of { fulfillmentCenterCount } fulfillment centers imported";
                                    }
                                    else
                                    {
                                        progressInfo.Description = $"{ i } fulfillment centers imported";
                                    }
                                    progressCallback(progressInfo);
                                }
                            }
                            else if (reader.Value.ToString() == "InventoriesTotalCount")
                            {
                                inventoriesTotalCount = reader.ReadAsInt32() ?? 0;
                            }
                            else if (reader.Value.ToString() == "Inventories")
                            {
                                var inventories    = new List <InventoryInfo>();
                                var inventoryCount = 0;
                                while (reader.TokenType != JsonToken.EndArray)
                                {
                                    var inventory = _serializer.Deserialize <InventoryInfo>(reader);
                                    inventories.Add(inventory);
                                    inventoryCount++;

                                    reader.Read();
                                }

                                for (int i = 0; i < inventoryCount; i += BatchSize)
                                {
                                    await _inventoryService.SaveChangesAsync(inventories.Skip(i).Take(BatchSize));

                                    if (inventoryCount > 0)
                                    {
                                        progressInfo.Description =
                                            $"{i} of {inventoryCount} inventories imported";
                                    }
                                    else
                                    {
                                        progressInfo.Description = $"{i} inventories imported";
                                    }
                                    progressCallback(progressInfo);
                                }
                            }
                        }
                    }
                }
        }
        public async Task DoImportAsync(Stream inputStream, Action <ExportImportProgressInfo> progressCallback, ICancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            var progressInfo = new ExportImportProgressInfo();

            using (var streamReader = new StreamReader(inputStream))
                using (var reader = new JsonTextReader(streamReader))
                {
                    while (reader.Read())
                    {
                        if (reader.TokenType == JsonToken.PropertyName)
                        {
                            if (reader.Value.ToString() == "FulfillmentCenters")
                            {
                                await reader.DeserializeJsonArrayWithPagingAsync <FulfillmentCenter>(_jsonSerializer, BatchSize,
                                                                                                     items => _fulfillmentCenterService.SaveChangesAsync(items.ToArray()), processedCount =>
                                {
                                    progressInfo.Description = $"{ processedCount } FulfillmentCenters have been imported";
                                    progressCallback(progressInfo);
                                }, cancellationToken);
                            }
                            else if (reader.Value.ToString() == "Inventories")
                            {
                                await reader.DeserializeJsonArrayWithPagingAsync <InventoryInfo>(_jsonSerializer, BatchSize,
                                                                                                 items => _inventoryService.SaveChangesAsync(items.ToArray()), processedCount =>
                                {
                                    progressInfo.Description = $"{ processedCount } Inventories have been imported";
                                    progressCallback(progressInfo);
                                }, cancellationToken);
                            }
                        }
                    }
                }
        }