Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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();
                }
            }
        }