diff --git a/BBWY.Server.API/Controllers/ProductSyncController.cs b/BBWY.Server.API/Controllers/ProductSyncController.cs
index 7b9c2f17..87256174 100644
--- a/BBWY.Server.API/Controllers/ProductSyncController.cs
+++ b/BBWY.Server.API/Controllers/ProductSyncController.cs
@@ -14,12 +14,21 @@ namespace BBWY.Server.API.Controllers
}
///
- /// 全店同步产品
+ /// 全店同步产品(前50)
///
[HttpPost]
public void SyncAllShopProduct()
{
productSyncBusiness.SyncAllShopProduct();
}
+
+ ///
+ /// 全店同步产品(全部产品)
+ ///
+ [HttpPost]
+ public void SyncAllShopAllProduct()
+ {
+ productSyncBusiness.SyncAllShopAllProduct();
+ }
}
}
diff --git a/BBWY.Server.Business/Sync/ProductSyncBusiness.cs b/BBWY.Server.Business/Sync/ProductSyncBusiness.cs
index e47b3eb3..5065b3c7 100644
--- a/BBWY.Server.Business/Sync/ProductSyncBusiness.cs
+++ b/BBWY.Server.Business/Sync/ProductSyncBusiness.cs
@@ -37,103 +37,113 @@ namespace BBWY.Server.Business.Sync
this.productBusiness = productBusiness;
}
- private void SyncProduct(ShopResponse shop)
+ private void SyncProduct(ShopResponse shop, ProductListResponse productList)
{
- try
+ var shopId = long.Parse(shop.ShopId);
+ List insertProductList = new List();
+ List> updateProductList = new List>();
+
+ List inserSkuList = new List();
+ List> updateProductSkuList = new List>();
+
+ var productIds = productList.Items.Select(p => p.Id);
+ var dbProducts = fsql.Select().Where(p => p.ShopId == shopId && productIds.Contains(p.Id)).ToList();
+ var dbProductSkus = fsql.Select().Where(s => s.ShopId == shopId && productIds.Contains(s.ProductId)).ToList();
+
+ foreach (var product in productList.Items)
{
- var shopId = long.Parse(shop.ShopId);
- var productList = productBusiness.GetProductList(new SearchProductRequest()
+ var dbProduct = dbProducts.FirstOrDefault(dbp => dbp.Id == product.Id);
+ if (dbProduct == null)
+ {
+ insertProductList.Add(new Product()
+ {
+ Id = product.Id,
+ CreateTime = DateTime.Now,
+ Platform = shop.PlatformId,
+ ProductItemNum = product.ProductItemNum,
+ ShopId = shopId,
+ Title = product.Title,
+ State = product.State
+ });
+ }
+ else if (dbProduct.State != product.State)
+ {
+ var update = fsql.Update(product.Id).Set(p => p.State, dbProduct.State);
+ updateProductList.Add(update);
+ }
+
+ var skuList = productBusiness.GetProductSkuList(new SearchProductSkuRequest()
{
- PageSize = 50,
- PageIndex = 1,
AppKey = shop.AppKey,
AppSecret = shop.AppSecret,
AppToken = shop.AppToken,
- Platform = shop.PlatformId
+ Platform = shop.PlatformId,
+ Spu = product.Id
});
- if (productList == null || productList.Count == 0)
- return;
-
- List insertProductList = new List();
- List> updateProductList = new List>();
-
- List inserSkuList = new List();
- List> updateProductSkuList = new List>();
-
- var productIds = productList.Items.Select(p => p.Id);
- var dbProducts = fsql.Select().Where(p => p.ShopId == shopId && productIds.Contains(p.Id)).ToList();
- var dbProductSkus = fsql.Select().Where(s => s.ShopId == shopId && productIds.Contains(s.ProductId)).ToList();
-
- foreach (var product in productList.Items)
+ foreach (var sku in skuList)
{
- var dbProduct = dbProducts.FirstOrDefault(dbp => dbp.Id == product.Id);
- if (dbProduct == null)
+ var dbSku = dbProductSkus.FirstOrDefault(s => s.Id == sku.Id);
+ if (dbSku == null)
{
- insertProductList.Add(new Product()
+ inserSkuList.Add(new ProductSku()
{
- Id = product.Id,
+ Id = sku.Id,
CreateTime = DateTime.Now,
+ Logo = sku.Logo,
Platform = shop.PlatformId,
- ProductItemNum = product.ProductItemNum,
+ Price = sku.Price,
+ ProductId = sku.ProductId,
ShopId = shopId,
- Title = product.Title,
- State = product.State
+ Title = sku.Title,
+ State = sku.State
});
}
- else if (dbProduct.State != product.State)
+ else if (dbSku.State != sku.State || dbSku.Price != sku.Price)
{
- var update = fsql.Update(product.Id).Set(p => p.State, dbProduct.State);
- updateProductList.Add(update);
+ var update = fsql.Update(dbSku.Id).Set(s => s.State, sku.State).Set(s => s.Price, sku.Price);
+ updateProductSkuList.Add(update);
}
+ }
+ }
- var skuList = productBusiness.GetProductSkuList(new SearchProductSkuRequest()
- {
- AppKey = shop.AppKey,
- AppSecret = shop.AppSecret,
- AppToken = shop.AppToken,
- Platform = shop.PlatformId,
- Spu = product.Id
- });
+ fsql.Transaction(() =>
+ {
+ fsql.Insert(insertProductList).ExecuteAffrows();
+ fsql.Insert(inserSkuList).ExecuteAffrows();
+ if (updateProductList.Count > 0)
+ foreach (var update in updateProductList)
+ update.ExecuteAffrows();
+ if (updateProductSkuList.Count > 0)
+ foreach (var update in updateProductSkuList)
+ update.ExecuteAffrows();
- foreach (var sku in skuList)
- {
- var dbSku = dbProductSkus.FirstOrDefault(s => s.Id == sku.Id);
- if (dbSku == null)
- {
- inserSkuList.Add(new ProductSku()
- {
- Id = sku.Id,
- CreateTime = DateTime.Now,
- Logo = sku.Logo,
- Platform = shop.PlatformId,
- Price = sku.Price,
- ProductId = sku.ProductId,
- ShopId = shopId,
- Title = sku.Title,
- State = sku.State
- });
- }
- else if (dbSku.State != sku.State || dbSku.Price != sku.Price)
- {
- var update = fsql.Update(dbSku.Id).Set(s => s.State, sku.State).Set(s => s.Price, sku.Price);
- updateProductSkuList.Add(update);
- }
- }
- }
+ });
+ }
- fsql.Transaction(() =>
+ private void SyncProduct(ShopResponse shop, bool IsSyncAllProduct = false)
+ {
+ try
+ {
+ var request = new SearchProductRequest()
{
- fsql.Insert(insertProductList).ExecuteAffrows();
- fsql.Insert(inserSkuList).ExecuteAffrows();
- if (updateProductList.Count > 0)
- foreach (var update in updateProductList)
- update.ExecuteAffrows();
- if (updateProductSkuList.Count > 0)
- foreach (var update in updateProductSkuList)
- update.ExecuteAffrows();
-
- });
+ PageSize = 50,
+ PageIndex = 1,
+ AppKey = shop.AppKey,
+ AppSecret = shop.AppSecret,
+ AppToken = shop.AppToken,
+ Platform = shop.PlatformId
+ };
+ while (true)
+ {
+ var productList = productBusiness.GetProductList(request);
+ if (productList == null || productList.Count == 0)
+ return;
+ SyncProduct(shop, productList);
+ if (productList.Items.Count < 50 || !IsSyncAllProduct)
+ break;
+ request.PageIndex++;
+ }
}
catch (Exception ex)
{
@@ -143,17 +153,30 @@ namespace BBWY.Server.Business.Sync
}
///
- /// 同步所有店铺的订单
+ /// 同步所有店铺的前50个产品
///
public void SyncAllShopProduct()
{
var shopList = venderBusiness.GetShopList();
- //SyncProduct(shopList[0]);
+ //SyncProduct(shopList.FirstOrDefault(s => s.ShopId == "10388155"), true); //布莱特玩具专营店
foreach (var shop in shopList)
{
Task.Factory.StartNew(() => SyncProduct(shop), System.Threading.CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.ProductSyncTaskScheduler);
}
}
+
+ ///
+ /// 同步所有店铺的全部产品
+ ///
+ public void SyncAllShopAllProduct()
+ {
+ var shopList = venderBusiness.GetShopList();
+ //SyncProduct(shopList.FirstOrDefault(s => s.ShopId == "10388155"), true); //布莱特玩具专营店
+ foreach (var shop in shopList)
+ {
+ Task.Factory.StartNew(() => SyncProduct(shop, true), System.Threading.CancellationToken.None, TaskCreationOptions.LongRunning, taskSchedulerManager.ProductSyncTaskScheduler);
+ }
+ }
}
}