Ejemplo n.º 1
0
        public void Sync(DateTime benchTime)
        {
            var pageIndex          = 1;
            var lastUpdateDateTime = benchTime;

            while (true)
            {
                var products = _remoteRepository.GetProductList(pageIndex, PageSize, lastUpdateDateTime).ToList();

                if (products.Count == 0)
                {
                    Log.ErrorFormat("没有可同步的信息,pageIndex:{0},pageSize:{1},lastUpdateDatetime:{2}", pageIndex, PageSize, lastUpdateDateTime);
                    break;
                }

                Log.InfoFormat("开始处理第{0}页商品,获取商品{1}", pageIndex, products.Count);

                foreach (var product in products)
                {
                    if (string.IsNullOrEmpty(product.ProductId))
                    {
                        Log.ErrorFormat("Failed to sync product, productid is empty {0}", product.ProductCode);
                        continue;
                    }
                    try
                    {
                        //同步商品
                        var p = _productSyncProcessor.Sync(product);

                        // 如果商品同步失败,跳过当前商品
                        if (p == null)
                        {
                            Log.ErrorFormat("同步商品失败 productId:{0},section:{1},storeNo:{2}", product.ProductId,
                                            product.SectionId, product.StoreNo);
                            continue;
                        }


                        //// 同步商品花色属性
                        //var color = _productPropertySyncHandler.SyncColor(p.Id, product);
                        //if (color == null)
                        //{
                        //    Log.ErrorFormat("同步商品花色属性失败productId:{0},color:{1},colorId:{2}", p.Id,
                        //        product.Color, product.ColorId);
                        //    continue;
                        //}

                        // 同步商品花色属性
                        var color = _productPropertySyncProcessor.Sync(p.Id, product.Color, product.ColorId,
                                                                       ProductPropertyType.Color);
                        if (color == null)
                        {
                            Log.ErrorFormat("同步商品花色属性失败productId:{0},color:{1},colorId:{2}", p.Id,
                                            product.Color, product.ColorId);
                            continue;
                        }


                        // 同步商品尺码属性
                        var size = _productPropertySyncHandler.SyncSize(p.Id, product);

                        if (size == null)
                        {
                            Log.ErrorFormat("同步商品尺码属性失败productId:{0},size:{1},sizeId:{2}", p.Id,
                                            product.Size, product.SizeId);
                            continue;
                        }


                        // 同步SKU
                        var sku = _skuSyncProcessor.Sync(p.Id, color.Id, size.Id);
                        if (sku == null)
                        {
                            Log.ErrorFormat("同步SKU失败 productId:{0},colorId:{1},sizeId:{2}", p.Id, color.Id, size.Id);
                            continue;
                        }

                        // 同步库存
                        var stock = _stockSyncProcessor.Sync(sku.Id, product);

                        if (stock == null)
                        {
                            Log.ErrorFormat(
                                "库存更新失败 skuId:{0},channelSectionid:{1},channelStore:{2},stock:{3},channelPrice:{4},sourceStockId:{5}",
                                sku.Id, product.SectionId, product.StoreNo, product.Stock, product.CurrentPrice,
                                product.ProductId);
                        }

                        var inventory = _inventorySyncProcessor.Sync(sku);
                        if (inventory == null)
                        {
                            Log.InfoFormat("未叠加库存");
                        }
                        else
                        {
                            _brandSizeProcessor.Process(product, inventory);
                        }
                    }
                    catch (Exception ex)
                    {
                        // 这里异常处理防止接口出现问题,造成别的商品同步也会出现问题
                        Log.ErrorFormat("同步商品发生异常,proudctId:{0}", product.ProductId);
                        Log.Error(ex);
                    }
                }

                // 进行下一页
                pageIndex += 1;

                Thread.Sleep(50);
            }
        }
Ejemplo n.º 2
0
        private int Sync(ProductDto product)
        {
            using (var db = new YintaiHZhouContext())
            {
                var brandMapExt = _channelMapper.GetMapByChannelValue(product.BrandId, ChannelMapType.Brand);
                if (brandMapExt == null)
                {
                    return(0);
                }
                var brand          = db.Brands.FirstOrDefault(b => b.Id == brandMapExt.LocalId);
                var mapKey         = string.Format("{1}-{0}", product.ProductCode, brand.Id);
                var productCodeMap = _channelMapper.GetMapByChannelValue(mapKey, ChannelMapType.ProductCode);
                if (productCodeMap == null)
                {
                    return(0);
                }
                var p = db.Products.FirstOrDefault(x => x.Id == productCodeMap.LocalId);
                if (p == null)
                {
                    return(0);
                }

                var color = _productPropertySyncProcessor.SyncColor(p.Id, product);
                if (color == null)
                {
                    return(0);
                }

                var size = _productPropertySyncProcessor.SyncSize(p.Id, product);

                if (size == null)
                {
                    return(0);
                }

                var sku =
                    db.OPC_SKU.FirstOrDefault(
                        x => x.ColorValueId == color.Id && x.SizeValueId == size.Id && x.ProductId == p.Id);

                if (sku == null)
                {
                    return(0);
                }
                var stock =
                    db.OPC_Stock.FirstOrDefault(
                        x => x.SkuId == sku.Id && x.SourceStockId == product.ProductId && x.StoreCode == product.StoreNo);

                if (stock == null)
                {
                    return(0);
                }

                stock.Count           = Convert.ToInt32(decimal.Floor(product.Stock ?? 0));
                stock.UpdatedDate     = DateTime.Now;
                stock.UpdatedUser     = SystemDefine.SystemUser;
                db.Entry(stock).State = EntityState.Modified;
                p.Is4Sale             = true;
                p.Price           = product.CurrentPrice;
                p.UnitPrice       = product.LabelPrice;
                p.UpdatedDate     = DateTime.Now;
                p.UpdatedUser     = SystemDefine.SystemUser;
                db.Entry(p).State = EntityState.Modified;
                db.SaveChanges();
                var inventory = _inventorySyncProcessor.Sync(sku);
                if (inventory == null)
                {
                    return(0);
                }
                return(1);
            }
        }