protected override void Process() { foreach (Connector connector in base.Connectors.Where(c => ((ConnectorType)c.ConnectorType).Has(ConnectorType.ShopAssortment))) { log.DebugFormat("Start Process shop Stock import for {0}", connector.Name); try { DateTime start = DateTime.Now; log.InfoFormat("Start process products:{0}", start); using (Concentrator.Web.ServiceClient.AssortmentService.AssortmentServiceSoapClient soap = new Concentrator.Web.ServiceClient.AssortmentService.AssortmentServiceSoapClient()) { products = new XDocument(soap.GetAssortmentContent(connector.ConnectorID, false, true, null, false)); log.Info("Start import Stock"); ShopUtility util = new ShopUtility(); util.ProcessStock(connector, log, products); log.Info("Finish import Stock"); } } catch (Exception ex) { log.Error("Error import shop ProcessProducts", ex); } log.DebugFormat("Finish Process shop import for {0}", connector.Name); } }
public void ImportRelatedProducts(WebsiteDataContext context, SelectorServiceSoapClient client, Concentrator.Web.ServiceClient.AssortmentService.AssortmentServiceSoapClient contentClient, Connector connector) { var selectorIDs = (from s in context.Selectors select s.SelectorID).ToList(); Processor processor = new Processor(new XDocument(), log, connector); foreach (int selectorID in selectorIDs) { var selectorProducts = client.GetAllSelectorProducts(selectorID, connector.ConnectorID); XDocument comparableProducts = XDocument.Parse(selectorProducts); int counter = 0; int total = comparableProducts.Root.Elements("RelatedProduct").Count(); List <Product> products = (from p in context.Products select p).ToList(); int totalRelatedproducts = total; foreach (var rProduct in comparableProducts.Root.Elements("RelatedProduct")) { if (counter == 50) { base.log.InfoFormat("Still need to process {0} of {1}; {2} done;", total, totalRelatedproducts, totalRelatedproducts - total); counter = 0; } total--; counter++; int concentratorProductID = int.Parse(rProduct.Attribute("ProductID").Value); Product product = null; //try //{ product = (from p in products where p.ConcentratorProductID.HasValue && (p.ConcentratorProductID.Value == concentratorProductID) select p).FirstOrDefault(); if (product == null) { continue; } foreach (var comparableProduct in rProduct.Elements("ComparableProducts").Elements("ComparableProduct")) { int relatedProductID = int.Parse(comparableProduct.Attribute("ProductID").Value); try { Product relatedProduct = (from p in products where p.ConcentratorProductID.HasValue && (p.ConcentratorProductID.Value == relatedProductID) select p).FirstOrDefault(); if (relatedProduct == null) { continue; } //insert related product RelatedProduct relatedProd = (from rp in context.RelatedProducts where rp.ProductID == product.ProductID && rp.RelatedProductID == relatedProduct.ProductID && rp.SelectorID == selectorID select rp).FirstOrDefault(); if (relatedProd == null) { context.RelatedProducts.InsertOnSubmit(new RelatedProduct { ProductID = product.ProductID, RelatedProductID = relatedProduct.ProductID, SelectorID = selectorID }); } context.SubmitChanges(); } catch (Exception ex) { log.ErrorFormat("Error process product {0} error {1}", relatedProductID, ex.StackTrace); } } } #region Cleanup var itemNumbers = comparableProducts.Root.Elements("RelatedProduct").ToDictionary(x => x.Attribute("ProductID").Value, x => x); List <RelatedProduct> unused = (from c in context.RelatedProducts select c).ToList(); foreach (var p in itemNumbers) { foreach (var v in p.Value.Elements("ComparableProducts").Elements("ComparableProduct")) { unused.RemoveAll(c => (c.Product.ConcentratorProductID.HasValue && c.Product.ConcentratorProductID.Value.ToString() == p.Key) && (c.Product1.ConcentratorProductID.HasValue && c.Product1.ConcentratorProductID.Value.ToString() == v.Attribute("ProductID").Value)); } } #endregion if (unused != null && unused.Count > 0) { context.RelatedProducts.DeleteAllOnSubmit(unused); context.SubmitChanges(); } } }