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); } }
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); } }