From 74d3ecde2ad9dd0c6d6b9b20e4e94701175713ad Mon Sep 17 00:00:00 2001 From: shanj <18996038927@163.com> Date: Mon, 1 Aug 2022 03:23:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=85=A8=E9=83=A8=E4=BA=A7?= =?UTF-8?q?=E5=93=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/ProductSyncController.cs | 11 +- .../Sync/ProductSyncBusiness.cs | 177 ++++++++++-------- 2 files changed, 110 insertions(+), 78 deletions(-) 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); + } + } } }