|
|
@ -11,6 +11,7 @@ using BBWY.Server.Model.Db; |
|
|
|
using System; |
|
|
|
using System.Collections.Generic; |
|
|
|
using Newtonsoft.Json; |
|
|
|
using FreeSql; |
|
|
|
|
|
|
|
namespace BBWY.Server.Business.Sync |
|
|
|
{ |
|
|
@ -54,22 +55,38 @@ namespace BBWY.Server.Business.Sync |
|
|
|
if (productList == null || productList.Count == 0) |
|
|
|
return; |
|
|
|
|
|
|
|
List<Product> insertProductList = new List<Product>(); |
|
|
|
List<IUpdate<Product>> updateProductList = new List<IUpdate<Product>>(); |
|
|
|
|
|
|
|
List<ProductSku> inserSkuList = new List<ProductSku>(); |
|
|
|
List<IUpdate<ProductSku>> updateProductSkuList = new List<IUpdate<ProductSku>>(); |
|
|
|
|
|
|
|
var productIds = productList.Items.Select(p => p.Id); |
|
|
|
var dbProducts = fsql.Select<Product>().Where(p => p.ShopId == shopId && productIds.Contains(p.Id)).ToList(); |
|
|
|
var dbProductSkus = fsql.Select<ProductSku>().Where(s => s.ShopId == shopId && productIds.Contains(s.ProductId)).ToList(); |
|
|
|
|
|
|
|
var insertProductList = productList.Items.Select(p => new Product() |
|
|
|
foreach (var product in productList.Items) |
|
|
|
{ |
|
|
|
Id = p.Id, |
|
|
|
CreateTime = DateTime.Now, |
|
|
|
Platform = shop.PlatformId, |
|
|
|
ProductItemNum = p.ProductItemNum, |
|
|
|
ShopId = shopId, |
|
|
|
Title = p.Title, |
|
|
|
State = p.State |
|
|
|
}).ToList(); |
|
|
|
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>(product.Id).Set(p => p.State, dbProduct.State); |
|
|
|
updateProductList.Add(update); |
|
|
|
} |
|
|
|
|
|
|
|
var inserSkuList = new List<ProductSku>(); |
|
|
|
foreach (var product in insertProductList) |
|
|
|
{ |
|
|
|
var skuList = productBusiness.GetProductSkuList(new SearchProductSkuRequest() |
|
|
|
{ |
|
|
|
AppKey = shop.AppKey, |
|
|
@ -78,26 +95,44 @@ namespace BBWY.Server.Business.Sync |
|
|
|
Platform = shop.PlatformId, |
|
|
|
Spu = product.Id |
|
|
|
}); |
|
|
|
inserSkuList.AddRange(skuList.Select(s => new ProductSku() |
|
|
|
|
|
|
|
foreach (var sku in skuList) |
|
|
|
{ |
|
|
|
Id = s.Id, |
|
|
|
CreateTime = DateTime.Now, |
|
|
|
Logo = s.Logo, |
|
|
|
Platform = shop.PlatformId, |
|
|
|
Price = s.Price, |
|
|
|
ProductId = s.ProductId, |
|
|
|
ShopId = shopId, |
|
|
|
Title = s.Title, |
|
|
|
State = s.State |
|
|
|
})); |
|
|
|
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<ProductSku>(dbSku.Id).Set(s => s.State, sku.State).Set(s => s.Price, sku.Price); |
|
|
|
updateProductSkuList.Add(update); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
fsql.Transaction(() => |
|
|
|
{ |
|
|
|
fsql.Delete<Product>().Where(p => p.ShopId == shopId && productIds.Contains(p.Id)).ExecuteAffrows(); |
|
|
|
fsql.Delete<ProductSku>().Where(s => s.ShopId == shopId && productIds.Contains(s.ProductId)).ExecuteAffrows(); |
|
|
|
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(); |
|
|
|
|
|
|
|
}); |
|
|
|
} |
|
|
|
catch (Exception ex) |
|
|
|