示例#1
0
        public void DoImport(Stream backupStream, Action <ExportImportProgressInfo> progressCallback)
        {
            var backupObject = backupStream.DeserializeJson <BackupObject>();

            progressCallback(new ExportImportProgressInfo($"The {backupObject.FulfillmentCenters.Count()} fulfilmentCenters are importing"));
            _fulfillmentCenterService.SaveChanges(backupObject.FulfillmentCenters);
            progressCallback(new ExportImportProgressInfo($"The {backupObject.FulfillmentCenters.Count()} fulfilmentCenters has been imported"));

            const int batchSize  = 50;
            var       totalCount = backupObject.InventoryInfos.Count();

            progressCallback(new ExportImportProgressInfo($"The {totalCount} inventories are importing"));
            for (int i = 0; i < totalCount; i += batchSize)
            {
                _inventoryService.UpsertInventories(backupObject.InventoryInfos.Skip(i).Take(batchSize));
                progressCallback(new ExportImportProgressInfo($"{i} of {totalCount} inventories records have been imported"));
            }
            progressCallback(new ExportImportProgressInfo("The inventory module data has been imported"));
        }
        public void DoImport(Stream backupStream, Action <ExportImportProgressInfo> progressCallback)
        {
            var progressInfo   = new ExportImportProgressInfo();
            var inventoryInfos = new List <InventoryInfo>();

            using (var streamReader = new StreamReader(backupStream))
                using (var reader = new JsonTextReader(streamReader))
                {
                    while (reader.Read())
                    {
                        if (reader.TokenType == JsonToken.PropertyName)
                        {
                            var readerValue = reader.Value.ToString();

                            if (readerValue == "InventoryInfos")
                            {
                                reader.Read();

                                if (reader.TokenType == JsonToken.StartArray)
                                {
                                    reader.Read();

                                    while (reader.TokenType != JsonToken.EndArray)
                                    {
                                        var inventoryInfo = AbstractTypeFactory <InventoryInfo> .TryCreateInstance();

                                        inventoryInfo = _jsonSerializer.Deserialize(reader, inventoryInfo.GetType()) as InventoryInfo;
                                        inventoryInfos.Add(inventoryInfo);

                                        reader.Read();
                                    }
                                }
                            }
                            else if (readerValue == "FulfillmentCenters")
                            {
                                reader.Read();

                                var fulfillmentCentersType = AbstractTypeFactory <FulfillmentCenter> .TryCreateInstance().GetType().MakeArrayType();

                                var fulfillmentCenters = _jsonSerializer.Deserialize(reader, fulfillmentCentersType) as FulfillmentCenter[];

                                progressInfo.Description = $"The {fulfillmentCenters.Count()} fulfillmentCenters have been imported";
                                progressCallback(progressInfo);

                                _fulfillmentCenterService.SaveChanges(fulfillmentCenters);
                            }
                        }
                    }

                    // TODO: Need to handle saving inventories some way different as stream import does not make sense when all objects are in memory.
                    var totalCount = inventoryInfos.Count;
                    for (var i = 0; i < totalCount; i += BatchSize)
                    {
                        progressInfo.ProcessedCount += Math.Min(BatchSize, totalCount - i);
                        progressInfo.Description     = $"{progressInfo.ProcessedCount} inventories records have been imported";
                        progressCallback(progressInfo);

                        _inventoryService.UpsertInventories(inventoryInfos.Skip(i).Take(BatchSize).ToArray());
                    }
                }
        }
示例#3
0
 public IHttpActionResult SaveFulfillmentCenter(FulfillmentCenter center)
 {
     _fulfillmentCenterService.SaveChanges(new[] { center });
     return(Ok(center));
 }