Beispiel #1
0
        private void ResetCacheProduct(long companyID)
        {
            ProductAdapter productAdapter = new ProductAdapter(new SqlDb(ConfigCrawler.ConnectProduct));

            QT.Entities.Server.ConnectionString = ConfigCrawler.ConnectProduct;
            QT.Moduls.CrawlerProduct.Cache.CacheProductHash       cashProductHash        = QT.Moduls.CrawlerProduct.Cache.CacheProductHash.Instance();
            QT.Moduls.CrawlerProduct.Cache.RedisLastUpdateProduct cacheLastUpdateProduct = QT.Moduls.CrawlerProduct.Cache.RedisLastUpdateProduct.Instance();
            List <QT.Entities.CrawlerProduct.Cache.ProductHash>   lst = new List <QT.Entities.CrawlerProduct.Cache.ProductHash>();
            List <long> lstLastUpdate = new List <long>();
            Company     cmp           = new Company(companyID);

            productAdapter.DeleteProductUnvalidOfCOmpany(companyID);
            DataTable tbl = productAdapter.GetProductResetColumnDuplicateAndChange(companyID);

            foreach (DataRow rowProduct in tbl.Rows)
            {
                long   ProductId = QT.Entities.Common.Obj2Int64(rowProduct["ID"]);
                string Name = rowProduct["Name"].ToString();
                long   Price = QT.Entities.Common.Obj2Int64(rowProduct["Price"]);
                string ImageUrl = Convert.ToString(rowProduct["ImageUrls"]);
                string DetailUrl = Convert.ToString(rowProduct["DetailUrl"]);
                int    InStock = QT.Entities.Common.Obj2Int(rowProduct["InStock"]); long OriginPrice = QT.Entities.Common.Obj2Int(rowProduct["OriginPrice"]);
                bool   Valid            = QT.Entities.Common.Obj2Bool(rowProduct["Valid"]);
                string shortDescription = QT.Entities.Common.CellToString(rowProduct["ShortDescription"], "");
                bool   IsDeal           = QT.Entities.Common.Obj2Bool(rowProduct["IsDeal"]);
                long   CategoryID       = rowProduct["ClassificationID"] == DBNull.Value ? 0 : QT.Entities.Common.Obj2Int64(rowProduct["ClassificationID"]);
                long   HashChange       = QT.Entities.ProductEntity.GetHashChangeInfo(InStock, Valid, Price, Name, ImageUrl, CategoryID, shortDescription, OriginPrice);
                long   HashDuplicate    = QT.Entities.Product.GetHashDuplicate(cmp.Domain, Price, Name, ImageUrl);
                long   HashImage        = QT.Entities.Product.GetHashImageInfo(ImageUrl);
                lst.Add(new QT.Entities.CrawlerProduct.Cache.ProductHash()
                {
                    HashChange    = HashChange,
                    HashDuplicate = HashDuplicate,
                    HashImage     = HashImage,
                    Id            = ProductId,
                    Price         = Price,
                    url           = DetailUrl
                });
                lstLastUpdate.Add(ProductId);
            }
            cashProductHash.SetCacheProductHash(companyID, lst, 100);
            cacheLastUpdateProduct.RemoveAllLstProduct(companyID);
            cacheLastUpdateProduct.UpdateBathLastUpdateProduct(companyID, lstLastUpdate, DateTime.Now.AddDays(-1));
            productAdapter.UpdateCountProductForCompany(companyID, lstLastUpdate.Count, lstLastUpdate.Count);
            lst.Clear();
            lstLastUpdate.Clear();
            this.Invoke(new Action(() =>
            {
                try
                {
                    richTextBox1.AppendText(string.Format("Refresh Complete Company: {0}", _CompanyID));
                }
                catch (Exception ex01)
                {
                }
            }));
        }
Beispiel #2
0
        private static void ResetCacheProduct(long companyID)
        {
            CacheProductHash       cashProductHash        = CacheProductHash.Instance();
            RedisLastUpdateProduct cacheLastUpdateProduct = RedisLastUpdateProduct.Instance();
            List <ProductHash>     lst            = new List <ProductHash>();
            List <long>            lstLastUpdate  = new List <long>();
            ProductAdapter         productAdapter = new ProductAdapter(new SqlDb(Server.ConnectionString));
            Company cmp = new Company(companyID);

            productAdapter.DeleteProductUnvalidOfCOmpany(companyID);
            DataTable tbl = productAdapter.GetProductResetColumnDuplicateAndChange(companyID);

            foreach (DataRow rowProduct in tbl.Rows)
            {
                long   ProductID        = Common.Obj2Int64(rowProduct["ID"]);
                string Name             = rowProduct["Name"].ToString();
                long   Price            = Common.Obj2Int64(rowProduct["Price"]);
                string ImageUrl         = Convert.ToString(rowProduct["ImageUrls"]);
                string DetailUrl        = Convert.ToString(rowProduct["DetailUrl"]);
                int    InStock          = Common.Obj2Int(rowProduct["InStock"]);
                bool   Valid            = Common.Obj2Bool(rowProduct["Valid"]);
                string shortDescription = Common.CellToString(rowProduct["ShortDescription"], "");
                bool   IsDeal           = Common.Obj2Bool(rowProduct["IsDeal"]);
                long   CategoryID       = rowProduct["ClassificationID"] == DBNull.Value ? 0 : Common.Obj2Int64(rowProduct["ClassificationID"]);
                long   HashChange       = Product.GetHashChangeInfo(InStock, Valid, Price, Name, ImageUrl, CategoryID, shortDescription);
                long   HashDuplicate    = Product.GetHashCheckDuplicate(cmp.Domain, Price, Name, ImageUrl);
                long   HashImage        = Product.GetHashImageInfo(ImageUrl);
                lst.Add(new ProductHash()
                {
                    HashChange    = HashChange,
                    HashDuplicate = HashDuplicate,
                    HashImage     = HashImage,
                    Id            = ProductID,
                    Price         = Price,
                    url           = DetailUrl
                });
                lstLastUpdate.Add(ProductID);
            }
            cashProductHash.SetCacheProductHash(companyID, lst, 100);
            cacheLastUpdateProduct.RemoveAllLstProduct(companyID);
            cacheLastUpdateProduct.UpdateBathLastUpdateProduct(companyID, lstLastUpdate, DateTime.Now.AddDays(-1));
            productAdapter.UpdateCountProductForCompany(companyID, lstLastUpdate.Count, lstLastUpdate.Count);
            lst.Clear();
            lstLastUpdate.Clear();
        }
Beispiel #3
0
        public void Run(System.Threading.CancellationToken token)
        {
            ProductAdapter productAdapter = new ProductAdapter(new SqlDb("Data Source=42.112.28.93;Initial Catalog=QT_2;Persist Security Info=True;User ID=wss_price;Password=HzlRt4$$axzG-*UlpuL2gYDu;connection timeout=200"));

            log.InfoFormat("Start run at {0}", DateTime.Now.ToString(CultureInfo.InvariantCulture));
            CacheProductHash       cashProductHash        = CacheProductHash.Instance();
            RedisLastUpdateProduct cacheLastUpdateProduct = RedisLastUpdateProduct.Instance();
            int countProduct = 0;

            try
            {
                var lstFn = productAdapter.GetAllCompanyIdCrawlerFindNew();
                var lstRl = productAdapter.GetAllCompanyIdCrawlerReload();
                RedisCompanyWaitCrawler redisCache = RedisCompanyWaitCrawler.Instance();
                redisCache.SyncCompanyFindNew(lstFn);
                redisCache.SyncCompanyReload(lstRl);
            }
            catch (Exception ex)
            {
                log.Error(ex);
            }

            var lst           = new List <QT.Entities.CrawlerProduct.Cache.ProductHash>();
            var lstLastUpdate = new List <long>();
            var lstCompany    = productAdapter.GetAllCompanyIdCrawler();

            foreach (var companyID in lstCompany)
            {
                Company cmp = new Company(companyID);
                productAdapter.DeleteProductUnvalidOfCOmpany(companyID);
                DataTable tbl = productAdapter.GetProductResetColumnDuplicateAndChange(companyID);
                foreach (DataRow rowProduct in tbl.Rows)
                {
                    long   productId        = QT.Entities.Common.Obj2Int64(rowProduct["ID"]);
                    long   originPrice      = QT.Entities.Common.Obj2Int64(rowProduct["OriginPrice"]);
                    string name             = rowProduct["Name"].ToString();
                    long   price            = QT.Entities.Common.Obj2Int64(rowProduct["Price"]);
                    string imageUrl         = Convert.ToString(rowProduct["ImageUrls"]);
                    string detailUrl        = Convert.ToString(rowProduct["DetailUrl"]);
                    int    inStock          = QT.Entities.Common.Obj2Int(rowProduct["InStock"]);
                    bool   valid            = QT.Entities.Common.Obj2Bool(rowProduct["Valid"]);
                    string shortDescription = QT.Entities.Common.CellToString(rowProduct["ShortDescription"], "");
                    long   categoryId       = rowProduct["ClassificationID"] == DBNull.Value ? 0 : QT.Entities.Common.Obj2Int64(rowProduct["ClassificationID"]);
                    long   hashChange       = ProductEntity.GetHashChangeInfo(inStock, valid, price, name, imageUrl, categoryId, shortDescription, originPrice);
                    long   hashDuplicate    = Product.GetHashDuplicate(cmp.Domain, price, name, imageUrl);
                    long   hashImage        = Product.GetHashImageInfo(imageUrl);
                    lst.Add(new QT.Entities.CrawlerProduct.Cache.ProductHash()
                    {
                        HashChange    = hashChange,
                        HashDuplicate = hashDuplicate,
                        HashImage     = hashImage,
                        Id            = productId,
                        Price         = price,
                        url           = detailUrl
                    });
                    lstLastUpdate.Add(productId);
                }
                cashProductHash.SetCacheProductHash(companyID, lst, 100); cacheLastUpdateProduct.RemoveAllLstProduct(companyID);
                cacheLastUpdateProduct.UpdateBathLastUpdateProduct(companyID, lstLastUpdate, DateTime.Now.AddDays(-1));
                productAdapter.UpdateCountProductForCompany(companyID, lstLastUpdate.Count, lstLastUpdate.Count);
                lst.Clear();
                lstLastUpdate.Clear();
                log.Info(string.Format("Complete Company: {0} {1}/{2}", companyID, countProduct++, lstCompany.Count));
            }
            log.Info("Complete all company");
            NextRun = DateTime.Now.AddHours(MAX_HOUR_LOOP);
            log.InfoFormat("End at {0}", DateTime.Now.ToString());
        }